diff --git a/xcb.patch b/xcb.patch index e67a1fa..586a711 100644 --- a/xcb.patch +++ b/xcb.patch @@ -1,463731 +1,29 @@ -diff -urNr keepassxc-2.6.4-orig/CHANGELOG.md keepassxc-2.6.4-patched/CHANGELOG.md ---- keepassxc-2.6.4-orig/CHANGELOG.md 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,855 +0,0 @@ --# Changelog -- --## 2.6.4 (2021-01-31) -- --### Added -- --- Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034] -- --### Changed -- --- Show window title as tooltip on system tray [#5948] --- Compress Snap release as LZO for faster initial startup [#5877] --- Password generator: Set maximum selectable password length to 999 [#5937] -- --### Fixed -- --- Fix crash on app close when using SSH agent [#5935] --- Fix KDF selection showing wrong item when using Argon2id [#5923] --- Automatically close About dialog on database lock if it is still open [#5947] --- Linux: Fix automatic launch at system startup with AppImages [#5901] --- Linux: Fix click-to-move on empty area activating when using menus [#5971] --- Linux: Try multiple times to show tray icon if tray is not ready yet [#5948] --- macOS: Fix KeePassXC blocking clean shutdown [#6002] -- --## 2.6.3 (2021-01-12) -- --### Added -- --- Support Argon2id KDF [#5778] --- Support XMLv2 key files [#5798] -- --### Changed -- --- Improve CSV Import/Export, include time fields and TOTP [#5346] --- Support empty area dragging of the application window [#5860] --- Display default Auto-Type sequence in preview pane [#5654] --- Remove strict length limit on generated passwords [#5748] --- Hide key file path by default when unlocking database [#5779] --- Document browser extension use with Edge in managed mode [#5692] --- Windows: Prevent clipboard history and cloud sync [#5853] --- macOS: Update the application icon to Big Sur styling [#5851] -- --### Fixed -- --- Re-select previously selected entry on database unlock [#5559] --- Properly save special character choice in password generator [#5610] --- Fix crash in browser integration with multiple similar entries [#5653] --- Remove offset on username field in classic theme [#5788] --- Ensure entry history is copied when drag/dropping entries and groups [#5817] --- Close modal dialogs when database is locked [#5820] --- Prevent crash when KeeShare modifies an entry that is currently being edited [#5827] --- Improve preview of entry attributes [#5834] --- Always activate/focus database open dialog preventing mistype [#5878] --- Reports: fix calculation of average password length [#5862] --- Linux: Delay startup on login to correct tray icon issues [#5724] -- --## 2.6.2 (2020-10-21) -- --### Added -- --- Add option to keep window always on top to view menu [#5542] --- Move show/hide usernames and passwords to view menu [#5542] --- Add command line options and environment variables for changing the config locations [#5452] --- Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346] -- --### Changed -- --- Mask sensitive information in command execution confirmation prompt [#5542] --- SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484] -- --### Fixed -- --- Prevent data loss with drag and drop between databases [#5536] --- Fix crash when toggling Capslock rapidly [#5545] --- Don't mark URL references as invalid URL [#5380] --- Reset entry preview after search [#5483] --- Set Qt::Dialog flag on database open dialog [#5356] --- Fix sorting of database report columns [#5426] --- Fix IfDevice matching logic [#5344] --- Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424] --- Fix tabbing into the notes field [#5424] --- Fix password generator ignoring settings on load [#5340] --- Restore natural entry sort order on application load [#5438] --- Fix paperclip and TOTP columns not saving state [#5327] --- Enforce fixed password font in entry preview [#5454] --- Add scrollbar when new database wizard exceeds screen size [#5560] --- Do not mark database as modified when viewing Auto-Type associations [#5542] --- CLI: Fix two heap-use-after-free crashes [#5368,#5470] --- Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485] --- Browser: Fix entry retrieval when "only best matching" is enabled [#5316] --- Browser: Ignore recycle bin on KeePassHTTP migration [#5481] --- KeeShare: Fix import crash [#5542] --- macOS: Fix toolbar theming and breadcrumb display issues [#5482] --- macOS: Fix file dialog randomly closing [#5479] --- macOS: Fix being unable to select OPVault files for import [#5341] -- --## 2.6.1 (2020-08-19) -- --### Added -- --- Add menu entries for auto-typing only username or only password [#4891] --- Browser: Add command for retrieving current TOTP [#5278] --- Improve man pages [#5010] --- Linux: Support Xfce screen lock signals [#4971] --- Linux: Add OARS metadata to AppStream markup [#5031] --- SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116] -- --### Changed -- --- Improve password generator UI and UX [#5129] --- Do not prompt to restart if switching the theme back and forth [#5084] --- Change actions for F1, F2, and F3 keys [#5082] --- Skip referenced passwords in health check report [#5056] --- Check system-wide Qt translations directory for downstream translations packaging [#5064] --- macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114] --- Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214] -- --### Fixed -- --- Fix clipboard not being cleared when database is locked while timeout is still active [#5184] --- Fix list of previous databases not being cleared in some cases [#5123] --- Fix saving of non-data changes on database lock [#5210] --- Fix search results banner theming [#5197] --- Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267] --- Fix label clipping in settings on high-DPI screens [#5227] --- Fix excessive memory usage by icons on systems with high-DPI screens [#5266] --- Fix crash if number of TOTP digits exceeds ten [#5106] --- Fix slot detection when first YubiKey is configured on the second slot [#5004] --- Prevent crash if focus widget gets deleted during saving [#5005] --- Always show buttons for opening or saving attachments [#4956] --- Update link to Auto-Type help [#5228] --- Fix build errors with Ninja [#5121] --- CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140] --- Windows: Use Classic theme by default if high-contrast mode is on [#5191] --- Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011] --- Linux: Correct high-DPI display by not allowing fractional scaling [#5185] --- Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832] --- SSH Agent: Always forget all keys on lock [#5115] -- --## 2.6.0 (2020-07-06) -- --### Added -- --- Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915] --- Compact mode to use classic Group and Entry line height [#4910] --- New monochrome tray icons [#4796, #4803] --- View menu to quickly switch themes, compact mode, and toggle UI elements [#4910] --- Search for groups and scope search to matched groups [#4705] --- Save Database Backup feature [#4550] --- Sort entries by "natural order" and move lines up/down [#4357] --- Option to launch KeePassXC on system startup/login [#4675] --- Caps Lock warning on password input fields [#3646] --- Add "Size" column to entry view [#4588] --- Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305] --- Password Generator: Define additional characters to choose from [#3876] --- Reports: Database password health check (offline) [#3993] --- Reports: HIBP online service to check for breached passwords [#4438] --- Auto-Type: DateTime placeholders [#4409] --- Browser: Show group name in results sent to browser extension [#4111] --- Browser: Ability to define a custom browser location (macOS and Linux only) [#4148] --- Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591] --- CLI: `db-info` command [#4231] --- CLI: Use wl-clipboard if xclip is not available (Linux) [#4323] --- CLI: Incorporate xclip into snap builds [#4697] --- SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545] --- SSH Agent: Context menu actions to add/remove keys [#4290] -- --### Changed -- --- Complete replacement of default database icons [#4699] --- Complete replacement of application icons [#4066, #4161, #4203, #4411] --- Complete rewrite of documentation and manpages using Asciidoctor [#4937] --- Complete refactor of config files; separate between local and roaming [#4665] --- Complete refactor of browser integration and proxy code [#4680] --- Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843] --- Significantly improve performance when saving and opening databases [#4309, #4833] --- Remove read-only detection for database files [#4508] --- Overhaul of password fields and password generator [#4367] --- Replace instances of "Master Key" with "Database Credentials" [#4929] --- Change settings checkboxes to positive phrasing for consistency [#4715] --- Improve UX of using entry actions (focus fix) [#3893] --- Set expiration time to Now when enabling entry expiration [#4406] --- Always show "New Entry" in context menu [#4617] --- Issue warning before adding large attachments [#4651] --- Improve importing OPVault [#4630] --- Improve AutoOpen capability [#3901, #4752] --- Check for updates every 7 days even while still running [#4752] --- Improve Windows installer UI/UX [#4675] --- Improve config file handling of portable distribution [#4131, #4752] --- macOS: Hide dock icon when application is hidden to tray [#4782] --- Browser: Use unlock dialog to improve UX of opening a locked database [#3698] --- Browser: Improve database and entry settings experience [#4392, #4591] --- Browser: Improve confirm access dialog [#2143, #4660] --- KeeShare: Improve monitoring file changes of shares [#4720] --- CLI: Rename `create` command to `db-create` [#4231] --- CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313] --- CLI: Use stderr for help text and password prompts [#4086, #4623] --- FdoSecrets: Display existing secret service process [#4128] -- --### Fixed -- --- Fix changing focus around the main window using tab key [#4641] --- Fix search field clearing while still using the application [#4368] --- Improve search help widget displaying on macOS and Linux [#4236] --- Return keyboard focus after editing an entry [#4287] --- Reset database path after failed "Save As" [#4526] --- Make builds reproducible [#4411] --- Improve handling of ccache when building [#4104, #4335] --- Windows: Use correct UI font and size [#4769] --- macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909] --- Linux: Fix version number not embedded in AppImage [#4842] --- Auto-Type: Fix crash when performing on new entry [#4132] --- Browser: Send legacy HTTP settings to recycle bin [#4589] --- Browser: Fix merging browser keys [#4685] --- CLI: Fix encoding when exporting database [#3921] --- SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595] --- FdoSecrets: Fix crash when editing settings before service is enabled [#4332] -- --## 2.5.4 (2020-04-09) -- --### Fixed -- --- Return keyboard focus after saving database edits [#4287] --- Windows: Use bare minimum settings in portable version [#4131] --- Windows: Use SHA256 code signing [#4129] --- macOS: Fix code signing incompatibility in latest macOS release [#4564] -- --## 2.5.3 (2020-01-19) -- --### Fixed -- --- Fix a possible database lockout when removing a YubiKey from a KDBX 3.1 database [#4147] --- Fix crash if Auto-Type is performed on a new entry [#4150] --- Fix crash when all entries are deleted from a group [#4156] --- Improve the reliability of clipboard clearing on Gnome [#4165] --- Do not check cmd:// URLs for valid URL syntax anymore [#4172] --- Prevent unnecessary merges for databases on network shares [#4153] --- Browser: Prevent native messaging proxy from blocking application shutdown [#4155] --- Browser: Improve website URL matching [#4134, #4177] -- --### Added -- --- Browser: Enable support for Chromium-based Edge Browser [#3359] -- --## 2.5.2 (2020-01-04) -- --### Added -- --- Browser: Show UI warning when entering invalid URLs [#3912] --- Browser: Option to use an entry only for HTTP auth [#3927] -- --### Changed -- --- Disable the user interface when merging or saving the database [#3991] --- Ability to hide protected attribute after reveal [#3877] --- Remove mention of "snaps" in Windows and macOS [#3879] --- CLI: Merge parameter for source database key file (--key-file-from) [#3961] --- Improve GUI tests reliability on Hi-DPI displays [#4075] --- Disable deprecation warnings to allow building with Qt 5.14+ [#4075] --- OPVault: Use 'otp' attribute for TOTP field imports [#4075] -- --### Fixed -- --- Fix crashes when saving a database to cloud storage [#3991] --- Fix crash when pressing enter twice while opening database [#3885] --- Fix handling of HTML when displayed in the entry preview panel [#3910] --- Fix start minimized to tray on Linux [#3899] --- Fix Auto Open with key file only databases [#4075] --- Fix escape key closing the standalone password generator [#3892] --- macOS: Fix monospace font usage in password field and notes [#4075] --- macOS: Fix building on macOS 10.9 to 10.11 [#3946] --- Fix TOTP setup dialog not closing on database lock [#4075] --- Browser: Fix condition where additional URLs are ignored [#4033] --- Browser: Fix subdomain matching to return only relevant site entries [#3854] --- Secret Service: Fix multiple crashes and incompatibilities [#3871, #4009, #4074] --- Secret Service: Fix searching of entries [#4008, #4036] --- Secret Service: Fix behavior when exposed group is recycled [#3914] --- CLI: Release the database instance before exiting interactive mode [#3889] --- Fix (most) memory leaks in tests [#3922] -- --## 2.5.1 (2019-11-11) -- --### Added -- --- Add programmatic use of the EntrySearcher [#3760] --- Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824] --- macOS: Add ability to perform notarization of built package [#3827] -- --### Changed -- --- Reduce file hash checking to every 30 seconds to correct performance issues [#3724] --- Correct formatting of notes in entry preview widget [#3727] --- Improve performance and UX of database statistics page [#3780] --- Improve interface for key file selection to discourage use of the database file [#3807] --- Hide Auto-Type sequences column when not needed [#3794] --- macOS: Revert back to using Carbon API for hotkey detection [#3794] --- CLI: Do not show protected fields by default [#3710] -- --### Fixed -- --- Secret Service: Correct issues interfacing with various applications [#3761] --- Fix building without additional features [#3693] --- Fix handling TOTP secret keys that require padding [#3764] --- Fix database unlock dialog password field focus [#3764] --- Correctly label open databases as locked on launch [#3764] --- Prevent infinite recursion when two databases AutoOpen each other [#3764] --- Browser: Fix incorrect matching of invalid URLs [#3759] --- Properly stylize the application name on Linux [#3775] --- Show application icon on Plasma Wayland sessions [#3777] --- macOS: Check for Auto-Type permissions on use instead of at launch [#3794] -- --## 2.5.0 (2019-10-26) -- --### Added -- --- Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277] --- Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034] --- Add offline user manual accessible via the 'Help' menu [#3274] --- Add support for importing 1Password OpVault files [#2292] --- Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726] --- Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352] --- Add group sorting feature [#3282] --- Add feature to download favicons for all entries at once [#3169] --- Add word case option to passphrase generator [#3172] --- Add support for RFC6238-compliant TOTP hashes [#2972] --- Add UNIX man page for main program [#3665] --- Add 'Monospaced font' option to the notes field [#3321] --- Add support for key files in auto open [#3504] --- Add search field for filtering entries in Auto-Type dialog [#2955] --- Complete usernames based on known usernames from other entries [#3300] --- Parse hyperlinks in the notes field of the entry preview pane [#3596] --- Allow abbreviation of field names in entry search [#3440] --- Allow setting group icons recursively [#3273] --- Add copy context menu for username and password in Auto-Type dialog [#3038] --- Drop to background after copying a password to the clipboard [#3253] --- Add 'Lock databases' entry to tray icon menu [#2896] --- Add option to minimize window after unlocking [#3439] --- Add option to minimize window after opening a URL [#3302] --- Request accessibility permissions for Auto-Type on macOS [#3624] --- Browser: Add initial support for multiple URLs [#3558] --- Browser: Add entry-specific browser integration settings [#3444] --- CLI: Add offline HIBP checker (requires a downloaded HIBP dump) [#2707] --- CLI: Add 'flatten' option to the 'ls' command [#3276] --- CLI: Add password generation options to `Add` and `Edit` commands [#3275] --- CLI: Add XML import [#3572] --- CLI: Add CSV export to the 'export' command [#3278] --- CLI: Add `-y --yubikey` option for YubiKey [#3416] --- CLI: Add `--dry-run` option for merging databases [#3254] --- CLI: Add group commands (mv, mkdir and rmdir) [#3313]. --- CLI: Add interactive shell mode command `open` [#3224] -- -- --### Changed -- --- Redesign database unlock dialog [ #3287] --- Rework the entry preview panel [ #3306] --- Move notes to General tab on Group Preview Panel [#3336] --- Enable entry actions when editing an entry and cleanup entry context menu [#3641] --- Improve detection of external database changes [#2389] --- Warn if user is trying to use a KDBX file as a key file [#3625] --- Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344] --- Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341] --- Add icon to 'Toggle Window' action in tray icon menu [#3244] --- Merge custom data between databases only when necessary [#3475] --- Improve various file-handling related issues when picking files using the system's file dialog [#3473] --- Add 'New Entry' context menu when no entries are selected [#3671] --- Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [ #3672] --- Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371] --- Browser: Show database name when pairing with a new browser [#3638] --- Browser: Show URL in allow access dialog [#3639] --- CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275] --- CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275] --- CLI: Rename command `extract` to `export`. [#3277] -- --### Fixed -- --- Improve accessibility for assistive technologies [#3409] --- Correctly unlock all databases if `--pw-stdin` is provided [#2916] --- Fix password generator issues with special characters [#3303] --- Fix KeePassXC interrupting shutdown procedure [#3666] --- Fix password visibility toggle button state on unlock dialog [#3312] --- Fix potential data loss if database is reloaded while user is editing an entry [#3656] --- Fix hard-coded background color in search help popup [#3001] --- Fix font choice for password preview [#3425] --- Fix handling of read-only files when autosave is enabled [#3408] --- Handle symlinks correctly when atomic saves are disabled [#3463] --- Enable HighDPI icon scaling on Linux [#3332] --- Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, [#3347)] --- Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, [#3291, #3029, #3031, #3236] --- Correctly bring window to the front when clicking tray icon on macOS [#3576] --- Correct application shortcut created by MSI Installer on Windows [#3296] --- Fix crash when removing custom data [#3508] --- Fix placeholder resolution in URLs [#3281] --- Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304] --- Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480] --- Browser: Fix password entropy calculation [#3107] --- Browser: Fix Windows registry settings for portable installation [#3603] -- --## 2.4.3 (2019-06-12) -- --### Added -- --- Add documentation for keyboard shortcuts to source code distribution [#3215] -- --### Fixed -- --- Fix library loading issues in the Snap and macOS releases [#3247] --- Fix various keyboard navigation issues [#3248] --- Fix main window toggling regression when clicking the tray icon on KDE [#3258] -- --## 2.4.2 (2019-05-31) -- --- Improve resilience against memory attacks - overwrite memory before free [#3020] --- Prevent infinite save loop when location is unavailable [#3026] --- Attempt to fix quitting application when shutdown or logout issued [#3199] --- Support merging database custom data [#3002] --- Fix opening URL's with non-http schemes [#3153] --- Fix data loss due to not reading all database attachments if duplicates exist [#3180] --- Fix entry context menu disabling when using keyboard navigation [#3199] --- Fix behaviors when canceling an entry edit [#3199] --- Fix processing of tray icon click and doubleclick [#3112] --- Update group in preview widget when focused [#3199] --- Prefer DuckDuckGo service over direct icon download (increases resolution) #2996] --- Remove apply button in application settings [#3019] --- Use winqtdeploy on Windows to correct deployment issues [#3025] --- Don't mark entry edit as modified when attribute selection changes [#3041] --- Use console code page CP_UTF8 on Windows if supported [#3050] --- Snap: Fix locking database with session lock [#3046] --- Snap: Fix theming across Linux distributions [#3057] --- Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131] --- KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088] --- macOS: Fix toolbar text when in dark mode [#2998] --- macOS: Lock database on switching user [#3097] --- macOS: Fix global Auto-Type when the database is locked[ #3138] --- Browser: Close popups when database is locked [#3093] --- Browser: Add tests [#3016] --- Browser: Don't create default group if custom group is enabled [#3127] -- --## 2.4.1 (2019-04-12) -- --- Fix database deletion when using unsafe saves to a different file system #2889 --- Fix opening databases with legacy key files that contain '/' #2872 --- Fix opening database files from the command line #2919 --- Fix crash when editing master key #2836 --- Fix multiple issues with apply button behavior #2947 --- Fix issues on application startup (tab order, --pw-stdin, etc.) #2830 --- Fix building without WITH_XC_KEESHARE --- Fix reference entry coloring on macOS dark mode #2984 --- Hide window when performing entry auto-type on macOS #2969 --- Improve UX of update checker; reduce checks to every 7 days #2968 --- KeeShare improvements [#2946, #2978, #2824] --- Re-enable Ctrl+C to copy password from search box #2947 --- Add KeePassXC-Browser integration for Brave browser #2933 --- SSH Agent: Re-Add keys on database unlock #2982 --- SSH Agent: Only remove keys on app exit if they are removed on lock #2985 --- CLI: Add --no-password option #2708 --- CLI: Improve database extraction to XML #2698 --- CLI: Don't call mandb on build #2774 --- CLI: Add debug info #2714 --- Improve support for Snap theming #2832 --- Add support for building on Haiku OS #2859 --- Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous --- Fix compiling on GCC 5 / Xenial #2990 --- Add .gitrev output to tarball for third-party builds #2970 --- Add WITH_XC_UPDATECHECK compile flag to toggle the update checker #2968 -- --## 2.4.0 (2019-03-19) -- --- New Database Wizard #1952 --- Advanced Search #1797 --- Automatic update checker #2648 --- KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739] --- Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439] --- Remove KeePassHttp support #1752 --- CLI: output info to stderr for easier scripting #2558 --- CLI: Add --quiet option #2507 --- CLI: Add create command #2540 --- CLI: Add recursive listing of entries #2345 --- CLI: Fix stdin/stdout encoding on Windows #2425 --- SSH Agent: Support OpenSSH for Windows #1994 --- macOS: TouchID Quick Unlock #1851 --- macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583] --- Linux: Prevent Klipper from storing secrets in clipboard #1969 --- Linux: Use polling based file watching for NFS #2171 --- Linux: Enable use of browser plugin in Snap build #2802 --- TOTP QR Code Generator #1167 --- High-DPI Scaling for 4k screens #2404 --- Make keyboard shortcuts more consistent #2431 --- Warn user if deleting referenced entries #1744 --- Allow toolbar to be hidden and repositioned [#1819, #2357] --- Increase max allowed database timeout to 12 hours #2173 --- Password generator uses existing password length by default #2318 --- Improve alert message box button labels #2376 --- Show message when a database merge makes no changes #2551 --- Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790] --- Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731] -- --## 2.3.4 (2018-08-21) -- --- Show all URL schemes in entry view #1768 --- Disable merge when database is locked #1975 --- Fix intermittent crashes with favorite icon downloads #1980 --- Provide potential crash warning to Qt 5.5.x users #2211 --- Disable apply button when creating new entry/group to prevent data loss #2204 --- Allow for 12 hour timeout to lock idle database #2173 --- Multiple SSH Agent fixes [#1981, #2117] --- Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185] --- Fix browser proxy application not closing properly #2142 --- Add real names and Patreon supporters to about dialog #2214 --- Add settings button to toolbar, Donate button, and Report a Bug button to help menu #2214 --- Enhancements to release-tool to appsign intermediate build products #2101 -- -- --## 2.3.3 (2018-05-09) -- --- Fix crash when browser integration is enabled #1923 -- --## 2.3.2 (2018-05-07) -- --- Enable high entropy ASLR on Windows #1747 --- Enhance favicon fetching #1786 --- Fix crash on Windows due to autotype #1691 --- Fix dark tray icon changing all icons #1680 --- Fix --pw-stdin not using getPassword function #1686 --- Fix placeholders being resolved in notes #1907 --- Enable auto-type start delay to be configurable #1908 --- Browser: Fix native messaging reply size #1719 --- Browser: Increase maximum buffer size #1720 --- Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906] --- SSH Agent: Parse aes-256-cbc/ctr keys #1682 --- SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787] -- --## 2.3.1 (2018-03-06) -- --- Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped #1568 --- Abort saving and show an error message when challenge-response fails #1659 --- Support inner stream protection on all string attributes #1646 --- Fix favicon downloads not finishing on some websites #1657 --- Fix freeze due to invalid STDIN data #1628 --- Correct issue with encrypted RSA SSH keys #1587 --- Fix crash on macOS due to QTBUG-54832 #1607 --- Show error message if ssh-agent communication fails #1614 --- Fix --pw-stdin and filename parameters being ignored #1608 --- Fix Auto-Type syntax check not allowing spaces and special characters #1626 --- Fix reference placeholders in combination with Auto-Type #1649 --- Fix qtbase translations not being loaded #1611 --- Fix startup crash on Windows due to missing SVG libraries #1662 --- Correct database tab order regression #1610 --- Fix GCC 8 compilation error #1612 --- Fix copying of advanced attributes on KDE #1640 --- Fix member initialization of CategoryListWidgetDelegate #1613 --- Fix inconsistent toolbar icon sizes and provide higher-quality icons #1616 --- Improve preview panel geometry #1609 -- --## 2.3.0 (2018-02-27) -- --- Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494] --- Add SSH Agent feature [#1098, #1450, #1463] --- Add preview panel with details of the selected entry [#879, #1338] --- Add more and configurable columns to entry table and allow copying of values by double click #1305 --- Add KeePassXC-Browser API as a replacement for KeePassHTTP #608 --- Deprecate KeePassHTTP #1392 --- Add support for Steam one-time passwords #1206 --- Add support for multiple Auto-Type sequences for a single entry #1390 --- Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 #1060 --- Replace qHttp with cURL for website icon downloads #1460 --- Remove lock file #1231 --- Add option to create backup file before saving #1385 --- Ask to save a generated password before closing the entry password generator #1499 --- Resolve placeholders recursively #1078 --- Add Auto-Type button to the toolbar #1056 --- Improve window focus handling for Auto-Type dialogs [#1204, #1490] --- Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412] --- Add optional dark tray icon #1154 --- Add new "Unsafe saving" option to work around saving problems with file sync services #1385 --- Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537] --- Add diceware password generator to CLI #1406 --- Add --key-file option to CLI [#816, #824] --- Add DBus interface for opening and closing KeePassXC databases #283 --- Add KDBX compression options to database settings #1419 --- Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327] --- Correct reference resolution in entry fields #1486 --- Fix window state and recent databases not being remembered on exit #1453 --- Correct history item generation when configuring TOTP for an entry #1446 --- Correct multiple TOTP bugs #1414 --- Automatic saving after every change is now a default #279 --- Allow creation of new entries during search #1398 --- Correct menu issues on macOS #1335 --- Allow compilation on OpenBSD #1328 --- Improve entry attachments view [#1139, #1298] --- Fix auto lock for Gnome and Xfce [#910, #1249] --- Don't remember key files in file dialogs when the setting is disabled #1188 --- Improve database merging and conflict resolution [#807, #1165] --- Fix macOS pasteboard issues #1202 --- Improve startup times on some platforms #1205 --- Hide the notes field by default #1124 --- Toggle main window by clicking tray icon with the middle mouse button #992 --- Fix custom icons not copied over when databases are merged #1008 --- Allow use of DEL key to delete entries #914 --- Correct intermittent crash due to stale history items #1527 --- Sanitize newline characters in title, username and URL fields #1502 --- Reopen previously opened databases in correct order #774 --- Use system's zxcvbn library if available #701 --- Implement various i18n improvements [#690, #875, #1436] -- --## 2.2.4 (2017-12-13) -- --- Prevent database corruption when locked #1219 --- Fixes apply button not saving new entries #1141 --- Switch to Consolas font on Windows for password edit #1229 --- Multiple fixes to AppImage deployment [#1115, #1228] --- Fixes multiple memory leaks #1213 --- Resize message close to 16x16 pixels #1253 -- --## 2.2.2 (2017-10-22) -- --- Fixed entries with empty URLs being reported to KeePassHTTP clients #1031 --- Fixed YubiKey detection and enabled CLI tool for AppImage binary #1100 --- Added AppStream description #1082 --- Improved TOTP compatibility and added new Base32 implementation #1069 --- Fixed error handling when processing invalid cipher stream #1099 --- Fixed double warning display when opening a database #1037 --- Fixed unlocking databases with --pw-stdin #1087 --- Added ability to override QT_PLUGIN_PATH environment variable for AppImages #1079 --- Fixed transform seed not being regenerated when saving the database #1068 --- Fixed only one YubiKey slot being polled #1048 --- Corrected an issue with entry icons while merging #1008 --- Corrected desktop and tray icons in Snap package #1030 --- Fixed screen lock and Google fallback settings #1029 -- --## 2.2.1 (2017-10-01) -- --- Corrected multiple snap issues [#934, #1011] --- Corrected multiple custom icon issues [#708, #719, #994] --- Corrected multiple Yubikey issues #880 --- Fixed single instance preventing load on occasion #997 --- Keep entry history when merging databases #970 --- Prevent data loss if passwords were mismatched #1007 --- Fixed crash after merge #941 --- Added configurable auto-type default delay #703 --- Unlock database dialog window comes to front #663 --- Translation and compiling fixes -- --## 2.2.0 (2017-06-23) -- --- Added YubiKey 2FA integration for unlocking databases #127 --- Added TOTP support #519 --- Added CSV import tool [#146, #490] --- Added KeePassXC CLI tool #254 --- Added diceware password generator #373 --- Added support for entry references [#370, #378] --- Added support for Twofish encryption #167 --- Enabled DEP and ASLR for in-memory protection #371 --- Enabled single instance mode #510 --- Enabled portable mode #645 --- Enabled database lock on screensaver and session lock #545 --- Redesigned welcome screen with common features and recent databases #292 --- Multiple updates to search behavior [#168, #213, #374, #471, #603, #654] --- Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480] --- Fixed auto-type errors on Linux #550 --- Prompt user prior to executing a cmd:// URL #235 --- Entry attributes can be protected (hidden) #220 --- Added extended ascii to password generator #538 --- Added new database icon to toolbar #289 --- Added context menu entry to empty recycle bin in databases #520 --- Added "apply" button to entry and group edit windows #624 --- Added macOS tray icon and enabled minimize on close #583 --- Fixed issues with unclean shutdowns [#170, #580] --- Changed keyboard shortcut to create new database to CTRL+SHIFT+N #515 --- Compare window title to entry URLs #556 --- Implemented inline error messages #162 --- Ignore group expansion and other minor changes when making database "dirty" #464 --- Updated license and copyright information on souce files #632 --- Added contributors list to about dialog #629 -- --## 2.1.4 (2017-04-09) -- --- Bumped KeePassHTTP version to 1.8.4.2 --- KeePassHTTP confirmation window comes to foreground #466 -- --## 2.1.3 (2017-03-03) -- --- Fix possible overflow in zxcvbn library #363 --- Revert HiDPI setting to avoid problems on laptop screens #332 --- Set file meta properties in Windows executable #330 --- Suppress error message when auto-reloading a locked database #345 --- Improve usability of question dialog when database is already locked by a different instance #346 --- Fix compiler warnings in QHttp library #351 --- Use unified toolbar on Mac OS X #361 --- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 #362 -- --## 2.1.2 (2017-02-17) -- --- Ask for save location when creating a new database #302 --- Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265] --- Prevent Qt from degrading Wifi network performance on certain platforms #318 --- Visually refine user interface on OS X and other platforms #299 --- Remove unusable tray icon setting on OS X #293 --- Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup #307 --- Fix AppImage tray icon on Ubuntu [#277, #273] --- Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu #276 --- Fix result order in entry search #320 --- Enable HiDPI scaling on supported platforms #315 --- Remove empty directories from installation target #282 -- --## 2.1.1 (2017-02-06) -- --- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost #147 --- Escape HTML in dialog boxes #247 --- Corrected crashes in favicon download and password generator [#233, #226] --- Increase font size of password meter #228 --- Fixed compatibility with Qt 5.8 #211 --- Use consistent button heights in password generator #229 -- --## 2.1.0 (2017-01-22) -- --- Show unlock dialog when using autotype on a closed database [#10, #89] --- Show different tray icon when database is locked [#37, #46] --- Support autotype on Windows and OS X [#42, #60, #63] --- Add delay feature to autotype [#76, #77] --- Add password strength meter [#84, #92] --- Add option for automatically locking the database when minimizing -- the window #57 --- Add feature to download favicons and use them as entry icons #30 --- Automatically reload and merge database when the file changed on -- disk [#22, #33, #93] --- Add tool for merging two databases [#22, #47, #143] --- Add --pw-stdin commandline option to unlock the database by providing -- a password on STDIN #54 --- Add utility script for reading the database password from KWallet #55 --- Fix some KeePassHTTP settings not being remembered [#34, #65] --- Make search box persistent [#15, #67, #157] --- Enhance search feature by scoping the search to selected group [#16, #118] --- Improve interaction between search field and entry list [#131, #141] --- Add stand-alone password-generator [#18, #92] --- Don't require password repetition when password is visible [#27, #92] --- Add support for entry attributes in autotype sequences #107 --- Always focus password field when opening the database unlock widget [#116, #117] --- Fix compilation errors on various platforms [#53, #126, #130] --- Restructure and improve kdbx-extract utility #160 -- --## 2.0.3 (2016-09-04) -- --- Improved error reporting when reading / writing databases fails. [#450, #462] --- Display an error message when opening a custom icon fails. --- Detect custom icon format based on contents instead of the filename. #512 --- Keep symlink intact when saving databases. #442. --- Fix a crash when deleting parent group of recycle bin. #520 --- Display a confirm dialog before moving an entry to the recycle bin. #447 --- Repair UUIDs of inconsistent history items. #130 --- Only include top-level windows in auto-type window list when using gnome-shell. --- Update translations. -- --## 2.0.2 (2016-02-02) -- --- Fix regression in database writer that caused it to strip certain special -- characters (characters from Unicode plane > 0). --- Fix bug in repair function that caused it to strip non-ASCII characters. -- --## 2.0.1 (2016-01-31) -- --- Flush temporary file before opening attachment. #390 --- Disable password generator when showing entry in history mode. #422 --- Strip invalid XML chars when writing databases. #392 --- Add repair function to fix databases with invalid XML chars. #392 --- Display custom icons scaled. #322 --- Allow opening databases that have no password and keyfile. #391 --- Fix crash when importing .kdb files with invalid icon ids. #425 --- Update translations. -- --## 2.0 (2015-12-06) -- --- Improve UI of the search edit. --- Clear clipboard when locking databases. #342 --- Enable Ctrl+M shortcut to minimize the window on all platforms. #329 --- Show a better message when trying to open an old database format. #338 --- Fix global auto-type behavior with some window managers. --- Show global auto-type window on the active desktop. #359 --- Disable systray on OS X. #326 --- Restore main window when clicking on the OS X docker icon. #326 -- --## 2.0 Beta 2 (2015-09-06) -- --- Fix crash when locking with search UI open #309 --- Fix file locking on Mac OS X #327 --- Set default extension when saving a database [#79, #308] -- --## 2.0 Beta 1 (2015-07-18) -- --- Remember entry column sizes #159 --- Add translations --- Support opening attachments directly --- Support cmd:// URLs #244 --- Protect opened databases with a file lock #18 --- Export to csv files #57 --- Add optional tray icon #153 --- Allow setting the default auto-type sequence for groups #175 --- Make the kdbx parser more lenient --- Remove --password command line option #285 -- --## 2.0 Alpha 6 (2014-04-12) -- --- Add option to lock databases after user inactivity #62 --- Add compatibility with libgcrypt 1.6 #129 --- Display passwords in monospace font #51 --- Use an icon for the button that shows/masks passwords #38 --- Add an option to show passwords by default #93 --- Improve password generator design #122 --- On Linux link .kdbx files with KeePassX --- Remember window size #154 --- Disallow global auto-typing when the database is locked -- --## 2.0 Alpha 5 (2013-12-20) -- --- Support copying entries and groups using drag'n'drop #74 --- Open last used databases on startup #36 --- Made the kdbx file parser more robust --- Only edit entries on doubleclick (not single) or with enter key --- Allow removing multiple entries --- Added option to minimize window when copying data to clipboard --- Save password generator settings --- Fixed auto-type producing wrong chars in some keyboard configurations #116 --- Added some more actions to the toolbar -- --## 2.0 Alpha 4 (2013-03-29) -- --- Add random password generator #52 --- Merge the 'Description' tab into the 'Entry' tab #59 --- Fix crash when deleting history items #56 --- Fix crash on Mac OS X Mountain Lion during startup #50 --- Improved KeePassX application icon #58 -- --## 2.0 Alpha 3 (2012-10-27) -- --- Auto-Type on Linux / X11 --- Database locking --- Fix database corruption when changing key transformation rounds #34 --- Verify header data of kdbx files --- Add menu entry to open URLs in the browser --- Add menu entry to copy an entry attribute to clipboard -- --## 2.0 Alpha 2 (2012-07-02) -- --- Import kdb (KeePass 1) files #2 --- Display history items #23 --- Implement history item limits #16 --- Group and entry icons can be set #22 --- Add keyboard shortcuts --- Search in databases #24 --- Sortable entry view --- Support building Mac OS X bundles -- --## 2.0 Alpha 1 (2012-05-07) -- --- First release. -diff -urNr keepassxc-2.6.4-orig/.clang-format keepassxc-2.6.4-patched/.clang-format ---- keepassxc-2.6.4-orig/.clang-format 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/.clang-format 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ ----- --Language: Cpp --AccessModifierOffset: -4 --AlignAfterOpenBracket: Align --AlignConsecutiveAssignments: false --AlignConsecutiveDeclarations: false --AlignEscapedNewlinesLeft: false --AlignOperands: true --AlignTrailingComments: false --AllowAllParametersOfDeclarationOnNextLine: false --AllowShortBlocksOnASingleLine: false --AllowShortCaseLabelsOnASingleLine: false --AllowShortFunctionsOnASingleLine: None --AllowShortIfStatementsOnASingleLine: false --AllowShortLoopsOnASingleLine: false --AlwaysBreakAfterDefinitionReturnType: None --AlwaysBreakAfterReturnType: None --AlwaysBreakBeforeMultilineStrings: false --AlwaysBreakTemplateDeclarations: false --BinPackArguments: false --BinPackParameters: false --BraceWrapping: -- AfterClass: true -- AfterFunction: true -- AfterControlStatement: false -- AfterEnum: true -- AfterNamespace: true -- AfterStruct: true -- AfterUnion: true -- BeforeCatch: false -- BeforeElse: false -- IndentBraces: false --BreakBeforeBinaryOperators: NonAssignment --BreakBeforeBraces: Custom --BreakBeforeTernaryOperators: true --BreakConstructorInitializersBeforeComma: true --ColumnLimit: 120 --CommentPragmas: '^ IWYU pragma:' --ConstructorInitializerAllOnOneLineOrOnePerLine: false --ConstructorInitializerIndentWidth: 4 --ContinuationIndentWidth: 4 --Cpp11BracedListStyle: true --DerivePointerAlignment: false --DisableFormat: false --ExperimentalAutoDetectBinPacking: false --ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] --IncludeCategories: -- - Regex: '^"(llvm|llvm-c|clang|clang-c)/' -- Priority: 2 -- - Regex: '^(<|"(gtest|isl|json)/)' -- Priority: 3 -- - Regex: '.*' -- Priority: 1 --IndentCaseLabels: false --IndentWidth: 4 --IndentWrappedFunctionNames: false --KeepEmptyLinesAtTheStartOfBlocks: true --MacroBlockBegin: '' --MacroBlockEnd: '' --MaxEmptyLinesToKeep: 1 --NamespaceIndentation: All --ObjCBlockIndentWidth: 4 --ObjCSpaceAfterProperty: false --ObjCSpaceBeforeProtocolList: true --PenaltyBreakBeforeFirstCallParameter: 19 --PenaltyBreakComment: 300 --PenaltyBreakFirstLessLess: 120 --PenaltyBreakString: 1000 --PenaltyExcessCharacter: 1000000 --PenaltyReturnTypeOnItsOwnLine: 60 --PointerAlignment: Left --ReflowComments: true --SortIncludes: true --SpaceAfterCStyleCast: false --SpaceBeforeAssignmentOperators: true --SpaceBeforeParens: ControlStatements --SpaceInEmptyParentheses: false --SpacesBeforeTrailingComments: 1 --SpacesInAngles: false --SpacesInContainerLiterals: true --SpacesInCStyleCastParentheses: false --SpacesInParentheses: false --SpacesInSquareBrackets: false --Standard: Cpp11 --TabWidth: 4 --UseTab: Never --... -- -diff -urNr keepassxc-2.6.4-orig/cmake/CLangFormat.cmake keepassxc-2.6.4-patched/cmake/CLangFormat.cmake ---- keepassxc-2.6.4-orig/cmake/CLangFormat.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/CLangFormat.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --set(EXCLUDED_DIRS -- # third-party directories -- src/zxcvbn/ -- # objective-c directories -- src/touchid/ -- src/autotype/mac/ -- src/gui/osutils/macutils/) -- --set(EXCLUDED_FILES -- # third-party files -- streams/qtiocompressor.cpp -- streams/qtiocompressor.h -- gui/KMessageWidget.h -- gui/KMessageWidget.cpp -- gui/MainWindowAdaptor.h -- gui/MainWindowAdaptor.cpp -- crypto/ssh/bcrypt_pbkdf.cpp -- crypto/ssh/blf.h -- crypto/ssh/blowfish.c -- tests/modeltest.cpp -- tests/modeltest.h -- # objective-c files -- core/ScreenLockListenerMac.h -- core/ScreenLockListenerMac.cpp) -- --file(GLOB_RECURSE ALL_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} src/*.cpp src/*.h tests/*.cpp tests/*.h) --foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) -- foreach(EXCLUDED_DIR ${EXCLUDED_DIRS}) -- string(FIND ${SOURCE_FILE} ${EXCLUDED_DIR} SOURCE_FILE_EXCLUDED) -- if(NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1) -- list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) -- endif() -- endforeach() -- foreach(EXCLUDED_FILE ${EXCLUDED_FILES}) -- if(${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$") -- list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) -- endif() -- endforeach() --endforeach() -- --add_custom_target(format) --foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) -- add_custom_command( -- TARGET format -- PRE_BUILD -- COMMAND echo Formatting ${SOURCE_FILE} -- COMMAND clang-format -style=file -i \"${SOURCE_FILE}\" -- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) --endforeach() -diff -urNr keepassxc-2.6.4-orig/cmake/CodeCoverage.cmake keepassxc-2.6.4-patched/cmake/CodeCoverage.cmake ---- keepassxc-2.6.4-orig/cmake/CodeCoverage.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/CodeCoverage.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,303 +0,0 @@ --# Copyright (c) 2012 - 2017, Lars Bilke --# All rights reserved. --# --# Redistribution and use in source and binary forms, with or without modification, --# are permitted provided that the following conditions are met: --# --# 1. Redistributions of source code must retain the above copyright notice, this --# list of conditions and the following disclaimer. --# --# 2. Redistributions in binary form must reproduce the above copyright notice, --# this list of conditions and the following disclaimer in the documentation --# and/or other materials provided with the distribution. --# --# 3. Neither the name of the copyright holder nor the names of its contributors --# may be used to endorse or promote products derived from this software without --# specific prior written permission. --# --# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND --# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED --# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE --# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR --# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; --# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON --# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS --# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --# --# CHANGES: --# --# 2012-01-31, Lars Bilke --# - Enable Code Coverage --# --# 2013-09-17, Joakim Söderberg --# - Added support for Clang. --# - Some additional usage instructions. --# --# 2016-02-03, Lars Bilke --# - Refactored functions to use named parameters --# --# 2017-06-02, Lars Bilke --# - Merged with modified version from github.com/ufz/ogs --# --# --# USAGE: --# --# 1. Copy this file into your cmake modules path. --# --# 2. Add the following line to your CMakeLists.txt: --# include(CodeCoverage) --# --# 3. Append necessary compiler flags: --# APPEND_COVERAGE_COMPILER_FLAGS() --# --# 4. If you need to exclude additional directories from the report, specify them --# using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV. --# Example: --# set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') --# --# 5. Use the functions described below to create a custom make target which --# runs your test executable and produces a code coverage report. --# --# 6. Build a Debug build: --# cmake -DCMAKE_BUILD_TYPE=Debug .. --# make --# make my_coverage_target --# -- --include(CMakeParseArguments) -- --# Check prereqs --find_program( GCOV_PATH gcov ) --find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) --find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) --find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) --find_program( SIMPLE_PYTHON_EXECUTABLE python ) -- --if(NOT GCOV_PATH) -- message(FATAL_ERROR "gcov not found! Aborting...") --endif() # NOT GCOV_PATH -- --if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") -- if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) -- message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") -- endif() --elseif(NOT CMAKE_COMPILER_IS_GNUCXX) -- message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") --endif() -- --set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage" -- CACHE INTERNAL "") -- --set(CMAKE_CXX_FLAGS_COVERAGE -- ${COVERAGE_COMPILER_FLAGS} -- CACHE STRING "Flags used by the C++ compiler during coverage builds." -- FORCE ) --set(CMAKE_C_FLAGS_COVERAGE -- ${COVERAGE_COMPILER_FLAGS} -- CACHE STRING "Flags used by the C compiler during coverage builds." -- FORCE ) --set(CMAKE_EXE_LINKER_FLAGS_COVERAGE -- "" -- CACHE STRING "Flags used for linking binaries during coverage builds." -- FORCE ) --set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE -- "" -- CACHE STRING "Flags used by the shared libraries linker during coverage builds." -- FORCE ) --mark_as_advanced( -- CMAKE_CXX_FLAGS_COVERAGE -- CMAKE_C_FLAGS_COVERAGE -- CMAKE_EXE_LINKER_FLAGS_COVERAGE -- CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) -- --if(NOT CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") -- message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") --endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" -- --if(CMAKE_C_COMPILER_ID STREQUAL "GNU") -- link_libraries(gcov) --else() -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") --endif() -- --# Defines a target for running and collection code coverage information --# Builds dependencies, runs the given executable and outputs reports. --# NOTE! The executable should always have a ZERO as exit code otherwise --# the coverage generation will not complete. --# --# SETUP_TARGET_FOR_COVERAGE_LCOV( --# NAME testrunner_coverage # New target name --# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR --# DEPENDENCIES testrunner # Dependencies to build first --# ) --function(SETUP_TARGET_FOR_COVERAGE_LCOV) -- -- set(options NONE) -- set(oneValueArgs NAME) -- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) -- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -- -- if(NOT LCOV_PATH) -- message(FATAL_ERROR "lcov not found! Aborting...") -- endif() # NOT LCOV_PATH -- -- if(NOT GENHTML_PATH) -- message(FATAL_ERROR "genhtml not found! Aborting...") -- endif() # NOT GENHTML_PATH -- -- # Setup target -- add_custom_target(${Coverage_NAME} -- -- # Cleanup lcov -- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -directory . --zerocounters -- # Create baseline to make sure untouched files show up in the report -- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base -- -- # Run tests -- COMMAND ${Coverage_EXECUTABLE} -- -- # Capturing lcov counters and generating report -- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info -- # add baseline counters -- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total -- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned -- COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned -- COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned -- -- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -- DEPENDS ${Coverage_DEPENDENCIES} -- COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." -- ) -- -- # Show where to find the lcov info report -- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD -- COMMAND ; -- COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." -- ) -- -- # Show info where to find the report -- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD -- COMMAND ; -- COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." -- ) -- --endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV -- --# Defines a target for running and collection code coverage information --# Builds dependencies, runs the given executable and outputs reports. --# NOTE! The executable should always have a ZERO as exit code otherwise --# the coverage generation will not complete. --# --# SETUP_TARGET_FOR_COVERAGE_GCOVR_XML( --# NAME ctest_coverage # New target name --# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR --# DEPENDENCIES executable_target # Dependencies to build first --# ) --function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML) -- -- set(options NONE) -- set(oneValueArgs NAME) -- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) -- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -- -- if(NOT SIMPLE_PYTHON_EXECUTABLE) -- message(FATAL_ERROR "python not found! Aborting...") -- endif() # NOT SIMPLE_PYTHON_EXECUTABLE -- -- if(NOT GCOVR_PATH) -- message(FATAL_ERROR "gcovr not found! Aborting...") -- endif() # NOT GCOVR_PATH -- -- # Combine excludes to several -e arguments -- set(GCOVR_EXCLUDES "") -- foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) -- list(APPEND GCOVR_EXCLUDES "-e") -- list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") -- endforeach() -- -- add_custom_target(${Coverage_NAME} -- # Run tests -- ${Coverage_EXECUTABLE} -- -- # Running gcovr -- COMMAND ${GCOVR_PATH} --xml -- -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} -- --object-directory=${PROJECT_BINARY_DIR} -- -o ${Coverage_NAME}.xml -- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -- DEPENDS ${Coverage_DEPENDENCIES} -- COMMENT "Running gcovr to produce Cobertura code coverage report." -- ) -- -- # Show info where to find the report -- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD -- COMMAND ; -- COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." -- ) -- --endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML -- --# Defines a target for running and collection code coverage information --# Builds dependencies, runs the given executable and outputs reports. --# NOTE! The executable should always have a ZERO as exit code otherwise --# the coverage generation will not complete. --# --# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML( --# NAME ctest_coverage # New target name --# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR --# DEPENDENCIES executable_target # Dependencies to build first --# ) --function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML) -- -- set(options NONE) -- set(oneValueArgs NAME) -- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) -- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -- -- if(NOT SIMPLE_PYTHON_EXECUTABLE) -- message(FATAL_ERROR "python not found! Aborting...") -- endif() # NOT SIMPLE_PYTHON_EXECUTABLE -- -- if(NOT GCOVR_PATH) -- message(FATAL_ERROR "gcovr not found! Aborting...") -- endif() # NOT GCOVR_PATH -- -- # Combine excludes to several -e arguments -- set(GCOVR_EXCLUDES "") -- foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) -- list(APPEND GCOVR_EXCLUDES "-e") -- list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") -- endforeach() -- -- add_custom_target(${Coverage_NAME} -- # Run tests -- ${Coverage_EXECUTABLE} -- -- # Create folder -- COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} -- -- # Running gcovr -- COMMAND ${GCOVR_PATH} --html --html-details -- -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} -- --object-directory=${PROJECT_BINARY_DIR} -- -o ${Coverage_NAME}/index.html -- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -- DEPENDS ${Coverage_DEPENDENCIES} -- COMMENT "Running gcovr to produce HTML code coverage report." -- ) -- -- # Show info where to find the report -- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD -- COMMAND ; -- COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." -- ) -- --endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML -- --function(APPEND_COVERAGE_COMPILER_FLAGS) -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) -- message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") --endfunction() # APPEND_COVERAGE_COMPILER_FLAGS -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/cmake/FindArgon2.cmake keepassxc-2.6.4-patched/cmake/FindArgon2.cmake ---- keepassxc-2.6.4-orig/cmake/FindArgon2.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindArgon2.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_path(ARGON2_INCLUDE_DIR argon2.h) --if(MINGW) -- # find static library on Windows, and redefine used symbols to -- # avoid definition name conflicts with libsodium -- find_library(ARGON2_SYS_LIBRARIES libargon2.a) -- message(STATUS "Patching libargon2...\n") -- execute_process(COMMAND objcopy -- --redefine-sym argon2_hash=libargon2_argon2_hash -- --redefine-sym _argon2_hash=_libargon2_argon2_hash -- --redefine-sym argon2_error_message=libargon2_argon2_error_message -- --redefine-sym _argon2_error_message=_libargon2_argon2_error_message -- ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a -- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -- find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) --else() -- find_library(ARGON2_LIBRARIES argon2) --endif() --mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) -- --include(FindPackageHandleStandardArgs) --find_package_handle_standard_args(Argon2 DEFAULT_MSG ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) -diff -urNr keepassxc-2.6.4-orig/cmake/FindGcrypt.cmake keepassxc-2.6.4-patched/cmake/FindGcrypt.cmake ---- keepassxc-2.6.4-orig/cmake/FindGcrypt.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindGcrypt.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --# Copyright (C) 2011 Felix Geyer --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_path(GCRYPT_INCLUDE_DIR gcrypt.h) -- --find_library(GCRYPT_LIBRARIES gcrypt) -- --mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) -- --if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") -- file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") -- string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") -- string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") -- string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") -- set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") --endif() -- --include(FindPackageHandleStandardArgs) --find_package_handle_standard_args(Gcrypt DEFAULT_MSG GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) -diff -urNr keepassxc-2.6.4-orig/cmake/FindLibGPGError.cmake keepassxc-2.6.4-patched/cmake/FindLibGPGError.cmake ---- keepassxc-2.6.4-orig/cmake/FindLibGPGError.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindLibGPGError.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,23 +0,0 @@ --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_path(GPGERROR_INCLUDE_DIR gpg-error.h) --find_library(GPGERROR_LIBRARIES gpg-error) -- --mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR) -- --include(FindPackageHandleStandardArgs) --include_directories(${GPGERROR_INCLUDE_DIR}) --find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR) -diff -urNr keepassxc-2.6.4-orig/cmake/FindQREncode.cmake keepassxc-2.6.4-patched/cmake/FindQREncode.cmake ---- keepassxc-2.6.4-orig/cmake/FindQREncode.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindQREncode.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,22 +0,0 @@ --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_path(QRENCODE_INCLUDE_DIR qrencode.h) --find_library(QRENCODE_LIBRARY qrencode) -- --mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) -- --include(FindPackageHandleStandardArgs) --find_package_handle_standard_args(QREncode DEFAULT_MSG QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) -diff -urNr keepassxc-2.6.4-orig/cmake/FindQuaZip.cmake keepassxc-2.6.4-patched/cmake/FindQuaZip.cmake ---- keepassxc-2.6.4-orig/cmake/FindQuaZip.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindQuaZip.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,24 +0,0 @@ --# QUAZIP_FOUND - QuaZip library was found --# QUAZIP_INCLUDE_DIR - Path to QuaZip include dir --# QUAZIP_INCLUDE_DIRS - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR) --# QUAZIP_LIBRARIES - List of QuaZip libraries --# QUAZIP_ZLIB_INCLUDE_DIR - The include dir of zlib headers -- --if(MINGW) -- find_library(QUAZIP_LIBRARIES libquazip5) -- find_path(QUAZIP_INCLUDE_DIR quazip.h PATH_SUFFIXES quazip5) -- find_path(QUAZIP_ZLIB_INCLUDE_DIR zlib.h) --else() -- find_library(QUAZIP_LIBRARIES -- NAMES quazip5 quazip -- PATHS /usr/lib /usr/lib64 /usr/local/lib -- ) -- find_path(QUAZIP_INCLUDE_DIR quazip.h -- PATHS /usr/include /usr/local/include -- PATH_SUFFIXES quazip5 quazip -- ) -- find_path(QUAZIP_ZLIB_INCLUDE_DIR zlib.h PATHS /usr/include /usr/local/include) --endif() --include(FindPackageHandleStandardArgs) --set(QUAZIP_INCLUDE_DIRS ${QUAZIP_INCLUDE_DIR} ${QUAZIP_ZLIB_INCLUDE_DIR}) --find_package_handle_standard_args(QUAZIP DEFAULT_MSG QUAZIP_LIBRARIES QUAZIP_INCLUDE_DIR QUAZIP_ZLIB_INCLUDE_DIR QUAZIP_INCLUDE_DIRS) -diff -urNr keepassxc-2.6.4-orig/cmake/FindReadline.cmake keepassxc-2.6.4-patched/cmake/FindReadline.cmake ---- keepassxc-2.6.4-orig/cmake/FindReadline.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindReadline.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --# Code copied from sethhall@github --# --# - Try to find readline include dirs and libraries --# --# Usage of this module as follows: --# --# find_package(Readline) --# --# Variables used by this module, they can change the default behaviour and need --# to be set before calling find_package: --# --# Readline_ROOT_DIR Set this variable to the root installation of --# readline if the module has problems finding the --# proper installation path. --# --# Variables defined by this module: --# --# READLINE_FOUND System has readline, include and lib dirs found --# Readline_INCLUDE_DIR The readline include directories. --# Readline_LIBRARY The readline library. -- --find_path(Readline_ROOT_DIR -- NAMES include/readline/readline.h --) -- --find_path(Readline_INCLUDE_DIR -- NAMES readline/readline.h -- HINTS ${Readline_ROOT_DIR}/include --) -- --find_library(Readline_LIBRARY -- NAMES readline -- HINTS ${Readline_ROOT_DIR}/lib --) -- --if(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) -- set(READLINE_FOUND TRUE) --else(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) -- find_library(Readline_LIBRARY NAMES readline) -- include(FindPackageHandleStandardArgs) -- find_package_handle_standard_args(Readline DEFAULT_MSG Readline_INCLUDE_DIR Readline_LIBRARY ) -- mark_as_advanced(Readline_INCLUDE_DIR Readline_LIBRARY) --endif(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) -- --mark_as_advanced( -- Readline_ROOT_DIR -- Readline_INCLUDE_DIR -- Readline_LIBRARY --) -- -diff -urNr keepassxc-2.6.4-orig/cmake/Findsodium.cmake keepassxc-2.6.4-patched/cmake/Findsodium.cmake ---- keepassxc-2.6.4-orig/cmake/Findsodium.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/Findsodium.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,267 +0,0 @@ --# Written in 2016 by Henrik Steffen Gaßmann --# --# To the extent possible under law, the author(s) have dedicated all --# copyright and related and neighboring rights to this software to the --# public domain worldwide. This software is distributed without any warranty. --# --# You should have received a copy of the CC0 Public Domain Dedication --# along with this software. If not, see --# --# http://creativecommons.org/publicdomain/zero/1.0/ --# --######################################################################## --# Tries to find the local libsodium installation. --# --# On Windows the sodium_DIR environment variable is used as a default --# hint which can be overridden by setting the corresponding cmake variable. --# --# Once done the following variables will be defined: --# --# sodium_FOUND --# sodium_INCLUDE_DIR --# sodium_LIBRARY_DEBUG --# sodium_LIBRARY_RELEASE --# --# --# Furthermore an imported "sodium" target is created. --# -- --if (CMAKE_C_COMPILER_ID STREQUAL "GNU" -- OR CMAKE_C_COMPILER_ID STREQUAL "Clang") -- set(_GCC_COMPATIBLE 1) --endif() -- --# static library option --option(sodium_USE_STATIC_LIBS "enable to statically link against sodium") --if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) -- unset(sodium_LIBRARY CACHE) -- unset(sodium_LIBRARY_DEBUG CACHE) -- unset(sodium_LIBRARY_RELEASE CACHE) -- unset(sodium_DLL_DEBUG CACHE) -- unset(sodium_DLL_RELEASE CACHE) -- set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable") --endif() -- -- --######################################################################## --# UNIX --if (UNIX) -- # import pkg-config -- find_package(PkgConfig QUIET) -- if (PKG_CONFIG_FOUND) -- pkg_check_modules(sodium_PKG QUIET libsodium) -- endif() -- -- if(sodium_USE_STATIC_LIBS) -- set(XPREFIX sodium_PKG_STATIC) -- else() -- set(XPREFIX sodium_PKG) -- endif() -- -- find_path(sodium_INCLUDE_DIR sodium.h -- HINTS ${${XPREFIX}_INCLUDE_DIRS} -- ) -- find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} sodium -- HINTS ${${XPREFIX}_LIBRARY_DIRS} -- ) -- find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} sodium -- HINTS ${${XPREFIX}_LIBRARY_DIRS} -- ) -- -- --######################################################################## --# Windows --elseif (WIN32) -- set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory") -- mark_as_advanced(sodium_DIR) -- -- find_path(sodium_INCLUDE_DIR sodium.h -- HINTS ${sodium_DIR} -- PATH_SUFFIXES include -- ) -- -- if (MSVC) -- # detect target architecture -- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" [=[ -- #if defined _M_IX86 -- #error ARCH_VALUE x86_32 -- #elif defined _M_X64 -- #error ARCH_VALUE x86_64 -- #endif -- #error ARCH_VALUE unknown -- ]=]) -- try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.c" -- OUTPUT_VARIABLE _COMPILATION_LOG -- ) -- string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") -- -- # construct library path -- if (_TARGET_ARCH STREQUAL "x86_32") -- string(APPEND _PLATFORM_PATH "Win32") -- elseif(_TARGET_ARCH STREQUAL "x86_64") -- string(APPEND _PLATFORM_PATH "x64") -- else() -- message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") -- endif() -- string(APPEND _PLATFORM_PATH "/$$CONFIG$$") -- -- if (MSVC_VERSION LESS 1900) -- math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") -- else() -- math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") -- endif() -- string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") -- -- if (sodium_USE_STATIC_LIBS) -- string(APPEND _PLATFORM_PATH "/static") -- else() -- string(APPEND _PLATFORM_PATH "/dynamic") -- endif() -- -- string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") -- string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") -- -- find_library(sodium_LIBRARY_DEBUG libsodium.lib -- HINTS ${sodium_DIR} -- PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} -- ) -- find_library(sodium_LIBRARY_RELEASE libsodium.lib -- HINTS ${sodium_DIR} -- PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} -- ) -- if (NOT sodium_USE_STATIC_LIBS) -- set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") -- find_library(sodium_DLL_DEBUG libsodium -- HINTS ${sodium_DIR} -- PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} -- ) -- find_library(sodium_DLL_RELEASE libsodium -- HINTS ${sodium_DIR} -- PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} -- ) -- endif() -- -- elseif(_GCC_COMPATIBLE) -- if (sodium_USE_STATIC_LIBS) -- find_library(sodium_LIBRARY_DEBUG libsodium.a -- HINTS ${sodium_DIR} -- PATH_SUFFIXES lib -- ) -- find_library(sodium_LIBRARY_RELEASE libsodium.a -- HINTS ${sodium_DIR} -- PATH_SUFFIXES lib -- ) -- else() -- find_library(sodium_LIBRARY_DEBUG libsodium.dll.a -- HINTS ${sodium_DIR} -- PATH_SUFFIXES lib -- ) -- find_library(sodium_LIBRARY_RELEASE libsodium.dll.a -- HINTS ${sodium_DIR} -- PATH_SUFFIXES lib -- ) -- -- file(GLOB _DLL -- LIST_DIRECTORIES false -- RELATIVE "${sodium_DIR}/bin" -- "${sodium_DIR}/bin/libsodium*.dll" -- ) -- find_library(sodium_DLL_DEBUG ${_DLL} libsodium -- HINTS ${sodium_DIR} -- PATH_SUFFIXES bin -- ) -- find_library(sodium_DLL_RELEASE ${_DLL} libsodium -- HINTS ${sodium_DIR} -- PATH_SUFFIXES bin -- ) -- endif() -- else() -- message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") -- endif() -- -- --######################################################################## --# unsupported --else() -- message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") --endif() -- -- --######################################################################## --# common stuff -- --# extract sodium version --if (sodium_INCLUDE_DIR) -- set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h") -- if (EXISTS _VERSION_HEADER) -- file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) -- string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1" -- sodium_VERSION "${_VERSION_HEADER_CONTENT}") -- set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE) -- endif() --endif() -- --# communicate results --include(FindPackageHandleStandardArgs) --find_package_handle_standard_args(sodium -- REQUIRED_VARS -- sodium_LIBRARY_RELEASE -- sodium_LIBRARY_DEBUG -- sodium_INCLUDE_DIR -- VERSION_VAR -- sodium_VERSION --) -- --# mark file paths as advanced --mark_as_advanced(sodium_INCLUDE_DIR) --mark_as_advanced(sodium_LIBRARY_DEBUG) --mark_as_advanced(sodium_LIBRARY_RELEASE) --if (WIN32) -- mark_as_advanced(sodium_DLL_DEBUG) -- mark_as_advanced(sodium_DLL_RELEASE) --endif() -- --# create imported target --if(sodium_USE_STATIC_LIBS) -- set(_LIB_TYPE STATIC) --else() -- set(_LIB_TYPE SHARED) --endif() --add_library(sodium ${_LIB_TYPE} IMPORTED) -- --set_target_properties(sodium PROPERTIES -- INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}" -- IMPORTED_LINK_INTERFACE_LANGUAGES "C" --) -- --if (sodium_USE_STATIC_LIBS) -- set_target_properties(sodium PROPERTIES -- INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" -- IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" -- IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" -- ) --else() -- if (UNIX) -- set_target_properties(sodium PROPERTIES -- IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" -- IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" -- ) -- elseif (WIN32) -- set_target_properties(sodium PROPERTIES -- IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}" -- IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}" -- ) -- if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) -- set_target_properties(sodium PROPERTIES -- IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}" -- ) -- endif() -- if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) -- set_target_properties(sodium PROPERTIES -- IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" -- IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" -- IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}" -- ) -- endif() -- endif() --endif() -diff -urNr keepassxc-2.6.4-orig/cmake/FindYubiKey.cmake keepassxc-2.6.4-patched/cmake/FindYubiKey.cmake ---- keepassxc-2.6.4-orig/cmake/FindYubiKey.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/FindYubiKey.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,27 +0,0 @@ --# Copyright (C) 2014 Kyle Manna --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_path(YUBIKEY_CORE_INCLUDE_DIR yubikey.h) --find_path(YUBIKEY_PERS_INCLUDE_DIR ykcore.h PATH_SUFFIXES ykpers-1) --set(YUBIKEY_INCLUDE_DIRS ${YUBIKEY_CORE_INCLUDE_DIR} ${YUBIKEY_PERS_INCLUDE_DIR}) -- --find_library(YUBIKEY_CORE_LIBRARY NAMES yubikey.dll libyubikey.so yubikey) --find_library(YUBIKEY_PERS_LIBRARY NAMES ykpers-1.dll libykpers-1.so ykpers-1) --set(YUBIKEY_LIBRARIES ${YUBIKEY_CORE_LIBRARY} ${YUBIKEY_PERS_LIBRARY}) -- --include(FindPackageHandleStandardArgs) --find_package_handle_standard_args(YubiKey DEFAULT_MSG YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS) -- --mark_as_advanced(YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS) -diff -urNr keepassxc-2.6.4-orig/cmake/GenerateProductVersion.cmake keepassxc-2.6.4-patched/cmake/GenerateProductVersion.cmake ---- keepassxc-2.6.4-orig/cmake/GenerateProductVersion.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/GenerateProductVersion.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,118 +0,0 @@ --# The MIT License (MIT) --# --# Copyright (c) 2015, by [halex2005](mailto:akharlov@gmail.com) --# --# Permission is hereby granted, free of charge, to any person obtaining a copy of --# this software and associated documentation files (the "Software"), to deal in --# the Software without restriction, including without limitation the rights to --# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of --# the Software, and to permit persons to whom the Software is furnished to do so, --# subject to the following conditions: --# --# The above copyright notice and this permission notice shall be included in all --# copies or substantial portions of the Software. --# --# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS --# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR --# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER --# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN --# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- --include (CMakeParseArguments) -- --set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR}) -- --# generate_product_version() function --# --# This function uses VersionInfo.in template file and VersionResource.rc file --# to generate WIN32 resource with version information and general resource strings. --# --# Usage: --# generate_product_version( --# SomeOutputResourceVariable --# NAME MyGreatProject --# ICON ${PATH_TO_APP_ICON} --# VERSION_MAJOR 2 --# VERSION_MINOR 3 --# VERSION_PATH ${BUILD_COUNTER} --# VERSION_REVISION ${BUILD_REVISION} --# ) --# where BUILD_COUNTER and BUILD_REVISION could be values from your CI server. --# --# You can use generated resource for your executable targets: --# add_executable(target-name ${target-files} ${SomeOutputResourceVariable}) --# --# You can specify resource strings in arguments: --# NAME - name of executable (no defaults, ex: Microsoft Word) --# BUNDLE - bundle (${NAME} is default, ex: Microsoft Office) --# VERSION_MAJOR - 1 is default --# VERSION_MINOR - 0 is default --# VERSION_PATCH - 0 is default --# COMPANY_NAME - your company name (no defaults) --# COMPANY_COPYRIGHT - ${COMPANY_NAME} (C) Copyright ${CURRENT_YEAR} is default --# COMMENTS - ${NAME} v${VERSION_MAJOR}.${VERSION_MINOR} is default --# ORIGINAL_FILENAME - ${NAME} is default --# INTERNAL_NAME - ${NAME} is default --# FILE_DESCRIPTION - ${NAME} is default --function(generate_product_version outfiles) -- set (options) -- set (oneValueArgs -- NAME -- BUNDLE -- VERSION_MAJOR -- VERSION_MINOR -- VERSION_PATCH -- COMPANY_NAME -- COMPANY_COPYRIGHT -- COMMENTS -- ORIGINAL_FILENAME -- INTERNAL_NAME -- FILE_DESCRIPTION) -- set (multiValueArgs) -- cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -- -- if (NOT PRODUCT_BUNDLE OR "${PRODUCT_BUNDLE}" STREQUAL "") -- set(PRODUCT_BUNDLE "${PRODUCT_NAME}") -- endif() -- if (NOT PRODUCT_VERSION_MAJOR OR "${PRODUCT_VERSION_MAJOR}" STREQUAL "") -- set(PRODUCT_VERSION_MAJOR 1) -- endif() -- if (NOT PRODUCT_VERSION_MINOR OR "${PRODUCT_VERSION_MINOR}" STREQUAL "") -- set(PRODUCT_VERSION_MINOR 0) -- endif() -- if (NOT PRODUCT_VERSION_PATCH OR "${PRODUCT_VERSION_PATCH}" STREQUAL "") -- set(PRODUCT_VERSION_PATCH 0) -- endif() -- -- if (NOT PRODUCT_COMPANY_COPYRIGHT OR "${PRODUCT_COMPANY_COPYRIGHT}" STREQUAL "") -- string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y") -- set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") -- endif() -- if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") -- set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}") -- endif() -- if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") -- set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") -- endif() -- if (NOT PRODUCT_INTERNAL_NAME OR "${PRODUCT_INTERNAL_NAME}" STREQUAL "") -- set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}") -- endif() -- if (NOT PRODUCT_FILE_DESCRIPTION OR "${PRODUCT_FILE_DESCRIPTION}" STREQUAL "") -- set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_NAME}") -- endif() -- -- set (_VersionInfoFile ${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.h) -- set (_VersionResourceFile ${CMAKE_CURRENT_BINARY_DIR}/VersionResource.rc) -- configure_file( -- ${GenerateProductVersionCurrentDir}/VersionInfo.in -- ${_VersionInfoFile} -- @ONLY) -- configure_file( -- ${GenerateProductVersionCurrentDir}/VersionResource.rc -- ${_VersionResourceFile} -- COPYONLY) -- list(APPEND ${outfiles} ${_VersionInfoFile} ${_VersionResourceFile}) -- set (${outfiles} ${${outfiles}} PARENT_SCOPE) --endfunction() -diff -urNr keepassxc-2.6.4-orig/cmake/VersionInfo.in keepassxc-2.6.4-patched/cmake/VersionInfo.in ---- keepassxc-2.6.4-orig/cmake/VersionInfo.in 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/VersionInfo.in 1970-01-01 01:00:00.000000000 +0100 -@@ -1,68 +0,0 @@ --#pragma once -- --#ifndef PRODUCT_VERSION_MAJOR --#define PRODUCT_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ --#endif -- --#ifndef PRODUCT_VERSION_MINOR --#define PRODUCT_VERSION_MINOR @PRODUCT_VERSION_MINOR@ --#endif -- --#ifndef PRODUCT_VERSION_PATCH --#define PRODUCT_VERSION_PATCH @PRODUCT_VERSION_PATCH@ --#endif -- --#ifndef FILE_VERSION_MAJOR --#define FILE_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ --#endif -- --#ifndef FILE_VERSION_MINOR --#define FILE_VERSION_MINOR @PRODUCT_VERSION_MINOR@ --#endif -- --#ifndef FILE_VERSION_PATCH --#define FILE_VERSION_PATCH @PRODUCT_VERSION_PATCH@ --#endif -- --#ifndef __TO_STRING --#define __TO_STRING_IMPL(x) #x --#define __TO_STRING(x) __TO_STRING_IMPL(x) --#endif -- --#define PRODUCT_VERSION_MAJOR_MINOR_STR __TO_STRING(PRODUCT_VERSION_MAJOR) "." __TO_STRING(PRODUCT_VERSION_MINOR) --#define PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR PRODUCT_VERSION_MAJOR_MINOR_STR "." __TO_STRING(PRODUCT_VERSION_PATCH) --#define PRODUCT_VERSION_RESOURCE PRODUCT_VERSION_MAJOR,PRODUCT_VERSION_MINOR,PRODUCT_VERSION_PATCH,0 --#define PRODUCT_VERSION_RESOURCE_STR PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR "\0" -- --#define FILE_VERSION_MAJOR_MINOR_STR __TO_STRING(FILE_VERSION_MAJOR) "." __TO_STRING(FILE_VERSION_MINOR) --#define FILE_VERSION_MAJOR_MINOR_PATCH_STR FILE_VERSION_MAJOR_MINOR_STR "." __TO_STRING(FILE_VERSION_PATCH) --#define FILE_VERSION_RESOURCE FILE_VERSION_MAJOR,FILE_VERSION_MINOR,FILE_VERSION_PATCH,0 --#define FILE_VERSION_RESOURCE_STR FILE_VERSION_MAJOR_MINOR_PATCH_STR "\0" -- --#ifndef PRODUCT_COMMENTS --#define PRODUCT_COMMENTS "@PRODUCT_COMMENTS@\0" --#endif -- --#ifndef PRODUCT_COMPANY_NAME --#define PRODUCT_COMPANY_NAME "@PRODUCT_COMPANY_NAME@\0" --#endif -- --#ifndef PRODUCT_COMPANY_COPYRIGHT --#define PRODUCT_COMPANY_COPYRIGHT "@PRODUCT_COMPANY_COPYRIGHT@\0" --#endif -- --#ifndef PRODUCT_FILE_DESCRIPTION --#define PRODUCT_FILE_DESCRIPTION "@PRODUCT_FILE_DESCRIPTION@\0" --#endif -- --#ifndef PRODUCT_INTERNAL_NAME --#define PRODUCT_INTERNAL_NAME "@PRODUCT_NAME@\0" --#endif -- --#ifndef PRODUCT_ORIGINAL_FILENAME --#define PRODUCT_ORIGINAL_FILENAME "@PRODUCT_ORIGINAL_FILENAME@\0" --#endif -- --#ifndef PRODUCT_BUNDLE --#define PRODUCT_BUNDLE "@PRODUCT_BUNDLE@\0" --#endif -diff -urNr keepassxc-2.6.4-orig/cmake/VersionResource.rc keepassxc-2.6.4-patched/cmake/VersionResource.rc ---- keepassxc-2.6.4-orig/cmake/VersionResource.rc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/cmake/VersionResource.rc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --#include "VersionInfo.h" --#include "winresrc.h" -- --VS_VERSION_INFO VERSIONINFO -- FILEVERSION FILE_VERSION_RESOURCE -- PRODUCTVERSION PRODUCT_VERSION_RESOURCE -- FILEFLAGSMASK 0x3fL --#ifdef _DEBUG -- FILEFLAGS 0x1L --#else -- FILEFLAGS 0x0L --#endif -- FILEOS 0x4L -- FILETYPE 0x1L -- FILESUBTYPE 0x0L --BEGIN -- BLOCK "StringFileInfo" -- BEGIN -- BLOCK "040904b0" -- BEGIN -- VALUE "Comments", PRODUCT_COMMENTS -- VALUE "CompanyName", PRODUCT_COMPANY_NAME -- VALUE "FileDescription", PRODUCT_FILE_DESCRIPTION -- VALUE "FileVersion", FILE_VERSION_RESOURCE_STR -- VALUE "InternalName", PRODUCT_INTERNAL_NAME -- VALUE "LegalCopyright", PRODUCT_COMPANY_COPYRIGHT -- VALUE "OriginalFilename", PRODUCT_ORIGINAL_FILENAME -- VALUE "ProductName", PRODUCT_BUNDLE -- VALUE "ProductVersion", PRODUCT_VERSION_RESOURCE_STR -- END -- END -- BLOCK "VarFileInfo" -- BEGIN -- VALUE "Translation", 0x409, 1200 -- END --END -diff -urNr keepassxc-2.6.4-orig/CMakeLists.txt keepassxc-2.6.4-patched/CMakeLists.txt ---- keepassxc-2.6.4-orig/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,516 +0,0 @@ --# Copyright (C) 2018 KeePassXC Team --# Copyright (C) 2010 Felix Geyer --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --cmake_minimum_required(VERSION 3.3.0) -- --project(KeePassXC) -- --if(NOT CMAKE_BUILD_TYPE) -- set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING -- "Choose the type of build, options are: Debug Release RelWithDebInfo Profile" -- FORCE) --endif() --string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) -- --set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -- --# Support Visual Studio Code --include(CMakeToolsHelpers OPTIONAL) --include(FeatureSummary) -- --include(CheckCCompilerFlag) --include(CheckCXXCompilerFlag) --include(CheckCXXSourceCompiles) -- --option(WITH_TESTS "Enable building of unit tests" ON) --option(WITH_GUI_TESTS "Enable building of GUI tests" OFF) --option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF) --option(WITH_ASAN "Enable address sanitizer checks (Linux / macOS only)" OFF) --option(WITH_COVERAGE "Use to build with coverage tests (GCC only)." OFF) --option(WITH_APP_BUNDLE "Enable Application Bundle for macOS" ON) --option(WITH_CCACHE "Use ccache for build" OFF) -- --set(WITH_XC_ALL OFF CACHE BOOL "Build in all available plugins") -- --option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) --option(WITH_XC_NETWORKING "Include networking code (e.g. for downloading website icons)." OFF) --option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) --option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) --option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) --option(WITH_XC_KEESHARE "Sharing integration with KeeShare (requires quazip5 for secure containers)" OFF) --option(WITH_XC_UPDATECHECK "Include automatic update checks; disable for controlled distributions" ON) --if(UNIX AND NOT APPLE) -- option(WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API." OFF) --endif() --if(APPLE) -- option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF) --endif() --option(WITH_XC_DOCS "Enable building of documentation" ON) -- --if(WITH_CCACHE) -- # Use the Compiler Cache (ccache) program -- # (install with: sudo apt get ccache) -- find_program(CCACHE_FOUND ccache) -- if(CCACHE_FOUND) -- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND}) -- else() -- message(FATAL_ERROR "ccache requested but cannot be found.") -- endif() --endif() -- --if(WITH_XC_ALL) -- # Enable all options (except update check and docs) -- set(WITH_XC_AUTOTYPE ON) -- set(WITH_XC_NETWORKING ON) -- set(WITH_XC_BROWSER ON) -- set(WITH_XC_YUBIKEY ON) -- set(WITH_XC_SSHAGENT ON) -- set(WITH_XC_KEESHARE ON) -- if(APPLE) -- set(WITH_XC_TOUCHID ON) -- endif() -- if(UNIX AND NOT APPLE) -- set(WITH_XC_FDOSECRETS ON) -- endif() --endif() -- --if(WITH_XC_SSHAGENT OR WITH_XC_KEESHARE) -- set(WITH_XC_CRYPTO_SSH ON) --else() -- set(WITH_XC_CRYPTO_SSH OFF) --endif() -- --# Prefer WITH_XC_NETWORKING setting over WITH_XC_UPDATECHECK --if(NOT WITH_XC_NETWORKING AND WITH_XC_UPDATECHECK) -- message(STATUS "Disabling WITH_XC_UPDATECHECK because WITH_XC_NETWORKING is disabled") -- set(WITH_XC_UPDATECHECK OFF) --endif() -- --set(KEEPASSXC_VERSION_MAJOR "2") --set(KEEPASSXC_VERSION_MINOR "6") --set(KEEPASSXC_VERSION_PATCH "4") --set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") --set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds") -- --set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") --set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease) -- --# Retrieve git HEAD revision hash --set(GIT_HEAD_OVERRIDE "" CACHE STRING "Manually set the Git HEAD hash when missing (eg, when no .git folder exists)") --execute_process(COMMAND git rev-parse --short=7 HEAD -- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -- OUTPUT_VARIABLE GIT_HEAD -- ERROR_QUIET) --string(STRIP "${GIT_HEAD}" GIT_HEAD) --if(GIT_HEAD STREQUAL "" AND NOT GIT_HEAD_OVERRIDE STREQUAL "") -- string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD) --elseif(EXISTS ${CMAKE_SOURCE_DIR}/.gitrev) -- file(READ ${CMAKE_SOURCE_DIR}/.gitrev GIT_HEAD) --endif() --message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n") -- --# Check if on a tag, if so build as a release --execute_process(COMMAND git tag --points-at HEAD -- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -- OUTPUT_VARIABLE GIT_TAG -- ERROR_QUIET) --if(GIT_TAG) -- string(STRIP "${GIT_TAG}" GIT_TAG) -- set(OVERRIDE_VERSION ${GIT_TAG}) --elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) -- file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) --endif() -- --string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}") --if(OVERRIDE_VERSION) -- if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") -- set(KEEPASSXC_BUILD_TYPE PreRelease) -- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) -- elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") -- set(KEEPASSXC_BUILD_TYPE Release) -- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) -- else() -- set(KEEPASSXC_BUILD_TYPE Snapshot) -- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) -- endif() --else() -- if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") -- set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") -- elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") -- set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") -- endif() --endif() -- --if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") -- set(KEEPASSXC_BUILD_TYPE_RELEASE ON) --elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") -- set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) --else() -- set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) --endif() -- --message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") -- --# Distribution info --set(KEEPASSXC_DIST ON) --set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type") --set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other) --if(KEEPASSXC_DIST_TYPE STREQUAL "Snap") -- set(KEEPASSXC_DIST_SNAP ON) --elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") -- set(KEEPASSXC_DIST_APPIMAGE ON) --elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") -- unset(KEEPASSXC_DIST) --endif() -- --if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") -- set(IS_32BIT TRUE) --endif() -- --set(CLANG_COMPILER_ID_REGEX "^(Apple)?[Cc]lang$") --if("${CMAKE_C_COMPILER}" MATCHES "clang$" -- OR "${CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__" -- OR "${CMAKE_C_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX}) -- set(CMAKE_COMPILER_IS_CLANG 1) --endif() -- --if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" -- OR "${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__" -- OR "${CMAKE_CXX_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX}) -- set(CMAKE_COMPILER_IS_CLANGXX 1) --endif() -- --macro(add_gcc_compiler_cxxflags FLAGS) -- if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") -- endif() --endmacro(add_gcc_compiler_cxxflags) -- --macro(add_gcc_compiler_cflags FLAGS) -- if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") -- endif() --endmacro(add_gcc_compiler_cflags) -- --macro(add_gcc_compiler_flags FLAGS) -- add_gcc_compiler_cxxflags("${FLAGS}") -- add_gcc_compiler_cflags("${FLAGS}") --endmacro(add_gcc_compiler_flags) -- --# Copies of above macros that first ensure the compiler understands a given flag --# Because check_*_compiler_flag() sets -D with name, need to provide "safe" FLAGNAME --macro(check_add_gcc_compiler_cxxflag FLAG FLAGNAME) -- check_cxx_compiler_flag("${FLAG}" CXX_HAS${FLAGNAME}) -- if(CXX_HAS${FLAGNAME}) -- add_gcc_compiler_cxxflags("${FLAG}") -- endif() --endmacro(check_add_gcc_compiler_cxxflag) -- --macro(check_add_gcc_compiler_cflag FLAG FLAGNAME) -- check_c_compiler_flag("${FLAG}" CC_HAS${FLAGNAME}) -- if(CC_HAS${FLAGNAME}) -- add_gcc_compiler_cflags("${FLAG}") -- endif() --endmacro(check_add_gcc_compiler_cflag) -- --# This is the "front-end" for the above macros --# Optionally takes additional parameter(s) with language to check (currently "C" or "CXX") --macro(check_add_gcc_compiler_flag FLAG) -- string(REGEX REPLACE "[-=]" "_" FLAGNAME "${FLAG}") -- set(check_lang_spec ${ARGN}) -- list(LENGTH check_lang_spec num_extra_args) -- set(langs C CXX) -- if(num_extra_args GREATER 0) -- set(langs "${check_lang_spec}") -- endif() -- if("C" IN_LIST langs) -- check_add_gcc_compiler_cflag("${FLAG}" "${FLAGNAME}") -- endif() -- if("CXX" IN_LIST langs) -- check_add_gcc_compiler_cxxflag("${FLAG}" "${FLAGNAME}") -- endif() --endmacro(check_add_gcc_compiler_flag) -- --add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) -- --if(WITH_APP_BUNDLE) -- add_definitions(-DWITH_APP_BUNDLE) --endif() -- --add_gcc_compiler_flags("-fno-common") --add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long") --add_gcc_compiler_flags("-Wformat=2 -Wmissing-format-attribute") --add_gcc_compiler_flags("-fvisibility=hidden") --add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") -- --if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") -- check_add_gcc_compiler_flag("-Wshadow-compatible-local") -- check_add_gcc_compiler_flag("-Wshadow-local") -- add_gcc_compiler_flags("-Werror") --endif() -- --if (NOT HAIKU) --if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX) -- add_gcc_compiler_flags("-fstack-protector-strong") --else() -- add_gcc_compiler_flags("-fstack-protector --param=ssp-buffer-size=4") --endif() --endif() -- --add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti") --add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual") --add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") -- --if(WITH_ASAN) -- if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) -- message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") -- endif() -- -- add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") -- -- if(CMAKE_SYSTEM_NAME STREQUAL "Linux") -- if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) -- add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") -- endif() -- endif() -- --endif() -- --if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") -- add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") --endif() -- --check_add_gcc_compiler_flag("-Werror=format-security") --check_add_gcc_compiler_flag("-Werror=implicit-function-declaration" C) --check_add_gcc_compiler_flag("-Wcast-align") -- --if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") -- # then: -- # $ llvm-profdata merge -sparse default.profraw -o default.profdata -- # $ llvm-cov show ./tests/${the_test_binary} \ -- # -format=html -instr-profile=default.profdata -output-dir=./coverages \ -- # `find src -iname '*.h' -or -iname '*.cpp'` --endif() -- --if(CMAKE_SYSTEM_NAME STREQUAL "Linux") -- check_add_gcc_compiler_flag("-Qunused-arguments") -- add_gcc_compiler_flags("-pie -fPIE") -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") -- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") -- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") --endif() -- --add_gcc_compiler_cflags("-std=c99") --add_gcc_compiler_cxxflags("-std=c++11") -- --check_add_gcc_compiler_flag("-fsized-deallocation" CXX) -- --if(APPLE AND CMAKE_COMPILER_IS_CLANGXX) -- add_gcc_compiler_cxxflags("-stdlib=libc++") --endif() -- --if(WITH_DEV_BUILD) -- add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) --else() -- add_definitions(-DQT_NO_DEPRECATED_WARNINGS) -- add_gcc_compiler_cxxflags("-Wno-deprecated-declarations") --endif() -- --if(MINGW) -- set(CMAKE_RC_COMPILER_INIT windres) -- enable_language(RC) -- set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") -- if(NOT (CMAKE_BUILD_TYPE_LOWER STREQUAL "debug" OR CMAKE_BUILD_TYPE_LOWER STREQUAL "relwithdebinfo")) -- # Enable DEP and ASLR -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") -- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") -- # Enable high entropy ASLR for 64-bit builds -- if(NOT IS_32BIT) -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") -- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") -- endif() -- endif() --endif() -- --if(APPLE AND WITH_APP_BUNDLE OR MINGW) -- set(PROGNAME KeePassXC) --else() -- set(PROGNAME keepassxc) --endif() -- --if(MINGW) -- set(CLI_INSTALL_DIR ".") -- set(PROXY_INSTALL_DIR ".") -- set(BIN_INSTALL_DIR ".") -- set(PLUGIN_INSTALL_DIR ".") -- set(DATA_INSTALL_DIR "share") --elseif(APPLE AND WITH_APP_BUNDLE) -- set(BUNDLE_INSTALL_DIR "${PROGNAME}.app/Contents") -- set(CMAKE_INSTALL_MANDIR "${BUNDLE_INSTALL_DIR}/Resources/man") -- set(CLI_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") -- set(PROXY_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") -- set(BIN_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") -- set(PLUGIN_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/PlugIns") -- set(DATA_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/Resources") --else() -- include(GNUInstallDirs) -- -- set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") -- set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") -- set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") -- set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") -- set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") --endif() -- --if(WITH_TESTS) -- enable_testing() --endif(WITH_TESTS) -- --if(WITH_COVERAGE) -- # Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug -- include(CodeCoverage) -- set(COVERAGE_GCOVR_EXCLUDES -- "\\(.+/\\)?tests/.\\*" -- ".\\*/moc_\\[^/\\]+\\.cpp" -- ".\\*/ui_\\[^/\\]+\\.h" -- "\\(.+/\\)?zxcvbn/.\\*") -- append_coverage_compiler_flags() -- setup_target_for_coverage_gcovr_html( -- NAME coverage -- EXECUTABLE $(MAKE) && $(MAKE) test -- ) --endif() -- --include(CLangFormat) -- --set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools) --if(UNIX AND NOT APPLE) -- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED) --elseif(APPLE) -- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) -- find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) --else() -- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) --endif() -- --if(Qt5Core_VERSION VERSION_LESS "5.2.0") -- message(FATAL_ERROR "Qt version 5.2.0 or higher is required") --endif() -- --get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) -- --# Process moc automatically --set(CMAKE_AUTOMOC ON) --# Process .ui files automatically --set(CMAKE_AUTOUIC ON) --# Process .qrc files automatically --set(CMAKE_AUTORCC ON) -- --if(APPLE) -- set(CMAKE_MACOSX_RPATH TRUE) -- find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) -- if(NOT MACDEPLOYQT_EXE) -- message(FATAL_ERROR "macdeployqt is required to build on macOS") -- else() -- message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") -- endif() --elseif(MINGW) -- find_program(WINDEPLOYQT_EXE windeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) -- if(NOT WINDEPLOYQT_EXE) -- message(FATAL_ERROR "windeployqt is required to build on Windows") -- else() -- message(STATUS "Using windeployqt: ${WINDEPLOYQT_EXE}") -- endif() --endif() -- --# Debian sets the the build type to None for package builds. --# Make sure we don't enable asserts there. --set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG) -- --find_package(LibGPGError REQUIRED) --find_package(Gcrypt 1.7.0 REQUIRED) --find_package(Argon2 REQUIRED) --find_package(ZLIB REQUIRED) --find_package(QREncode REQUIRED) --find_package(sodium 1.0.12 REQUIRED) -- --set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) -- --if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") -- message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") --endif() -- --include_directories(SYSTEM ${ARGON2_INCLUDE_DIR} ${sodium_INCLUDE_DIR}) -- --# Optional --if(WITH_XC_YUBIKEY) -- find_package(YubiKey REQUIRED) -- -- include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) --endif() -- --if(UNIX) -- check_cxx_source_compiles("#include -- int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" -- HAVE_PR_SET_DUMPABLE) -- -- check_cxx_source_compiles("#include -- int main() { return 0; }" -- HAVE_MALLOC_H) -- -- check_cxx_source_compiles("#include -- int main() { malloc_usable_size(NULL, 0); return 0; }" -- HAVE_MALLOC_USABLE_SIZE) -- -- check_cxx_source_compiles("#include -- int main() { -- struct rlimit limit; -- limit.rlim_cur = 0; -- limit.rlim_max = 0; -- setrlimit(RLIMIT_CORE, &limit); -- return 0; -- }" HAVE_RLIMIT_CORE) -- -- if(APPLE) -- check_cxx_source_compiles("#include -- #include -- int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" -- HAVE_PT_DENY_ATTACH) -- endif() --endif() -- --include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) -- --add_subdirectory(src) --add_subdirectory(share) --if(WITH_TESTS) -- add_subdirectory(tests) --endif(WITH_TESTS) -- --if(WITH_XC_DOCS) -- add_subdirectory(docs) --endif() -- --if(PRINT_SUMMARY) -- # This will print ENABLED, REQUIRED and DISABLED -- feature_summary(WHAT ALL) --else() -- # This will only print ENABLED and DISABLED feature -- feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") -- feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") --endif() -diff -urNr keepassxc-2.6.4-orig/COPYING keepassxc-2.6.4-patched/COPYING ---- keepassxc-2.6.4-orig/COPYING 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/COPYING 1970-01-01 01:00:00.000000000 +0100 -@@ -1,232 +0,0 @@ --KeePassXC - http://www.keepassxc.org/ --Copyright (C) 2016-2020 KeePassXC Team -- --This program is free software: you can redistribute it and/or modify --it under the terms of the GNU General Public License as published by --the Free Software Foundation, either version 2 or (at your option) --version 3 of the License. -- --This program is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --GNU General Public License for more details. -- ---------------------------------------------------------------------- -- --Format-Specification: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ --Upstream-Name: KeePassXC --Upstream-Contact: KeePassXC Team --Source: http://www.keepassxc.org/ -- --Copyright: 2010-2012, Felix Geyer -- 2011-2012, Florian Geyer -- 2012, Tobias Tangemann -- 2007, Trolltech ASA -- 2012, Intel Corporation -- 2012, Nokia Corporation and/or its subsidiary(-ies) -- 2000-2008, Tom Sato -- 2013, Laszlo Papp -- 2013, David Faure -- 2016-2020, KeePassXC Team --License: GPL-2 or GPL-3 -- --Comment: The "KeePassXC Team" in every copyright notice is formed by the following people: -- - droidmonkey -- - phoerious -- - TheZ3ro -- - louib -- - weslly -- Every other contributor is listed on https://github.com/keepassxreboot/keepassxc/graphs/contributors -- --Files: cmake/CodeCoverage.cmake --Copyright: 2012 - 2015, Lars Bilke --License: BSD-3-clause -- --Files: cmake/FindYubiKey.cmake --Copyright: 2014 Kyle Manna --License: GPL-2 or GPL-3 -- --Files: cmake/GenerateProductVersion.cmake --Copyright: 2015 halex2005 --License: MIT -- --Files: share/icons/application/scalable/apps/keepassxc.svg -- share/icons/application/scalable/apps/keepassxc-dark.svg -- share/icons/application/scalable/apps/keepassxc-locked.svg -- share/icons/application/scalable/apps/keepassxc-unlocked.svg -- share/icons/application/scalable/mimetypes/application-x-keepassxc.svg --Copyright: 2016, Lorenzo Stella --License: LGPL-2 -- --Files: share/icons/database/C00_Password.svg -- share/icons/database/C01_Package_Network.svg -- share/icons/database/C02_MessageBox_Warning.svg -- share/icons/database/C03_Server.svg -- share/icons/database/C04_Klipper.svg -- share/icons/database/C05_Edu_Languages.svg -- share/icons/database/C06_KCMDF.svg -- share/icons/database/C08_Socket.svg -- share/icons/database/C09_Identity.svg -- share/icons/database/C10_Kontact.svg -- share/icons/database/C11_Camera.svg -- share/icons/database/C12_IRKickFlash.svg -- share/icons/database/C13_KGPG_Key3.svg -- share/icons/database/C14_Laptop_Power.svg -- share/icons/database/C15_Scanner.svg -- share/icons/database/C16_Mozilla_Firebird.svg -- share/icons/database/C19_Mail_Generic.svg -- share/icons/database/C20_Misc.svg -- share/icons/database/C21_KOrganizer.svg -- share/icons/database/C22_ASCII.svg -- share/icons/database/C23_Icons.svg -- share/icons/database/C24_Connect_Established.svg -- share/icons/database/C25_Folder_Mail.svg -- share/icons/database/C28_QuickTime.svg -- share/icons/database/C29_KGPG_Term.svg -- share/icons/database/C30_Konsole.svg -- share/icons/database/C31_FilePrint.svg -- share/icons/database/C32_FSView.svg -- share/icons/database/C33_Run.svg -- share/icons/database/C34_Configure.svg -- share/icons/database/C36_Ark.svg -- share/icons/database/C39_History.svg -- share/icons/database/C40_Mail_Find.svg -- share/icons/database/C41_VectorGfx.svg -- share/icons/database/C42_KCMMemory.svg -- share/icons/database/C43_EditTrash.svg -- share/icons/database/C47_KPackage.svg -- share/icons/database/C48_Folder.svg -- share/icons/database/C49_Folder_Blue_Open.svg -- share/icons/database/C50_Folder_Tar.svg -- share/icons/database/C55_Thumbnail.svg -- share/icons/database/C56_KAddressBook.svg -- share/icons/database/C57_View_Text.svg -- share/icons/database/C58_KGPG.svg -- share/icons/database/C59_Package_Development.svg -- share/icons/database/C60_KFM_Home.svg -- share/icons/database/C62_Tux.svg -- share/icons/database/C63_Feather.svg -- share/icons/database/C65_W.svg -- share/icons/database/C67_Certificate.svg -- share/icons/database/C68_BlackBerry.svg --Copyright: none --License: MIT --Comment: Taken from https://github.com/icons8/flat-color-icons -- --Files: share/icons/badges/0_ShareActive.svg -- share/icons/badges/1_ShareInactive.svg -- share/icons/database/C07_Kate.svg -- share/icons/database/C17_CDROM_Unmount.svg -- share/icons/database/C18_Display.svg -- share/icons/database/C26_FileSave.svg -- share/icons/database/C27_NFS_Unmount.svg -- share/icons/database/C35_KRFB.svg -- share/icons/database/C38_Samba_Unmount.svg -- share/icons/database/C44_KNotes.svg -- share/icons/database/C51_Decrypted.svg -- share/icons/database/C52_Encrypted.svg -- share/icons/database/C54_Signature.svg -- share/icons/database/C66_Money.svg --Copyright: none --License: CC0 --Comment: Taken from https://github.com/paomedia/small-n-flat -- --Files: share/icons/badges/2_Expired.svg -- share/icons/database/C37_KPercentage.svg -- share/icons/database/C45_Cancel.svg -- share/icons/database/C46_Help.svg -- share/icons/database/C53_Apply.svg -- share/icons/database/C61_Services.svg --Copyright: 2020 KeePassXC Team --License: MIT -- --Files: share/icons/application/scalable/actions/chevron-double-down.svg -- share/icons/application/scalable/actions/chevron-double-right.svg -- share/icons/application/scalable/actions/document-close.svg -- share/icons/application/scalable/actions/document-edit.svg -- share/icons/application/scalable/actions/document-export.svg -- share/icons/application/scalable/actions/document-import.svg -- share/icons/application/scalable/actions/document-new.svg -- share/icons/application/scalable/actions/document-open.svg -- share/icons/application/scalable/actions/document-open-recent.svg -- share/icons/application/scalable/actions/document-properties.svg -- share/icons/application/scalable/actions/document-save.svg -- share/icons/application/scalable/actions/document-save-as.svg -- share/icons/application/scalable/actions/document-save-copy.svg -- share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg -- share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg -- share/icons/application/scalable/actions/entry-clone.svg -- share/icons/application/scalable/actions/entry-delete.svg -- share/icons/application/scalable/actions/entry-edit.svg -- share/icons/application/scalable/actions/entry-new.svg -- share/icons/application/scalable/actions/favicon-download.svg -- share/icons/application/scalable/actions/group-delete.svg -- share/icons/application/scalable/actions/group-edit.svg -- share/icons/application/scalable/actions/group-empty-trash.svg -- share/icons/application/scalable/actions/group-new.svg -- share/icons/application/scalable/actions/help-about.svg -- share/icons/application/scalable/actions/key-enter.svg -- share/icons/application/scalable/actions/message-close.svg -- share/icons/application/scalable/actions/move-down.svg -- share/icons/application/scalable/actions/move-up.svg -- share/icons/application/scalable/actions/paperclip.svg -- share/icons/application/scalable/actions/password-copy.svg -- share/icons/application/scalable/actions/password-generate.svg -- share/icons/application/scalable/actions/password-generator.svg -- share/icons/application/scalable/actions/password-show-off.svg -- share/icons/application/scalable/actions/password-show-on.svg -- share/icons/application/scalable/actions/refresh.svg -- share/icons/application/scalable/actions/reports.svg -- share/icons/application/scalable/actions/reports-exclude.svg -- share/icons/application/scalable/actions/statistics.svg -- share/icons/application/scalable/actions/system-help.svg -- share/icons/application/scalable/actions/system-search.svg -- share/icons/application/scalable/actions/url-copy.svg -- share/icons/application/scalable/actions/username-copy.svg -- share/icons/application/scalable/actions/view-history.svg -- share/icons/application/scalable/apps/internet-web-browser.svg -- share/icons/application/scalable/apps/keepassxc.svg -- share/icons/application/scalable/apps/keepassxc-dark.svg -- share/icons/application/scalable/apps/keepassxc-locked.svg -- share/icons/application/scalable/apps/keepassxc-unlocked.svg -- share/icons/application/scalable/apps/preferences-desktop-icons.svg -- share/icons/application/scalable/apps/preferences-system-network-sharing.svg -- share/icons/application/scalable/apps/utilities-terminal.svg -- share/icons/application/scalable/categories/preferences-other.svg -- share/icons/application/scalable/mimetypes/application-x-keepassxc.svg -- share/icons/application/scalable/status/dialog-error.svg -- share/icons/application/scalable/status/dialog-information.svg -- share/icons/application/scalable/status/dialog-warning.svg -- share/icons/application/scalable/status/security-high.svg --Copyright: 2019 Austin Andrews --License: SIL OPEN FONT LICENSE Version 1.1 --Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) -- --Files: src/streams/qtiocompressor.* -- src/streams/QtIOCompressor -- tests/modeltest.* --Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies) --License: LGPL-2.1 or GPL-3 -- --Files: src/zxcvbn/zxcvbn.* --Copyright: 2015-2017, Tony Evans --License: MIT -- --Files: src/gui/KMessageWidget.h -- src/gui/KMessageWidget.cpp --Copyright: 2011 Aurélien Gâteau -- 2014 Dominik Haumann --License: LGPL-2.1 -- --Files: share/macosx/background.tiff --Copyright: 2008-2014, Andrey Tarantsov --License: MIT -- --Files: share/icons/application/scalable/apps/freedesktop.svg --Copyright: GPL-2+ --Comment: from Freedesktop.org website -- --Files: share/icons/application/scalable/actions/hibp.svg -- share/icons/database/C64_Apple.svg --Copyright: GPL-2+ --Comment: from the Simple Icons repo (https://github.com/simple-icons/simple-icons/) -diff -urNr keepassxc-2.6.4-orig/docs/CMakeLists.txt keepassxc-2.6.4-patched/docs/CMakeLists.txt ---- keepassxc-2.6.4-orig/docs/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,67 +0,0 @@ --# Copyright (C) 2020 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --find_program(ASCIIDOCTOR_EXE asciidoctor) --if(NOT ASCIIDOCTOR_EXE) -- message(FATAL_ERROR "asciidoctor is required to build documentation") --else() -- message(STATUS "Using asciidoctor: ${ASCIIDOCTOR_EXE}") --endif() -- --set(DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) --set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) -- --# Build html documentation on all platforms --file(GLOB html_depends ${DOC_DIR}/topics/* ${DOC_DIR}/styles/* ${DOC_DIR}/images/*) --add_custom_command(OUTPUT KeePassXC_GettingStarted.html -- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_GettingStarted.html ${DOC_DIR}/GettingStarted.adoc -- DEPENDS ${html_depends} ${DOC_DIR}/GettingStarted.adoc -- VERBATIM) --add_custom_command(OUTPUT KeePassXC_UserGuide.html -- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_UserGuide.html ${DOC_DIR}/UserGuide.adoc -- DEPENDS ${html_depends} ${DOC_DIR}/UserGuide.adoc -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -- VERBATIM) --file(GLOB styles_depends ${DOC_DIR}/styles/*) --add_custom_command(OUTPUT KeePassXC_KeyboardShortcuts.html -- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_KeyboardShortcuts.html ${DOC_DIR}/topics/KeyboardShortcuts.adoc -- DEPENDS ${DOC_DIR}/topics/KeyboardShortcuts.adoc ${styles_depends} -- VERBATIM) -- --add_custom_target(docs ALL DEPENDS KeePassXC_GettingStarted.html KeePassXC_UserGuide.html KeePassXC_KeyboardShortcuts.html) -- --install(FILES -- ${OUT_DIR}/KeePassXC_GettingStarted.html -- ${OUT_DIR}/KeePassXC_UserGuide.html -- ${OUT_DIR}/KeePassXC_KeyboardShortcuts.html -- DESTINATION ${DATA_INSTALL_DIR}/docs) -- --# Build Man Pages on Linux and macOS --if(APPLE OR UNIX) -- add_custom_command(OUTPUT keepassxc.1 -- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc.1.adoc -- DEPENDS ${DOC_DIR}/man/keepassxc.1.adoc -- VERBATIM) -- add_custom_command(OUTPUT keepassxc-cli.1 -- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc-cli.1.adoc -- DEPENDS ${DOC_DIR}/man/keepassxc-cli.1.adoc -- VERBATIM) -- add_custom_target(manpages ALL DEPENDS keepassxc.1 keepassxc-cli.1) -- -- install(FILES -- ${OUT_DIR}/keepassxc.1 -- ${OUT_DIR}/keepassxc-cli.1 -- DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/) --endif() -diff -urNr keepassxc-2.6.4-orig/docs/GettingStarted.adoc keepassxc-2.6.4-patched/docs/GettingStarted.adoc ---- keepassxc-2.6.4-orig/docs/GettingStarted.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/GettingStarted.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --= KeePassXC: Getting Started Guide --KeePassXC Team --v2.6.0 --:data-uri: --:linkcss!: --:homepage: https://keepassxc.org --:icons: font --:imagesdir: images --:stylesheet: styles/dark.css --:toc: left --ifdef::backend-pdf[] --:title-page: --:title-logo-image: {imagesdir}/kpxc_logo.png --:pdf-theme: styles/pdf_theme.yml --:compress: --endif::[] -- --include::topics/Disclaimers.adoc[] -- --<<< -- --// Include various topics, excluding advanced sections -- --include::topics/Welcome.adoc[tags=*;!advanced] -- --include::topics/DownloadInstall.adoc[tags=*;!advanced] -- --include::topics/UserInterface.adoc[tags=*;!advanced] -- --include::topics/PasswordGenerator.adoc[tags=*;!advanced] -- --include::topics/DatabaseOperations.adoc[tags=*;!advanced] -- --include::topics/BrowserPlugin.adoc[tags=*;!advanced] -I file binari keepassxc-2.6.4-orig/docs/images/autoopen_ifdevice.png e keepassxc-2.6.4-patched/docs/images/autoopen_ifdevice.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/autoopen.png e keepassxc-2.6.4-patched/docs/images/autoopen.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/autotype_entrylevel.png e keepassxc-2.6.4-patched/docs/images/autotype_entrylevel.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/autotype_entry_sequences.png e keepassxc-2.6.4-patched/docs/images/autotype_entry_sequences.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/autotype_selection_dialog.png e keepassxc-2.6.4-patched/docs/images/autotype_selection_dialog.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/autotype_settings.png e keepassxc-2.6.4-patched/docs/images/autotype_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_advanced_settings.png e keepassxc-2.6.4-patched/docs/images/browser_advanced_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_confirm_access_dialog.png e keepassxc-2.6.4-patched/docs/images/browser_confirm_access_dialog.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_database_settings.png e keepassxc-2.6.4-patched/docs/images/browser_database_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_entry_settings.png e keepassxc-2.6.4-patched/docs/images/browser_entry_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_association.png e keepassxc-2.6.4-patched/docs/images/browser_extension_association.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_connect.png e keepassxc-2.6.4-patched/docs/images/browser_extension_connect.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_icons.png e keepassxc-2.6.4-patched/docs/images/browser_extension_icons.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_reload.png e keepassxc-2.6.4-patched/docs/images/browser_extension_reload.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_fill_credentials.png e keepassxc-2.6.4-patched/docs/images/browser_fill_credentials.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/browser_settings.png e keepassxc-2.6.4-patched/docs/images/browser_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/clone_entry_dialog.png e keepassxc-2.6.4-patched/docs/images/clone_entry_dialog.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/clone_entry.png e keepassxc-2.6.4-patched/docs/images/clone_entry.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/clone_entry_references.png e keepassxc-2.6.4-patched/docs/images/clone_entry_references.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/compact_mode_comparison.png e keepassxc-2.6.4-patched/docs/images/compact_mode_comparison.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/csv_import.png e keepassxc-2.6.4-patched/docs/images/csv_import.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_security_credentials.png e keepassxc-2.6.4-patched/docs/images/database_security_credentials.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_security_encryption_advanced.png e keepassxc-2.6.4-patched/docs/images/database_security_encryption_advanced.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_security_encryption.png e keepassxc-2.6.4-patched/docs/images/database_security_encryption.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_security.png e keepassxc-2.6.4-patched/docs/images/database_security.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_settings.png e keepassxc-2.6.4-patched/docs/images/database_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/database_view.png e keepassxc-2.6.4-patched/docs/images/database_view.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_attachments.png e keepassxc-2.6.4-patched/docs/images/edit_entry_attachments.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_attributes.png e keepassxc-2.6.4-patched/docs/images/edit_entry_attributes.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_colors.png e keepassxc-2.6.4-patched/docs/images/edit_entry_colors.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_history.png e keepassxc-2.6.4-patched/docs/images/edit_entry_history.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_icons.png e keepassxc-2.6.4-patched/docs/images/edit_entry_icons.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry.png e keepassxc-2.6.4-patched/docs/images/edit_entry.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_properties.png e keepassxc-2.6.4-patched/docs/images/edit_entry_properties.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/export_database.png e keepassxc-2.6.4-patched/docs/images/export_database.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/install_wizard_1.png e keepassxc-2.6.4-patched/docs/images/install_wizard_1.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/install_wizard_2.png e keepassxc-2.6.4-patched/docs/images/install_wizard_2.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/keeshare_application_settings.png e keepassxc-2.6.4-patched/docs/images/keeshare_application_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/keeshare_group_settings.png e keepassxc-2.6.4-patched/docs/images/keeshare_group_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/keeshare_shared_group.png e keepassxc-2.6.4-patched/docs/images/keeshare_shared_group.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/kpxc_logo.png e keepassxc-2.6.4-patched/docs/images/kpxc_logo.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/linux_store.png e keepassxc-2.6.4-patched/docs/images/linux_store.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/macos_install.png e keepassxc-2.6.4-patched/docs/images/macos_install.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/main_interface.png e keepassxc-2.6.4-patched/docs/images/main_interface.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_1.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_1.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_2.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_2.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_3.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_3.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/open_database.png e keepassxc-2.6.4-patched/docs/images/open_database.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/passphrase_generator.png e keepassxc-2.6.4-patched/docs/images/passphrase_generator.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/password_generator_advanced.png e keepassxc-2.6.4-patched/docs/images/password_generator_advanced.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/password_generator.png e keepassxc-2.6.4-patched/docs/images/password_generator.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/save_database_backup.png e keepassxc-2.6.4-patched/docs/images/save_database_backup.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/sshagent_application_settings.png e keepassxc-2.6.4-patched/docs/images/sshagent_application_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/sshagent_context_menu.png e keepassxc-2.6.4-patched/docs/images/sshagent_context_menu.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/sshagent_entry_settings.png e keepassxc-2.6.4-patched/docs/images/sshagent_entry_settings.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/sshagent_puttygen.png e keepassxc-2.6.4-patched/docs/images/sshagent_puttygen.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/theme_comparison.png e keepassxc-2.6.4-patched/docs/images/theme_comparison.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/theme_selection.png e keepassxc-2.6.4-patched/docs/images/theme_selection.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/toolbar.png e keepassxc-2.6.4-patched/docs/images/toolbar.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/uac_dialog.png e keepassxc-2.6.4-patched/docs/images/uac_dialog.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/unlock_database.png e keepassxc-2.6.4-patched/docs/images/unlock_database.png sono diversi -I file binari keepassxc-2.6.4-orig/docs/images/welcome_screen.png e keepassxc-2.6.4-patched/docs/images/welcome_screen.png sono diversi -diff -urNr keepassxc-2.6.4-orig/docs/man/keepassxc.1.adoc keepassxc-2.6.4-patched/docs/man/keepassxc.1.adoc ---- keepassxc-2.6.4-orig/docs/man/keepassxc.1.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/man/keepassxc.1.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,65 +0,0 @@ --// Copyright (C) 2019 Janek Bevendorff --// Copyright (C) 2020 KeePassXC Team --// --// This program is free software: you can redistribute it and/or modify --// it under the terms of the GNU General Public License as published by --// the Free Software Foundation, either version 2 or (at your option) --// version 3 of the License. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// --// You should have received a copy of the GNU General Public License --// along with this program. If not, see . -- --= keepassxc(1) --:docdate: 2020-07-10 --:doctype: manpage --:revnumber: 2.6.0 --:mansource: KeePassXC {revnumber} --:manmanual: General Commands Manual -- --== NAME --keepassxc - a modern open-source password manager -- --== SYNOPSIS --*keepassxc* [_options_] [_filename(s)_] -- --== DESCRIPTION --*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. --The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key. --KeePassXC uses a database format that is compatible with KeePass Password Safe. --Your wallet works offline and requires no Internet connection. -- --== OPTIONS --*-h*, *--help*:: -- Displays this help. -- --*-v*, *--version*:: -- Displays version information. -- --*--config* <__config__>:: -- Path to a custom config file. -- --*--keyfile* <__keyfile__>:: -- Key file of the database. -- --*--pw-stdin*:: -- Read password of the database from stdin. -- --*--pw*, *--parent-window* <__handle__>:: -- Parent window handle. -- --*--debug-info*:: -- Displays debugging information. -- --include::section-notes.adoc[] -- --== AUTHOR --This manual page was originally written by Janek Bevendorff . -- --include::section-reporting-bugs.adoc[] -- --include::section-copyright.adoc[] -diff -urNr keepassxc-2.6.4-orig/docs/man/keepassxc-cli.1.adoc keepassxc-2.6.4-patched/docs/man/keepassxc-cli.1.adoc ---- keepassxc-2.6.4-orig/docs/man/keepassxc-cli.1.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/man/keepassxc-cli.1.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,302 +0,0 @@ --// Copyright (C) 2017 Manolis Agkopian --// Copyright (C) 2020 KeePassXC Team --// --// This program is free software: you can redistribute it and/or modify --// it under the terms of the GNU General Public License as published by --// the Free Software Foundation, either version 2 or (at your option) --// version 3 of the License. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// --// You should have received a copy of the GNU General Public License --// along with this program. If not, see . -- --= keepassxc-cli(1) --:docdate: 2020-07-10 --:doctype: manpage --:revnumber: 2.6.0 --:mansource: KeePassXC {revnumber} --:manmanual: General Commands Manual -- --== NAME --keepassxc-cli - command line interface for the KeePassXC password manager -- --== SYNOPSIS --*keepassxc-cli* _command_ [_options_] -- --== DESCRIPTION --*keepassxc-cli* is the command line interface for the *KeePassXC* password manager. --It provides the ability to query and modify the entries of a KeePass database, directly from the command line. -- --== COMMANDS --*add* [_options_] <__database__> <__entry__>:: -- Adds a new entry to a database. -- A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option). -- The same password generation options as documented for the generate command can be used when the *-g* option is set. -- --*analyze* [_options_] <__database__>:: -- Analyzes passwords in a database for weaknesses. -- --*clip* [_options_] <__database__> <__entry__> [_timeout_]:: -- Copies an attribute or the current TOTP (if the *-t* option is specified) of a database entry to the clipboard. -- If no attribute name is specified using the *-a* option, the password is copied. -- If multiple entries with the same name exist in different groups, only the attribute for the first one is copied. -- For copying the attribute of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name. -- Optionally, a timeout in seconds can be specified to automatically clear the clipboard. -- --*close*:: -- In interactive mode, closes the currently opened database (see *open*). -- --*db-create* [_options_] <__database__>:: -- Creates a new database with a password and/or a key file. -- The key file will be created if the file that is referred to does not exist. -- If both the key file and password are empty, no database will be created. -- --*db-info* [_options_] <__database__>:: -- Show a database's information. -- --*diceware* [_options_]:: -- Generates a random diceware passphrase. -- --*edit* [_options_] <__database__> <__entry__>:: -- Edits a database entry. -- A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option). -- The same password generation options as documented for the generate command can be used when the *-g* option is set. -- --*estimate* [_options_] [_password_]:: -- Estimates the entropy of a password. -- The password to estimate can be provided as a positional argument, or using the standard input. -- --*exit*:: -- Exits interactive mode. -- Synonymous with *quit*. -- --*export* [_options_] <__database__>:: -- Exports the content of a database to standard output in the specified format (defaults to XML). -- --*generate* [_options_]:: -- Generates a random password. -- --*help* [_command_]:: -- Displays a list of available commands, or detailed information about the specified command. -- --*import* [_options_] <__xml__> <__database__>:: -- Imports the contents of an XML database to the target database. -- --*locate* [_options_] <__database__> <__term__>:: -- Locates all the entries that match a specific search term in a database. -- --*ls* [_options_] <__database__> [_group_]:: -- Lists the contents of a group in a database. -- If no group is specified, it will default to the root group. -- --*merge* [_options_] <__database1__> <__database2__>:: -- Merges two databases together. -- The first database file is going to be replaced by the result of the merge, for that reason it is advisable to keep a backup of the two database files before attempting a merge. -- In the case that both databases make use of the same credentials, the *--same-credentials* or *-s* option can be used. -- --*mkdir* [_options_] <__database__> <__group__>:: -- Adds a new group to a database. -- --*mv* [_options_] <__database__> <__entry__> <__group__>:: -- Moves an entry to a new group. -- --*open* [_options_] <__database__>:: -- Opens the given database in a shell-style interactive mode. -- This is useful for performing multiple operations on a single database (e.g. *ls* followed by *show*). -- --*quit*:: -- Exits interactive mode. -- Synonymous with *exit*. -- --*rm* [_options_] <__database__> <__entry__>:: -- Removes an entry from a database. -- If the database has a recycle bin, the entry will be moved there. -- If the entry is already in the recycle bin, it will be removed permanently. -- --*rmdir* [_options_] <__database__> <__group__>:: -- Removes a group from a database. -- If the database has a recycle bin, the group will be moved there. -- If the group is already in the recycle bin, it will be removed permanently. -- --*show* [_options_] <__database__> <__entry__>:: -- Shows the title, username, password, URL and notes of a database entry. -- Can also show the current TOTP. -- Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the *clip* command section also applies here. -- --== OPTIONS --=== General options --*--debug-info*:: -- Displays debugging information. -- --*-k*, *--key-file* <__path__>:: -- Specifies a path to a key file for unlocking the database. -- In a merge operation this option, is used to specify the key file path for the first database. -- --*--no-password*:: -- Deactivates the password key for the database. -- --*-y*, *--yubikey* <__slot__>:: -- Specifies a yubikey slot for unlocking the database. -- In a merge operation this option is used to specify the YubiKey slot for the first database. -- --*-q*, *--quiet* <__path__>:: -- Silences password prompt and other secondary outputs. -- --*-h*, *--help*:: -- Displays help information. -- --*-v*, *--version*:: -- Displays the program version. -- --=== Merge options --*-d*, *--dry-run* <__path__>:: -- Prints the changes detected by the merge operation without making any changes to the database. -- --*--key-file-from* <__path__>:: -- Sets the path of the key file for the second database. -- --*--no-password-from*:: -- Deactivates password key for the database to merge from. -- --*--yubikey-from* <__slot__>:: -- YubiKey slot for the second database. -- --*-s*, *--same-credentials*:: -- Uses the same credentials for unlocking both databases. -- --=== Add and edit options --The same password generation options as documented for the generate command can be used with those 2 commands when the *-g* option is set. -- --*-u*, *--username* <__username__>:: -- Specifies the username of the entry. -- --*--url* <__url__>:: -- Specifies the URL of the entry. -- --*-p*, *--password-prompt*:: -- Uses a password prompt for the entry's password. -- --*-g*, *--generate*:: -- Generates a new password for the entry. -- --=== Edit options --*-t*, *--title* <__title__>:: -- Specifies the title of the entry. -- --=== Estimate options --*-a*, *--advanced*:: -- Performs advanced analysis on the password. -- --=== Analyze options --*-H*, *--hibp* <__filename__>:: -- Checks if any passwords have been publicly leaked, by comparing against the given list of password SHA-1 hashes, which must be in "Have I Been Pwned" format. -- Such files are available from https://haveibeenpwned.com/Passwords; -- note that they are large, and so this operation typically takes some time (minutes up to an hour or so). -- --=== Clip options --*-a*, *--attribute*:: -- Copies the specified attribute to the clipboard. -- If no attribute is specified, the password attribute is the default. -- For example, "*-a* *username*" would copy the username to the clipboard. -- [Default: password] -- --*-t*, *--totp*:: -- Copies the current TOTP instead of the specified attribute to the clipboard. -- Will report an error if no TOTP is configured for the entry. -- --=== Create options --*-k*, *--set-key-file* <__path__>:: -- Set the key file for the database. -- --*-p*, *--set-password*:: -- Set a password for the database. -- --*-t*, *--decryption-time* <__time__>:: -- Target decryption time in MS for the database. -- --=== Show options --*-a*, *--attributes* <__attribute__>...:: -- Shows the named attributes. -- This option can be specified more than once, with each attribute shown one-per-line in the given order. -- If no attributes are specified and *-t* is not specified, a summary of the default attributes is given. -- Protected attributes will be displayed in clear text if specified explicitly by this option. -- --*-s*, *--show-protected*:: -- Shows the protected attributes in clear text. -- --*-t*, *--totp*:: -- Also shows the current TOTP, reporting an error if no TOTP is configured for the entry. -- --=== Diceware options --*-W*, *--words* <__count__>:: -- Sets the desired number of words for the generated passphrase. -- [Default: 7] -- --*-w*, *--word-list* <__path__>:: -- Sets the Path of the wordlist for the diceware generator. -- The wordlist must have > 1000 words, otherwise the program will fail. -- If the wordlist has < 4000 words a warning will be printed to STDERR. -- --=== Export options --*-f*, *--format*:: -- Format to use when exporting. -- Available choices are xml or csv. -- Defaults to xml. -- --=== List options --*-R*, *--recursive*:: -- Recursively lists the elements of the group. -- --*-f*, *--flatten*:: -- Flattens the output to single lines. -- When this option is enabled, subgroups and subentries will be displayed with a relative group path instead of indentation. -- --=== Generate options --*-L*, *--length* <__length__>:: -- Sets the desired length for the generated password. -- [Default: 16] -- --*-l*, *--lower*:: -- Uses lowercase characters for the generated password. -- [Default: Enabled] -- --*-U*, *--upper*:: -- Uses uppercase characters for the generated password. -- [Default: Enabled] -- --*-n*, *--numeric*:: -- Uses numbers characters for the generated password. -- [Default: Enabled] -- --*-s*, *--special*:: -- Uses special characters for the generated password. -- [Default: Disabled] -- --*-e*, *--extended*:: -- Uses extended ASCII characters for the generated password. -- [Default: Disabled] -- --*-x*, *--exclude* <__chars__>:: -- Comma-separated list of characters to exclude from the generated password. -- None is excluded by default. -- --*--exclude-similar*:: -- Exclude similar looking characters. -- [Default: Disabled] -- --*--every-group*:: -- Include characters from every selected group. -- [Default: Disabled] -- --include::section-notes.adoc[] -- --== AUTHOR --This manual page was originally written by Manolis Agkopian . -- --include::section-reporting-bugs.adoc[] -- --include::section-copyright.adoc[] -diff -urNr keepassxc-2.6.4-orig/docs/man/section-copyright.adoc keepassxc-2.6.4-patched/docs/man/section-copyright.adoc ---- keepassxc-2.6.4-orig/docs/man/section-copyright.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/man/section-copyright.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,19 +0,0 @@ --// Copyright (C) 2020 KeePassXC Team --// --// This program is free software: you can redistribute it and/or modify --// it under the terms of the GNU General Public License as published by --// the Free Software Foundation, either version 2 or (at your option) --// version 3 of the License. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// --// You should have received a copy of the GNU General Public License --// along with this program. If not, see . -- --== COPYRIGHT --Copyright \(C) 2016-2020 KeePassXC Team -- --*KeePassXC* code is licensed under GPL-2 or GPL-3. -diff -urNr keepassxc-2.6.4-orig/docs/man/section-notes.adoc keepassxc-2.6.4-patched/docs/man/section-notes.adoc ---- keepassxc-2.6.4-orig/docs/man/section-notes.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/man/section-notes.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,27 +0,0 @@ --// Copyright (C) 2020 KeePassXC Team --// --// This program is free software: you can redistribute it and/or modify --// it under the terms of the GNU General Public License as published by --// the Free Software Foundation, either version 2 or (at your option) --// version 3 of the License. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// --// You should have received a copy of the GNU General Public License --// along with this program. If not, see . -- --== NOTES --*Project homepage*:: -- https://keepassxc.org -- --*QuickStart Guide*:: -- https://keepassxc.org/docs/KeePassXC_GettingStarted.html -- --*User Guide*:: -- https://keepassxc.org/docs/KeePassXC_UserGuide.html -- --*Git repository*:: -- https://github.com/keepassxreboot/keepassxc.git -diff -urNr keepassxc-2.6.4-orig/docs/man/section-reporting-bugs.adoc keepassxc-2.6.4-patched/docs/man/section-reporting-bugs.adoc ---- keepassxc-2.6.4-orig/docs/man/section-reporting-bugs.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/man/section-reporting-bugs.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,17 +0,0 @@ --// Copyright (C) 2020 KeePassXC Team --// --// This program is free software: you can redistribute it and/or modify --// it under the terms of the GNU General Public License as published by --// the Free Software Foundation, either version 2 or (at your option) --// version 3 of the License. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// --// You should have received a copy of the GNU General Public License --// along with this program. If not, see . -- --== REPORTING BUGS --Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues. -diff -urNr keepassxc-2.6.4-orig/docs/styles/dark.css keepassxc-2.6.4-patched/docs/styles/dark.css ---- keepassxc-2.6.4-orig/docs/styles/dark.css 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/styles/dark.css 1970-01-01 01:00:00.000000000 +0100 -@@ -1,536 +0,0 @@ --@import url(https://fonts.googleapis.com/css?family=Noto+Sans); -- --/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ --/* Uncomment @import statement below to use as custom stylesheet */ --/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ --article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} --audio,canvas,video{display:inline-block} --audio:not([controls]){display:none;height:0} --script{display:none!important} --html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} --a{background:transparent} --a:focus{outline:thin dotted} --a:active,a:hover{outline:0} --h1{font-size:2em;margin:.67em 0} --abbr[title]{border-bottom:1px dotted} --b,strong{font-weight:bold} --dfn{font-style:italic} --hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} --mark{background:#ff0;color:#000} --code,kbd,pre,samp{font-family:monospace;font-size:1em} --pre{white-space:pre-wrap} --q{quotes:"\201C" "\201D" "\2018" "\2019"} --small{font-size:80%} --sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} --sup{top:-.5em} --sub{bottom:-.25em} --img{border:0} --svg:not(:root){overflow:hidden} --figure{margin:0} --fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} --legend{border:0;padding:0} --button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} --button,input{line-height:normal} --button,select{text-transform:none} --button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} --button[disabled],html input[disabled]{cursor:default} --input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} --button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} --textarea{overflow:auto;vertical-align:top} --table{border-collapse:collapse;border-spacing:0} --*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} --html,body{font-size:100%} --body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} --a:hover{cursor:pointer} --img,object,embed{max-width:100%;height:auto} --object,embed{height:100%} --img{-ms-interpolation-mode:bicubic} --.left{float:left!important} --.right{float:right!important} --.text-left{text-align:left!important} --.text-right{text-align:right!important} --.text-center{text-align:center!important} --.text-justify{text-align:justify!important} --.hide{display:none} --img,object,svg{display:inline-block;vertical-align:middle} --textarea{height:auto;min-height:50px} --select{width:100%} --.center{margin-left:auto;margin-right:auto} --.stretch{width:100%} --.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} --div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} --a{color:#2156a5;text-decoration:underline;line-height:inherit} --a:hover,a:focus{color:#1d4b8f} --a img{border:none} --p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} --p aside{font-size:.875em;line-height:1.35;font-style:italic} --h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} --h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} --h1{font-size:2.125em} --h2{font-size:1.6875em} --h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} --h4,h5{font-size:1.125em} --h6{font-size:1em} --hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} --em,i{font-style:italic;line-height:inherit} --strong,b{font-weight:bold;line-height:inherit} --small{font-size:60%;line-height:inherit} --code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} --ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} --ul,ol{margin-left:1.5em} --ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} --ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} --ul.square{list-style-type:square} --ul.circle{list-style-type:circle} --ul.disc{list-style-type:disc} --ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} --dl dt{margin-bottom:.3125em;font-weight:bold} --dl dd{margin-bottom:1.25em} --abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} --abbr{text-transform:none} --blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} --blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} --blockquote cite::before{content:"\2014 \0020"} --blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} --blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} --@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} --h1{font-size:2.75em} --h2{font-size:2.3125em} --h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} --h4{font-size:1.4375em}} --table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} --table thead,table tfoot{background:#f7f8f7} --table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} --table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} --table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} --table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} --h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} --h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} --.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} --.clearfix::after,.float-group::after{clear:both} --*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} --*:not(pre)>code.nobreak{word-wrap:normal} --*:not(pre)>code.nowrap{white-space:nowrap} --pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} --em em{font-style:normal} --strong strong{font-weight:400} --.keyseq{color:rgba(51,51,51,.8)} --kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} --.keyseq kbd:first-child{margin-left:0} --.keyseq kbd:last-child{margin-right:0} --.menuseq,.menuref{color:#000} --.menuseq b:not(.caret),.menuref{font-weight:inherit} --.menuseq{word-spacing:-.02em} --.menuseq b.caret{font-size:1.25em;line-height:.8} --.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} --b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} --b.button::before{content:"[";padding:0 3px 0 2px} --b.button::after{content:"]";padding:0 2px 0 3px} --p a>code:hover{color:rgba(0,0,0,.9)} --#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} --#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} --#header::after,#content::after,#footnotes::after,#footer::after{clear:both} --#content{margin-top:1.25em} --#content::before{content:none} --#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} --#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} --#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} --#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} --#header .details span:first-child{margin-left:-.125em} --#header .details span.email a{color:rgba(0,0,0,.85)} --#header .details br{display:none} --#header .details br+span::before{content:"\00a0\2013\00a0"} --#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} --#header .details br+span#revremark::before{content:"\00a0|\00a0"} --#header #revnumber{text-transform:capitalize} --#header #revnumber::after{content:"\00a0"} --#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} --#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} --#toc>ul{margin-left:.125em} --#toc ul.sectlevel0>li>a{font-style:italic} --#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} --#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} --#toc li{line-height:1.3334;margin-top:.3334em} --#toc a{text-decoration:none} --#toc a:active{text-decoration:underline} --#toctitle{color:#7a2518;font-size:1.2em} --@media screen and (min-width:768px){#toctitle{font-size:1.375em} --body.toc2{padding-left:15em;padding-right:0} --#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} --#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} --#toc.toc2>ul{font-size:.9em;margin-bottom:0} --#toc.toc2 ul ul{margin-left:0;padding-left:1em} --#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} --body.toc2.toc-right{padding-left:0;padding-right:15em} --body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} --@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} --#toc.toc2{width:20em} --#toc.toc2 #toctitle{font-size:1.375em} --#toc.toc2>ul{font-size:.95em} --#toc.toc2 ul ul{padding-left:1.25em} --body.toc2.toc-right{padding-left:0;padding-right:20em}} --#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} --#content #toc>:first-child{margin-top:0} --#content #toc>:last-child{margin-bottom:0} --#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} --#footer-text{color:rgba(255,255,255,.8);line-height:1.44} --#content{margin-bottom:.625em} --.sect1{padding-bottom:.625em} --@media screen and (min-width:768px){#content{margin-bottom:1.25em} --.sect1{padding-bottom:1.25em}} --.sect1:last-child{padding-bottom:0} --.sect1+.sect1{border-top:1px solid #efefed} --#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} --#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} --#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} --#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} --#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} --.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} --.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} --table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} --.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} --table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} --.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} --.admonitionblock>table td.icon{text-align:center;width:80px} --.admonitionblock>table td.icon img{max-width:none} --.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} --.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} --.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} --.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} --.exampleblock>.content>:first-child{margin-top:0} --.exampleblock>.content>:last-child{margin-bottom:0} --.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} --.sidebarblock>:first-child{margin-top:0} --.sidebarblock>:last-child{margin-bottom:0} --.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} --.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} --.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} --.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} --.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} --.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} --@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} --@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} --.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} --.listingblock pre.highlightjs{padding:0} --.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} --.listingblock pre.prettyprint{border-width:0} --.listingblock>.content{position:relative} --.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} --.listingblock:hover code[data-lang]::before{display:block} --.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999} --.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} --table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} --table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} --table.pyhltable td.code{padding-left:.75em;padding-right:0} --pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} --pre.pygments .lineno{display:inline-block;margin-right:.25em} --table.pyhltable .linenodiv{background:none!important;padding-right:0!important} --.quoteblock{margin:0 1em 1.25em 1.5em;display:table} --.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} --.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} --.quoteblock blockquote{margin:0;padding:0;border:0} --.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} --.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} --.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} --.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} --.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} --.quoteblock .quoteblock blockquote::before{display:none} --.verseblock{margin:0 1em 1.25em} --.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} --.verseblock pre strong{font-weight:400} --.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} --.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} --.quoteblock .attribution br,.verseblock .attribution br{display:none} --.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} --.quoteblock.abstract{margin:0 1em 1.25em;display:block} --.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} --.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6} --.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none} --table.tableblock{max-width:100%;border-collapse:separate} --p.tableblock:last-child{margin-bottom:0} --td.tableblock>.content{margin-bottom:-1.25em} --table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} --table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} --table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} --table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} --table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} --table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} --table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} --table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} --table.frame-all{border-width:1px} --table.frame-sides{border-width:0 1px} --table.frame-topbot,table.frame-ends{border-width:1px 0} --table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7} --table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none} --th.halign-left,td.halign-left{text-align:left} --th.halign-right,td.halign-right{text-align:right} --th.halign-center,td.halign-center{text-align:center} --th.valign-top,td.valign-top{vertical-align:top} --th.valign-bottom,td.valign-bottom{vertical-align:bottom} --th.valign-middle,td.valign-middle{vertical-align:middle} --table thead th,table tfoot th{font-weight:bold} --tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} --tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} --p.tableblock>code:only-child{background:none;padding:0} --p.tableblock{font-size:1em} --td>div.verse{white-space:pre} --ol{margin-left:1.75em} --ul li ol{margin-left:1.5em} --dl dd{margin-left:1.125em} --dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} --ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} --ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} --ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} --ul.unstyled,ol.unstyled{margin-left:0} --ul.checklist{margin-left:.625em} --ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} --ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} --ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} --ul.inline>li{margin-left:1.25em} --.unstyled dl dt{font-weight:400;font-style:normal} --ol.arabic{list-style-type:decimal} --ol.decimal{list-style-type:decimal-leading-zero} --ol.loweralpha{list-style-type:lower-alpha} --ol.upperalpha{list-style-type:upper-alpha} --ol.lowerroman{list-style-type:lower-roman} --ol.upperroman{list-style-type:upper-roman} --ol.lowergreek{list-style-type:lower-greek} --.hdlist>table,.colist>table{border:0;background:none} --.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} --td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} --td.hdlist1{font-weight:bold;padding-bottom:1.25em} --.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} --.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} --.colist td:not([class]):first-child img{max-width:none} --.colist td:not([class]):last-child{padding:.25em 0} --.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} --.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} --.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} --.imageblock>.title{margin-bottom:0} --.imageblock.thumb,.imageblock.th{border-width:6px} --.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} --.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} --.image.left{margin-right:.625em} --.image.right{margin-left:.625em} --a.image{text-decoration:none;display:inline-block} --a.image object{pointer-events:none} --sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} --sup.footnote a,sup.footnoteref a{text-decoration:none} --sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} --#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} --#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} --#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} --#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} --#footnotes .footnote:last-of-type{margin-bottom:0} --#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} --.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} --.gist .file-data>table td.line-data{width:99%} --div.unbreakable{page-break-inside:avoid} --.big{font-size:larger} --.small{font-size:smaller} --.underline{text-decoration:underline} --.overline{text-decoration:overline} --.line-through{text-decoration:line-through} --.aqua{color:#00bfbf} --.aqua-background{background-color:#00fafa} --.black{color:#000} --.black-background{background-color:#000} --.blue{color:#0000bf} --.blue-background{background-color:#0000fa} --.fuchsia{color:#bf00bf} --.fuchsia-background{background-color:#fa00fa} --.gray{color:#606060} --.gray-background{background-color:#7d7d7d} --.green{color:#006000} --.green-background{background-color:#007d00} --.lime{color:#00bf00} --.lime-background{background-color:#00fa00} --.maroon{color:#600000} --.maroon-background{background-color:#7d0000} --.navy{color:#000060} --.navy-background{background-color:#00007d} --.olive{color:#606000} --.olive-background{background-color:#7d7d00} --.purple{color:#600060} --.purple-background{background-color:#7d007d} --.red{color:#bf0000} --.red-background{background-color:#fa0000} --.silver{color:#909090} --.silver-background{background-color:#bcbcbc} --.teal{color:#006060} --.teal-background{background-color:#007d7d} --.white{color:#bfbfbf} --.white-background{background-color:#fafafa} --.yellow{color:#bfbf00} --.yellow-background{background-color:#fafa00} --span.icon>.fa{cursor:default} --a span.icon>.fa{cursor:inherit} --.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} --.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} --.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} --.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} --.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} --.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} --.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} --.conum[data-value] *{color:#fff!important} --.conum[data-value]+b{display:none} --.conum[data-value]::after{content:attr(data-value)} --pre .conum[data-value]{position:relative;top:-.125em} --b.conum *{color:inherit!important} --.conum:not([data-value]):empty{display:none} --dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} --h1,h2,p,td.content,span.alt{letter-spacing:-.01em} --p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} --p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} --p{margin-bottom:1.25rem} --.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} --.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} --.print-only{display:none!important} --@page{margin:1.25cm .75cm} --@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} --html{font-size:80%} --a{color:inherit!important;text-decoration:underline!important} --a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} --a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} --abbr[title]::after{content:" (" attr(title) ")"} --pre,blockquote,tr,img,object,svg{page-break-inside:avoid} --thead{display:table-header-group} --svg{max-width:100%} --p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} --h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} --#toc,.sidebarblock,.exampleblock>.content{background:none!important} --#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} --body.book #header{text-align:center} --body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} --body.book #header .details{border:0!important;display:block;padding:0!important} --body.book #header .details span:first-child{margin-left:0!important} --body.book #header .details br{display:block} --body.book #header .details br+span::before{content:none!important} --body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} --body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} --.listingblock code[data-lang]::before{display:block} --#footer{padding:0 .9375em} --.hide-on-print{display:none!important} --.print-only{display:block!important} --.hide-for-print{display:none!important} --.show-for-print{display:inherit!important}} --@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} --.sect1{padding:0!important} --.sect1+.sect1{border:0} --#footer{background:none} --#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} --@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} -- -- -- --/* CUSTOMISATIONS */ --/* Change the values in root for quick customisation. If you want even more fine grain... venture further. */ --:root { ----textcolor: #CACBCE; ----textcoloralt: #e7b649; ----background: #3B3B3D; ----sidebarbackground: #2C2C30; ----header1color: #4adb22; ----header2color: #6de597; ----quotecolor: #20b82b; ----toccolor: #f3bf4a; ----toccolorhover: #eece83; ----linkcolor: #6de597; ----linkhovercolor: #8fdaa9; ----tipcolor: #f0f0f0; ----notecolor: #f3bf4a; ----warningcolor: #FF7D7D; --} -- --/* Text styles */ -- --body{font-family: "Noto Sans",sans-serif;background-color: var(--background);color:var(--textcolor);} -- --h1{color:var(--header1color) !important;font-family:"Noto Sans",sans-serif;} --h2,h3,h4,h5,h6{color:var(--header2color) !important;font-family:"Noto Sans",sans-serif;} --.title{color:var(--textcolor) !important;font-family:"Noto Sans",sans-serif;font-style: normal; font-weight: normal;} --p{font-family: "Noto Sans",sans-serif !important} --#toc.toc2 a:link{color:var(--toccolor)} --#toc.toc2 a:hover{color:var(--toccolorhover)} --blockquote{color:var(--quotecolor) !important} --.quoteblock{color:var(--textcolor)} --code{color:var(--textcoloralt);background-color: var(--sidebarbackground) !important} --pre,pre>code{line-height:1.25; color:var(--textcoloralt);} --.keyseq{color:var(--textcoloralt);} -- -- --/* Table styles */ --th{background-color: var(--background);color: var(--textcolor) !important;} --td{background-color: var(--background);color: var(--textcoloralt) !important;} -- -- --#toc.toc2{background-color:var(--sidebarbackground);} --#toctitle{color:var(--textcolor);} -- --/* Responsiveness fixes */ --video { -- max-width: 100%; --} -- --.exampleblock > .content { -- background-color: var(--background); --} -- --a {color: var(--linkcolor);} --a:hover {color: var(--linkhovercolor);} -- --.admonitionblock.tip td.content, .admonitionblock td.icon .icon-tip::before { -- text-shadow: none; -- color: var(--tipcolor) !important; --} -- --.admonitionblock.note td.content, .admonitionblock td.icon .icon-note::before { -- color: var(--notecolor) !important; --} -- --.admonitionblock.important td.content, .admonitionblock td.icon .icon-important::before { -- color: var(--warningcolor) !important; --} -- --.admonitionblock.warning td.content, .admonitionblock td.icon .icon-warning::before { -- color: var(--warningcolor) !important; --} -- --#preamble > .sectionbody > .paragraph:first-of-type p { -- color: var(--textcolor); --} -- --.quoteblock blockquote::before { -- color: var(--header1color); --} --.quoteblock .attribution cite, .verseblock .attribution cite { -- color: var(--textcolor); --} --.verseblock pre { -- color: var(--textcolor); --} --.quoteblock blockquote, .quoteblock blockquote p { -- color: var(--textcolor); --} -- --.sidebarblock { -- background: var(--sidebarbackground); --} --.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { -- background: var(--sidebarbackground); -- color: var(--textcolor); --} -- --#header .details { -- color: var(--textcolor); --} --#header .details span.email a { -- color: var(--toccolor); --} -- --.title { -- font-size: 3em; --} --.subtitle { -- font-size: 1.5em; --} -diff -urNr keepassxc-2.6.4-orig/docs/styles/pdf_theme.yml keepassxc-2.6.4-patched/docs/styles/pdf_theme.yml ---- keepassxc-2.6.4-orig/docs/styles/pdf_theme.yml 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/styles/pdf_theme.yml 1970-01-01 01:00:00.000000000 +0100 -@@ -1,30 +0,0 @@ --page: -- layout: portrait -- margin: [0.75in, 1in, 0.75in, 1in] -- size: Letter --base: -- font-color: #333333 -- font-family: Times-Roman -- font-size: 12 -- line-height-length: 17 -- line-height: $base-line-height-length / $base-font-size --vertical-spacing: $base-line-height-length --heading: -- font-color: #262626 -- font-size: 17 -- font-style: bold -- line-height: 1.2 -- margin-bottom: $vertical-spacing --link: -- font-color: #002FA7 --outline-list: -- indent: $base-font-size * 1.5 --footer: -- height: $base-line-height-length * 2.5 -- line-height: 1 -- recto: -- right: -- content: '{page-number}' -- verso: -- left: -- content: $footer-recto-right-content -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/docs/topics/AutoType.adoc keepassxc-2.6.4-patched/docs/topics/AutoType.adoc ---- keepassxc-2.6.4-orig/docs/topics/AutoType.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/AutoType.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,86 +0,0 @@ --= KeePassXC - Auto-Type --:imagesdir: ../images -- --// tag::content[] --== Auto-Type --The Auto-Type feature acts like a virtual keyboard to populate data from your entries directly into the corresponding websites or applications that you use. You can use the Auto-Type feature on a global level or entry level. Each entry can be configured to be associated with a particular window title and multiple Auto-Type sequences can be pre-defined and selected upon use. -- --NOTE: Auto-Type is a completely separate feature from Browser Integration. You do not need to have the KeePassXC browser extension installed in your browser to use Auto-Type. -- --WARNING: Auto-Type will be disabled when run with a Wayland compositor on Linux. To use Auto-Type in this environment, you must set `QT_QPA_PLATFORM=xcb` or start KeePassXC with the `-platform xcb` command-line flag. -- --=== Configure Global Auto-Type --You can define a global Auto-Type hotkey that starts the Auto-Type process. To configure the hotkey, perform the following steps: -- --1. Navigate to _Tools_ -> _Settings_ -> Auto-Type tab *(1)*. Click into the _Global Auto-Type shortcut_ box and press the desired key combination that will trigger the Auto-Type process *(2)*. --+ --.Auto-Type settings --image::autotype_settings.png[] --+ --You can configure additional Auto-Type settings in this window such as start delay, inter-key typing delay, and matching options. If Auto-Type is not working well for you, try adjusting the default delays. -- --=== Configure Auto-Type Sequences --Each entry in your database can have multiple Auto-Type sequences associated with various window titles. Simulated key presses can be sent to any other currently open window of your choice (web browser windows, login dialogs boxes, and so on). When the Global Auto-Type hotkey is pressed, KeePassXC will search your database for entries matching the current selected window title. -- --NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the `Tab` key, then types the password of the entry and finally presses the `Enter` key. -- --To configure Auto-Type sequences for your entries, perform the following steps: -- --1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the `+` button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*. You can use wildcard `*` to match any value (e.g., when a window title contains a filename or website name). --+ --.Auto-Type entry sequences --image::autotype_entry_sequences.png[] -- --2. _(Optional)_ Define a custom auto-type sequence for each window title match by selecting the _Use specific sequence for this association_ checkbox. Sequence action codes and field placeholders are detailed in the following table. A complete list of supported actions and placeholders can be found at https://keepass.info/help/base/autotype.html#autoseq[KeePass Auto-Type Action Codes] and https://keepass.info/help/base/placeholders.html[KeePass Placeholders]. Action codes and placeholders are not case sensitive. --+ --[grid=rows, frame=none, width=70%] --|=== --|Action Code |Description -- --|{TAB}, {ENTER}, {SPACE}, {INSERT}, {DELETE}, {HOME}, {END}, {PGUP}, {PGDN}, {BACKSPACE}, {CAPSLOCK}, {ESC} --|Press the corresponding keyboard key -- --|{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key --|{F1}, {F2}, ..., {F16} |Press F1, F2, etc. --|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively --|{DELAY=X} |Set key press delay to X milliseconds --|{DELAY X} |Delay typing start by X milliseconds --|{CLEARFIELD} |Clear the input field before typing --|{TOTP} |Insert calculated TOTP value (if configured) --|{ X} |Repeat X times (e.g., {SPACE 5} inserts five spaces) --|=== --+ --[grid=rows, frame=none, width=70%] --|=== --|Placeholder |Description -- --|{TITLE} |Entry Title --|{USERNAME} |Username --|{PASSWORD} |Password --|{URL} |URL --|{NOTES} |Notes --|{TOTP} |Current TOTP value (if configured) --|{DT_SIMPLE} |Current date-time --|{DB_DIR} |Absolute directory path for database file --|{S:} |Value for the given attribute name --|{REF:@:} |Search for a field in another entry using the reference syntax. --|=== -- --=== Performing Global Auto-Type --The global Auto-Type keyboard shortcut is used when you have focus on the window you want to type into. To make use of this feature, you must have previously configured an Auto-Type hotkey. -- --Pressing the global Auto-Type hotkey cause KeePassXC to search the database for entries that match the window title. Multiple matches may be returned and will cause the sequence selection dialog to appear. Click on a sequence line will immediately execute the Auto-Type action. A search box is also available in case numerous matches are returned. -- --.Auto-Type sequence selection --image::autotype_selection_dialog.png[,70%] -- --TIP: The _Sequence_ column will only appear when there are different sequences defined by one or more entries displayed in the selection dialog. -- --=== Performing Entry-Level Auto-Type --You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing `Ctrl+Shift+V`. -- --WARNING: Be careful when using Entry-Level Auto-Type as you can inadvertently type into the wrong window. For example, a chat window or email. -- --.Entry-Level Auto-Type --image::autotype_entrylevel.png[] --// end::content[] -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/docs/topics/BrowserPlugin.adoc keepassxc-2.6.4-patched/docs/topics/BrowserPlugin.adoc ---- keepassxc-2.6.4-orig/docs/topics/BrowserPlugin.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/BrowserPlugin.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,145 +0,0 @@ --= KeePassXC - Browser Plugin --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Setup Browser Integration --The KeePassXC-Browser extension is installed within your web browser so that you can automatically pull usernames and passwords from KeePassXC and populate them directly into website fields. It is a very useful and secure extension that enhances your productivity while using KeePassXC. With this extension, you do not need to manually copy the data from your KeePassXC database and paste it into the website fields. -- --The KeePassXC-Browser extension is available on the following web browsers: -- --* Google Chrome, Vivaldi, and Brave --* Mozilla Firefox and Tor-Browser --* Microsoft Edge --* Chromium -- --=== Install the Browser Extension --You can download the KeePassXC-Browser extension from your web browser. To download the KeePassXC-Browser extension, perform the following steps: -- --1. Click the link corresponding to your browser: -- * https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk[Chrome, Chromium, Vivaldi, and Brave] -- * https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser[Mozilla Firefox and Tor-Browser] -- * https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo[Microsoft Edge] -- --2. Click the button to install/add the extension to the browser. Accept any confirmation dialogs. -- --// tag::advanced[] --NOTE: When Microsoft Edge is installed as a managed application, system administrators are required to deploy a custom native messaging configuration. Instructions for this are found in the advanced section below. --// end::advanced[] -- --=== Configure KeePassXC-Browser --To start using KeePassXC-Browser, you must configure it so that it can communicate with the KeePassXC application on your desktop. -- --To configure KeePassXC-Browser, perform the following steps: -- --1. Open the KeePassXC application on your desktop and navigate to Tools > Settings. -- --2. Click the Browser Integration option on the left-hand side *(1)*. The following screen appears: --+ --.Browser Settings --image::browser_settings.png[] -- --3. Click the _Enable browser integration_ checkbox *(2)*. Then select the browsers for which you have downloaded the KeePassXC-Browser extension *(3)* and click *OK*. -- --4. Ensure your database is unlocked, then open (or restart) your browser. -- --5. Click the KeePassXC-Browser extension icon *(A)* in your browser (see figure below). A pop-up window appears. --+ --.Connect Extension to KeePassXC --image::browser_extension_connect.png[,80%] -- --6. Click the _Connect_ button *(B)* in the pop-up window to complete integrating the KeePassXC-Browser extension with your KeePassXC desktop application. -- --7. You are now prompted to enter a unique name to identify the connection between this browser and your database. Enter a unique name in the field (e.g., firefox-laptop) and click the _Save and allow access_ button. --+ --.Extension Association Dialog --image::browser_extension_association.png[,80%] -- --WARNING: If you reuse a connection name in a database, the previous browser connection will be overwritten and prevent access. -- --=== Using the Browser Extension --The KeePassXC-Browser extension lets you automatically populate the entries from your KeePassXC database into the fields on websites you visit. To do so, perform the following steps: -- --1. Open your KeePassXC desktop application and unlock your database. -- --2. Open your web browser. The KeePassXC-Browser extension icon in your browser window will change based on its connection state. The figure below shows the different states. --+ --*(A)* KeePassXC is not running or is disconnected + --*(B)* Connected to KeePassXC, but database is locked + --*\(C)* Connected to KeePassXC and ready to use --+ --.Extension Icon States --image::browser_extension_icons.png[,70%] -- --3. If the KeePassXC desktop application is not connected with the KeePassXC-Browser extension, click the extension icon in your web browser and click _Reload_ from the pop-up window as shown in the following screen. --+ --.Reload Extension Connection --image::browser_extension_reload.png[,80%] -- --4. Open the URL for which you want to use with your database. If you have previously created an entry in your database then the KeePassXC-Browser Confirm Access dialog may appear: --+ --.Confirm Access Dialog --image::browser_confirm_access_dialog.png[,80%] -- --5. Ensure the credentials you want use are checked, then click *(A)* Remember _(optional)_, then click _Allow Selected_ *(B)*. -- --6. In your website, the KeePassXC icon will appear in the username field of the login form *(A)*. Click the icon to populate the field with your stored credentials. If you have more than one credential for this website, a dropdown will appear to choose the one to use. --+ --.Fill Credentials --image::browser_fill_credentials.png[,80%] -- --// tag::advanced[] --=== Advanced Usage --You can configure unique browser integration behavior for each entry. This allows you to add multiple URLs to an entry, hide an entry from the browser integration, and more. To access these settings, open an entry for editing then click on _Browser Integration_ option in the left-hand menu *(1)*. -- --After opening the settings you can add any number of additional URLs by clicking the _Add_ button *(2)* and typing the URL in the list to the left *(3)*. -- --.Entry browser settings --image::browser_entry_settings.png[] -- --Database-wide operations are available in the database settings. To access these use the _Database_ -> _Database settings..._ menu option. Click on _Browser Integration_ on the left-hand menu. From here you can disconnect all browsers, convert legacy KeePass-HTTP settings, reset all entry-level settings, and refresh the database root group ID (useful when making copies of your database file). -- --.Database browser settings --image::browser_database_settings.png[] -- --Finally, advanced application-wide settings are available in the Browser Integration tab of the application settings. -- --WARNING: We do not recommend changing any of these settings as they may break the browser integration plugin. -- --.Advanced browser settings --image::browser_advanced_settings.png[] -- --=== Advanced Setup --==== Managed Microsoft Edge on Windows --1. Deploy *org.keepassxc.keepassxc_browser_edge.json* to, for example, `C:\ProgramData\KeepassXC` on all managed platforms. --+ ------ --{ -- "allowed_origins": [ -- "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/" -- ], -- "description": "KeePassXC integration with native messaging support", -- "name": "org.keepassxc.keepassxc_browser", -- "path": "C:\\Program Files\\KeePassXC\\keepassxc-proxy.exe", -- "type": "stdio" --} ------ -- --2. Configure GPO options (registry result): --+ ------ --Windows Registry Editor Version 5.00 --[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\org.keepassxc.keepassxc_browser] --@="C:\ProgramData\KeepassXC\org.keepassxc.keepassxc_browser_edge.json" -- --[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] --"NativeMessagingUserLevelHosts"=dword:00000000 -- --[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallAllowlist] --"1"="pdffhmdngciaglkoonimfcmckehcpafo" -- --[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\NativeMessagingAllowlist] --"1"="org.keepassxc.keepassxc_browser" ------ --// end::advanced[] --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/DatabaseOperations.adoc keepassxc-2.6.4-patched/docs/topics/DatabaseOperations.adoc ---- keepassxc-2.6.4-orig/docs/topics/DatabaseOperations.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/DatabaseOperations.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,341 +0,0 @@ --= KeePassXC - Database Operations --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Database Operations --=== Creating Your First Database --To start using KeePassXC, you need to first create a database that will store the password and other details. -- --To create a database, perform the following steps: -- --1. Open your KeePassXC application. Click the create new database button *(A)*: --+ --.Create database - Welcome screen --image::welcome_screen.png[] -- --2. The database creation wizard appears. Enter the desired database name and a short description (optional): --+ --.Create database - General information --image::new_db_wizard_1.png[,80%] -- --3. Click Continue. The Encryption Settings screen appears, we don't recommend making any changes besides increasing or decreasing the decryption time using the slider. Setting the Decryption Time slider at a higher values means that the database will have higher level of protection but the time taken by the database to open will increase. --+ --.Create database - Encryption settings --image::new_db_wizard_2.png[,80%] -- --4. Click the Continue button. The Database Credentials screen appears, enter your desired database password. We recommend using a long, randomized password. --+ --.Create database - Database credentials --image::new_db_wizard_3.png[,80%] --+ --*(A)* Open the password generator + --*(B)* Toggle password visibility --+ --NOTE: Keep this password for your database safe. Either memorize it or note it down somewhere. Losing the database password might result in permanent locking of your database and you will not be able to retrieve information stored in the database. -- --5. Click Done. You will be prompted to select a location to save your database file. The database file is saved on to your computer with the default `.kdbx` extension. You can store your database wherever you wish, it is fully encrypted at all times preventing unauthorized access. -- --=== Opening an Existing Database --To open an existing database, perform the following steps: -- --1. Open your KeePassXC application. Click the Open existing database button *(A)* or select a recent database from the Recent Databases list *(B)*. --+ --.Open an existing database --image::open_database.png[] -- --2. Navigate to the location of the your database on your computer and open the database file. The database unlock screen will appear: --+ --.Database unlock screen --image::unlock_database.png[] -- --3. Enter the password for your database. -- --4. _(Optional)_ Browse for the Key File if you have chosen it as an additional authentication factor while creating the database. Refer to the KeePassXC User Guide for more information on setting a Key File as an additional authentication factor. -- --5. Click *OK*. The database opens and the following screen is displayed: --+ --.Unlocked database --image::database_view.png[] -- --=== Adding an Entry --All the details such as usernames, passwords, URLs, attachments, notes, and so on are stored in database entries. You can create as many entries as you want in the database. -- --To add an entry, perform the following step: -- --1. Navigate to Entries > New Entry (Or, press Ctrl+N). The following screen appears: --+ --.Adding a new entry --image::edit_entry.png[] -- --2. Enter a desired title for the entry, username, password, URL, and notes on this screen. -- --3. _(Optional)_ Select the Expires check-box to set the expiry date for the password. You can manually enter the date and time or click the Presets button to select a expiry date and time for your password. -- --4. Click *OK* to add the entry to your database. -- --=== Editing an Entry --To edit the details in an entry, perform the following steps: -- --1. Select the entry you want to edit. -- --2. Press `Enter`, click the edit toolbar icon, or right-click and select Edit Entry from the menu. -- --3. Make the desired changes. -- --4. Click *OK*. -- --=== Deleting an Entry --To delete an entry, perform the following steps: -- --1. Select the entry you want to delete and press the `Delete` button on your keyboard. -- --2. You will be prompted to move the entry to the Recycle Bin (if enabled). --+ --NOTE: You can disable the recycle bin within the Database Settings. If the recycle bin is disabled then deleted entries will be permanently removed from the database. -- --3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the `Delete` button on your keyboard. -- --// tag::advanced[] --=== Clone an Entry --Creating a clone of an entry provides you a ready-to-use template for creating new entries with similar details of a master entry. -- --To create a clone of an existing entry, perform the following steps: -- --1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press `Ctrl+K`. --+ --.Clone entry from context menu --image::clone_entry.png[] -- --2. The clone dialog will appear. --+ --.Clone entry dialog --image::clone_entry_dialog.png[,70%] -- * Select the Append ‘ - Clone’ to title check-box to create a new entry with the word Clone as the suffix to the name of the new entry. -- * Select the Replace username and password with references check-box to create the new entry where the username and the password fields contain the references to the username and password to the master entry. -- * Select the Copy history checkbox to copy the history of the master entry to the clone. -- --3. If you chose to replace username and password entries with references, then the new entry will point these fields to the original entry's values. Changing the original entry will automatically change the resolved value of the cloned entry. This is useful if you have multiple accounts for the same service that use a similar username or password combination. --+ --.References in a cloned entry --image::clone_entry_references.png[] -- --4. You can create your own references using the following syntax: --+ --`{REF:@I:}` --+ --Where `` is the Unique Identifier of the entry to pull data from and `` is from the following: --+ -- * T - Title -- * U - Username -- * P - Password -- * A - URL -- * N - Notes -- * I - UUID -- --== Searching the Database --KeePassXC provides an enhanced and granular search features the enables you to search for specific entries in the databases using the different modifiers, wild card characters, and logical operators. -- --=== Modifiers and Fields --[grid=rows, frame=none, width=70%] --|=== --|Modifier |Description -- --|- |Exclude this term from results --|! |Exclude this term from results --|+ |Match this term exactly --|* |Term is handled as a regular expression --|=== -- --The following fields can be searched along with their abbreviated name in parenthesis: -- --* Title (t) --* Username (u) --* Password (p, pw) --* URL --* Notes (n) --* Attribute (attr) --* Attachment (attach) --* Group (g) -- --=== Wild Card Characters and Logical Operators --[grid=rows, frame=none, width=70%] --|=== --|Wild Card Character |Description -- --|* |Match anything --|? |Match one character --|\| |Logical OR --|=== -- --=== Sample Search Queries --The following tables lists a few samples search queries for your reference: -- --|=== --|Query |Description -- --|`user:johnsmith url:www.google.com` --|Searches the Username field for johnsmith and the URL field for www.google.com. -- --|`user:john\|smith` --|Searches the Username field for john OR smith. -- --|`+user:johnsmith -url:www.google.com *notes:"secret note \d"` --|Search the username field for exactly johnsmith, the URL must not contain www.google.com, and notes contains secret note [digit]. --|=== -- --== Advanced Entry Options --=== Additional Attributes --A lot of applications and web sites now require to provide additional information when you create accounts. The additional information is used to block hackers if any suspicious activity is detected. In addition, the additional information you provide can be used to reset passwords if you forget them. You can also store arbitrary information here that can be copied to the clipboard or Auto-Typed using the `{S: _Database settings_. The following screen appears: --+ --.Database settings --image::database_settings.png[] -- --2. Click the General button in the left-hand menu bar to access the following settings: -- * *Database name:* This is the default identifier for your database and is shown in the tab bar and title bar (when active). You can change this name as desired. -- * *Database description:* Provide some meaningful description for your database. -- * *Default username:* Provide a default username for all new entries that you create in this database. -- * *Max history items:* This is the maximum number of history items that are stored for each entry. When you set this to 0, no history will be saved. Set this value to a low value to prevent the database from getting too large (we recommend no more than 10). -- * *Max. history size:* When the history of an entry gets above this size, it is truncated. For example, this happens when entries have large attachments. Set this value small to prevent the database from getting too large (we recommend 6 MiB). -- * *Use recycle bin:* Select this check-box if you want deleted entries to move to the recycle bin instead of being permanently removed. The recycle bin will be created if it does not already exist after your first deletion. To delete entries permanently, you must empty the recycle bin manually. -- * *Enable compression:* KeePassXC databases can be compressed before being encrypted. Compression reduces the size of the database and does not have any appreciable affect on speed. It is recommended to always save databases with compression. -- --3. Click the Security button in the left-hand menu bar to change your database credentials and change encryption settings. --+ --.Database security --image::database_security.png[] -- --4. Here you can change your database password or add/remove additional credentials to protect your database. KeePassXC supports adding a randomly generated, static key file and hardware keys such as YubiKey and OnlyKey. To add a key file, click _Add Key File_ and either browse for an existing file or generate a new one *(A)*. To add a hardware key, click _Add YubiKey Challenge-Response_, plug in your hardware key, then click refresh *(B)*. --+ --.Database credentials --image::database_security_credentials.png[] -- --WARNING: Consider creating a backup of your YubiKey. Please refer to <> -- --5. Encryption settings allows you to change the average time it takes to encrypt and decrypt the database. The longer time that is chosen, the harder it will be to brute force attack your database. *We recommend a setting of one second.* --+ --.Database encryption --image::database_security_encryption.png[] --+ --WARNING: Encryption time is dependent on your computer's hardware. If sharing a database with a mobile device, be mindful that it will likely take two to four times longer to access and save your database than on your home computer. -- --6. Advanced encryption settings can be accessed by clicking the _Advanced Settings_ checkbox in the lower left-hand corner. These settings are only meant for people who know what they mean. *We do not recommend touching these settings.* --+ --.Database encryption advanced settings --image::database_security_encryption_advanced.png[] --+ --The following key derivation functions are supported: -- -- * AES-KDF (KDBX 4 and KDBX 3.1): This key derivation function is based on iterating AES. Users can change the number of iterations. The more iterations, the harder are dictionary and guessing attacks, but also database loading/saving takes more time (linearly). KDBX 3.1 only supports AES-KDF; any other key derivation function, like for instance Argon2, requires KDBX 4. -- -- * Argon2 (KDBX 4 - recommended): KDBX 4, the Argon2 key derivation function can be used for transforming the composite master key (as protection against dictionary attacks). The main advantage of Argon2 over AES-KDF is that it provides a better resistance against GPU/ASIC attacks (due to being a memory-hard function). The number of iterations scales linearly with the required time. By increasing the memory parameter, GPU/ASIC attacks become harder (and the required time increases). The parallelism parameter can be used to specify how many threads should be used. -- --=== Creating a YubiKey backup --It is advisable to have a backup replica YubiKey In case your main YubiKey gets damaged, lost, or stolen. The same HMAC key will need to be written to both keys. To do this you can either use the YubiKey Personalization Tool GUI or the ykpersonalize CLI tool. The steps for the CLI tool are shown: -- --1. Create a 20 byte HMAC key: --+ --``` --dd status=none if=/dev/random bs=20 count=1 | xxd -p -c 40 --``` -- --2. Write the HMAC key to slot 2 _(Set through the first switch. Out of the box the YubiKey OTP resides in slot 1)_: --+ --``` --ykpersonalize -2 -a -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible -oallow-update --``` -- --You will be asked to enter the HMAC key you created earlier, copy/paste they key output in the first step. Repeat both steps for your second YubiKey. We recommend storing your HMAC key in a safe place (e.g., printed on paper) in case you need to recreate another key. --// end::advanced[] -- --== Storing a Database File --The database file that you create might contain highly sensitive data and must be stored in a very secure way. You must make sure that the database is always protected with a strong and long password. The database file that is protected with a strong and long password is secure and encrypted while stored on your computer or cloud storage service. -- --Make sure that the database file is stored in a folder that is secure. Make sure that you or someone else does not accidentally delete the database file. Deletion of the database file will result in the total loss of your information and a lot of inconvenience to manually retrieve your logins for various web applications. You must not share your database file with anyone unless absolutely necessary. -- --== Backing up a Database File --It is a good practice to create copies of your database file and store the copies of your database on a different computer, smart phone, or cloud storage space such a Google Drive or Microsoft OneDrive. Backups can be created automatically by selecting the _Backup database file before saving_ option in the application settings. Additionally, you can create a backup on-demand using the _Database_ -> _Save Database Backup..._ menu feature. -- --.Saving a database backup --image::save_database_backup.png[,40%] -- --Creating backups for your database give you a peace of mind should you lose one copy of your database. You can quickly retrieve the copy of your database and start using it. --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/Disclaimers.adoc keepassxc-2.6.4-patched/docs/topics/Disclaimers.adoc ---- keepassxc-2.6.4-orig/docs/topics/Disclaimers.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/Disclaimers.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --== License and Disclaimers -- --KeePassXC is licensed with the --https://github.com/keepassxreboot/keepassxc/blob/master/LICENSE.GPL-3[GNU General Public License Version 3]. --All copyrights and additional licenses are recorded in --https://github.com/keepassxreboot/keepassxc/blob/master/COPYING[COPYING]. -- --=== Disclaimer of Warranty -- --THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. --Except when otherwise stated in writing the copyright holders and/or other parties provide the program "as is" without --Warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of --Merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program --Is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction. -- --=== Limitation of Liability -- --In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party --Who modifies and/or conveys the program as permitted above, be liable to you for damages, including any general, --Special, incidental or consequential damages arising out of the use or inability to use the program (including but not --Limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of --The program to operate with any other programs), even if such holder or other party has been advised of the possibility --Of such damages. -- --== Contact Us -- --We are committed to continually improve KeePassXC through customer experience and your feedback is important to us. --Please send us your feedback or comments to team@keepassxc.org. --To report issues, visit: https://github.com/keepassxreboot/keepassxc. -- --Thank You, + --Team KeePassXC -diff -urNr keepassxc-2.6.4-orig/docs/topics/DownloadInstall.adoc keepassxc-2.6.4-patched/docs/topics/DownloadInstall.adoc ---- keepassxc-2.6.4-orig/docs/topics/DownloadInstall.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/DownloadInstall.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --= KeePassXC - Download and Install --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Downloading KeePassXC --KeePassXC is available for download for the following operating systems and platforms: -- --* Microsoft Windows --** Portable and MSI Installer (64-bit and 32-bit) --* Linux - Official Cross-Distribution Packages --** AppImage and Snap Package --* Linux - Distribution-Specific Packages --** Ubuntu, Debian, Arch Linux, Gentoo, Fedora, CentOS, and OpenSUSE --* macOS --** DMG Installer, Homebrew Cask -- --To download the KeePassXC installer for your desired platform, visit https://keepassxc.org/download or directly from our https://github.com/keepassxreboot/keepassxc/releases[GitHub Releases]. -- --NOTE: KeePassXC is open-source software and may be available on other websites that are unaffiliated with Team KeePassXC. *We strongly discourage downloading KeePassXC from third-party websites.* -- --Before installing KeePassXC, it is recommended that you verify that your downloaded installer matches the signature, which is published alongside the release package. By verifying the signatures of KeePassXC releases, you can verify the authenticity and integrity of the downloaded installation file. This guarantees that the file you downloaded was originally created by the KeePassXC Team and its contents have not been tampered with. -- --To know more about the steps to verify the authenticity and integrity of your downloaded package, visit https://keepassxc.org/verifying-signatures. -- --=== Microsoft Windows --The Windows MSI installer is signed by a secure certificate owned by DroidMonkey Apps, LLC. If you do not see this dialog when installing the application, click *NO* and download the installer from https://keepassxc.org. -- --.Windows UAC Dialog --image::uac_dialog.png[50%] -- --Installing KeePassXC is a simple process. In the following example, installation steps for KeePassXC on Microsoft Windows are described. Installing KeePassXC on other operating systems is also a simple process, which you can accomplish by using the native installers. To know more about the installation instructions on the other operating systems, refer to the KeePassXC User Manual. -- --To install KeePassXC on Microsoft Windows, perform the following steps: -- --1. Double click on the KeePassXC-Y.Y.Y-WinZZ.msi file. Here, Y.Y.Y represents the version of the software and ZZ represents the 32-bit/64-bit version of the Microsoft Windows operating system. --+ --.Install wizard --image::install_wizard_1.png[,80%] -- --2. Click Next and follow the simple instructions on the KeepPassXC Setup Wizard to complete the installation. You will have the option to choose your install location, add a desktop shortcut, and launch on startup. --+ --.Install wizard (cont) --image::install_wizard_2.png[,80%] -- --=== Linux --You can easily download the KeePassXC installer for Linux. When you search for KeePassXC, multiple options are displayed as shown in the following screen: -- --.Ubuntu Store --image::linux_store.png[] -- --The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ] -- --NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot. -- --=== macOS --To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown: -- --.macOS DMG Install --image::macos_install.png[,80%] -- --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/ImportExport.adoc keepassxc-2.6.4-patched/docs/topics/ImportExport.adoc ---- keepassxc-2.6.4-orig/docs/topics/ImportExport.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/ImportExport.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --= KeePassXC - Import/Export Operations --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Importing External Databases --KeePassXC allows your to import external databases from the following options: -- --* Comma-Separated Values (CSV) file --* 1Password OPVault --* KeePass 1 Database -- --=== Importing CSV File --If you have been saving your URLs, usernames, passwords, and so on in a CSV file, you can migrate all that information from the CSV file to KeePassXC and start using KeePassXC to maintain your data. -- --To open the CSV file, perform the following steps: -- --1. Open KeePassXC. -- --2. Click Import from CSV button on the welcome screen or use the menu Database > Import > CSV File. -- --3. Navigate to the location of the your CSV file on your computer and open the file. The new database wizard will appear. Follow the steps of creating a new database in Chapter 1. -- --4. After saving your new database file, the CSV import wizard will appear: --+ --.CSV Import Wizard --image::csv_import.png[,80%] -- --Your CSV file gets imported to KeePassXC and the data is converted to the KeePassXC format for further usage and maintenance. The new database file is saved on to your computer with the default `.kdbx` extension. -- --=== Importing 1Password OPVault --Save your 1Password Vault locally to create an OPVault directory. Please see 1Password instructions on how to do this. Once an OPVault is created, perform the following steps: -- --1. Open KeePassXC. -- --2. Use the menu Database > Import > 1Password Vault. Select the OPVault to import. -- --3. Enter the password for your OPVault to unlock and import. -- --=== Importing KeePass 1 Database --KeePass 1 database is an older format of the database created using legacy version of KeePass. KeePassXC lets your import this older format of the database and you can seamlessly start using this database in your new KeePassXC application. -- --To import a KeePass 1 database file in KeePassXC, perform the following steps: -- --1. Open KeePassXC. -- --2. Click Import from KeePass 1 button on the welcome screen or use the menu Database > Import > KeePass 1 Database. -- --3. Navigate to the location of the your legacy KeePass 1 database file (`.kdb`) on your computer and open the file. You are prompted for the password and the Key file for your `.kdb` file. -- --4. Enter the password for your old `.kdb` file and click *OK*. You are prompted for provide a name for the new database format that KeePassXC recognizes. -- --5. Provide a name for the new database format, select a folder on your computer to save the file, and click Save. -- --6. The data from the `.kdb` file gets imported and converted to the new format, which is compatible with KeePassXC. You can now start using the new database file (`.kdbx`) in KeePassXC. -- --== Exporting Databases --KeePassXC supports multiple ways to export your database for transfer to another program or to print out and archive. To export your database into the KDB XML format, you must use the KeePassXC Command Line Interface program: `keepassxc-cli export `. -- --WARNING: Exporting your database will result in all of your passwords and sensitive information being stored unencrypted. We do not recommend saving your exported database for long periods of time as that can cause compromise. -- --.Database export menu --image::export_database.png[,80%] --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/KeeShare.adoc keepassxc-2.6.4-patched/docs/topics/KeeShare.adoc ---- keepassxc-2.6.4-orig/docs/topics/KeeShare.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/KeeShare.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,51 +0,0 @@ --= KeePassXC - KeeShare --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Database Sharing with KeeShare --KeeShare allows you to share a subset of your credentials with others and vice versa. -- --=== Enable Sharing --To use sharing, you need to enable it for the application. -- --1. Go to _Tools_ -> _Settings_. Select the KeeShare category on the left sidebar *(1)*. --2. Check _Allow import_ if you want to import shared credentials. Check _Allow export_ if you want to share credentials. *(2)* --3. (Optional) Click _Generate_ *(3)* to create your own certificate or _Import_ to select an existing one. The certificate allows you to sign shared databases. This ensures the integrity of the share and prevent import of untrusted information. -- --.KeeShare Application Settings --image::keeshare_application_settings.png[] -- --=== Sharing Credentials --If you checked _Allow export_ in the Sharing settings you can now share a group of passwords. Sharing is always is defined on a particular group. If you enable sharing on a group, every entry under this group, and its children, are shared. If you enable sharing on the root node, **every password** inside your database gets shared! -- --NOTE: KeeShare does not synchronize group structure after the initial share is created. At this time, KeeShare operates at the entry level; shared entries moved outside of a shared group are still synchronized. -- --1. Open the edit sheet on a group you want to share. --2. Select the KeeShare category on the left toolbar. --3. Choose a sharing type: -- a. *Inactive* - Disable sharing this group -- b. *Import* - Read-only import of entries, merge changes -- c. *Export* - Write-only export of entries, no merge -- d. *Synchronize* - Read/Write entries from the share, merge changes --4. Choose a path to store the shared credentials to. --5. The password to use for this share container. -- --The export file will not be generated automatically. Instead, each time the database is saved, the file gets written. The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file in cloud storage. -- --.KeeShare Group Settings --image::keeshare_group_settings.png[] -- --=== Using Shared Credentials --KeeShare watches the container for changes and merges them into your database when necessary (Import and Synchronize modes). Entries merge in time order; older data is moved to the history of the entry. -- --A shared group shows a cloud icon badge over the group icon *(A)* and a banner is displayed showing the sharing mode and file location *(B)*. If the share is disabled or unavailable, the cloud icon will show as red with a white X. -- --.KeeShare shared group --image::keeshare_shared_group.png[] -- --=== Technical Details and Limitations of Sharing --Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independent, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client. -- --KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers. --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/KeyboardShortcuts.adoc keepassxc-2.6.4-patched/docs/topics/KeyboardShortcuts.adoc ---- keepassxc-2.6.4-orig/docs/topics/KeyboardShortcuts.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/KeyboardShortcuts.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --= KeePassXC - Keyboard Shortcuts --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --NOTE: On macOS please substitute `Ctrl` with `Cmd` (aka `⌘`). -- --[grid=rows, frame=none, width=75%] --|=== --|Action | Keyboard Shortcut -- --|Open Database | Ctrl + O --|Save Database | Ctrl + S --|Save Database As | Ctrl + Shift + S --|New Database | Ctrl + Shift + N --|Close Database | Ctrl + W ; Ctrl + F4 --|Lock All Databases | Ctrl + L --|Quit | Ctrl + Q --|New Entry | Ctrl + N --|Edit Entry | Enter ; Ctrl + E --|Delete Entry | Delete --|Clone Entry | Ctrl + K --|Copy Username | Ctrl + B --|Copy Password | Ctrl + C --|Copy URL | Ctrl + U --|Open URL | Ctrl + Shift + U --|Copy TOTP | Ctrl + T --|Show TOTP | Ctrl + Shift + T --|Trigger AutoType | Ctrl + Shift + V --|Add key to SSH Agent | Ctrl + H --|Remove key from SSH Agent | Ctrl + Shift + H --|Minimize Window | Ctrl + M --|Hide Window | Ctrl + Shift + M --|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn --|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp --|Select the nth database | Ctrl + n, where n is the number of the database tab --|Toggle Passwords Hidden | Ctrl + Shift + C --|Toggle Usernames Hidden | Ctrl + Shift + B --|Focus Groups (edit if focused) | F1 --|Focus Entries (edit if focused) | F2 --|Focus Search | F3 ; Ctrl + F --|Clear Search | Escape --|Show Keyboard Shortcuts | Ctrl + / --|=== --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/PasswordGenerator.adoc keepassxc-2.6.4-patched/docs/topics/PasswordGenerator.adoc ---- keepassxc-2.6.4-orig/docs/topics/PasswordGenerator.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/PasswordGenerator.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,44 +0,0 @@ --= KeePassXC - Password Generator --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Password Generator --This password generator helps you to generate random strong passwords and passphrases that you can use for your applications and websites you visit. -- --=== Generating Passwords --To generate random passwords, specify the characters to be used in your choice of password (for example, upper-case letters, digits, special characters, and so on) and KeePassXC will randomly pick characters out of the set. -- --To generate the random password using Password Generator, perform the following steps: -- --1. Open KeePassXC. --2. Navigate to Tools > Password Generator. The following screen appears: --+ --.Password Generator --image::password_generator.png[] -- --3. Select the length of the desired password by dragging the Length slider. --4. Select the character-sets that you want to include in your password. --5. Use the regenerate button (Ctrl + R) to make a new password using the chosen options. --6. Use the clipboard button (Ctrl + C) to copy the generated password to the clipboard. --// tag::advanced[] --7. Click the Advanced button to specify additional conditions for your desired password. --+ --.Advanced Password Generator Options --image::password_generator_advanced.png[] -- --=== Generating Passphrases --A passphrase is a sequence of words or other text used to control access to your applications and data. A passphrase is similar to a password in usage, but is generally longer for added security. To generate the random passphrase using Password Generator, perform the following steps: -- --1. From the password generator, click the Passphrase tab. The following screen appears: --+ --.Passphrase Generator --image::passphrase_generator.png[] -- --2. Select the number of words you want to be included in your passphrase by dragging the --Word Count slider. --3. In the Word Separator field, enter a character, word, number, or space that you want to use a separator between the words in your passphrase. --4. Click the Regenerate button (Ctrl + R) to generate a new random passphrase. --5. Click the Clipboard button (Ctrl + C) to copy the passphrase to the clipboard. --// end::advanced[] --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/.sharedheader keepassxc-2.6.4-patched/docs/topics/.sharedheader ---- keepassxc-2.6.4-orig/docs/topics/.sharedheader 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/.sharedheader 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7 +0,0 @@ --KeePassXC Team --v2.6.0 --:data-uri: --:homepage: https://keepassxc.org --:stylesheet: ../styles/dark.css --:icons: font --:toc: left -diff -urNr keepassxc-2.6.4-orig/docs/topics/SSHAgent.adoc keepassxc-2.6.4-patched/docs/topics/SSHAgent.adoc ---- keepassxc-2.6.4-orig/docs/topics/SSHAgent.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/SSHAgent.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,125 +0,0 @@ --= KeePassXC - SSH Agent --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== SSH Agent --SSH (Secure Shell) is a widely used remote secure shell protocol and is considered an industry standard for secure remote access to UNIX-like systems including Linux, BSDs, MacOS and more recently even Windows received native support. SSH supports multiple types of authentication and the most widely used ones are either interactive keyboard input with a password or a public-key cryptography pair of keys. -- --KeePassXC SSH Agent integration is built to manage SSH keys in a secure manner by either storing them completely within your KeePassXC database or by having only the decryption key of a key file that is stored elsewhere. SSH Agent integration _does not_ provide an agent itself but works as a client for any agent implementation that is OpenSSH compatible. -- --=== OpenSSH agent on Linux --If you are using a modern desktop Linux distribution it is very likely the OpenSSH agent is already configured and running when you have logged in to a graphical desktop session. --This should be true for distributions like Debian, Ubuntu (including Kubuntu, Xubuntu and Lubuntu), Linux Mint, Fedora, ElementaryOS and Manjaro. -- --First, open a terminal and check the output of `ssh-add -l`: -- -- $ ssh-add -l -- The agent has no identities. -- --If you either got a list of fingerprints or the message above the agent is already running and no further setup is required. --If instead you got a message saying _"Could not open a connection to your authentication agent."_ that means the agent is either misconfigured or not running at all. -- --Since every distribution and desktop environment is configured differently there is no general guide how to properly set it up yourself. --The general rule of thumb, however, is that `ssh-agent` needs to be started as part of the startup programs for a session in a way its environment variables are exposed to all processes started by the desktop environment. --One of the easiest ways to achieve this is to enable _GNOME Keyring_ which should in turn start the agent as part of its services. -- --There are many guides on the internet how to hack your login shell to start an agent but it is very prone to errors and is not a supported configuration. If you prefer the login shell startup hack you need to set it up with a static socket path and use the _SSH_AUTH_SOCK override_ option in SSH Agent settings to match that. -- --WARNING: _GNU Privacy Guard (gpg)_ with its SSH agent implementation is *not* compatible with KeePassXC as it does not support _removing_ keys that have been added to it making it impossible to use any external tool to manage key lifetime. -- --WARNING: _GNOME Keyring_ prior to release 3.27.92 had its own custom implementation of an agent which does not support modern key types and was known to be buggy. --It does not support any constraints you may want to configure for an added key. --If you are running a modern distribution the custom agent has been removed and replaced with the stock OpenSSH agent which is feature complete. -- --=== OpenSSH agent on MacOS --Apple has made OpenSSH an integrated part of MacOS with automatic agent startup when it is first used. No further configuration is needed. -- --=== Pageant agent on Windows --The SSH Agent integration on Windows supports both _PuTTY Pageant_ and _OpenSSH for Windows 10_. --Since Pageant is currently still the most widely used implementation and is easily installable on any version of Windows we focus on that. --It is also the default on KeePassXC. -- --Download Pageant from the official PuTTY home page at https://www.chiark.greenend.org.uk/~sgtatham/putty/ -- --To use Pageant with KeePassXC, simply start it and it will minimize into the system tray and is ready to use. PuTTY and compatible tools will use Pageant automatically. -- --=== Setting up SSH Agent integration --By default the SSH Agent integration plugin is disabled. --To enable integration, follow the steps below to access the settings: -- -- 1. Select _Tools > Settings_ from the menu -- 2. Select _SSH Agent_ category on the left sidebar -- --.SSH Agent Application Settings Page --image::sshagent_application_settings.png[] -- --On the settings page you can enable the integration by checking _Enable SSH Agent integration_. --When the integration is enabled coming back to the settings page also shows if connection to the agent is working. -- --On Windows you have the option to select between _Pageant_ and _OpenSSH for Windows_ and on other platforms the settings page shows the current value of _SSH_AUTH_SOCK_ environment variable which is used to connect to the running agent and an option to manually override the automatically detected path. -- --If the value of _SSH_AUTH_SOCK_ is empty it means the agent is not properly configured and KeePassXC will be unable to connect to it unless you provide a static override path to the socket. -- --=== Generating a key to use with KeePassXC --KeePassXC only supports keys in the _OpenSSH_ format. On Windows, _PuTTYgen_ saves keys in its own format by default and you will need to convert them to OpenSSH format before being used. In this guide we are going to generate a standard RSA key in the default size. -- --==== Generating a key on Linux or MacOS with _ssh-keygen_ -- --Open a terminal window and type the following command to generate a key: -- -- $ ssh-keygen -o -f keepassxc -C johndoe@example -- Generating public/private rsa key pair. -- Enter passphrase (empty for no passphrase): -- Enter same passphrase again: -- Your identification has been saved in keepassxc -- Your public key has been saved in keepassxc.pub -- The key fingerprint is: -- SHA256:pN+o5AqUmijYBDUrFV/caMus9oIR61+MiWLa8fcsVYI johndoe@example -- The key's randomart image is: -- +---[RSA 3072]----+ -- | =. ..o | -- | o + .+ . | -- |o . .+ o. | -- | o.. Eo. . | -- | +o .. So | -- |o*o.o+ ..o | -- |Bo=+o.+.o . | -- |+oo+.++o | -- |. ..++ooo | -- +----[SHA256]-----+ -- -- --Now we can see two files were generated: -- -- $ ls -l keepassxc* -- -rw------- 1 user group 2.6K Apr 5 07:36 keepassxc -- -rw-r--r-- 1 user group 569 Apr 5 07:36 keepassxc.pub -- --With KeePassXC you only need the first file listed. -- --==== Generating a key on Windows with PuTTYgen --Please read the manual on how to use PuTTYgen for details on generate a key: https://the.earth.li/~sgtatham/putty/0.74/htmldoc/Chapter8.html#pubkey-puttygen. Once generated, you must save the key in OpenSSH format, follow the image below. -- --.Generating a key with PuTTYgen --image::sshagent_puttygen.png[,70%] -- --=== Configuring an entry to use SSH Agent --The last step is to setup an entry to contain the SSH Agent settings and key file you generated. -- --1. Create a new entry, or open an existing entry in edit mode. --2. Set the password you used for the key file in the password field. --3. Go to the advanced category and attach the key file you generated previously. --4. Go to the SSH Agent category *(1)* and select the attachment from the list *(2)*. --5. Alternatively, you can load an external file dynamically using the file selection. --6. Choose the options for this key. --7. Press *OK* to accept the entry. Depending on the options you chose, KeePassXC will load the key and present it for use. -- --.SSH Agent Entry Settings Page --image::sshagent_entry_settings.png[] -- --If you chose to not auto-load the key on database unlock, you can manually make the key available by using the context menu from the entry list. -- --.SSH Agent Load Key from Context Menu --image::sshagent_context_menu.png[] --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/UserInterface.adoc keepassxc-2.6.4-patched/docs/topics/UserInterface.adoc ---- keepassxc-2.6.4-orig/docs/topics/UserInterface.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/UserInterface.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ --= KeePassXC - Database Operations --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Interface Overview --=== Application Layout --The KeePassXC interface is designed for simplicity and easy access to your information. The main database view is split into three main partitions detailed below. You can open multiple databases at the same time, they will appear in tabs. -- --.Main database interface --image::main_interface.png[] -- --*(A) Groups* - Organize your entries into discrete groups to bring order to all of your sensitive information. Groups can be nested under each other to create a hierarchy. Settings from parent groups get applied to their children. -- --*(B) Entries* - Entries contain all the information for each website or application you are storing in KeePassXC. This view shows all the entries in the selected group. Each column can be resized, reordered, and shown or hidden based on your preference. Right click the header row to see all available options. -- --*\(C) Preview* - Shows a preview of the selected group or entry. You can temporarily hide this preview using the close button on the right hand side or completely disabled in the application settings. -- --TIP: Double clicking on the text in the entries list copies that field to the clipboard. Double clicking the entry title will open the entry for editing. -- --=== Toolbar --The toolbar provides a quick way to perform common tasks with your database. Some entries in the toolbar are dynamically disabled based on the information contained in the selected entry. Every common action in KeePassXC can be controlled with a keyboard shortcut as well. -- --.Toolbar overview --image::toolbar.png[] -- --*(A) Database* - Open Database, Save Database + --*(B) Entries* - Create Entry, Edit Selected Entry, Delete Selected Entry + --*\(C) Entry Data* - Copy Username, Copy Password, Copy URL, Perform Auto-Type + --*(D) Lock All Databases* + --*(E) Tools* - Password Generator, Application Settings + --*(F) Search* -- --=== Application Settings --Users can configure KeePassXC to their personal tastes with a wide variety of general and security settings that apply to the whole application. These settings are accessible from _Tools_ -> _Settings_ or the cog wheel icon from the toolbar. Settings include: startup options, file management, entry management, user interface, language, security timeouts, and convenience. -- --==== Setting the Theme --KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme by using the _View_ menu. When a new theme is selected you will be prompted to restart KeePassXC to apply the theme immediately. -- --.Setting the theme --image::theme_selection.png[] -- --==== Compact Mode --For users with smaller screens or those who desire seeing more entries at once, KeePassXC offers a compact view mode. This mode shows smaller toolbar, group, and entry icons. The effect of compact mode (left side) can be seen below. -- --.Compact mode comparison --image::compact_mode_comparison.png[] -- --=== Keyboard Shortcuts --include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1] -- --// tag::advanced[] --=== Command-Line Options --You can use the following command line options to tailor the application to your preferences: -- ------ --Usage: keepassxc.exe [options] [filename(s)] --KeePassXC - cross-platform password manager -- --Options: -- -?, -h, --help Displays help on commandline options. -- --help-all Displays help including Qt specific options. -- -v, --version Displays version information. -- --config path to a custom config file -- --localconfig path to a custom local config file -- --keyfile key file of the database -- --pw-stdin read password of the database from stdin -- --debug-info Displays debugging information. -- --Arguments: -- filename(s) filenames of the password databases to open (*.kdbx) ------ -- --Additionally, the following environment variables may be useful when running the application: -- --[grid=rows, frame=none, width=75%] --|=== --|Env Var | Description -- --|KPXC_CONFIG | Override default path to roaming configuration file --|KPXC_CONFIG_LOCAL | Override default path to local configuration file --|SSH_AUTH_SOCKET | Path of the unix file socket that the agent uses for communication with other processes (SSH Agent) --|QT_SCALE_FACTOR [numeric] | Defines a global scale factor for the whole application, including point-sized fonts. --|QT_SCREEN_SCALE_FACTORS [list] | Specifies scale factors for each screen. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt --|QT_SCALE_FACTOR_ROUNDING_POLICY | Control device pixel ratio rounding to the nearest integer. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt --|=== --// end::advanced[] --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/topics/Welcome.adoc keepassxc-2.6.4-patched/docs/topics/Welcome.adoc ---- keepassxc-2.6.4-orig/docs/topics/Welcome.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/topics/Welcome.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --= KeePassXC - Welcome --include::.sharedheader[] --:imagesdir: ../images -- --// tag::content[] --== Welcome --KeePassXC is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. -- --KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases. -- --=== Overview --You can store an unlimited number of passwords and information in a KeePassXC database. Every piece of information you store in your database is encrypted at all times within the `kdbx` file. When you are accessing your database from within KeePassXC, your information in decrypted and stored in your computer's memory. KeePassXC places controls over the access to this data so other applications cannot read it (unless they have administrative rights). The interface is designed to let you quickly access your passwords, search for the right entry, perform Auto-Type or copy/paste operations, make and save changes, and then get out of your way. -- --KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme in the application settings. -- --.Light and Dark Themes --image::theme_comparison.png[] -- --=== Features --KeePassXC has numerous features for novice and power users alike. This guide will go over the basic features to get you up and running quickly. The User Guide contains more in-depth discussions on the major features in the application. -- --* Basic Features -- ** Create, open, and save databases in the KDBX format (KeePass Compatible) -- ** Store sensitive information in entries that are organized by groups -- ** Search for entries -- ** Password generator -- ** Auto-Type passwords into applications -- ** Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser -- ** Entry icon download -- ** Import databases from CSV, 1Password, and KeePass1 formats -- --* Advanced Features -- ** Database reports (password health, HIBP, and statistics) -- ** Database export to CSV and HTML formats -- ** TOTP storage and generation -- ** Field references between entries -- ** File attachments and custom attributes -- ** Entry history and data restoration -- ** YubiKey/OnlyKey challenge-response support -- ** Command line interface (keepassxc-cli) -- ** Auto-Open databases -- ** KeeShare shared databases (import, export, and synchronize) -- ** SSH Agent -- ** FreeDesktop.org Secret Service (replace Gnome keyring, etc.) -- ** Additional encryption choices: Twofish and ChaCha20 --// end::content[] -diff -urNr keepassxc-2.6.4-orig/docs/UserGuide.adoc keepassxc-2.6.4-patched/docs/UserGuide.adoc ---- keepassxc-2.6.4-orig/docs/UserGuide.adoc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/docs/UserGuide.adoc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,37 +0,0 @@ --= KeePassXC: User Guide --KeePassXC Team --v2.6.0 --:data-uri: --:homepage: https://keepassxc.org --:icons: font --:imagesdir: images --:stylesheet: styles/dark.css --:toc: left --ifdef::backend-pdf[] --:title-page: --:title-logo-image: {imagesdir}/kpxc_logo.png --:pdf-theme: styles/pdf_theme.yml --:compress: --endif::[] -- --include::topics/Disclaimers.adoc[] -- --<<< -- --// Include feature topics and advanced sections -- --include::topics/UserInterface.adoc[tags=*] -- --include::topics/DatabaseOperations.adoc[tags=*] -- --include::topics/ImportExport.adoc[tags=*] -- --include::topics/PasswordGenerator.adoc[tags=*] -- --include::topics/BrowserPlugin.adoc[tags=*] -- --include::topics/AutoType.adoc[tags=*] -- --include::topics/KeeShare.adoc[tags=*] -- --include::topics/SSHAgent.adoc[tags=*] -diff -urNr keepassxc-2.6.4-orig/.gitrev keepassxc-2.6.4-patched/.gitrev ---- keepassxc-2.6.4-orig/.gitrev 2021-01-31 22:52:50.000000000 +0100 -+++ keepassxc-2.6.4-patched/.gitrev 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --34a78f0 -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/INSTALL.md keepassxc-2.6.4-patched/INSTALL.md ---- keepassxc-2.6.4-orig/INSTALL.md 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/INSTALL.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,166 +0,0 @@ --Build and Install KeePassXC --================= -- --This document will guide you through the steps to build and install KeePassXC from source. --For more information, see also the [_Building KeePassXC_](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC) page on the wiki. -- --The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). -- --Build Dependencies --================== -- --The following tools must exist within your PATH: -- --* make --* cmake (>= 2.8.12) --* g++ (>= 4.7) or clang++ (>= 3.0) --* asciidoctor (on Linux/MacOS) -- --The following libraries are required: -- --* Qt 5 (>= 5.2): qtbase and qttools5 --* libgcrypt (>= 1.6) --* zlib --* libmicrohttpd --* libxi, libxtst, qtx11extras (optional for auto-type on X11) --* libsodium (>= 1.0.12) --* libargon2 --* qrencode --* yubikey ykpers (optional to support YubiKey) -- --Prepare the Building Environment --================================ -- --* [Building Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux) --* [Building Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows) --* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS) -- --Build Steps --=========== --We recommend using the release tool to perform builds, please read up-to-date instructions [on our wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#building-using-the-release-tool). -- --To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**
--**Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path -- --First, download the KeePassXC [source tarball](https://keepassxc.org/download#source) --or check out the latest version from our [Git repository](https://github.com/keepassxreboot/keepassxc). -- --To clone the project from Git, `cd` to a suitable location and run -- --```bash --git clone https://github.com/keepassxreboot/keepassxc.git --``` -- --This will clone the entire contents of the repository and check out the current `develop` branch. -- --To update the project from within the project's folder, you can run the following command: -- --```bash --git pull --``` -- --For a stable build, it is recommended to checkout the master branch. -- --```bash --git checkout master --``` -- --Navigate to the directory where you have downloaded KeePassXC and type these commands: -- --``` --mkdir build --cd build --cmake -DWITH_XC_ALL=ON .. --make --``` -- --If you are on Windows, you may have to add ```-G "MSYS Makefiles"``` to the beginning of the cmake command. See the [Windows Build Instructions](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#windows) for more information. -- --These steps place the compiled KeePassXC binary inside the `./build/src/` directory. --(Note the cmake notes/options below.) -- --**Cmake Notes:** -- --* Common cmake parameters -- -- ``` -- -DCMAKE_INSTALL_PREFIX=/usr/local -- -DCMAKE_VERBOSE_MAKEFILE=ON -- -DCMAKE_BUILD_TYPE= -- -DWITH_GUI_TESTS=ON -- ``` -- --* cmake accepts the following options: -- -- ``` -- -DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON) -- -DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF) -- -DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF) -- -DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (e.g., favicon downloading) (default: OFF) -- -DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF) -- -DWITH_XC_TOUCHID=[ON|OFF] (macOS Only) Enable/Disable Touch ID unlock (default:OFF) -- -DWITH_XC_FDOSECRETS=[ON|OFF] (Linux Only) Enable/Disable Freedesktop.org Secrets Service support (default:OFF) -- -DWITH_XC_KEESHARE=[ON|OFF] Enable/Disable KeeShare group synchronization extension (default: OFF) -- -DWITH_XC_KEESHARE_SECURE=[ON|OFF] Enable/Disable KeeShare signed containers, requires libquazip5 (default: OFF) -- -DWITH_XC_ALL=[ON|OFF] Enable/Disable compiling all plugins above (default: OFF) -- -- -DWITH_XC_UPDATECHECK=[ON|OFF] Enable/Disable automatic updating checking (requires WITH_XC_NETWORKING) (default: ON) -- -- -DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON) -- -DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF) -- -DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF) -- -DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux / macOS only) (default: OFF) -- -DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF) -- -DWITH_APP_BUNDLE=[ON|OFF] Enable Application Bundle for macOS (default: ON) -- -- -DKEEPASSXC_BUILD_TYPE=[Snapshot|PreRelease|Release] Set the build type to show/hide stability warnings (default: "Snapshot") -- -DKEEPASSXC_DIST_TYPE=[Snap|AppImage|Other] Specify the distribution method (default: "Other") -- -DOVERRIDE_VERSION=[X.X.X] Specify a version number when building. Used with snapshot builds (default: "") -- -DGIT_HEAD_OVERRIDE=[XXXXXXX] Specify the 7 digit git commit ref for this build. Used with distribution builds (default: "") -- ``` -- --* If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed
`-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/` -- --:exclamation: When building with ASan support on macOS, you need to use `export ASAN_OPTIONS=detect_leaks=0` before running the tests (no LSan support in macOS). -- --Installation --============ -- --After you have successfully built KeePassXC, install the binary by executing the following: -- --```bash --sudo make install --``` -- --You can specify the destination dir with --``` --DESTDIR=X --``` -- -- --Packaging --========= -- --You can create a package to redistribute KeePassXC (zip, deb, rpm, dmg, etc..). Refer to [keepassxc-packaging](https://github.com/keepassxreboot/keepassxc-packaging) -- -- --Testing --======= -- --You can perform tests on the built executables with: --``` --make test ARGS+="--output-on-failure" --``` -- --If you are not currently running on an X Server or Wayland, run the tests as follows: --``` --make test ARGS+="-E test\(cli\|gui\) --output-on-failure" --xvfb-run -e errors -a --server-args="-screen 0 1024x768x24" make test ARGS+="-R test\(cli\|gui\) --output-on-failure" --``` -- --Common parameters: --``` --CTEST_OUTPUT_ON_FAILURE=1 --ARGS+=-jX --ARGS+="-E testgui" --``` -diff -urNr keepassxc-2.6.4-orig/LICENSE.BSD keepassxc-2.6.4-patched/LICENSE.BSD ---- keepassxc-2.6.4-orig/LICENSE.BSD 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.BSD 1970-01-01 01:00:00.000000000 +0100 -@@ -1,23 +0,0 @@ --Redistribution and use in source and binary forms, with or without --modification, are permitted provided that the following conditions --are met: -- --1. Redistributions of source code must retain the copyright -- notice, this list of conditions and the following disclaimer. --2. Redistributions in binary form must reproduce the copyright -- notice, this list of conditions and the following disclaimer in the -- documentation and/or other materials provided with the distribution. --3. The name of the author may not be used to endorse or promote products -- derived from this software without specific prior written permission. -- --THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR --IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES --OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. --IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, --INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT --NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF --THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- -diff -urNr keepassxc-2.6.4-orig/LICENSE.CC0 keepassxc-2.6.4-patched/LICENSE.CC0 ---- keepassxc-2.6.4-orig/LICENSE.CC0 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.CC0 1970-01-01 01:00:00.000000000 +0100 -@@ -1,128 +0,0 @@ --Creative Commons CC0 1.0 Universal -- --CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE --LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN --ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION --ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE --USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND --DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT --OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. -- --Statement of Purpose -- --The laws of most jurisdictions throughout the world automatically confer --exclusive Copyright and Related Rights (defined below) upon the creator --and subsequent owner(s) (each and all, an "owner") of an original work --of authorship and/or a database (each, a "Work"). -- --Certain owners wish to permanently relinquish those rights to a Work for --the purpose of contributing to a commons of creative, cultural and --scientific works ("Commons") that the public can reliably and without --fear of later claims of infringement build upon, modify, incorporate in --other works, reuse and redistribute as freely as possible in any form --whatsoever and for any purposes, including without limitation commercial --purposes. These owners may contribute to the Commons to promote the --ideal of a free culture and the further production of creative, cultural --and scientific works, or to gain reputation or greater distribution for --their Work in part through the use and efforts of others. -- --For these and/or other purposes and motivations, and without any --expectation of additional consideration or compensation, the person --associating CC0 with a Work (the "Affirmer"), to the extent that he or --she is an owner of Copyright and Related Rights in the Work, voluntarily --elects to apply CC0 to the Work and publicly distribute the Work under --its terms, with knowledge of his or her Copyright and Related Rights in --the Work and the meaning and intended legal effect of CC0 on those --rights. -- --1. Copyright and Related Rights. A Work made available under CC0 may be --protected by copyright and related or neighboring rights ("Copyright and --Related Rights"). Copyright and Related Rights include, but are not --limited to, the following: -- --i. the right to reproduce, adapt, distribute, perform, display, --communicate, and translate a Work; -- --ii. moral rights retained by the original author(s) and/or performer(s); -- --iii. publicity and privacy rights pertaining to a person's image or --likeness depicted in a Work; -- --iv. rights protecting against unfair competition in regards to a Work, --subject to the limitations in paragraph 4(a), below; -- --v. rights protecting the extraction, dissemination, use and reuse of --data in a Work; -- --vi. database rights (such as those arising under Directive 96/9/EC of --the European Parliament and of the Council of 11 March 1996 on the legal --protection of databases, and under any national implementation thereof, --including any amended or successor version of such directive); and -- --vii. other similar, equivalent or corresponding rights throughout the --world based on applicable law or treaty, and any national --implementations thereof. -- --2. Waiver. To the greatest extent permitted by, but not in contravention --of, applicable law, Affirmer hereby overtly, fully, permanently, --irrevocably and unconditionally waives, abandons, and surrenders all of --Affirmer's Copyright and Related Rights and associated claims and causes --of action, whether now known or unknown (including existing as well as --future claims and causes of action), in the Work (i) in all territories --worldwide, (ii) for the maximum duration provided by applicable law or --treaty (including future time extensions), (iii) in any current or --future medium and for any number of copies, and (iv) for any purpose --whatsoever, including without limitation commercial, advertising or --promotional purposes (the "Waiver"). Affirmer makes the Waiver for the --benefit of each member of the public at large and to the detriment of --Affirmer's heirs and successors, fully intending that such Waiver shall --not be subject to revocation, rescission, cancellation, termination, or --any other legal or equitable action to disrupt the quiet enjoyment of --the Work by the public as contemplated by Affirmer's express Statement --of Purpose. -- --3. Public License Fallback. Should any part of the Waiver for any reason --be judged legally invalid or ineffective under applicable law, then the --Waiver shall be preserved to the maximum extent permitted taking into --account Affirmer's express Statement of Purpose. In addition, to the --extent the Waiver is so judged Affirmer hereby grants to each affected --person a royalty-free, non transferable, non sublicensable, non --exclusive, irrevocable and unconditional license to exercise Affirmer's --Copyright and Related Rights in the Work (i) in all territories --worldwide, (ii) for the maximum duration provided by applicable law or --treaty (including future time extensions), (iii) in any current or --future medium and for any number of copies, and (iv) for any purpose --whatsoever, including without limitation commercial, advertising or --promotional purposes (the "License"). The License shall be deemed --effective as of the date CC0 was applied by Affirmer to the Work. Should --any part of the License for any reason be judged legally invalid or --ineffective under applicable law, such partial invalidity or --ineffectiveness shall not invalidate the remainder of the License, and --in such case Affirmer hereby affirms that he or she will not (i) --exercise any of his or her remaining Copyright and Related Rights in the --Work or (ii) assert any associated claims and causes of action with --respect to the Work, in either case contrary to Affirmer's express --Statement of Purpose. -- --4. Limitations and Disclaimers. -- --a. No trademark or patent rights held by Affirmer are waived, abandoned, --surrendered, licensed or otherwise affected by this document. -- --b. Affirmer offers the Work as-is and makes no representations or --warranties of any kind concerning the Work, express, implied, statutory --or otherwise, including without limitation warranties of title, --merchantability, fitness for a particular purpose, non infringement, or --the absence of latent or other defects, accuracy, or the present or --absence of errors, whether or not discoverable, all to the greatest --extent permissible under applicable law. -- --c. Affirmer disclaims responsibility for clearing rights of other --persons that may apply to the Work or any use thereof, including without --limitation any person's Copyright and Related Rights in the Work. --Further, Affirmer disclaims responsibility for obtaining any necessary --consents, permissions or other rights required for any use of the Work. -- --d. Affirmer understands and acknowledges that Creative Commons is not a --party to this document and has no duty or obligation with respect to --this CC0 or use of the Work. -diff -urNr keepassxc-2.6.4-orig/LICENSE.GPL-2 keepassxc-2.6.4-patched/LICENSE.GPL-2 ---- keepassxc-2.6.4-orig/LICENSE.GPL-2 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.GPL-2 1970-01-01 01:00:00.000000000 +0100 -@@ -1,339 +0,0 @@ -- GNU GENERAL PUBLIC LICENSE -- Version 2, June 1991 -- -- Copyright (C) 1989, 1991 Free Software Foundation, Inc., -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- Everyone is permitted to copy and distribute verbatim copies -- of this license document, but changing it is not allowed. -- -- Preamble -- -- The licenses for most software are designed to take away your --freedom to share and change it. By contrast, the GNU General Public --License is intended to guarantee your freedom to share and change free --software--to make sure the software is free for all its users. This --General Public License applies to most of the Free Software --Foundation's software and to any other program whose authors commit to --using it. (Some other Free Software Foundation software is covered by --the GNU Lesser General Public License instead.) You can apply it to --your programs, too. -- -- When we speak of free software, we are referring to freedom, not --price. Our General Public Licenses are designed to make sure that you --have the freedom to distribute copies of free software (and charge for --this service if you wish), that you receive source code or can get it --if you want it, that you can change the software or use pieces of it --in new free programs; and that you know you can do these things. -- -- To protect your rights, we need to make restrictions that forbid --anyone to deny you these rights or to ask you to surrender the rights. --These restrictions translate to certain responsibilities for you if you --distribute copies of the software, or if you modify it. -- -- For example, if you distribute copies of such a program, whether --gratis or for a fee, you must give the recipients all the rights that --you have. You must make sure that they, too, receive or can get the --source code. And you must show them these terms so they know their --rights. -- -- We protect your rights with two steps: (1) copyright the software, and --(2) offer you this license which gives you legal permission to copy, --distribute and/or modify the software. -- -- Also, for each author's protection and ours, we want to make certain --that everyone understands that there is no warranty for this free --software. If the software is modified by someone else and passed on, we --want its recipients to know that what they have is not the original, so --that any problems introduced by others will not reflect on the original --authors' reputations. -- -- Finally, any free program is threatened constantly by software --patents. We wish to avoid the danger that redistributors of a free --program will individually obtain patent licenses, in effect making the --program proprietary. To prevent this, we have made it clear that any --patent must be licensed for everyone's free use or not licensed at all. -- -- The precise terms and conditions for copying, distribution and --modification follow. -- -- GNU GENERAL PUBLIC LICENSE -- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -- -- 0. This License applies to any program or other work which contains --a notice placed by the copyright holder saying it may be distributed --under the terms of this General Public License. The "Program", below, --refers to any such program or work, and a "work based on the Program" --means either the Program or any derivative work under copyright law: --that is to say, a work containing the Program or a portion of it, --either verbatim or with modifications and/or translated into another --language. (Hereinafter, translation is included without limitation in --the term "modification".) Each licensee is addressed as "you". -- --Activities other than copying, distribution and modification are not --covered by this License; they are outside its scope. The act of --running the Program is not restricted, and the output from the Program --is covered only if its contents constitute a work based on the --Program (independent of having been made by running the Program). --Whether that is true depends on what the Program does. -- -- 1. You may copy and distribute verbatim copies of the Program's --source code as you receive it, in any medium, provided that you --conspicuously and appropriately publish on each copy an appropriate --copyright notice and disclaimer of warranty; keep intact all the --notices that refer to this License and to the absence of any warranty; --and give any other recipients of the Program a copy of this License --along with the Program. -- --You may charge a fee for the physical act of transferring a copy, and --you may at your option offer warranty protection in exchange for a fee. -- -- 2. You may modify your copy or copies of the Program or any portion --of it, thus forming a work based on the Program, and copy and --distribute such modifications or work under the terms of Section 1 --above, provided that you also meet all of these conditions: -- -- a) You must cause the modified files to carry prominent notices -- stating that you changed the files and the date of any change. -- -- b) You must cause any work that you distribute or publish, that in -- whole or in part contains or is derived from the Program or any -- part thereof, to be licensed as a whole at no charge to all third -- parties under the terms of this License. -- -- c) If the modified program normally reads commands interactively -- when run, you must cause it, when started running for such -- interactive use in the most ordinary way, to print or display an -- announcement including an appropriate copyright notice and a -- notice that there is no warranty (or else, saying that you provide -- a warranty) and that users may redistribute the program under -- these conditions, and telling the user how to view a copy of this -- License. (Exception: if the Program itself is interactive but -- does not normally print such an announcement, your work based on -- the Program is not required to print an announcement.) -- --These requirements apply to the modified work as a whole. If --identifiable sections of that work are not derived from the Program, --and can be reasonably considered independent and separate works in --themselves, then this License, and its terms, do not apply to those --sections when you distribute them as separate works. But when you --distribute the same sections as part of a whole which is a work based --on the Program, the distribution of the whole must be on the terms of --this License, whose permissions for other licensees extend to the --entire whole, and thus to each and every part regardless of who wrote it. -- --Thus, it is not the intent of this section to claim rights or contest --your rights to work written entirely by you; rather, the intent is to --exercise the right to control the distribution of derivative or --collective works based on the Program. -- --In addition, mere aggregation of another work not based on the Program --with the Program (or with a work based on the Program) on a volume of --a storage or distribution medium does not bring the other work under --the scope of this License. -- -- 3. You may copy and distribute the Program (or a work based on it, --under Section 2) in object code or executable form under the terms of --Sections 1 and 2 above provided that you also do one of the following: -- -- a) Accompany it with the complete corresponding machine-readable -- source code, which must be distributed under the terms of Sections -- 1 and 2 above on a medium customarily used for software interchange; or, -- -- b) Accompany it with a written offer, valid for at least three -- years, to give any third party, for a charge no more than your -- cost of physically performing source distribution, a complete -- machine-readable copy of the corresponding source code, to be -- distributed under the terms of Sections 1 and 2 above on a medium -- customarily used for software interchange; or, -- -- c) Accompany it with the information you received as to the offer -- to distribute corresponding source code. (This alternative is -- allowed only for noncommercial distribution and only if you -- received the program in object code or executable form with such -- an offer, in accord with Subsection b above.) -- --The source code for a work means the preferred form of the work for --making modifications to it. For an executable work, complete source --code means all the source code for all modules it contains, plus any --associated interface definition files, plus the scripts used to --control compilation and installation of the executable. However, as a --special exception, the source code distributed need not include --anything that is normally distributed (in either source or binary --form) with the major components (compiler, kernel, and so on) of the --operating system on which the executable runs, unless that component --itself accompanies the executable. -- --If distribution of executable or object code is made by offering --access to copy from a designated place, then offering equivalent --access to copy the source code from the same place counts as --distribution of the source code, even though third parties are not --compelled to copy the source along with the object code. -- -- 4. You may not copy, modify, sublicense, or distribute the Program --except as expressly provided under this License. Any attempt --otherwise to copy, modify, sublicense or distribute the Program is --void, and will automatically terminate your rights under this License. --However, parties who have received copies, or rights, from you under --this License will not have their licenses terminated so long as such --parties remain in full compliance. -- -- 5. You are not required to accept this License, since you have not --signed it. However, nothing else grants you permission to modify or --distribute the Program or its derivative works. These actions are --prohibited by law if you do not accept this License. Therefore, by --modifying or distributing the Program (or any work based on the --Program), you indicate your acceptance of this License to do so, and --all its terms and conditions for copying, distributing or modifying --the Program or works based on it. -- -- 6. Each time you redistribute the Program (or any work based on the --Program), the recipient automatically receives a license from the --original licensor to copy, distribute or modify the Program subject to --these terms and conditions. You may not impose any further --restrictions on the recipients' exercise of the rights granted herein. --You are not responsible for enforcing compliance by third parties to --this License. -- -- 7. If, as a consequence of a court judgment or allegation of patent --infringement or for any other reason (not limited to patent issues), --conditions are imposed on you (whether by court order, agreement or --otherwise) that contradict the conditions of this License, they do not --excuse you from the conditions of this License. If you cannot --distribute so as to satisfy simultaneously your obligations under this --License and any other pertinent obligations, then as a consequence you --may not distribute the Program at all. For example, if a patent --license would not permit royalty-free redistribution of the Program by --all those who receive copies directly or indirectly through you, then --the only way you could satisfy both it and this License would be to --refrain entirely from distribution of the Program. -- --If any portion of this section is held invalid or unenforceable under --any particular circumstance, the balance of the section is intended to --apply and the section as a whole is intended to apply in other --circumstances. -- --It is not the purpose of this section to induce you to infringe any --patents or other property right claims or to contest validity of any --such claims; this section has the sole purpose of protecting the --integrity of the free software distribution system, which is --implemented by public license practices. Many people have made --generous contributions to the wide range of software distributed --through that system in reliance on consistent application of that --system; it is up to the author/donor to decide if he or she is willing --to distribute software through any other system and a licensee cannot --impose that choice. -- --This section is intended to make thoroughly clear what is believed to --be a consequence of the rest of this License. -- -- 8. If the distribution and/or use of the Program is restricted in --certain countries either by patents or by copyrighted interfaces, the --original copyright holder who places the Program under this License --may add an explicit geographical distribution limitation excluding --those countries, so that distribution is permitted only in or among --countries not thus excluded. In such case, this License incorporates --the limitation as if written in the body of this License. -- -- 9. The Free Software Foundation may publish revised and/or new versions --of the General Public License from time to time. Such new versions will --be similar in spirit to the present version, but may differ in detail to --address new problems or concerns. -- --Each version is given a distinguishing version number. If the Program --specifies a version number of this License which applies to it and "any --later version", you have the option of following the terms and conditions --either of that version or of any later version published by the Free --Software Foundation. If the Program does not specify a version number of --this License, you may choose any version ever published by the Free Software --Foundation. -- -- 10. If you wish to incorporate parts of the Program into other free --programs whose distribution conditions are different, write to the author --to ask for permission. For software which is copyrighted by the Free --Software Foundation, write to the Free Software Foundation; we sometimes --make exceptions for this. Our decision will be guided by the two goals --of preserving the free status of all derivatives of our free software and --of promoting the sharing and reuse of software generally. -- -- NO WARRANTY -- -- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY --FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN --OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES --PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED --OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF --MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS --TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE --PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, --REPAIR OR CORRECTION. -- -- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING --WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR --REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, --INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING --OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED --TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY --YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER --PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE --POSSIBILITY OF SUCH DAMAGES. -- -- END OF TERMS AND CONDITIONS -- -- How to Apply These Terms to Your New Programs -- -- If you develop a new program, and you want it to be of the greatest --possible use to the public, the best way to achieve this is to make it --free software which everyone can redistribute and change under these terms. -- -- To do so, attach the following notices to the program. It is safest --to attach them to the start of each source file to most effectively --convey the exclusion of warranty; and each file should have at least --the "copyright" line and a pointer to where the full notice is found. -- -- -- Copyright (C) -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License along -- with this program; if not, write to the Free Software Foundation, Inc., -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- --Also add information on how to contact you by electronic and paper mail. -- --If the program is interactive, make it output a short notice like this --when it starts in an interactive mode: -- -- Gnomovision version 69, Copyright (C) year name of author -- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -- This is free software, and you are welcome to redistribute it -- under certain conditions; type `show c' for details. -- --The hypothetical commands `show w' and `show c' should show the appropriate --parts of the General Public License. Of course, the commands you use may --be called something other than `show w' and `show c'; they could even be --mouse-clicks or menu items--whatever suits your program. -- --You should also get your employer (if you work as a programmer) or your --school, if any, to sign a "copyright disclaimer" for the program, if --necessary. Here is a sample; alter the names: -- -- Yoyodyne, Inc., hereby disclaims all copyright interest in the program -- `Gnomovision' (which makes passes at compilers) written by James Hacker. -- -- , 1 April 1989 -- Ty Coon, President of Vice -- --This General Public License does not permit incorporating your program into --proprietary programs. If your program is a subroutine library, you may --consider it more useful to permit linking proprietary applications with the --library. If this is what you want to do, use the GNU Lesser General --Public License instead of this License. -diff -urNr keepassxc-2.6.4-orig/LICENSE.GPL-3 keepassxc-2.6.4-patched/LICENSE.GPL-3 ---- keepassxc-2.6.4-orig/LICENSE.GPL-3 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.GPL-3 1970-01-01 01:00:00.000000000 +0100 -@@ -1,676 +0,0 @@ -- -- GNU GENERAL PUBLIC LICENSE -- Version 3, 29 June 2007 -- -- Copyright (C) 2007 Free Software Foundation, Inc. -- Everyone is permitted to copy and distribute verbatim copies -- of this license document, but changing it is not allowed. -- -- Preamble -- -- The GNU General Public License is a free, copyleft license for --software and other kinds of works. -- -- The licenses for most software and other practical works are designed --to take away your freedom to share and change the works. By contrast, --the GNU General Public License is intended to guarantee your freedom to --share and change all versions of a program--to make sure it remains free --software for all its users. We, the Free Software Foundation, use the --GNU General Public License for most of our software; it applies also to --any other work released this way by its authors. You can apply it to --your programs, too. -- -- When we speak of free software, we are referring to freedom, not --price. Our General Public Licenses are designed to make sure that you --have the freedom to distribute copies of free software (and charge for --them if you wish), that you receive source code or can get it if you --want it, that you can change the software or use pieces of it in new --free programs, and that you know you can do these things. -- -- To protect your rights, we need to prevent others from denying you --these rights or asking you to surrender the rights. Therefore, you have --certain responsibilities if you distribute copies of the software, or if --you modify it: responsibilities to respect the freedom of others. -- -- For example, if you distribute copies of such a program, whether --gratis or for a fee, you must pass on to the recipients the same --freedoms that you received. You must make sure that they, too, receive --or can get the source code. And you must show them these terms so they --know their rights. -- -- Developers that use the GNU GPL protect your rights with two steps: --(1) assert copyright on the software, and (2) offer you this License --giving you legal permission to copy, distribute and/or modify it. -- -- For the developers' and authors' protection, the GPL clearly explains --that there is no warranty for this free software. For both users' and --authors' sake, the GPL requires that modified versions be marked as --changed, so that their problems will not be attributed erroneously to --authors of previous versions. -- -- Some devices are designed to deny users access to install or run --modified versions of the software inside them, although the manufacturer --can do so. This is fundamentally incompatible with the aim of --protecting users' freedom to change the software. The systematic --pattern of such abuse occurs in the area of products for individuals to --use, which is precisely where it is most unacceptable. Therefore, we --have designed this version of the GPL to prohibit the practice for those --products. If such problems arise substantially in other domains, we --stand ready to extend this provision to those domains in future versions --of the GPL, as needed to protect the freedom of users. -- -- Finally, every program is threatened constantly by software patents. --States should not allow patents to restrict development and use of --software on general-purpose computers, but in those that do, we wish to --avoid the special danger that patents applied to a free program could --make it effectively proprietary. To prevent this, the GPL assures that --patents cannot be used to render the program non-free. -- -- The precise terms and conditions for copying, distribution and --modification follow. -- -- TERMS AND CONDITIONS -- -- 0. Definitions. -- -- "This License" refers to version 3 of the GNU General Public License. -- -- "Copyright" also means copyright-like laws that apply to other kinds of --works, such as semiconductor masks. -- -- "The Program" refers to any copyrightable work licensed under this --License. Each licensee is addressed as "you". "Licensees" and --"recipients" may be individuals or organizations. -- -- To "modify" a work means to copy from or adapt all or part of the work --in a fashion requiring copyright permission, other than the making of an --exact copy. The resulting work is called a "modified version" of the --earlier work or a work "based on" the earlier work. -- -- A "covered work" means either the unmodified Program or a work based --on the Program. -- -- To "propagate" a work means to do anything with it that, without --permission, would make you directly or secondarily liable for --infringement under applicable copyright law, except executing it on a --computer or modifying a private copy. Propagation includes copying, --distribution (with or without modification), making available to the --public, and in some countries other activities as well. -- -- To "convey" a work means any kind of propagation that enables other --parties to make or receive copies. Mere interaction with a user through --a computer network, with no transfer of a copy, is not conveying. -- -- An interactive user interface displays "Appropriate Legal Notices" --to the extent that it includes a convenient and prominently visible --feature that (1) displays an appropriate copyright notice, and (2) --tells the user that there is no warranty for the work (except to the --extent that warranties are provided), that licensees may convey the --work under this License, and how to view a copy of this License. If --the interface presents a list of user commands or options, such as a --menu, a prominent item in the list meets this criterion. -- -- 1. Source Code. -- -- The "source code" for a work means the preferred form of the work --for making modifications to it. "Object code" means any non-source --form of a work. -- -- A "Standard Interface" means an interface that either is an official --standard defined by a recognized standards body, or, in the case of --interfaces specified for a particular programming language, one that --is widely used among developers working in that language. -- -- The "System Libraries" of an executable work include anything, other --than the work as a whole, that (a) is included in the normal form of --packaging a Major Component, but which is not part of that Major --Component, and (b) serves only to enable use of the work with that --Major Component, or to implement a Standard Interface for which an --implementation is available to the public in source code form. A --"Major Component", in this context, means a major essential component --(kernel, window system, and so on) of the specific operating system --(if any) on which the executable work runs, or a compiler used to --produce the work, or an object code interpreter used to run it. -- -- The "Corresponding Source" for a work in object code form means all --the source code needed to generate, install, and (for an executable --work) run the object code and to modify the work, including scripts to --control those activities. However, it does not include the work's --System Libraries, or general-purpose tools or generally available free --programs which are used unmodified in performing those activities but --which are not part of the work. For example, Corresponding Source --includes interface definition files associated with source files for --the work, and the source code for shared libraries and dynamically --linked subprograms that the work is specifically designed to require, --such as by intimate data communication or control flow between those --subprograms and other parts of the work. -- -- The Corresponding Source need not include anything that users --can regenerate automatically from other parts of the Corresponding --Source. -- -- The Corresponding Source for a work in source code form is that --same work. -- -- 2. Basic Permissions. -- -- All rights granted under this License are granted for the term of --copyright on the Program, and are irrevocable provided the stated --conditions are met. This License explicitly affirms your unlimited --permission to run the unmodified Program. The output from running a --covered work is covered by this License only if the output, given its --content, constitutes a covered work. This License acknowledges your --rights of fair use or other equivalent, as provided by copyright law. -- -- You may make, run and propagate covered works that you do not --convey, without conditions so long as your license otherwise remains --in force. You may convey covered works to others for the sole purpose --of having them make modifications exclusively for you, or provide you --with facilities for running those works, provided that you comply with --the terms of this License in conveying all material for which you do --not control copyright. Those thus making or running the covered works --for you must do so exclusively on your behalf, under your direction --and control, on terms that prohibit them from making any copies of --your copyrighted material outside their relationship with you. -- -- Conveying under any other circumstances is permitted solely under --the conditions stated below. Sublicensing is not allowed; section 10 --makes it unnecessary. -- -- 3. Protecting Users' Legal Rights From Anti-Circumvention Law. -- -- No covered work shall be deemed part of an effective technological --measure under any applicable law fulfilling obligations under article --11 of the WIPO copyright treaty adopted on 20 December 1996, or --similar laws prohibiting or restricting circumvention of such --measures. -- -- When you convey a covered work, you waive any legal power to forbid --circumvention of technological measures to the extent such circumvention --is effected by exercising rights under this License with respect to --the covered work, and you disclaim any intention to limit operation or --modification of the work as a means of enforcing, against the work's --users, your or third parties' legal rights to forbid circumvention of --technological measures. -- -- 4. Conveying Verbatim Copies. -- -- You may convey verbatim copies of the Program's source code as you --receive it, in any medium, provided that you conspicuously and --appropriately publish on each copy an appropriate copyright notice; --keep intact all notices stating that this License and any --non-permissive terms added in accord with section 7 apply to the code; --keep intact all notices of the absence of any warranty; and give all --recipients a copy of this License along with the Program. -- -- You may charge any price or no price for each copy that you convey, --and you may offer support or warranty protection for a fee. -- -- 5. Conveying Modified Source Versions. -- -- You may convey a work based on the Program, or the modifications to --produce it from the Program, in the form of source code under the --terms of section 4, provided that you also meet all of these conditions: -- -- a) The work must carry prominent notices stating that you modified -- it, and giving a relevant date. -- -- b) The work must carry prominent notices stating that it is -- released under this License and any conditions added under section -- 7. This requirement modifies the requirement in section 4 to -- "keep intact all notices". -- -- c) You must license the entire work, as a whole, under this -- License to anyone who comes into possession of a copy. This -- License will therefore apply, along with any applicable section 7 -- additional terms, to the whole of the work, and all its parts, -- regardless of how they are packaged. This License gives no -- permission to license the work in any other way, but it does not -- invalidate such permission if you have separately received it. -- -- d) If the work has interactive user interfaces, each must display -- Appropriate Legal Notices; however, if the Program has interactive -- interfaces that do not display Appropriate Legal Notices, your -- work need not make them do so. -- -- A compilation of a covered work with other separate and independent --works, which are not by their nature extensions of the covered work, --and which are not combined with it such as to form a larger program, --in or on a volume of a storage or distribution medium, is called an --"aggregate" if the compilation and its resulting copyright are not --used to limit the access or legal rights of the compilation's users --beyond what the individual works permit. Inclusion of a covered work --in an aggregate does not cause this License to apply to the other --parts of the aggregate. -- -- 6. Conveying Non-Source Forms. -- -- You may convey a covered work in object code form under the terms --of sections 4 and 5, provided that you also convey the --machine-readable Corresponding Source under the terms of this License, --in one of these ways: -- -- a) Convey the object code in, or embodied in, a physical product -- (including a physical distribution medium), accompanied by the -- Corresponding Source fixed on a durable physical medium -- customarily used for software interchange. -- -- b) Convey the object code in, or embodied in, a physical product -- (including a physical distribution medium), accompanied by a -- written offer, valid for at least three years and valid for as -- long as you offer spare parts or customer support for that product -- model, to give anyone who possesses the object code either (1) a -- copy of the Corresponding Source for all the software in the -- product that is covered by this License, on a durable physical -- medium customarily used for software interchange, for a price no -- more than your reasonable cost of physically performing this -- conveying of source, or (2) access to copy the -- Corresponding Source from a network server at no charge. -- -- c) Convey individual copies of the object code with a copy of the -- written offer to provide the Corresponding Source. This -- alternative is allowed only occasionally and noncommercially, and -- only if you received the object code with such an offer, in accord -- with subsection 6b. -- -- d) Convey the object code by offering access from a designated -- place (gratis or for a charge), and offer equivalent access to the -- Corresponding Source in the same way through the same place at no -- further charge. You need not require recipients to copy the -- Corresponding Source along with the object code. If the place to -- copy the object code is a network server, the Corresponding Source -- may be on a different server (operated by you or a third party) -- that supports equivalent copying facilities, provided you maintain -- clear directions next to the object code saying where to find the -- Corresponding Source. Regardless of what server hosts the -- Corresponding Source, you remain obligated to ensure that it is -- available for as long as needed to satisfy these requirements. -- -- e) Convey the object code using peer-to-peer transmission, provided -- you inform other peers where the object code and Corresponding -- Source of the work are being offered to the general public at no -- charge under subsection 6d. -- -- A separable portion of the object code, whose source code is excluded --from the Corresponding Source as a System Library, need not be --included in conveying the object code work. -- -- A "User Product" is either (1) a "consumer product", which means any --tangible personal property which is normally used for personal, family, --or household purposes, or (2) anything designed or sold for incorporation --into a dwelling. In determining whether a product is a consumer product, --doubtful cases shall be resolved in favor of coverage. For a particular --product received by a particular user, "normally used" refers to a --typical or common use of that class of product, regardless of the status --of the particular user or of the way in which the particular user --actually uses, or expects or is expected to use, the product. A product --is a consumer product regardless of whether the product has substantial --commercial, industrial or non-consumer uses, unless such uses represent --the only significant mode of use of the product. -- -- "Installation Information" for a User Product means any methods, --procedures, authorization keys, or other information required to install --and execute modified versions of a covered work in that User Product from --a modified version of its Corresponding Source. The information must --suffice to ensure that the continued functioning of the modified object --code is in no case prevented or interfered with solely because --modification has been made. -- -- If you convey an object code work under this section in, or with, or --specifically for use in, a User Product, and the conveying occurs as --part of a transaction in which the right of possession and use of the --User Product is transferred to the recipient in perpetuity or for a --fixed term (regardless of how the transaction is characterized), the --Corresponding Source conveyed under this section must be accompanied --by the Installation Information. But this requirement does not apply --if neither you nor any third party retains the ability to install --modified object code on the User Product (for example, the work has --been installed in ROM). -- -- The requirement to provide Installation Information does not include a --requirement to continue to provide support service, warranty, or updates --for a work that has been modified or installed by the recipient, or for --the User Product in which it has been modified or installed. Access to a --network may be denied when the modification itself materially and --adversely affects the operation of the network or violates the rules and --protocols for communication across the network. -- -- Corresponding Source conveyed, and Installation Information provided, --in accord with this section must be in a format that is publicly --documented (and with an implementation available to the public in --source code form), and must require no special password or key for --unpacking, reading or copying. -- -- 7. Additional Terms. -- -- "Additional permissions" are terms that supplement the terms of this --License by making exceptions from one or more of its conditions. --Additional permissions that are applicable to the entire Program shall --be treated as though they were included in this License, to the extent --that they are valid under applicable law. If additional permissions --apply only to part of the Program, that part may be used separately --under those permissions, but the entire Program remains governed by --this License without regard to the additional permissions. -- -- When you convey a copy of a covered work, you may at your option --remove any additional permissions from that copy, or from any part of --it. (Additional permissions may be written to require their own --removal in certain cases when you modify the work.) You may place --additional permissions on material, added by you to a covered work, --for which you have or can give appropriate copyright permission. -- -- Notwithstanding any other provision of this License, for material you --add to a covered work, you may (if authorized by the copyright holders of --that material) supplement the terms of this License with terms: -- -- a) Disclaiming warranty or limiting liability differently from the -- terms of sections 15 and 16 of this License; or -- -- b) Requiring preservation of specified reasonable legal notices or -- author attributions in that material or in the Appropriate Legal -- Notices displayed by works containing it; or -- -- c) Prohibiting misrepresentation of the origin of that material, or -- requiring that modified versions of such material be marked in -- reasonable ways as different from the original version; or -- -- d) Limiting the use for publicity purposes of names of licensors or -- authors of the material; or -- -- e) Declining to grant rights under trademark law for use of some -- trade names, trademarks, or service marks; or -- -- f) Requiring indemnification of licensors and authors of that -- material by anyone who conveys the material (or modified versions of -- it) with contractual assumptions of liability to the recipient, for -- any liability that these contractual assumptions directly impose on -- those licensors and authors. -- -- All other non-permissive additional terms are considered "further --restrictions" within the meaning of section 10. If the Program as you --received it, or any part of it, contains a notice stating that it is --governed by this License along with a term that is a further --restriction, you may remove that term. If a license document contains --a further restriction but permits relicensing or conveying under this --License, you may add to a covered work material governed by the terms --of that license document, provided that the further restriction does --not survive such relicensing or conveying. -- -- If you add terms to a covered work in accord with this section, you --must place, in the relevant source files, a statement of the --additional terms that apply to those files, or a notice indicating --where to find the applicable terms. -- -- Additional terms, permissive or non-permissive, may be stated in the --form of a separately written license, or stated as exceptions; --the above requirements apply either way. -- -- 8. Termination. -- -- You may not propagate or modify a covered work except as expressly --provided under this License. Any attempt otherwise to propagate or --modify it is void, and will automatically terminate your rights under --this License (including any patent licenses granted under the third --paragraph of section 11). -- -- However, if you cease all violation of this License, then your --license from a particular copyright holder is reinstated (a) --provisionally, unless and until the copyright holder explicitly and --finally terminates your license, and (b) permanently, if the copyright --holder fails to notify you of the violation by some reasonable means --prior to 60 days after the cessation. -- -- Moreover, your license from a particular copyright holder is --reinstated permanently if the copyright holder notifies you of the --violation by some reasonable means, this is the first time you have --received notice of violation of this License (for any work) from that --copyright holder, and you cure the violation prior to 30 days after --your receipt of the notice. -- -- Termination of your rights under this section does not terminate the --licenses of parties who have received copies or rights from you under --this License. If your rights have been terminated and not permanently --reinstated, you do not qualify to receive new licenses for the same --material under section 10. -- -- 9. Acceptance Not Required for Having Copies. -- -- You are not required to accept this License in order to receive or --run a copy of the Program. Ancillary propagation of a covered work --occurring solely as a consequence of using peer-to-peer transmission --to receive a copy likewise does not require acceptance. However, --nothing other than this License grants you permission to propagate or --modify any covered work. These actions infringe copyright if you do --not accept this License. Therefore, by modifying or propagating a --covered work, you indicate your acceptance of this License to do so. -- -- 10. Automatic Licensing of Downstream Recipients. -- -- Each time you convey a covered work, the recipient automatically --receives a license from the original licensors, to run, modify and --propagate that work, subject to this License. You are not responsible --for enforcing compliance by third parties with this License. -- -- An "entity transaction" is a transaction transferring control of an --organization, or substantially all assets of one, or subdividing an --organization, or merging organizations. If propagation of a covered --work results from an entity transaction, each party to that --transaction who receives a copy of the work also receives whatever --licenses to the work the party's predecessor in interest had or could --give under the previous paragraph, plus a right to possession of the --Corresponding Source of the work from the predecessor in interest, if --the predecessor has it or can get it with reasonable efforts. -- -- You may not impose any further restrictions on the exercise of the --rights granted or affirmed under this License. For example, you may --not impose a license fee, royalty, or other charge for exercise of --rights granted under this License, and you may not initiate litigation --(including a cross-claim or counterclaim in a lawsuit) alleging that --any patent claim is infringed by making, using, selling, offering for --sale, or importing the Program or any portion of it. -- -- 11. Patents. -- -- A "contributor" is a copyright holder who authorizes use under this --License of the Program or a work on which the Program is based. The --work thus licensed is called the contributor's "contributor version". -- -- A contributor's "essential patent claims" are all patent claims --owned or controlled by the contributor, whether already acquired or --hereafter acquired, that would be infringed by some manner, permitted --by this License, of making, using, or selling its contributor version, --but do not include claims that would be infringed only as a --consequence of further modification of the contributor version. For --purposes of this definition, "control" includes the right to grant --patent sublicenses in a manner consistent with the requirements of --this License. -- -- Each contributor grants you a non-exclusive, worldwide, royalty-free --patent license under the contributor's essential patent claims, to --make, use, sell, offer for sale, import and otherwise run, modify and --propagate the contents of its contributor version. -- -- In the following three paragraphs, a "patent license" is any express --agreement or commitment, however denominated, not to enforce a patent --(such as an express permission to practice a patent or covenant not to --sue for patent infringement). To "grant" such a patent license to a --party means to make such an agreement or commitment not to enforce a --patent against the party. -- -- If you convey a covered work, knowingly relying on a patent license, --and the Corresponding Source of the work is not available for anyone --to copy, free of charge and under the terms of this License, through a --publicly available network server or other readily accessible means, --then you must either (1) cause the Corresponding Source to be so --available, or (2) arrange to deprive yourself of the benefit of the --patent license for this particular work, or (3) arrange, in a manner --consistent with the requirements of this License, to extend the patent --license to downstream recipients. "Knowingly relying" means you have --actual knowledge that, but for the patent license, your conveying the --covered work in a country, or your recipient's use of the covered work --in a country, would infringe one or more identifiable patents in that --country that you have reason to believe are valid. -- -- If, pursuant to or in connection with a single transaction or --arrangement, you convey, or propagate by procuring conveyance of, a --covered work, and grant a patent license to some of the parties --receiving the covered work authorizing them to use, propagate, modify --or convey a specific copy of the covered work, then the patent license --you grant is automatically extended to all recipients of the covered --work and works based on it. -- -- A patent license is "discriminatory" if it does not include within --the scope of its coverage, prohibits the exercise of, or is --conditioned on the non-exercise of one or more of the rights that are --specifically granted under this License. You may not convey a covered --work if you are a party to an arrangement with a third party that is --in the business of distributing software, under which you make payment --to the third party based on the extent of your activity of conveying --the work, and under which the third party grants, to any of the --parties who would receive the covered work from you, a discriminatory --patent license (a) in connection with copies of the covered work --conveyed by you (or copies made from those copies), or (b) primarily --for and in connection with specific products or compilations that --contain the covered work, unless you entered into that arrangement, --or that patent license was granted, prior to 28 March 2007. -- -- Nothing in this License shall be construed as excluding or limiting --any implied license or other defenses to infringement that may --otherwise be available to you under applicable patent law. -- -- 12. No Surrender of Others' Freedom. -- -- If conditions are imposed on you (whether by court order, agreement or --otherwise) that contradict the conditions of this License, they do not --excuse you from the conditions of this License. If you cannot convey a --covered work so as to satisfy simultaneously your obligations under this --License and any other pertinent obligations, then as a consequence you may --not convey it at all. For example, if you agree to terms that obligate you --to collect a royalty for further conveying from those to whom you convey --the Program, the only way you could satisfy both those terms and this --License would be to refrain entirely from conveying the Program. -- -- 13. Use with the GNU Affero General Public License. -- -- Notwithstanding any other provision of this License, you have --permission to link or combine any covered work with a work licensed --under version 3 of the GNU Affero General Public License into a single --combined work, and to convey the resulting work. The terms of this --License will continue to apply to the part which is the covered work, --but the special requirements of the GNU Affero General Public License, --section 13, concerning interaction through a network will apply to the --combination as such. -- -- 14. Revised Versions of this License. -- -- The Free Software Foundation may publish revised and/or new versions of --the GNU General Public License from time to time. Such new versions will --be similar in spirit to the present version, but may differ in detail to --address new problems or concerns. -- -- Each version is given a distinguishing version number. If the --Program specifies that a certain numbered version of the GNU General --Public License "or any later version" applies to it, you have the --option of following the terms and conditions either of that numbered --version or of any later version published by the Free Software --Foundation. If the Program does not specify a version number of the --GNU General Public License, you may choose any version ever published --by the Free Software Foundation. -- -- If the Program specifies that a proxy can decide which future --versions of the GNU General Public License can be used, that proxy's --public statement of acceptance of a version permanently authorizes you --to choose that version for the Program. -- -- Later license versions may give you additional or different --permissions. However, no additional obligations are imposed on any --author or copyright holder as a result of your choosing to follow a --later version. -- -- 15. Disclaimer of Warranty. -- -- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY --APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT --HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY --OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, --THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR --PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM --IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF --ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -- -- 16. Limitation of Liability. -- -- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING --WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS --THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY --GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE --USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF --DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD --PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), --EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF --SUCH DAMAGES. -- -- 17. Interpretation of Sections 15 and 16. -- -- If the disclaimer of warranty and limitation of liability provided --above cannot be given local legal effect according to their terms, --reviewing courts shall apply local law that most closely approximates --an absolute waiver of all civil liability in connection with the --Program, unless a warranty or assumption of liability accompanies a --copy of the Program in return for a fee. -- -- END OF TERMS AND CONDITIONS -- -- How to Apply These Terms to Your New Programs -- -- If you develop a new program, and you want it to be of the greatest --possible use to the public, the best way to achieve this is to make it --free software which everyone can redistribute and change under these terms. -- -- To do so, attach the following notices to the program. It is safest --to attach them to the start of each source file to most effectively --state the exclusion of warranty; and each file should have at least --the "copyright" line and a pointer to where the full notice is found. -- -- -- Copyright (C) -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- --Also add information on how to contact you by electronic and paper mail. -- -- If the program does terminal interaction, make it output a short --notice like this when it starts in an interactive mode: -- -- Copyright (C) -- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -- This is free software, and you are welcome to redistribute it -- under certain conditions; type `show c' for details. -- --The hypothetical commands `show w' and `show c' should show the appropriate --parts of the General Public License. Of course, your program's commands --might be different; for a GUI interface, you would use an "about box". -- -- You should also get your employer (if you work as a programmer) or school, --if any, to sign a "copyright disclaimer" for the program, if necessary. --For more information on this, and how to apply and follow the GNU GPL, see --. -- -- The GNU General Public License does not permit incorporating your program --into proprietary programs. If your program is a subroutine library, you --may consider it more useful to permit linking proprietary applications with --the library. If this is what you want to do, use the GNU Lesser General --Public License instead of this License. But first, please read --. -- -diff -urNr keepassxc-2.6.4-orig/LICENSE.LGPL-2.1 keepassxc-2.6.4-patched/LICENSE.LGPL-2.1 ---- keepassxc-2.6.4-orig/LICENSE.LGPL-2.1 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.LGPL-2.1 1970-01-01 01:00:00.000000000 +0100 -@@ -1,502 +0,0 @@ -- GNU LESSER GENERAL PUBLIC LICENSE -- Version 2.1, February 1999 -- -- Copyright (C) 1991, 1999 Free Software Foundation, Inc. -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- Everyone is permitted to copy and distribute verbatim copies -- of this license document, but changing it is not allowed. -- --[This is the first released version of the Lesser GPL. It also counts -- as the successor of the GNU Library Public License, version 2, hence -- the version number 2.1.] -- -- Preamble -- -- The licenses for most software are designed to take away your --freedom to share and change it. By contrast, the GNU General Public --Licenses are intended to guarantee your freedom to share and change --free software--to make sure the software is free for all its users. -- -- This license, the Lesser General Public License, applies to some --specially designated software packages--typically libraries--of the --Free Software Foundation and other authors who decide to use it. You --can use it too, but we suggest you first think carefully about whether --this license or the ordinary General Public License is the better --strategy to use in any particular case, based on the explanations below. -- -- When we speak of free software, we are referring to freedom of use, --not price. Our General Public Licenses are designed to make sure that --you have the freedom to distribute copies of free software (and charge --for this service if you wish); that you receive source code or can get --it if you want it; that you can change the software and use pieces of --it in new free programs; and that you are informed that you can do --these things. -- -- To protect your rights, we need to make restrictions that forbid --distributors to deny you these rights or to ask you to surrender these --rights. These restrictions translate to certain responsibilities for --you if you distribute copies of the library or if you modify it. -- -- For example, if you distribute copies of the library, whether gratis --or for a fee, you must give the recipients all the rights that we gave --you. You must make sure that they, too, receive or can get the source --code. If you link other code with the library, you must provide --complete object files to the recipients, so that they can relink them --with the library after making changes to the library and recompiling --it. And you must show them these terms so they know their rights. -- -- We protect your rights with a two-step method: (1) we copyright the --library, and (2) we offer you this license, which gives you legal --permission to copy, distribute and/or modify the library. -- -- To protect each distributor, we want to make it very clear that --there is no warranty for the free library. Also, if the library is --modified by someone else and passed on, the recipients should know --that what they have is not the original version, so that the original --author's reputation will not be affected by problems that might be --introduced by others. -- -- Finally, software patents pose a constant threat to the existence of --any free program. We wish to make sure that a company cannot --effectively restrict the users of a free program by obtaining a --restrictive license from a patent holder. Therefore, we insist that --any patent license obtained for a version of the library must be --consistent with the full freedom of use specified in this license. -- -- Most GNU software, including some libraries, is covered by the --ordinary GNU General Public License. This license, the GNU Lesser --General Public License, applies to certain designated libraries, and --is quite different from the ordinary General Public License. We use --this license for certain libraries in order to permit linking those --libraries into non-free programs. -- -- When a program is linked with a library, whether statically or using --a shared library, the combination of the two is legally speaking a --combined work, a derivative of the original library. The ordinary --General Public License therefore permits such linking only if the --entire combination fits its criteria of freedom. The Lesser General --Public License permits more lax criteria for linking other code with --the library. -- -- We call this license the "Lesser" General Public License because it --does Less to protect the user's freedom than the ordinary General --Public License. It also provides other free software developers Less --of an advantage over competing non-free programs. These disadvantages --are the reason we use the ordinary General Public License for many --libraries. However, the Lesser license provides advantages in certain --special circumstances. -- -- For example, on rare occasions, there may be a special need to --encourage the widest possible use of a certain library, so that it becomes --a de-facto standard. To achieve this, non-free programs must be --allowed to use the library. A more frequent case is that a free --library does the same job as widely used non-free libraries. In this --case, there is little to gain by limiting the free library to free --software only, so we use the Lesser General Public License. -- -- In other cases, permission to use a particular library in non-free --programs enables a greater number of people to use a large body of --free software. For example, permission to use the GNU C Library in --non-free programs enables many more people to use the whole GNU --operating system, as well as its variant, the GNU/Linux operating --system. -- -- Although the Lesser General Public License is Less protective of the --users' freedom, it does ensure that the user of a program that is --linked with the Library has the freedom and the wherewithal to run --that program using a modified version of the Library. -- -- The precise terms and conditions for copying, distribution and --modification follow. Pay close attention to the difference between a --"work based on the library" and a "work that uses the library". The --former contains code derived from the library, whereas the latter must --be combined with the library in order to run. -- -- GNU LESSER GENERAL PUBLIC LICENSE -- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -- -- 0. This License Agreement applies to any software library or other --program which contains a notice placed by the copyright holder or --other authorized party saying it may be distributed under the terms of --this Lesser General Public License (also called "this License"). --Each licensee is addressed as "you". -- -- A "library" means a collection of software functions and/or data --prepared so as to be conveniently linked with application programs --(which use some of those functions and data) to form executables. -- -- The "Library", below, refers to any such software library or work --which has been distributed under these terms. A "work based on the --Library" means either the Library or any derivative work under --copyright law: that is to say, a work containing the Library or a --portion of it, either verbatim or with modifications and/or translated --straightforwardly into another language. (Hereinafter, translation is --included without limitation in the term "modification".) -- -- "Source code" for a work means the preferred form of the work for --making modifications to it. For a library, complete source code means --all the source code for all modules it contains, plus any associated --interface definition files, plus the scripts used to control compilation --and installation of the library. -- -- Activities other than copying, distribution and modification are not --covered by this License; they are outside its scope. The act of --running a program using the Library is not restricted, and output from --such a program is covered only if its contents constitute a work based --on the Library (independent of the use of the Library in a tool for --writing it). Whether that is true depends on what the Library does --and what the program that uses the Library does. -- -- 1. You may copy and distribute verbatim copies of the Library's --complete source code as you receive it, in any medium, provided that --you conspicuously and appropriately publish on each copy an --appropriate copyright notice and disclaimer of warranty; keep intact --all the notices that refer to this License and to the absence of any --warranty; and distribute a copy of this License along with the --Library. -- -- You may charge a fee for the physical act of transferring a copy, --and you may at your option offer warranty protection in exchange for a --fee. -- -- 2. You may modify your copy or copies of the Library or any portion --of it, thus forming a work based on the Library, and copy and --distribute such modifications or work under the terms of Section 1 --above, provided that you also meet all of these conditions: -- -- a) The modified work must itself be a software library. -- -- b) You must cause the files modified to carry prominent notices -- stating that you changed the files and the date of any change. -- -- c) You must cause the whole of the work to be licensed at no -- charge to all third parties under the terms of this License. -- -- d) If a facility in the modified Library refers to a function or a -- table of data to be supplied by an application program that uses -- the facility, other than as an argument passed when the facility -- is invoked, then you must make a good faith effort to ensure that, -- in the event an application does not supply such function or -- table, the facility still operates, and performs whatever part of -- its purpose remains meaningful. -- -- (For example, a function in a library to compute square roots has -- a purpose that is entirely well-defined independent of the -- application. Therefore, Subsection 2d requires that any -- application-supplied function or table used by this function must -- be optional: if the application does not supply it, the square -- root function must still compute square roots.) -- --These requirements apply to the modified work as a whole. If --identifiable sections of that work are not derived from the Library, --and can be reasonably considered independent and separate works in --themselves, then this License, and its terms, do not apply to those --sections when you distribute them as separate works. But when you --distribute the same sections as part of a whole which is a work based --on the Library, the distribution of the whole must be on the terms of --this License, whose permissions for other licensees extend to the --entire whole, and thus to each and every part regardless of who wrote --it. -- --Thus, it is not the intent of this section to claim rights or contest --your rights to work written entirely by you; rather, the intent is to --exercise the right to control the distribution of derivative or --collective works based on the Library. -- --In addition, mere aggregation of another work not based on the Library --with the Library (or with a work based on the Library) on a volume of --a storage or distribution medium does not bring the other work under --the scope of this License. -- -- 3. You may opt to apply the terms of the ordinary GNU General Public --License instead of this License to a given copy of the Library. To do --this, you must alter all the notices that refer to this License, so --that they refer to the ordinary GNU General Public License, version 2, --instead of to this License. (If a newer version than version 2 of the --ordinary GNU General Public License has appeared, then you can specify --that version instead if you wish.) Do not make any other change in --these notices. -- -- Once this change is made in a given copy, it is irreversible for --that copy, so the ordinary GNU General Public License applies to all --subsequent copies and derivative works made from that copy. -- -- This option is useful when you wish to copy part of the code of --the Library into a program that is not a library. -- -- 4. You may copy and distribute the Library (or a portion or --derivative of it, under Section 2) in object code or executable form --under the terms of Sections 1 and 2 above provided that you accompany --it with the complete corresponding machine-readable source code, which --must be distributed under the terms of Sections 1 and 2 above on a --medium customarily used for software interchange. -- -- If distribution of object code is made by offering access to copy --from a designated place, then offering equivalent access to copy the --source code from the same place satisfies the requirement to --distribute the source code, even though third parties are not --compelled to copy the source along with the object code. -- -- 5. A program that contains no derivative of any portion of the --Library, but is designed to work with the Library by being compiled or --linked with it, is called a "work that uses the Library". Such a --work, in isolation, is not a derivative work of the Library, and --therefore falls outside the scope of this License. -- -- However, linking a "work that uses the Library" with the Library --creates an executable that is a derivative of the Library (because it --contains portions of the Library), rather than a "work that uses the --library". The executable is therefore covered by this License. --Section 6 states terms for distribution of such executables. -- -- When a "work that uses the Library" uses material from a header file --that is part of the Library, the object code for the work may be a --derivative work of the Library even though the source code is not. --Whether this is true is especially significant if the work can be --linked without the Library, or if the work is itself a library. The --threshold for this to be true is not precisely defined by law. -- -- If such an object file uses only numerical parameters, data --structure layouts and accessors, and small macros and small inline --functions (ten lines or less in length), then the use of the object --file is unrestricted, regardless of whether it is legally a derivative --work. (Executables containing this object code plus portions of the --Library will still fall under Section 6.) -- -- Otherwise, if the work is a derivative of the Library, you may --distribute the object code for the work under the terms of Section 6. --Any executables containing that work also fall under Section 6, --whether or not they are linked directly with the Library itself. -- -- 6. As an exception to the Sections above, you may also combine or --link a "work that uses the Library" with the Library to produce a --work containing portions of the Library, and distribute that work --under terms of your choice, provided that the terms permit --modification of the work for the customer's own use and reverse --engineering for debugging such modifications. -- -- You must give prominent notice with each copy of the work that the --Library is used in it and that the Library and its use are covered by --this License. You must supply a copy of this License. If the work --during execution displays copyright notices, you must include the --copyright notice for the Library among them, as well as a reference --directing the user to the copy of this License. Also, you must do one --of these things: -- -- a) Accompany the work with the complete corresponding -- machine-readable source code for the Library including whatever -- changes were used in the work (which must be distributed under -- Sections 1 and 2 above); and, if the work is an executable linked -- with the Library, with the complete machine-readable "work that -- uses the Library", as object code and/or source code, so that the -- user can modify the Library and then relink to produce a modified -- executable containing the modified Library. (It is understood -- that the user who changes the contents of definitions files in the -- Library will not necessarily be able to recompile the application -- to use the modified definitions.) -- -- b) Use a suitable shared library mechanism for linking with the -- Library. A suitable mechanism is one that (1) uses at run time a -- copy of the library already present on the user's computer system, -- rather than copying library functions into the executable, and (2) -- will operate properly with a modified version of the library, if -- the user installs one, as long as the modified version is -- interface-compatible with the version that the work was made with. -- -- c) Accompany the work with a written offer, valid for at -- least three years, to give the same user the materials -- specified in Subsection 6a, above, for a charge no more -- than the cost of performing this distribution. -- -- d) If distribution of the work is made by offering access to copy -- from a designated place, offer equivalent access to copy the above -- specified materials from the same place. -- -- e) Verify that the user has already received a copy of these -- materials or that you have already sent this user a copy. -- -- For an executable, the required form of the "work that uses the --Library" must include any data and utility programs needed for --reproducing the executable from it. However, as a special exception, --the materials to be distributed need not include anything that is --normally distributed (in either source or binary form) with the major --components (compiler, kernel, and so on) of the operating system on --which the executable runs, unless that component itself accompanies --the executable. -- -- It may happen that this requirement contradicts the license --restrictions of other proprietary libraries that do not normally --accompany the operating system. Such a contradiction means you cannot --use both them and the Library together in an executable that you --distribute. -- -- 7. You may place library facilities that are a work based on the --Library side-by-side in a single library together with other library --facilities not covered by this License, and distribute such a combined --library, provided that the separate distribution of the work based on --the Library and of the other library facilities is otherwise --permitted, and provided that you do these two things: -- -- a) Accompany the combined library with a copy of the same work -- based on the Library, uncombined with any other library -- facilities. This must be distributed under the terms of the -- Sections above. -- -- b) Give prominent notice with the combined library of the fact -- that part of it is a work based on the Library, and explaining -- where to find the accompanying uncombined form of the same work. -- -- 8. You may not copy, modify, sublicense, link with, or distribute --the Library except as expressly provided under this License. Any --attempt otherwise to copy, modify, sublicense, link with, or --distribute the Library is void, and will automatically terminate your --rights under this License. However, parties who have received copies, --or rights, from you under this License will not have their licenses --terminated so long as such parties remain in full compliance. -- -- 9. You are not required to accept this License, since you have not --signed it. However, nothing else grants you permission to modify or --distribute the Library or its derivative works. These actions are --prohibited by law if you do not accept this License. Therefore, by --modifying or distributing the Library (or any work based on the --Library), you indicate your acceptance of this License to do so, and --all its terms and conditions for copying, distributing or modifying --the Library or works based on it. -- -- 10. Each time you redistribute the Library (or any work based on the --Library), the recipient automatically receives a license from the --original licensor to copy, distribute, link with or modify the Library --subject to these terms and conditions. You may not impose any further --restrictions on the recipients' exercise of the rights granted herein. --You are not responsible for enforcing compliance by third parties with --this License. -- -- 11. If, as a consequence of a court judgment or allegation of patent --infringement or for any other reason (not limited to patent issues), --conditions are imposed on you (whether by court order, agreement or --otherwise) that contradict the conditions of this License, they do not --excuse you from the conditions of this License. If you cannot --distribute so as to satisfy simultaneously your obligations under this --License and any other pertinent obligations, then as a consequence you --may not distribute the Library at all. For example, if a patent --license would not permit royalty-free redistribution of the Library by --all those who receive copies directly or indirectly through you, then --the only way you could satisfy both it and this License would be to --refrain entirely from distribution of the Library. -- --If any portion of this section is held invalid or unenforceable under any --particular circumstance, the balance of the section is intended to apply, --and the section as a whole is intended to apply in other circumstances. -- --It is not the purpose of this section to induce you to infringe any --patents or other property right claims or to contest validity of any --such claims; this section has the sole purpose of protecting the --integrity of the free software distribution system which is --implemented by public license practices. Many people have made --generous contributions to the wide range of software distributed --through that system in reliance on consistent application of that --system; it is up to the author/donor to decide if he or she is willing --to distribute software through any other system and a licensee cannot --impose that choice. -- --This section is intended to make thoroughly clear what is believed to --be a consequence of the rest of this License. -- -- 12. If the distribution and/or use of the Library is restricted in --certain countries either by patents or by copyrighted interfaces, the --original copyright holder who places the Library under this License may add --an explicit geographical distribution limitation excluding those countries, --so that distribution is permitted only in or among countries not thus --excluded. In such case, this License incorporates the limitation as if --written in the body of this License. -- -- 13. The Free Software Foundation may publish revised and/or new --versions of the Lesser General Public License from time to time. --Such new versions will be similar in spirit to the present version, --but may differ in detail to address new problems or concerns. -- --Each version is given a distinguishing version number. If the Library --specifies a version number of this License which applies to it and --"any later version", you have the option of following the terms and --conditions either of that version or of any later version published by --the Free Software Foundation. If the Library does not specify a --license version number, you may choose any version ever published by --the Free Software Foundation. -- -- 14. If you wish to incorporate parts of the Library into other free --programs whose distribution conditions are incompatible with these, --write to the author to ask for permission. For software which is --copyrighted by the Free Software Foundation, write to the Free --Software Foundation; we sometimes make exceptions for this. Our --decision will be guided by the two goals of preserving the free status --of all derivatives of our free software and of promoting the sharing --and reuse of software generally. -- -- NO WARRANTY -- -- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO --WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. --EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR --OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY --KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE --IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR --PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE --LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME --THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -- -- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN --WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY --AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU --FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR --CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE --LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING --RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A --FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF --SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH --DAMAGES. -- -- END OF TERMS AND CONDITIONS -- -- How to Apply These Terms to Your New Libraries -- -- If you develop a new library, and you want it to be of the greatest --possible use to the public, we recommend making it free software that --everyone can redistribute and change. You can do so by permitting --redistribution under these terms (or, alternatively, under the terms of the --ordinary General Public License). -- -- To apply these terms, attach the following notices to the library. It is --safest to attach them to the start of each source file to most effectively --convey the exclusion of warranty; and each file should have at least the --"copyright" line and a pointer to where the full notice is found. -- -- -- Copyright (C) -- -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Lesser General Public -- License as published by the Free Software Foundation; either -- version 2.1 of the License, or (at your option) any later version. -- -- This library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Lesser General Public License for more details. -- -- You should have received a copy of the GNU Lesser General Public -- License along with this library; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- --Also add information on how to contact you by electronic and paper mail. -- --You should also get your employer (if you work as a programmer) or your --school, if any, to sign a "copyright disclaimer" for the library, if --necessary. Here is a sample; alter the names: -- -- Yoyodyne, Inc., hereby disclaims all copyright interest in the -- library `Frob' (a library for tweaking knobs) written by James Random Hacker. -- -- , 1 April 1990 -- Ty Coon, President of Vice -- --That's all there is to it! -diff -urNr keepassxc-2.6.4-orig/LICENSE.LGPL-3 keepassxc-2.6.4-patched/LICENSE.LGPL-3 ---- keepassxc-2.6.4-orig/LICENSE.LGPL-3 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.LGPL-3 1970-01-01 01:00:00.000000000 +0100 -@@ -1,165 +0,0 @@ -- GNU LESSER GENERAL PUBLIC LICENSE -- Version 3, 29 June 2007 -- -- Copyright (C) 2007 Free Software Foundation, Inc. -- Everyone is permitted to copy and distribute verbatim copies -- of this license document, but changing it is not allowed. -- -- -- This version of the GNU Lesser General Public License incorporates --the terms and conditions of version 3 of the GNU General Public --License, supplemented by the additional permissions listed below. -- -- 0. Additional Definitions. -- -- As used herein, "this License" refers to version 3 of the GNU Lesser --General Public License, and the "GNU GPL" refers to version 3 of the GNU --General Public License. -- -- "The Library" refers to a covered work governed by this License, --other than an Application or a Combined Work as defined below. -- -- An "Application" is any work that makes use of an interface provided --by the Library, but which is not otherwise based on the Library. --Defining a subclass of a class defined by the Library is deemed a mode --of using an interface provided by the Library. -- -- A "Combined Work" is a work produced by combining or linking an --Application with the Library. The particular version of the Library --with which the Combined Work was made is also called the "Linked --Version". -- -- The "Minimal Corresponding Source" for a Combined Work means the --Corresponding Source for the Combined Work, excluding any source code --for portions of the Combined Work that, considered in isolation, are --based on the Application, and not on the Linked Version. -- -- The "Corresponding Application Code" for a Combined Work means the --object code and/or source code for the Application, including any data --and utility programs needed for reproducing the Combined Work from the --Application, but excluding the System Libraries of the Combined Work. -- -- 1. Exception to Section 3 of the GNU GPL. -- -- You may convey a covered work under sections 3 and 4 of this License --without being bound by section 3 of the GNU GPL. -- -- 2. Conveying Modified Versions. -- -- If you modify a copy of the Library, and, in your modifications, a --facility refers to a function or data to be supplied by an Application --that uses the facility (other than as an argument passed when the --facility is invoked), then you may convey a copy of the modified --version: -- -- a) under this License, provided that you make a good faith effort to -- ensure that, in the event an Application does not supply the -- function or data, the facility still operates, and performs -- whatever part of its purpose remains meaningful, or -- -- b) under the GNU GPL, with none of the additional permissions of -- this License applicable to that copy. -- -- 3. Object Code Incorporating Material from Library Header Files. -- -- The object code form of an Application may incorporate material from --a header file that is part of the Library. You may convey such object --code under terms of your choice, provided that, if the incorporated --material is not limited to numerical parameters, data structure --layouts and accessors, or small macros, inline functions and templates --(ten or fewer lines in length), you do both of the following: -- -- a) Give prominent notice with each copy of the object code that the -- Library is used in it and that the Library and its use are -- covered by this License. -- -- b) Accompany the object code with a copy of the GNU GPL and this license -- document. -- -- 4. Combined Works. -- -- You may convey a Combined Work under terms of your choice that, --taken together, effectively do not restrict modification of the --portions of the Library contained in the Combined Work and reverse --engineering for debugging such modifications, if you also do each of --the following: -- -- a) Give prominent notice with each copy of the Combined Work that -- the Library is used in it and that the Library and its use are -- covered by this License. -- -- b) Accompany the Combined Work with a copy of the GNU GPL and this license -- document. -- -- c) For a Combined Work that displays copyright notices during -- execution, include the copyright notice for the Library among -- these notices, as well as a reference directing the user to the -- copies of the GNU GPL and this license document. -- -- d) Do one of the following: -- -- 0) Convey the Minimal Corresponding Source under the terms of this -- License, and the Corresponding Application Code in a form -- suitable for, and under terms that permit, the user to -- recombine or relink the Application with a modified version of -- the Linked Version to produce a modified Combined Work, in the -- manner specified by section 6 of the GNU GPL for conveying -- Corresponding Source. -- -- 1) Use a suitable shared library mechanism for linking with the -- Library. A suitable mechanism is one that (a) uses at run time -- a copy of the Library already present on the user's computer -- system, and (b) will operate properly with a modified version -- of the Library that is interface-compatible with the Linked -- Version. -- -- e) Provide Installation Information, but only if you would otherwise -- be required to provide such information under section 6 of the -- GNU GPL, and only to the extent that such information is -- necessary to install and execute a modified version of the -- Combined Work produced by recombining or relinking the -- Application with a modified version of the Linked Version. (If -- you use option 4d0, the Installation Information must accompany -- the Minimal Corresponding Source and Corresponding Application -- Code. If you use option 4d1, you must provide the Installation -- Information in the manner specified by section 6 of the GNU GPL -- for conveying Corresponding Source.) -- -- 5. Combined Libraries. -- -- You may place library facilities that are a work based on the --Library side by side in a single library together with other library --facilities that are not Applications and are not covered by this --License, and convey such a combined library under terms of your --choice, if you do both of the following: -- -- a) Accompany the combined library with a copy of the same work based -- on the Library, uncombined with any other library facilities, -- conveyed under the terms of this License. -- -- b) Give prominent notice with the combined library that part of it -- is a work based on the Library, and explaining where to find the -- accompanying uncombined form of the same work. -- -- 6. Revised Versions of the GNU Lesser General Public License. -- -- The Free Software Foundation may publish revised and/or new versions --of the GNU Lesser General Public License from time to time. Such new --versions will be similar in spirit to the present version, but may --differ in detail to address new problems or concerns. -- -- Each version is given a distinguishing version number. If the --Library as you received it specifies that a certain numbered version --of the GNU Lesser General Public License "or any later version" --applies to it, you have the option of following the terms and --conditions either of that published version or of any later version --published by the Free Software Foundation. If the Library as you --received it does not specify a version number of the GNU Lesser --General Public License, you may choose any version of the GNU Lesser --General Public License ever published by the Free Software Foundation. -- -- If the Library as you received it specifies that a proxy can decide --whether future versions of the GNU Lesser General Public License shall --apply, that proxy's public statement of acceptance of any version is --permanent authorization for you to choose that version for the --Library. -diff -urNr keepassxc-2.6.4-orig/LICENSE.MIT keepassxc-2.6.4-patched/LICENSE.MIT ---- keepassxc-2.6.4-orig/LICENSE.MIT 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.MIT 1970-01-01 01:00:00.000000000 +0100 -@@ -1,19 +0,0 @@ --The MIT License (MIT) -- --Permission is hereby granted, free of charge, to any person obtaining a copy --of this software and associated documentation files (the "Software"), to deal --in the Software without restriction, including without limitation the rights --to use, copy, modify, merge, publish, distribute, sublicense, and/or sell --copies of the Software, and to permit persons to whom the Software is --furnished to do so, subject to the following conditions: -- --The above copyright notice and this permission notice shall be included in all --copies or substantial portions of the Software. -- --THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE --AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, --OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE --SOFTWARE. -diff -urNr keepassxc-2.6.4-orig/LICENSE.NOKIA-LGPL-EXCEPTION keepassxc-2.6.4-patched/LICENSE.NOKIA-LGPL-EXCEPTION ---- keepassxc-2.6.4-orig/LICENSE.NOKIA-LGPL-EXCEPTION 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.NOKIA-LGPL-EXCEPTION 1970-01-01 01:00:00.000000000 +0100 -@@ -1,23 +0,0 @@ --Nokia Qt LGPL Exception version 1.1 -- --As an additional permission to the GNU Lesser General Public License --version 2.1, the object code form of a "work that uses the Library" --may incorporate material from a header file that is part of the --Library. You may distribute such object code under terms of your --choice, provided that: --(i) the header files of the Library have not been modified; and --(ii) the incorporated material is limited to numerical parameters, --data structure layouts, accessors, macros, inline functions and --templates; and --(iii) you comply with the terms of Section 6 of the GNU --Lesser General Public License version 2.1. -- --Moreover, you may apply this exception to a modified version of the --Library, provided that such modification does not involve copying --material from the Library into the modified Library?s header files --unless such material is limited to (i) numerical parameters; (ii) data --structure layouts; (iii) accessors; and (iv) small macros, templates --and inline functions of five lines or less in length. -- --Furthermore, you are not required to apply this additional permission --to a modified version of the Library. -diff -urNr keepassxc-2.6.4-orig/LICENSE.OFL keepassxc-2.6.4-patched/LICENSE.OFL ---- keepassxc-2.6.4-orig/LICENSE.OFL 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/LICENSE.OFL 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ --Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), --with Reserved Font Name Material Design Icons. --Copyright (c) 2014, Google (http://www.google.com/design/) --uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE -- --This Font Software is licensed under the SIL Open Font License, Version 1.1. --This license is copied below, and is also available with a FAQ at: --http://scripts.sil.org/OFL -- -- ------------------------------------------------------------- --SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------- -- --PREAMBLE --The goals of the Open Font License (OFL) are to stimulate worldwide --development of collaborative font projects, to support the font creation --efforts of academic and linguistic communities, and to provide a free and --open framework in which fonts may be shared and improved in partnership --with others. -- --The OFL allows the licensed fonts to be used, studied, modified and --redistributed freely as long as they are not sold by themselves. The --fonts, including any derivative works, can be bundled, embedded, --redistributed and/or sold with any software provided that any reserved --names are not used by derivative works. The fonts and derivatives, --however, cannot be released under any other type of license. The --requirement for fonts to remain under this license does not apply --to any document created using the fonts or their derivatives. -- --DEFINITIONS --"Font Software" refers to the set of files released by the Copyright --Holder(s) under this license and clearly marked as such. This may --include source files, build scripts and documentation. -- --"Reserved Font Name" refers to any names specified as such after the --copyright statement(s). -- --"Original Version" refers to the collection of Font Software components as --distributed by the Copyright Holder(s). -- --"Modified Version" refers to any derivative made by adding to, deleting, --or substituting -- in part or in whole -- any of the components of the --Original Version, by changing formats or by porting the Font Software to a --new environment. -- --"Author" refers to any designer, engineer, programmer, technical --writer or other person who contributed to the Font Software. -- --PERMISSION & CONDITIONS --Permission is hereby granted, free of charge, to any person obtaining --a copy of the Font Software, to use, study, copy, merge, embed, modify, --redistribute, and sell modified and unmodified copies of the Font --Software, subject to the following conditions: -- --1) Neither the Font Software nor any of its individual components, --in Original or Modified Versions, may be sold by itself. -- --2) Original or Modified Versions of the Font Software may be bundled, --redistributed and/or sold with any software, provided that each copy --contains the above copyright notice and this license. These can be --included either as stand-alone text files, human-readable headers or --in the appropriate machine-readable metadata fields within text or --binary files as long as those fields can be easily viewed by the user. -- --3) No Modified Version of the Font Software may use the Reserved Font --Name(s) unless explicit written permission is granted by the corresponding --Copyright Holder. This restriction only applies to the primary font name as --presented to the users. -- --4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font --Software shall not be used to promote, endorse or advertise any --Modified Version, except to acknowledge the contribution(s) of the --Copyright Holder(s) and the Author(s) or with their explicit written --permission. -- --5) The Font Software, modified or unmodified, in part or in whole, --must be distributed entirely under this license, and must not be --distributed under any other license. The requirement for fonts to --remain under this license does not apply to any document created --using the Font Software. -- --TERMINATION --This license becomes null and void if any of the above conditions are --not met. -- --DISCLAIMER --THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, --EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF --MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT --OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE --COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, --INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL --DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING --FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM --OTHER DEALINGS IN THE FONT SOFTWARE. -diff -urNr keepassxc-2.6.4-orig/README.md keepassxc-2.6.4-patched/README.md ---- keepassxc-2.6.4-orig/README.md 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/README.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,54 +0,0 @@ --# KeePassXC --[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1) --[![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc) --[![GitHub release](https://img.shields.io/github/release/keepassxreboot/keepassxc)](https://github.com/keepassxreboot/keepassxc/releases/) -- --[KeePassXC](https://keepassxc.org) is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases. -- --## Quick Start --The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html). -- --## Features List --KeePassXC has numerous features for novice and power users alike. Our goal is to create an application that can be used by anyone while still offering advanced features to those that need them. -- --### Basic --* Create, open, and save databases in the KDBX format (KeePass compatible to KDBX4 and KDBX3) --* Store sensitive information in entries that are organized by groups --* Search for entries --* Password generator --* Auto-Type passwords into applications --* Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser --* Entry icon download --* Import databases from CSV, 1Password, and KeePass1 formats -- --### Advanced --* Database reports (password health, HIBP, and statistics) --* Database export to CSV and HTML formats --* TOTP storage and generation --* Field references between entries --* File attachments and custom attributes --* Entry history and data restoration --* YubiKey/OnlyKey challenge-response support --* Command line interface (keepassxc-cli) --* Auto-Open databases --* KeeShare shared databases (import, export, and synchronize) --* SSH Agent --* FreeDesktop.org Secret Service (replace Gnome keyring, etc.) --* Additional encryption choices: Twofish and ChaCha20 -- --For a full list of changes, read the [CHANGELOG](CHANGELOG.md) document. \ --For a full list of keyboard shortcuts, see [KeyboardShortcuts.adoc](./docs/topics/KeyboardShortcuts.adoc) -- --## Building KeePassXC -- --Detailed instructions are available in the [Build and Install](./INSTALL.md) page and in the [Wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC). -- --## Contributing -- --We are always looking for suggestions on how to improve KeePassXC. If you find any bugs or have an idea for a new feature, please let us know by opening a report in the [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or join us on IRC in [freenode](https://webchat.freenode.net/) channels #keepassxc and #keepassxc-dev. -- --You may directly contribute your own code by submitting a pull request. Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information. -- --## License -- --KeePassXC code is licensed under GPL-2 or GPL-3. Additional licensing for third-party files is detailed in [COPYING](./COPYING). -diff -urNr keepassxc-2.6.4-orig/release-tool keepassxc-2.6.4-patched/release-tool ---- keepassxc-2.6.4-orig/release-tool 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/release-tool 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1349 +0,0 @@ --#!/usr/bin/env bash --# --# KeePassXC Release Preparation Helper --# Copyright (C) 2017 KeePassXC team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --printf "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper\n" --printf "Copyright (C) 2017 KeePassXC Team \n\n" -- -- --# ----------------------------------------------------------------------- --# global default values --# ----------------------------------------------------------------------- --RELEASE_NAME="" --APP_NAME="KeePassXC" --SRC_DIR="." --GPG_KEY="CFB4C2166397D0D2" --GPG_GIT_KEY="" --OUTPUT_DIR="release" --SOURCE_BRANCH="" --TARGET_BRANCH="master" --TAG_NAME="" --DOCKER_IMAGE="" --DOCKER_CONTAINER_NAME="keepassxc-build-container" --CMAKE_OPTIONS="" --CPACK_GENERATORS="WIX;ZIP" --COMPILER="g++" --MAKE_OPTIONS="-j8" --BUILD_PLUGINS="all" --INSTALL_PREFIX="/usr/local" --ORIG_BRANCH="" --ORIG_CWD="$(pwd)" --MACOSX_DEPLOYMENT_TARGET=10.12 --GREP="grep" --TIMESTAMP_SERVER="http://timestamp.sectigo.com" -- --# ----------------------------------------------------------------------- --# helper functions --# ----------------------------------------------------------------------- --printUsage() { -- local cmd -- if [ "" == "$1" ] || [ "help" == "$1" ]; then -- cmd="COMMAND" -- elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] \ -- || [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ] || [ "appimage" == "$1" ]; then -- cmd="$1" -- else -- logError "Unknown command: '$1'\n" -- cmd="COMMAND" -- fi -- -- printf "\e[1mUsage:\e[0m $(basename $0) $cmd [options]\n" -- -- if [ "COMMAND" == "$cmd" ]; then -- cat << EOF -- --Commands: -- check Perform a dry-run check, nothing is changed -- merge Merge release branch into main branch and create release tags -- build Build and package binary release from sources -- gpgsign Sign previously compiled release packages with GPG -- appsign Sign binaries with code signing certificates on Windows and macOS -- help Show help for the given command --EOF -- elif [ "merge" == "$cmd" ]; then -- cat << EOF -- --Merge release branch into main branch and create release tags -- --Options: -- -v, --version Release version number or name (required) -- -a, --app-name Application name (default: '${APP_NAME}') -- -s, --source-dir Source directory (default: '${SRC_DIR}') -- -k, --key GPG key used to sign the merge commit and release tag, -- leave empty to let Git choose your default key -- (default: '${GPG_GIT_KEY}') -- -r, --release-branch Source release branch to merge from (default: 'release/VERSION') -- --target-branch Target branch to merge to (default: '${TARGET_BRANCH}') -- -t, --tag-name Override release tag name (defaults to version number) -- -h, --help Show this help --EOF -- elif [ "build" == "$cmd" ]; then -- cat << EOF -- --Build and package binary release from sources -- --Options: -- -v, --version Release version number or name (required) -- -a, --app-name Application name (default: '${APP_NAME}') -- -s, --source-dir Source directory (default: '${SRC_DIR}') -- -o, --output-dir Output directory where to build the release -- (default: '${OUTPUT_DIR}') -- -t, --tag-name Release tag to check out (defaults to version number) -- -b, --build Build sources after exporting release -- -d, --docker-image Use the specified Docker image to compile the application. -- The image must have all required build dependencies installed. -- This option has no effect if --build is not set. -- --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') -- The container must not exist already -- --snapcraft Create and use docker image to build snapcraft distribution. -- This option has no effect if --docker-image is not set. -- --appimage Build a Linux AppImage after compilation. -- If this option is set, --install-prefix has no effect -- --appsign Perform platform specific App Signing before packaging -- --timestamp Explicitly set the timestamp server to use for appsign (default: '${TIMESTAMP_SERVER}') -- -k, --key Specify the App Signing Key/Identity -- -c, --cmake-options Additional CMake options for compiling the sources -- --compiler Compiler to use (default: '${COMPILER}') -- -m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}') -- -g, --generators Additional CPack generators (default: '${CPACK_GENERATORS}') -- -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}') -- -p, --plugins Space-separated list of plugins to build -- (default: ${BUILD_PLUGINS}) -- --snapshot Don't checkout the release tag -- -n, --no-source-tarball Don't build source tarball -- -h, --help Show this help --EOF -- elif [ "gpgsign" == "$cmd" ]; then -- cat << EOF -- --Sign previously compiled release packages with GPG -- --Options: -- -f, --files Files to sign (required) -- -k, --key GPG key used to sign the files (default: '${GPG_KEY}') -- -h, --help Show this help --EOF -- elif [ "appsign" == "$cmd" ]; then -- cat << EOF -- --Sign binaries with code signing certificates on Windows and macOS -- --Options: -- -f, --files Files to sign (required) -- -k, --key, -i, --identity -- Signing Key or Apple Developer ID (required) -- --timestamp Explicitly set the timestamp server to use for appsign (default: '${TIMESTAMP_SERVER}') -- -u, --username Apple username for notarization (required on macOS) -- -c, --keychain Apple keychain entry name storing the notarization -- app password (default: 'AC_PASSWORD') -- -h, --help Show this help --EOF -- elif [ "appimage" == "$cmd" ]; then -- cat << EOF -- --Generate Linux AppImage from 'make install' AppDir -- --Options: -- -a, --appdir Input AppDir (required) -- -v, --version KeePassXC version -- -o, --output-dir Output directory where to build the AppImage -- (default: '${OUTPUT_DIR}') -- -d, --docker-image Use the specified Docker image to build the AppImage. -- The image must have all required build dependencies installed. -- --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') -- The container must not exist already -- --appsign Embed a PGP signature into the AppImage -- -k, --key The PGP Signing Key -- --verbosity linuxdeploy verbosity (default: 3) -- -h, --help Show this help --EOF -- fi --} -- --logInfo() { -- printf "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1\n" --} -- --logWarn() { -- printf "\e[1m[ \e[33mWARNING\e[39m ]\e[0m $1\n" --} -- --logError() { -- printf "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1\n" >&2 --} -- --init() { -- if [ "" == "$RELEASE_NAME" ]; then -- logError "Missing arguments, --version is required!\n" -- printUsage "check" -- exit 1 -- fi -- -- if [ "" == "$TAG_NAME" ]; then -- TAG_NAME="$RELEASE_NAME" -- fi -- -- if [ "" == "$SOURCE_BRANCH" ]; then -- SOURCE_BRANCH="release/${RELEASE_NAME}" -- fi -- -- ORIG_CWD="$(pwd)" -- SRC_DIR="$(realpath "$SRC_DIR")" -- cd "$SRC_DIR" > /dev/null 2>&1 -- ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" -- cd "$ORIG_CWD" --} -- --cleanup() { -- logInfo "Checking out original branch..." -- if [ "" != "$ORIG_BRANCH" ]; then -- git checkout "$ORIG_BRANCH" > /dev/null 2>&1 -- fi -- logInfo "Leaving source directory..." -- cd "$ORIG_CWD" --} -- --exitError() { -- logError "$1" -- cleanup -- exit 1 --} -- --exitTrap() { -- exitError "Existing upon user request..." --} -- --cmdExists() { -- command -v "$1" &> /dev/null --} -- --checkGrepCompat() { -- if ! grep -qPzo test <(echo test) 2> /dev/null; then -- if [ -e /usr/local/opt/grep/libexec/gnubin/grep ]; then -- GREP="/usr/local/opt/grep/libexec/gnubin/grep" -- else -- exitError "Incompatible grep implementation! If on macOS, please run 'brew install grep'." -- fi -- fi --} -- --checkSourceDirExists() { -- if [ ! -d "$SRC_DIR" ]; then -- exitError "Source directory '${SRC_DIR}' does not exist!" -- fi --} -- --checkOutputDirDoesNotExist() { -- if [ -e "$OUTPUT_DIR" ]; then -- exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!" -- fi --} -- --checkGitRepository() { -- if [ ! -d .git ] || [ ! -f CHANGELOG.md ]; then -- exitError "Source directory is not a valid Git repository!" -- fi --} -- --checkReleaseDoesNotExist() { -- git tag | $GREP -q "^$TAG_NAME$" -- if [ $? -eq 0 ]; then -- exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!" -- fi --} -- --checkWorkingTreeClean() { -- git diff-index --quiet HEAD -- -- if [ $? -ne 0 ]; then -- exitError "Current working tree is not clean! Please commit or unstage any changes." -- fi --} -- --checkSourceBranchExists() { -- git rev-parse "$SOURCE_BRANCH" > /dev/null 2>&1 -- if [ $? -ne 0 ]; then -- exitError "Source branch '$SOURCE_BRANCH' does not exist!" -- fi --} -- --checkTargetBranchExists() { -- git rev-parse "$TARGET_BRANCH" > /dev/null 2>&1 -- if [ $? -ne 0 ]; then -- exitError "Target branch '$TARGET_BRANCH' does not exist!" -- fi --} -- --checkVersionInCMake() { -- local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')" -- local major_num="$(echo ${RELEASE_NAME} | cut -f1 -d.)" -- local minor_num="$(echo ${RELEASE_NAME} | cut -f2 -d.)" -- local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d. | cut -f1 -d-)" -- -- $GREP -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt -- if [ $? -ne 0 ]; then -- exitError "${app_name_upper}_VERSION_MAJOR not updated to '${major_num}' in CMakeLists.txt!" -- fi -- -- $GREP -q "${app_name_upper}_VERSION_MINOR \"${minor_num}\"" CMakeLists.txt -- if [ $? -ne 0 ]; then -- exitError "${app_name_upper}_VERSION_MINOR not updated to '${minor_num}' in CMakeLists.txt!" -- fi -- -- $GREP -q "${app_name_upper}_VERSION_PATCH \"${patch_num}\"" CMakeLists.txt -- if [ $? -ne 0 ]; then -- exitError "${app_name_upper}_VERSION_PATCH not updated to '${patch_num}' in CMakeLists.txt!" -- fi --} -- --checkChangeLog() { -- if [ ! -f CHANGELOG.md ]; then -- exitError "No CHANGELOG file found!" -- fi -- -- $GREP -qPzo "## ${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n" CHANGELOG.md -- if [ $? -ne 0 ]; then -- exitError "'CHANGELOG.md' has not been updated to the '${RELEASE_NAME}' release!" -- fi --} -- --checkAppStreamInfo() { -- if [ ! -f share/linux/org.keepassxc.KeePassXC.appdata.xml ]; then -- exitError "No AppStream info file found!" -- fi -- -- $GREP -qPzo "" share/linux/org.keepassxc.KeePassXC.appdata.xml -- if [ $? -ne 0 ]; then -- exitError "'share/linux/org.keepassxc.KeePassXC.appdata.xml' has not been updated to the '${RELEASE_NAME}' release!" -- fi --} -- --checkSnapcraft() { -- if [ ! -f snap/snapcraft.yaml ]; then -- echo "Could not find snap/snapcraft.yaml!" -- return -- fi -- -- $GREP -qPzo "version: ${RELEASE_NAME}" snap/snapcraft.yaml -- if [ $? -ne 0 ]; then -- exitError "'snapcraft.yaml' has not been updated to the '${RELEASE_NAME}' release!" -- fi -- -- $GREP -qPzo "KEEPASSXC_BUILD_TYPE=Release" snap/snapcraft.yaml -- if [ $? -ne 0 ]; then -- exitError "'snapcraft.yaml' is not set for a release build!" -- fi --} -- --checkTransifexCommandExists() { -- if ! cmdExists tx; then -- exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." -- fi --} -- --checkSigntoolCommandExists() { -- if ! cmdExists signtool; then -- exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH." -- fi --} -- --checkXcodeSetup() { -- if ! cmdExists xcrun; then -- exitError "xcrun command not found on the PATH! Please check that you have correctly installed Xcode." -- fi -- if ! xcrun -f codesign > /dev/null 2>&1; then -- exitError "codesign command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." -- fi -- if ! xcrun -f altool > /dev/null 2>&1; then -- exitError "altool command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." -- fi -- if ! xcrun -f stapler > /dev/null 2>&1; then -- exitError "stapler command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." -- fi --} -- --checkQt5LUpdateExists() { -- if cmdExists lupdate && ! $(lupdate -version | $GREP -q "lupdate version 5\."); then -- if ! cmdExists lupdate-qt5; then -- exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'" -- fi -- fi --} -- --performChecks() { -- logInfo "Performing basic checks..." -- -- checkGrepCompat -- -- checkSourceDirExists -- -- logInfo "Changing to source directory..." -- cd "${SRC_DIR}" -- -- logInfo "Validating toolset and repository..." -- -- checkTransifexCommandExists -- checkQt5LUpdateExists -- checkGitRepository -- checkReleaseDoesNotExist -- checkWorkingTreeClean -- checkSourceBranchExists -- checkTargetBranchExists -- -- logInfo "Checking out '${SOURCE_BRANCH}'..." -- git checkout "$SOURCE_BRANCH" -- -- logInfo "Attempting to find '${RELEASE_NAME}' in various files..." -- -- checkVersionInCMake -- checkChangeLog -- checkAppStreamInfo -- checkSnapcraft -- -- logInfo "\e[1m\e[32mAll checks passed!\e[0m" --} -- --# re-implement realpath for OS X (thanks mschrag) --# https://superuser.com/questions/205127/ --if ! cmdExists realpath; then -- realpath() { -- pushd . > /dev/null -- if [ -d "$1" ]; then -- cd "$1" -- dirs -l +0 -- else -- cd "$(dirname "$1")" -- cur_dir=$(dirs -l +0) -- -- if [ "$cur_dir" == "/" ]; then -- echo "$cur_dir$(basename "$1")" -- else -- echo "$cur_dir/$(basename "$1")" -- fi -- fi -- popd > /dev/null -- } --fi -- -- --trap exitTrap SIGINT SIGTERM -- --# ----------------------------------------------------------------------- --# check command --# ----------------------------------------------------------------------- --check() { -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -v|--version) -- RELEASE_NAME="$2" -- shift ;; -- esac -- shift -- done -- -- init -- -- performChecks -- -- cleanup -- -- logInfo "Congrats! You can successfully merge, build, and sign KeepassXC." --} -- --# ----------------------------------------------------------------------- --# merge command --# ----------------------------------------------------------------------- --merge() { -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -v|--version) -- RELEASE_NAME="$2" -- shift ;; -- -- -a|--app-name) -- APP_NAME="$2" -- shift ;; -- -- -s|--source-dir) -- SRC_DIR="$2" -- shift ;; -- -- -k|--key|-g|--gpg-key) -- GPG_GIT_KEY="$2" -- shift ;; -- -- --timestamp) -- TIMESTAMP_SERVER="$2" -- shift ;; -- -- -r|--release-branch) -- SOURCE_BRANCH="$2" -- shift ;; -- -- --target-branch) -- TARGET_BRANCH="$2" -- shift ;; -- -- -t|--tag-name) -- TAG_NAME="$2" -- shift ;; -- -- -h|--help) -- printUsage "merge" -- exit ;; -- -- *) -- logError "Unknown option '$arg'\n" -- printUsage "merge" -- exit 1 ;; -- esac -- shift -- done -- -- init -- -- performChecks -- -- logInfo "Updating language files..." -- ./share/translations/update.sh update -- ./share/translations/update.sh pull -- if [ 0 -ne $? ]; then -- exitError "Updating translations failed!" -- fi -- git diff-index --quiet HEAD -- -- if [ $? -ne 0 ]; then -- git add -A ./share/translations/ -- logInfo "Committing changes..." -- if [ "" == "$GPG_GIT_KEY" ]; then -- git commit -m "Update translations" -- else -- git commit -m "Update translations" -S"$GPG_GIT_KEY" -- fi -- fi -- -- CHANGELOG=$($GREP -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n\n)\n?(?:.|\n)+?\n(?=## )" CHANGELOG.md \ -- | sed 's/^### //' | tr -d \\0) -- COMMIT_MSG="Release ${RELEASE_NAME}" -- -- logInfo "Checking out target branch '${TARGET_BRANCH}'..." -- git checkout "$TARGET_BRANCH" -- -- logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..." -- -- git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY" -- -- logInfo "Creating tag '${TAG_NAME}'..." -- if [ "" == "$GPG_GIT_KEY" ]; then -- git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -- else -- git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY" -- fi -- -- cleanup -- -- logInfo "All done!" -- logInfo "Please merge the release branch back into the develop branch now and then push your changes." -- logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m." --} -- --# ----------------------------------------------------------------------- --# appimage command --# ----------------------------------------------------------------------- --appimage() { -- local appdir -- local build_appsign=false -- local build_key -- local verbosity="1" -- -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -v|--version) -- RELEASE_NAME="$2" -- shift ;; -- -- -a|--appdir) -- appdir="$2" -- shift ;; -- -- -o|--output-dir) -- OUTPUT_DIR="$2" -- shift ;; -- -- -d|--docker-image) -- DOCKER_IMAGE="$2" -- shift ;; -- -- --container-name) -- DOCKER_CONTAINER_NAME="$2" -- shift ;; -- -- --appsign) -- build_appsign=true ;; -- -- --verbosity) -- verbosity=$2 -- shift ;; -- -- -k|--key) -- build_key="$2" -- shift ;; -- -- -h|--help) -- printUsage "appimage" -- exit ;; -- -- *) -- logError "Unknown option '$arg'\n" -- printUsage "appimage" -- exit 1 ;; -- esac -- shift -- done -- -- if [ -z "${appdir}" ]; then -- logError "Missing arguments, --appdir is required!\n" -- printUsage "appimage" -- exit 1 -- fi -- -- if [ ! -d "${appdir}" ]; then -- exitError "AppDir does not exist, please create one with 'make install'!" -- elif [ -e "${appdir}/AppRun" ]; then -- exitError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'." -- fi -- -- appdir="$(realpath "$appdir")" -- -- local out="${OUTPUT_DIR}" -- if [ "" == "$out" ]; then -- out="." -- fi -- mkdir -p "$out" -- local out_real="$(realpath "$out")" -- cd "$out" -- -- local linuxdeploy="linuxdeploy" -- local linuxdeploy_cleanup -- local linuxdeploy_plugin_qt="linuxdeploy-plugin-qt" -- local linuxdeploy_plugin_qt_cleanup -- local appimagetool="appimagetool" -- local appimagetool_cleanup -- -- logInfo "Testing for AppImage tools..." -- local docker_test_cmd -- if [ "" != "$DOCKER_IMAGE" ]; then -- docker_test_cmd="docker run --rm ${DOCKER_IMAGE}" -- fi -- -- # Test if linuxdeploy and linuxdeploy-plugin-qt are installed -- # on the system or inside the Docker container -- if ! ${docker_test_cmd} which ${linuxdeploy} &> /dev/null; then -- logInfo "Downloading linuxdeploy..." -- linuxdeploy="./linuxdeploy" -- linuxdeploy_cleanup="rm -f ${linuxdeploy}" -- if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy"; then -- exitError "linuxdeploy download failed." -- fi -- chmod +x "$linuxdeploy" -- fi -- if ! ${docker_test_cmd} which ${linuxdeploy_plugin_qt} &> /dev/null; then -- logInfo "Downloading linuxdeploy-plugin-qt..." -- linuxdeploy_plugin_qt="./linuxdeploy-plugin-qt" -- linuxdeploy_plugin_qt_cleanup="rm -f ${linuxdeploy_plugin_qt}" -- if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt"; then -- exitError "linuxdeploy-plugin-qt download failed." -- fi -- chmod +x "$linuxdeploy_plugin_qt" -- fi -- -- # appimagetool is always run outside a Docker container, so we can access our GPG keys -- if ! cmdExists ${appimagetool}; then -- logInfo "Downloading appimagetool..." -- appimagetool="./appimagetool" -- appimagetool_cleanup="rm -f ${appimagetool}" -- if ! curl -Lf "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool"; then -- exitError "appimagetool download failed." -- fi -- chmod +x "$appimagetool" -- fi -- -- # Create custom AppRun wrapper -- cat << EOF > "${out_real}/KeePassXC-AppRun" --#!/usr/bin/env bash -- --export PATH="\$(dirname \$0)/usr/bin:\${PATH}" --export LD_LIBRARY_PATH="\$(dirname \$0)/usr/lib:\${LD_LIBRARY_PATH}" -- --if [ "\${1}" == "cli" ]; then -- shift -- exec keepassxc-cli "\$@" --elif [ "\${1}" == "proxy" ]; then -- shift -- exec keepassxc-proxy "\$@" --elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then -- exec keepassxc-proxy "\$@" --else -- exec keepassxc "\$@" --fi --EOF -- chmod +x "${out_real}/KeePassXC-AppRun" -- -- # Find .desktop files, icons, and binaries to deploy -- local desktop_file="$(find "$appdir" -name "org.keepassxc.KeePassXC.desktop" | head -n1)" -- local icon="$(find "$appdir" -name 'keepassxc.png' | $GREP -P 'application/256x256/apps/keepassxc.png$' | head -n1)" -- local executables="$(IFS=$'\n' find "$appdir" | $GREP -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")" -- -- logInfo "Collecting libs and patching binaries..." -- if [ "" == "$DOCKER_IMAGE" ]; then -- "$linuxdeploy" --verbosity=${verbosity} --plugin=qt --appdir="$appdir" --desktop-file="$desktop_file" \ -- --custom-apprun="${out_real}/KeePassXC-AppRun" --icon-file="$icon" ${executables} \ -- --library=$(ldconfig -p | $GREP x86-64 | $GREP -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1) -- else -- desktop_file="${desktop_file//${appdir}/\/keepassxc\/AppDir}" -- icon="${icon//${appdir}/\/keepassxc\/AppDir}" -- executables="${executables//${appdir}/\/keepassxc\/AppDir}" -- -- docker run --name "$DOCKER_CONTAINER_NAME" --rm \ -- --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ -- -v "${appdir}:/keepassxc/AppDir:rw" \ -- -v "${out_real}:/keepassxc/out:rw" \ -- "$DOCKER_IMAGE" \ -- bash -c "cd /keepassxc/out && ${linuxdeploy} --verbosity=${verbosity} --plugin=qt --appdir=/keepassxc/AppDir \ -- --custom-apprun="/keepassxc/out/KeePassXC-AppRun" --desktop-file=${desktop_file} --icon-file=${icon} ${executables} \ -- --library=\$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)" -- fi -- -- if [ $? -ne 0 ]; then -- exitError "AppDir deployment failed." -- fi -- -- logInfo "Creating AppImage..." -- local appsign_flag="" -- local appsign_key_flag="" -- if ${build_appsign}; then -- appsign_flag="--sign" -- appsign_key_flag="--sign-key ${build_key}" -- fi -- local appimage_name="KeePassXC-x86_64.AppImage" -- if [ "" != "$RELEASE_NAME" ]; then -- appimage_name="KeePassXC-${RELEASE_NAME}-x86_64.AppImage" -- echo "X-AppImage-Version=${RELEASE_NAME}" >> "$desktop_file" -- fi -- -- # Run appimagetool to package (and possibly sign) AppImage -- # --no-appstream is required, since it may crash on newer systems -- # see: https://github.com/AppImage/AppImageKit/issues/856 -- if ! "$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \ -- ${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}"; then -- exitError "AppImage creation failed." -- fi -- -- logInfo "Cleaning up temporary files..." -- ${linuxdeploy_cleanup} -- ${linuxdeploy_plugin_qt_cleanup} -- ${appimagetool_cleanup} -- rm -f "${out_real}/KeePassXC-AppRun" --} -- --# ----------------------------------------------------------------------- --# build command --# ----------------------------------------------------------------------- --build() { -- local build_source_tarball=true -- local build_snapshot=false -- local build_snapcraft=false -- local build_appimage=false -- local build_generators="" -- local build_appsign=false -- local build_key="" -- -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -v|--version) -- RELEASE_NAME="$2" -- shift ;; -- -- -a|--app-name) -- APP_NAME="$2" -- shift ;; -- -- -s|--source-dir) -- SRC_DIR="$2" -- shift ;; -- -- -o|--output-dir) -- OUTPUT_DIR="$2" -- shift ;; -- -- -t|--tag-name) -- TAG_NAME="$2" -- shift ;; -- -- -d|--docker-image) -- DOCKER_IMAGE="$2" -- shift ;; -- -- --container-name) -- DOCKER_CONTAINER_NAME="$2" -- shift ;; -- -- --appsign) -- build_appsign=true ;; -- -- --timestamp) -- TIMESTAMP_SERVER="$2" -- shift ;; -- -- -k|--key) -- build_key="$2" -- shift ;; -- -- --snapcraft) -- build_snapcraft=true ;; -- -- --appimage) -- build_appimage=true ;; -- -- -c|--cmake-options) -- CMAKE_OPTIONS="$2" -- shift ;; -- -- --compiler) -- COMPILER="$2" -- shift ;; -- -- -m|--make-options) -- MAKE_OPTIONS="$2" -- shift ;; -- -- -g|--generators) -- build_generators="$2" -- shift ;; -- -- -i|--install-prefix) -- INSTALL_PREFIX="$2" -- shift ;; -- -- -p|--plugins) -- BUILD_PLUGINS="$2" -- shift ;; -- -- -n|--no-source-tarball) -- build_source_tarball=false ;; -- -- --snapshot) -- build_snapshot=true ;; -- -- -h|--help) -- printUsage "build" -- exit ;; -- -- *) -- logError "Unknown option '$arg'\n" -- printUsage "build" -- exit 1 ;; -- esac -- shift -- done -- -- init -- -- OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" -- # Resolve appsign key to absolute path if under Windows -- if [[ "${build_key}" && "$(uname -o)" == "Msys" ]]; then -- build_key="$(realpath "${build_key}")" -- fi -- -- if ${build_snapshot}; then -- TAG_NAME="HEAD" -- local branch=`git rev-parse --abbrev-ref HEAD` -- logInfo "Using current branch ${branch} to build..." -- RELEASE_NAME="${RELEASE_NAME}-snapshot" -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot -DOVERRIDE_VERSION=${RELEASE_NAME}" -- else -- checkGrepCompat -- checkWorkingTreeClean -- -- if $(echo "$TAG_NAME" | $GREP -qP "\-(alpha|beta)\\d+\$"); then -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=PreRelease" -- logInfo "Checking out pre-release tag '${TAG_NAME}'..." -- else -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Release" -- logInfo "Checking out release tag '${TAG_NAME}'..." -- fi -- git checkout "$TAG_NAME" -- fi -- -- logInfo "Creating output directory..." -- mkdir -p "$OUTPUT_DIR" -- -- if [ $? -ne 0 ]; then -- exitError "Failed to create output directory!" -- fi -- -- if ${build_source_tarball}; then -- logInfo "Creating source tarball..." -- local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')" -- local prefix="${app_name_lower}-${RELEASE_NAME}" -- local tarball_name="${prefix}-src.tar" -- -- git archive --format=tar "$TAG_NAME" --prefix="${prefix}/" --output="${OUTPUT_DIR}/${tarball_name}" -- -- # add .version and .gitrev files to tarball -- mkdir "${prefix}" -- echo -n ${RELEASE_NAME} > "${prefix}/.version" -- echo -n `git rev-parse --short=7 HEAD` > "${prefix}/.gitrev" -- tar --append --file="${OUTPUT_DIR}/${tarball_name}" "${prefix}/.version" "${prefix}/.gitrev" -- rm "${prefix}/.version" "${prefix}/.gitrev" -- rmdir "${prefix}" 2> /dev/null -- -- local xz="xz" -- if ! cmdExists xz; then -- logWarn "xz not installed. Falling back to bz2..." -- xz="bzip2" -- fi -- $xz -6 "${OUTPUT_DIR}/${tarball_name}" -- fi -- -- if ! ${build_snapshot} && [ -e "${OUTPUT_DIR}/build-release" ]; then -- logInfo "Cleaning existing build directory..." -- rm -rf "${OUTPUT_DIR}/build-release" 2> /dev/null -- if [ $? -ne 0 ]; then -- exitError "Failed to clean existing build directory, please do it manually." -- fi -- fi -- -- logInfo "Creating build directory..." -- mkdir -p "${OUTPUT_DIR}/build-release" -- cd "${OUTPUT_DIR}/build-release" -- -- logInfo "Configuring sources..." -- for p in ${BUILD_PLUGINS}; do -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On" -- done -- if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_DIST_TYPE=AppImage" -- # linuxdeploy requires /usr as install prefix -- INSTALL_PREFIX="/usr" -- fi -- # Do not build tests cases -- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_TESTS=OFF" -- -- if [ "$COMPILER" == "g++" ]; then -- export CC=gcc -- elif [ "$COMPILER" == "clang++" ]; then -- export CC=clang -- fi -- export CXX="$COMPILER" -- -- if [ "" == "$DOCKER_IMAGE" ]; then -- if [ "$(uname -s)" == "Darwin" ]; then -- # Building on macOS -- export MACOSX_DEPLOYMENT_TARGET -- -- logInfo "Configuring build..." -- cmake -DCMAKE_BUILD_TYPE=Release \ -- -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ -- -DCMAKE_PREFIX_PATH="/usr/local/opt/qt/lib/cmake" \ -- ${CMAKE_OPTIONS} "$SRC_DIR" -- -- logInfo "Compiling and packaging sources..." -- make ${MAKE_OPTIONS} package -- -- # Appsign the executables if desired -- if ${build_appsign}; then -- logInfo "Signing executable files" -- appsign "-f" "./${APP_NAME}-${RELEASE_NAME}.dmg" "-k" "${build_key}" -- fi -- -- mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../ -- elif [ "$(uname -o)" == "Msys" ]; then -- # Building on Windows with Msys2 -- logInfo "Configuring build..." -- cmake -DCMAKE_BUILD_TYPE=Release -G"MSYS Makefiles" \ -- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ${CMAKE_OPTIONS} "$SRC_DIR" -- -- logInfo "Compiling and packaging sources..." -- mingw32-make ${MAKE_OPTIONS} preinstall -- -- # Appsign the executables if desired -- if ${build_appsign} && [ -f "${build_key}" ]; then -- logInfo "Signing executable files" -- appsign "-f" $(find src | $GREP -P '\.exe$|\.dll$') "-k" "${build_key}" -- fi -- -- # Call cpack directly instead of calling make package. -- # This is important because we want to build the MSI when making a -- # release. -- cpack -G "${CPACK_GENERATORS};${build_generators}" -- -- # Inject the portable config into the zip build and rename -- touch .portable -- for filename in ${APP_NAME}-*.zip; do -- logInfo "Creating portable zip file" -- local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/') -- python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \ -- ${filename} .portable ${folder}/.portable -- mv ${filename} ${folder}-portable.zip -- done -- rm .portable -- -- mv "${APP_NAME}-"*.* ../ -- else -- mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" -- -- # Building on Linux without Docker container -- logInfo "Configuring build..." -- cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \ -- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR" -- -- logInfo "Compiling sources..." -- make ${MAKE_OPTIONS} -- -- logInfo "Installing to bin dir..." -- make DESTDIR="${OUTPUT_DIR}/KeePassXC.AppDir" install/strip -- fi -- else -- if ${build_snapcraft}; then -- logInfo "Building snapcraft docker image..." -- -- sudo docker image build -t "$DOCKER_IMAGE" "$(realpath "$SRC_DIR")/ci/snapcraft" -- -- logInfo "Launching Docker contain to compile snapcraft..." -- -- sudo docker run --name "$DOCKER_CONTAINER_NAME" --rm \ -- -v "$(realpath "$SRC_DIR"):/keepassxc" -w "/keepassxc" \ -- "$DOCKER_IMAGE" snapcraft -- else -- mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" -- -- logInfo "Launching Docker container to compile sources..." -- -- docker run --name "$DOCKER_CONTAINER_NAME" --rm \ -- --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ -- -e "CC=${CC}" -e "CXX=${CXX}" \ -- -v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \ -- -v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \ -- "$DOCKER_IMAGE" \ -- bash -c "cd /keepassxc/out/build-release && \ -- cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \ -- -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} /keepassxc/src && \ -- make ${MAKE_OPTIONS} && make DESTDIR=/keepassxc/out/KeePassXC.AppDir install/strip" -- fi -- -- if [ 0 -ne $? ]; then -- exitError "Docker build failed!" -- fi -- -- logInfo "Build finished, Docker container terminated." -- fi -- -- if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then -- local appsign_flag="" -- local appsign_key_flag="" -- local docker_image_flag="" -- local docker_container_name_flag="" -- if ${build_appsign}; then -- appsign_flag="--appsign" -- appsign_key_flag="-k ${build_key}" -- fi -- if [ "" != "${DOCKER_IMAGE}" ]; then -- docker_image_flag="-d ${DOCKER_IMAGE}" -- docker_container_name_flag="--container-name ${DOCKER_CONTAINER_NAME}" -- fi -- appimage "-a" "${OUTPUT_DIR}/KeePassXC.AppDir" "-o" "${OUTPUT_DIR}" \ -- ${appsign_flag} ${appsign_key_flag} ${docker_image_flag} ${docker_container_name_flag} -- fi -- -- cleanup -- -- logInfo "All done!" --} -- --# ----------------------------------------------------------------------- --# gpgsign command --# ----------------------------------------------------------------------- --gpgsign() { -- local sign_files=() -- -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -f|--files) -- while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do -- sign_files+=("$2") -- shift -- done ;; -- -- -k|--key|-g|--gpg-key) -- GPG_KEY="$2" -- shift ;; -- -- -h|--help) -- printUsage "gpgsign" -- exit ;; -- -- *) -- logError "Unknown option '$arg'\n" -- printUsage "gpgsign" -- exit 1 ;; -- esac -- shift -- done -- -- if [ -z "${sign_files}" ]; then -- logError "Missing arguments, --files is required!\n" -- printUsage "gpgsign" -- exit 1 -- fi -- -- for f in "${sign_files[@]}"; do -- if [ ! -f "$f" ]; then -- exitError "File '${f}' does not exist or is not a file!" -- fi -- -- logInfo "Signing file '${f}' using release key..." -- gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f" -- -- if [ 0 -ne $? ]; then -- exitError "Signing failed!" -- fi -- -- logInfo "Creating digest for file '${f}'..." -- local rp="$(realpath "$f")" -- local bname="$(basename "$f")" -- (cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST") -- done -- -- logInfo "All done!" --} -- --# ----------------------------------------------------------------------- --# appsign command --# ----------------------------------------------------------------------- --appsign() { -- local sign_files=() -- local key -- local ac_username -- local ac_keychain="AC_PASSWORD" -- -- while [ $# -ge 1 ]; do -- local arg="$1" -- case "$arg" in -- -f|--files) -- while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do -- sign_files+=("$2") -- shift -- done ;; -- -- -k|--key|-i|--identity) -- key="$2" -- shift ;; -- -- -u|--username) -- ac_username="$2" -- shift ;; -- -- -c|--keychain) -- ac_keychain="$2" -- shift ;; -- -- -h|--help) -- printUsage "appsign" -- exit ;; -- -- *) -- logError "Unknown option '$arg'\n" -- printUsage "appsign" -- exit 1 ;; -- esac -- shift -- done -- -- if [ -z "${key}" ]; then -- logError "Missing arguments, --key is required!\n" -- printUsage "appsign" -- exit 1 -- fi -- -- if [ -z "${sign_files}" ]; then -- logError "Missing arguments, --files is required!\n" -- printUsage "appsign" -- exit 1 -- fi -- -- for f in "${sign_files[@]}"; do -- if [ ! -f "${f}" ]; then -- exitError "File '${f}' does not exist or is not a file!" -- fi -- done -- -- if [ "$(uname -s)" == "Darwin" ]; then -- if [ "$ac_username" == "" ]; then -- exitError "Missing arguments, --username is required!" -- fi -- -- checkXcodeSetup -- checkGrepCompat -- -- local orig_dir="$(pwd)" -- local real_src_dir="$(realpath "${SRC_DIR}")" -- for f in "${sign_files[@]}"; do -- if [[ ${f: -4} == '.dmg' ]]; then -- logInfo "Unpacking disk image '${f}'..." -- local tmp_dir="/tmp/KeePassXC_${RANDOM}" -- mkdir -p ${tmp_dir}/mnt -- hdiutil attach -quiet -noautoopen -mountpoint ${tmp_dir}/mnt "${f}" -- cd ${tmp_dir} -- cp -a ./mnt ./app -- hdiutil detach -quiet ${tmp_dir}/mnt -- -- if [ ! -d ./app/KeePassXC.app ]; then -- cd "${orig_dir}" -- exitError "Unpacking failed!" -- fi -- -- logInfo "Signing app bundle..." -- xcrun codesign --sign "${key}" --verbose --deep --options runtime ./app/KeePassXC.app -- -- # Sign main binary and libraries independently so we can keep using the convenient --deep -- # option while avoiding adding entitlements recursively -- logInfo "Signing main binary..." -- xcrun codesign --sign "${key}" --verbose --force --options runtime --entitlements \ -- "${real_src_dir}/share/macosx/keepassxc.entitlements" ./app/KeePassXC.app/Contents/MacOS/KeePassXC -- -- if [ 0 -ne $? ]; then -- cd "${orig_dir}" -- exitError "Signing failed!" -- fi -- -- logInfo "Repacking disk image..." -- hdiutil create \ -- -volname "KeePassXC" \ -- -size $((1000 * ($(du -sk ./app | cut -f1) + 5000))) \ -- -srcfolder ./app \ -- -fs HFS+ \ -- -fsargs "-c c=64,a=16,e=16" \ -- -format UDBZ \ -- "${tmp_dir}/$(basename "${f}")" -- -- cd "${orig_dir}" -- cp -f "${tmp_dir}/$(basename "${f}")" "${f}" -- rm -Rf ${tmp_dir} -- -- logInfo "Submitting disk image for notarization..." -- local status="$(xcrun altool --notarize-app \ -- --primary-bundle-id "org.keepassxc.keepassxc" \ -- --username "${ac_username}" \ -- --password "@keychain:${ac_keychain}" \ -- --file "${f}")" -- -- if [ 0 -ne $? ]; then -- logError "Submission failed!" -- exitError "Error message:\n${status}" -- fi -- -- local ticket="$(echo "${status}" | $GREP -oP "[a-f0-9-]+$")" -- logInfo "Submission successful. Ticket ID: ${ticket}." -- -- logInfo "Waiting for notarization to finish (this may take a while)..." -- while true; do -- echo -n "." -- -- status="$(xcrun altool --notarization-info "${ticket}" \ -- --username "${ac_username}" \ -- --password "@keychain:${ac_keychain}")" -- -- if echo "$status" | $GREP -q "Status Code: 0"; then -- logInfo "\nNotarization successful." -- break -- elif echo "$status" | $GREP -q "Status Code"; then -- logError "\nNotarization failed!" -- exitError "Error message:\n${status}" -- fi -- -- sleep 5 -- done -- -- logInfo "Stapling ticket to disk image..." -- xcrun stapler staple "${f}" -- -- if [ 0 -ne $? ]; then -- exitError "Stapling failed!" -- fi -- -- logInfo "Disk image successfully signed and notarized." -- else -- logWarn "Skipping non-DMG file '${f}'..." -- fi -- done -- -- elif [ "$(uname -o)" == "Msys" ]; then -- if [[ ! -f "${key}" ]]; then -- exitError "Key file was not found!" -- fi -- -- read -s -p "Key password: " password -- echo -- -- for f in "${sign_files[@]}"; do -- ext=${f: -4} -- if [[ $ext == ".msi" || $ext == ".exe" || $ext == ".dll" ]]; then -- # Make sure we can find the signtool -- checkSigntoolCommandExists -- -- # osslsigncode does not succeed at signing MSI files at this time... -- logInfo "Signing file '${f}' using Microsoft signtool..." -- signtool sign -f "${key}" -p "${password}" -d "KeePassXC" -td sha256 \ -- -fd sha256 -tr "${TIMESTAMP_SERVER}" "${f}" -- -- if [ 0 -ne $? ]; then -- exitError "Signing failed!" -- fi -- else -- logInfo "Skipping non-executable file '${f}'..." -- fi -- done -- -- else -- exitError "Unsupported platform for code signing!\n" -- fi -- -- logInfo "All done!" --} -- --# ----------------------------------------------------------------------- --# parse global command line --# ----------------------------------------------------------------------- --MODE="$1" --shift --if [ "" == "$MODE" ]; then -- logError "Missing arguments!\n" -- printUsage -- exit 1 --elif [ "help" == "$MODE" ]; then -- printUsage "$1" -- exit --elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] \ -- || [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ] || [ "appimage" == "$MODE" ]; then -- ${MODE} "$@" --else -- printUsage "$MODE" --fi -diff -urNr keepassxc-2.6.4-orig/share/CMakeLists.txt keepassxc-2.6.4-patched/share/CMakeLists.txt ---- keepassxc-2.6.4-orig/share/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --# Copyright (C) 2011 Felix Geyer --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --add_subdirectory(translations) -- --file(GLOB wordlists_files "wordlists/*.wordlist") --install(FILES ${wordlists_files} DESTINATION ${DATA_INSTALL_DIR}/wordlists) -- --# Copy wordlists to build dir for use in tests --file(COPY "wordlists" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -- --if(UNIX AND NOT APPLE AND NOT HAIKU) -- install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor -- FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svg" -- PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) -- install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor -- FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svg" -- PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) -- install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) -- install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) -- install(FILES linux/keepassxc.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages) --endif(UNIX AND NOT APPLE AND NOT HAIKU) -- --if(APPLE) -- install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR}) --endif() -- --install(FILES icons/application/256x256/apps/keepassxc.png DESTINATION ${DATA_INSTALL_DIR}/icons/application/256x256/apps) -- --add_custom_target(icons) --add_custom_command(TARGET icons -- COMMAND bash ./icons/minify.sh -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) --if(APPLE) -- add_custom_command(TARGET icons -- COMMAND png2icns macosx/keepassxc.icns icons/application/256x256/apps/keepassxc.png -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) --endif() -- --# ICO for Windows --add_custom_command(TARGET icons -- COMMAND bash ./windows/create-ico.sh icons/application/scalable/apps/keepassxc.svg windows/keepassxc.ico -- COMMAND bash ./windows/create-ico.sh icons/application/scalable/mimetypes/application-x-keepassxc.svg windows/keepassxc-kdbx.ico -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -I file binari keepassxc-2.6.4-orig/share/demo.kdbx e keepassxc-2.6.4-patched/share/demo.kdbx sono diversi -diff -urNr keepassxc-2.6.4-orig/share/demo.key keepassxc-2.6.4-patched/share/demo.key ---- keepassxc-2.6.4-orig/share/demo.key 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/demo.key 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --secret -I file binari keepassxc-2.6.4-orig/share/icons/application/256x256/apps/keepassxc.png e keepassxc-2.6.4-patched/share/icons/application/256x256/apps/keepassxc.png sono diversi -diff -urNr keepassxc-2.6.4-orig/share/icons/application/index.theme keepassxc-2.6.4-patched/share/icons/application/index.theme ---- keepassxc-2.6.4-orig/share/icons/application/index.theme 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/index.theme 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --[Icon Theme] --Name=application --Comment=KeePassXC Application Icon Theme -- --Directories=256x256/apps,scalable/actions,scalable/apps,scalable/categories,scalable/mimetypes,scalable/status -- --[scalable/actions] --Size=48 --Type=Scalable --MinSize=1 --MaxSize=256 --Context=Actions -- --[scalable/apps] --Size=48 --Type=Scalable --MinSize=1 --MaxSize=256 --Context=Applications -- --[scalable/categories] --Size=48 --Type=Scalable --MinSize=1 --MaxSize=256 --Context=Categories -- --[scalable/mimetypes] --Size=48 --Type=Scalable --MinSize=1 --MaxSize=256 --Context=MimeTypes -- --[scalable/status] --Size=48 --Type=Scalable --MinSize=1 --MaxSize=256 --Context=Status -- --[256x256/apps] --Size=256 --Type=Fixed --Context=Applications -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/application-exit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/application-exit.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/application-exit.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/application-exit.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/auto-type.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/auto-type.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/auto-type.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/auto-type.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/bugreport.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/bugreport.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/bugreport.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/bugreport.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-down.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-down.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-down.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-down.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-right.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-right.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-right.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-right.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chronometer.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chronometer.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chronometer.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chronometer.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/clipboard-text.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/clipboard-text.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/clipboard-text.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/clipboard-text.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/configure.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/configure.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/configure.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/configure.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-change-key.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-change-key.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-change-key.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-change-key.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-lock.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-lock.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-lock.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-lock.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-merge.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-merge.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-merge.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-merge.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-close.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-close.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-close.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-ok.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-ok.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-ok.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-ok.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-close.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-close.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-close.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-edit.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-edit.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-edit.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-export.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-export.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-export.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-export.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-import.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-import.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-import.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-import.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-new.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-new.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-new.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open-recent.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open-recent.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open-recent.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open-recent.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-properties.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-properties.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-properties.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-properties.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-as.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-as.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-as.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-as.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-copy.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-copy.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-copy.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/donate.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/donate.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/donate.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/donate.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-clone.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-clone.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-clone.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-clone.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-delete.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-delete.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-delete.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-delete.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-edit.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-edit.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-edit.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-new.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-new.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-new.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/favicon-download.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/favicon-download.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/favicon-download.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/favicon-download.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/getting-started.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/getting-started.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/getting-started.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/getting-started.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-delete.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-delete.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-delete.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-delete.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-edit.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-edit.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-edit.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-empty-trash.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-empty-trash.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-empty-trash.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-empty-trash.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-new.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-new.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-new.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/health.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/health.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/health.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/health.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/help-about.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/help-about.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/help-about.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/help-about.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/hibp.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/hibp.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/hibp.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/hibp.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --haveibeenpwned icon -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/keyboard-shortcuts.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/keyboard-shortcuts.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/keyboard-shortcuts.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/keyboard-shortcuts.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/key-enter.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/key-enter.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/key-enter.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/key-enter.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/message-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/message-close.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/message-close.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/message-close.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-down.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-down.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-down.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-down.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-up.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-up.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-up.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-up.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-locked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-locked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-locked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-unlocked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-unlocked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-unlocked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-unlocked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/paperclip.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/paperclip.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/paperclip.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/paperclip.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-copy.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-copy.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-copy.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generate.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generate.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generate.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generate.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generator.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generator.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generator.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generator.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-off.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-off.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-off.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-off.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-on.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-on.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-on.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-on.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/refresh.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/refresh.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/refresh.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/refresh.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports-exclude.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports-exclude.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports-exclude.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports-exclude.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-descending.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-descending.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-descending.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-descending.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/statistics.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/statistics.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/statistics.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/statistics.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-help.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-help.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-help.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-help.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-search.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-search.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-search.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-search.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-software-update.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-software-update.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-software-update.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-software-update.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/url-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/url-copy.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/url-copy.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/url-copy.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/user-guide.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/user-guide.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/user-guide.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/user-guide.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/username-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/username-copy.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/username-copy.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/username-copy.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/view-history.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/view-history.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/view-history.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/view-history.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/web.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/web.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/web.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/web.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/freedesktop.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/freedesktop.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/freedesktop.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/freedesktop.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --freedesktop.org icon -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/internet-web-browser.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/internet-web-browser.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/internet-web-browser.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/internet-web-browser.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-locked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-locked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-locked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-unlocked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-unlocked.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-unlocked.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-unlocked.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-desktop-icons.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-desktop-icons.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-desktop-icons.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-desktop-icons.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-system-network-sharing.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-system-network-sharing.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-system-network-sharing.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-system-network-sharing.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/utilities-terminal.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/utilities-terminal.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/utilities-terminal.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/utilities-terminal.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/categories/preferences-other.svg keepassxc-2.6.4-patched/share/icons/application/scalable/categories/preferences-other.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/categories/preferences-other.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/categories/preferences-other.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg keepassxc-2.6.4-patched/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1,2 +0,0 @@ -- -- -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-error.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-error.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-error.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-error.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-information.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-information.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-information.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-information.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-warning.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-warning.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-warning.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-warning.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/security-high.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/security-high.svg ---- keepassxc-2.6.4-orig/share/icons/application/scalable/status/security-high.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/security-high.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/badges/0_ShareActive.svg keepassxc-2.6.4-patched/share/icons/badges/0_ShareActive.svg ---- keepassxc-2.6.4-orig/share/icons/badges/0_ShareActive.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/badges/0_ShareActive.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/badges/1_ShareInactive.svg keepassxc-2.6.4-patched/share/icons/badges/1_ShareInactive.svg ---- keepassxc-2.6.4-orig/share/icons/badges/1_ShareInactive.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/badges/1_ShareInactive.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/badges/2_Expired.svg keepassxc-2.6.4-patched/share/icons/badges/2_Expired.svg ---- keepassxc-2.6.4-orig/share/icons/badges/2_Expired.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/badges/2_Expired.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C00_Password.svg keepassxc-2.6.4-patched/share/icons/database/C00_Password.svg ---- keepassxc-2.6.4-orig/share/icons/database/C00_Password.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C00_Password.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C01_Package_Network.svg keepassxc-2.6.4-patched/share/icons/database/C01_Package_Network.svg ---- keepassxc-2.6.4-orig/share/icons/database/C01_Package_Network.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C01_Package_Network.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C02_MessageBox_Warning.svg keepassxc-2.6.4-patched/share/icons/database/C02_MessageBox_Warning.svg ---- keepassxc-2.6.4-orig/share/icons/database/C02_MessageBox_Warning.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C02_MessageBox_Warning.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C03_Server.svg keepassxc-2.6.4-patched/share/icons/database/C03_Server.svg ---- keepassxc-2.6.4-orig/share/icons/database/C03_Server.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C03_Server.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C04_Klipper.svg keepassxc-2.6.4-patched/share/icons/database/C04_Klipper.svg ---- keepassxc-2.6.4-orig/share/icons/database/C04_Klipper.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C04_Klipper.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C05_Edu_Languages.svg keepassxc-2.6.4-patched/share/icons/database/C05_Edu_Languages.svg ---- keepassxc-2.6.4-orig/share/icons/database/C05_Edu_Languages.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C05_Edu_Languages.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C06_KCMDF.svg keepassxc-2.6.4-patched/share/icons/database/C06_KCMDF.svg ---- keepassxc-2.6.4-orig/share/icons/database/C06_KCMDF.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C06_KCMDF.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C07_Kate.svg keepassxc-2.6.4-patched/share/icons/database/C07_Kate.svg ---- keepassxc-2.6.4-orig/share/icons/database/C07_Kate.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C07_Kate.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C08_Socket.svg keepassxc-2.6.4-patched/share/icons/database/C08_Socket.svg ---- keepassxc-2.6.4-orig/share/icons/database/C08_Socket.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C08_Socket.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C09_Identity.svg keepassxc-2.6.4-patched/share/icons/database/C09_Identity.svg ---- keepassxc-2.6.4-orig/share/icons/database/C09_Identity.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C09_Identity.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C10_Kontact.svg keepassxc-2.6.4-patched/share/icons/database/C10_Kontact.svg ---- keepassxc-2.6.4-orig/share/icons/database/C10_Kontact.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C10_Kontact.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C11_Camera.svg keepassxc-2.6.4-patched/share/icons/database/C11_Camera.svg ---- keepassxc-2.6.4-orig/share/icons/database/C11_Camera.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C11_Camera.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C12_IRKickFlash.svg keepassxc-2.6.4-patched/share/icons/database/C12_IRKickFlash.svg ---- keepassxc-2.6.4-orig/share/icons/database/C12_IRKickFlash.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C12_IRKickFlash.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C13_KGPG_Key3.svg keepassxc-2.6.4-patched/share/icons/database/C13_KGPG_Key3.svg ---- keepassxc-2.6.4-orig/share/icons/database/C13_KGPG_Key3.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C13_KGPG_Key3.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C14_Laptop_Power.svg keepassxc-2.6.4-patched/share/icons/database/C14_Laptop_Power.svg ---- keepassxc-2.6.4-orig/share/icons/database/C14_Laptop_Power.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C14_Laptop_Power.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C15_Scanner.svg keepassxc-2.6.4-patched/share/icons/database/C15_Scanner.svg ---- keepassxc-2.6.4-orig/share/icons/database/C15_Scanner.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C15_Scanner.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C16_Mozilla_Firebird.svg keepassxc-2.6.4-patched/share/icons/database/C16_Mozilla_Firebird.svg ---- keepassxc-2.6.4-orig/share/icons/database/C16_Mozilla_Firebird.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C16_Mozilla_Firebird.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C17_CDROM_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C17_CDROM_Unmount.svg ---- keepassxc-2.6.4-orig/share/icons/database/C17_CDROM_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C17_CDROM_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C18_Display.svg keepassxc-2.6.4-patched/share/icons/database/C18_Display.svg ---- keepassxc-2.6.4-orig/share/icons/database/C18_Display.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C18_Display.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C19_Mail_Generic.svg keepassxc-2.6.4-patched/share/icons/database/C19_Mail_Generic.svg ---- keepassxc-2.6.4-orig/share/icons/database/C19_Mail_Generic.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C19_Mail_Generic.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C20_Misc.svg keepassxc-2.6.4-patched/share/icons/database/C20_Misc.svg ---- keepassxc-2.6.4-orig/share/icons/database/C20_Misc.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C20_Misc.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C21_KOrganizer.svg keepassxc-2.6.4-patched/share/icons/database/C21_KOrganizer.svg ---- keepassxc-2.6.4-orig/share/icons/database/C21_KOrganizer.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C21_KOrganizer.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C22_ASCII.svg keepassxc-2.6.4-patched/share/icons/database/C22_ASCII.svg ---- keepassxc-2.6.4-orig/share/icons/database/C22_ASCII.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C22_ASCII.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C23_Icons.svg keepassxc-2.6.4-patched/share/icons/database/C23_Icons.svg ---- keepassxc-2.6.4-orig/share/icons/database/C23_Icons.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C23_Icons.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C24_Connect_Established.svg keepassxc-2.6.4-patched/share/icons/database/C24_Connect_Established.svg ---- keepassxc-2.6.4-orig/share/icons/database/C24_Connect_Established.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C24_Connect_Established.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C25_Folder_Mail.svg keepassxc-2.6.4-patched/share/icons/database/C25_Folder_Mail.svg ---- keepassxc-2.6.4-orig/share/icons/database/C25_Folder_Mail.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C25_Folder_Mail.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C26_FileSave.svg keepassxc-2.6.4-patched/share/icons/database/C26_FileSave.svg ---- keepassxc-2.6.4-orig/share/icons/database/C26_FileSave.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C26_FileSave.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C27_NFS_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C27_NFS_Unmount.svg ---- keepassxc-2.6.4-orig/share/icons/database/C27_NFS_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C27_NFS_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C28_QuickTime.svg keepassxc-2.6.4-patched/share/icons/database/C28_QuickTime.svg ---- keepassxc-2.6.4-orig/share/icons/database/C28_QuickTime.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C28_QuickTime.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C29_KGPG_Term.svg keepassxc-2.6.4-patched/share/icons/database/C29_KGPG_Term.svg ---- keepassxc-2.6.4-orig/share/icons/database/C29_KGPG_Term.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C29_KGPG_Term.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -->_ -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C30_Konsole.svg keepassxc-2.6.4-patched/share/icons/database/C30_Konsole.svg ---- keepassxc-2.6.4-orig/share/icons/database/C30_Konsole.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C30_Konsole.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -->_ -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C31_FilePrint.svg keepassxc-2.6.4-patched/share/icons/database/C31_FilePrint.svg ---- keepassxc-2.6.4-orig/share/icons/database/C31_FilePrint.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C31_FilePrint.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C32_FSView.svg keepassxc-2.6.4-patched/share/icons/database/C32_FSView.svg ---- keepassxc-2.6.4-orig/share/icons/database/C32_FSView.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C32_FSView.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C33_Run.svg keepassxc-2.6.4-patched/share/icons/database/C33_Run.svg ---- keepassxc-2.6.4-orig/share/icons/database/C33_Run.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C33_Run.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C34_Configure.svg keepassxc-2.6.4-patched/share/icons/database/C34_Configure.svg ---- keepassxc-2.6.4-orig/share/icons/database/C34_Configure.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C34_Configure.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C35_KRFB.svg keepassxc-2.6.4-patched/share/icons/database/C35_KRFB.svg ---- keepassxc-2.6.4-orig/share/icons/database/C35_KRFB.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C35_KRFB.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C36_Ark.svg keepassxc-2.6.4-patched/share/icons/database/C36_Ark.svg ---- keepassxc-2.6.4-orig/share/icons/database/C36_Ark.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C36_Ark.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C37_KPercentage.svg keepassxc-2.6.4-patched/share/icons/database/C37_KPercentage.svg ---- keepassxc-2.6.4-orig/share/icons/database/C37_KPercentage.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C37_KPercentage.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C38_Samba_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C38_Samba_Unmount.svg ---- keepassxc-2.6.4-orig/share/icons/database/C38_Samba_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C38_Samba_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C39_History.svg keepassxc-2.6.4-patched/share/icons/database/C39_History.svg ---- keepassxc-2.6.4-orig/share/icons/database/C39_History.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C39_History.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C40_Mail_Find.svg keepassxc-2.6.4-patched/share/icons/database/C40_Mail_Find.svg ---- keepassxc-2.6.4-orig/share/icons/database/C40_Mail_Find.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C40_Mail_Find.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C41_VectorGfx.svg keepassxc-2.6.4-patched/share/icons/database/C41_VectorGfx.svg ---- keepassxc-2.6.4-orig/share/icons/database/C41_VectorGfx.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C41_VectorGfx.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C42_KCMMemory.svg keepassxc-2.6.4-patched/share/icons/database/C42_KCMMemory.svg ---- keepassxc-2.6.4-orig/share/icons/database/C42_KCMMemory.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C42_KCMMemory.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C43_EditTrash.svg keepassxc-2.6.4-patched/share/icons/database/C43_EditTrash.svg ---- keepassxc-2.6.4-orig/share/icons/database/C43_EditTrash.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C43_EditTrash.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C44_KNotes.svg keepassxc-2.6.4-patched/share/icons/database/C44_KNotes.svg ---- keepassxc-2.6.4-orig/share/icons/database/C44_KNotes.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C44_KNotes.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C45_Cancel.svg keepassxc-2.6.4-patched/share/icons/database/C45_Cancel.svg ---- keepassxc-2.6.4-orig/share/icons/database/C45_Cancel.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C45_Cancel.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C46_Help.svg keepassxc-2.6.4-patched/share/icons/database/C46_Help.svg ---- keepassxc-2.6.4-orig/share/icons/database/C46_Help.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C46_Help.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C47_KPackage.svg keepassxc-2.6.4-patched/share/icons/database/C47_KPackage.svg ---- keepassxc-2.6.4-orig/share/icons/database/C47_KPackage.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C47_KPackage.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C48_Folder.svg keepassxc-2.6.4-patched/share/icons/database/C48_Folder.svg ---- keepassxc-2.6.4-orig/share/icons/database/C48_Folder.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C48_Folder.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C49_Folder_Blue_Open.svg keepassxc-2.6.4-patched/share/icons/database/C49_Folder_Blue_Open.svg ---- keepassxc-2.6.4-orig/share/icons/database/C49_Folder_Blue_Open.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C49_Folder_Blue_Open.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C50_Folder_Tar.svg keepassxc-2.6.4-patched/share/icons/database/C50_Folder_Tar.svg ---- keepassxc-2.6.4-orig/share/icons/database/C50_Folder_Tar.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C50_Folder_Tar.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C51_Decrypted.svg keepassxc-2.6.4-patched/share/icons/database/C51_Decrypted.svg ---- keepassxc-2.6.4-orig/share/icons/database/C51_Decrypted.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C51_Decrypted.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C52_Encrypted.svg keepassxc-2.6.4-patched/share/icons/database/C52_Encrypted.svg ---- keepassxc-2.6.4-orig/share/icons/database/C52_Encrypted.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C52_Encrypted.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C53_Apply.svg keepassxc-2.6.4-patched/share/icons/database/C53_Apply.svg ---- keepassxc-2.6.4-orig/share/icons/database/C53_Apply.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C53_Apply.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C54_Signature.svg keepassxc-2.6.4-patched/share/icons/database/C54_Signature.svg ---- keepassxc-2.6.4-orig/share/icons/database/C54_Signature.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C54_Signature.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C55_Thumbnail.svg keepassxc-2.6.4-patched/share/icons/database/C55_Thumbnail.svg ---- keepassxc-2.6.4-orig/share/icons/database/C55_Thumbnail.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C55_Thumbnail.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C56_KAddressBook.svg keepassxc-2.6.4-patched/share/icons/database/C56_KAddressBook.svg ---- keepassxc-2.6.4-orig/share/icons/database/C56_KAddressBook.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C56_KAddressBook.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C57_View_Text.svg keepassxc-2.6.4-patched/share/icons/database/C57_View_Text.svg ---- keepassxc-2.6.4-orig/share/icons/database/C57_View_Text.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C57_View_Text.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C58_KGPG.svg keepassxc-2.6.4-patched/share/icons/database/C58_KGPG.svg ---- keepassxc-2.6.4-orig/share/icons/database/C58_KGPG.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C58_KGPG.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C58_KPGP.svg keepassxc-2.6.4-patched/share/icons/database/C58_KPGP.svg ---- keepassxc-2.6.4-orig/share/icons/database/C58_KPGP.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C58_KPGP.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C59_Package_Development.svg keepassxc-2.6.4-patched/share/icons/database/C59_Package_Development.svg ---- keepassxc-2.6.4-orig/share/icons/database/C59_Package_Development.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C59_Package_Development.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C60_KFM_Home.svg keepassxc-2.6.4-patched/share/icons/database/C60_KFM_Home.svg ---- keepassxc-2.6.4-orig/share/icons/database/C60_KFM_Home.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C60_KFM_Home.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C61_Services.svg keepassxc-2.6.4-patched/share/icons/database/C61_Services.svg ---- keepassxc-2.6.4-orig/share/icons/database/C61_Services.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C61_Services.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C62_Tux.svg keepassxc-2.6.4-patched/share/icons/database/C62_Tux.svg ---- keepassxc-2.6.4-orig/share/icons/database/C62_Tux.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C62_Tux.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C63_Feather.svg keepassxc-2.6.4-patched/share/icons/database/C63_Feather.svg ---- keepassxc-2.6.4-orig/share/icons/database/C63_Feather.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C63_Feather.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C64_Apple.svg keepassxc-2.6.4-patched/share/icons/database/C64_Apple.svg ---- keepassxc-2.6.4-orig/share/icons/database/C64_Apple.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C64_Apple.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C65_W.svg keepassxc-2.6.4-patched/share/icons/database/C65_W.svg ---- keepassxc-2.6.4-orig/share/icons/database/C65_W.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C65_W.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C66_Money.svg keepassxc-2.6.4-patched/share/icons/database/C66_Money.svg ---- keepassxc-2.6.4-orig/share/icons/database/C66_Money.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C66_Money.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C67_Certificate.svg keepassxc-2.6.4-patched/share/icons/database/C67_Certificate.svg ---- keepassxc-2.6.4-orig/share/icons/database/C67_Certificate.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C67_Certificate.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/database/C68_BlackBerry.svg keepassxc-2.6.4-patched/share/icons/database/C68_BlackBerry.svg ---- keepassxc-2.6.4-orig/share/icons/database/C68_BlackBerry.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/database/C68_BlackBerry.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/icons/icons.qrc keepassxc-2.6.4-patched/share/icons/icons.qrc ---- keepassxc-2.6.4-orig/share/icons/icons.qrc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/icons.qrc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,172 +0,0 @@ -- -- -- -- application/index.theme -- -- application/256x256/apps/keepassxc.png -- -- application/scalable/actions/application-exit.svg -- application/scalable/actions/auto-type.svg -- application/scalable/actions/bugreport.svg -- application/scalable/actions/chevron-double-down.svg -- application/scalable/actions/chevron-double-right.svg -- application/scalable/actions/chronometer.svg -- application/scalable/actions/clipboard-text.svg -- application/scalable/actions/configure.svg -- application/scalable/actions/database-change-key.svg -- application/scalable/actions/database-lock.svg -- application/scalable/actions/database-merge.svg -- application/scalable/actions/dialog-close.svg -- application/scalable/actions/dialog-ok.svg -- application/scalable/actions/document-close.svg -- application/scalable/actions/document-edit.svg -- application/scalable/actions/document-export.svg -- application/scalable/actions/document-import.svg -- application/scalable/actions/document-new.svg -- application/scalable/actions/document-open.svg -- application/scalable/actions/document-open-recent.svg -- application/scalable/actions/document-properties.svg -- application/scalable/actions/document-save.svg -- application/scalable/actions/document-save-as.svg -- application/scalable/actions/document-save-copy.svg -- application/scalable/actions/donate.svg -- application/scalable/actions/edit-clear-locationbar-ltr.svg -- application/scalable/actions/edit-clear-locationbar-rtl.svg -- application/scalable/actions/entry-clone.svg -- application/scalable/actions/entry-delete.svg -- application/scalable/actions/entry-edit.svg -- application/scalable/actions/entry-new.svg -- application/scalable/actions/favicon-download.svg -- application/scalable/actions/getting-started.svg -- application/scalable/actions/group-delete.svg -- application/scalable/actions/group-edit.svg -- application/scalable/actions/group-empty-trash.svg -- application/scalable/actions/group-new.svg -- application/scalable/actions/health.svg -- application/scalable/actions/help-about.svg -- application/scalable/actions/hibp.svg -- application/scalable/actions/key-enter.svg -- application/scalable/actions/keyboard-shortcuts.svg -- application/scalable/actions/message-close.svg -- application/scalable/actions/move-down.svg -- application/scalable/actions/move-up.svg -- application/scalable/actions/object-locked.svg -- application/scalable/actions/object-unlocked.svg -- application/scalable/actions/paperclip.svg -- application/scalable/actions/password-copy.svg -- application/scalable/actions/password-generate.svg -- application/scalable/actions/password-generator.svg -- application/scalable/actions/password-show-off.svg -- application/scalable/actions/password-show-on.svg -- application/scalable/actions/refresh.svg -- application/scalable/actions/reports.svg -- application/scalable/actions/reports-exclude.svg -- application/scalable/actions/sort-alphabetical-ascending.svg -- application/scalable/actions/sort-alphabetical-descending.svg -- application/scalable/actions/statistics.svg -- application/scalable/actions/system-help.svg -- application/scalable/actions/system-search.svg -- application/scalable/actions/system-software-update.svg -- application/scalable/actions/url-copy.svg -- application/scalable/actions/user-guide.svg -- application/scalable/actions/username-copy.svg -- application/scalable/actions/view-history.svg -- application/scalable/actions/web.svg -- -- application/scalable/apps/freedesktop.svg -- application/scalable/apps/internet-web-browser.svg -- application/scalable/apps/keepassxc.svg -- application/scalable/apps/keepassxc-monochrome-dark.svg -- application/scalable/apps/keepassxc-monochrome-dark-locked.svg -- application/scalable/apps/keepassxc-monochrome-light.svg -- application/scalable/apps/keepassxc-monochrome-light-locked.svg -- application/scalable/apps/keepassxc-locked.svg -- application/scalable/apps/keepassxc-unlocked.svg -- application/scalable/apps/preferences-desktop-icons.svg -- application/scalable/apps/preferences-system-network-sharing.svg -- application/scalable/apps/utilities-terminal.svg -- -- application/scalable/categories/preferences-other.svg -- -- application/scalable/mimetypes/application-x-keepassxc.svg -- -- application/scalable/status/dialog-error.svg -- application/scalable/status/dialog-information.svg -- application/scalable/status/dialog-warning.svg -- application/scalable/status/security-high.svg -- -- database/C00_Password.svg -- database/C01_Package_Network.svg -- database/C02_MessageBox_Warning.svg -- database/C03_Server.svg -- database/C04_Klipper.svg -- database/C05_Edu_Languages.svg -- database/C06_KCMDF.svg -- database/C07_Kate.svg -- database/C08_Socket.svg -- database/C09_Identity.svg -- database/C10_Kontact.svg -- database/C11_Camera.svg -- database/C12_IRKickFlash.svg -- database/C13_KGPG_Key3.svg -- database/C14_Laptop_Power.svg -- database/C15_Scanner.svg -- database/C16_Mozilla_Firebird.svg -- database/C17_CDROM_Unmount.svg -- database/C18_Display.svg -- database/C19_Mail_Generic.svg -- database/C20_Misc.svg -- database/C21_KOrganizer.svg -- database/C22_ASCII.svg -- database/C23_Icons.svg -- database/C24_Connect_Established.svg -- database/C25_Folder_Mail.svg -- database/C26_FileSave.svg -- database/C27_NFS_Unmount.svg -- database/C28_QuickTime.svg -- database/C29_KGPG_Term.svg -- database/C30_Konsole.svg -- database/C31_FilePrint.svg -- database/C32_FSView.svg -- database/C33_Run.svg -- database/C34_Configure.svg -- database/C35_KRFB.svg -- database/C36_Ark.svg -- database/C37_KPercentage.svg -- database/C38_Samba_Unmount.svg -- database/C39_History.svg -- database/C40_Mail_Find.svg -- database/C41_VectorGfx.svg -- database/C42_KCMMemory.svg -- database/C43_EditTrash.svg -- database/C44_KNotes.svg -- database/C45_Cancel.svg -- database/C46_Help.svg -- database/C47_KPackage.svg -- database/C48_Folder.svg -- database/C49_Folder_Blue_Open.svg -- database/C50_Folder_Tar.svg -- database/C51_Decrypted.svg -- database/C52_Encrypted.svg -- database/C53_Apply.svg -- database/C54_Signature.svg -- database/C55_Thumbnail.svg -- database/C56_KAddressBook.svg -- database/C57_View_Text.svg -- database/C58_KGPG.svg -- database/C59_Package_Development.svg -- database/C60_KFM_Home.svg -- database/C61_Services.svg -- database/C62_Tux.svg -- database/C63_Feather.svg -- database/C64_Apple.svg -- database/C65_W.svg -- database/C66_Money.svg -- database/C67_Certificate.svg -- database/C68_BlackBerry.svg -- -- badges/0_ShareActive.svg -- badges/1_ShareInactive.svg -- badges/2_Expired.svg -- -- -diff -urNr keepassxc-2.6.4-orig/share/icons/minify.sh keepassxc-2.6.4-patched/share/icons/minify.sh ---- keepassxc-2.6.4-orig/share/icons/minify.sh 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/icons/minify.sh 1970-01-01 01:00:00.000000000 +0100 -@@ -1,21 +0,0 @@ --#!/usr/bin/env bash -- --NC='\033[0m' --YELLOW='\033[0;33m' -- --# Build desktop icon --echo "Creating desktop icon PNG..." --if command -v "inkscape" &> /dev/null; then -- inkscape -z -w 256 -h 256 icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png --else -- echo -e "${YELLOW}Could not find inkscape; keepassxc.png not built!${NC}" --fi -- --# Minify SVG's --echo "Minifying SVG's..." --minify -o icons/badges --match=.svg icons/badges --minify -o icons/database --match=.svg icons/database -- --# Crush PNG's --echo "Crushing PNG's..." --find "." -iname '*png' -exec pngcrush -ow -brute {} \; -diff -urNr keepassxc-2.6.4-orig/share/linux/keepassxc.xml keepassxc-2.6.4-patched/share/linux/keepassxc.xml ---- keepassxc-2.6.4-orig/share/linux/keepassxc.xml 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/linux/keepassxc.xml 1970-01-01 01:00:00.000000000 +0100 -@@ -1,8 +0,0 @@ -- -- -- -- KeePass 2 Database -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.appdata.xml keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.appdata.xml ---- keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.appdata.xml 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.appdata.xml 1970-01-01 01:00:00.000000000 +0100 -@@ -1,804 +0,0 @@ -- -- -- -- org.keepassxc.KeePassXC.desktop -- KeePassXC -- CC-BY-3.0 -- GPL-3.0+ -- -- application/x-keepass2 -- -- Community-driven port of the Windows application “KeePass Password Safe” -- KeePassXC Team -- --

-- KeePassXC is an application for people with extremely high demands on secure -- personal data management. It has a light interface, is cross-platform and -- published under the terms of the GNU General Public License. --

--
-- -- org.keepassxc.KeePassXC.desktop -- -- https://keepassxc.org -- https://github.com/keepassxreboot/keepassxc/issues -- https://keepassxc.org/docs#faq -- https://keepassxc.org/docs -- https://www.transifex.com/keepassxc/keepassxc -- -- -- -- https://keepassxc.org/images/screenshots/thumbs/welcome_screen.png -- Create, Import or Open Databases -- -- -- https://keepassxc.org/images/screenshots/thumbs/database_view.png -- Organize with Groups and Entries -- -- -- https://keepassxc.org/images/screenshots/thumbs/edit_entry.png -- Database Entry -- -- -- https://keepassxc.org/images/screenshots/thumbs/edit_entry_icons.png -- Icon Selection for Entry -- -- -- https://keepassxc.org/images/screenshots/thumbs/password_generator_advanced.png -- Password Generator -- -- -- -- -- -- --
    --
  • Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034]
  • --
  • Show window title as tooltip on system tray [#5948]
  • --
  • Compress Snap release as LZO for faster initial startup [#5877]
  • --
  • Password generator: Set maximum selectable password length to 999 [#5937]
  • --
  • Fix crash on app close when using SSH agent [#5935]
  • --
  • Fix KDF selection showing wrong item when using Argon2id [#5923]
  • --
  • Automatically close About dialog on database lock if it is still open [#5947]
  • --
  • Linux: Fix automatic launch at system startup with AppImages [#5901]
  • --
  • Linux: Fix click-to-move on empty area activating when using menus [#5971]
  • --
  • Linux: Try multiple times to show tray icon if tray is not ready yet [#5948]
  • --
  • macOS: Fix KeePassXC blocking clean shutdown [#6002]
  • --
--
--
-- -- --
    --
  • Support Argon2id KDF [#5778]
  • --
  • Support XMLv2 key files [#5798]
  • --
  • Improve CSV Import/Export, include time fields and TOTP [#5346]
  • --
  • Support empty area dragging of the application window [#5860]
  • --
  • Display default Auto-Type sequence in preview pane [#5654]
  • --
  • Remove strict length limit on generated passwords [#5748]
  • --
  • Hide key file path by default when unlocking database [#5779]
  • --
  • Document browser extension use with Edge in managed mode [#5692]
  • --
  • Windows: Prevent clipboard history and cloud sync [#5853]
  • --
  • macOS: Update the application icon to Big Sur styling [#5851]
  • --
  • Re-select previously selected entry on database unlock [#5559]
  • --
  • Properly save special character choice in password generator [#5610]
  • --
  • Fix crash in browser integration with multiple similar entries [#5653]
  • --
  • Remove offset on username field in classic theme [#5788]
  • --
  • Ensure entry history is copied when drag/dropping entries and groups [#5817]
  • --
  • Close modal dialogs when database is locked [#5820]
  • --
  • Prevent crash when KeeShare modifies an entry that is currently being edited [#5827]
  • --
  • Improve preview of entry attributes [#5834]
  • --
  • Always activate/focus database open dialog preventing mistype [#5878]
  • --
  • Reports: fix calculation of average password length [#5862]
  • --
  • Linux: Delay startup on login to correct tray icon issues [#5724]
  • --
--
--
-- -- --
    --
  • Add option to keep window always on top to view menu [#5542]
  • --
  • Move show/hide usernames and passwords to view menu [#5542]
  • --
  • Add command line options and environment variables for changing the config locations [#5452]
  • --
  • Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]
  • --
  • Mask sensitive information in command execution confirmation prompt [#5542]
  • --
  • SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]
  • --
  • Prevent data loss with drag and drop between databases [#5536]
  • --
  • Fix crash when toggling Capslock rapidly [#5545]
  • --
  • Don't mark URL references as invalid URL [#5380]
  • --
  • Reset entry preview after search [#5483]
  • --
  • Set Qt::Dialog flag on database open dialog [#5356]
  • --
  • Fix sorting of database report columns [#5426]
  • --
  • Fix IfDevice matching logic [#5344]
  • --
  • Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]
  • --
  • Fix tabbing into the notes field [#5424]
  • --
  • Fix password generator ignoring settings on load [#5340]
  • --
  • Restore natural entry sort order on application load [#5438]
  • --
  • Fix paperclip and TOTP columns not saving state [#5327]
  • --
  • Enforce fixed password font in entry preview [#5454]
  • --
  • Add scrollbar when new database wizard exceeds screen size [#5560]
  • --
  • Do not mark database as modified when viewing Auto-Type associations [#5542]
  • --
  • CLI: Fix two heap-use-after-free crashes [#5368,#5470]
  • --
  • Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]
  • --
  • Browser: Fix entry retrieval when "only best matching" is enabled [#5316]
  • --
  • Browser: Ignore recycle bin on KeePassHTTP migration [#5481]
  • --
  • KeeShare: Fix import crash [#5542]
  • --
  • macOS: Fix toolbar theming and breadcrumb display issues [#5482]
  • --
  • macOS: Fix file dialog randomly closing [#5479]
  • --
  • macOS: Fix being unable to select OPVault files for import [#5341]
  • --
--
--
-- -- --
    --
  • Add menu entries for auto-typing only username or only password [#4891]
  • --
  • Browser: Add command for retrieving current TOTP [#5278]
  • --
  • Improve man pages [#5010]
  • --
  • Linux: Support Xfce screen lock signals [#4971]
  • --
  • Linux: Add OARS metadata to AppStream markup [#5031]
  • --
  • SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116]
  • --
  • Improve password generator UI and UX [#5129]
  • --
  • Do not prompt to restart if switching the theme back and forth [#5084]
  • --
  • Change actions for F1, F2, and F3 keys [#5082]
  • --
  • Skip referenced passwords in health check report [#5056]
  • --
  • Check system-wide Qt translations directory for downstream translations packaging [#5064]
  • --
  • macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114]
  • --
  • Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214]
  • --
  • Fix clipboard not being cleared when database is locked while timeout is still active [#5184]
  • --
  • Fix list of previous databases not being cleared in some cases [#5123]
  • --
  • Fix saving of non-data changes on database lock [#5210]
  • --
  • Fix search results banner theming [#5197]
  • --
  • Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267]
  • --
  • Fix label clipping in settings on high-DPI screens [#5227]
  • --
  • Fix excessive memory usage by icons on systems with high-DPI screens [#5266]
  • --
  • Fix crash if number of TOTP digits exceeds ten [#5106]
  • --
  • Fix slot detection when first YubiKey is configured on the second slot [#5004]
  • --
  • Prevent crash if focus widget gets deleted during saving [#5005]
  • --
  • Always show buttons for opening or saving attachments [#4956]
  • --
  • Update link to Auto-Type help [#5228]
  • --
  • Fix build errors with Ninja [#5121]
  • --
  • CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140]
  • --
  • Windows: Use Classic theme by default if high-contrast mode is on [#5191]
  • --
  • Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011]
  • --
  • Linux: Correct high-DPI display by not allowing fractional scaling [#5185]
  • --
  • Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832]
  • --
  • SSH Agent: Always forget all keys on lock [#5115]
  • --
--
--
-- -- --
    --
  • Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915]
  • --
  • Compact mode to use classic Group and Entry line height [#4910]
  • --
  • New monochrome tray icons [#4796, #4803]
  • --
  • View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]
  • --
  • Search for groups and scope search to matched groups [#4705]
  • --
  • Save Database Backup feature [#4550]
  • --
  • Sort entries by "natural order" and move lines up/down [#4357]
  • --
  • Option to launch KeePassXC on system startup/login [#4675]
  • --
  • Caps Lock warning on password input fields [#3646]
  • --
  • Add "Size" column to entry view [#4588]
  • --
  • Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]
  • --
  • Password Generator: Define additional characters to choose from [#3876]
  • --
  • Reports: Database password health check (offline) [#3993]
  • --
  • Reports: HIBP online service to check for breached passwords [#4438]
  • --
  • Auto-Type: DateTime placeholders [#4409]
  • --
  • Browser: Show group name in results sent to browser extension [#4111]
  • --
  • Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]
  • --
  • Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]
  • --
  • CLI: `db-info` command [#4231]
  • --
  • CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]
  • --
  • CLI: Incorporate xclip into snap builds [#4697]
  • --
  • SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]
  • --
  • SSH Agent: Context menu actions to add/remove keys [#4290]
  • --
  • Complete replacement of default database icons [#4699]
  • --
  • Complete replacement of application icons [#4066, #4161, #4203, #4411]
  • --
  • Complete rewrite of documentation and manpages using Asciidoctor [#4937]
  • --
  • Complete refactor of config files; separate between local and roaming [#4665]
  • --
  • Complete refactor of browser integration and proxy code [#4680]
  • --
  • Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]
  • --
  • Significantly improve performance when saving and opening databases [#4309, #4833]
  • --
  • Remove read-only detection for database files [#4508]
  • --
  • Overhaul of password fields and password generator [#4367]
  • --
  • Replace instances of "Master Key" with "Database Credentials" [#4929]
  • --
  • Change settings checkboxes to positive phrasing for consistency [#4715]
  • --
  • Improve UX of using entry actions (focus fix) [#3893]
  • --
  • Set expiration time to Now when enabling entry expiration [#4406]
  • --
  • Always show "New Entry" in context menu [#4617]
  • --
  • Issue warning before adding large attachments [#4651]
  • --
  • Improve importing OPVault [#4630]
  • --
  • Improve AutoOpen capability [#3901, #4752]
  • --
  • Check for updates every 7 days even while still running [#4752]
  • --
  • Improve Windows installer UI/UX [#4675]
  • --
  • Improve config file handling of portable distribution [#4131, #4752]
  • --
  • macOS: Hide dock icon when application is hidden to tray [#4782]
  • --
  • Browser: Use unlock dialog to improve UX of opening a locked database [#3698]
  • --
  • Browser: Improve database and entry settings experience [#4392, #4591]
  • --
  • Browser: Improve confirm access dialog [#2143, #4660]
  • --
  • KeeShare: Improve monitoring file changes of shares [#4720]
  • --
  • CLI: Rename `create` command to `db-create` [#4231]
  • --
  • CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]
  • --
  • CLI: Use stderr for help text and password prompts [#4086, #4623]
  • --
  • FdoSecrets: Display existing secret service process [#4128]
  • --
  • Fix changing focus around the main window using tab key [#4641]
  • --
  • Fix search field clearing while still using the application [#4368]
  • --
  • Improve search help widget displaying on macOS and Linux [#4236]
  • --
  • Return keyboard focus after editing an entry [#4287]
  • --
  • Reset database path after failed "Save As" [#4526]
  • --
  • Make builds reproducible [#4411]
  • --
  • Improve handling of ccache when building [#4104, #4335]
  • --
  • Windows: Use correct UI font and size [#4769]
  • --
  • macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]
  • --
  • Linux: Fix version number not embedded in AppImage [#4842]
  • --
  • Auto-Type: Fix crash when performing on new entry [#4132]
  • --
  • Browser: Send legacy HTTP settings to recycle bin [#4589]
  • --
  • Browser: Fix merging browser keys [#4685]
  • --
  • CLI: Fix encoding when exporting database [#3921]
  • --
  • SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]
  • --
  • FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
  • --
--
--
-- -- --
    --
  • Return keyboard focus after saving database edits [#4287]
  • --
  • Windows: Use bare minimum settings in portable version [#4131]
  • --
  • Windows: Use SHA256 code signing [#4129]
  • --
  • macOS: Fix code signing incompatibility in latest macOS release [#4564]
  • --
--
--
-- -- --
    --
  • Fix a possible database lockout when removing a YubiKey from a KDBX 3.1 database [#4147]
  • --
  • Fix crash if Auto-Type is performed on a new entry [#4150]
  • --
  • Fix crash when all entries are deleted from a group [#4156]
  • --
  • Improve the reliability of clipboard clearing on Gnome [#4165]
  • --
  • Do not check cmd:// URLs for valid URL syntax anymore [#4172]
  • --
  • Prevent unnecessary merges for databases on network shares [#4153]
  • --
  • Browser: Prevent native messaging proxy from blocking application shutdown [#4155]
  • --
  • Browser: Improve website URL matching [#4134, #4177]
  • --
--
--
-- -- --
    --
  • Browser: Show UI warning when entering invalid URLs [#3912]
  • --
  • Browser: Option to use an entry only for HTTP auth [#3927]
  • --
  • Disable the user interface when merging or saving the database [#3991]
  • --
  • Ability to hide protected attribute after reveal [#3877]
  • --
  • Remove mention of "snaps" in Windows and macOS [#3879]
  • --
  • CLI: Merge parameter for source database key file (--key-file-from) [#3961]
  • --
  • Improve GUI tests reliability on Hi-DPI displays [#4075]
  • --
  • Disable deprecation warnings to allow building with Qt 5.14+ [#4075]
  • --
  • OPVault: Use 'otp' attribute for TOTP field imports [#4075]
  • --
  • Fix crashes when saving a database to cloud storage [#3991]
  • --
  • Fix crash when pressing enter twice while opening database [#3885]
  • --
  • Fix handling of HTML when displayed in the entry preview panel [#3910]
  • --
  • Fix start minimized to tray on Linux [#3899]
  • --
  • Fix Auto Open with key file only databases [#4075]
  • --
  • Fix escape key closing the standalone password generator [#3892]
  • --
  • macOS: Fix monospace font usage in password field and notes [#4075]
  • --
  • macOS: Fix building on macOS 10.9 to 10.11 [#3946]
  • --
  • Fix TOTP setup dialog not closing on database lock [#4075]
  • --
  • Browser: Fix condition where additional URLs are ignored [#4033]
  • --
  • Browser: Fix subdomain matching to return only relevant site entries [#3854]
  • --
  • Secret Service: Fix multiple crashes and incompatibilities [#3871, #4009, #4074]
  • --
  • Secret Service: Fix searching of entries [#4008, #4036]
  • --
  • Secret Service: Fix behavior when exposed group is recycled [#3914]
  • --
  • CLI: Release the database instance before exiting interactive mode [#3889]
  • --
  • Fix (most) memory leaks in tests [#3922]
  • --
--
--
-- -- --
    --
  • Add programmatic use of the EntrySearcher [#3760]
  • --
  • Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824]
  • --
  • macOS: Add ability to perform notarization of built package [#3827]
  • --
  • Reduce file hash checking to every 30 seconds to correct performance issues [#3724]
  • --
  • Correct formatting of notes in entry preview widget [#3727]
  • --
  • Improve performance and UX of database statistics page [#3780]
  • --
  • Improve interface for key file selection to discourage use of the database file [#3807]
  • --
  • Hide Auto-Type sequences column when not needed [#3794]
  • --
  • macOS: Revert back to using Carbon API for hotkey detection [#3794]
  • --
  • CLI: Do not show protected fields by default [#3710]
  • --
  • Secret Service: Correct issues interfacing with various applications [#3761]
  • --
  • Fix building without additional features [#3693]
  • --
  • Fix handling TOTP secret keys that require padding [#3764]
  • --
  • Fix database unlock dialog password field focus [#3764]
  • --
  • Correctly label open databases as locked on launch [#3764]
  • --
  • Prevent infinite recursion when two databases AutoOpen each other [#3764]
  • --
  • Browser: Fix incorrect matching of invalid URLs [#3759]
  • --
  • Properly stylize the application name on Linux [#3775]
  • --
  • Show application icon on Plasma Wayland sessions [#3777]
  • --
  • macOS: Check for Auto-Type permissions on use instead of at launch [#3794]
  • --
--
--
-- -- --
    --
  • Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277]
  • --
  • Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034]
  • --
  • Add offline user manual accessible via the 'Help' menu [#3274]
  • --
  • Add support for importing 1Password OpVault files [#2292]
  • --
  • Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726]
  • --
  • Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352]
  • --
  • Add group sorting feature [#3282]
  • --
  • Add feature to download favicons for all entries at once [#3169]
  • --
  • Add word case option to passphrase generator [#3172]
  • --
  • Add support for RFC6238-compliant TOTP hashes [#2972]
  • --
  • Add UNIX man page for main program [#3665]
  • --
  • Add 'Monospaced font' option to the notes field [#3321]
  • --
  • Add support for key files in auto open [#3504]
  • --
  • Add search field for filtering entries in Auto-Type dialog [#2955]
  • --
  • Complete usernames based on known usernames from other entries [#3300]
  • --
  • Parse hyperlinks in the notes field of the entry preview pane [#3596]
  • --
  • Allow abbreviation of field names in entry search [#3440]
  • --
  • Allow setting group icons recursively [#3273]
  • --
  • Add copy context menu for username and password in Auto-Type dialog [#3038]
  • --
  • Drop to background after copying a password to the clipboard [#3253]
  • --
  • Add 'Lock databases' entry to tray icon menu [#2896]
  • --
  • Add option to minimize window after unlocking [#3439]
  • --
  • Add option to minimize window after opening a URL [#3302]
  • --
  • Request accessibility permissions for Auto-Type on macOS [#3624]
  • --
  • Browser: Add initial support for multiple URLs [#3558]
  • --
  • Browser: Add entry-specific browser integration settings [#3444]
  • --
  • Add offline HIBP checker (requires a downloaded HIBP dump) [#2707]
  • --
  • CLI: Add 'flatten' option to the 'ls' command [#3276]
  • --
  • CLI: Add password generation options to `Add` and `Edit` commands [#3275]
  • --
  • CLI: Add XML import [#3572]
  • --
  • CLI: Add CSV export to the 'export' command [#3278]
  • --
  • CLI: Add `-y --yubikey` option for YubiKey [#3416]
  • --
  • CLI: Add `--dry-run` option for merging databases [#3254]
  • --
  • CLI: Add group commands (mv, mkdir and rmdir) [#3313].
  • --
  • CLI: Add interactive shell mode command `open` [#3224]
  • --
  • Redesign database unlock dialog [ [#3287]
  • --
  • Rework the entry preview panel [ [#3306]
  • --
  • Move notes to General tab on Group Preview Panel [#3336]
  • --
  • Enable entry actions when editing an entry and cleanup entry context menu [#3641]
  • --
  • Improve detection of external database changes [#2389]
  • --
  • Warn if user is trying to use a KDBX file as a key file [#3625]
  • --
  • Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344]
  • --
  • Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341]
  • --
  • Add icon to 'Toggle Window' action in tray icon menu [[3244]
  • --
  • Merge custom data between databases only when necessary [#3475]
  • --
  • Improve various file-handling related issues when picking files using the system's file dialog [#3473]
  • --
  • Add 'New Entry' context menu when no entries are selected [#3671]
  • --
  • Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [#3672]
  • --
  • Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371]
  • --
  • Browser: Show database name when pairing with a new browser [#3638]
  • --
  • Browser: Show URL in allow access dialog [#3639]
  • --
  • CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275]
  • --
  • CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275]
  • --
  • CLI: Rename command `extract` to `export`. [#3277]
  • --
  • Improve accessibility for assistive technologies [#3409]
  • --
  • Correctly unlock all databases if `--pw-stdin` is provided [#2916]
  • --
  • Fix password generator issues with special characters [#3303]
  • --
  • Fix KeePassXC interrupting shutdown procedure [#3666]
  • --
  • Fix password visibility toggle button state on unlock dialog [#3312]
  • --
  • Fix potential data loss if database is reloaded while user is editing an entry [#3656]
  • --
  • Fix hard-coded background color in search help popup [#3001]
  • --
  • Fix font choice for password preview [#3425]
  • --
  • Fix handling of read-only files when autosave is enabled [#3408]
  • --
  • Handle symlinks correctly when atomic saves are disabled [#3463]
  • --
  • Enable HighDPI icon scaling on Linux [#3332]
  • --
  • Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, #3347]
  • --
  • Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, #3291, #3029, #3031, #3236]
  • --
  • Correctly bring window to the front when clicking tray icon on macOS [#3576]
  • --
  • Correct application shortcut created by MSI Installer on Windows [#3296]
  • --
  • Fix crash when removing custom data [#3508]
  • --
  • Fix placeholder resolution in URLs [#3281]
  • --
  • Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304]
  • --
  • Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480]
  • --
  • Browser: Fix password entropy calculation [#3107]
  • --
  • Browser: Fix Windows registry settings for portable installation [#3603]
  • --
--
--
-- -- --
    --
  • Fix library loading issues in the Snap and macOS releases [#3247]
  • --
  • Fix various keyboard navigation issues [#3248]
  • --
  • Fix main window toggling regression when clicking the tray icon on KDE [#3258]
  • --
  • Add documentation for keyboard shortcuts to source code distribution [#3215]
  • --
--
--
-- -- --
    --
  • Improve resilience against memory attacks - overwrite memory before free [#3020]
  • --
  • Prevent infinite save loop when location is unavailable [#3026]
  • --
  • Attempt to fix quitting application when shutdown or logout issued [#3199]
  • --
  • Support merging database custom data [#3002]
  • --
  • Fix opening URL's with non-http schemes [#3153]
  • --
  • Fix data loss due to not reading all database attachments if duplicates exist [#3180]
  • --
  • Fix entry context menu disabling when using keyboard navigation [#3199]
  • --
  • Fix behaviors when canceling an entry edit [#3199]
  • --
  • Fix processing of tray icon click and doubleclick [#3112]
  • --
  • Update group in preview widget when focused [#3199]
  • --
  • Prefer DuckDuckGo service over direct icon download (increases resolution) [#2996]
  • --
  • Remove apply button in application settings [#3019]
  • --
  • Use winqtdeploy on Windows to correct deployment issues [#3025]
  • --
  • Don't mark entry edit as modified when attribute selection changes [#3041]
  • --
  • Use console code page CP_UTF8 on Windows if supported [#3050]
  • --
  • Snap: Fix locking database with session lock [#3046]
  • --
  • Snap: Fix theming across Linux distributions [#3057]
  • --
  • Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131]
  • --
  • KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088]
  • --
  • macOS: Fix toolbar text when in dark mode [#2998]
  • --
  • macOS: Lock database on switching user [#3097]
  • --
  • macOS: Fix global Auto-Type when the database is locked [#3138]
  • --
  • Browser: Close popups when database is locked [#3093]
  • --
  • Browser: Add tests [#3016]
  • --
  • Browser: Don't create default group if custom group is enabled [#3127]
  • --
--
--
-- -- --
    --
  • Fix database deletion when using unsafe saves to a different file system [#2889]
  • --
  • Fix opening databases with legacy key files that contain '/' [#2872]
  • --
  • Fix opening database files from the command line [#2919]
  • --
  • Fix crash when editing master key [#2836]
  • --
  • Fix multiple issues with apply button behavior [#2947]
  • --
  • Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830]
  • --
  • Fix building without WITH_XC_KEESHARE
  • --
  • Fix reference entry coloring on macOS dark mode [#2984]
  • --
  • Hide window when performing entry auto-type on macOS [#2969]
  • --
  • Improve UX of update checker; reduce checks to every 7 days [#2968]
  • --
  • KeeShare improvements [#2946, #2978, #2824]
  • --
  • Re-enable Ctrl+C to copy password from search box [#2947]
  • --
  • Add KeePassXC-Browser integration for Brave browser [#2933]
  • --
  • SSH Agent: Re-Add keys on database unlock [#2982]
  • --
  • SSH Agent: Only remove keys on app exit if they are removed on lock [#2985]
  • --
  • CLI: Add --no-password option [#2708]
  • --
  • CLI: Improve database extraction to XML [#2698]
  • --
  • CLI: Don't call mandb on build [#2774]
  • --
  • CLI: Add debug info [#2714]
  • --
  • Improve support for Snap theming [#2832]
  • --
  • Add support for building on Haiku OS [#2859]
  • --
  • Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous
  • --
  • Fix compiling on GCC 5 / Xenial [#2990]
  • --
  • Add .gitrev output to tarball for third-party builds [#2970]
  • --
  • Add WITH_XC_UPDATECHECK compile flag to enable/disable the update checker [#2968]
  • --
--
--
-- -- --
    --
  • New Database Wizard [#1952]
  • --
  • Advanced Search [#1797]
  • --
  • Automatic update checker [#2648]
  • --
  • KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]
  • --
  • Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]
  • --
  • Remove KeePassHttp support [#1752]
  • --
  • CLI: output info to stderr for easier scripting [#2558]
  • --
  • CLI: Add --quiet option [#2507]
  • --
  • CLI: Add create command [#2540]
  • --
  • CLI: Add recursive listing of entries [#2345]
  • --
  • CLI: Fix stdin/stdout encoding on Windows [#2425]
  • --
  • SSH Agent: Support OpenSSH for Windows [#1994]
  • --
  • macOS: TouchID Quick Unlock [#1851]
  • --
  • macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]
  • --
  • Linux: Prevent Klipper from storing secrets in clipboard [#1969]
  • --
  • Linux: Use polling based file watching for NFS [#2171]
  • --
  • Linux: Enable use of browser plugin in Snap build [#2802]
  • --
  • TOTP QR Code Generator [#1167]
  • --
  • High-DPI Scaling for 4k screens [#2404]
  • --
  • Make keyboard shortcuts more consistent [#2431]
  • --
  • Warn user if deleting referenced entries [#1744]
  • --
  • Allow toolbar to be hidden and repositioned [#1819, #2357]
  • --
  • Increase max allowed database timeout to 12 hours [#2173]
  • --
  • Password generator uses existing password length by default [#2318]
  • --
  • Improve alert message box button labels [#2376]
  • --
  • Show message when a database merge makes no changes [#2551]
  • --
  • Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]
  • --
  • Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
  • --
--
--
-- -- --
    --
  • Show all URL schemes in entry view [#1768]
  • --
  • Disable merge when database is locked [#1975]
  • --
  • Fix intermittent crashes with favorite icon downloads [#1980]
  • --
  • Provide potential crash warning to Qt 5.5.x users [#2211]
  • --
  • Disable apply button when creating new entry/group to prevent data loss [#2204]
  • --
  • Allow for 12 hour timeout to lock idle database [#2173]
  • --
  • Multiple SSH Agent fixes [#1981, #2117]
  • --
  • Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]
  • --
  • Fix browser proxy application not closing properly [#2142]
  • --
  • Add real names and Patreon supporters to about dialog [#2214]
  • --
  • Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214]
  • --
  • Enhancements to release-tool to appsign intermediate build products [#2101]
  • --
--
--
-- -- --
    --
  • Fix crash when browser integration is enabled [#1923]
  • --
--
--
-- -- --
    --
  • Enable high entropy ASLR on Windows [#1747]
  • --
  • Enhance favicon fetching [#1786]
  • --
  • Fix crash on Windows due to autotype [#1691]
  • --
  • Fix dark tray icon changing all icons [#1680]
  • --
  • Fix --pw-stdin not using getPassword function [#1686]
  • --
  • Fix placeholders being resolved in notes [#1907]
  • --
  • Enable auto-type start delay to be configurable [#1908]
  • --
  • Browser: Fix native messaging reply size [#1719]
  • --
  • Browser: Increase maximum buffer size [#1720]
  • --
  • Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906]
  • --
  • SSH Agent: Parse aes-256-cbc/ctr keys [#1682]
  • --
  • SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787]
  • --
--
--
-- -- --
    --
  • Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped [#1568]
  • --
  • Abort saving and show an error message when challenge-response fails [#1659]
  • --
  • Support inner stream protection on all string attributes [#1646]
  • --
  • Fix favicon downloads not finishing on some websites [#1657]
  • --
  • Fix freeze due to invalid STDIN data [#1628]
  • --
  • Correct issue with encrypted RSA SSH keys [#1587]
  • --
  • Fix crash on macOS due to QTBUG-54832 [#1607]
  • --
  • Show error message if ssh-agent communication fails [#1614]
  • --
  • Fix --pw-stdin and filename parameters being ignored [#1608]
  • --
  • Fix Auto-Type syntax check not allowing spaces and special characters [#1626]
  • --
  • Fix reference placeholders in combination with Auto-Type [#1649]
  • --
  • Fix qtbase translations not being loaded [#1611]
  • --
  • Fix startup crash on Windows due to missing SVG libraries [#1662]
  • --
  • Correct database tab order regression [#1610]
  • --
  • Fix GCC 8 compilation error [#1612]
  • --
  • Fix copying of advanced attributes on KDE [#1640]
  • --
  • Fix member initialization of CategoryListWidgetDelegate [#1613]
  • --
  • Fix inconsistent toolbar icon sizes and provide higher-quality icons [#1616]
  • --
  • Improve preview panel geometry [#1609]
  • --
--
--
-- -- --
    --
  • Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494]
  • --
  • Add SSH Agent feature [#1098, #1450, #1463]
  • --
  • Add preview panel with details of the selected entry [#879, #1338]
  • --
  • Add more and configurable columns to entry table and allow copying of values by double click [#1305]
  • --
  • Add KeePassXC-Browser API as a replacement for KeePassHTTP [#608]
  • --
  • Deprecate KeePassHTTP [#1392]
  • --
  • Add support for Steam one-time passwords [#1206]
  • --
  • Add support for multiple Auto-Type sequences for a single entry [#1390]
  • --
  • Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 [#1060]
  • --
  • Replace qHttp with cURL for website icon downloads [#1460]
  • --
  • Remove lock file [#1231]
  • --
  • Add option to create backup file before saving [#1385]
  • --
  • Ask to save a generated password before closing the entry password generator [#1499]
  • --
  • Resolve placeholders recursively [#1078]
  • --
  • Add Auto-Type button to the toolbar [#1056]
  • --
  • Improve window focus handling for Auto-Type dialogs [#1204, #1490]
  • --
  • Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412]
  • --
  • Add optional dark tray icon [#1154]
  • --
  • Add new "Unsafe saving" option to work around saving problems with file sync services [#1385]
  • --
  • Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537]
  • --
  • Add diceware password generator to CLI [#1406]
  • --
  • Add --key-file option to CLI [#816, #824]
  • --
  • Add DBus interface for opening and closing KeePassXC databases [#283]
  • --
  • Add KDBX compression options to database settings [#1419]
  • --
  • Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327]
  • --
  • Correct reference resolution in entry fields [#1486]
  • --
  • Fix window state and recent databases not being remembered on exit [#1453]
  • --
  • Correct history item generation when configuring TOTP for an entry [#1446]
  • --
  • Correct multiple TOTP bugs [#1414]
  • --
  • Automatic saving after every change is now a default [#279]
  • --
  • Allow creation of new entries during search [#1398]
  • --
  • Correct menu issues on macOS [#1335]
  • --
  • Allow compilation on OpenBSD [#1328]
  • --
  • Improve entry attachments view [#1139, #1298]
  • --
  • Fix auto lock for Gnome and Xfce [#910, #1249]
  • --
  • Don't remember key files in file dialogs when the setting is disabled [#1188]
  • --
  • Improve database merging and conflict resolution [#807, #1165]
  • --
  • Fix macOS pasteboard issues [#1202]
  • --
  • Improve startup times on some platforms [#1205]
  • --
  • Hide the notes field by default [#1124]
  • --
  • Toggle main window by clicking tray icon with the middle mouse button [#992]
  • --
  • Fix custom icons not copied over when databases are merged [#1008]
  • --
  • Allow use of DEL key to delete entries [#914]
  • --
  • Correct intermittent crash due to stale history items [#1527]
  • --
  • Sanitize newline characters in title, username and URL fields [#1502]
  • --
  • Reopen previously opened databases in correct order [#774]
  • --
  • Use system's zxcvbn library if available [#701]
  • --
  • Implement various i18n improvements [#690, #875, #1436]
  • --
--
--
-- -- --
    --
  • Prevent database corruption when locked [#1219]
  • --
  • Fixes apply button not saving new entries [#1141]
  • --
  • Switch to Consolas font on Windows for password edit [#1229]
  • --
  • Multiple fixes to AppImage deployment [#1115, #1228]
  • --
  • Fixes multiple memory leaks [#1213]
  • --
  • Resize message close to 16x16 pixels [#1253]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Fixed entries with empty URLs being reported to KeePassHTTP clients [#1031]
  • --
  • Fixed YubiKey detection and enabled CLI tool for AppImage binary [#1100]
  • --
  • Added AppStream description [#1082]
  • --
  • Improved TOTP compatibility and added new Base32 implementation [#1069]
  • --
  • Fixed error handling when processing invalid cipher stream [#1099]
  • --
  • Fixed double warning display when opening a database [#1037]
  • --
  • Fixed unlocking databases with --pw-stdin [#1087]
  • --
  • Added ability to override QT_PLUGIN_PATH environment variable for AppImages [#1079]
  • --
  • Fixed transform seed not being regenerated when saving the database [#1068]
  • --
  • Fixed only one YubiKey slot being polled [#1048]
  • --
  • Corrected an issue with entry icons while merging [#1008]
  • --
  • Corrected desktop and tray icons in Snap package [#1030]
  • --
  • Fixed screen lock and Google fallback settings [#1029]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Corrected multiple snap issues [#934, #1011]
  • --
  • Corrected multiple custom icon issues [#708, #719, #994]
  • --
  • Corrected multiple Yubikey issues [#880]
  • --
  • Fixed single instance preventing load on occasion [#997]
  • --
  • Keep entry history when merging databases [#970]
  • --
  • Prevent data loss if passwords were mismatched [#1007]
  • --
  • Fixed crash after merge [#941]
  • --
  • Added configurable auto-type default delay [#703]
  • --
  • Unlock database dialog window comes to front [#663]
  • --
  • Translation and compiling fixes
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Added YubiKey 2FA integration for unlocking databases [#127]
  • --
  • Added TOTP support [#519]
  • --
  • Added CSV import tool [#146, #490]
  • --
  • Added KeePassXC CLI tool [#254]
  • --
  • Added diceware password generator [#373]
  • --
  • Added support for entry references [#370, #378]
  • --
  • Added support for Twofish encryption [#167]
  • --
  • Enabled DEP and ASLR for in-memory protection [#371]
  • --
  • Enabled single instance mode [#510]
  • --
  • Enabled portable mode [#645]
  • --
  • Enabled database lock on screensaver and session lock [#545]
  • --
  • Redesigned welcome screen with common features and recent databases [#292]
  • --
  • Multiple updates to search behavior [#168, #213, #374, #471, #603, #654]
  • --
  • Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480]
  • --
  • Fixed auto-type errors on Linux [#550]
  • --
  • Prompt user prior to executing a cmd:// URL [#235]
  • --
  • Entry attributes can be protected (hidden) [#220]
  • --
  • Added extended ascii to password generator [#538]
  • --
  • Added new database icon to toolbar [#289]
  • --
  • Added context menu entry to empty recycle bin in databases [#520]
  • --
  • Added "apply" button to entry and group edit windows [#624]
  • --
  • Added macOS tray icon and enabled minimize on close [#583]
  • --
  • Fixed issues with unclean shutdowns [#170, #580]
  • --
  • Changed keyboard shortcut to create new database to CTRL+SHIFT+N [#515]
  • --
  • Compare window title to entry URLs [#556]
  • --
  • Implemented inline error messages [#162]
  • --
  • Ignore group expansion and other minor changes when making database "dirty" [#464]
  • --
  • Updated license and copyright information on souce files [#632]
  • --
  • Added contributors list to about dialog [#629]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Bumped KeePassHTTP version to 1.8.4.2
  • --
  • KeePassHTTP confirmation window comes to foreground [#466]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Fix possible overflow in zxcvbn library [#363]
  • --
  • Revert HiDPI setting to avoid problems on laptop screens [#332]
  • --
  • Set file meta properties in Windows executable [#330]
  • --
  • Suppress error message when auto-reloading a locked database [#345]
  • --
  • Improve usability of question dialog when database is already locked by a different instance [#346]
  • --
  • Fix compiler warnings in QHttp library [#351]
  • --
  • Use unified toolbar on Mac OS X [#361]
  • --
  • Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Ask for save location when creating a new database [#302]
  • --
  • Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265]
  • --
  • Prevent Qt from degrading Wifi network performance on certain platforms [#318]
  • --
  • Visually refine user interface on OS X and other platforms [#299]
  • --
  • Remove unusable tray icon setting on OS X [#293]
  • --
  • Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup [#307]
  • --
  • Fix AppImage tray icon on Ubuntu [#277, #273]
  • --
  • Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu [#276]
  • --
  • Fix result order in entry search [#320]
  • --
  • Enable HiDPI scaling on supported platforms [#315]
  • --
  • Remove empty directories from installation target [#282]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]
  • --
  • Escape HTML in dialog boxes [#247]
  • --
  • Corrected crashes in favicon download and password generator [#233, #226]
  • --
  • Increase font size of password meter [#228]
  • --
  • Fixed compatibility with Qt 5.8 [#211]
  • --
  • Use consistent button heights in password generator [#229]
  • --
--
--
-- -- --

Changes included in this release:

--
    --
  • Show unlock dialog when using autotype on a closed database [#10, #89]
  • --
  • Show different tray icon when database is locked [#37, #46]
  • --
  • Support autotype on Windows and OS X [#42, #60, #63]
  • --
  • Add delay feature to autotype [#76, #77]
  • --
  • Add password strength meter [#84, #92]
  • --
  • Add option for automatically locking the database when minimizing the window [#57]
  • --
  • Add feature to download favicons and use them as entry icons [#30]
  • --
  • Automatically reload and merge database when the file changed on disk [#22, #33, #93]
  • --
  • Add tool for merging two databases [#22, #47, #143]
  • --
  • Add --pw-stdin commandline option to unlock the database by providing a password on STDIN [#54]
  • --
  • Add utility script for reading the database password from KWallet [#55]
  • --
  • Fix some KeePassHTTP settings not being remembered [#34, #65]
  • --
  • Make search box persistent [#15, #67, #157]
  • --
  • Enhance search feature by scoping the search to selected group [#16, #118]
  • --
  • Improve interaction between search field and entry list [#131, #141]
  • --
  • Add stand-alone password-generator [#18, #92]
  • --
  • Don't require password repetition when password is visible [#27, #92]
  • --
  • Add support for entry attributes in autotype sequences [#107]
  • --
  • Always focus password field when opening the database unlock widget [#116, #117]
  • --
  • Fix compilation errors on various platforms [#53, #126, #130]
  • --
  • Restructure and improve kdbx-extract utility [#160]
  • --
--
--
--
-- --
-diff -urNr keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.desktop keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.desktop ---- keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.desktop 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.desktop 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --[Desktop Entry] --Name=KeePassXC --GenericName=Password Manager --GenericName[ar]=مدير كلمات المرور --GenericName[bg]=Мениджър на пароли --GenericName[ca]=Gestor de contrasenyes --GenericName[cs]=Aplikace pro správu hesel --GenericName[da]=Adgangskodehåndtering --GenericName[de]=Passwortverwaltung --GenericName[es]=Gestor de contraseñas --GenericName[et]=Paroolihaldur --GenericName[fi]=Salasanamanageri --GenericName[fr]=Gestionnaire de mot de passe --GenericName[hu]=Jelszókezelő --GenericName[id]=Pengelola Sandi --GenericName[it]=Gestione password --GenericName[ja]=パスワードマネージャー --GenericName[ko]=암호 관리자 --GenericName[lt]=Slaptažodžių tvarkytuvė --GenericName[nb]=Passordhåndterer --GenericName[nl]=Wachtwoordbeheer --GenericName[pl]=Menedżer haseł --GenericName[pt_BR]=Gerenciador de Senhas --GenericName[pt]=Gestor de palavras-passe --GenericName[ro]=Manager de parole --GenericName[ru]=менеджер паролей --GenericName[sk]=Správca hesiel --GenericName[sv]=Lösenordshanterare --GenericName[th]=แอพจัดการรหัสผ่าน --GenericName[tr]=Parola yöneticisi --GenericName[uk]=Розпорядник паролів --GenericName[zh_CN]=密码管理器 --GenericName[zh_TW]=密碼管理員 --Comment=Community-driven port of the Windows application “KeePass Password Safe” --Comment[da]=Fællesskabsdrevet port af Windows-programmet “KeePass Password Safe” --Comment[et]=Kogukonna arendatav port Windowsi programmist KeePass Password Safe --Exec=keepassxc %f --TryExec=keepassxc --Icon=keepassxc --StartupWMClass=keepassxc --StartupNotify=true --Terminal=false --Type=Application --Version=1.0 --Categories=Utility;Security;Qt; --MimeType=application/x-keepass2; -I file binari keepassxc-2.6.4-orig/share/macosx/background.tiff e keepassxc-2.6.4-patched/share/macosx/background.tiff sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/DS_Store.in e keepassxc-2.6.4-patched/share/macosx/DS_Store.in sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/embedded.provisionprofile e keepassxc-2.6.4-patched/share/macosx/embedded.provisionprofile sono diversi -diff -urNr keepassxc-2.6.4-orig/share/macosx/Info.plist.cmake keepassxc-2.6.4-patched/share/macosx/Info.plist.cmake ---- keepassxc-2.6.4-orig/share/macosx/Info.plist.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/macosx/Info.plist.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ -- -- -- -- -- NSPrincipalClass -- NSApplication -- CFBundleAllowMixedLocalizations -- -- CFBundleDevelopmentRegion -- English -- CFBundleDisplayName -- ${PROJECT_NAME} -- CFBundleExecutable -- ${PROGNAME} -- CFBundleIconFile -- keepassxc.icns -- CFBundleIdentifier -- org.keepassxc.keepassxc -- CFBundleInfoDictionaryVersion -- 6.0 -- CFBundleName -- ${PROJECT_NAME} -- CFBundlePackageType -- APPL -- CFBundleShortVersionString -- ${KEEPASSXC_VERSION} -- CFBundleSignature -- KPXC -- CFBundleVersion -- ${KEEPASSXC_VERSION_NUM} -- NSHumanReadableCopyright -- Copyright 2016-2020 KeePassXC Development Team -- CFBundleDocumentTypes -- -- -- CFBundleTypeExtensions -- -- kdbx -- -- CFBundleTypeIconFile -- keepassxc.icns -- CFBundleTypeName -- KeePassXC Password Database -- CFBundleTypeOSTypes -- -- kdbx -- -- CFBundleTypeRole -- Editor -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/share/macosx/keepassxc.ai keepassxc-2.6.4-patched/share/macosx/keepassxc.ai ---- keepassxc-2.6.4-orig/share/macosx/keepassxc.ai 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/macosx/keepassxc.ai 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7697 +0,0 @@ --%PDF-1.6 % --1 0 obj <>/OCGs[32 0 R 33 0 R 34 0 R 35 0 R 36 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream -- -- -- -- -- Adobe Illustrator 25.0 (Windows) -- 2020-12-20T17:21:23+02:00 -- 2020-12-20T17:21:25+01:00 -- 2020-12-20T17:21:25+01:00 -- -- -- -- 256 -- 256 -- JPEG -- /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq6uKtVxVuuKurirq4q6uKurirq4q6uKurirq4q6uKtVxV 1fH78VbxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVaWr8sVarirq4q6uKuJA3OKpL5g8 6eV/L1v9Y1jUreyjoSpmkVC3HrwBNW/2IOKvNtY/5yi8g2krxWEV5qbBarJBBwjJ8C07Qt1/yT9O Ksam/wCcspfVIg8rTPH2drqND18PTb9eKui/5yyl9QCbytOsfdluo3PXwMafrxVk2kf85QeQbuVI r+O80xmHxSTwFow1NxygaY9e5UYq9I8v+c/LHmC3M+j6jb3sa05mGRXKk9nANUPs1MVTqtcVdXFX VxV1cVcGp8u+Kr8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVWyGgp44qp1xV1cVdXFUr8xeZ9 E8u6bLqOr3UdpaQirySGnyAAqWJ7KASe2Kvnjzf+fnnHzReHSPJNrLZQTMY4rn0/VvJdt/SjHNY+ /Zm77YqoaH/zj55h1a4OpebdRMM8rB5RIxvLtiNviYtwXb/LJHcYq9D0r8lfy809FDae9/IpqJbu Zyf+Bh9FKfNTirIY/Jfk+MUXQNNp/lWcD/i6McVdJ5L8nyCj6BptD/LZwJ+KIpxVj2q/kr+XuoIw SwksJGNfVtJnr/wE3rJT5KMVefa5+QPmPSLj9JeVNQNxNEeUfpsbS8WhqOLBuDU9nBP8uKonyj+f nm3yzdnSvOlrLeW8J4S3Hp+neQ9NpIiFElB/qt/rHFX0J5e8zaL5h06LUdJuo7u1l+zJGaio6gjY hh3Uio74qmdcVdXFXVxVfE1QQeo/Viq/FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqoSt+9I8APx rirVcCurirHPPXnnRvJ+iS6nqUlAPgghXeSWUglY0HdjT6BudsKvm+20/wA8/nB5lN5fyGDTLdvg U8jbWkZ/ZUbepMw6929lGyr3jyn5I8v+VbP6vpVuFlYUnvJKNPL/AKzU2X/JWgwKnvHCrTK3E8QC 1PhB2FcVfO03n/8AMKSRhNq8kMiMVaJI4k4sDQg0Su1O+amWrnbinIV1t59/MJZlWHV5JpHIVI3j hcMSaAbp44I6udqMpfRAU03G/fNu5TuOKpF5s8kaB5ps/Q1S3BmUUgvY6LPF/qt3X/JaowK8LntP O/5Q+ZPrFk4nsLk1K/ELW7jU9CN/TlUHr1X/ACl6lX0Z5G88aP5v0SLU9Oc7nhPA+0kUqgFo3HZh X5EbjY4qyOuBXVxV0bATAd2U/gR/XCqIxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoWU/v2+Q/j irVcCoXU9StdNsJ767kWK3t0aSWRtlVUBZmPsAMVfL0r65+b/wCYCyAvFpUHL6orfZt7UH4pWAJU ySbfTRa0GKvojRtE0zQtJh06wjENnbLtWlSf2nc7VZupOFXlH5gfmrdXbzaX5blMNqlUn1JftSeI hP7K/wCV37Zr9Rq62i0Ty9A9X8vxoNB00ISyC1g4sdyR6a0JzOh9IbhyR/DJJYP5q/KbSdavZL+1 uG068mPKfigkidu7cKoVY9yD9FcxM2kEzY2LVPEC35V/KjSdEvEv7m4bUL2I8oCyCOJD2YJVyWHY lvorjh0ggbO5WOIBm/DMttS7zGqjy9qhYlVFpPVl6j922498jP6Sg8nlv5ffmpcW3o6Z5klMtu1F g1JvtIdgFmPdf8v7/HMHBq+kmmGXoXqeuaBpmvaTNpmox+taXAFabMrDdXRuzKeh/hmwb3z7ay65 +Uvn5vULS6bNxFyEFFuLUt8Myr/vyPfbxqtaGuBX05puo22o2MF7ayCW3uEWSKRejK4DKR7EGuKo quKtRn/S4/8AVf8A41wqjMVdirsVdirsVdirsVdirsVdirsVdirsVdiqEnP79vkP44qsrgV4X/zk Z5ukdbTyjaMR9b/0nUSOnoI1EjPX7ci1PsvvhVm35U+SU8s+WIhNGF1O+Cz3pI+Jaj4Iv9gDv/lE 4ArGfzg85ycz5X05+PJa6pKp3CsKrCCP5gat7UHjmBrNRw+kNOWfR5aIVVOIG1M1NuO9/wDyv1iP VPJ9mtR69gPqc6+HpABPvj45vtLk4oDycvGbDLOGZDN3DFXcMVdwxVh35sazHpnk67hDD6xqI+pw p3Ik/vD9EfLMfVZOGBYZDQeCiIFOJHbNDbiPV/yh85SSEeW9RkLOgLabKxqSiirREn+Ubr7bds22 i1HF6TzcjFO9k/8AzZ8lx+Y/K8zwxctT04NcWZA+JgB+8i/2ajYfzAZnluYl/wA48+bpWiuvK90/ L6qPrOnk/wC+HYCRK/5EjAj2bwGFXttcCuhP+lx/6r/8a4VR2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxVBXJ/0hvkP44qoyycI2buBt88Cvmryvbf45/OG41CZfUsvrLTCoG9paUWIEVIo/Fa/62JV 9BeY9Yh0XQ73VJQCtrEXVT+0/RF/2TEDI5J8MSUE0HzS8k9xPLdXLGS5uHaWZz1Luak5zk5mRsuE TbuORtCfeSvN1x5W1c3XFptPuQEvrdaVKj7LrX9pKmniKj3zK0uo8M+TZjnRfQGmanp+qWUd7p86 XFrKKpIhqPcHuCO4O4zeRkJCw5QNoqgwpdQYqgtX1jTNHsZL7UZ0t7aMbu56nsqjqxPYDBKQiLKC afPnnHzXdeataN66mKxgBjsbc9VQnd26/E3f7s0eq1HGfJxck7SfjmLbWvt57i0uYby2bhc2zrLC /gymoyUJmJsJBp9LaDqsGr6NZ6lCKJdRLIV/lYj4l/2LVGdHCfFEEdXNBsPn3XYl8jfm8l2lYbCO 6Seqio+qXYpKoXuFDuo+Xjkgl9JoxKgnr3+eKr7c/wClp/qv/DCqPxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KoC7NLhv8AVH8cVY9531FtP8paveq3F7e0nkjbf7axMU6f5VMVeW/8436Ssa6nfkEt HFDbRuep5lnff/YLg6qyn87L9o9BstPUkfXLgNJ4FIRWn/BMpzB7QnUK72rMdnkXDNHbiu4Y2ruG Nqyj8rJru287WMEE7x2116wuYFJCScYJGXkvQkMoIzP0OQ+IB0bcR3e5Q6hYTXEttDcxS3MH99Aj qzp/rKDVfpzdAhyrRGFXz9+Zstze+eNRjnnkktrVo0toHYlI/wB0hbivQcmqc0muynjIcXLLdjoQ DYZgW1N8MbV3DG1ew/kxqDS+X7qwY1NlOTGPBJhyH/Dhs3nZ87hXc5WE7MS/5yK01frWj6gq/FNF NbSN7RlXQf8AJRszm16p5K1VtU8p6TfyPzluLWJpm8ZAoWT/AIcHCqfWpreJ/qN/DFUwxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2Kpden/SD/qj+OKsG/OFiPy312grW3Cf8HIi/wAcVST/AJx+RR5Z 1AgfEbuhPsIkp+vB1VQ/Ows2oaOpPwrHOQPdmjr/AMRGartM/S0Z+jzrjmotx3ccbV3HG1ZJ+Wy0 89aV85/+oaTMzQf3o/HRsxfUzPyTGo/MvzW4G7Hc/wCzGbPAf3026P1F6Nma2vFfzL8p6jYa1c6z vPYX7hjKBvE5AHB/bb4T9GaTX4JCXF0LjZYm7YZxzXW0u442ruONq9I/JVmW81hP2WjgY/MGQfxz bdln6vg34Orv+cg0U+XtKenxC9Kg+xhcn/iIzbdXIZR+VtB+X+i0BA9A7H/jI2FWX2Z/0xf9Rv4Y qmWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVLb8/wCkn/VH8cVYl+ZVpJeeQPMEMYq/1GZ1G3+6 19Tv/q4qxP8A5x+ulbR9UtR9qKeKU/KVCo/5NYOqor86LQk6RdgbKZonb3bgyj/hWzVdqDaJaM45 PNeOaa3HdxxtXccbVkf5crTzxpXzn/6hpMzOzz+9Hx+5sxfUzLyYP+Qj+afn/wAbjNng/vpt0fqL 0LM9tYt5/wDNukaHpLw3caXlzeKUg09qH1AdiX8EHc/dmPqc0YR33vownIAPD1BIqQFrvxHQe29c 5olw13HBau442r0z8mbUqurXRGzGGJT7qHZv+JDNz2WNpFyMHVAf85CXIGm6LaV3luJpgPaKML/z Nza9W9mX5do0fkbREYUYWy1B9ycKsosT/pi/6jfwxVNMVdirsVdirsVdirsVdirsVdirsVdirsVd iqV6if8ASf8AYj+OKoOeCK6t5bWXeK4jaKQf5LqVP68VeK/kndS6R5xvdDumAklSW2cdKz2jn/jU PgKvTvzI0ltR8q3Hprymsyt1GP8AjHUP/wAk2bMTXY+PEfLdryCw8VC1Fc5lxG+GNq7hjash/Lxa edtK+c//AFDyZndn/wB8Pj9zZi+pmHk0f8hF80H3/wCNxmz0/wDfzbo/UXoGbBteV/mn5Rhiuj5k jnqZikU8Er71GymHl28VHTrmo7SwGuMFozR6sC4Zpbcd3DG1dxxV7X+XelNp3la2DjjLdk3Ug/4y U4/8Iq502hx8GIee7l4hQeW/nNetq/nq00a3NTaRxW5pU0muW5HYf5BTMsNj2q1tYrK0gs4j+6to 0hQnrRFC/wAMKo3Tz/pi/wCo36xiqa4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq1I/wClf7Ef xxVChqGuKvFPzNsbjyx5+tfMdgvGO9ZbyMVoDPCQsybdnFCfHkcSr2vTNQs9V0yC+tmElrdxh077 MNwR4joRg5q8Y82+XH0LWJLZQfqktZbNz3jJ+zXxQ7fj3zl9bp/CnXQ8nDyRopNwzEtrdwxtU/8A IC086aX85/8AqHkzO7OP74fH7m3F9TLfJw/5CH5n+f8AxuM2un/v5t0PqLP82Da8M893Wo33m69S 8m5w2T+laQjZESgPT+Y9znPdo5pHIYnkHFyy3SfhmttpdwxtU88neXH1vWY4WU/U4SJLtu3AHZPm 52+/wzL0Wn8WddBzbMcLL2PV9Us9H0m51G6PC1s4mkengo2VR4noBnUOY8T/ACu0+88x+d7rzJeb CCRruUmpHqymiRrUdFXb2FMICvbeWKojTT/pg/1G/WMVTfFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYqlGqH/Sv9iP44qhK4qknnPyxF5m8vT6aaC7jPr6fIduM6A0FfBwSp+eKsB/KLzfJpV/L5V1es KPKwtfUNDFcVo8Jr05Hp/lfPAVepeZPL1prunNaz/BKvxW846xv4+4PcZRqdOMseEsZx4g8Z1TSL /S7x7O9iMcydD+yy9mQ91OctmxSxy4ZOHKNc0JxOVWhMfLmqQaRr9jqVwrNb27P6vDchZI2jrT25 VzK0eUY8gkeTKBo29vtLm1u7eO6tZFlgmUNHKhqGB71zqokEWHNDry8tbK1kurqVYbeFS0kjmgAG JIAsq8K1vU7fV9ev9TtkZLa5cGIMKEhVCciP8rjXOW1uUTyEjk4eQ2UJxOYlsEZpWj3+q3iWdlGZ JW3J6Kq92Y9gMtw4pZJcMUxjfJ7N5d8v2eh6ctpb/G5PKecijSP4+wHYZ1Om08cUeEOZCPCHk/5v ecJNa1KPyppBM0MMoF6UNfUuAfhiFOyHdv8AK+WXhk9C8meWYfLegQ2CnlcvSW8kHRpD4Cg6DbfC qeVxVFaYf9MH+o36xiqcYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn1Y/6UP8AVH8cVQVcVcGI NQdxirAPzQ/L59XVtf0aMtqcYH161TrKiDaVP8tQKUHX59VV35a/mjFfRw6LrknDUVolvdvQLN2C se0nb3+eDkrP9Z0PTNYtfq99FzUbxyLs6E90b/MZTn08MoqQYyiDzea63+XutaezSWqm/tR0eIH1 QP8AKj3P/A1+jOf1HZuSG8fUHGliIYw0fVWG42IPjmu5NadeUPNd15cuvRl5TaRM372EbmIn/dif 8bDv882eh15xmpfS248lKXnDzTeeZr30Y+UOjQNWGE7GUj/dkg/UO3zw67X8e0fpXJktKo4fsogq TQKoG5OavctTKND/AC81nUGWS7U2Fqdy0o/eEf5Mex/4KmbHT9m5J7y9IbI4iXpOj6Hpuj2v1exi 4Kd5JG3dyO7t/mM6DBp4YhUQ5MYgcnnf5nfmmLQS6F5el56g3wXd6m4hHQoh7yf8R+eXc2Tf5Wfl +dGiTXdUjpqMyk2du4+KJW6u1f2mH+fXCr0EsSak74q6uKozSt7wf6jfrGKpzirsVdirsVdirsVd irsVdirsVdirsVdirsVSnWUpIknYjj9PXFUurgV1cVXJIyMGU0YdDhVg3nn8rLPXi+o6IsdpqpFZ rOgSKcjfkp6K5+49/HFWM+XvzO8y+Vbk6R5ltpbmCD4aPtcxgbbFtpF8Kn6cFK9W8v8AnHy5r8Qf TL1JZKVaBjwmX/WjajY2qYXulaZf73tpDcNSgeRFLgez/aH35VkwQn9QBQYg80ofyB5Tf/jyK+yy y/xY5inszB3faWHhRdH5A8pp/wAeRb2aWX/jVhiOzMHd9pXwopvZaVpljvZWkNu1KF40UOR7t9o/ fmVjwQh9IAZiIHJL/MPnPy35fiL6nexxSUqlup5zN/qxrVjltpeTeYPzM80+brn9D+WrWW1tpvhI Te6kXoeTD4Yl333+nGlZR5E/Kyw0ARajqwW51ZaPDbj+7gI3BNftP3rhVnLOWap64q1XArq4qmGj ITM79lHH6euFU3xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KobULb6xbMg+0KFT7jFWPVO4OxGxH gcVbrirq4q6uKofV9L0bXLYW2tWi3kagiOQ/DKle6uKHFXnms/keWl+seXNTHINWO3uiY5F/1ZUH b5fTiqWmP87fLhEY+uTwoaKpC3qsB4ECR6fTgpVzfmx+ZdowjvNNgB32ltpo3JH+yp+GNK4fmx+Z l2xSz02AnbaO2mkcV/2VPwxpVhh/O7zETE31y3ib7SALZAA99xHJTGlTLRvyNVJTceYtSBcsTJb2 pMjv3qZX8e/w/ThV6JpOmaPolt9W0a0WzjP25BvK/wDrufiOKoiuKurirq4q0W6AbkmijxJxVkOn Wxt7YK32zUsfc4qicVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSnVNMZiZ7cDmB8afzYqlAcc ipqGXqp2OKt1xV1cVdXFXVxVUS5nj+xIyjwBNMVVP0jdkUL8v9ZVP6xirhqF0Ojhf9VVH6hiqm9z PJ9uRmHgSaYqp1xV1cVdXFXVxVaZAGCirOeijc4qm+laW6kXFyAWp8Cfy4qm+KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KoW70y0uh+9X4uzDY4qlsnl2Uf3M7U8GNf1jFVL9Aah/v5fw/pi rv0BqP8Av5fw/pirv0BqP+/l/D+mKu/QGo/7+X8P6Yq79Aaj/v5fw/pirv0BqP8Av5fw/pirv0Bq P+/l/D+mKu/QGo/7+X8P6Yq79Aaj/v5fw/pirv0BqH+/l/D+mKqkfl2Vv76c08FNP1DFUytNMtLU fu1+Lux3OKovFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== -- -- -- -- 1 -- True -- False -- -- 128.000000 -- 128.000000 -- Millimeters -- -- -- -- Cyan -- Magenta -- Yellow -- Black -- -- -- -- -- -- Default Swatch Group -- 0 -- -- -- -- R=252 G=252 B=252 -- PROCESS -- 100.000000 -- RGB -- 252 -- 252 -- 252 -- -- -- R=0 G=0 B=0 -- PROCESS -- 100.000000 -- RGB -- 0 -- 0 -- 0 -- -- -- R=103 G=186 B=45 -- PROCESS -- 100.000000 -- RGB -- 103 -- 186 -- 45 -- -- -- R=49 G=115 B=41 -- PROCESS -- 100.000000 -- RGB -- 49 -- 115 -- 41 -- -- -- -- -- -- -- application/pdf -- -- -- keepassxc -- -- -- AIRobin -- Document -- xmp.did:d533b712-e3e1-2d4d-9d10-810ee84643e0 -- uuid:123ce022-0d47-4398-a2b7-3ac78f3a3ee4 -- xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 -- proof:pdf -- -- uuid:c0995094-a15f-431d-a464-7e378391f643 -- xmp.did:f6c53e8e-957b-984c-ae83-7e48da0435ab -- xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 -- proof:pdf -- -- -- -- -- saved -- xmp.iid:2520a7c9-03a3-1044-b2dc-89724d81ad50 -- 2020-12-19T13:48:23+01:00 -- Adobe Illustrator 25.0 (Windows) -- / -- -- -- saved -- xmp.iid:d533b712-e3e1-2d4d-9d10-810ee84643e0 -- 2020-12-19T18:46:26+01:00 -- Adobe Illustrator 25.0 (Windows) -- / -- -- -- -- Adobe PDF library 15.00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/Thumb 77 0 R/TrimBox[0.0 0.0 362.835 362.835]/Type/Page>> endobj 38 0 obj <>stream --HWɎ6+GvszI F`8@|. sfO]V>5ͻze҉7n~d_N1V![ Azr~bԻzXc4PLQ՗#8l{8+IMÄO.؀'PxYxᆋ}e!@w;Ҩۓ~ۧ'=U->xx!zy@+jcXBu7PXL7|ԙsDⲶilxv{eِs BѦR<lѝn@ m!?!l4g15sk@uA̹nx3 5-ґSф "j5^o44$;حB_+-.ikHBنyi9"D.yN.%i@ZHq y/K~-A~2SUid-&\v&6%c&8PBm!(\VsS!>3Hfm(9/RBWJF1E\AG1WRGu\5&c&zTG/uIW9J_n9l6ٶ`Qd^7-9t?2;2;]ڐ誺iUkCRCjj{6$l zDdqƃ~lMPp#6r\8*Al܉; K G`(HJصtqr s^ؐ ɇ{ ۰kqEΉP8,d KXxsnU@_ш(Dsԅ HP )V$;]ٱKz U}\/3@-Ef~9l --a --TBw ܿܚFhDR3_ .kH}ڏFw:`s&> endobj 77 0 obj <>stream --8;Z\tc&omd%#(Z.>iK5:7E$MlS8)@nX*.N7!qYIB9MTq;Go03LnbI_Fbl;Z%nEWj. --/P*gQJZf#&_B[!f`u+4Q#h)=phP8IOSV0h)-1pRZY%i1H9Pi$\n'Y[XFT#%=&j^m9 --ZEd@*AV0LAj;Q!?Fbo6'Z9OQ/[)NeOg* --4E]uKY,GiQCrp^$a_uJ"DP#gpjI$g)o3n]I<>gEm>nOcK[.aGj%:+sUS/H1Or/YXb --S&q1CrZ>Qsh"-qDo#t6,Wt2MN`BfXF9qUpjgcnFeAJEhY?F.8(d5u]7c!/N\Xct_C!Np`=EQ>e.4NVNEX8#0]Qgm-;MFk@W~> --endstream endobj 79 0 obj [/Indexed/DeviceRGB 255 80 0 R] endobj 80 0 obj <>stream --8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 --b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` --E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn --6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( --l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> --endstream endobj 63 0 obj <>/XObject<>>>/Subtype/Form>>stream --q --0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs --0 TL/Fm0 Do --Q -- --endstream endobj 64 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream --q --/GS0 gs --244.1599945 0 0 245.4399945 59.3429222 55.4917377 cm --/Im0 Do --Q -- --endstream endobj 65 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --181.417 57.924 m --113.648 57.924 58.514 113.323 58.514 181.417 c --58.514 249.512 113.648 304.91 181.417 304.91 c --249.187 304.91 304.321 249.512 304.321 181.417 c --304.321 113.323 249.187 57.924 181.417 57.924 c --181.417 309.085 m --111.357 309.085 54.359 251.813 54.359 181.417 c --54.359 111.022 111.357 53.75 181.417 53.75 c --251.478 53.75 308.475 111.022 308.475 181.417 c --308.475 251.813 251.478 309.085 181.417 309.085 c --W n --q --0 g --/GS0 gs --0 -166.2333221 -166.2333221 -0 181.4170837 216.1957245 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 66 0 obj <>/XObject<>>>/Subtype/Form>>stream --q --0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs --0 TL/Fm0 Do --Q --q --0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs --0 TL/Fm1 Do --Q --q --0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs --0 TL/Fm2 Do --Q -- --endstream endobj 67 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --183.733 277.423 m --183.733 277.423 l --182.944 277.423 182.154 277.406 181.385 277.373 c --181.373 277.373 l --175.66 277.373 169.677 276.834 164.101 275.815 c --163.599 275.723 l --163.5 275.223 l --163.241 273.919 162.973 272.573 162.973 271.211 c --162.973 260.992 171.247 252.677 181.417 252.677 c --191.588 252.677 199.862 260.992 199.862 271.211 c --199.862 272.573 199.594 273.919 199.335 275.221 c --199.236 275.721 l --198.734 275.815 l --194.381 276.61 189.195 277.423 183.733 277.423 c --183.732 276.673 m --188.8 276.674 193.7 275.972 198.599 275.077 c --198.856 273.788 199.112 272.5 199.112 271.211 c --199.112 261.417 191.162 253.427 181.417 253.427 c --171.672 253.427 163.723 261.417 163.723 271.211 c --163.723 272.5 163.979 273.788 164.236 275.077 c --169.877 276.108 175.776 276.623 181.417 276.623 c --182.193 276.657 182.964 276.673 183.732 276.673 c --W n --q --0 g --/GS0 gs --0 -24.7455978 -24.7455978 -0 181.4173279 277.4232788 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 68 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --181.417 294.52 m --119.35 294.52 68.854 243.782 68.854 181.417 c --68.854 119.052 119.35 68.315 181.417 68.315 c --243.485 68.315 293.98 119.052 293.98 181.417 c --293.98 243.782 243.485 294.52 181.417 294.52 c --181.417 293.82 m --243.098 293.82 293.28 243.396 293.28 181.417 c --293.28 119.438 243.098 69.015 181.417 69.015 c --119.736 69.015 69.555 119.438 69.555 181.417 c --69.555 243.396 119.736 293.82 181.417 293.82 c --W n --q --0 g --/GS0 gs --0 -226.2054596 -226.2054596 -0 181.4170532 294.519928 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 69 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --181.417 294.47 m --119.377 294.47 68.904 243.755 68.904 181.417 c --68.904 119.08 119.377 68.364 181.417 68.364 c --243.457 68.364 293.93 119.08 293.93 181.417 c --293.93 243.755 243.457 294.47 181.417 294.47 c --181.417 293.27 m --242.795 293.27 292.73 243.093 292.73 181.417 c --292.73 119.741 242.795 69.565 181.417 69.565 c --120.039 69.565 70.104 119.741 70.104 181.417 c --70.104 243.093 120.039 293.27 181.417 293.27 c --W n --q --0 g --/GS0 gs --0 -226.1058197 -226.1058197 -0 181.4170532 294.4700928 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 70 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --181.417 277.758 m --128.546 277.758 85.532 234.539 85.532 181.417 c --85.532 128.295 128.546 85.077 181.417 85.077 c --234.288 85.077 277.302 128.295 277.302 181.417 c --277.302 234.539 234.288 277.758 181.417 277.758 c --181.417 276.758 m --233.738 276.758 276.302 233.988 276.302 181.417 c --276.302 128.847 233.738 86.077 181.417 86.077 c --129.097 86.077 86.532 128.847 86.532 181.417 c --86.532 233.988 129.097 276.758 181.417 276.758 c --W n --q --0 g --/GS0 gs --0 -192.6805115 -192.6805115 -0 181.4170532 277.7574463 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 71 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --230.042 264.049 m --230.112 263.714 230.173 263.375 230.236 263.038 c --257.765 246.351 276.213 216.009 276.213 181.417 c --276.213 128.896 233.689 86.166 181.417 86.166 c --129.146 86.166 86.62 128.896 86.62 181.417 c --86.62 216.049 105.112 246.419 132.693 263.093 c --132.756 263.432 132.819 263.77 132.889 264.107 c --104.757 247.376 85.849 216.576 85.849 181.417 c --85.849 128.47 128.721 85.395 181.417 85.395 c --234.114 85.395 276.985 128.47 276.985 181.417 c --276.985 216.535 258.12 247.305 230.042 264.049 c --181.417 276.669 m --175.598 276.669 169.9 276.135 164.367 275.122 c --164.437 275.397 164.498 275.677 164.582 275.947 c --170.049 276.927 175.674 277.44 181.417 277.44 c --187.191 277.44 192.846 276.922 198.34 275.931 c --198.424 275.661 198.486 275.381 198.556 275.105 c --192.995 276.129 187.268 276.669 181.417 276.669 c --W n --q --0 g --/GS0 gs --0 -192.0446777 -192.0446777 -0 181.4170837 277.4395447 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 72 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --174.493 196.469 m --167.313 196.469 l --168.313 196.914 l --173.493 196.914 l --h --W n --q --0 g --/GS0 gs --0 -0.4444444 -0.4444444 -0 170.9031067 196.9139557 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 73 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --181.417 57.924 m --113.648 57.924 58.514 113.323 58.514 181.417 c --58.514 249.512 113.648 304.91 181.417 304.91 c --249.187 304.91 304.321 249.512 304.321 181.417 c --304.321 113.323 249.187 57.924 181.417 57.924 c --181.417 309.085 m --111.357 309.085 54.359 251.813 54.359 181.417 c --54.359 111.022 111.357 53.75 181.417 53.75 c --251.478 53.75 308.475 111.022 308.475 181.417 c --308.475 251.813 251.478 309.085 181.417 309.085 c --W n --q --0 g --/GS0 gs --129.5558014 0 0 -129.5558014 181.8615265 172.3060913 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 74 0 obj <>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUv@`Ӽ +1pK}o>^3`u*T +wԥxM=Z8uT0\A=8ٯn --aȰfdr8D嫗# -- tH}#>U&/%{MxG/'?YCW!V=VU:>=0V}e{`'LNT/@}z S`g_gPc`gXH}=`9aS5H=\Vh`fX^}s`V'XT=RvSm`9<R}`_QgX@=HNPrUoS3(Q8O}p3\&G3LP ԧ=0N3nR|`zcܦ}pϪ<7<;\'[-/u;I^T~SgxE x.]zO:Q/Sz5:ԓOԡ>W>WXS'Bro~Wo^SO x]z#uFՋKk1SA;M[GY; e`:.pQnRwa=0R]C]|C7{xukxu .=՝`9pLUgT0_8Mvu~,u]S7NQ7T!8C]tbuu--` u`ouXD$YqQ7 UGU=`1u`GuXO&NoVT 6S5}`Yu`uXX)ElVw --Pեյ`u`uuB+X[]j6Q VVw}eՑ`'u`QuK-XQgS S m`Ku`-uT0XIeU7 QGEI`ou` u]]25uV#9V]bQ Ju8F4 uR7]D`NS u~8O6/'Lu`:.LTgsՍipr0I\Vw un8_:-cխ --u`\Twkqp:z0JXRg ]u`M]>+ (ӂօ@'T}u\Q]?8XVTUM#]`[u8uUXA8JTVgR'CA`wu uNn!)X+WqV̮.)R^Qw~/3 --MU' ]703~;u u>ེ:Q]GxPNLGxHNTHxDMN$<&R7VGn+ w _; w _C { ߨS ws ߩ[ ߪc ߫k ߨS ws _K w _C _3 7Ց[Fl u"u7Su 1u9uAu:ࣺ:AGx\]OxN#<'QRިϩ --Ϫ --O# --M$+/u%uH_uEuJ`~uKX0:PP)#=`suuP[A8HTVgR7Q`_u@uVV@8RU6UUMce`Ku`uZQ]?8\W6TWy`;u u_L>8G]XRgNR'ԍ`#u4udH=8O]YQ'TwMSա`u\uiB;8YZPV Աձ`}uunX^:B[W.Qաk`iu"urXZ9J\VG.SGՑ`YuJuwXT8T^UU%y`Iuju{XP7\_T Wi@_S --uXL6H`1uQYH`Rg *uXH5`!uSWeIPaQ' JuXD4H!`uU%9XbP juX@31`uW)9`zu`u\2Bd&W P1E`ju`uZ1Ed&VG QGqU`Zu` uV0Ie&U RIe`Nu`,uR/LfT FS q`Bu`E`:iX. `,n5`iX f`+`jVX --ƫ`:+`zkƫ --6`:*X`:ln --`)X.`l5N --֨`:)أ^`mƪE. --6`:(X`:n] `'X`n&wm ֩`:'X`zoƩk `&بi`oc V`:&ةQ`pF[n `z%ت>A`:qSN `$ث^1`qƨK. 6`z$ج~!`:rC v'`#ح`rF;/`z#خ`:s3֫3`:#د^}Wo@; WWԝ+ sbuDpB::"8XP@~nGU?7ԣ#H utRuCpE}:z!>PQ@NΨS T'gԩ;du2uApH: 8nL]R@.._RԯPK)uD:v"u@pJ;: FR@ngQԳcH1u$~vu?pL];B\S@o PԹs9u|:wu>pN;:{zw{wz࠺w{໺8z࠺w.zyw~.zx:x>N:8W$0^?Z:xx:xx:xx:xx:xxzxwzxwzxwzxwzxwzxwzxwzxwzxwzxwzxv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺xv੺x:  ԿZx^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^x^W$0^0@̩sPk(v -->W4@-`7}7}3u$~3u$~3u$~3u4/4/4/4+uD+uD+uT'T'T'T'T#ud#ud#uttttuuuuuu u u uuu`_9"Wo@՛Ы/yuPg՗pA/z#WW uG0`[=97zrn?iuQ ՏpE=,z$V7uI0n;`W8w'zqOYuR^ VՇpIz%U)uK0.[`S=8/zpn_IuS pM= &T =M{`O77:os9u\Tk upR'R MO`J7WCm%\UC> --vkpW}(Q eR>`E}6Kln V?~ --&ap]=,z*Pw yuU0zkXPoW --`AWW + WpZ5#:jVceQwK> Ϊ`HU' z->%ZpT]4[zhoIuXS? {`O}S .8Au^pN3f{1ul[T1 ._`U=R 08n]apG2:eՋ,#V?7#~ NC`]=\P z28}eЫ7`_}@_/m#Q-W>k'%Q"~}  @n15Xbf{P Ru.0E]4`iЩ+ u SGI@n0UH`fRw u.0M]6`mpS .W0S7V]^f TuJuw.\.sՍ`qp:LVWR7E0[9D\KW{ tuunnWrulA];Xn-;kթ`u`:.Tw]yN]YQ7# N"ubK=X.,{Kԁ`7u`.,Pq`Gulu[Q]?8YVTUM3]`WuDuVW@8O]UU7NSGI`ouuQ[A8ETvWNP@BxYSV|{uJMCxM]RxS^R~/3 --M/u:𿺊pPPx"S>G2u>Ouiu<ouYu;:𜺜pKGxJN.$<&|n$<&|$LvuG VG QWR00S/XLf&˩ 3Ǩ}Ap:0p:ܡ ?Gת'gWGsǫ?W[LWwW= :"YwިRE=xY@5u7w>Tz*u-?Rz0:գՉ^PWxM]e|uo'oQ#u u +ԋluԫ\u+LV ԗC0R_}.8G};KnW ՇxD=9Vy9U}g`GmWg#`#IJC}ZFƫ9zLVp`.>ju0O} `hw --VoS LP/W^-˪40K]Tf`zXXE}1Ы/1z l6۩ l9O-zܮ>!pG --@O*pz --\> --F=>73VP|M>PG --&@=>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvEn }KLόzW~>jXs'纒t~O7`4uAqk~w >So-갾LiuL' :V~8ԧԭ<(p..F}(V|:'VlޕԷ`Yu.>*˩wiqXGݶ;o I}kU0:b7VJfPW+C`lurc;Y0PJFQ)#W7)ST(@PR p=yY=!PW'oR sս[s,uirzT_ݘT%'a:)N5^P$s$Q IX=@!3[u22z|ESOԡȈUA &7
.CWolBfR`cu --2z39ջO]̫.VcrQ G :XEdսJ5,N=SO`Qu汤z eXLw7:c}PW{w0Gu5^L96T`JuızөJol~Ө ;uC^l_VܨPG0:a.4L6R|~ S1UGWUV]cO Rg<~6حmuJˑe}v$@ta@N0xQ=n/8^(uwa NQ rupi1\-8S'ԥg7pP7\^꾂8SVpz` --.W uU --pPS0P=7#ꖂ(KꈂD=<z{ϩ BQ<&#xHM0z? fQo{u-D9|n%KHԝөG 𹺒`F.VL&GuuWL(2O]Ezo&5K{Q]]CzԓUw^-`Ip 즮XX=_`/uWE]=p=P/w61wWIgҁ' W9p;+5pGuMzqwVlQw _r&ꨁ;.D=u`}u>cvRXY]2zꎁԫUG =``S۪Y`)uQw l>`uxH, սR0V;V --N}RT0:SWT7 --Յ|`>u_L'R !y]> `u?oC$#&P +\#ZuO(%< Sw4J]!u`>Up@} HuySwpT" ut? Q'pIQ p:7o\n DWK8U})uNV --p2շ\n --F-R p:.N J'V1Y.W p)P0D}5quOgU0L}71uKՇQ0T}9OxU]p. Q_H}>z2ϩ<. U_X}Bjr @}D#bP_Ig`߫[H}HwRR_ԧ|`:-P}LgBT_I`V;q̫'u3 --x`nGY̮~): --?N`Qo"P_ ݁g5,+]B)vGw3vgێxDVGXK,8X}c'XO-8T}#XR.8QxyU NSo?:`pzn}`uu;'@28C 6Q P=fz}=S.lz`+u`gWN5V=~vT TTO(G --P  Q>P'@/OH_x[=z:2uMtt[nZa@W EQ|] NR`lgUW>V&@0|MZaP=:z2zu#`pN=}sz1 V'cn8Գ0ZqNg`Rpu8=pH=zzƫCW#XN9Gԃ@r`P --u8;p@=vK9zslQX:SG]t`,W"uX:MZ=sQ`zVjRWX:#LuG`UO:uX8}Upe`zRlT}بn;+RwV `lTNuX7P=n[}`z:Uuiث.<W]x `:,Sfuإ5J=kՑ`zv+&VWEQX<ԣ]y7 `QOzuX4Ehե`zS\P=n=+spB{V lP uX3#@=fGԹ`z{xQ)8>SpG]| W!u2C0\=d`zNhRG>+pK]}G : V1u1k0V=a`zΩXS.?CpP~ : UEu/nHn0i*8#|:S|TWeuJQ]Ց: #'uVG --O,0]`W(>:Q|QYuDEfՉ: ̪WuXU --20i`T(:P|SQuN@]6}໺ lwuT 80/q`R'^:OREux:J]q: KuT <0/y`P'^MV=uxs4Fi:̩u S 7@0Nԅ`M]&ީ LS5ux.c0Va:[u"S D0Ս`K%ޫKW7-uxnS,pS,pS,pS,pS,pS,pK*pK*pK*pC(pC(pC(pC(pC(pC(p;&p;&p;&p;&p3$p3$p3$p3$p3$p3$p3$p3$p.+"p.+"p.+"p.+"p.+"p.# pN# pN# pN# pN# pN# pN# pN# pN# pN# pnpn7{uLAA?kNVH$V_#+P[}x`Col?୾ GW --6V_#,PwA8`BuL; uGY0: &pPg#,PwA8`BuL; uGY0: &pPg#,PwE `A,7F\[z pQoz#.-XPoE `A,7F\[z pQoz#.-XPoE `A,7F\[z pQoz#.-XPoE `A,7 uGY0: &pPg#,PwA8`BuL; uGY0: &pPg#,PwA8`BuL; GW --6V_#+P[}x`Col?୾ GW --6V_#*QS]#x`DOuC੮uH-KV%~`KG~ "SOuc৺1S]k5LRz&~`M=C  Su̩k:7777799;z;z;[a1'e["sY/uEu:<P'y8O|U7}ૺ _mMuNuxT(BY]^U --2P|VWՅ: FQU7 --,:R|PgՑ: J --L: --<NKVw --_&SR7՝ux\*W'ե?ux]]*Sե?ux]]*Uթ_ux_*~{VSW --UԱu?5`VP ZC]&k_;R --|w;S --{wbP)bP)bP)bW1dW9f\Ww9f\Ww9fWgAhWgIjVWIjVWIjVGQlVGYn\V7Yn\V7YnV'apV'irUirUirUqtUyv\U?pT= T zM0Q]/`^'HuN~\To?3~fpP=LU z.=0U]0s`:a\uw\S>s 8}#pL=LVW z)0Z1S`cԛlu.7RO>!8|KpGLW zN0_2+`eW{|u P=5^{6kpB=P zءC3`:hSu-W=kIXz]Q7 `zXrI]5`j#*uVG]lVo<]XxX=lS `zئ.ZN6`m[>u,U;uة^w6R=T `zةFS7i`:p VuS;{ՍئuMU7`zج.Y]9]U`rԣnu67,RO:աXtKGlW`zدn_:-=`uKsuv P9'Թov70/If3I3Ypzu8Cw:^<%l9Ǩ'`{u8Gy;9\qNRpzVGԳ:= ,lN8`_u8M|۪qVpSo~pz6U^?-Hl7g`Gu8S O]nNU/ vppzvSws:Ad --쥮6'W`+u8[; HlNW/!>bpz Q-Ek`uBMԹ5uwxIkCԭo=@j_K `yuzVWw7`quzVW~W`iu',,4EՍջ:zU~U/#@mXUg] `MuO:,3|Gm:z!S>V/$r0gXMeL W`-usJ,2|IM; :z)QV/%2 [ 7V,1]kk W%+XAbxE S W^S/&@1LZaxU:z5Zuuj;( wԻ  練SS/'@0NJ_xW:z=u|z? --u{z?uzzA --0]^PULVgW`p]S;n.Q(DurzI w[ --0K[RI}Q`:0B3ԭ=N-Q/* <,Ro*8<,S*H1vQW9:vzρ-ԩ5ԋ.,t`}u`+WX\9XIZeVVSo;oz܁Uunw`Iu`M 7XN5XWjR7 V=hz遅A[,^{`u`k[[XA]2D=.Wg Q>0:bz L~`^u`;S.R}=P.U}/L-YOH,]yԽgE]+y[Gԥ/0Sw'Wg --~H?տZ(W3V --] ayT`PuS&AFT P}]>Q`4uO7K$ QFR R}q=0FC]P8> ԗOP+VU7xB}R] )u:u'VQxA} B]%WwxQ}"^V^us7GS]-SxS}&ԵV ukԇC]Ww8I}*ՑS --Rub3P\.S8[.qW uZK8_"VWL}3sM.T LuQKW8MjNR^7S)P?uH{ԟx[6S7Q}ީU:`L2>Q' % u&hMV#XacVL0zw PNu6A pT=@z| --P'<(Z9%W:2^V\^ꦂ+8HUpzb --T Xu]Ym,8E=,SԑGp:XT^܂S@\pzF ^Uo:uy+\/xVO# V S< @1_Zcpz)# W`un3^h>QhQ --Q՝ՋYj^^_%̠n6P In쬾~ƮQp쨾zYnYr줾v=.KXAt젾rU] XIv,>nԁǢXRy,>juեZ{X[]{e3D}L>aM̪\ ȄW]̥W5<[.BP)] M݆ >NU"cԕpයI}|EQ"^}ܫ.GRԇ3z$T}nI.RG7aLup:09G}WLV_'cԷp: TG*7T/10:Y_}LdTL E, R]V n0 @kÉ#-)ΔpS?{'WjSKx*YP7 ࣎qu&y Yϝzyأ{kQuS_^T5U2ulnRnpS|z(EԻZ7uV؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@`nA --endstream endobj 76 0 obj <>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU a(zKdAZzh *2 ZpI@_уoIyLp1pUz78EJ"Y`tZKvtg^F!tW~abmLwك :Uױ}פ"B"cxş'S_`;|`Ef2'#5Ln30M4fw38 4@b<Ԣ <%<Y)Jiж<:gp>ޜ"J: --(W b~CU+y1kG]V0loEو UZ TdOE?v"9|8!1g)Cq#R<zӃ%yHr'@3@ڏ{\@@yA*S{ z --yjwPc2'Pcwcc)c9Gc cvc/lc?$1x=&9%I$Y uF`^a(3zA3NSˁL+.^ddvr #g #) "1 "9' W 0Ed5L(`E9^h,Jr ,r#+*s(+s#*:pwy9ЄSGNчuR^\<5%(\ hI@іx)'zxl.@%<1X/ (%&$lv4i|uKc^"xL$d)!UtvBb ЖlhTl$\qʒ?p6cC@n3##XPAl M0s'CYP΁GeU@r"&+SO˶ Lc]@%&20esP @ --dg`crS3IXpq&$c`1rR1 )F."^` rLHBnV Z`"bLN@&V {tPLJ@4V $R tLF@P@(O OB(t w4R+%$p,M@ --F {6"Hh=Tc2\`99.XI{@b < 7tXBs@~|J0e`6U30aDR*9XIc De@5 *2l`8OɴTeP:طW) FW@qF*<38H --M:plIN@"&{n~Q䟴aC0ٕ<>rl_ hœfВ8S|/8ZS(41NhO#8r<5>Y>8*8(8&_8|/J>;}>5?>O4[L%?^>NNC _8L05?84xsД?pZs<@CX4cЊs<@#vmX}4aЂs<@xʳ33SJ3s --34zy;"*Px@INyYx`iz;0@5D^ #0PeîCi TtR(¨ `ҁ --0 Zs` --dǵI)q<@fHr /;L9Lu '0@FN` 8>=o` dcEq<@&XH @N`1$6@ --&Xn"% 63@ZAt#H"$L죤J%FD_h L"&<1cy'X4a Db$ --1@dae 6 2>S:kd <,2T@@`9s V1+XidD$ 2@&˘a E0l6HG`  \2.9Lt/Y9`* `020&b0rs<$FN` -- 'd0(@`{ Tx-P`B`(PPZIa@-XYM`  Tx!L,PN i+Pg^ t7xmdY --T&q --T<Ū9!FNN>'XTM> --t up=Z;˚=lrR [6[ --!xp%$@'mvhE*+ --\cCnt@;WXPM< t}pZ?~ @4iu?8F;@YPNfn@觛@iFz&PN TgfB衘z&1kϨ%si%;{,"<DO'>DO&p,m ]4($/nH_m_?#-~RG#|wGFhPF,$|rI0ANjvh"vH"RE`*@JCZPt']8-d/(N --:5 @iJbPp08YMRAC&e !nPd7(Jj0 @IpX$/0$#~/1T5bE͂P̂PP --=l( ͊PbE(Cα!y'R<,)%i<[ --@rpc --@rpk --5):T6'uWlM.cRؚ\Ǧ1Q`c2p% --DRfm*8V6%qWlI.gZؒ\϶!y!yq¼qþiiaaYYQw`0`0V3AF3AFkxx`lOfh ` --s @zb0 9)bpMfi&̄ ` @f:0O3%c3]R1 + /II\IIl `fzH3d_5 @> Xz,a~Fְd]k4 @. X`R.eL0:6Lt `!# @ Xa-0YhZv,4 `1C @% X`,g@ֳdWcS+1@ -- s @tZ= : RDaMĦTad")8l2@ FT --  @\*U .,FbJ1%QelB/%"fvR(m,3;): ` Fm`#}X8:ldG6N+g&3hRe `B2leEֲ"Lk}6Et `/ &`UXw`UJ*fXCVBvlIjP$|vP$,5;(z`= `?[ zp`58w=5Z`xNNxMnEGlS"#|R"+,6o)faxI<$C|VgT ;*p 3p+p # --p --p 8rn^s|^l7oP|Eyp`oiIӴ( 0(08w`\e<gYpF Y `;0Iw  >+8w`f;f#:}v!p`g;g8P,93@/;KibXtZ1,: g31|: @@# MĦHf|V>*wDXuڈ @ϮEct,v.Ʈwch"1a>@;CaXvZq,;-|8t8 mȶwdh />@=u;PO]"Yw;|HrTH @5me(;PbRP Pwe(%,>@%];PJWbT`6B@0@! 3`(*ɬ<e>UHf(;Dhf2The4 ȧ)<E|pv"?up@0 s,‚# =?,=P?;EwOz>;z>;z> ' @ܩ @ wjP`8{jP`8=g@LL=gb`8g3-h\i @i @w#)0I @HJ"FI"| wHI*,>7JPa8yJPa82,>'@DH2L>'Ba8g 8t|.tptp;||}d p #!F1@ȳT w@EB|TSNEJ>;(̞X}f@`;X}f@`&")f}f"b@`&")4 w`!)3 h4JCZ>+ h40zb1vc1vc1vcI@`$!1~FcI@`$!1~FcI@`$!1~FcI@̳l w` 1#)@HAb|F --;0R w` 1#)@HAb|F --;0R w` 1#)@HAb|F --;0RHBb ?# 1$ 0HBb ?# 1$ 0HBb ?# 1$ 0i@`;}F@`;}F@`;}VbXi@`!-v}VbXi@`!)4 w`!)3 H1D ?Ɵs . --fDV}~3">UdߎDwXEwXEwXEϊlgE6Q}">YMT"Gϊ,;P`E(">f`,"EDcG| --|E4 --;PaG|*@Xh>v` ;@XC(1$kH>%` X-` wXC$[(>5` ƒ,qK@%XB(2%K>E` "` ʖT*[PeKV8z@-Xw̖ cM6P{|:kPgM6P{ G& 4& = b@sz:|Z@{O`OI=|xR@ OhaPI== --@: âSzzXtJ@NhbR =ML --@8MȦt)t.6 Ŧdyd6F ƨDyXd*@LcU<} --@0Y&42+DNv ɮx:\@'KheXbI< @,eH,^ ˲xP@c[2;l @&}mȤt-v θDwYD@?Hg]; @ q`y$L/y  09Ga`H;3, @e`H̰0a0v0Ebc:Sl @Y`"9V 0$QuX Gce: @Q`ȡL394Iv 0ĐtFKBeiR(:, @ --E`! 35!i 0dsr8cAgm9 @5` \`n97i97i97I9WI9wX)9wX)9wX 9 98888X8Xclb7&6fXPLX4vp6Zl;$]RpvYR2PJf{:7l@oJ >}zoB G`vpԑnNhܰ@mppdl@ \AUd3Flp --4QmX!"ܱBEDKvfp!KBeZ(6,@ "z 5[Af*54PkY#j =kP@0 Vj#xR @H  R"jBMȦIt6 Lc@2 UHJD cri4I@. ]%DJbBB2h&L @i4 <:$RgX'@1OD 6>đf"HdPaFd3FdeR((2RQT\V -- *JU $S1FHfb(2| @6Kbl -- VD= "1@Qc+Z @{pn Pw8tXF`0-laZ-S* @  --Pj(bi0M`.3 -- @Pt`ʘ.# @pb6 z8 2_J `PɀS^:Y0et2atV6 `.*Iu(f.!X#T3d[r `@9SDohgVΘP[3b '4I-O0h_SZa>&<¤|KgxQ %!f C" Cw46H,O1l_QX2 # cL7F`xmWc <ȼ߈+o'<H+Op&<+q%<*ϲr$<ψ*s#<H*Ot"<*u!<zAn#(h)GVk }y5LO`L(@ c --@zp)8*L)%(Q"$0yǘQ=#ŒPaD(yφPfBE2#}|Pr` @A]O --?L'% Va:(I62TM@M&u Fd]M --Av&҄ULJSBF:-hb.@ ZXKPCw>)"/ %|Duvh"*3 "+ " --# "[&)#;)#i#2ϴ`y`qW6+}xa`Bd`IH$34YwTUwTQt[DxO(YDXDX_! d 7j s !,K[-@ K-$(@3J5 --@+JN7L l@Ya` ʲvE(u(v vPvPh(PL=GDZ&@)6QyuX<8DJ2@a 1Jp09Jup` --LuSH*0=;pə98Ss4 --3)+0pp&ifed --Lʺٜ`J N'l\@`X61lp &:EDU,0q4hp)fabb Lœ1-0[7\`| n! Cs1cbpFfF ̄[I/0*7_`L n'xB.B-D^TnB,HqX,JQݩ10c݅0U Y*HAP@ :@ f D@"T* @N@F@F r| <%HJ\\HKL\KDLd@ Rs,$<9X#HO \^03D0:3C0 --2B0 @P`u? r1 )#ZJڃ@n@<7p"&sv *_q`&7ȁy\+fqo _6oL@|90Sp 93 xd\[2 DžTv`܁1\{@n c<,t@NЙY@Wn --e<(t@n~=9qO t{*L.2 --Ot:}*LN28tz*RLI2*%8t*SL(Mr/:et`0LNL%G/8xʁ~ '8i4`aZti o(_)_L%]o xKa\`Megx`'js݌MxM{L0*24tNQ"NR#N3.0q.1a.'@L rrq2p#o/n;22T G! FA HEq4 HDt HC A@ TO9NYC@$HJ^`,B]`mQA`yr B `Z`5B1h"wE ie<@ --O!L`: ,OL5h%6$XnO`- I6(("VrXkidR(5(*f<:XkhdQ(,A0vbL $@ F`(0p"a`:Rc`.Rd`"BSf`iSg`Vd E HAZ!2 "0 iKDlAtNK4HtEB4NH*BJt8M|Z8Gvz4 8S(҃fbDAM}Yv?J'%E|S9M;6x A`4(IH*5IO,xJUo8ٯܶa mPE˝9ALor8!XM?v.F?Q\uPP=*jl.%E%{7x&b*\5:@?3r1\Vl̼WlʴXlȬYlh6 MiLjm2d`p= <@j EZ 0FJ a,hb`XbPX `eh,0$XQ,JXq5fs=;H@4B2PoL  #39q9xȬ aTf\`W[y fRےzqMc C؟nFPT,Y @QBK T|3$! @|mJ!YN ,0 H --/XN=p,!$k '29A|]FjK --M3Aɜh"gj>OjO 240M× ZJD,0H_'](U:Үu_. HZ*>_sAhol m/qOyT6u#uo 4ۭt~寇\5=BIFu zx:0bRIo1f/sj7W"?&XK Bޞ+ jVzOt0d~7: p 2ۣE=]~n.~aJt"%{A/OD?Xz8{p *k#@6 --{pH k?`]m --endstream endobj 40 0 obj [/Indexed 41 0 R 1 119 0 R] endobj 118 0 obj <>/Filter/FlateDecode/Height 3140/Intent/RelativeColorimetric/Length 61261/Name/X/Subtype/Image/Type/XObject/Width 3132>>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU+2 --qPD`&IKAK@,4L#R P~n{IeUu]G7^v_xm6gdddeg JDEMӜ; =T\ "Ѡ --cPUum]DZKsYfeoOi,+~3?ZS=~ys!+ A+.,;rM]`csK''>:y6}oӆ]ư|WyӎcﵽhijVWz ?9AICb? as00ފu͉N:?p#c7o޼uD`rù =Y73ӓo7 ^{l#x򲒢zFddNɰV A0WVji;8yWA+ 0:tٰ ,< ={<ş[4{,tey98`)hǿ=e*c#7]}|ؑxMվ=AFD#*BDh-vd]T@Ow};ޟz0j0HX]-m&rX LOܻskldxJϹ3l?8TTDY0?w-"4NfD KTT;Nu_2xN~}~-`^K:" --E(:Xш$vձ`A+bK}u׳^?ɅH4Jj.>?ɀGS=*xG !Auĥйe[[46dҪ --E!l# ,LQm89f;89`x hL{{{9Kr\gg I-:?=wl̛{^K a1D4px qn\fo.PowzSߥ'{ۛv}cB,/͙&GM)?YX^Y-Ǿup>\x`(D׾dD"^*"vlkl6T+d٢t>b wt5\0K_TZQwh|fjwN<_K g[兙xt6z]u,I]ZRHJR?ՔWچֶc4a|rN/m/p4_,pȹe[̛'G;^7*jRQ(ˑJDBx,&`Px[PI-+ДW:{ǦgW;'pJD$O@5O9'1S"SLBB,T Mm]#SK[H!>$}k_ --(?;S@ --b[<Fؙ hhjc|{+ 񡾮ֆ*mRK F˖?;}I A2BW=e<>"vHbpp*׆ --"W,/jf8tQ\Uah};4`ĬNh8<;߱f}l& HHKƹfDz8UIYeMCarvɺ:9$DRǩ:u"D粙i?)L Y --uu}{Ŷ{ՐҷHᾮuZUQaN6$Ï _w_TDYRȧUur ԃĨs: Sf@}!dET64vO̭n:O/!Su48w6,Coj*Jy$4'W$hW*mu}Լd;<#wI-^ϡccqzV̗d9QۙgJ?O̯mWp:e1oY?Z jea8CY?a3<tQL*7 MZlEB>ў}ה&ٲt{gpXi5Ty߮IDHZ;Zt> h~X0jrE.z~TֵYGps\<Ψl465Lm!]l_(UVշ&o#+Ӿ4=Y_^,gEYM[U ѐ E2e3Q P`qx --* Wye1X~ l^L}2v#׷ww[qg["PFgy[R*"H`dzlfRÊqđDw? \\gf?/;w xЋh{7-VxS&b+3_  --DƋn𜐍[s&O<[mm kf†&1d4ܠVH<<,\SR5v! i{~˦3{cPO{Bl --!UU501>qWm&L, PZF909j7$"ޝYۋ.˝:BB r;b_tb þvKS=52-R4v͊ugWȔ gkiU٠-<.ngH@D7nY4򱶵vmR"!Ȋj{hʹ J7C=mR*ubyEmve M'&+">Cq|Rgxn" v^wCԩX_EM 掾b?-;.Ot[ J|R U(QV,OF+P<͑J&+NDB7TB\T7,*IFN\{rRp|OӲ{~ۼ4,l\~z~ oE?O̭.\6wG-5 --A +M-C4cT,##ǘnp@$)&t}wkTR0Z>JƇOgd9?gI'}VNJ"2hmi0Mfrʦ!Β}Ӭ||;'jMŭóX*Kf) dԻvQ^|.tș"yEѧxcE.LMEJ*͝v玿Gsl*.;^6֨d8F'QT:&6d:/r٘m5hb.ç啺+p"]ko5ebpmPOKZマQʞ?^Z6;;`kkVJ=ZH8j}Kcm?Ifp'ފcP| zP@T֙;&6K 'Z|$h ٞdXpk@Y^P[{fV'DH>0l8l>pA'>p 3${l> o8pD_bvd}dߓɰി(s_CA(hL6vNs}ciPأJޱuO Z]-[)iƔ7=u &l6ժBCQ\Loq‰4[|xͨQ8-d] --$:sװc& ᐌl}Ju8|Z^k^;vȅ j92JS˩@R8z4 --KaW(כ;^؝!m}+eBodQ4vCJ8X2pCc JW!;f_u7׫$Kp[RV<-^_AN9ؒ7 --$뎡NS-1N"+RUjnGd$ǻ{[tR姣PVy}RXt΂ --pAUgvy/xz?uPv46uo2&9=o3V+0'7=uyb|HEOWlB'^4wNc鋹W;jbs惬3a !>]|s^%~RW Q,&'d&ؙwcf\pTɰ5)WMg/S0On uޭ.yٯӮ&4 ç'$A)*D\- *Ȣ(K+dt/x?QG]mtF݈i97FcӢǓ j'WzF_L)ѝ2Yc+5<a:^n94Lt3ݟx!OaU7qxcC5Z*0?V>aԲ =AgY[DIpgsìGAԙe]_ƒefrw{Q(1 --RZ\y7q KIo=UÉtVكd42b=/Qk?$3wVf;J MZNBOSJ dL*M]-9ad --ХNTl&-6}w[+]z+dޱ7!9QG`"4VsӬcQck6qqdtgizziQCqbAu#t&ɤS6fGi={[ʝf- DQ^HVw^&]{a55W_,nzH3CKlzH$]`ji'mDdԃj6r%:^CK=V4Q?R֒rH%)f̃ --xW%ΑaG]op}$ZKqݭ !rQu=DS/ o ODUh>W倣zXz{zTT>4%S7~7qUh~6EuQ{FF! --AEp( --"27 =`NTTZ<U֣͘qTR,$Gʃ7?pëZNY(g?v-}rY n3Zi.i2ۗ !Uh9'/V8NzKn̓3=7XQdtkr8eaf_YӍ;`6gfOh޲GCLײґO?ݻt*zԽK5N>'qZ~pM‰%_bq7i+2qL!jL(`Go7bpWCGc$l=ʬ3BOپ x)[v2s#ݍ^N<8 ;&Wә6;h,|-ƖU2|O+ףzպ"IB4|J[r@kxf3n?nѵU~OqJNtTЪS-mN<}->Mf0CHGZTƛAr@nR_}ʬ3Zxvĭм->-NwO]LB.8~gbǷf --.>t>4*e&C7yYQBq\?խCK4p_> 'l÷q^Vzx_iG1>5<>=_Qyz 5e[jDGצvT8XmB6|47;s5W]|),#5;t| 5_EK~c8d" ^~0dvGo6xT򁐎@cVzeVKRW^ܜ&nV4P\E ]m'L;f24"zKz^|-67/8$ yDKQ o[plYX{ev´+ rKa9 H_?ѭKߺPQIgBU^X2/} yHHgg ͏\/rJ`܍Ki/=>5q&پ Ȋ@.&qү1@wn 2;s\ --M yKh?3eOSL|'TOم[+dzK=*- LHGAM÷q΅~7tlC DŽt=%M"ѵ3~Mf. ˄.>wq4"&|SU o W>8zd$vw|\-2SϺt$שs߿X --L7[~\QF@·3[q^z|ͽJF@@Z҃q^zl}n&}ݤ˞bzynE%ͽcSe"_Bn)$5:lo]}-^`ṝQYuԣ7)k=)ߚ}YS> i)=;q/eH=Z[HZ@% 2R/zJ܊]IjKlt{=#kﴖ{UPmע"Gק^k!uKaFrwSt뻟-& nA!5Ђ&T鶁֣i2`[W%6 [>8 --|ZN~`}|(a --/vuG){9+@޲HNۘlS>8򓎬LpԣP~?D: --j.$ ;@hw}) AB:ݣK]|_]MiTUv."QaPp`M5n4( 6 [ UT+O83ozΌk~~?纋[nF Y!`}ؓnH7_=yG=Wo䕛=vfхF@c/8wqrJ%UH8Ra<Zhb9c%7f , @>sef#oJ4dˆ4gL/>R^_H_Ց{i)99k|_M,Z !=B 'Ƨs:Rb4V뗤in;)3pgҐ^_Q>892UQx_sDs>hbir;65} * -X=>ȱvZ$r/"Hs_|v*om --i¨8?:UT%GN_JHml4k9%ξ{:Ul Y++h4V'oA/ --TRW74Gt(sM m|-Bk;/>YXNɱ2ˉc5~UC;~~>lʓuaTL. --/446O]+Q&l5k;%y{oҐ^_i=sǦC:3n>svQߜ|!Q37!}UG1cg=>K)1XXnXKuTH[z`U*BrzocH^_ -x꘹x_SXcoGHͱrrJ@zEɅF}ZboJ37_mԥ.vʞ.=];F7iq+ܑJCz}KS9y{x{>ێcקǻ*$5cVrBr.a~Hb9NPoDt&ʐB񹭂(+Z(`_zv}ʣU>Vʎ0mCwnS o룀}FhƧsrCEk:Ǟ,˕ AQydrT15%3EPFjmlʣ>Q$pSߍ׸hyeCѶiVv15%+Gsjr̯uM$}5K%TaDۆ.LN]M-eˉ*(`_ZU.=n<sBh=;&]]؞щc_s|jִ[Z& +1kw}@u<'htVvae14d󍼥l3IoZV} --xFh'­q 9>6meW^U7JKƋ+'P6~|hS<WZY63+%@9ZW[&> --CZԵ(IsB'J2#u]9Kffp{Mh7:45(;¨Y?WI-zB]ɚ>#?|W"'d2ޛUi^Ǎx/>+2q kz7lܚ[a@&Wåˏf|!8؏$AqIkU\^?pq끵[_bN>jƜ73'\%wv/lăz>ZjNbF:N 6L"OpIlF<'mlnZ>=|_[@lew7U-NwVeN|i] 鐈쿸W &YJn=~}s^>d-i[?Sޝ*`ENZ95A81V>T5M nOޭI~K'LNbFIY_Hxb 8؏߿26{<ܸx vXmL? |7ՒZ`D:yDUvL턌xPZK,?_$%wZKfatp"+3AL<{#4&xX[L 3^.t~I:8)#2kăHƃtMuWyH'%wau{@NK^`ld14j.Ϋn,A8o\[9Vbk>lXѵth9p6r܈{Wcޙݴw{^Yh^MhXn --8 5] #rZRvl"+:ƷR%ڸΐ*k0''ELYDr~~8%+:Ʒщ=~8*(ZҸ3&y'CiMWxyPu-:pΜ 5-HV5S5-~tpd_ٰi --@6}ןEMMmi/8VTl!jlOrc)~![hf7măJ7|ϗbF<$>4 T-󾧺tp^r˕7/و.6U1e5l{rZ@]!f\3{ | WYMs_V?a8WU%4'/]5RT_<G؊W/IL*Lp\T\$*W8Hء'asG[JTIJrM[K=?[_il'$w僉$'*=+[/cĖlpm$53[W=pWtdz!sXI8K[6ڙ+[-az3!8PD:7uD@qߪJ%A HQ ڨQYdq%"(B@Y$@T[U~Μ33KwO#oܿ=bN-%;Ú<{hp}C-_&zוCm&C @)wj}흗W[tC w&revalHS 'r}bl؞/c\CZ*`e'&Vŵ@5{R37M]+o>BuL.9{#mA: --u|e흗ZMf@#=+Y_9PEό.ds_l20/N*ѥF@ aelϗwυ5yynau^WIс٭rexEPٖH:/sKw:š<Hzwj^ys;n/svS6isw;/cUJ?`Vfਉ`9ocJ ?<-?kUSC/vlϗwυ5yFmRXc]uGJm=-MFtyfyNvatPן_-Wޚ 1;r̫-: #Bgo/WVPHjF36<=. 10.?(WCau|:'0O6+,wk/w,srφ(.O?N_hЅ<D/o׵3sc&QBw9sgW u-+Uޜ9JwpKvm׵GL17M]O&]uj0euraMu.8SHO#82aDf7Kҵw:B<|WbKIJ I'uV']uK2V&BujH.emW6f.7.c_=9;AXRZ #tqBz"^@mzS͒t❳!HсY K_=p\kED*cIie[6k9;5[ǔH.}kK:makv,)L*3[ǖO uV~TReksKɎ[ Ft`v,]{atP@8p\YX_ ̶][JkЩ$7ۮ,o?9j05-y}qe.4PK<|,Fup }? kPCH+ VʋϖHP3D 8_+Vޚo9hXR?:`bG:4q Box$0z:uP UۧS6!oK;NS\{Svد4k;@AK#VA,Ar3\s9{[k:VE ;&+}֣>\JfgfJ+ --!B?&{:iz?{x>Zh:V͕wWG oetMr[T"k{x>Zh8]ɹ^igN#8cND%B7*S q@Ec--sɺ;wA^EhL}2ɡDDmd5{ōΈez̈́i`H{Zyk}tT8*c1L{%dg&e{:LxT Y=S: ] XK\--s _@y:XykW铃jJ*$-+YŭK23]Oh:PVMftvy9H8=+>prMs#ma)J%|}Olu7%Wi幥GW9pfDRwŭ7BƮڮl {XVp=]n<N%ծέk qIT2!cvmu>i@b0V.nOwIsL4oCv<NAXܮ {lYvUͽBD/,pETaz=+1׮.7 _F~w޹TIk{oGtdWez H &ӴӐўw% >az+1׮ʼ$~|]zfWp=T !cs|_94quqawezH &'+l>?>G뻒q0=Ώ_kWeP՜rUͽ@52;kkm$ S/~uq{VJCɴru~}#l@Yjn"'6 --'zyO@CKi[97pBF{R%Wj-k(2lTaZiz ϥpsP@YѵŁ&?~gtMmU}r-&#'rrca(:+9wk1)Lr!B#YGo5~v5qq_{O&EiD|O@!(9 $dfkm׫na~cmv$m?X}^ir4]qF --a~cmv$,L`:w!"{ƟnAwW-5%Bg^郠B4ߕÍ^c]tFK?AwW-"ufp\ 1L÷WXp/X --oD4]A2|^by2Q?L<,L`̮5@Vn D?wَ8gj~WAkniC"4x}i_~9"~@OSTN'Q̌F܅ni#dmdeS"<2@/ ;kX/\C --y}wg~WMfA÷Wj:L<,LpDxdvzƐ-=|lWYLpX*9w[~wb&s8a"rO/Dח}q2]_^o3^GV,=ñ.6pZU&,5`p{ۚu0sd4-{n?k8Agb~=<;AaZ׾N Y+_/ɞ-.J5+zeb7'Mo,)_ߥaa:""{OB\@dGMdebRus^750ru 8%D^5w2]mx^5xN k`kg^""L@b\p=c=ljD-56DxdvѾ 8DҞUtMfˮͭ.d[Z;{h#>;ZW3=yt:vxj+m.왘qnm?-MpdtG![okWBtJ÷W>߽=8svKkwD4]+Z]ш}a[ ;~W?z{K zpDkln[+Mpd4Pvn~xx,40zv7n%5GkhCZdTX+eWш0]bYYR@{n>L@[FCkp%ʔ:K媮VF&k=ni%" GiO1t )IdǴK1eRU}mv$,L@~Z,J9k --D"2h(*/$t -n51N$c|U^]:n 5оd4-r620{ --<"Zl2*M@v<]yʭR1yd,ʫq[v&lp zCA1k ĄW(7 { p}Wfy2c 5f2'ףc8hzbXÔ4& Gkw흸0]띖tBEGV(3\W]z͏[@0]b\HrR+b:3#G'/V[ࢉ띖V͍~[ uҭ7qN .\4=v[ %Mp2+Zտ>IGM@{'(,aӳz}+c z~bxW}ҪQ쳄h29ཚpzm3sn0bT|`P5_f3%+1R(f}c˖Zvz58 *IK:)ڿ睝ϳ1%u.a sr%5HlΚ.[:BJYQ81\~M}nrzWCqКT|`A8H@hY'k\ eKp%sC4xҒ6MoiTIpͿv~>@LJi K:+XfP4eK@boG:+8釛^mW1fNA 2^LD:BJ=MS]촥c_=Ձ.%-5_mAcw/*o٢ko?)7;5^1^%/T|hLmaڑS%|7sl2ة&;,;v1%%*ڿ˓=+9Rց>]OZ1\b%F '/UYaK@X6-:1\tO8W1kS h)*v^`[3=t M/Ol~b%ߟ@OX1'_ h.Gt rzg g(h#t ?ҡڧ.[:mK2oҎt ?ة v%٪1V p<\c+eXҒ;ޛc?Еt1 *{o:1|t=ܨ/+?8{"TV~ ב|gu{s6qÖ}Wց>]OZ1Ta˓LD: N11%/;5^сj(<Zyq]u;1T|>W'St j7ۑK:HfX7ݙHp}]צ?*}co%@,yFW?eK~rЋ_Yh@˰;'N}-w(Ϝ6ݧQ"bwg/"J}鰤cK%dʖ\bw^4ml4@9T4W1˜͚6|6HE2sE8H~a%F 'O -- K:r*>T>0iK~~f.HBNMWJKq%mִiQf *7j]/e"-X‰oh’j^>_^败cQl~~u#vcf|uq csҹݽ|6PEwگm:-+X±%1>|-IEo=u_ݜvc!f|=xq'cWqSM^>TDwگ}~Hdu{si0c>lhde,@kR[v]W7riG:Zvjrkŝ\I6cFk'źk[3=t Vbpi0c!CKǓ*\W7riG:R__ƕt :N:Qe""׊st Zanے8kA5JrKjҲ>d03kw!+}:.+9UIt ' wfZ[Hs%gat 'Y nƌ+L=<]tlAn|}ޝ11}SodK7γRۍŬ+L~,n ;r8D/9DR.t 爾3ǃ11}ޞloo1m+9UZl09{a[ы@ϱ}ݒV'-_6tKUOt grT_Zpg6;e:cD˨>=Lr(lp%cnT0g{tXǁmK"qB騶5Lzpg6R|3$Qt6)@niynczߌtmmad>n\b~9Qco!m\p&_:>/cc=JmՔVb6!L,^MzHlh~N^;[WbwꑖӮ0Iw}E꨾3LzHdUU~Gm3^#͔#L&^E:<}=x:}ב2bn\H߼PZ]~M;:C}{.u}4`\p&־:LLz۪)-W\=/nRJoוՍiWg|$Qs`t DsN.eJt c/:3@O Hgo~Eb=M2NGQئ[m  gj,T}рe:L} "[Hg?x)#Y-d]a:;/7U>Mz@l~CE@[v]E]Gt_G~_b[mF%姇@wNmk.[&~q)˓@׳SQxn0hOlO)坸@׋ -L8[L ͗^|Hɝھ{2bn1=zzq bFԋZG i;f-`$+҉{3O{[ƽS0=ᅳVH/~oE=UߟM 1u؋՜0ݫ^>~44i;0P{u $/QOgSlxѵs?IGw @VGs]*[2K?:qO=|} 18_a/ߍٺ[FԋZG i i|'{Q*k Ɲھq=Y&^6Uߞ 18AqrNe;g tG)Ww 8EՇ Gw `@"P~T̥iB:Kw `@›ٽq>^pٽBZ ʝQu #ҋ[*3<{tE`kiGEATge[* --L{Bw ,ćK_1[w ``"5wPlb;$MVe9k A]FqbH Ιp+=7fnʼiO{Tpt bVWy AM30߼#թl-Dof>d};bnA Up; vnڑ{1nʾђʯ --@ҏ;VHսwt$^6BxBw N~d툭 =zYOnqWˌ;$P/|'ٽ@H=#e6jn@P=Y9iIٽ;[˕V(W[<0H/5C_o];٣kvl-DC Y߼ʰseHwn|4 i`P-n_2l-W4UWrx7{a.vcg0lWFm-'Oiafgc;acv.>-'.V.&y+`^,7?iRdb0 4l X f@H̬Z}nŠxΉOUw@كWakC&NѤ'LݺI\,[[T?g{7r;Uӹ_2)l$ }@ oE'~< s졵(ëmrφN޸v̱.8n7G-z~|.T {f?~sMR/W8nևm-?N':Q0H7gx6Je oY%dg;}A&q|}ylw6›دD7Nf|a:9#QKl[긮|XAv~*zm6H5;mƉ~sM[(Cnտx~)(/HfOq;Et ի0ëAt ?|X@9[wQ@o|I%q2o}}n(INaA&q|2H1Mdߧ}d=~:\`;:'vL˕@!t Dn˘kVB>wF-C o7y(Q"7{б|)[)f+mŸ:~QLxt ፛0֭t +7$cU>s Qsl(oN [z='QmVCeZ/=X=<d=rhTV@j*ݢv?\tl8[eΟ7uo\-.3=ŋc%Ÿ>8]a:VUuPYۦ[]"aMjY;,yl@PfCe%-2^ j?[[)%QMjY;,yl,{pRUYۦ[)%铺ne;@fYcR"7wP:.[]cΝ{>X}M dQ:z:n_l)ժ ڦ[]#ɣvxڟ@:CkׁVt k7W|6qFnCgl0ݗ1vt_"_@9[V^t 7[|9aUKfyJHEO2/_6l^ ڦ[$/R;Ef/jHպZvLRIfJmx%e"7w:auސu1+,=3'uc@*K妔ʠmEŸ; 14W*-)d&"Kl@'떒,-.CiSt(s6'Ls --]=\|@ܱ|6gd㦽g@ -- o|v4 JKfyq}+"V&<dxlo˕At ?uvL~5"ټZvLRHGu]@klrOH7Gx$mg%w@ --Y ۡY{6*O}{eSt@X(j\|[[]%S(vد(- Y"̃"j#8 " P3'>}ffTZO_nd!߂F%jǹv ؋upЎYse^;_~iW@O/W\;k]w.7Kv^GPy0WPިOsFNm0[9Aqu٢vsaө<-k --JsVecZ;phq?jgwri@ J󛗝d![aࣽZmeT;W0}չnϧ} 7,N韼;#hF_~ ,l]FO@\G{Q;4ɥ} 7,(|ѹnMҾN0[aAu1S >^/viY;8g?jʍ,mt:Ƿ@ ?Zꇻ%@LoN`Њߛ{Q;\m"}/?7|}On;l߿Saj{Ӯ~W"}/7A_xVݢ{;vmP-8CvayӲv 8l7lh ˋWV`iX;OPxl7L@ o?\ڷcVqz-ܸփV~2OzLPZq# o~ȪȀLpvwDVF@ J/j ݫVv|'-ܸ4n|_*i@o ˋQ;\, i *vl}%,?OřQ;ؘkEv ܝg iߜEPy7'7k;m@&=mJ>VZ͋Vv ؋_9oC )->IWņdvX0j!Y}~m} --o[EëVr0[)AqfjY/_6OqD6@&Žn;-qh$2F;Poúv@BAJU?]*h vaiX;GPtlO^MҾ? |}l].Ҿ\4[ocoouQ8v/@&x$dB2 !1? H(/FȄd@B& c<~2!P0ٝ+&  mEry]Ġ2&ju@ c i$2F;v@B c i$2F;v@B c i$2F;v@B c i$2F;P;Z!(L9_.hbHH;dv !1@Q;MiowawqX;dAP}wvUz-py^N.[J~uu<-``hB5!Y}>Õ_M,hF%d3`0&b0sV2-f*M[{TNWv8t!c<~:LA  ?2!=C&xtȄo_H%,%rτ AF/%(zj~ --sv zﶧ cIj~,d} /JΌvk@*h:zvC?h:wI;<8,i@*sz@qEU?|JidC JW߯,RwC,j^)[}:eCzKi|#!=4&znUG>7[Wopj6zT --CVq~@;_llH0rnAI;~gF;v)I;j:Rxwn!Ayn!ii@:G? Ostm-0AZj\ *qyu dD$#Ҹ\3"бdD~Gjc܈_/F} Vd-t]bַQ+>Y@~:T^ ޹Kn{Z;_ap'+tvjΌvȿih 7V7WWtVoŵWJ\7[BE;^iEW^Tz^? Jc>*]>+{?/h*|>qmȽprيʾ>)WOqT;z7P,nqt;jR* ?EQxeP;]5v Q-kY@͸q}R;V/o˂(n\mLx-~Jb}̌]PYTPLfrc܌]пtPMQOC77'ìo --pi-8A8s׌[a1tWaq-j' --Y[I;h+݀v prG? #qT=xZi|2ّȹE,V[,+Ml\6qZqY-o_ --Fܼߛ+kR+ }8EQvȷ ޺iDP;ZaQ5iCŬo]#j\oNi <5QoAyC3_nL([ژ!ȷ{t |hFˍ CoA?OI;}H/(5Td} TX>FQdu-@A8uvȷЇv;,d} /PNm^ףٲvȵȧZ|:xJ;Ё׋~-T@ΓvxЁKJsЁӤ --Y@u#jΖ( Uʠvȳ پmDP;ЁۃN>. --s{wfd-HACY=[+e} ]T~@'}Yؘ0%y/~L@'mYڜ --{ --Op1[xpu7;3ecšv;:MJd0ً ""%RW;Of8g2goht-d~epjQhwg{R0%k}[)޿9=`)FsnUh1:K1v~( --?r^U3 pzw`;gO(yCu `m40_Dr*;e"枩6%{9.2hNɍfcewE$ͮ(˖:.zDQ;[JI;6?;|fu-MeߌdpkYhDߎ3=`I޿פ52o2Z5,_|( -->NhV= pv_Ks`Cu `M4z? #9i-~XԞp!ESu `c='s y"_ -SVRX= wXUnaz`k[a{A;fu-ebΟkYhE3l=`iFsO XSaK3vκ~zV=تSL>xawZhLbdnl0me.à,[kOߩه o--зO:^ɬJ{,B1Swt2r??{ot-Mf PMu `O?q,4Է(Jf+^Sa+0]? N#nUnE(w`zㅡ=Շ mRhVōOJgnu2~CXf>L2]T@>xa.fρn$9z9]u `/_cw2 ;XQIMo|)5J[ɳ*q qbNl8}+kn$NsjS!}~j4,>*8-s2,0hD`*[[swWJ玡0bph[I3v/z^;l[k})/ Y+?{VdϺnUf[@]wHϞRz݋0ͮ>L %Ku `i[G3!UTH7y4z72ʖ@lJuJ@CTe/iVW|^K1g e X?zRFVWHUn)&wU2={Ju/@4a"d0-Y[)m=̈́WESu QZ2'c$UTWlPHTdyB_o[i`5?=̞~Hx5~XsXx@N#n$ɪFGHukTH7@*ħo~횪[Y]51;?A04r@:oQA0}gw@"݋<f'ۺ@r//wU={6 YPHfW~}mJ[ 0>!jbEZ"(1$|Os9罒;\ܡoQt4}(nyO8"g۾@adCjrpYnN lNtn߇5i --$Ã*8cfyps5>nH-gնo Q=&&ӳgPQٿ[͒3D;M-.Cv y5=-w"M< @1G[[gSdxPwG6/_on/ --#cj|ܐ[UYt; --#zzl --!*w|YpvɳenB֏}Ll9\cg`͕~}L~\[n_Kasn l$kXdky[& R:^l[olf%au2l\YU4v ོVohkv UM,*ta*YcIn:Ht}-g17YcInTh x$:vv ] ??RA'[0:Z3NgзpkOֻXdky[.,*ta^7IݺpTh dpkLz-v DDJ~n8,X_Z'^˳pZExR7Yjv m^xT*ogJם@nM_ZNN%-7"Uo8rlfq;V*~8iz[Ο.nv JgRAMnk~(n~R{u8a|UDQl?iEQ_tk{+fy +t ۩mԈt `uAj<{-7AYKV½6ԋJ:/:zJln&7ʼ^zr] [P6_T1UAY/pEu9y>7Kt `UZ{jrx<\S-Wxӗ4r+nHv67t x-y4bӗns;5Mn&^u'uOr><6|JTމmnzc𢣧zr]n[?y1j p --gƚac7 3kӗ'pIuげSݯSmMp[.JltU [+PQqa[NQzgnJ:1Z[t -AzY{-vn&ښQ[ngf Z;xճPvqBӯxӗlxH\SعhkHI>TƙIdݓnƯiK>X3C%pNA|NFW@pnהt afmrZ[ 6/5e_[*ܻikJ:oiaL6-dol --Ygcl~$/geO`bOݯn+5{ cU5n6f p*;3mS/*J6|-%O֞dFF[nJ1HޥF7&kt QX̴ѳzQIWZĘߪ-WիQf̢wIړۈt U^.;Tdv-n8K͵ӻPIWZĘߪ-w7̘xݓn-'q)KbL: [oRQkMڵP0v0FOB%x_ic~K\VؾgOt -a=ɌHI\^cV xXlҮ-K׋J:+'$Vŗn}=J^%O֞dFF[n˧ e5nBE\lܮ-ǩb~lz_/*J5:ymU|0:5Kt ga=δwn+5{H~E\tܮ-b~lz_T1+DU[DgqI*mSn+<ͳ,^o-ثı0uN"(d Qcdu`]tVg}O]n?]n{-8kt --;KU-/ܭdYة7dgt 3ݮlfW{.GY͂t 3]<&Yf-W --~fY4jt q^x|:z:5Yf5G.܅6c@} oS=,3n͑nqd27t BF2 x3t,zuW]n"AYn3ݬRnJ:̩ugtӑn wǓ*owAjp*i(<]m[kzy OTaw%-xέ扵}őn%gtdڭQ OnWM7{%]j O*rR ϩ<&-Wy6z8-ByG2 xcqlm2]=]n߇֚SP1|M{7ԦAQK@޹[drHw_~O,,St= --5OfAI@98^OI?kQc ߼E+,2 rdǖ+K0i0t U-o\rjgdڭ9-|[_?v|Qu4;,iEo?D֚fAI@~9[&\Ʀ}c |Sq[6v6Mf[t .Ԛ`W1|ۇJ1$Nx֭-|͓4;GrJ;ׁIcq< --4yt )n໔s$ %-5z$MqH}$Nxv^s[ t5\4 {>^YpY ©M4ݚ+x,6&wt wĘU18W͂q* /t ? --"6fu.k5.W~̩:-IVIK:|t2&^w|%yT:p=^c| Uh^-bc‡㊖ m884&_4<%G. m(o&Yt WbcIՑn$4&o- .}_Kz /ȅu'1Ѥ[s[n|%IxɇOOqVIK+tpxq+s'UD?t D~.%EaI --FiӤgP --_?~F/oOc𥨮zJ1|ݼOM:GpDk\F]w8r?n^cRo6!8nNn2lqrG~LWvVqG&ɧlL:If61x[jQ7|Ԗc>DU5e" --2#opa6q\ o0ՖellGz.Wt6d'~-1[Fm ;|N|-lEç٬u:lv._v#ÖpǪqrT|}-@Ym:h ֖u jnzm.u FSȩ0>fVo78JyťݻkxcC?[Z˗ܬm+]gugIu N-cu /m:]inY-u~8֪Su Se&/\x2Q[`72fE5kU@6δ*Mv TY'\qA4/5, --vU یa} I*MvV-}_6 Ya)fQ ];\WLNx$U~ 5N$֪4aF2ff5 -- ;bU[17I$ pikU < j"hVkV#]PٍjފY0oP TYI 5C$֪4xBѬ0֬qW./V(`$VgkIUi2X8 YaY-t@}d7^+fQ7HRe&/\Pᇓ8& ƚ"J1IvߑgQORe&/\P'LSIc`G2Msmtu xQT3OG3^?Yƨlu ~8Δ12{Di.qGnϋj(``'C_nǙ2\&}`4͵LlOxdYq 5O8SƔdu5D\]t>N_K/?J?'|l wPB-]ANۿ'il RkgUzk`Bi2 --8 z_i]fM?vJt781AԭFd2ٳLh=A]U:ُ>ctӏToU: */^ޗ0!$L>> iᷦ_/ _H8H\2>Ϧ6^?CoMI&KpkL7mUMm/KaY-lͰ\ΎIp)p3ޛ4MN@NP{j&]\Y쾟ݨV@}4: &PM(]ޤirz&vvJ7pNzȦVoU: M`/Ka ל&MkpYoO$MMA-UbxPQpi߇p=`හߞI i45&qv별kBUئ6Zޗ4\,l --cMqdy;%5G_(ԟ-Ji [%Jɠ3;kn|S@^Ro~N75E[P:Nlr^Ju)5Z}J 5 0isDrWTmUy~54äє%^[kN ]E bt7?eoGpGo'c=ѓ& --6i~W@1ikP&hՇ'\Q$ \5Ub|(i gߚZN[>p]]|m"Hp'6rd8gok@V zPĚ]IN9"$Ƞ3;k i ?T8'67uc엕4oMZN/89:Un&Ѳ_V[y7zdv26G7IO[Xsߕ4 »>j;tfG$z?izuU_f67BU$z(&rIv@/}md 4(בIy/+iYOHƛp\Zq7hE~ --MӼWck6&>Lo: yZ@FjY}Z+J@.ro~2Zs JR-Dq.W<署r~ynQN@^vzܿ: 8 TayFW *d&,wOKkQvrt.ObwDI U/Nu֏-oU,i5)f_o Y$]^}>kr,M_N$T5y={4 PT eit~kYv«Xy_v"IY  ›2il3};HU'uG:Ӝ_> N}Q;<A͗S5!"׫MPrj7j8L(/@EbW,{,: !Ο?P'h.׋ڎ(:!p5GPuߵެzᵦGϨڏ3 --d]$zɲʢP.2,ێ; --ڄךzQQE\ 7Y>3L8F4k{4?HΧT )Pa2.{d ei(?ۖ[ --0=#@ ZcjoO>c --SmխNG|9|N2*JebW,{,: $ylyPIkώSQ'ZŜ@>pm7>N<?INًUIIPE{ObE7Ezy6úyP9\D@eb./,: ܙp/;_uxiy\~pmϪ>N*N_r1'== 5gf(9Y-cm,: "I! @  'Z/,:ƻ,0yܙp߶mj(/Dubէy'EzמT~ݸr ī~Pgܟ ;?6YX[%쨌5[ӥ‰Xϋn(?E.˯:L>=\$hN膲8T۳C7]awqy%APd||sgeW}6@ =;5fRc|DUQy7E$x-fmkv5 Wq~i eq6g,?vt9JEIU?r0>w;`ygLnM 'bm:ͻ,:kki~ìspm= ,[cm:ͻ,:_Ct8AZoqV9A鶿zp_ c|kR]|D6F5(=Lvi~$m6I>Ȣ?:-oz #>C<8S{^|j #Cp5]VoN㭴Ai𙄬=/N>#[~{OVQY|*6XiPƛ$aX|ooS(:Om VguvZj qOl_Z[ wsq0cD#(Y{fR=^6`̨Y|*J"Fky'9KudT1,!kJʾKYݵ_-MP5F ߳8ih)J#*e4gy4xRH <Bw\e"fguMtHeEP*ѝ)! [*D>iNf"3=EaMI)<bo1fU!Z}y:dqxOO-9>[ Dك]P<'1ZsfYr j||يo@(E<\7=K}Jtgz _Q]#"eu<[uL@DoݠH8i$l$h,6'Zm%y:DYG@UVid|;Qv'ie PY7&nN͔[_<boݵTMQ]#|+evV^ۊ@Z"nAxh| NYnFuSVos}ăZs;H40F)x~.ӡeUxk"O/JpMU=yx;pZg<Nqy$39/F:~x򽏣q"<[/c7&Fs~K""x[/uKQ$ $x@TP` `NUfOWlKğ/ֻ5{C<.%x\R'|Ûtx oaH:Ј_F://" HxiD<$jOE:_Rw)cHLǐhO#;;x='u{WmD|PǵKF:|unfDqCaFMh]!Zٺ9]Y< Cx~\;W taQ&T6ɟB(#xyH/Cr9 j! ܡ2 c]Eqe0Oy4b4AkpQm,\:[WB΂hι*/F!-*1pf-vIi;5e ͚jOM!C]rmtW Ts=eqZ|P gfeiu\Pͱ[EƬ՜?x18bp%B*Lvw1|,7&<ܡ'm<џ -- IhEٌ<ܡ*o""Y%µcʄjSCU$H'{М?sb8@pGjyseF:CR4PfGjgz=3[fwqQ63$ٯ6,SU%Ĺ(@k!3I'z`Y/Byѩ2OC}<ފБ,nfMly$XSELu<W\SQ-|.B:ym , nܪOI{xɨdȥ/?纟B2)x{YILF.7^zx̴+#,A(/:UfVɭoطX%= E7NmʖK>+ pτSe/S}ž%> |b^.0?cWCGM;!`56i4ry% 8fݦuR|u!uasyv'n(c зfʍҗ2lXb#4Q]BGQI+f :E"KpbKY'(AБD Pn0=c^v+,G(E.} !uaʠC*`!YmoNEH/k%Y+"tC)q!t$1"e7LطfoO(/:Une˥O;!ua&ЕU<v2 :={$`f^-m`˥O>Paptq4\K%a2m.[.}׶8tUyxO5 aqSg-/ʋRs{}'ke6bMH;f:\&2m놩1xmB!o9^Sb~y05Y;"iꥹ˞!N!2}- ZfnDp]V=W]?`neK *Smзy{"9&͏9!6~JlؒESY4+L - ?M6.\~/# GB:RwF85#I3L|{% >C\ULs_gPn\Ods\W3qNH;ϕ~7]}IBWoKH+R, eO(ws[GiX+SVar~~ ljU+$X9 --f7m~x4>XOCGiX"0wU]> !.{:% ]~v6SNicQPGi>]q`KӄrRwSJC~`r$X<SRo"|K.}o'-?Ji{~P&6wu_;G$gie?LH;؞KmL[oɥx%h=]-"9\nΧlvK(gȳX??Ymϕxzi[r^(-Z8tV{OHˋys8kPzw']#ߒ ;r׻x\(7 ,/:M7 l!!-^)ە-I|ZmeH)|Pn\jK}=lmϱ)lI,3: :oWirE4恘HiJ,ɤx􏷫~ 4ÉV.GYd6<AZMt"rMQPdwx%}xfqMm-c,i[C=.2:M}x46p¬k? '鴭Ey䚬#@na^ƿ_-,_ : lL/.1d<=AV˶NS_%1ԄY#_Ex&_B3ݸӶcn0_e4u~jJT:TE7-rmf\N/2ueYж0_8M &pChݹNbWt.yM:Մ'"4KN./8-#?p¬njtvL7_Om'/.Z\S[Ğ 0 ^NpLrnU?z&\zw=EBN.(5: C0 ⢕rXdW&t5~g(|_8o7u67 nI_AEQf8aZ[9B8x_"t;HjLccdLw;FY3۞:Cw#tON^ˡ+sCՃӺ:6oEhGuo'e'ծRfٕ{_* n5ôʡBԸp'nUVoL+|B30λ#r.jWG=^"L7ʛk=LCG1Ȅ0ݾ r)?$tˋvPgK=q u~R^nzYd<MnVrK9i1g!aU'0ˮ:Vy3Nrhȥ> '8{ԃM=rT9 rǦ=K>L'%rHnzm9eSOՃ0T9aVʽ:`|[^Vr8r^.P4hiQlYAՃO=m^aQ)O&zHfEp.hrHCh>M=q\a\V.CَPgezܻ!'pׄN9xΑ|waPBr ?C[w@hr?ؖ1U0mUu/)n=H_Ui2wˡh.0OV4RcMcይǸ _r'mlmPJB7X~zDՃ6yB=M0Br7zrh},7|(;ޖCʁG[=yz.oTrq=Stˋ_\wL#ҙpPꮍlz4QZ~Q^vysL]0DŽ[^V /}:My\u`mM۸twgD[㪋5M-$nlq:/<9U?t}Qrcwدq(M19 hK#=xpi{aV\yr}+B6yrERvӺo{Ye,SS/ئ̇o-ԳzIn~^פbthȷMshTi&';qюr/Jxa^np8p}12A#J~ZO zD$(S1v$e7.7uUz6ߥޏfÖ{y$ߏx2t(^E,\kO¬ꦫ '0 5Ӫ֋ Y&2IܞEj܁vimm A\1vGy}ٛ4x0NA 1GcX8o%Hv\YB<|>cg".q^p]m2 3ɛ~~_;¬Y8Mm—'_GYՍylXZ劸h-2u GC i$q|GzI9ìe8t=Ui;,Weʦ󻘇k,^S313Q烲_-ɇc(eP㋘V%/;¤ly߶2uRt8aZ<,Foq:ɇq YӲahUEZ3?ntE\4y6|H`~\ЧpIG/HvE>UČ_a.cWgP/1vYՎzʇe2%)]8L}S$µMCrEםʇ<C\$&]!d?-7 \Pa~ԡ,E. Q6esUo|p:P}8]E:1~̇mYA-<u.y]?0vj_e{z_yx!ɻ+"y؛pU8.! HB߱LpDUa~Էe =6Y0L$q <*ŹLC[q9I>9yDrEM?+^W:Cӟ ap-2 r<eU{{?-¤hq>:}[eɻW| --yeT8pS+"yh" }f]x"ʪVU8,>.O8aR[tʇo,o⸋C\߾S5LIP5<\c}x9R?_ċ R1wC]\uӗ vM]d(B3Ls3k1ͻ3b8O)$ZzbO}.^طMSorCNINݸ"bZo*DݴmJ]Mz?7J\ --b,PS/`>>b *"tC$bJ:hbOIqqLuKi0NPVk! )|wH)Z'el2EVnƿNfQXrA/w׻ĦuKi0a\ --b>O --k#@6 --{p *!aO --endstream endobj 41 0 obj [/ICCBased 120 0 R] endobj 119 0 obj <>stream -- --endstream endobj 120 0 obj <>stream --HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  -- 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 --V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= --x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- --ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 --N')].uJr -- wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 --n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! --zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km --endstream endobj 117 0 obj <>/Filter/FlateDecode/Height 3009/Intent/RelativeColorimetric/Length 104591/Name/X/Subtype/Image/Type/XObject/Width 3004>>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUv; --肖`Cc 38T\}[C ZU>u_{2][s]\on: f(}1x^AA/]w5-y e}Û~p#V6|}4Ό_xfUOB*;~g#^>> ~|uKE?;`>j`:O+[=?㈟lxdG'T:qofa軐Ul/j.ٛ`ok}kWh&I&㻈~M<0Xho}TM^J`zcMʏ2 --^2m>n\oJt+([㤯S.⛆bb|vef?͞z]]|RtI=Rd|}|t|@Ve{_md?k={]M|=[m71_:>g|M×+x6QwG{jsV3=eJeM*sɷG|j; ~<oJMW~8.ګfOɞ=z*C}=]̧_>|&cW _%|,㉂_>*lߔl?JU{٫dŞz=z!ŸEɾZL:s˧2>U|mŸ ~2;od/f{SBh/QHXsP|*cŇ/ '|S)Y}w|nPgj=D{!dŞz=zÿ.ow)ij1䫌"n.?i ~!;7cGn=fϷ V{C={U}W|Luԗ%3YmW ?WP~}rASݾilUPjo=7{%SVe[G}1㟇7|}O|CM}l/pOj4T{f={ ֫N)CgSi)cnj5| _6G --xu!ۏ`?P폇jl9K^ϱ^B=O?Oi&ګs/_*k:?*C_ s.Xm}l?PB?}!ڛf^={Su&1KE$of}KŇoJ/ --~m?~ǡ~?\խpme{ǩCr!K^/^gzJUʾ\%Kŧ6|] {Cƀ(Bf7S~}lo}C;D{jSZJ=O?zOMW-CUÿrh!ۂ>|C u]rnb6j~ud{z9njTU琯3>T|ut?~7u;}2ڇhF{j6c^c+tJ)cŷ uOd~~pߤp? uۧjOPu=4{(9K{R>w|Wm rHQoi~?G]} 1>dŐs?Bcd%@PI$=sP]-51fr]|BmY*ڥ=dpCu䏆2(8^Qx*Y]M%{|G!zn}[]}Ow{BnbWv/ڥ٥ol+^ױnK3^xU GLx[ --w{]Q;B!wQ^ۉv)hv.uluۈw ?6^|<O~Ϛ}[|G!zϭ.u;3v{>l/+f{]n]UL]E.5nq&Ko||_(/@w{#!Bj0$~a\Tfjj]5Kv @׋[Az?: / B/Z€/ + o^'x ]|hkjR.\.N|g3߅ߙ;;B!лi%w$-d*츽nt}v f ]Uv=dz8370hx?-/Y&me^{*L߉;B!(܅D2Jg2\p{v?ۗ[fG[ٟUžk佈W ^ o~Ā3;U\6IS$n}|G![ ]v{2J3,4=vpl~ln1W+W5#^5CxY,x?`wvlJW3{.dҩT2~'ljfB!}O;=LҙL6Gp?;?n/no`81ۧ~3jMC{5t|cۀ'3' "~J~f3t*d1c!BKX܂{2J3,~nongMlWU_ex~~ʀA^&\.ɤSd"|?B!tGܽp1܏St& b^!]ptס}s`xU^K{^"gl6N1B!"'$ܳ "Op/JU^+#|>Ǻ*H~8'rL|B!PІ{Z^(+*v>qܮa5w[WP>Ā_.~+e;~"ZwM;B!OF'9{Lp VKqrOvϒ+"F,̈́ogx;%V%߳*&GwBSܷG,w36/*dwۙnT[Є xwO&~ou;|'|? --M!B{Ć '{po ~>O&vGvt:C}R_Q8ߧx<{];N|' |OǼ|(|G!z{}Pn>=Ԃ{,޸dwpO_%ۿzo/(WIhD|'ww;]{Z{M_!Bipߒp@H {p x2ήn==x_|~_,WtB~{];n=/~]]!Bͥ="eýZpow!}2fou po޿5_xKtJ|wwһ[*7QB![ --I,w{L=a{݂{pܧSr|n#?ܾgoslF|wEYx@{T="#BTGlpp?ýqipg|\J߯u{oؿ^[bA|"OCN0ߓ#{;B!&Re=pߑp?c:ܛ X,oۿx]q+ܾiUF;|g/k>||/||?Nz.B!6*-m.˝#1S'^,S5}d9n pߵڕ'߉79}F| 4=|O8|g0ߣ6߷wBM}ˆ{ԁ!=p'޶>bs ށJ큽w;r _'} yi1=wY۶#;B!І=b}ے; IJWu nߴP_wK5}wһT~D|Gmo)|B!M G-c1Ý-]:! --o߉w77B00ߥ޷mGwB6ܷ- wUVKٯ(CQ:$7],X84%|/(=OzGDDDDXX}EppߢD=w{2|}vF^*U9z'"""zp6rϩ܋"+=.n4.~o{=m.zWOO ջz'"""zrO.pW --w=.Oވ) З7]^* y廣INDDDn=/E3*7]ppw軽߱~o~7|YQ+Ebzϊw"""7/Ai#{I.p=vu{7n]^,y{z'"""z.pWDSF!p?7pWps?j{7zqջ}T2zϹzwމް6ܣr ElDܷT ܯ;nu{#o1QާD{VFDDDDo\[)#IW9#{F{?IpAvDJ{{_z(czB>zϠw"""l,$ {ZUDSq++* /=׬z%-v'|2|^Uˆޕz'"""zQ}f6 w{Yn^U7G}\T蝈uu{Ƚ E}Sn~dp.~.zou7 ]^^]}Z^h}=މ^U'OE徲ZV wUE[܇^|{M~mn~|WWeữwữ=z@DDDD *ܗUГF^uwJn1wew]V^U|7z/y{r;r/k*ݪ݃΁;pzwợ#}z_Y꽄މ6܃rφn}eU.pVyrkUmՙ>ߍvnՔw}c}Mz'"""zum'=bTK" }_].pYw#w>%wzW;z?>:Tlo˫9OwG9NDDDBrPr/(r/ܷwTWwe ܍}?-Vw|rz?SW6U+F=;ыޖ{ƗT@ "U{eK`p7rwG}ȋ=F ѻ%zWޫuz'"""|'}ړ9}cS^S*w^=7׉Fm]P%z_+;+ =~3r_wvUGm E p!zTˋ3꽢z_/w"""[r_ܷU*wFȽ{O}w[^Sz?=9VWUNDDDKȽ,rUg"mN|!zޕFGƺyNDDDwrD"M{U~|{7brorޟ\.zs}}SDq7D;*#w#{M{{Pw{٩}_%z_/޿;x'"""}E*C#wݶ|Zߛ!;z~zSWD>>މhK{:IaOrD {M>%һݶޏUUf[:=މh{ܗoyr?q~Ƚn{ P |oG.|7zPwz_DDDDDޏ\rqpWv> +w>R2zoѰwOCUNDDD/^WU*KG5{Cх{D%|3z@DDD4rCG* OV!&0ܑ{F v~sm~}޳ɨ=""""R}דyg7>hN_9w_wO+_7zO>މhD}OFnۍ{GܑCrC~>މhD}ғ{73"HPq;|zOw"""|{rOgYO3=~pw˽)RF?{{* +OFs]n<ww}O/} =};x'""\/v徔$ܟ;wW:}8z'""ۘGw# {&$/= S=ޏ]w]fF)NDDD5_'s'rwjST}YGzެSFL6W#eW;-'gNKֻW}=zp>މ#A.ݍܿ/n}na^[&Nr3+!ɞ<^"/}\ܿA Ý wIg޹LE!BGrr/܅'Wk{{$`o<{'nc[) LLz/B!rr/r.nZ={[zLa'2W+RsI!Bw^ѝhArIrOd:cr__@}}Ov+"eHEQ^B!*t/ݙy&L*f+<%;r 齗==׶L]STww^&s{BB7{^N.^U3Lq>ɽ&h{ݸ݌AslUEUsˤbcOB!rIeQɽRerWuò]>LW rGޯfr1NAĭfc.<K9ޡwB`%;$aڎWQw{h<ܯILܿ@={QOz_gz InEa{m0W?ϘyLx/!:rIewtgrM7-ǭي;d0L\AAn./8{nF9ih"תEA9#B4;;;{&J&+nXAڝn&:M&ϐ;:VxAwu|6=luױL]SeVxG! =;ѝ]U0mǫَ`4LW~Or䎎ׁ޿6jO' uV3 |ϵ-CWYVvzSޡwBZ܋$r*w1y*ɊFlŝT|zCr)޿<&}6iFP44UjLwwA\;B!N%;NtgrIz~Fv tXr2? 3~'o l: nn :k,*Hg(<{#BD^$9DFw&O畚$+nZWQwp4Θ?^ wt;\gp:qږ\.<K;B!N%;񂰗{&+nXي`4jetO=Wmr1NF~[Q#{m*KjwQy2zG!^$9Ĝ՚$aڎW¨tp4KS5ߤzXt<{ݸ ~ݵ-CWYVr qBcӽDt8^rWi9novtX;2?9޿^_]^t2^݊ 9ih"ժ9E˄w!BG,{^x={ZU3L Zq lX/.o^;莎٭4 ã1@N*5mY?fet}=c1=_xuIUr'tws~j}k$\Ǟԡ, --<!B -)B/HPiaMmUFqEY7gB(w{̳dm[eNȒslwi~zG!/"VM~;4TԱ>13_uIUM~";z/}"O8 --﹎= ]CYx ;}#Bt;EtxAH kj;篂04/ٝȽ;Q/D̳do_̝eNȒslw ޯ[C!]~ rg9^dEӚ9\xfyY5QBRz5uUiGa=ױk#u( MQ;B!~INQ4 Cu5WAIU\~hNߜr(Ɋ:&5s 76͊nvC+wBG{UZtw7uUiGa=ױk#e(vz'x ޯ[C!rj~MфoYN2tÜڎ IUM~x:A/5?z?wM]Y7z-2'XUdI9wwB!E3s Ɋ:&5 o76͊nvN{C=5 $`{cOMCFP=띡!Bo݅4}; 4TFc0z*8wCGBܿAޏ_:wM]Y7z-2'Xʒs3-ޯ[C!zz_r'tg~Н$ya[MM]/rѻz?a"O8 --p{jx %D4E!z><;E~s;4TFc03] $͋{rGG_"K&X/ܞYDCYxcwwxG![u;MQ#mbX3{zuiVuNT;{z#މ;*4p3}*$i~zG![;;s; c}bNgW04/z't't?=<;DY]SEnMZzܞZ$ --{띦(!Boԇto:߲/JCe5ح8)@B$Sv;fӍgtXmLq tn'~2_N^=K(=ޚ|6 *r[xQyumQ{>fbXN۲j}}8˵$ͪ_掺O_{O8 --<׶j1@u$CSeIc=s'uN RG1Ogƴl 8IsGO zUދgiz9NFJ- --KSr$;|Ou'u-f9A:h2/כx~iVP2w~By?K,M0\2׫l2MmIY(~_umQF^w2fbX^ڲj}8iٮqfIs?b{w<,wkY-{]#Ogƴ8v{R//foޏy&{eiz9NFu$CS2y u-P՝h_~ѧ!/{'y"yO(=nVt<4Z+w$g{]ޱwC~={E1,/Hmjc8r\?4^Xu_F%Ya\/=UH"14U-ιES4QMz/$ʹ_~ћewYG:Y-fPh"Eci]Хwyʺ(QTGb6-(N]Yá;:*$Iޓ(=nVt<2Z+%ggw{jEI݋7[C.宪 x:_6[0SRUOu?Q?[cwww.M(\2l22~t$:.;|WN3,/Hd:_ͭzA'nD^=;:"IޟI޳4Bu,sZ̦TEnTC[~ϧwuoN NjRGQ{}}8i9Dq?s>[KޟYDa9v^IލmIYj5˽y~W~[{YN۲j}8r*r[Hީsn] qa}c;m-fYFQ42=(v4PJYŹEpou'RlPP[^8$Au_ohlǺyxy-CI\gѠm7Շr1ˤXiޱw~cTL6_,UuVh2/IQuôWlϨ;?񽳼SM]SeQX&aިQ L:E#,_#9[h,LerbZo}leE uu,ewIX̧^Ey --l:G#l<Yޯwpݭ'VH4H3ս`u ʪli{6wo{xy-CWI\Χр^l ~˛;;>SݳBBuouz|)HrxuFR(l,lwSY\.f~ݬW|.JcQ/;put6OuyG|)Ruâo?a'3YהwCSeIX̦!{Fy/2d"!Yh,Leblw AM7;|`^7+]>uZJRn?yy\uOPsTpSݳTJխh2/EYtâQw$e*Kx^{2d<Eܯ܏ut6_כn}!𺛖P{뎹3;w4tUi5X L:~\poBuO2T[xJudU3LkauB Aiw5E){Tey#N%=߻k/;8[H4H3Bɭ{o0buy-w; qLCSeI}7b>By\ӺyuSݳTJ}2[,EYtӲg8fyW$a9zy=PsT27W;lt6_duo! ʪfʭ?"w޷w)"h,7Q2yu>{ꞡ )6}w_ԛyPM]SdqMWJt2\Ai'S{u_Eu #Byg{w5ϻ*v^eyGܼ"Ûiݣn ^{(+nR7;O$+4(xzyϳǽ!+uO$TRůduw>=<;nHr> ^.RS,|;ex^,{lw(aZsG~ԫ)?^ը=g(1֯{=}8R%^wLu??1l-S}2yeRPo(^ޱwstZ){||)H}G~Cy_y_̎y/ܼGy~/~uϰ?No.u߰;{P8}GyMCSeIpm7 --{:@.ë}$;}4QeEM^tN{߆>A޳;JݓTB AUVW_;)fe[*wAΜWk_WR%\wn6}r~iy_{yy/y~ow!p4{lwñWwݰ[;ӱ3 --/ f(" y礐Bb*IC쵙wƺrʺ8weni5Պ}ײcc;`[%eSr7׽CmcYwX}{_}7wǾ+qYۓu/+^7̀1yoO@|ӳ͝no`n]ܻ뫋Rp|t0?TX#ƽ?Miޓy2?;̄mnըU=ͼNzͺy1gk.]xl;:˼y(^Ҽw+~u}+׽x˼wy)}4 ;u~{uSƼpwS: r_e݋ɺXwc>2go3Gwpt\׽@]x_c9/꼷M~*}yXwl,'66d"μC__z1;xuļ?{vjC;~u'{y (Mκ0C ںMش> --˼y2˺,~s`Z(yoye𵯬{Y{E{ʺ^edڼ?^3׷Ix_4k;>uTֽƺ>y*~a{Θ0g{Xso6Ywüc_^iG;yy[潮{y_>[3+y*}EugμgļǙw<,ֽkYwYw>3u(|o;?>,%= X$g~μyںĺ/uOu`ɺGu_Q}}s{uy}gkc-I=ļ0s랓c/7}ʺ_@`{M{Y#u޳;c{T]xruycvgc-uXu}+7ʼ}qy`B껻*p{:K 19adOuuy.Lh}`M{uӼ^4=ͼN2(hV}A_֎m[;0{IyC;N_H4[X\2u@|2ʼkʼ0[u_6u@{)ubhyMdݏź_}Aw?)TJuޗw~Ӻgrۻb b7rNW_;Py}}.Zl&LėGy1uƺ'u^~P21[1gbyOy_aqG1rSںu/)^>d݁92=}Ӽy?2=nY .=*}YYƖXX c{;0gw{KK1r7s*OJ"atqu{SY'o;0?} !, }w[{2a`_x2V@XJXwYw`.>+V}^,.=Dwg^U}ݏĺuub_Xw`P2b!{J(P=lYLn}s[XKm[;0罭Ex"}gkc-I%eR=ĻuOh뾻t\(_o7uyļ? nӓ2i1+yuvXe3? --DD4Ʈ.r|qF C-ӽEn){#uKH~<bϦA24w&-B}`fXNb]L >&t_"@w`1ޟ( 7${۱ R*"=#BOt!ݫuBwvNDeҽŻOr]y={!(o3ӽ)kE#tQ #z&X-.Bo;B!PRWtrRHwհBhB --~8 Awh!Oxm --{J2xC!.taXJJ]OX7O;B_#x_x\ДV]$x!GiBwҽRuн}#h/w!{ϵ Mnx9&-B~{)/ ݴ]f #x xS&c*{TI"ϞJQ!tMpҽZo)a^LeBSD;B_a۬W wX*7jޅ!Bn7TBw>{S :w`݁O1!޻瑩BB,/JBBC>Mg?W]ޫb>+ Bݿ ݅ 'f?g}C/c{mhJ]8&;;Ba9A拄-E7 >_PS?xm.{㹖B.+ S;B!nbpH^kp<%t6[!+?\>N۱tUn*ȳL&{?BLTBwҽT4v2)w!=x6Uw혺jP i!G%taX^rRޔUrN/2Xow;Bbxx_ ]mB^.泒3ީ݁wBzN4ѽ֐Urڝ`4]#{& xچ"11S;B!(otϰ eEBNFt_֛p<?#{S%{s-CjD%x'!vOb3 i~?1)ݟ@wU`y7N۱tUn*!ޅ߀wB}%tҝt7Ͱ]}<%t6[!]لo;19I!лzFoE)W(UMY5,B-uLzя3 ޏ~Y!]mjT|V$xϜN#BtO k Y- FYDݿgxxxzmhJNsLTBB&{L R6_,-E7ߥt_7=zxn%{s-CJDe2݁wBw鞊pҽZo)i~?拈b;BY"`y7N۱tUn" i!Gv0,/JBZoʚa^?O ݃6z5j&~1uը$plwjw!ztO !+uz!tG5ޏ~Y!]ߵMMiի!Ecbb"Bnbtϰ eJRuih2辋~tGwb!ރb>]ϵ Mn֫BNyDvBWLTLwDBrR4n]Jz?_MxerV .!%taXҽT4vn8G!.x?Exmn6 z~1uըU$pl[!z+ )W(UMY5,O ݃6;#?x_QwmjJQ-xOxQD!Et==rnc@w۝H~<z~smCSuwe2݁wBbb3 frRtnh2辻w!~P?QM@>%xxer^)r@N#B={ayJzS cNt( +Pf c l{;ͽWi+Rk}Cw :g!c7}ۮ4F*&ŻzB X(UjxbZrݻ^LgB+=JY-ZӖr1/ --B{)ݳ,/P7ۊ F9c F#%jgcݱf-ϱ݁wBw;;;'r.;]MӹXmv!Jt"xvt,s2UEn5jRA$xgRS!LGsBRZr3+K~$t?Sv{x4F*fZ.Dg)޳)<"B] 3)BwнhɊ',۽D~^AwK(nZس1Եn- 9c;B!K鞥tgyA,F>2̹ ;o;B臢vO~&x?1k6ܒjR!9 ;B!;c3,'ujИj;x~J hox??QzXd4諊lx}{&#B=#|TI-Ǔtw0:)_@wzx^w{n#]S;fZ.EKBtR to4eEFrx"vB?W_RaY-n%%xxG! j>2̹aJ;BQ'x?wc;l2{ܒjRA$xgR!з=$v'tOr|.t{Иj;x~J˝;BCJt:Fc@SH.,{xG!-{&;C.JZ%+`2̹\oG~"v\;Bz= --}jaͦaו[RR*LLvG!\Bw1ۋfwN ޏQzXd4諊l$xx= #Bwg)Y^ Jђ^0,'F /w WݞHNYLl;BO;s/f[QhbΝzw :)_@wЯE~=nZسxT --1 B蓗Kbws1R1ۋG~"v\;B7z%1 --}}Xx)r]x= #t&tgBRZr3kR_;Oc~^:s 4n֫b>'p,=B=Y^Hhʊ&,׻ё #~[ox?wmW {>5ziIJH!>qݿ$vg9!/uQ5}ds{]/'bJ#~C= --}ʱfSVF. --Ogb #~SL~oK2'*fZ.Ec1wBBBFSV`vMnQ-YYd;ug躳 ebhw|٪{0$zO=;wϵM2NY-aӬWK\Fy=w;?;'2YrblGXwr ]|ϱMkj> fϻ$l:^ ]FߝE)+*f7O+e'ô]ϏxwRɻ?z]:{u^&~ը, --\2 ^Ǻ3tY^2|RkdlUhk$K=;wϵyvz1{fZ*2slw'N=r(u/WN8-׊?Ζuuuo̻9iumYͧAݬUyM'¼+랢7Jzaڮ~\w;|QHvyΧ^ݮɰm5b>+;yW ]w$9/kvw0̗ r fϻ$l:w{4NjR&W(Uvo0.VNOgv=0wD!B:]/gajT|Vs>֝r$grGrUaڎ_nA\w;|dޣ(y\:NY/faӬWJ\Fy¼kN=~wEzNf˵z#u`?= y7m7t4J1Hyg0躧uO erRlb4t6mף~,yGy]/XgWl2wZj̻, --&;^}wI֝D9/kv?̗ vnON^-YEy;!hwxS;a {hu|q ݑ~}zwiz1{fRJ]x.i4I!=vN=dRr̓}%~C{Nrwe6t4Vȩ(p$ KK /H+hZfoXG(Nڝ;~3-( }0z9 VZ*泊$_v7ڝ/J6_,UN4/7;<:'/?w_8 --}ױ-c]-AݬUBN%g&);)f --J dzz7(\iNw;v~9aw|2w[jϪs, AaNKwNeZhu|q wHwy_~K=~]/faӬWJ4I๤$xw=EҴ3/JJ6_,UN8-;<'/$o/lw(]hj1 Fr, --\&wxwo^d5W*f7Oްl(>_vwxdL}^'~U"<; --kӝEYj&f[G0>_hi"5v^(]~^ƃ^Yh*K`B;a"i )jPԛp<[yO4ݣ$o/lǝG:GmVm5e-UeXvwڝ 4ݵrFj7A'/~K= --dL}^^Y" <{>XH:iw%%/V?̖ntgt9Bu߮ѠnZ!ʢex'$I 'H+hZvotw0/WHwxv~9ax7f9 VZ*泊$\{.KJw^lX[h2_nvut\?;^+oIG샹߮n*Z!ʒg>h; )f --J dzzax Ş❶{-cY'~ը"<;XҝEV6Zh:_mut\?hwxgvgw[/gaӬWJIK=MRwx,S$; KzNfN7 |>n+o9Bu߮ѠnZ!"ϱx';!Ig8A\A+`<]{`vNV)r, |;yG{YdsRr̓}0>_h/v(]hj> F峪,xfɑa --Zhw|}r0iߐ'yNr;9S߭ɰi+b>H=MRحו0[0'Q9#)fR9$ OW[DE;GJQR4\5۽xXmq0'm,1x={qY&~UZʢ;!hw( a U:d0NXt{8 --}׹_Oz1zfR64E%!tH Jf+f7t;FIhwyv={طqY'~ըZʒx'ŕ;!,yAUݴV?Wr^IvwvO(]~=vl_ݑq{þ]j> F2uUD;!hw( ŋUktOzAohüN8=~=vl2ujTYx%!ttDY ZovlWa4"?4޿i.vvV1uMD;!hw(;,_()Q`<]~%tb=3{طqY'~UZʢv/C@tH;/VGr;o 8}~tG@ڝ{D:]/fAݨUʆH"Ewta^pS0 ',#^*UTB*-r&)H=x_+~ݧ,/HXov'nEۮ_wǺ05uuqg`o m9"ϱOugȤwEy6_j:|g?OQVu}Xw;wkGYY~{_3BU$gBƊ!_) .V}Η$Y~/MXwwOGv?Ж,ۿ0 ^]ww9^gfl=AoXwy{6gO}9\뫅HNy';^MC~ߝ$E]Η$Y~M;;F߿]SWe'?k1|&<>! wFם]w|u8g?VUtûc`T>{<{%?W UN}w;.*;/HXksw I߫Gwy;}qgxC[gsl0xwxet2ߝxQ͗Z{(NoEYM7;FüͣYr /ɱ;s" <;wxU4S !OY^uno;'^,Ww]SWeqK(`m7d'a3dҿ;eyARJ_휼KxM^=vXw;swM]-?ǃr>EcwkΐI,NjlԌ:ݳDqz+ʪnݱ0Jwm=ϒkxNߙk}PIi?wǼ롁b}򂤨6w{9ydz4xww*[Gvk1|&<>! wWDם!Y|u8g?VUtûc`>{<{%{3BU$gB!_) .Vɻ$գiuǻh=睾{UY8 --{l]kѴú`ĞN߽k,ni{<{%r쏝3Y8;!1:hB躳 ɳJ3w}$գiuǻ=睾{UY8 --y7PI90xwx%t2񢤨 X[OQފnxw;݇yoGuϳ'ckLN}w; --%,'l|yOѴú`N߽k,q'so m*?vY5pdq'BK_GW`C&X;(^!r(zn{lW(NwǺao~OFNQ34Ex!NSw9u=_wIьZ&f^Ixw(wO(]z>l׋xk[uSWei;ŻŻ/ʪn֭vo0-j~iXw(ġ9qY'~٨" <NQxw)ȺSź3,/HfTN4/7x~'źN=w]/fAmM]E~w;~$~weU7V;t]?xw;ɼIsw|2w)L3uJ FNx9IJ%ݳ4n_Oz1mf,;MwǼ Q4fjub= 8Ȼc$N=Mw,alT Meww;EWwgXN֛ͨp2_nvq0NRxw(qxwz:lWxmY5SWe瘯|i;>䈢|ݿeU7kV;Mt^iF~w2if9 {fjh$p,y --~wwg9AR4Zo{l7(IɺD{Qi]-Aը"<ːy);|^ΰ()YktOQfݱP"w=K(]v>dk7UCEcwyŻŻ ʪQ[p<[wq0J»@|diݾ|:w[)L1>;U;hfGj?]Dq=Xw($ --}׹r6Vsl4>ߝEYիugp:FI=_xw(݋y>$n_Nj>;FIY& --MQxw,]ߝa9AR4hv|ٟ.q=wG&Q|ح۶ꦮ"1_4yw;| E1/ʪn֭vw0-~%ix}_;Hż?Yw]r>;FIX& --MQxw$]ߝa9AR4hv|/q=_uu2[;y#K(tخ۲j"1_4yw;| --E1/ʪn֬Vw0.j .%R߿~,CunnMN^54E8{,'HfTvo8-7~')Yw;b.=aZLGn˪"<ːy);|YugX^ͬ5ZhXm}(N3Xw(yO8]v>xk7UCEcw9$B]; պ dzzw<$%wRz{YGw/v5Vfj$,S;ESȺSt%wIьZ鏦vw/4#uRz{>YD:a^ƃ^۪WuUyiw ub8^Uݬ[`<[wq0J,_w;{_GQiY'~٨" ^) --$E3f?Wb߽ 쑿;Jw=4BuvݖU7uUy睦ɻcX/EY͚z{8_m$/;Wż?Y.f9 {fjh$p,y --vQDh}Ќ @9g@ rPm_@w6q/% NjZ6ZXaqr麿c'={[GY?֋d4땒" F1tdwӲ3,/r|ݟ vw|~{:qcnMNVQeIXJ߽w|B4 Vjvo8.ֻ~l8|5s.qoVsmՒRyy' ;;z(yI杢,wOwgX>~wX5;dRwq:ۮ燗uǻ׻cǽ]/fAը1M_yםl^Kz;M덶7Lv1|<;u9 {f\ --ɻxwx81; \ARF7̖V?M{D^os6tꕢ,iey(;EKH>N]'^Y+B.#pl4# E'rB&Wr '{~@=ºz-~wɻ{mZLGn^)b>Y&w»3N) ˓wbGjzAHwѕXmxk7%Eߝ;;~?OgR[xXoѴv>~׼_/d;u5 f\ --q^(:yw2kvo8/խ~8-5wk[6t4ꕒ,iey) --?/^wNwgX(+f?.V8m w%y|ϱAߪxk7eE*d&NyxټVw0-[m4-O_F= <> }aӬr!x!»qYN --R5ڽdTwtɻk_efVR|6swuywɻrRovb ~û{{D==Aߪxk7eE*d1p|:RƳzxݯ׻v:~oswj>;Z(rgi;8-?r~YH"N^"bG?&~33yoKyQ.VN4-58Lw]<jvZ*HB.9&;E๢u ˓w$T:_iywm2X }MNV.b>Jr׻c`8> r\k{ÉXol9G= u!ywsltj> zHl:ɳL4+ -- Ert6/J鏦i9O= uǻsm|o7:ڍj LD4wg֝_Ȼ3,O]R|mwmpw{\}׉d4k,3$~;o S ʵF7ϖzdXwF9y:tm9VRT|6Y&zwewgd:bGRӍɴ'|ﹶu>BzFT\&E=;Eyu ˓w$T:_iywŻ|=.Dnl2urAwOr׷LN jNzcgq=Y;=6O-Q۪WϦ;w牢B\2͋rRkvldZwx}\<jvZ*HB.Y&w»;I)U`<펼\owu,^&^Y+d1zw1Ѻw}K0P6ڽD]7x#u|{ӵ|:wZJQtcw,QR(:~wKyQ.kN4-׺q80^w;nVsu<Ւ" Lgx) --q{ ˓w$TtҶ;w6wu,fMvV.bûc u'`8> rTm{ñXo"N= u=${m;][Χ~U1M'96~wY.EX5;d\t']<w[m5WǃnQ-)@ޝg/xwxOyI)V`4p2m;yȼ{c{c^&^Q+d!I NS!Zw*ZyT&'HR bgv=d?7wɻckt4k,$NGy\\(ךp2[u#zw/Aw=kwm\zHyweȻ)wwgd:bGRwi;Oۼd=ױǽY/ɰnTYeR<$ȼw֝_Ȼ3,I)U`.Vx6m/?w۱G=${e^Φ~Y+e1M'91Mw}K0\\(ךp2[7ywqK]n۪WJt{w&zwńwgd:bGRwi;^!7ۼdɻ[~Y-nTKIeR<$y(;|_Ȼ3,O]R|mwdziS ϸ{H|z9f\9;BFHyweȻwwgn.)Jݑwwۡ= .Xݍz1 {frFjM"଀""ΊHW{W̩J~M%j2T{:»D랊=C|\ *Suhɺ_uǻܹ{adMg+B;>ݙY.:2[7[k]?;-Q --ywѺw~PL6_,Wlyw/=ȻL]['AWn --5R*:~twxԷN3BBSGbowݻv$dޯdɻqoJԨsUY"w=;;WkHrw0KM7woϡݬ3e:_-YʐyORxwx\sbE*Su1vɻu_sNV_/Q#7 --9wxۻ?d(&zwV?TffkOg7;&~\a9qgR]YjԸݳ4{i&W(UؚДd\xg'sqo:S$ֹj'=»wOGNYU֐x4m BdI{`m7L;-Q;|Th3rvoawwLww<;SזhЕB --9wxݻ3+,/4[h2_u89޽g zMJ杼kxmKW%xwxTT:~wJhx2_j#ɻwۻȻ?zwج3ek:_-YDJ1ɻ?w,y*WoH`;b>w֝KbbV7TffkEg7;_&~\aktyelVLڒXb>KSݟs$w㩺 s]dCuNk3eDgwg t*wJ;EgrR7TfjcXѻ ^y=ȻL]['Pc+B1.Ѻw~PL,/Nk}kNwa~;w}ܛRAW5.~w:~4 --[˩ '"b Նxr/$;|3g'{Ϭ"9Al{ln4Ӧi "l;ivJ~)J˰ i{mSߨdk7_.iCisUƳr\݃tGVwW=;K߮d45B=2hwt6_,sB 'M{:v'v}ǝelWKyJ]U+B{*Hc1;D{;fHWZ'setv+i{?}0v8ǽmh<-IrL5vgtd{PTkiT^vxƯv]}ol<c# vO4mw*J`!ެ |,| bg u\hw[ʜ 6v_kʹi{vxelW|:w_!aq;Dl:/yhB}8]v{lBG}K{%ժR!G=L$~/h8mw͐vzMj[_~Gwu.TcWw/ r dzj;?;<.Է\{%*L"xwr:;u]]ҹۻr';|wLCt<xT".\yw۬www*`8SֻWN4-[ݴZwŏw?w߬{mB>Pw\wr{Hfnz;M;|;C> {f,=ֻ+wg8w'R7zwλ9NVΥjLww.q-JZ~Abynr>;d" WwU-޽ '3L?}|hmիśL*vxN^/=&ӹۻJ&O;0z5vC{>+=*\yw[;.#=MQ{MV7wλw?Y-faݨKZt[|T".\ywwww*`8"=#߽Rou|ֺw?<ĻoV vZ.ٔrN9{")ދwFyw8w.}6͚iM^xw{})ݫ c aȻx\:+wg/xe4B\m{?;=.Է|2^wψw~+ɻ^wWf7ĻƎwݧ~Uo2=np<{wE{LMs׷wZݟxw8żAըZJ 7xN^ GĻgw:d\ouz;~B{ݨK|6ţ`wIr=wO$3W7jwwxdk7kֻ55zo;w'R7zw|?__޽~w{ﮜޝywѸ xp<]6xw8ۓ=M}^'#I5 ww]FU-m{)}2;>wVr_$H8(#ݞnҷӻ+cs׷w;w3]̻iX>t[D.xݽ?Ԥxd\ouz;~B{-޽TgŻGŻĻywu Gbdx_єwӻ ]l<^+[ţx.㉔F;[nbݏ/w {Zﮜޝy}ݣݳ|vOb<.7gR2@RA@df# --*䜃=_?.S}γsf\,<=dd,"˻~g}w_2MwȿwoݧGzh4kzxP廟Nc{,w/6ؼjuϹU*7t8NOyw>wwĒzP,ך`4΍w7֝wzj>MF^UwQn׹wn wOw/UĻ 6zm5wi- >+]ǓlY{1}ɻ}1wow/ﮋw ߩww8w5oz&re_Yjޭ^+w艘wg?XB{8wݫV?w_p˻ϧѠnw/<EĻ{ywo \w_}:[pi*%)qNv=3ƻF{?yw8b>S^^q]ռu w,%SX5h<QԻWw^UwQż}BSKh»-}3޽%xwm.qvzʻvY#=KTltλ-}pZwn Em6,޽w˕=}y7}j{]~ww8ͻk_*V7\yw8wo7jo2z";`sB{4wwǼ;d4趛 Oݓ|w8>0Mh뻇xF+}:[`wwԻĻ>/8dup$W|&߽ӬweoRx${=ng;`zF{ѶGS^--lyw;`=ݓ --tλM}/ou`W|&߽Ӭ2=7wl;ksl}Z[9g{\[)17OF;i~Uw6r:;`=#zB\k{фwyi-5ɻvY Ļw|re_'yrލw_̦ݻxݵ|x gƻ_fs͎|1cEeǻݭ=UPr?޽wg_Ի;N5ߪV?`'˻ϧ@{MMFOxwA;wƵ/xwֻO6^x2=ûx|뻇xF+}yOlvV)wO%cp}p4a{;|r1m|PU~ƻN~ml}f]s.{=zSuPeE@PIe+Te$s&ދB;w?%j}o|}=->Zݯ;@R~y~ztxƻw{w׷vO2 <uݧ&GwSw@RSon~zw^Wgw{wUwܗw˻$7Datw Gw奔x_%޻'1x!@w݃KPw߉}:;w7}*zڻzw,zY@wz&zڻϤOw8;9\_},|^@Ļ}$|ڻJχݷ>1޻/oGF?DcӻTw (~Ow74_WԻ1~o;@~xݿ}}xzwyw;@%xw2r}vglwz'wy:Sw~HȾƻoE~s{ӻ'|ݏw_ho^{wwUwww@.G>R{>@VwswJ?w0:vp"~||{PĻ߆~݇; --wBλD>(w?eKYyndݷk~w(Wݯw}eiP]]>~ƻ?ywd$xwdDMwq4Aw_\M[w+z2w?_yw>08<adwx?nhzw"wz;2TweÃ=wx/;@r7@;9>x仿twJ' --5}ۻ^{Sᄊ*{יwl{w 7w(S>|.@SwUɾ^3wh}ĻywJwHww_]N{_OXwxĻ%JmxwI{л?g޻S>h{Oop;@r};yWPgЀw ݿ}wH/ww?Hwy|zO;@%;k{w˻o7λͻбڻ>EJy}̻]*xw7w?ѻ(zw_˾h;@Ur}-"~-9>*v;t̻@}ƻTͻбĻ5}޻T,ݷ;mwwc*ow(wcE}#s;t̻zwSwtݿzwJyw:_;@;K{o;@ż;{j9h˻@Ǽ;t,?ywyw:^DݯûN{w?7޽ǻw˻(z仯.{wUywjwPOw(Mݏ>h_:_xݯ;@Z}/z@6x[Pwkw?t׽;@u~~I@wKمw@O;+|5PԻhݗVwy݇;ǽ;ywzl;@~;@E>ևR"K@RQPɘs%H\{^t0ol'VC{伻=;{ݧ;w7;fD Vbɻ^ey}~owӬw߽i{.<s{/w`\ep{\ݣ-V݋;_ŵUV~|6 >~z>ƹ޽ױu ٻĻu]μwwq{wĒwt{w9}7'g/U; ~vl{4<5-ϻyw0LٻgŻG;ywݷ̻,{DwY|CW+&}1 xwP.'~ɻ1~»7ջf|-{Qx=n{w,{m#r{~Sw-Vjvǻiwノw/w?y? --_~xwX=ûX>{pT|Ǽ;xj)?{d<^ֻw G߽1)";cctV{Aww߽Yw:~(}w,{-̑'wλ=Pzޝyw ݶx~ݷxwﻟ^\wyw0Ӽ;`w?^4ϻ*' 3׭w`w{woOw7;!)/r;eH{[{Q{.vӽzzz5z|z<}:F,zhX:pqnd/OZ~ ޽Roɻ _'@{A{V~4ûwlC仟_9}8Rw[|VZ.ozt&ϻ'Ļ]܋w/Ǔw#==#=»Yᆴ=ݗ~~h1 7RA{2ۋ_wK_ --j;W'ĻowEwwOY~8{>޽m7k~\&y}3-{<=:^[o`Ȼ1wwX=={-yS>>ިŻ\ Ak;X<9_ԛy/ ݳa;`~xmOίnwxw0^ը /SxOF`Sa2SZԚnws>o/NŻǭw_wߚ{z'tʻwWKݏ|OGWYS.=&ҹZC`4`w?wψwߋewϪw);?"]h.޽Yw:?9${]CcwݫV׻mELPv(>=^\w/wC Q>N;fR|}Rf`wxy=9_ɻO}w|GZYq.PTƻ?r"K 4 ;?Vu5#7BwLpn?^wNf7Nxw[5=%=~û^1*)=(=+xwZZ[ΧAUWĻxw{Ի[6ñzF7KMp<pw׷Փr1I#ƻ;xw;dw5=*[Zwݓ~#t{|;ݻ|;\;}#}6;͚zX$yw.%=Mwtּ;|_][-ĻĻWJ\Z{PSwlXZouz\^= nZxw[^{$ʨwGwWVt<pM'x^xf?Ļo_wyN|ݭݝ݃X2+*{+wqv-Ѡ۪wGC];}-VXB{g|xJƻ{zՓxxjϤ;]ƻߚMw|n|0ߝyO}oOFNS{w o۝n/ =޽+|d(޽V)Ļ"!ͻ>p.hxj]h:[w/x<Żk˅x^x\Z{PaYyw;0=OeŲ||ռw|~5},޽h{"V~kZxw~yw_{R{MoW{+.NDAw7֝wrn?%3BR>xw"or.߽U7=%=xwGw|p,Vw_,5ȻUԺ}4ݫb>GC;7v{zxF73IwQTG^w2Fh"SwMkRA{,{ݼ;CƍwŻzp5a/][.Ļƻ݃ݝݭ;]ww2bY{˻y_nkX{xD,ljݽ~IkM}ǻ^tbfw8廇c vo8-fG;|Zӻ;z\gĻ;xwd!n,|h"x>q~>ެG^wG2FS[x:_jλԻջkl2w --t2 nS|\t:~~8wۍ\^= ww:6+ƻGIN4w;\?>]6~kZ,ryw."1R&}8.]߮\{n{J{q;oxwwwwwwOwoĻ/fG;|ZӻQ_{\gRhHwzwf{8~hӻ?xw|ɨiwO#ƻ;iQn݊wh"R[ou][-faӬUJ\&^7۝.h\{\t:~~8wۍ\^a{: ww:6+ƻGL^{MoWOwt6"םw^(^(Uj݇bw?Io\{=>i~û>pNA|;Ժ}%}r1Iţ!.{[m滇ct Ƨw7gQTGwwc#bnŻ{|p4R[ou][.faӬUJ\:^7~#twELXn}.)$P2x/DDlfjnAW^✑9-|;w?O}>spp{w kxXw?~ݗ{FTP뻿C ]w;_K2ʵftl/c;{w9lbxw৮ --G8{NRwtNd_?}lVRb{EP6ڽnN5~!Gtlh},wn,{{œiyȜ̖yu뻟'nCҵ~Y+TIȤ1;<ݣݳ/V-x~{mspt{w.Ow5c<]6{z/cosw|bȻ7"8yp(wX"$P5ɻ}}tw --wo z,y(/\=p<}F7ԭ|y}w;sWػUY`Q?_tރP{<ΉJD}02ɻwV>wn62~Y+TIȤ1;<{{wϊrX1~统O}>a"\$»nαwd{_3ŊȻ_wǼ<}OѰnTKyE[8 uǻOݿ{,Z(ך[7;|ƻ<_wso e1Nƣ|{t}P8sB߽dxw; z{wyx2| >2ɻwF>wwܣ߬Sf\T%!J_ñwwQYQ+Vw023;o|snO-}޽H91;<{wAVٻ5c<[Ȼ]w;uޭ{FWD+R{ Ϲ;]UN_3jw{w;Cug:vOyFWDwrAL*W>J=+bN]3ƳŊȻ_wǼ<_z9nTKEwH8w'ޝ rk5]6;|ƻ<]߮9t1NɻC ]w;ֶ\ݥjtmchwx@׿Hy\N4-+vFGomԩ<*_*2vqmmÒv/*U̗eo|>v?8t<5h3 tk$ --%Zk{CYQ5ô{;v/k[+}1V]\>&Kֶ\I7%R*vgmB#E=seA$Mf }e]ݿkw;/]iS=wMCSyk7*_*2)6ykg|!vvO0,ib"JN$+ʲi hh۬M]SAը &N=NoiwjVw0n7{ݣx-|sm˹"$VE,Cs4ޓL*seAvMf }Hwxk#~ --ih"{TK\&&o/1 %^,WD&|z~/;otgYNǃnQxˤYvOLXR\3L{wcΗoQ?`oQ_hvVb6(|6b44vOerjVw0n7{vv?\gk[rȣ~)r;$h08$Jg\YGB_7;>mKwҝ) ڦ<R/s4/kh'{\f?(a[ <v?85u:t[s\&vϻ{Mgr_PVa۽D=g?#-j mwJ_&~U2ϦSL{;tLBSUfslmXy4%R.vgm>G,N=ɤ~o~pvkt<5 --; vOLXRʊݏAx"{{ݭr1V]\>&N=Nkw{Z9vGv?B~k[r~)R;$h)?bqZYi\;v?$E=$Rkvbu89#8_vwjl<Ւ\gϾg`vgh'9(kvo8/7$hwxi i0hVH\&%p,Iw!B:/ʥjg˵5GwttH;7d4keE,v$i>> iw,'2TN4]Tݰat>}6dk7eYgڝa1q'H'9{ATʵf7W}gNi8}_K_HǽU׋xmի%H۝C'ڝt6/ʥjgˍ3G}wJ= --9,CWWi*TeRi'hC^ڝ;v/JJ5h{AHvx}6dk7jeYsI >~ HvOr|*+HJGJ prHG$ޯq?*vvߵ{sjTKr1M <|ڝ; lAF7̖mgvwvGJ= --ϱtE*2)cIvvkw{(Vw0-mB;v=tvf5 {f<$@go$hvOerIԚh:_aNk>K//ߵ{snTKϦ; nvOrKx*@ax4\HQ 9g1`$SBU{}o 8!6mwIԚp2׻uڎ>LkGخ۪k;v$P4M=rB,WF7ϖ<]now;Y&1i0\zFOGNVU(_zBT bIVVw0.Vp<_mv_Y' IsnOvVQb!ϳ IwI;TjN8"xAqW_&Khb6t[uMˤ96GڝFBY\P, dzz7OatLbalfJ%Q9&kwBdNep dZoub5j~{vH}e$$ݣ0dw|2" yeHv Oٴ%Zkv\V^F{<է bv?vVCS2iw͑vLPt,/JEk{lx~}nw;,?{}=F_LGN^U(;E!yvvg8^˲[xXm xڮt'$$ݣ0dwk}>ZE<2$dڝ%^j&s};Xi{AqW&KKhl<*Isl;MvIx'/JEk{lx~}nw;,?{}=F_LGN^U(;E!vvϱ\^˲[xXm xڮc;WIB= --Ϲ]N~aݬUX,CO_3/%I֚h27>Nv?j9e#Nig4e5ڽd\rs<{#e= --I׳u06b:wZ*D瘬) --ϕ;{XUjkv $}e$.'k[ɰn*T,y!v_3/%I֚h27E0"< 2=]Gخjh\&α94;*$e5ڽd\ors<{#mJ:}1;zUJsLtg{;M=ryA,˪Voub5j~v޾~# --}Ϲ]N~aݬUX,C?"mw*kw$)ZMfwNW0" qڷ4l<*Isl;Mv'K߅;wbYhvo8-۽yGH$ߣ0\zF_LGN^U(;E!Nvϱ\^˲[hXm|]?IǤ?~GsnOvVQb!ϳ Iw;ݩĒTkN8:]l ˆ{dxoǤwhb6t[ Mˤ96GڝtGӥB=we5ڽx\orsxg9!bGj?i9v𙾞Hy9kf9zFʅsLtWI۝J۝x1WZNWq $~GGz{9a^LGn^))R>+,Cҝ/;̣I3,/dZ[xXŴ]GN{Ea@ݺqY'^Y+BN86CڝF+%/C4i ˑvbGj?r;zH96Mw:Iw;P4I3,'dR[hXm'0-x'xgG7m^qY^Q+r!';vnw{x1WPZNWq $hw;|GIC]?tՒ*2$ӣoISB j/z~1>#q:Џj>:ZH9Q iwN/| ErB6/)J&vҍx~FQ|GGoa๶y9kz9FʅsLtWK۝J۝x1Wr Ƴfwv <ӝ{{u5~OGN^))R>+p,Cҝ/;ܣI3,/dZ[hXo'io;|gG0]voɰnEyɐvP4M=rbj?r\?Ii##<=N\ۼOz1 FʅNQHwxݩsY-W`<[w|1ma~( |ϱ~oVɰi+EEgMӝN/ iw ټ*f?WI7A!0\ۼnvVVBN9&mw --o4i b ˵F7ϖQ;_-vOLw9ivVZR|VYz$N}; ټVw0.|1Iig׳ݣ[c] ,gaݬUJ!' --!NI ǡ4Y+f7WQ7AHwK=N\ۼnVZVe<ˤNQHwxݩsY-W`<[w|1mvv( --u|2wJIYct' o;wl^RJzMW x_smr֎r6ڍZ(r"1IhwxvIgNsX5ڽxjٮ7;|?Ga{e]-~UT)x!MQHwxݩvgy1RFz{8/x~@?}/ݣ[xc] ,gaݬU͐v٭F:{w\Ù ---qguǻPt:,'HJX[hXm'Ͱ8wǼ@]ݣ0]/f9 {fM-rsLuIߝJߝxQJj 'fAH߮qc]/AըVyE8I=y?xwxwOayARJzw8kxAŷHwa໶_Nj>;ͺZ.di;Eɻ2 ʹBY7;dOݴ]?+~QxehnvV)IS^;|w%P`<[wdzfڎQwȼ~wK|:wZjEcuɺHyw'rj폦p 0yǻ@{Qxmnv --9Y9&}wºk=ߝ&p( --%lr?^tv $wWw](=2aZLGn^$p,{b)#wI+F;OaD1Qם{m~ON 9Y93ywGCt 'rPVN86E7mBݿU=Y(=2a^LǃnQ$,MQXwx9Y^BRk{lΚa9^Fvz\+dݓwǺwd$%_T`4]fXQ|Ż@&}NGa๶r6͚Z*d4މT?\֚p2[nvdznڮy,8 --|ϱ tخѠ۪W+ż" $ASވ;|w$%_T`<]fXQ|Ż@[5 --ϵMrmɰir!'<|&Nd6C; +zNxM;2߻_(=2a^LǃnQ$) --;;Jjgp 0"w]wa๶_r>;ͺZ.dQtixwxt2,'HJXVN46E7mBwȘwO= --}ϱ |حݺm\ (,ّjf0c;Ԥ&i+H"2ŻSxwfwɻ3/ʪnVN4/7xAw;(u'&qtخnTˆHǒuߍ;EygXN(`<[wv0NwǼ||ݳ4Ϲj>;zUY9;wGZDt NjzM:_]?ⴘw; u/=C߳/nvV64E8׽DSyw.ΰ )Q5ڽx\aw޿;结uO(oViի"14Yw;|3R#w`9^Uݬ[h:_mv0J~w{Is9vl<)w(;T ZNfx8^Iy}?~fikv5Vj,[;Mߎ􈢋yg9AU\ta~xw;b>$Ϲr6ZIYxw --/xwxwEIJ 'fw<]/$=7ߟoYDgk]-AUuU-֝ƺ(.yg9AU\mta?wx{ź~̒8 wixwxKMp(Y:dQfdN=MwuخnTˆH2hºK!N=ޝIьr Ƴz{.QwǼ{{YG\f9Vb,;Muǻ !eǼs(Y:dQfd֞N=MwuخnʆH>ޝZwhFhb=X(Iɻc==_,s~OFN^1uUy4Yw;bbYeU7+V?W|u ӌ;sɻI}b6ڍZIǻSxwx9ŻSŻ3,/Hfkvo8-ۃu]?;u8 --7tSWebi;bwEYj폦f<_/4#w\wik_vvV64Ex)ޝ» z;MޝayAR4\k{la1{Q9qYͧ~U*<ǒu;Eȼ/ʪnVn46xAw;纓wO(]bl<쵛) ywi Zg`]l$%y7||ݳ4Ϲj>c>sT( --KE9h\ԝ|S~&VQ-$Һ 1;|%zwwQUݴrj?]nA'YNwB;{ݿr6;zs,CSdD9;qN^eE3,ǫԛp2[wտGqѻc>\a@>xYGwz>d4kϱ M;xwj*9{IͰRkvzlWi?w4v97t4ղk*K"úףwg\y%YM-W`46QwǼ@a|ޝ=K_χz9 {f9)Xw_j8w/UjNo8-׻ߣ8^w$ --߬ѠjT\UYi --ޝq]dU7mhu|/ w(ϻӺgI[/gaӬU<24EKӺQ%QV4rJ dzzw8]{'kP;{Dap|:w[k*K"ú@!л3.мTn46QһczgI]/faݬU<24EKӺXsz(+a9^lb==wrwu{&Qf5VڦʒH.pưP 4$i?zMxaw^׻?~,b6Zs,CSdD9; --8w/kvo0-ads_y~wZgi,Q۪W\UYi --ޝq]dU7mZou|Wi|}s,v9l<赛XHbޝsZw;UqN^%E3,+`<]qyy/y#8qY'~UZw3uwg\xͻ$i?zNx(Nw;|Ϻ?7O8 n~ZLǃ^Q+{eh$ޝsZw;uqzwQR4rrj?]nA'i|w;|ϻӺgi,gaӪW~\UY3ح$UuV59*bbB`3<6TBy7wweUvo8-[x~%i>xwxa?랿{ws·f5]iM-=_w;yߝIV+ٰdgayU;}wi{z1zVVYb N>落w%Evo0-[x~i>1wN=9nOF0 ]%clˤw{ygXNeU7̆&fw897/$޽w;b<i{=z1zfVI9#{wBy'${I*z> 8gxdyTgaaY&~jU]Eclˤw7{鼳 ʪ^5V?̖t~%+/gݳwqx7|oWhm7FES$g [ Uzv<;7/;^ϻD^/'{^&^ըUuUy^&%;KLxQVjrOQwx!?랿{Gwsv5]iMeu7;!$EfFj?qByR(֝;]4B߽^NnNQ,K׽LJ%;)%REYիzg>^FqJ=w;wO0n߬Qk5M) }wB-цߝI*ٴd'aٻwRA=sޮnkU]E^}yxQVjjbg(Nټ?0bw>uIr:6dX ]8x|)潜;r$a6N8-7ru0JW6xwx)?랽=9~ZLǃ^YU4EyXwu;!ٻ0/JV՛`4]ٹyA'1JuN=Mwa^&~jU]Eclˤw{ygXNeUV7ϖ}\]?4wwxŻuaݜq]ͧAݬMe>w'o.wBw`X^bԛV?Wܼ ż%xuO(h֋x"ϱtˤw7{鼳/ʪ^5Zp<[|u S:Gwx Ż?ٺ}Ir:7dZMӨh$p,Cߝ;| ΰ )Z0V?̗t~'+/gݳwqx7|t<[ZUWeu/^%RE9Z zk 8fyP;}|ݓ(tmɰ߱$pl`/;! ɪ^5V?̖}\]?4wwuŻuQݜq]-Aݬ*"<%;;NjUzv8;7/ㄾ{1xweźy>t8 --}z9ٻr6:YUY8ֽ\;?żygXNeUNo8-;x~)#{w;ݟlݿ>$}j>VnT4Exޝ;%y'${I*ٴdK6alޟ1k~={{GA磽]/fAݪת*SE0 Όtҋ"$_d79=xnXɼy{ɻkMSnONA]Y&]wH*ΰ V?̖QVnڎ';~Lq%xcz>t4趛JI8Nߝ#SiRhw|ݟΪv7Ld#;㘬{|ϱLzQnMN^-K~;$yd"rT֛p<[wY\x~ɼw_ --smSi߬Qn*%:Yrl ɼ ˋJGj?ʪvM3|}O@ٺQ{໎eܯtخi֫eIX;Ea gy݋4 RZo{tNnXɼGyw;㘬;ywslSi|mɨm5Ⱥ<ˤ^3黿QtyouldrMy1>םxmwM=b:tZ$ --CNQXwȝt)*}wxT5h:_mdzy]/x<ɻOW0ٺ' --G{YEr6:z, ڦ~qYͧAݨUJ1tuJ睢wKZ&fUg([8u|ױr>lڦqi]-A$. Kw'wJ睢w/ 'JFj?Ug$[8u]2׋r:xղ$,{UHayA*WNo8-| q ("y{u'{m7Mr>FRyw(;Z:T:ExT5Zh2_nvGYtr<2!8׺Ⱥk[]Sϧvv^-K~;r-}d"rD Fj?U̻z{ECzQnMN+Ywg:Yr׼ygX^zgpR.׻a9$E1}ddɻuMqYͧAݨUJ"1t1ywº@NQ NjJGr;ʊvMȼd8{w;V_"xmz>tl{jԫbg'ݿ!^1[bX>{)+j8-ucl /Us=B;#B {๶ߚr>{jԫbgY!Kw1MYQle;^;c_/0]xؚ|:hNKc CS)3;Blw|\K-&QxG}PObBsX-f㡦*X --T.;;B%=IN,'J(;6Ofw8:ޯ;BK{9r6{jԫbgY!˖w7R7{~v#vB={akWhvZ]JBlg j]j^4/usl Bݯwa1VxvSUJci*۝vG!=IN,'J(;]m0.Vksw8ڮΗk;RG[Js~cdW٨W<2)ݳ;BxgX>{VTm8-tcCx~g?!ݵ\/Ѡו[RJw;BWlw|\7Z&nlx;Bv~N:\@S;mIUJci*۝+B{=؝YN(R|6v މ ޣ(;t%t}/*r=ϳLJ,B/ --JMlUg'+R?xmOF^WnIj9Rg!^޳ i|\7Z'nl'?߸{j("t'vߵ\@vڒX --T.;W!Ы{E3]Zno0Ηksl /݁w/_ O:ncPSvНgY!߿YN(*5`<]p]?Ηk;Kn{o }9 =En5r1s {&;B{=a<{є?!xw\?e5UjR!!tg(1awBDwKSפLwr|<#߀wПA`mVx8pޔ"L*I_B}(޿xgX>JZ]Vٵ;!~%t?C!'#uVSir1xobw!z{),{U+Mtp2[66x%g+!?=t|>;[/ӱ۷- =؈ !zSDwK |\JeX=Q!ޏ'+B龿}8f[WzR*2ieRawBMOb3JMjZ˴;Ηk#>VD݃Y-fv *{V9& #B?F~{at&W(UjuYf #>ޝWB1O>re4!U|VHslDBމݓ)lXu3MfDxl 7"t?χ`{|:ve4UjR!!tgbtBW=xODxgtwh-dNx?ޯ;BC}}O龘kuU2dL@wBbxg3BRdUkwx:/oj1NcM.V|V9BAwB==Ű@.t}O~x+{hwBalng-MiH=vG!~,{"; |\JS7:=g0B5OC7|:ve5UjR!!tgbv;"B_'ow\:&5eXDxl |!!;ߣtn7H.,vBv=Ű|:+*5IVi}wre4!Qg{{l~"B!{grU+Mtق} --7!^_"`oV9{߶̖RR*2ieR;B!vΰ\:C.5f˰z;~B՝WBz9}kuUBHdhw!=Ű|:+*5j- 6x%g !{EsLw/v j --<=vG!~Bjmk|x'v'xwEv'tPw[oZ&Ґ"9N}CB=lXu;]{w #gtPe4!*B.CΤ@wBv1Jetz`4-(~B?%fOn߶̶O #B S {&{Mj(Z˰z}1/;Bg~%t?߬Cv֛r]g鞈#BIw>J$Z۴; m Wt?tŌv 4j --i=g!=lw.zx:_)ޟ!ޯwB_[dwB ~֫l2reݥZH ;n}(%.b7Drh2JFE&lj國8^xxZ %lhT뭎txx\>w"z[t[to7jR!'tGA]ݡ;ѿonn"͗jչox_w"}лl7r!IYt|^N؝ߴ`8?H --JѺTx'g/,+&GwBN^-T2BwϚݿDDDNl;7x,2BRkNDh+b>toիF1Mt{=nNDD'vDR^,WMop7Og;M~jԌR!8Wt]Н:HLj1>2|\@D_܋ewIl2*_Jǣ (݉}xw uldT-{_>x'"_}ެUʅ\&e=6ݝBSNDD{lr{|~=Qk.[NDb6v^-T2Y݉~?LPmd67lu6ݕ݅K#Qg[;{dݱקޓLXԛ^tZ>>,Ӊн/to5FI~q+~uv;v'""@(KrU~u W[חF(pPי ݉}ﺅt6_4V;|6 MJt| m􈈈mr{|~=(x?Hg %wtxx\> w#ŲyCн'to+b.J*NDDYv?u87x`8 --JѺox_ AD+/fSws%ty{" 4ާ;v'"",;6xT&W( &އl~މ~iիF1M[t]Н];H,˕zxgNttWv/ddӽQ5JBs{P?O;{tw.rU~uާ._;ёGE~Z^3J= umCw't'""zxWvw)|w;ѱCEd4Ttl7jr!Ith>NDD~Yv?u8x`8?je}d} މC 6ݛB=0z݉' kk --%&x|q|+wcjK=njWtEB&Нc:Ļק,gx':^}1 --(i˴;t'""zN-'Srlx&3 +Nt\Xv?Iн$t8uoMwoxwxEb {Xx զ Ml7jFCwt'""z,++uY{U~uDG>ݗBt"tw+BnKw/t'""xw~} x މ$M[{ˤLcw""»cp4~^2;x':v?,hhҽD, --h~ ݉>x6x/Cwoݛt^t]B3Нc:9Ļקl --d:DG+tt --ݳ?N't'""m2BY} މ_}лRt7 EН#~6I{Ql+x\>x}vl}1wн~݉>5ޝNew»{^^>MfŃ}z މqo}dӽ!t/{HwNDDqYxwl=+xn>DG?ӽ&tt=Н{ Ai~uӳ~މy{פ{EIt{=-O;Gw G{G>DЋeϧ{{}^VtO&bEw }V{Aen8w/~n --݋&ݝNNDDY{c N}ۧѢp-}[;;ge]Ļ_=^[}3x'vuE?}FxwoRxwcȦI|C{ڤ{}]k;. H, މst_>Pt8GA]DDD_։w.-˂٭ĵŸc3#X@#tB !?;=GU ?VXyo]Pu --ֺ_=\;_i|yƼj[X܃\ w7u_fW\{y5eu?}-ʺ0K=a3 PΤu׽u$Yĺ0}ݞcP~gQp.}^w6619[ۻw@M׽9{;$@D̼6;1:b7y {yuDÂ;K^ʞu/Z~ͺIμ/y_YפyJPE`݇u/ֺ_];~U#κ)5r5Pu~Xˬ;0yޓּ0Rn:gu?eIa=;7\λ0k=.=w --yۺn@t0wuόo+rYw~Ǽ=iXw"yT7a;}Z;2u@[_?ֽ{u`{L{yXX;Q3iיw@;y߼;0'Bn]c[gޫFӟwylºwC~˺0y_r}y;@9(}ş-ּ;DuX~Ǻ00)W/=ULdp޳Bqlއ;=cn5ĺĺ̵߳7cޝDȺy --{!01u ccPż5uk;xww zsκ2?݇uo6jUo97>;0CoZ7iy?<>=t罢w4w --Bnޱ׽\=7}wy>޽z_jں׽u}u@S}۝;1RE}ȼ32aݻe{1/={u@jV`r; #>޳]Ͱ('8˯{hzn0,.Ou`P‚}oΤyށ/OrۭF]{R{u@ }}316jl靮̌Ce¼&{ћ^heށ/5qu5RbP7~ptrvqu#1/]s/0M1;^BnMk 9חLJ; --rDŽys=:h>dށ/ʺW?߹+}S8weLy0,@{uߖfOuLȼ*ZM̻̻wd?u7u^]-kW庯($0Ko$#^;;uZ/ֽ-]uO(jҼǽy?>=?ļWyyP˴uoͤo.Nu_w}u@-=wכ-1={Mu7u׭u`Y𼗭yoy{>{>{ufUJuaP輋{o=_,Wzßwy>bMuz^ȅ=5iXwTwq~ZLћwyCw{b[z*.}}y~zl{2\Eogq{BMښRE5mcwg9b^FS_{Zֺ;w}iI;zB5{y/xudށO^w_F]ue6&{̞rbޫz%$]Пw0]w= v*ɺML;kּż; ^unZn6jZ$=8;9%}-κG}#b>:2G [uOu_su]޻3q{wy>yX>0LS;; asuo5뵪Xý;ru_fy12ԶtF{M1]oއ;asֽ/ֽju/[~w{}y~j{Z2:c51[by/y7[b{O y>KpMuתb[C32?żyOy!W(rb{>X`݇wvQ*bwwu9׷wrދVoں=4ν{8^]雫۩f`幻>e{cּļ;}lއح5£G@IP9IgF{]ĚHt7 ݛuDt~ #B]+2swv)I.xg};Kr辋n1/fUtG!>a{Yaxowݴ# ;B?O:M>:-tBMTsw^ofx-VwD.)xGT={_{xmrӽQrJ;B!9~{;;û()j F);Bt?ݣgtݧa让rE@wB} <]&7Z9ޗaٮ$)ޡw~t'INwqcfnRBk?xxAȪVK>Ow$aDx9fx#r/O:>HDw;].w!l]!{)ŻnZQ~bx xGg*~NI{xm2{"$23_~W!B~rE"כ Ɍݰ7$C>НqDwS'ϧ!{VUe; tG!Pw 9,JZ%wzzkX!~xGTBSF]XY-6]S(sJG!B_~={ 2bxOw$ax?%_Ru)ݓzb q?_IIwU=Bnrݫ"U_#BrfxLXVolZo v /kC}I}7|:{V^UI, \A{!B --9KPHV%wz|x~Ż;Br'ӝ~ ږAt_&DnըiLt{F;F!B>9,JZ7Z^8nZHzgxO#$qkv$nYi\{ft~ #B}=;{ ﲪv?Mfaٮ #t{*wFW~G9otLtﴚH2?^W!Bnr1ޟޟ9^+v7 ϗnڎQKvJrx'9~|9wm7l:VVUeI, ܅;B!3x\Zo:pNYi\K~#Bov<]VZnha%,+cma5!_Of Ѵ4SiE:=3vFdjޯx_ܿLUUYa0=4 ]몲$,C?p{B-ޛ'S4񢤨ݞn=xyIeEx;~tF秧v^UELQϦرuY8to~#BFV}#Ͱ jGӍvt"]EZoj_ xGZWN^}#t"[&qgdXu;$KSD5[WB xo]N,'zi97h,֛mK ޡw uI557UUY`>u#{hUeIYC{tG!wf)xQRnO7LM<$ZOx?xzGFW_BN%t/|,ПyرuY8OtototB!#ݝިNp#Ͱ jGӍvt"YEZoNzyw^~/׫̳4`>~Q$XJ֑;B!~ OxoN,'zi97QYQV3/zG_oNn֫ȗ"е*K24u;{}!zQp()jE̋jlODxG_+o^}G^EL(gdX:, --P'k7j߁!;Ip#Ͱ jG]o"YfEY --Ut~z"_8 Sw2-{]UDc+[G߃!ݝިjxhEIt{}ôě΃0^Y^T޿z ;B,eBc ]먲$,CSGtoB xoN v5 mgNg~-eVz%z>+bW}^UEI799"2w;B!Ixo?H1,'zi97QY^VޡwzFv"[&(gSw<"7~f xoN v4?Zx 4ˊ?n/ѭܿ]Nm "_&(Sw[4$]M7C8I މ_zG_wr@m "_8Sw2-Eeǚ=7AwB}t"x?fXNei٣;aHyQoޟwxR}#r94M{3߇̼=1be7FIDw_^zGWr r?\yQkgD}ED:D,KޢrB!tj7([ Rw8^%Y#m2ͭY^Iݾ zG^t1fbi;8p#o]{y{O3nv6_(FtvN{}{znTw>;s6ͽ*b!L]SnY^=߻'lnXv._,UF hsl ~s?;Ϧ{^*䳶ihj&"K{40w>aDIwJlup<_`v} }uFJsٖYeYEp]$J{*QuôB\>{? 7ooswṳs^jԫRnpSYܣ4=*J|qq"eE{x:{_bƝ 6t2vެ*b!LCS3i1>w.xsG38.Eڻ]t+z' fܯs?gsͽZ.Y4t6Tҙ{]^=߻,+1錪B\9{~{a wg|Ai74b>g[Nc"K{40w>iD=HuôBlupkNsO&ݹ+$9sv#J|qw4ۻaZ\^o;Owhrn;ݝ=]w{M{/Wj{uιi {1-Sc,GsG{,w=_(ޛ|Cs߿81{^g-Lڛ{]r.`p{ὫlW{b٘~s |:{*csWh;߻]{{{OgM{{oV{{v^l1==7wwg"]a{L ʺ{owok43w5{?{9;>?>w --_wgb`,m{?b\];}_I#=>;[r~5sb[ާ[{xܯxs-{o{>}qsw|<4;w;Sd90wޣޕm{/9{oއ_/h?wwὣ/wo_>̽s_w᥽{x{Sޗoh^}׷7W|s{v]Muo#Sw~;~q؈;}~}Jsܛm`WK{N{~sf͝ŝ>4{skwޠhEh$nqs~>ݹ[\{I{h9;j }?dO~64e`ͽCs9sϾ4w;gN؂( ?dPPTfhSww{d}w?_޳zJz/+j~!#މi@>pgܯɝ.ng,#UrOA!B~g!~N|gz|g||BpwɝrN ,wr?9&w!wB/rޏXgu{!3IﶫwwO3_[/ |:$H˽VeIE!B =;}@z?>a7΅޻w;|| z݃*B6˝.j^OY{rG!zjUߥcIe{zlzgOl[w}";ýroXG,=7!BYл/rz?=zo|'ߝg.s$w/s{~Or߁B!2FzcޙvS_[.R*;݃%rI]!w wWB!Zc_0߻wL|~w)ԱIwE^b{!}rG!zRz --I!.zgO$Y.$h%o\_p'3ܻ9˽zrLr?#=#B=z_^'Y5"۶3|>B+~ݱ'$w;˽r'X2}w'(wrG!%]c}z?(WX5{[>&; &zxYөc w ;W*Fnxr@!B+ARfHzo(|Z Z; k$w"w{^>gprumK=r_B!R%ߥ*}wݶU|S?ؓ Ý侀{Np܋;9_Y! !B!aoi.|z"zY;|3{xo"p= M#5!BYEN|f}߃z/Y'R0߯c>~n6w>b]7Xe{B&B! ]ӻFz7U˂{+n'IL==<c *˝^ --ʽg뺶r@!B/B懲7 ;]{Q^ e|_$~}}(ᾐ{E]{$k,l#BDk /aoiNz' W<]G}wzHl-w]½ȝr77]KC!B߳YֻFz7Iދ߅f+?\ߺ|)|_8/~ -- s$w]׶BrOA!B/RPBB#UK|o |~W~;{<N,ܥp/)r'MrgrB!^(E海3-M d3(q|ߟ --τUOcNrpIr/I{rG!z{z'gNz;=vg+?X]qp/Np'Lum˗;B!E}Ku$1z?aI|g~nppWݮ}{kI<0tMs=#BRAzg50Hw>>ߟU<'v>|$Y4t]rV#BVSBw]7L{J|,r=#]{3$|.g#B#)|_|'ka9;;}5{ --Iv{e qprÝ] w!'B!;Rzgy{w{2[߇ֈEΒx{p; pp&L5;=}];B!ʩ|z`3Iw^`{]|Cb6w>D/s{5$m2b#u{ړ{ --rG!.z|7 3G|f^ L!á5*{ %n,k8 w -0Idk.3wBߞ.'cJM| [r)~_DK~=#k8 {~.sa0]!wB?5i{Nzg}2k ?> |0w;ݲAGpo/u ppoHC!BN|07% ̭;`7n Vo.aQp~Gyi u!B+wwzw|?|3/-{CɄKj)=_nK[u;&~Zs^>; wSݕ{;B!ПXX>߳Z"w|ߙ9l=] xEQdLe8[K{pp$3;Bn7ca%$! xy-^4|3H*Je;4= ^E]<!3w;>rQ~~ ç}mp[ۛrIn'O ~Olh6}_#B|&|߂栗w;}4&ϮZ{Içڿ9jWlb.nyn}{ssZvhpvu jG;B!oDN~'+'5֩} ?1ݾ #v;~qn^~1pߋrG!y8;N~}J~;~I '?{ڿj~l@lgۭۯW%>&ܻ{~v=~`B!6%{N~'/;~x~~c?_[>=ab{'!Kn'7 --'J --ܳ!C!BM o{\0OK~aooo !|[#lÒh=vjO#v{~In'_3krTt~#B=W|P, --g7ߓ>!!m=j~=}r{"N U{YwB|?fJJ|'_ߛK{|XVwk'&0=ÇB>M=0rϯfD> wmr{Np?ժJd2{փ;B!َbTT5b\]o'#Oe_oaTrv{Z)Kb!ϽbYgbp#B=|~t| b\T}4L}\ >A|\!%3Ivmcj՞` }lMx4ۛ3r{ZKb1܏wBFg-ߏ|P,T' %>ᓈwrr>u{/Av1{?h'~l_0gIuqr{T, ܟ%#B=6=﵀߻~0'Y J xO3x0uMI Iw#sf>^q~.nj #q]!Bqߍ߉ߛvz`8bO!|]ǧaF}N]CGvQ;_ۯfpej6 SJTrnpB!Xk~|W~|S&| ŻY>kN~7?`]=8g1}g5b!pܮ1pB!^?+g~Qo4V[x+x!^>`xAQa $SYv7f`bnAnў#f{2ۭfQ_OngYv!BI@=+~?~''΀f̀2iw N^oH>m7m"l;17v8ۇf{h/j --pG!z{~D~''΀'_>D.][ċ5 ='=&ўy>.vCvׂvEL/5vv{^=~pG!zڅn~ek%;΀3[Â_]kĿ7׌׎7(i9?QHv%vC 7vy=Mf^bn?nψ-wwB!}y;)~* o)^1^;^CR|цYՏXf7h_ڕV۟hGpB!wY',xyKyG1҇Gz+v&kv+FR(va{C~]ܞ'ܞn7nB!Pw;^=x"< #^Pb8^ o(i>nPQ;Z+bgf ǂ ϒlWng'ݞ pG!B|O]xG,x-5Em؛ouuv#vMv16APR{*ەۙGvB!<=YC&6|xxx7]x'n#++3]j=/lWn?nφ#BmJ}=w<= x-SWB.^#~"g;7GY坸5j]`wĮ.fchw~nb+ar{f;!B(ߟ]|5&xË́{w /זwMstP].\g;b'[w.ڕD'FkGn?B!Oh[g}b+3##7#ij EByy닎M ו-m6{sF)]"jWlϹl?rؾwB!];nMX>''X|7|L --JZޘꉱպ:{݀]` '*=Rn߅B!Џa,|5|LyPhނ~̕:5h]خԞv!B= sZ kGwόWWWזךD]Ŏu&{!Glp;B!=Zcv0!I ERzA!ӵngGs=O?$|j>3>t|PS͗,CzSh_W"Ko]*~[]>sZ|?T|cɧ1_Ӆy#1C\~\)kf>U5u;ޱ~1|Sc 4|Cw:>|j[Wr.Xr=!s7~hh_Uٮx CROs _+S˧/=_5('PP!C={>Wc!u;oi]ߗ >$ᇊ:>|j۪_j_+gTP1CbhlC|S5K?/_+>f| --s7I\z^xik=z?CMv6ڀo M9Cf| --9kzr0O}_J79'{hjgnB4>"ᛆo">V|1k˗HE SIOTlL:So#>V|9Kט~gxbOɾlsٮ$}ᇈ3>|MSo ס>/Filter/FlateDecode/Height 3418/Intent/RelativeColorimetric/Length 73012/Name/X/Subtype/Image/Type/XObject/Width 3418>>stream --H --ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`_ph/CPGz%΀;apJw`ɟ4~GA ,1짯PoV0"^\"YcUNrY,`EvB}Z2@CA_'uo$Qo"[j; ]#l=ƂWDDDhaXjC5WO"""upDXbZnQ7ӌl{j:D5Rs"nc,tEDDDacQUXCT :|h6U T n4J* --]SUlPӒ62ej=DDD VT%L]+"F2V>^+"""[2nUAUTu@DHzJn]{zhU2P0U<hZ WnX^WDDDWɪ,S-VGD4zЕ+V䫄Wt&""UMʲTtKJ+UīݔW:Xե*TrMꔈ&bEҾyUUuO2=*R,JJ*Uʩ2Έhu+AV$Wt+UNyPBU0U$SΉlnJ}+pEDDDߠ^V*VUU --Ң=C"针[:9"be --JxeWh"""z dRRY2Hez+2V&W-ڍt衕\**V*TS&=#)NBN-m ,WWKϫ=AjU5TҨ -- --R1nDDi"daj}UZdw(V=,TjI@q_N?讈hRi)c:ixu,U-pEDDD e̳CUUTTATS^ʧ:Ö6V,,WNWW^WCq&""*UU{UsŪDUGNU --UTT4 @ rEjKJCWF7U T)RQ)O%zIDBJ-eVXXWW'W --[QɪV-,UTE81ُD4ȴ+V +ӂ\gJjfʱʩ(QU*e*CTZS^,vidbi`5xuJjjnjպVvYuвTUT^TTMOD4MxPK+VW-.[^rZ:\ --[QzYʡDUcTT1%wD[Y-<_]9_%tqpqj \M:U#Y2VU*e*O *)M\"eJ|*UHWf v-\{݉`UNV jUE2Q՘ʓ*Jy*ԇD4-ZKV++'AWժպ2q5"""b[EWyVYuYu.TC7U,*) PT4ZbrzLt5WIJ\Ӻaլ̪aՙBXJ0U,XStgtODTZ)"`5z*Rtu.:==\wj[M5U-UeV .UZU׍4SeRJ0oDD!\YAXXWW^WW.DWg+WW3-pEDD4:]հjSǪ aiFU-8TySEҞ2$,6V+, WWZԸ\a+"")fjGasU.DUcU --ҦjI@Yg_h9K+یWZW?8]=u*jjO --[MvZV-3V=U]ŪQZ*5U TPlrE --j|JJӕyU}媽U*ͪ*QU*QՋXUZRE$%-MXWWnL\ \-j\9[ʹvFY명j%jXuJTհJTuk*J7URue8+V W&]tzt,Rpl5wVDDD_UKqՁH\eJTհJTUUw)Ҡ5" feJ}*խӕSjql6WYVUݬU5UU --Pe* "bV&,WWplu$:[-f؊h+j7wR\u VyW٬rY%)UCgT,NIDԟX4"]CJp\Y䪕йa*7~2HerDDʊ*UAWp%qu jl?Vj^j\u VVʬUUW*M T/" --2UIWXWj[ո[:[-c[a+""jNVʬU7TSU*MTo"BEeYUWWʸlqup%Za+"" nUGjVVVV}VeQU*T1"fÙ --+U«\W\lpU [mL]X\UJ\հJu*QUͪ>eDU&*EDHXWWWq᪲Õتƕբ[mJc\u\UJ\UJ\Ubf՝Uz4_"BJ畡{U+W7WWWj\y[-VZ'ADDD*aՑJ\UJ\UJ\UͪUªTUETSDeJ*g՝խՕલલjcjUU⪊U⪊UWªǪV}r,*J*5UGD['l_^eqEpup%jqRpUZl%lululVDDD\u&WUW]_ n^'YE*VUU}J|xU֕Uwo=^ nWWVOVV'FjUNU⪧g>( _@IBTQﻳRv8QYIuUgȮr]U^&TBT?BeRJn|\V1qV=Umm%q Be --WU=v0]EbWmXudUUW !!WylՌq2CgvV-U=V>N7BwޮU .j0pCfˬZYU*TmTUJTeW$Kū"Ƹيq5FCǑ갭*V!jOWYZULUϪUV}N* B(}l]ej"[M'˶:Ac[j)[U": --B!k W઺tUIWFcםLUsvU.TzJ*h --! XI^)tՏW7\WǶV]ilB}:ݸLU3cw®dULU٨B^嫔"zW --W[1=lʷUIDa!:2\ut؝WYpꇂU)VUE?6G%U --W?WS"[fuǣQQ[%h[!BpՉpUiGW CWy|!]zP<zRWQ]%qŶq%l{Yh+Gm+=UB!eG --X*|Xmu4pju]J*UBq nVWV+j l5ɱUVE --B!t]u*]U|WYjWX%]6VB蓷3VlrȵU)UVB!;DªİJejr*fpm- UE-! --p;>B[]ցE/UVw1[}j%m5 l'[u|[VJg[1[IZV!п(VUg*]eZEow]UBWVJ&j+Oe&٪&leVU)qVEB!KJĮ"X3t]eW WMӮtXUIBW2j!۪Gjd+۶Lƶ:c[VV'1ZV!v2JJ CFj:>jjtYpn*!ЋۊV\ [݅˶rV]UlUlLsUi --B!޾4J*V*0M˶U rU\ ]5 \檀UQWU[& --m{fl٪Il2 CB[VQZV!sVepU]eEZ䪮ppWo\V!- --m/խVVca>۪Mjl2MCg[0b:B(U%v+McWI갫V*]\C]{_WB诶+E`)j$lc[Vue۪*mUf[Eiu Z!BoQUXVUUMׅlrU\fWjIZosc* --!txeJim&lUm$[V&J$*L@+BUʇaZNjVQVW=HW=]V! [Epo՝VV.:mUle [V*TBԑVepUUu4-`h6U*`%]uAUԮ* slu}}u [{l٪N,0tM0*zBQUǁJ*ViY*UfWUp|?W=\V!0zzb%j&l5 --[u;d&٪fۖiUl+ --!zb: `UfX WU5]7LӲ V&%XV*]"W] --W}\BqZlD[V:ʲL5MҪE+ --!zeGYHXineV6]EbWU˄]sXBYi[i+j.l厅=UILu*mŴRڪ9B!>vjW XUM $WU+rÊ]EbW-UkruUwUOpBRjO[VLj4"ZgNڸ( -- GT87lԣ<0VwtZRKc,{$M8°Za508I\%X9W V*Jz+W}x}m֠nUm*5(L`zӪh%[M*p:^O+lEDDK}Wu5 --0Rtjj`\%XUU9WU>UDDjW[9Z9[y6޿3[9Z5jh%[V*0;[wbjb:;oaոJ.g30Wr""qmUVleKhmЪh%[IGтV#!"""_:*`\`%W]UyQ9""zv۪B͌Vf+GV d+* --w --CըU`g ZWyXUYEQVU*+\EDCl뾭,\4[VV=ZD+*( ՂVK`=6긃U,XM/`\eyW]*"ݰn:[}YUQl%Zd+U*ZEatjlnXW***U/UpяlVCVlV٪GVF+*cGZسX9W --02XM/a%WfY&WVWVhkg/=[UhVf+UVd+*BUKhEDDAXVjUVr` VUUՍՕ٪U]U&[VVkV)"""w`%WB*qʹ`52%X]{X*"lVmUUU.ZZZ-jb hushEDD4PVðJ=/a%W V`UUKUDDܪn[];[hUWlVFVDGZml VVe\UV\`檯VWK**7Zi%[* ƍhzj`u`urVrU.XU\v+\ED ꦵl%ZU)[e3jVV)"""ڵXFVq --Vl*(˪6XfUQխUc+lUUl%Z9[mhABhEDD0Vհ2UU:X]{X*"ڐn:[VhUVf.=`5+J Zj V~DDڪGlgYCbGqC#hEDD6X-NNj V\ʻW!ZݶVlꏅ<*li52ZB+""^}X *ZvU.XUU=_mog6dVVfheFUVϡXaո2*UQU]sW\ED`eZ2Ze d!ZVU[V`Yfz+\ED6jVU-ZVF+W/[-h%[ --ZC VtJ`ո*`պʹ --X ꣣Ui2[-<;h --=XEIVU6 VEYVu= --W=Vlhm%Zdi5VDDD*`u:m`ۋWa5 VUU VUUDD{mVVVfVVhV!"""#3էV+VDD{oV}Z:ZVf+KoZЊh;`owUQU]?n""z ---jVj>h%[-{Vhuhu_Jza%WnZW}UDDOo˶y]V:^Jr~VDDDg>I( ?D'A --3DUWWuwfIw aX]Wk: --V=V#wVcVhei5ѴPRh5rlU --ZYͅO V)X== p.&>]ZZ;R C+e+E*VM ""-n>=XX ."]ViU͢UZ7V4X]}X5[mʁU hX*"˦o7VBZlZUh=D=hEDDW2X)W]xjzDCjV7VZ(Z V]V>*ЊnqXV`84ҰUDDMIV#V=M+evˣUy!Z-{숈v1ª:jXMƮ,W+"+LOY*C+""baW\ZêêU --XmHhӪhk ao@DD_3l F>VhVDDYMfV=p8z1VDDT lZuV h(YA+""|X+"" --IwVE+սU=VhEDD]ʗy:[ VZإ+"""r[V6`G@DDZ}huiuh+#)X+"-h+V/V˞C""VV{VXmlAZM´ --zshK"" hViVXσի 1""U{V?|WO*h틀Uf!X fj?X_UIZ Dp`t""ڤbhEUͧՉ7hEDD+-YR1z+"-,Dջh6Nhh#JaM'`ED Z rV)Z-{R!X]a;`EDM}lA~ʊVgS@+""ڌfJde:""ւ8EzZ@+""ZB vX-{/VmVAZմJA+""Z˦`V::VDD4hUU>B+""Z|XhX:q`UXUj 9ٴjHFe$"|Y*Yy*:`VDDdJJ;VW3hh}U63VhKZV7.. Y)ZЊַX-XaVDD䗐V.VEMCVVVK!Xê"+"" --VVNh haaV9YX]aVDDdVw+ZVuU\T:>2*ôJA+""Zbae\`UְX?kX --ށYjɧUChuU)NijYѪd*+*hX)X]hXVM_V=[V`EDDNZ9Ҵz ӪiumhuUN* h`eda`u|",+`+""]<Z nЪ$:shdehVDDaVau**+Wٯ嶑3eX7 4;E$F׍ Mi$;5saY!zni5ҚVhe --Z o(+ --!m3sX+|U BDV AhKVaKVBV=Z]{!I}Y}'Y4U#+ +UPjz `BR"Y ZVR*'ZEaeN=ZV --hBÊd(V C+v8*`5wڝB!ti}i״eJhBVGX+p`%i&`h` X!TGYjB"﹎LIFVD+M껠]GkO!j=XM jXV՚`$`u( --B!w]UyJٴSU{ܱ-AᠡսYV!nVwV4U#+ +َaVU+)+ --!G]G9*#Zrƣ#t]SA+B7ZV$+Eo`5 --XY=?`5jX!d=ZIjhhrYVZG+ --!mU +U#FcsaV)B%ZUUyn+IVZVaZ=?$ z}"YV!~3Z$GZ͉VYDafA<ԴuM --B!t:YհR$ZY&lA'i^LgV[ CYUV/BvV%jj ZYGqǶVZYV!WV-Cl0JҌ`5?j/a%eڗյ?B}Z=6jZYGrYdLeE4UhY!V}X YFcôl{~ibjG*/ --B!Nh"iUUAi(i5#ZImfDCM{]T --!dUJjd%`51-p8IbJZ7'`BP_V=Z;Z-iq4&ZYV!SV +d6w 4+VPV `B;GUv5VKUgIf1ѪJTdB*`%dEҎVp8rբվ=hBXoqyafA<ԴuMmhuZ!NZYհR$Ybw ,/VZjG*RVBV/VUU$Vٴ$ --}ulfH+MJ --B!t:X X}WTUVa2^FIәF=XAV!\_V=Z;Z-"ϒ8 --|;2'cU-VJG+ --!?^' Y)iGX G+vQft6PV `B7;GUvVr1yafA<ԴuMmhuZ!`uJ%Xbw ,/fŲ^J/k!EZVBV|6-__9, @ft{)$F駙ִ$ --u,OZF+&9dBM`d`JQuô8򢪛֛-xB}[_hu)V=UUYG9eV7YqZIV3 --!гqVLVnZaYQVM1X(dBl* ՕVWZkȳ$ulJYh\jZ!zzVd2, ,/=auB}KՑuPZM]yDa๎eI+h --B!Ą\VVDJQuô 8I󢪛֛-;qo:/VoV8tmSya๎e\VVlB#aⲒU3Lq ,/qbz}[a%O --!/$hu<}UIc[)3ՎR"mB!!++P&Vϲe;FIUt8LV VLVV --!o$d%VoV8mSya๎e\VVlBݡ VWY`e%+fzA'Y^VM`du<}B!+ Z]huXiuwM]yD9e"?sZ(%F+ --!MVVLV+eE vLVW --!㲺,Zhu:RZQYi軶B+"wmSya๶e"DVgZq,Ke B!U?ˊ%aEIV5ô/$˪n~ؿXY-B=vWZ:RY }eqcȢSYq,Y=CV!fYqWY aٮDqeݴ0.:WY=NB$VZ }UgIcʒ(&YmnBv ɪayQMEVNVBm"+$YtvjJ%E v S"z"+YVBhu~׵MUYئ$, w --!'-Z3Y(+nZQEUDV#0'*++ --!ʹj,IV}eqxmH"mgZQYCV!>gY=Ym/HxA'Y^VMY~,$B?DdEht$ꚺ*4u,JEVB"YV JzAYQMYXͲzBdgF+&ﻶNn#iU/ +~1YM3YCV!AVVUVoG*NTVVTVMUYئFVLV --!C^DV &՚JV4ݴ$˪neu>3XAV!@AVVÞȪ.,smЉ$e5B(UVVK"+AȪfadY1XYY] +BO(*nUIcPYq7YV!ƾj6ʊ$"+ݰl8͊nݞQV=GBdEhu>˪2Ϩ<6uM%+&ՔB!t^V^Vk~%i^TudQY}@V!@+&UdڦFVLV --!ЗYYMLV+&+Ytv3XAV!GY3YwmSEQ໶eLV(dBQV(DVU0m zY5DV#{wduB=i(nն"O(]2uUH dZ!"(+^tò]?4+ʺiwY}Bh(#U[We%q{m"K"ϭWLV ") dB^V^VkJQur\?4/Ɋ --B!]Z1YwBȪexm*oDjhd5B5jJd`ZYhi;IURYߨNLVBgnUw~6uYdik[dŏAV!6jrՒJ R5ô]/eY^Vw@V!{Ydm$ --}ױL]U6sBxAȪnXQfEY7nUGe1LjBVVDV'*#U[WeQYym"K"ϭZYM@+Bjv Fr\?4/ Y!z~@d0Ya๶ih*WK"@V!nbZs(ɊQYeyY-d5 --B!ꮲڦ.,wmj# --<B+ --!cY-5'0YxA3Y5DV#dB^V;Ym*4r,CW$MV3 --!}&WYX q#aٮDqeݴ>FY}B2Ҋ4ʪecFd%ܺ*+ --!PYnxA(nXSYEU7AV]w:CV!~USya96,^1Y-BZsdeZQd>jdBi{;aOdUEQ๶ihaZ2Z1YM +B}#^&S"ՊJV4ݴ$˪":AV!FYQZu]/&+ߵ-Cg!+B(UV% ndU3L0NjzwO!Y}>ʪ"O(]2uUHd5B,Eel"&iw --B!]Z1Y*slSYynj~hBEV8^6ayQAVBQVV~6LVqPYLV^-DVS --!WY{Y9^$trZ*iB!䍲ծm8 --<׶ M7Yb@V!X#^&S"ՊJ/$˪!: eKD!YZϧdw~}(ͦl06!ы --"&k ~]߫L2|My, eUAVDDtY*B(R|wdWV3ml,w? YQ.ziu&]l:zV^SzeUDVDDw)Jde`8deyYQ^WRz~ --d\̧ѠoN٨UBY]#+""JȪȪz=U +dEDDuN^Y&Pd d+Y݋n}{+HVd Y~|dEDD\VG"YzgoFjCY Y};U(@V"+G|\m --VoeC$""bYFVDVU'sY]Jݽdjw{-n&""*/qY땳MǣmNYZ%UYQX*B$Jӫuaڃ8zeyYQ~z++ES b.ꋬJVUYQhzlu%RV1奲:ju7&a2EV@Vn"YA+""ʪ1UOd5d劬?DV~FVC""\VG"Yzg"+u-%+]\*}`:ՃUUɪV0Ljd|PBVDDbYFVHV6 Uk"r$""o)nDVvWd5Le? YQnzi?Y̦"+vZzM*Ȋ]ȪT*߉jYx2;E<(O]JhdF ыe˪HJeUdUYi $ھU +dEDD}N^DVOY-Dde:m%*""} VkX"l֮gHDD} ]"Ȫn6Y=e|YcY=ƲV0Je`(ŲR:}Ke^:d<"du/QBVDDVVסJVNYMrq@V/NȊrkL7&ئ!WuMNhȪ|)nDVvWd5LdCVDD2YBYl*nDVDDtхJJWjp<͝:c --+dEDD9BVVOj$ꉬjVIdUDVDDt.B$JӫuaڃDV[dEDD-)K ݬt2EVm%VyDVDDtej:[8+:YY} --@հo"F PVYYA+"/ZFVDVM՛NOd5Je|_dEDDy5{^$Y/Lden +]^dududNDDz eYEVrq@V/NȊrGFnըZ!+""edU5DV&Ȋ@YZ9 @d dedU@VDD_V WJV7"DVݞirDVHV) Y @Vh`["f(ӅJJHVLj(ߥ:zY=Z[F/U%UYѥʷ"+-aڃDVDV~FV=B""?oݍ|:dVjGdEDDI --Ȫ5,tpVkWdu({ޅ}Y5Y= +""ȪȪz3(A* YQzMiu.Y/Lden"@Vū+%їV_d5_,WdEDD9Gj5U]dudu?Ȋ+Zh;=Sd5eeyYQOdݬWBd5M\VVȊBXePd刬vYYŰBVDD.d%Jd5d dedU@VDD_XVߕnDVJVz nϴEV3%5""EdۺFY55]$*"+"^TVR.Uъd5d@VA""?Od\EV}!+""zۥʷ"+-aYGVDD^SZ煲oM I$vQjGdEDDQ --Ȫ5,4d%BVDD~)a2]U\Vz3(Փ% YQ@V;w^:Y$n,PVYYA+"/DV_d5_,WdEDDȪd+Y݋nZ}݉OeՎd5eey --YQnOd=!Z!+""z_VZkL?DVDDe*Y̦ UY}7YeNtJnRP@--ASW WsN&ܵ~bgVkcY}uY5guzrt6tVBqwVY*W --?䬞gu}VEgoJrVkݳ;f --4*'Y=YujuNgYU9{VVwVOguՁ`ଖFj{VYtϪ9dk*'g}vV{Y_[>(Z59 g@hYmU{V --7~guyVgerg䬊*gumY}`L8fzVW;g?blYU/gUo4zgjߝiSj{VkYg_;gsV -- wVջ'Cg_9+>v*V.fW'Y}Yݤgu=Y0YGg?:>%g_|ȕ̳zezV{; --Է̳Z(muj?= --{VgU Ϊ?ȳ*Cg3 --E5|VVwVOFsVYUNOfI<9}^^ mY]guUVZ|V?_^Y"껳'8Xvj{VYtϪ՛`:i996>:9gg>䬪 --Lj{g/= g9V --2:g#=#gϪ6tVVY&U)=n1㬮.*ggUX<+k3#gU:Y'gpVͱwVuV --9:bkYwV_@³zMzՉ`1Yz}9sg(m~UY7[~f67׆ϪV_]x[Sj7=䬪zYա`Y̳z~l6&jV@wV?{VtU@^M?#g@:Kg8gcUmv]fՙ gj9+f>Җ YsՕ O٨;+M=}g@uV --*Cg)g@$ggUqV:f --ΪY@`Y];+ *Nҳ;+YY@Y)7648%g= --Hsչ gjY |gu }VC UgV 4Y8+d*;+8+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9_ ~{hYp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8دCA[?< --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ~0 faV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+Nfc oSЂ0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+~0 Y1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY1+"cVDfǬ --Y 2+8f@dVp --ȬY0aP0u- --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --Y@'0+NfaV --¬8Yp2+dVfɬ --`ױMl,h, 9caBxWs  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+"aVDfì --Y  2+f@dV0 --Ȭ`Y0+c6+މY2+  2+f@4Y --Ȭ`Yx=z9/  2+f@<c4+ɬ_9ulsgl"g o]{E4jl*YpY{VdgxggxЋVgUUg5O8+@XpVqVxpV=tVuV; --`ϪYqVxqV^γqY8+@8<+\="g# --ΪY>sU#JsVz謒Zkg!<~uՀ8sγ*䳜Y9+@:6g8wY9+@xqVupVVgrY 8񬦜 .uV%YrVngggUSg5gepV8?oY\g:;XqV2*YB>uV+Y5]gY'g!Ym_gUNwUYV@|VyV9Y(gu4 --.YgsV\g*Ϊ8n,8+@8:"gyVYmw=gg8U:=g|V|yVcYYk']=:2gp*VuնjYYM9+keUuVsuVߜ ʐg5g^2U՛8zY8+@qV5yVyyV --YgUkMyVY}2YγgGW*> gg4 --pyVX<:::+:g*Y>g5PgUQg*Y@G2>U=VsV UYUY-jYN8wyVNcY@8Jjfvߋ q:+]UGUsU<rVfYg<;hYBY5ղyVTwYeyVuնj)꛳Y|*ΪY|g9:yVsqVfs<g+g5gj6j9+VRY5Y ǓY}9+@8:OqV --pbyVgUunՎ=Vn{"JlwlG")-"",w!d --|)+")U *]ɪJ򤬦(Õ=@j/Y ,Su-UȪYѷJ*U Sj*ՅV_B""_.S"nY' --XYV5dEDDrZBV)!+%nڎxQd?ȊϲھJYEkKYuMU_dۭSYUY,DVxBVDD}\P,NFþ'e%j +""5UȪ'eJYM0z ZIY=P9egHYRYIX*!+""EVuEm;=ݐg^e+x<3Y-h> c)+6DVՋUEȪ/dEDJ3,[j4Ȋ\VVxj8=ǒj'zNew&:}YJ$j%eeڮdoduWߐv+nY' --XRF YUe* YU^!#e5y/3Y#""JV)Uj4-ei7U~""LVzNeUMdՖ Y- "")յh1 RVȪ˪PT!nX+e5 DVv'hu#+hEDDw^QVaj> @4nJ*U Yэ.+jݑ]?MlIYnȊ\VVˋ|ϱM="d"eU*sX!+"pU#&e]dB!ѿVVovZ`2JYY[U5󵬾zDD*Jet5ô?lLV񈬈aAj*e]d:qU,'dEDDi**RV/BVJ"+]dNȊVd5 ѰﻶehN*udEDDs*jw{i9?'Ajnd+x<ϲy"Asm3UCLV%dEDD+Y=eUj;=ݐG")׭,_Ȋ\VVK)`:rlS׺VSzRVedEDDiU=fXIYM"odnݬ0s,)v"j"J&+`EDDߊ*jV`4y/3Y#""ZV)UtXRF-3""KEY*RV/BVJ"+ݴe* --ZZVqh]2^TEVOȊ.崒zNeUR[nO7-$ !fBVDD8eu<扬}ϵLV )?]w%j:=ݐG")׭,_Ȋ\VVK)`:rlS׺VSz𤋮JȊ 64ò]OjQ\QYIVovZ`2|ϱLm'&YrYRY%jji;^0O2`: LCvZM!d%`ɪܕ.+jie~8L"*(d$z|ϱM=ҨW_KY}ՏRVLVzA"y/3YNigX:HYm_7`2|ױLmTQKeUd(+U)?yRNWMh< YBVVȊޅEYEY8}ߵ-CugY=#+"".U,dUIdUR[nO7-)xFJp/dEDDG.>2扬}ϵMCjekY=geeX4-[Y#+"">m'd^% --c)+6ui5F*U YQޕ.+jieEV2pLhu"" TV)Fj1x8=2^j*z5UEȪX.R*VzGr*EѨ HߛIQWIX ʊfadyYYDVVB&Y}Yʪ"K(]2zYedX!v+G"M/-r()nZQEUSYIVB52j^e并eh, <\eB}kzՎx"+U7,(N[YY}@V!YYDVUgIcȢDVV +Bju$aٮwUeuzeZ!Z`YuTVU]yD9XfDe!zB7a hi;^IHdEhY!Z~>neeqcH"ϱQVAVBneHdz2,J7-(I󢪩NVDV]/+B,w*(}{ږ$s --B!VTVQV;EIQur\?4+ʺdBhMx ̳$ϱMCSdQYV+ --!iEedp ɪfXa/i^V7B-YVV*4Bu,SeűAVBߺj hi;IUMduiu^VBMVQV"K(]2tUDcw6DV3 +B7ͲZoFZ1,'~%i^TuȪdBhqͰ:+"Ȫ*,smTYxd^8BT̴ZڱOde^iVUB-[Y :?*4Bs,SYx"ZAV!؝VWY1,/HxA'Y^V5t&t]/ --!eNeud6uYdiX*snjCdEaY!YVzZYq(+nZQEU7TVϣzZMB-VTV]G`EeuطM* <׶ M%IVAV +Bwjjc9^U7,(Nv?2B!ne6ȊHdUWe%q{m"βZo!fZQY'Y1/HxA'Y^Vu?OBeY!ZT_ީ.ڦ.!/2Y]Xơo,4ϵ-CWIˊ_e`Y!0&+Bݎy&+AM7,(NƛVY]@+B;q"O(=6 M%+"+B!=1ZQYqDV+QRT0m8jny --B!].7Yơ,4u,SXn;(\,!"r9'J=MڤO 融ِKTYx"V=lB.EV]VGQU0m(ۮ'z{eueuB=gjՅj4}eqcȢɊˊ --B!:b6Y hi9Dqet0N.EVW*+ --!EaEeu&":McߵMUYئ$ --V<DzVkBObVZ aٮqeմi"V7JG!KTVEV "q軦فjKduQ%E v ,/q:ʹy>B=cjՅj4}UIcʒp\eYͰdU#zYdez%Y raxգaZQOۮ6Z9nTBp\VMV V VзMUYa๶e"KWXDzdB qY1Z T]i%ɊzA'iVu8VY@+B7jՑj軶>ں*tG:ih"=J)! VVB/uiŦ"BE"?ji;D>͋n~OV/ΜV*B.&LVi"K8 <׶L]SdqDXV! JfZ1YɊzA'iVu8VY@+Bhy0 }U8 --|ϱMCW"(RB8 +B_j"<ʊx~%,/a:<1Zn:V!n*&+am$ϵ-STyDXV!* (]e%ɪzA'iVu83VY +Bky,a2Ic* --+.; --!зZiȊPqaڎQۮqF3hBf:mbz>qۦ.,M0\2uMUV.B}OiE*+IV5ݴl 8Ip|iY!U+fYwm]yO4tUWX,B@hdE8dE vae%ɪzA'iVuh<*dB6:_a`dud"OIc*2Ydueu%#ˊJJVT0m(٧yQmLVG&+F+ΠB VY1Y]`5}eIk[e%.zXduY!vwVl.!T$YtӲ]/$͊n~z}{jխBˊ"+"Oqc*2N{ --!eh%Rqi%+naӼcȊ>@+B -- YVoLV qڦ*,M0\2uM%.+Q0X=pXAV!ۋ@E.+IV5ݴl 8IBWFYV]dZ!VYfY1X3X]d5}U8 --|ϱMCWj'RJa=`BGbB㴒U7Lq i^TuøȊ}idBW[aua5i"K8 <׶L]SeJ)! VVBowi#BEJUM7-0N,/qZh Z!VYfY1X1Y]d5}U8 --|ױMCWj'RJa=`BgZeh%Rqi%+nAӼfY1Z:AV!~V VLV3qڦ*,M0\2uM%.+Q0X=pXAV!~Vl1!T$YtӲ]/deմ]?NV/ΠBciYV V}U8 --|ױMCWj'RJadBZeh%Rqi%+n:M$Y(,Af&yG6$*#wW&>q ,/qhLi --B! X]bbz?ǡ,4Bsl5e{DրB&h.i;Fqet=VBVWYM ?vеuUYږihrՆ"KdB Y1ZILinZadyQm׏VieZ!:3X1Y}~?0XmSEQ{mlﲢ2B!f$Y&eUT0m(NMVVgN/N+ --!Џ$`ua5j:nƾkȳ$ϵ-ST VD$+ --!Kb$VgN/No --!R X]: XC6Ugiئ.+JeB-ՊJ&eUT0-(NݝV.V"?VBVϫ"O(=׶ ]S65`Bh֜VЍe;FIeݴheh5M7YV!L VLVVwm]ya໎eYQJd`Bh,JU3Lq ,/a?pZOB-e,iad5jۦ*,2t %D'XAV!IȊJd40m(NƙV3NVpY] +B /3Þk$ϵ-Te{/+j X!Z8A+IiujiٮQEY7]huxdh5]iZ!Z*!'XڍC6Ugiئk* 3$+ --!Т Y1ZI3(UV[E v\?$˪n~:2Zh Z!zuVVjU6uYiږkrՆaB-՚ӊR5ݰl(IfZ1Y1ZfYᲺ@V!^38 VG~7][WE%qc*ۻ(%2 --B!xBV+.+P*daZadyQMh?3Z}2ZMgN/ --!} Y=$`5]Teqc[VJB! Z940m(NݍVߴB2 YV`uU5uUiږih"dE)VBHje%J7*zAuFQ8%վ{iJ|*cƆ﹉OyQMsZqYqZ Փ --!'6Q@ڝ`ݬ2ϒ8 --|ױMCJV!.LJJ r\?$˪n~sZ=VA#hB{jaժk,4BsmԵV* --!z-*itò8͊jnڃV!$~pXqY d~^]SWE&qxc\_d՗ +Bp cRVfzA'i^TuV\VV d4hBMau:v#6k̳4slRX+BKj&h(L}~IUvjzIZB՞U6uYiږIZHV)BV7B%eu#du0ލZ,5ݴl(I[%Z!䞧z`5uUY:iBVV B!t$fVIVR7Lq 4/i{N+.B!: --XVVuߵMUYG9eRJB]0)+A[N+Ujl(NW=#j@+B,VVm$ --ϵ-Ж )+FX+BmJ/V iٮQfEY5mZjG:ZB=KYj"Y}ʊJV!.lcRVfz~%iVUv vDB!~ --+!+"ϒ8 --|ױMC^arX Y@V!.H+Ea+4h~IUݴՃ,}fBdSY= Y QjY]Teqc[b՝`B --MiEUSFZ-D+vWX%RXMAiGaN٨`e)2Y+""e2RZYJ+եҪٲ] VW+ZZiMDDnX='UX^:V]ªlJ9X!+"":2Ye*Ѫh ¨VV"VuI_Њh+%nV~ێ,e*+"":6iUTZRZUkB+q ۝^0+VOyZ4zVDDa`5[J`5u;qk<,U&+`EDDQV"%*Jx~n?TZܦzVDD6aZjj`5XvVGF}ª{OB+"U?%>hVDD2X`u5 v(jU+U&#dEDDXVBҪU!r=?Zu{6Փj>_B+""vX-o`廎bd%`u ;hu*:;7֔VU'VЊ>lf )^ B+""nX`5XVq --XW=JV* lU ,iuchhK{j,Xyf= -- -- VȊ& --:밺TYXX+"":m%:OiU/i zB1""<ªh`u --YѡVJJEhEDDi)յj j |Uk --KX+""iuЪJduZBjhKjV΀}JhUTZie U'OhEDDY{j" bjԗ:XYj*:Ӫ04 Z{yVj R<}ZUSi nZ=B+""*J`UVX rӟ$""گ]:hX@iu (V`EDD_UVJՅUZЊ6Pae+""fhubhUTZV * ZVWЊa5Z*xem"" --yZߗKZBӴVDDߺUg VVEGUOi5h}V%|Us;eIDDvlV""6```ը0*+""mV!""V/UYaUVDD ڐՊVyZKZuV'""}V%%** --BVDDB'hVwmXݯ*VDD{GҪ,XѪ --}Yr7`u{uA6Z5?Ջի Za+"oVV --S_'jIawZ2kj{gi9] AOk^]s{+""Vտ ne 4fKau`u`!VVEZ3VDD]UV`EDDd[J5 Y --YfULZQVӕauUXUJʴVp4 --[mWW=V 7WVhEDu-հ[`EDDدѪhi5VDD[|`EDDiu@*Դ!C+"*_UV{jZAӪ --Za+" V Q ҰzV mKyZZV7m+GaVY[ѯ4H`W*XVDDiuV7yZЊhj,QVlϠ* --[mXyW9X --V^ Ej+""ڍYJ/EZE(Zmt a5ªhzUAZfh;ZZZI "jRU7 vg.GgцT4J""]+Ei5gh5i5VDDZUVc h XN|LӪ`i5ZaU ZYX]`%Fa --V. UEZVb+GVVCKUb9""Z{YWe`%J`iXVU7hҴӴzQVV)Z &V1zgae]5Ur0X ,YX)W9XQ:,Z۪lh%RrJl5VDD+*u0 --X{EXNOX5QjZͦЪSIU_*PRRiVVU%U)X.XհjYXX+"""Z[ [A+"sv* --J\5(U\ЪJlehu.JJJh% --0R2i~ 0V}sz R-UKJleVV ʹJ*Ұa]`X5:"""*UV Ҵ:ZL+[VVVЊh-UʺJ*X --V*+㪏VN-%VDDDq9Z+ZjVhl%EVV؊7v* |uuV'1hAEZ7MUЪVVb+0Ljn2R --qJ\VoZa)#""z -U[JlUI+ R2 --[\5sJ`/kXҰ:LXU^V K+UVb+E0E+kY}=y&)WEah`rՅջS`U)W+""ʖЪ%:*UOh%Zl5VDD*WMXVJ\Uc Uʸj?*`EDDWA+e+KتVV@hljlh5-""jVt zVUz{daVDDD+VF7VFj5VeҶZ<Ъh""]d]J`5X, --2:XVDDDhelJӪh+E+e` R2Ҷ`+"?ݪR=O\`%*鉆UVUVyZ5JlUJl剭VVVcCiB+lED;a5hX)WXVw UYXUj[f^WVDDD+^V5G*K+k+E+U0|lEDtTJJ*ҮU+qU --V ,Vo --UJlU7Vh%RJ'܆Kc1VVV --**h[EUSP[]V1r.SW VrX[+X[Z!c;Uj hVUNVJ+U0hъb.W)2WGIWEpJ\5 +uªVVa!*`JX1cK6VBrlZ*h`J8\iE[1SUVS:W8Vp*wUnGa+cFacݿ[e66V --VUAVB+U0bjTmcORRXq+qUUvK`f`b1U%j1`+UnVjcUCUJ+ڊ1ƞŮaj[elV@+qV1n*U}q`RXV` CU-]c=y+19Vl%Jm%R[N`(dt[W1V.RWQWGI2h0WVV*wVa%RX"cGVaj]mZ=h[u{j+Uj+Jlux[i+{lr`WV*JaV0YcªNX1cOX>JF`u·U[ VB+޾ 8&bSڊ1Y]wU8 --V* --j+&U V%WV1êUU`uރVUR[Q[Nl5 e+1{FӮ:WV*J`V0Ycª.J]UKc1z[*19VlZ@+]աتDQ<\V״cͰfU ] 8 cqվ --RW *w֚Ub1ƞyg --{ --VO՞h [].q{UjNK:W+qJ\Xu;U3 sU --*WV1*j5UMh%u·U[mn|U[[틭aAfm[]lO+ػftU4U]u`%Xmv Y+RXψ1{l۪.V:A+تۃ?}W[[NVluM[1e7Kp`5]u$WV*J\ WV0Y#W+c칪UMh%u·U[m>}V[)[.o"cUU}qՎ --WVnw֊VuU+ci*jb --[Y`.lUmKl':q{OiWWV@\[]]]XmmVv --s6RXժa'cVJ*hUKi!29Vmت[mT[}S[툭yfVc5U2VuՠrWvU\XU[p`j6CFzUc1h5U=UCle>lVjSlmu+؛k!jT=q/uWu6\Ճ0Y#HaU+jb1ƞ --ZRZmu·a[uam՗`9sVc4peV*s]M\XmmnUzW5RW Wacn*U=UClej6l[}[}[[V*Q[f[i+1UV]MX5-WUqwqgq\ՅZ*gQW)jJ"cDՂV5Uj+c[5al)$&3[Mz.+ثniV\uUU?U_UpUjUʚ@a%"c --[VJXU6[U*l=luxV3Ua+1滵fjU%W \U\1sUjދLuqU^tc[VjBVFlVmت[mV [,a?.flWcuu{jUwgUZ0Ή2XVJ"clVuJlVMت[mfVєN3[帺+bYu*u`U~iW}W}n*-\.aJX1caeZ r[YU6[U7V?lu0mVuPUYuYWUӮ WmU=j6UՆ.\FW1cqe[6VFlV_mZ?7ɶ"w\'KLuy@3qZ#[5"[ֶJqhE_?}|gRW=Xjjqq檪jG\UWiX+""MV[BrL+՞PVbV^+tED --`գ*UU]UgUÃJR \EDD&ٶHmU2mUluWVbʯ+xED!@UO*UW"WՕNv#Wm'ҰZVDDDoMVV۱*VVy['il+mWW/~\\+xEDobU2Ue*qգpUĪΕj=qUW --lU[ER7luV`ڱսQjI\uo#`v|6NB:\U5]U]Ak6R[l[e:j`Rla -- --__)B>U)e:MWUbWm'UDDD&V)[US[ylU'l&rlW --_TVUUª{U|6N0vU *sՆ*`EDD6-cR\ z1pU!/~Avե^]WbWmZUDDDoVbVj)[hXjWJ**U1 --W+|"YDD0 --UbV%YԬWŬJ]Uծ֮UDDD%lU[([US[)\Eqqpjҕ+W a9ZD]gc>lR --P\Tf*a*vUW}ڪ*•تlq*vTWUW4Ra9 --BV7w$h0*fJUaVVSu\>aŶڲll*DWW2^9R --2ZDDLd'c*UUM¬WVŮUDDDQVy[([UVUPW ,_偕 --4ZDDONdro*3UUFZU!VjU{⪊rbbW+""_6S[)\4V qj$XWRRJe"'-"Gg&mP)QeҦQejTJϪUªU%\EDD-U)՞UWWZWcCW6R_)`Y2|F"Uj*UW U bV --X"\\>{ leJ*׸:*Uף,_)`Y2tܚJDeJL5SJPTJTPYufn̪_7UWFKXACSIN3ݧf4(2Whz|).LW YnVR\\:էڼ{ʫW%RaM55VYvلwcQUI57U\U_rU%UO:fջNYUPUwdUɪU --kV!.!R]uXWc`š+WV oӷ4W9TU?ŪjUCV]u`jK\9Ua]MyהW+VJY%RQjMUus]Ue=;WW1b] ͫ):V*XScʪJ CS)jU~ϪcUm*]D["Uu\źU*RaĚkY?] ĔSAu,cR5MUjXU)rU*+m)quG]*1kj\YMkV-<z.9ZXU%^n*]Vڪ)r\qUWs_j kj\Y&a!H=XT9Dm~LUU+Y`6EW/R\*WU_+VJYj ŗSǠjnUSUĪze..YLVa[W)j*UPX)ʙմsq{ TzrVaU --WW)b]Ju&UWs_Jkj\Y!ƾO闉<ƧTMRM5GMAU嬺\ͪg --Xq|Q]NuUջ --kJBfQ3 y+>:UHTmT)QUUΪY|q]ż:|0o漪*V*reթC*S)JQM5GzU*alRWW^4uXRbM++V#K+PvC詩*MEBUm*]:G\*ի9b`57VȬ6CTRR5M9UjJ^ knRY1r+TQ5Y/B\u5̫WU`MTV[~5.OTSQj*DZU*amJ}XSaʑ; Qb:RQŦjsU*,J]yX9rcjK j!nCRUT}TTJV*ྺ)JbƊ5-`Y(5:H]TSRUMΪU[Xӳ3VNYMhTV NJVZ\uu5̫XӳVYxծDXyT6bTVNjUW9 --v߈0 MQ-4WWUWm_ --j0a@ڢMu6UXU:Oz\*yըZ-`'yWTJTm*YR]*}VYh#∄m)I5n*Tp2wUW㾊Fzm;5ZfIƄZQU*[#M^-U .J ػ`\,UTMT*RWu^Ձ$betNQS']^}VX 8Z߆vJλU --x Əʠ --kci4tIU --xLjWZ,FgqN=#˰KkbaegIUX[" )kM%j^lZբU设XXw{pD=,~gH4-SzS_rAxNߩScv_ xNO=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8$7 X [ --endstream endobj 113 0 obj <> endobj 115 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 114 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --129.5558014 0 0 -129.5558014 181.8615265 172.3060913 cm --BX /Sh0 sh EX Q -- --endstream endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 43 0 obj <> endobj 110 0 obj <> endobj 112 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 111 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -0.4444444 -0.4444444 -0 170.9031067 196.9139557 cm --BX /Sh0 sh EX Q -- --endstream endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 107 0 obj <> endobj 109 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 108 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -192.0446777 -192.0446777 -0 181.4170837 277.4395447 cm --BX /Sh0 sh EX Q -- --endstream endobj 147 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <> endobj 150 0 obj <> endobj 151 0 obj <> endobj 105 0 obj <> endobj 98 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 106 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -192.6805115 -192.6805115 -0 181.4170532 277.7574463 cm --BX /Sh0 sh EX Q -- --endstream endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 102 0 obj <> endobj 104 0 obj <> endobj 160 0 obj <> endobj 103 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -226.1058197 -226.1058197 -0 181.4170532 294.4700928 cm --BX /Sh0 sh EX Q -- --endstream endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 99 0 obj <> endobj 101 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 100 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -226.2054596 -226.2054596 -0 181.4170532 294.519928 cm --BX /Sh0 sh EX Q -- --endstream endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -24.7455978 -24.7455978 -0 181.4173279 277.4232788 cm --BX /Sh0 sh EX Q -- --endstream endobj 177 0 obj <> endobj 91 0 obj <> endobj 93 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --201.013 187.633 m --202.285 208.606 l --202.664 208.787 l --219.709 216.957 231.084 235.257 230.734 254.049 c --230.676 257.172 230.37 260.041 229.823 262.617 c --230.142 263.221 l --230.818 260.426 231.094 257.412 231.167 254.049 c --231.584 235.028 220.046 216.638 202.853 208.397 c --202.702 208.325 l --201.421 187.218 l --h --W n --q --0 g --/GS0 gs --0 -41.4666176 -41.4666176 -0 192.424408 239.1365662 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 94 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --160.132 117.862 m --161.043 117.571 l --181.401 97.088 l --202.254 118.031 l --200.972 136.846 l --210.806 146.728 l --211.421 146.728 l --201.42 136.676 l --202.702 117.862 l --181.401 96.471 l --h --W n --q --0 g --/GS0 gs --0 -30.4885464 -30.4885464 -0 190.1102142 125.2657852 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 95 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream --q --200.837 156.78 m --215.94 171.986 l --216.55 171.986 l --201.449 156.78 l --h --W n --q --0 g --/GS0 gs --0 -12.7799854 -12.7799854 -0 204.5773315 169.2155609 cm --BX /Sh0 sh EX Q --Q -- --endstream endobj 183 0 obj <> endobj 180 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 184 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -12.7799854 -12.7799854 -0 204.5773315 169.2155609 cm --BX /Sh0 sh EX Q -- --endstream endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -30.4885464 -30.4885464 -0 190.1102142 125.2657852 cm --BX /Sh0 sh EX Q -- --endstream endobj 195 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -41.4666176 -41.4666176 -0 192.424408 239.1365662 cm --BX /Sh0 sh EX Q -- --endstream endobj 198 0 obj <> endobj 92 0 obj <> endobj 88 0 obj <> endobj 90 0 obj <> endobj 199 0 obj <> endobj 89 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -166.2333221 -166.2333221 -0 181.4170837 216.1957245 cm --BX /Sh0 sh EX Q -- --endstream endobj 202 0 obj <> endobj 84 0 obj <> endobj 87 0 obj <>stream --H EAzv I$*ss_0RZ܅Op9gޟ>K[\V}Vpz~XV}g-FꓼNZn_`X[`~úIxK}DT yV_;E>Q Y~o ]}~swgwS_=~`;ǟ" l|[3ZG/S-U>XQw>UT쭾QLPG쪾NLS짾KLV줾H,Qgl>FS3juq@>@4D}z(G^ L}nE]"B}iI]#0Y}dO$0M}^U]&0C}YY]'0X}T_(0L}N8E]*0B}I8I]+pYuLuKzgWOPw <\G2Lp5uW UWU |> \[7&p}u{=ԝSwSV_^?wUT{7N_][[;wWWoTo.7|^\Sl\zz!p-{J:5c5Kk+ԋg՛WԻSۅWہջwԛw{) RazMz0V([P^^'Q/ 6UOf;w 3ԛN= --`azjzN6+A^ WBP*Ro --TGzV8+u%"`azgz0[1MI^%S T/& 3ԻMP`JazMpz0H=%8EU+^,^^-^.. /<^ ^0<^ 1< \AcxTzz)pLJ=wԛ/W T/>QO6|\Yo?(E+_s;wP/~Q~8Rw7wSoS[;w}]sGupovNځԗۨS~oPw>A]9"pyuՁWV | \V66pQugU_/S' |\L4Jp)u;u-oQ <\B1^pu3ꂁgWϫ^Q_U x]}?8P-p:Y= 0u+Q\wsԭcԷCԡׄ#ԙԑ#Չc7}wq3ԗmisԷMaׅ-Y Q3EG=w1+ԗm)kԷM!׆- +\ V}shwPP/:=Q"ux@>$N}\Ъo --TЫ ձ;/ԩ{okԝۨ+ԕ;/Չ{oՁSyq;/i{oaSYQ;/I{oAC9 uo@+WnL 7ȇ@HL*XGDkZCSG:2}+b:!#XHH 13$a%%1̒ 3Sb:lpXMK2%&a911̼fVLLS'CAM3&&&ƙSԹPQ̨IX訉a4u,0cb:Rbb11M --111Ș΄f\LLSG0bb: &ԁ 11̈΃maޏi8؉e}b: %FuHAF^*`GJb!,ؓ v8oz]ꮟ-""v|=YT? --qQ'ʼ"_<~,#+!sxB4gxHxg5>Q?`~.] msǻ}`z0Tm~n\}~`?m>>z6VR=}O޾mՇvUߦoKс N}p`sn>8z7S0էxSo6C|S.;|S&3|W#^ 'zo>0U?W[ zo>-x[a^ǻ --g:T}V]7T3FN}P+y7=>WJRkRH}JG[y!RmԇxL7QQ^B}DՋy 78̗Wz5_\}>|i8^VvpϩEgxR=/>|IW/ OpF`+bsUKpZ=/>yTWeԇF55}RKpzQ_@}" Փ\VpzWV_j.>e]X}m]W}m]V}1u]T}Q}]S}Q}]R}q]P}]O}]N}]L}]K} ]J} ]H} --]G} ]F}9]D}Y]C}Y]B}y]@}\}ՍfwUT`zyCuzB<@LQoШ7Rgt.:z ЪWx:7@zc%N zKJKԡ%7a]3՝7e&K҇?7} u% My_EJ* 0(U<)Uٝo`aY/Q)|Cz:NIW1iulG0Ȱ'iJʂ`eO˄}[:LHZ 4.!m4,!q}J]#.ƚP:JG^5qu;mJ߃&}YB+;sR' o|M --|@]"0!6 aiTH o| Ml:GEdxCobG9*";_3#f[ u/a?W | --s:EDhƧ0Uh | uoa!R4E?;$>yֿ34Ćؿ+$Ć>?#$| 3URGH rGݠ 7|k+] 8c, qw;_li]K?ko]r0_|u,_|3:?=?'kw \iuP --og*k_›AA+CP{0O>bOӥEY{;&K,=!zPH=IOPQO9V`{':|:Od1y9\1$?SaoEc>+}@-a Zn 5 a> XH$]~nN.@G [?DGZ}+K`Y}OY%Rs0ቾ',ݒWqtDStn:M9Lim{&7[ڪt=v,iU:˞G 7ſDi"aߠ4KX} --}}%D_֫Bᄾ@U-et0B{tf*Qo:QT:RؠOQD&RR4S>SxR$R),g~ݩUk Z.#?+Eku,B?.*=K5,C?N+=+kcpBj1Kѹb6OcJB\1}'ѹZ%furt>^:e=XEitNIYE\RNcѧ}]URцԠPa_A7딒5Uj1}W:%d iGZD5tNXAYQG}S:VPVt6]tt6Yt>[x&U&t>{z&U.t>~}QFt~}QFt>}M^t>t>w^3:bL@_qaԻA]1O]h3.Bglx)!萱9ۤetd썾2t6IwQ}8 2Fod>nݲK]S E׌mѧ[&.sƮ˭EnTg=cOsvI+蠱%lA@ G[.%Ϋmil>YiD;"許bMd렳^{ՠ6I*-[U$N :ll>Vk$;2Z貱 Tu=^ˡ&C6ISr-{Tn#N˵ :nl>S):n:֚輱H=R넪XUHZ.T#j0:q,>tiuXQёceu6HjJoERUSjutX}=-RꠒP;ǢBwnPTt:De:t:"&Ա (Х[$!vA'ىn!)ȴ:v,>VttH[sRslFJ܏w,>nt^)m.ˠO]AWpI"C;[yCCSqI --+D;%:{d;k5!:| ;k5#|$k5%:}KE':~`C$+U'~@c$+U): 賃$ Uw-zGKh[ю>9@yEo[=Ay6Fs[=^ScW=zOl)r X^#[ \Ө%74MOie6jIC MBECZ=\|SCDGϣ"ԟ0@q}BˣRKoOhz> %ȿ'4QB^)og Hj Dч z&f+=XrMq@CSy^J,5&$`vBoh.h,z8c +Oe7^b&c;=Xb9JC/&h6zx>-ѣ%/-^cOjbIꀦwXR|Qݏzx}i8VB|ݏz%td/bs|b Iw?.o5lP+>=aFZIw>> }j%'GO@ --(E#\Q+>S;FNV*|䫔GZR^= RR=$RiR=(ZiR,ZiR^4RI=;ݧJD>=T --'zqA =#zI#zI!zM!zM!zQEOj|$zT)=!zQ?;~gW~xГUCo^|(zV%OzY(Eo^|(zV)wzS?Sѻ*tУUcTJo8;~ŧwU2~{ءGC/>;N=zaD^|,zX%ۗzU;s*پtЫڡ^V=^=`B9;vr}xءgC>={=zi(Dj|0zZ%wwzV; --y>pлڡV]=dB:7v'|vḡwC>系 zqu,"Bj|4z\!GzX; --9>pڡW}c lB;3ngr|tᘡuC==Nea{Gϫc澳qC/{8z^<9˺Wɝ^ pB~O</n轇{rxuC=N^Ue{OGcγ1CO{:z_wzZ7ؽlӺWŝgc t:ypTuC==NEi{GFzZ7똽l> 9rA54 Еw,jC~<:pNٽMmсslmнSvggӅnۆxt{?;.t6t xmн.u?%nۆ|t:nхslqн.SugSۆ|tᜪk?=*t6t T]T㶡{?]8OϦ -- ݻ8X 㶡{!t6ttc5[|tᘦc?=.t:t 4t?8V?8Ϧ ]9E~~6M躅G>Us躍OG>Us躍OG>Us躕G獩>Us躕G獩>Us躝F׍9BDW6nLϩM:o):qczNhy[ݟnsGS[`tژS??*t^tT?]6PF)55OEw=TEg=TDW=TDG=T<4P^IcZ%Fӄ+'>.r(1&t_qtИC4_|3Pb4M7zCi9M5cZ%Fӄ;x:fLˡh}_zf}?nzf}z --BLiS?z ALiSz ALiS3z OAwL)9F_sx:cJə~03c*4#c*4^ c*4 c*4c*4@1gjW_Wqwt3+*q&3"t`}b:dFSѻ7^LǙhЁ 0nq&3"t` --;tɌXDOt1g2)B֯۸/\LǙhЁ zE8M:Cn1g2)Bַy-Lf4E{tɌX?rKt3'Bnq&3"t` b:dFSXLǙhЁz$C8M:^An^1g2)BK +Lf4Ez {ktɌX/r+t3URnq&3"t`ʍЩb:dFS[TLǙhЁ:z+A8M:@6P1g2)B;)Lf4Ez =3tɌXrt3M`nq&3"t`-Бb:dFSwыQLǙhЁ6z27@'8M:Gof?PLǙhЁ>z3хb:dFS ѬG8M:W'Lf4E^vt35K,G物KYRZ,ىr(1&t_%P (1jWgDG=T:Cg%:JLE!z@Mbj(:ڈnS{FyuFtC5ΫC6ꪳ:Dh#IJD)zA IR/ :N ZN|yu^BtK5ΫST}"1էj]WC>Us:FOh:HLC1zBAbOZS}uu:tS5c֡T9t]'$T͡=u 1էj]W CIiUS:FOhGLB1zB=b:چSqu6tc5c􄶡{!t\' #X u 1jWC?VC:E/h:HLB)zA=rV3:E/hGL׵:nS􂶡{xmu:tZB!z@Abt/Nه.ŚBz< IrXS:@g!:Ik --]VوnSxO:z; IrYc谺Bto:.$Ǜ5lD7f*z9+QrYc谺NtƛyUYCw5nvx]u *9^9tW]Bf):KWkUWЫي՚CwjyYu=.A9tVZt :Gof-:LwkUo']&ǻ5Ϊwыً.DW՛,F p M`yUz/m<\z =8A:Ae5:NkUoDz]'5[YDG,G tMeT$y&M*z)}]z=@IޮItS~t (^BDAǻytR^ Љ^z=;%yFI3z#@GJzGD}`]T?rt$,~@&LIޯYtQ}]Н_=۠C%/Fwu*,:A>RQ>fAk6nN dQpMϱdI& 2pjCz8Oc%zJ)WLGeDoU* =>J%Aa0g;[+} kҫJU#eOaQzZ)~v),JV+%: )ㅾEjūْ2^KXVZ-)ㅾEjūْ2^KX^XbQsA;K } kҫK7j.hGzx/aMzZVI/SXVjSq@[C?V7+T\ЖJ‚dŒ㝊 ڒ2^[XXrWqB;;+ _О>%ȃ'ca5zb h mIokXZ<C[3;֢ת$О񞾇豊%GOhOzxb!zjiړ^1XZ|4WG"֡&O>-};K'ў񑾉E虪3cohSzH"LR婱G'aY]Ϲ1w-=_1'J0v׋3:WiBҶzqF_ǜ*R҈Cږ/NޤA]qI)}3қ4HK#.i[z8cFzitm%mKo}G/ >s>iHJ9}уtHym✾A:$g +=]\2Gd @&N3ӞrqAdFڒ..^CJ}֘R} sktHSjCz/d&zIicRGWDo">mP⊾-:=[\2=EQ6g+B&hX_1^jqE_<-Kډ^-.Er}ɸ\;ѫ%}";Hk#zOdz 5{CLB#žjd]>IzW, Y\'2 =C6'KDWf_7dqI --=Fہ^,.I}h;Ћ%}"S#4I\`qI M[Fg==X\'2AdnOL@O%gx{%}"4Io^qE_]RƗ5=W\2=AnMWxz.i}KWxz.i}KWpz6nKWpz6%Jpz6#5Iopz6#5Ioh~w @4ݿMPUS} '✾M?UVvRqNIßkx3z85=TaRqˆwS<0O*PYNNqJ7J!*3ވ)NtF8Di3}(! yz8% !BguP:~=>KoT=RArw7c6,]SbSFqLwJ͑k.OOmP:~DqHJϡr.N/iP:~BqD_J:.MaX~%@q@JzK黰tVI:\Ou}9}+Qkj*=O<[%jk3*,]WV誺&N<{%k+(,]W =N|o{%lưG&,]WV,M|O{lδ#},m˴]&t^i[7J2@7KBqW=`:\wzxG7KZ}Ww5hwzxCA-pzn)\,J@U} --[W8=@Dn "OOчڥrRyrzK߁h-LM}K$񛾂 %tzbzMo.ҋD7AJOK/9xiǵ$LA/s{lO@j7؝z~J析csz9E{OG7 --@7gؚz cLo? =p16AH~LB 找7=Ŷ;yoNO+,KlJ> =/ؓ^}zBGM7 ti!W}z-ѧ ttCWaKzY ]/]'gؑ|zCW`s+Ho> } --z gw@ttCWaCzY ].3G/> %}z'g@tt Dg`;zY-B=v3(;:sz'gPtt Ew{OBϠtEwtWPtGc:nS#0:#݃17z #]-]7z #])7z ] %~7zoO/&./{{zGJGqtyHߍޛ8s --;nޚtHg.}XuCATQPZk|Aзޘ?wCzg.^ѻw{[z}HO^F#zntoJ/Pz|Cލ-)= zIooջѽ%EoC =z77/q(=7Fv5ތ뿡ݛSzw>^=x7wo,rzntoDn azކ^齻ѽ ?Bos zsLHnG=_Jݎ^\WKӃs:Az&Mᅭ޺|9=?J W{s:az(NXG/ݎKy2zvtڞ.pC/t3V.޹|)= tE+=]V:zvt' #@'8Kn޸|=tizt# ӋE,'G_Dnp,`>p?zt+f!ŗ##\G AGMۏ.8Z dz~t1 --bϧAWJ0^]|:=p:eztc3̤GMp.a"=m?dz t[xA e3ܣ׋BwFۏ.>7 --&=_4zvtQw!fѻO CM1|l:}z0tIa%C̡WmGE.10]b --=j?$z8t!q3MЫơKW D@Oڏ.>5]bc :xz~t!)ӃO' DG/n1޳]|3]c8=h,8z~tE9C F@O1ޱ]|d0: zhtA!=УF{WGE1^5d=b? zhtY # +L GAo؎>1dl<zvt"iE 'GIoNr>`@:Tz܀t~I&ܤFMN27"^7]zt&ѽoȨIGCo׍}^/$e=qH:zft[x!(KCQn5sߡ IGYCr^=]L"ztpbUV;\wkFLβ:("=[/eztA,ZѱһJwF֊}-*e)=vT%zVtkjQ.kaЛc_G KYLs --YX:rzt dWaӋǥ˜kD@O.eNӃ5S L!4'ѩ{ztsZ'"m={d9z6t\6=4=V:9ztFsު =Vh:M9CoՄ|+4GǦ뜠jBg>CoCcuK53M]=Q:zt(ttDGЉ!Љ 'J@' --DH@'zO/T^(("-=Pq:{z tPtt7<}RБ9RБ㾣IAGFAWzMS'])$]5Nekztt$t8u/qЙ"MН^۔þBw --IGBwzEoS& )(% 9LQ: z4ttC --LIDzFRN&*2&K=3zLttLtg.]2ѭyRѱӫs>gIENJNEzLR^%]+<(]1J%cz\ttdt(uQѹ2ЍѽћC>GIFAWFzDoR$+ )=I ztt4ttt$IХ~ҋ>'GKDJH'A.$!,+!=Hvzt\ttz=2ͲѽRѾ{d}HIGKGIWJN#']-!,']+FZ:7zttt/Yn_1RѲݾc䤫}JwKJgKKLon"-.-.-3E>gztttO^)>Sk}HLKMLK/n^"3.7]/5/D_zttt?YN!r~;+wHN+@'LNMn!90=!>]胞!;ݯ]1=!:烞!=1?]zt! GLA\/z --tJtt_Q. JK1k!Ua9wGt]e --qAME!wotdݱ"ݴ]2] --]$]2 --\*]2ݡ --[0]2 --Z4]Rʐ)i)2ey:n5;%/@-gTeMĞ ]rye#:qIb{:P^tv˕uE -;ҡ-;!Z6S[.GlK.lǜm/\ؕSy Y7sm!c׶cN-dqmzsj!kcnI Ys׷kde]su[6[XsLoadYɲۿ D7)"74pz\з~W 9W]o;|>)\=o'\?sms:'qypNVG( --ɷ9ɶr9yD8S'p|ʵ u䜏N[<‘i+i8{~{:rϯx\uO^T\/kH=?Ur=yS^ߓX=92QxOd:mG3 {zOƪ6Wy 'zgABvA= :(WOאr:"⼃Ǜ{\ 9g=(c99zm#zO䍃r:*|by饃R—<uJ <(:2<`{n3ա1sVV=wPss?ϯF7V>oƯ7KV=%.U-x?ܹQ WXMZzx[!`%b1@"`^1D#`Z1H$` V1L%`R1P&`~N1T'`vJ1X(`nF1\)`fBq:T}uYE`s&Ț^%.V KI\0zA2`q:f,5&uЀ9[m3azq:n@^!nVhzԡ:Шs4!SG(CpzwHV:!WGS8L!pzoBC.0:a"u;T8WWԁUo ө# \^&TN/L%pz]UL --0:x0:h0:X0:H:(:::a)u\w+jա^WKc ^UxM,.z9XY^Yj:s`yugԋ=9Soۨ <^ --6R^l3z$Ni+B:}`KudT[ ^6WE= 9S9z 8Dt) uϭ --p:pz8Pz8YTUSɇ3`uDu9[8MyWWR7>ܨ;O8EuK]8Ctnn9.8n8nn7|.6|5|n5|nn4|. 3< 2< --n2>0>B-|ڧ]܁o??O~ȏ2ŏo>^WCMz|`|bڜ#{' --pG.@ז~-WCgB.#?#~<3缏m/+&1>--&%?³;vb_d2&?Gn? --~}Ƚh܋Ƽ7>`}IܒR_ v OٯK/ȿ#Y_?ޗwث*}ȼ#"]ծ]O~hos΀NcF~?5{/oϨY/ʼ3޻~CZvl?p3,tfTD(~P:5R#yۼ7 {>^w;oq+mםb}I>w 7<#o:_Gɿ7+Kڨ)d#=>[= !>?'ϤG,?G(oN#$~h׿H vDdL~jn_'!7{^7I{]Fs^7*nIyK>=r/ DaGm#:_B~I|~}{bϫ^7y5x<>y~?Ďw8%+K0k?BMTqk!y7O້~}{ӞWz^WxE9akïACWn\:?`2SMmL~ --G~0Kwwq^gyE^'_T}2뫅Ia@\|0;c|uwz^UxkU/s+E=K Wn_=Aşp3gtc;LZ/#ȯ&>6|{}=YOԳ 0/+GԷoKiIWe --z -- gyEÿf<~7OBi'#?PN|?3}'yWؓJB/ --< ݪQߧ~ 1}_W3!+7O;ۿŸ Y/?O;P~??;?!΍@~f?K?87?_ |+mW {^'Yz^Wԏ~DiC|W+m_ caH͛:BM~?I~_'7~DM3IOȟ!牿Lm~;V;_y^}M{[O+Ƽ /74H@\>z8џ?M]6~W{yF^Y*:V:ȟ}3g&_"]s{ C)g/eӺ_m_i˞7zޘwRsUgB$!wȅr !HJI !$FBaFtiu --hAI-! V߸og9I;#K~x|֗hÎFSx9rpP?wѿ_w\!mm"’?I{%?3qgD~D>_O/ --6~y!y㸗7{^WyA^}'?{ws)ӟ[<_@\=v/[Tq۶liMuQgժKHzIUUyS?vlRJ>_2Qՙ˳_FgQ[i}-y?0 u/8mOS+bPyQ^7h'yNɾ2Y3~o@.];_'G hGl'6_uYGI+ ?/ϊDe 4>?8{4=b/3*:/ȫji/&N/%37]>_'9a M51W@e,bV_/ςd w_pXX6M>ϑOs/] --!.{{z jޏH3=^7Uz8/̋;K>N{e٫sY_C^w̋;D{r |v#' :?e}%~~ϣ?k|W  --I??;1CMM2g|y W --x ?.~B=}{i{aY+p^W +bWkn~/snNSK&?~Tg#䯯S2/ȂA̟Je~6D~ Xώg8?SQ1~l޴WzAoCy1xg̯c7x_1䭝=rpp9oS!c4~8FR'ɟ=ÿ( ?d# ~Xt$2'82.q䧋5~Bw}%Խre/؋Nz^ ¾Eȗ --9r0?G>?zό_(s36na?7N⒒DIlKl]ߋV½=Wz^Ey&mwRg_x.vp ӟ_(?rߓ6ї?~NQ3?6-6̟#/L$gx;2w|x)3gSۓRWzރ^W'~G9C W;WIjghǏiGџ)O~I~ --8< 3|#8'ɑ/7o[[⧃ޟ%/1`/փzH/ jb?8+y#`'@'#_Wx'_PBM͐ߒ}ɟ~q fK2?W2/D~E>7|{!K{߼?w=^gzD}$8ț@'b?<+y#`@ N+sI}1M --EE!¦rJ~A&U)k7#oBoߑ!w>{OK޻O@/̛N_~)9f]<2}]w RNm իK"//#$~wowWgkoimԸ75WW1 /,\&c~/+c9A>D:"DF"v=}C?? GE(=/>sGG؋ޠ7#?>g9pgn(;wf͛./ٟIF??k~xоݝ{:$>ڲPO8/#3aa%?ә@_J_g~}=Gua$1@HcE;qBSJ]޻ PҪU[E/N@(ȀM0 1iS^)s\]|g GFE'&%_XT\ZV7oB >ރGu/r'أ S9D'x?G33@o9??*/\`ٯE?[P]UQ^VZ\T}%䤄(  _?k~GG/o)_Ag*j>$2dFi#As=ZL~HhXDdTLl\BbRJj%eՆI$>O| ) ?z{xqϵex"S_IW9g| 'isI?WD?o7k Օ%Ņ(23ޕ@] () ~}u^`f& .ɏOHLNIݕgoF־$KJ** 5 @|#?_eY߆ރ'uOgi^P/9/O=ۯ0Z ??*I_d~"M@CU%M9efݝ ï#BM_ --:u+Y۳j>!@+ _#MOgf?#P[Wjl$Q#9 W'}gyO'mgcE9£Xo-L~>n?`Sroݺym~ЏBmZCuIܜ2IEAwP[̃߆:u/ṡcmR.g>&' {O$?`^~AQ1c[;_)B_~轐,{b=B/ -a g`)DBcA/,ܹ _G@nSWG{'IqQA~2!i)"~z ;' O_-Ru_癿J4ḋ3w{kuzH~0$? --D߷?_XTRZ^Q #iB'_ --[8޽w>==cOsEg2ƿop 'GGُɫ'sǀ@nSgG$eEYiqQa~ n{{i<N~oa1ױuNg1 Ia>"_43<۶trvqs$@1"y%eU5$;:{zFF? >p#u"h3 --(eLNq `@G? U?_! ?48c$_W[S]UQ^ZBߗ?x{y]0wogݷseRԩ|l@a7l2k$;v:5>Z@`p&?Ʀf]޾ѱQ3 --!7n¿ |G0EeEE"J"K'2~,1ooEP9 @?L֖i}4n w෧/Z --}u>-|H`>|G[xA;9{h:`7ut;?.&> >|{T{=^)gNH'2B% --_cL3H@Çf&itwu[j Օe2)Iq1ёaA~zKd --'$_oF=f毁ڮ]G߰qoH}C""cRRWTU745;L=}0'g>rP3J!H?x --1={ʽ=^^ޚX֬@ O_"A,g'G?48mh3q)Q_[߸aqZ[[3WS?rͷA٭G8߂SGFb瘑?04<:6>953;wQ @ ,>?"c=^Оa/RoƼ?3g%O?q'3J!$_&>uıGh :M 5Y{!I ?_<(Uթ{{__w fV -- OHJNMgAZ}C#c3Pw#/K⿋lj={νJe-PIO/?ȿ  ?HS4&'Fz:B@w&'&FGEwtognZ[[_m]wǑpHNۧ,ۢIEjャM{meyHNۤm>vPǖE@ۤ9^^(R?8< 8D##kbOy?q>8Oϴ}mâV{ 6䟟62<8KH?Ÿ pwuqr ~>~~F1 ?a>Fwrvu ONMQRo&6:>19=| M(>|%ĿOC("'^=γζ .?gc,ϐK~(?Hm"gg&'FG{{)2Rb##Bxo ~!Zas -->?~賛#q q2|SHl!R3?jPHXxdtL\BbrjZFV2/X$ph?5=;7LD|L|h98ϨC"{)3焝eߒ --?C5C =D#"?_+&X_[Y^ZF߉.U*33Rb#BS_ ~ECCΟ}}~9k|cS3Bj)e~@`PphxDTLl|bRJZFf27HU.B\ZYEF>.>h_ ޳jO^wtqhOk8~ѿϔO~ ?A򯭮,-.BǘWKTE9ٙi)I1QA0=\Aۑ/o,O?cƻϏߩEͿH1d#f"Dji%'3f~̬"UIx!!'D?)|mSgrj^ߝx(tU?F?\Ssc}ue?35IL]R\T ߇RXdEZ;Ν@O4 BBb)RX98 3?$4<2*&.!195-#+GWPT\.ohjiEȟ/-on] |X䣍gK||4ikhϴ^/uu3'G_'.?M~奅y*%Ņyʜ2]VXɤ HAkwS03̇̿b$065-2faQ R22yŪҲ: Z!nݾ#O_ ^'ֹc]k紟~M۽s΍[k775VWUŅ4Qah;(2KHhfj,0m} ϝ˼3320L$6HeVrk;{Gg7wOo,#A'%gfJ5HJ --$=@>U|"qL> -->ܳ[|ߏ#Od#O~6O~ݽ;o`PWS]Y.UdeOFR*1LMFW.cX?sT߿761|5|gW7/o_TY?9ƎwGgF_(ɿOM~/߽}&+}ݝm-͍u5U‚gm|#P ͷ[;:yxzMf~.|Uo`p(N!X?"S|jg{u[=^Oş~.5%=!ё榆J"9twsqv[YJf}#{Y}~ډGkHl.ʬֶvNή^> AGO2?fd~M]}csk{GWO_4$yuAH)Kg{=?Ot_,G?|  ?sSc#C=]m k*%0X' Za%JB3Ssj00m+FhR&W;8{z 3? --M-mݽC#cӳs cΟ88'QۭVlLbWAOOtO D]UeL䓑"B|TkWK>GOG?J<`vC6|Y^NVfzZJRb|lLTdĥCϞ0#@xV8;9Z[Zb6?A($I1SP'lǘ_P[X;:=}`o3!A懞y%:6>!)%5=3 PKDY%#%B|V^z@L?B{D_TeԔ+#.=?xoztْŴC)Ҥ1.}&E.[njniecgd<󃘙2򕨘􌬜\M~A>T _|ڋg?8Gϲ_8   -- Yiɉ q /1<3z{wuqv07]l)p_|٧:ܟov]}i}=}hbϧ73spt^]?e~EQ1)iٹyrED]VQ ɿ& 7⏢G$vࣼiLJ9解GQ:}8dk_ /S@yٙi)IQ c~> k}}n+l,͠hBgkov_I{]3_ct/X%KYnfaimk_f|`~ !x_'/PRWsf}n$#s\|v*.N-?a_ ᯪ,/+-)*Tr2SS@G_aCxzp%u?㾾4iO͟*y M,m+k13Od,@槦gd¢Ҳ*H~m]} 2"1$(082erRUTRZVQyZƦ6~X?#~"+ ~ʐKG?7X_q_^VZRR*2XJ֭_o7/w&PcCF&&h?69nn/̏2__*,.UWV]765C9?z42:3޿1ԏ~g$c,!C{ f-\]Z\*ȗMC:j}Ksq!&͟J?2nN.koܴ;?x̏3?_,,*Q̯Qohjnik&`/ --7{Ɗg&GhoC;-M 5 +`T$'wnv˦;9XvLiҤ6_4`滮3|`~4;K̯546wtvo# gG[xM(Jʯ:476i$_? +ww6z&8?>hmq=Hص{w:r$n~D$0dWa_Wȿ ȿsA~E|fJOJ{^~q򣓟'c>olokmnj_}Ld<#.];w!Gݞݻtjܗr_*11!30 f݆[:z>"I)i0e ̯_u$?OG3+[={_P~>{ Am05k ?O?۶nxy }> }Ⱦ!&O!|# s0?g=ve~2#_ߘ{wH~-[]m-/-)RɂKzԉcG߰n(ܧ72rr_r_b_=z0M0gsŘ30(4칰 ""b`gfWW33f7||"|1a~^RI|IBcs' &,W*@ggqBAܟs? sĄ}}RK{1LC~?7qq) ۴%?:-߷1BϦ CHBB!`076mYdI| --mga0>0mL t]iWޕdK yfzFO"2wH? ]?WPT\Z^2_ og ,;ſ^|Qa Cحsy9(߼iO)~ --}HpAr4>h*`w1_̏OLNa77IW!߲u;p0d~3E8̷@淢wI~/A&wD/?lԳs ]'?)qmV//+)*!3طg׎۶v?>.&:/BCQ/b4 6 i}ŗ釰Y9ťe*:G ۉ?;.&&wimx_Qw_;fZW)*J ssN1Wr@>q |>6_(HQl濇_0v޻?Of+(*.-T(UjF淠?| 2d~wſ*oBG! --WsU~g2~2-Tkk* uı#_3܏@N#}Zsa~H,#"`~a ߈߶2gʪjF5@曚Dwf5A'AU~&=5?{ :F,/-)g߱i#rC.?'"##}!vOr?Q|cz#!;B/Kx0??g濆_N0?B0BQUh:fD2 >I/qC|hs= ?(iGbZꌵzF]](sϜr_s'v?"T&B'M6ce/b_g7~ť`R FSb@u.(߻g}Zzߗd\,f17F]D:Oߏߊ@wu;ܟ1mJZjJRb|lLTd\&iuˏ&[| !BX* O'36 wW]o6[mֶvh2#o!=9ӕ܄o1'? (Z6X_gj*^"_ydp? prߑ| "|2"OϞc --/WpWP̯ViZc]CcSjoi?ǖH_  OßWOy1>ߏg ~pf4756kuZJY/:EjpO<أsgϜOb"a2X --;r> _/&B!BD&KHLNgei$?F_RWkZc}l[;Pmp!o x`{/w#[}q& --N --~p_bn25k~5rp1LWEyrjIɉ q1ёT"'|{1 --?1T(HeȨx0?5fs//^b%azGhW(`o456{k[Y0+o2" YPQ|W8wgti޽\s;!Z6}^[+ʜa~5o/[d1 SScc"2X$GOv}~#kL9B?B<>*KdaQ1I)`̛`!6Zx +_zL`No#oim8{2'df[Lrkz>ByF []ʕˤlj3uRp?c/\Uq|ե8 --@!{I! ! : cE: --H !=4wvw}<{sM;qo3;s)oݼoLYXOf~)Sc#熇Μ: ? p򒢂4hrq p_U+2X$_bOpmi>=L>0x|H,ɕjNok_a^p`~|RJZfv.^8柆揎MLNM7ϚAunOC|&ϋE[?~r7B75{ɯuC?|sUM e%Yiɉ?ukmmB.5pߘe`?>G SC -- y|H,)Tj  -- KLN/,)ojnm?ǠCi`>533Xb߄|VQӴg;? SGො ?-oޜ)FBT/.HMN=\]vzZI"!g>>ܖ --?8|+_ KdrZٯqtGD%$gUT7.Ss#cSKTg1oCY2|'YZ(WfGSTNd%N8!i࿎?e4COa9UŅy9YI qQa!km:Z)I"r`0g _me\lloظi`phDT!!)5=3'k{o_?0yh+@=v1"nWp̿ 3<ȧbI|JSGg8O!m?,bio?F3i3?{& K1ǎA%>i? S3&??߷c{Wt 7;3-%1烹 wh*L* <,C/r3_BC_&W5:}'gW7wOo䴌ʚ--[;͜S q]ϒ/.-I>Kf)N> {(tM Q>՟J?)/,_H3bBorנ/oڲ(?7+#-91>6:2,$(^Q+2X(_e\s[z[|[YBD*W4Z[`> }h`HXDTl\BrjFVN~aIYeu]CSK[Ƕ;/Aߠ52 jS2g>FSGg~ٵ9!FIi3^y^i-wg?&>0;wtohkij(+)HMN >pFQ)R }k, Զ毶"TP6z;M=|C#b I9yeյMm]{oei`e||3@??~D~)~(eL7'zgp`ΞmmMUŅy9I @?/3pNӪ --T,sE/7|?:GB_,ɕ*NoB_@Phxd!>)%-3;g݃{c>F̿*a,f>p22OzD6>>=z*W]A-ЏR @Oo*όCzߢ}e?tC~=wtw67Teg$#C=\]AuR.ܖ̄c }k_B_Pз_>0?($,":6>19-#;qKή]g^ܷe2|[HV7bB">>=QzT㍘˸.l祐 '''>D࿍?/>wG/د6;k.oKb;vz wV{kKcRQU^ZT.MIDG }n<';oXv.;.- зc՝- --%&KeJ?8lcB#!D/I~|.kwD|6{=^4W27>C#з,,{Jyy6#ﰮs S53c}7ρϨ_sQྺMPWS]YVR#ϐ&'DE/O7gG;;o۲y'0,VXs1wPv`lJ3skmc#C#cbR2r --*kjTm>hSg~˘?}F_|R|F|=֞`Oγr?g> 'O?c5z%&7ւݨS}6USCmMUEYqa^vVzZJR|ltdX8@${`o jKs3&5~u迿x(-|]ֶNOGCOcKڤ'9hmiUTfgKS%aA~o+zk,̹_BB ߶}'}GgwO/`phD$.1Y*˔W*-]=C#cl/#o5&6%j3 }ĎZ3⣾c lY>=fw>C^Br?O׸~&ƍ~7oߺyec#C=]͍JEeyIQ~|7߸c+A>0 UfV(7mBޑEDKRҳ --*kTma`GO<}Li%$j"9j󏯾c{=^=Ih7]72 ~|h?ʏ?뷘oMvu'Ǐ= Wwwjk*J ҥ)舰 ?=m \s[HB'n;g7O/(P%KL2s J˫M-m=_`\~srvOMQk|ck!#"3Sz<#uWG[KS}(?W)&'DE>^n.Nv6 ~Q[_f*ss{S3.N @cA _ o2OntoM޸ܿp̩ǎF{{:U u5eyYi)@_3s6}}nofB_' --54wwpyxšQ1qRYfvnAQiEUMmC[?82wA[w!4⅚ϙ7 90O;ƇC{=žR'S!gN;izI|_|@S~B@~~m_0ˀcl?r{?A?EOh?`MP*/-*ȕgʤ q1Q!Їst/ZD}}n8% }>070) A;:~A!aѱ I yN~QIyBYѥ>z20ٯ種3Lf1(Ǝ_8Ę:bP{ZIZ!!*"dl ys-ۄIŠ{Wo|/?6gqWCc9IգTz<3 JSkQ {_@/zgS~|bGUGxtǃP_p?O~KBP'(eg$Dz:ZY=}ٵr|5_a}Ön/gsJkMi۶CB䩳-m]=}C"c2s $e*Ym=u =l8aHb>#}{h='=u!x'qdMl=B7}@/v~B?'Re --9 m/|&FVVV)-+)HKN tsq4?ԉcG߻{vŹ4Kr8S ǩχ>> }}o --Bwf k;g7oЈ؄Ԍ’Rieum}cs 5> `I4;4@3_| --z/gS xTWOVGW+F49|_fw #L'NxJ4?-͍5Օ%9YI QfNz}׎!$7m4%羁}0_Bq#*{4߇۶=p(PhxTL|RJzfN^aEq̿rud6e/O'Ч5G =pi#Ly&< WVkq|] WD'S)4oѣOïRtRAFj+~OŎ6eKSC]MUE /'3-%1>&*<$S'=t`۷s's oJZ#M 7W=< }Kk;Gg7O䴌܂"IYEI ` Vb,b%5Y諄>?gS='S0)LXʄ|c3orE r|g''}VVV%-fg%'EGy{9;Y[\8w$wk&k׬rȈa --*_ɇ~FwC߁G<}7 (4"*6!)5=+7TZ)o+Z;.]GON!#n/3|"WG_-||F>xS{3Qs WV3|+/y)YVg{ƾ?-?^ 6*"4(L-?P֯3Yccs%O羁}^4BC }> \o,O9?0$<2&>1%=3'EI'׎7? _#9чvYf"=psS9Tx4V'㖫ci|ާW@?Oy!6Cޜ} Le_+ >>8cp`]mʖ憺rIqA^vfZJb\LdXHGHo o,Uj̐iO'ϣv 7. --?93 k[gWoఈ踄䴌܂"IYEIlۏ]c~"~K-HGA>p641*Oo"z:Og#9l\Y& ~%[6 %7c >}vg NP`ՒH/}Ml>Ϯ^{/v)M *i 7;#59!6:"48II]c,OsWo`߰8E7^kt _0-m!|BãbRӳr KJFcbkƅ|==J [<}=|N|xzJ@U}5$7oyjCV6NQ IYE2iIl6zG'QƽϘF/S1>`gX-۔ --ysc_qh=ROGx&{,.M?ipUQBIn}GBZp@[XRA]a $!d_B6]v:6CrIز^ =?$W>/=3yg}Qs --^׀]:R~$N._pσ -->(ا=׷CF_#hWiF <~}yٻ3RSb#Bm٪~,rm7\.*}依ƾtI[ BЧoO߱~gGBǷujKk֮߸ekHXxTL|brjzfv}!a>((d&Яo8owd [\"ȠTtS~I?'sF;TΒ}Lcyq"Q}>֌p?r=ٙ黒wDoٺyW $"Bz:R'omZBC۫opvqsݗC__߰)(8tGdtΤ]iY9c'>2R#0]d9F/I}C_{ךDM|x {e=QO x;Yf% --5[7Uq -- ,폈d?#3 {b#&bibFl1#-%)!.:bG趠Md:GR߷wO侏с 徽=/s_o6iS}7BG>P5zIZ迏_@o OLI؝ᣪRhQiJoli~ ܳT_m ѯDiRY|/'5y6^N/|J5?GoЫ _O'RV_c*o[Eۺ͚5MƲ %ŴIfU:/?7{wzjrb|lTxX-5%Dϖ?sӫ}7Wg'Gboggc6?<OK)BgGB{}?fSYbj;"c(3 /E \(3VT" a>g"ĸ%Ϳm淑 --ƆkBG_HqOMIf,>I{z!bK0i>EF|@CK!?ß3 gjtu/_V[@[cm G㣍?_\tVl6q̴]I;b"wlڴHiS'Oǹ?x~}wW'cgN)s ܷͣ2􁾽>Bۥ/ 6O 2R/GЏMu?9sN+L02b=~Ӎ-W[K}⢾VԠg}bB_3>.&OK='Bz</}'?,l5~ޠW5+@'@3~?$GEƳY9yj:j|Z]=-b}g5eo+侩XZr\Y_nyٻ3RSb"B!KUϓ?eF "s[_oOw7gry~ܷoGo G;]=||dϜ;Q3O:iX$JJ)/B͇Zf귑j --}*}!@0?6: --Ƈ >' {a^1KѼY jb1z׀q迌~=,>ܯǧ[iI16Z >N=ٙ黒UoFr>M{r/kdp@Kvvm}+L}e~#̿1_O;ZꃉkW/Cs8AA>ė/&큽gBxhHyA'?NsgO]O#a??˿j5ÿiKжv?!7 دJZߑߵؿ߼ɹ/ܿ|TUQ▟=r_~qD_eϚ[qGЯOݐn.G:f?6mc~;}sv@D`prvu={?pАnj8e~s.VgN KJ+La>BCͿ߬oV7L}SeyYIqQaD~2˦ ֮Y' E3D^0/迧K3GΛ;~A:t_~Xqs68Lt/(\Yye7[Yk}}~-7DQ_h(/57r#Wr?s?^wsߠܟ:e1~Ç4?r{W_/wWg'r_ܷ{Y=ImN?uyp|bT01m]oEQ[VihMhVc\"ײ˲. Uqy 5igę}3E}C#BRbck7B/08,":.B>G/^^Y]S[ vg eH?nQd}> --G tBdP >e=YOs39d$6$ !ô --`A). ;qXU5 RZ>/\O}}=tSWe҆:pW !w3-??=-9!.:",8徝D,! cA3}2?F"@Jb?C?($<*&>1B?k z! ?qEAu MrEKkJ/Ûυ3jP]J֖ƺe?;rߺ/X9}aϨgssIJio{<ɶ-П_&ϯudjzEuM]cSsK+]?}bx!:ԔƆ[7!]/& VageB'Dzy9c6+ 3Sٟ`@ױ:ZB_CCBXlbjniemkO>B/ 84":6!95B?;7B-BqI)Me[B̧{wOP}J\)2i7ʮ\Kpߞߒ6_ K=bIO39h(H6k?) --h@#~_]nFto?'r_܍ʛ2^{|ٷG?+W:;TJELXrt߼s?7{~jRBltDhpӧ Z[Y CǾny?B__BHlbfa)4yʴ]=|C"cS221WPB("A} C]F?~>K>J1[[M 5UJ5w;úPrA|?#gԓ{x!;;mʖfY&K/Y]M`Ԥب _/7g9S&CH,L"cd}?L Ӡohd,215c;8{ED%$C/\B H0LWVS+!;:nc}}dkQKGWȥ 7+o]tܙS }{@m[6_K@/Ȝ#=hs39ys_6x !A?OJf-FW۸6<.\RvfmTb#|͎^qH}} wuv[ --rz߲r?gi qa~ޞ.N3O}ط075jaGctG+oc 7Jc&f@)f̲wtv -- OL d)wڍ`pЯkhl7ԝwE3>  ",pf_SU~_~cGЇ[f3!=pOFywǃf)['Q~?=cr?v[}>skU5,\?K: --ᄊ׸z/w~/߅;˗.ɂOI  puv5cڔɓl%f&b`?gc XǾn O}}} --o!"f" s]<}B#bRc\퇡>/oʚʶvuGg7>o>/dhb|CjmK1=}àcMʼe$h$=!/NҸqih`!~ @ (h~.s?z/KbK-*o<~מrc=srs2BÍS[2/7r?=5)!6*<4(qӁ_NXZE2O7V:u}>}=} ʚG/08,2:.19-#3B`{b -->пBu>ڀA` >zx~&/8F$QQGҫ{ EPHPAP)4 FF{SjVƙ59(O'a{?w~oT])+)LOI??b;T>D>GDzO}~SfVYryC]-/$sz}_oMN6VF4TB<܈ff!+9~>U\<|B"k֮SPRQܨghlfame|KB?,<2~l?1)eQ`?~[Z*Ude&%@oߊwqrDc|=Y'S3}WGř(Z8ib4LߠNƒ_r?7;3#~dxXh_o`kmaflQSMEIAr_ZR\TDHŋqV0gW}}.n^>Aa1 )-}CsK;G^>p拊K@_8=q跣CȮП?"0PltxՋ&Կt0ٴqp}twmD;Z[YH{d=-=<-<\6B_K.7B_@HXT\BjzyE5 ںFVNp}'@p(ɩ/_͌`86FNᡗݝm-$/)L?W&gdF#Dz"~];z{or2752ޠ(^Vf(f_|R/8scC/&/[苈KJSPRQܨghlfamr>CL٬ %8oM./ 3?7}G, ok~WGkܿs~nVFjҩa{-]]&F|- >xeȬg5!0V@#Q#1}GgWwO -- >q*)5#+~ՍwqlrrMWU\.+Pu6L)CK+|k Sc=퍚j*J --}iIqQa!~^n`>9}|G>}.n>~A!1 @:9eUuM-}C3K{G7/m~;w;v< --ss  --6?A$#Y z1~yp[+K!ϥ%9~p֣зBA|U=[Og0OOI.G9~Dojqcut}SsKk[S~G%$/-~ǻ~7QQNy}G 1k _sbQ~s)8;zwmhgcifb n`_LDHk8sc/+Wqq  --IH]/A[֞;v :sT"~fv^aqI努B>mg13M?'Fݝm- O~}x7OI --?r0RWɹ#r}Jƹ /;3ɘA{w{[+s#}] ʊ}) 1aA>^nU4K>g 0+}^~!aQqFm=vή=>_tJ嵛Яǡ߁B>2?'<3c#C/{;ښ?}ޝO8zh^=>\x ScC}d>T>{= vw蓌ؿ\yνGOj:{_Cٻ('p͐(k yJY酢,بCVF 5E2$E1<\VXG!9s9/`gAC苈KJYNNAIU]#D6ȱȘS32s K.]Zu;w?_<=~}EE?suT@2HAYA$I9gA s9H2(QtFUuvD}SW!"Cj>&  --_96-ܿrP[]QZ\ r?JlTxhp3xsr჊{H mssr`v }*>2s9g> +;7/nq=2]WFw] ̜’J~ױП 0߼B##  3w'o ;Zj*J --r2Rb#Ax8ZhiW:r>||a>aO<p +?=@H?ʏKJIߏ?8 --:F6.0#cR2r --J*jZ:Ƚc7'f_3ߘ}ܟD?24r~a^NfZrB\tDXHP6Q"\luk1WC d9KЧu;'V?-nCG+R:w?08~JzVnAQiE --}chˡψ/>(f޾u}t8?;=)>:H}7';+sc]- 5 -- $ġ|(>rYOux\MaP$.|`CH~?t_Ld_ ]c3+;'£ҳ˫;{Fߺ}wfn/?}!oDiJ_O&4VUf$D^docif|^Yxg$8 ?yyXY62g,l}n$+<|섊O@PHXD4 涎NC#c0')OW3{sw#WImMuUeEyqQa`XTWUV:/&/Ob=yzY C [w~{q5 M,P_KL+*kj#u_ߙw ^}Fi$y%?r0/;#5 --@O7g[+sCSWU9~E9Ypۅx8p3g!R_ۼEhȎbK~3ںFv.^~.^_TR^USF" eB`>R/_<{ßߛ3q`_0'#%!&"43UcAqCDd>$ǴǥSFl!|N\@#~v؉O?3gu `{F$dV6Gݜ3={}K3+rmjwIm-5U%E9i0/_ -- --rwq052T?}ı#ۻVdf>nNMl 0}f)C询BOA>pA٩9{NQ`phxT앤Ԍ܂Ҋچή<'VwQ7S7Ɔ{- 5%!~05?|vP|={K_Obh_| )s m;b70$<:>9=;8}Sy?/r֦ܬtQ=\m,͌pJY;wlڲ --qL")_M@/ Utnq)i9paשih[:8yED%$eU56u{)?BzvB̧Wϑ 3S7ƆzYiqQa>0UUTF2ǸǭW:Y_T)C101eOžO@pXT\bZV~qyu}s;w`hRWN%/-rXWSYVR r?!.:",$P_GKC|P@b.ȾbcZ*3_FM\<|8bR{eªSU502stq xrdL|bJzVN~QiyUm}SK;o-S(|)`w'ǯt5Ue&F^vs4 RRamYGC1/Boŋ?f??xs^Ҳb_ľЈ؄̼ΞQ?hnܟ Ձ2(?'+=%1>&rHPٯ(49F{ADކAzC:Cw*]z )bMvHN}wf`7{y}G ^.wKΟ=suY(E>3=gΝxʵ}t\Bb4 M-m\=}Aaq)YEĪGcO@!?!g=$!+ˊr3S xJ}q!~ܨ]̇C)ܯ[0ef_o@9@ƾLNH-*DO>}_"wYGÃ}=]͍u5UҢܬĸhBh n@aA2E߸qF0g --п Ч=n^!Ptr*X'/ 8,2&>)5#;DxB%Je v vlTlLnoi,-H --vw27PQEM]mXt!|gȇ~ ?sW32sr --O-,mhi&GƐWV?6^.̿db> /;#5)>:",8`cinb(' /x oi::d9 `ٿ> S`/\Nn> 9y%U `HxTlBrZfN~aIye̓}d'A?79oBQiqnfzjblկ(-IO rs45Ū)KKs}d> >[xð8nAϜE_܁(԰n^~aQq95P>Pn]w?ܟ}N}r_wgæՕ%y9iI1!>^VF:Xu%yIq7|:qc}L0B,I>m98y1R --ʪZf]=}AĔ܂RbUM]csk{Wi`ph?ό~ {WXR`cab(+EI}v6?FMo6Оf:~?uAUT10o]PRQSG[\>Pm=)쯾yMgߣ t67TK Q }3c]- U%yY)qQ v6[7A@"/>s6 =_Сp#hп/(,*!-ghbnic KL+(.oji'ON=Frc?:<ԯ&g%Fx[[kk(Hb@߽:Q;v%>o=65~'rMjcD%eT4-\<}B#bҲKHG*(>"z;Zk*ʊ rS#‚|=\m,M 5Քd%Dy@c%I@>s>:t п}.(9~!a1Ii9Eu,@ --/,)~pɩA-,.Z~vg{;[ꪉY1 2w}Nn^!qIy%U P(!*6!9-3'XUSC?̋+oV~O?_^Cܝ,͌tjJrR‚\Gwq_Sȧ[q՞f۟H~\bWPX\JNI kdfebS;o?_0bROW{ksc]M%(?'3-9!6`keajH rowz"ofK&l@S_f|q)Y}k;'Wo_|PXDt\bJzVnAqYEUm}SK[Gwo?yhٹmBBSR --Mvw45Ū*Jax8ﲱRS3}T?'F?"<~.\zoXr`ĤdUfvN8`BtBj&Pj{rݦܟ}> stdLhki"f$EB.v͌ t4TeE0|ܜ4N>ŗCFO/gecĈJH*(ij[;z~}FEyf$kv +RAAE * #U@z  ҤKw 3''j}g&FfMr2b‚HcFT>C|.3~>[`:=(!#76hfsrB_J(Is@_OW{kSCmuEYqa䄸А@OW[vV('> '#(_!쯙쯨+ --8@_#{(}Kmw/߀a1)i9E%5umݽ# qx$iBB 3Bwtuꛚik(JK@Rf+sLy3_ ȮG^!Ҳ --*z&fX;GW/?~ --QϬ2M$q GG{:ښj*Js2R#zvvƀ#jʊraUc;+le= oFCG_R#7#[_1= +%~`8exɛ7m>J|yB~Q Qm]{G:T9sEϕ}܇#?;CISDݝm-M5U%O --r!1z8`-]`r#:j*i&o ,>7  --WRQ?vή~!Q --K+kZۻzFF8D1]|.bp>۾؇'@ugV+Os'or>yzjǽ@lomj(-.{a҃ب;~N7o3TWQG_0e!aq ɩY9E%e5um]#'I4Jc }Cs~yڿt#Y_@WSH߳ 1=30_u^/_TL --#x_qy>ܧQ)ӤI"7>ltdx0?'+=59!.:<4$ Mϝ1:qL_*`_FR ~m[6󭲿:\_;,%dU568~WYXY;v [PTR^US?[LKh>D[?-s/j/'9]y껾 @}n7~,9Å~}}ʀ!T7?xIՀǙ{AS3s --xssp?CISDζ쌴ĸ舰A>n,78|HKCUIAVF --/Ɂyoۼ{/D.X{'w/;G&_/ێ6XkW.?k|8`_[CUYANFJ>ؘ`e61_J%OPXSTV=ri ̮[޴uprWX\VQ]?8<2llGB --CC=%~a;'I=IP}>2K۶ f>gό}4uA}3sT?8 [XRY }>>A$/uY܇#?KRIDA NM)4>jk4/e`]_, ?| ԯ,-Lf&F# w .M77kk3O}um=C#S3 T?*>)-+QQԧ;kmp9b334 --4E$Lhkn,+.JOMN -- puvy)Ct _v[ i__Q{gquz(t؅"Hw-9̀{Z=}gaQ|éOTJm_ѹO-@wҨOR_JFNAU omNH-*@QI}8^_/'{cGsĢQ񱑡ƺ~b\tDHKKS#=-uE'}W/gaߞ.6o>?QKBY!/"vYT5 ͬl\=}B#b!ťUM-mݽ}$ --Ч?3߫ _k}0޾0(MuUeEy 1A.@}}-U9)tR;*BfV?u/ ՗ST72{$fAZ;iՇrR}2<A!'Fhki(-*JOx:ZikBK/_d?w>,Ojt~`8F<}&o}.~AJ=|$LIUSG7 8,2&>)5#;$!tCJR3AU8)cQc=m$Rcƒ<]l̍d$oN8 --g&X]`ģO ;(ꃵ 9~ݒ| TQMoW\^]30<@a)X!>_MV>e I 91> --loij(+.HM ts276PUz&`_D  --| {?oc7C/c'\B"/^E_AYMS  k;gw/߀؄̜’ʚq --Ceϰkh#]mYi^6ϵՔ>{ڥ<$Y2Ueć>H>,D9ywy+s:!Ob(@_OW{ksC]ueYIa`?9!6*,8䅾2`ۀEX#w6niwC(@;<~ --}ndja//*)oli ?@a8@Dc'qiЧAECq> --1s4[h$Q҂@wV*Ϟ<ƕ |\@}ٽk۶jK46@t0=;w`>zYv.>!(hZt O),mhGbH]G/_>d2I, P[]QZ\OMx:Xi(ʓٿzYwهa-_I!뱓D7$$KCU5 ͭl<}"IUV54vtG(>,3١OEes~[+@4~hmf$Dz8[TUsE1!>n>t4/[`k#D0? /$vMI)9U-f.A )P֎ >a|߾UU[)1CaG!Fz[+ˊ 31a>nNVfƆzOdKJ܀ qs?|m0?Bs --]LIUCG7 8<*6!9-3' ?8<26Da8D50O;}{ا}àw6Ue&Ƅy28]?}i,59~Gksc]MeyIa~޳ɀ@?OW'{K3c}/G?q >}=w<Ҳo)QQ506?(,2_TZ^U[ DcgHWުP#>51:4T_]^\`cnzGU)qQ|L t4Tg3 CT4 LNpp?+"&!uUM=c W/'m]@ vEu|}g;oǷL>) zr|ldh~R|LDh}+3cM5;}3|ߕo3X>Z&V^"ced<Q\ZQ]Ҏ?Bcff@/'}d4U#3!C6 J4=1:<\_SQ"7IJblD} }-5eW$ rq8tRoX}$ w蟰(i2yp Ee5m}K[G7oؤ%5 ]ch(p"p_3kA8y_C#~57;3EONloi?HKyᾕuYi}}N}Z{]B^\F_o@px@?\~YEu]Csk{WOQyE}b#巆qqԟBO u4Ve&E;Zh߽}Μ>v0[ʃdfΫwBd)9Lw8IB/^v붊O@hdԌ煥 -}@I7}mj-as<> --?r2 Qa^.&Z싊 --rsr챿ޖgá/п$%-{C6@_[70$<*.~~aIYeM]csk2( @ eWk歅`qv>frlewGkcmUYgG>p63PQdgead%%'Wۭ>!ꓐԧc`dae/*kl92>7oũyGMB>>4hmn,+.~$QblTxH`_<{η9)#//s F_C[/0$":.1qz<~yeM}cK[GWo@B}0h}x ­wp; g}=?;A{:[ˋs2ӒÃ|=]l̍4U(\*%!&rljcL Tfda. SV>-Qc'8xE$PPV3qp --IHN)(.kjGagA5wL;w}HNOaГ~~[sc}Mey `Yf:`?.:<$PO[b5)}!>'m} --}>+9rG+Oq"qܧpIMŻj&Nn!I)Y/J*jۺzF'PXXw+)78?bG$:oU _!쏍{;ZkK --#B|<\l,M5T?'$>=aj*=oK32Csп72wr --ed<WT64^Q0|%(ףU񛃕_ZV_z_?؇nnjoi,-NOM qw25QW}KNEQa>NvVF:8bc6> >94t ,<|¢2rT4t ͬ=|BfdV6w B{.\HD'4 csGri ff~vf --FM k*JDx:Xpg3 tc1gJ?lՌ[k39 0( --dAr9 (H49N4(Q݇{o,Pyjnu9?I\B --A_E]K_`Hxt~fN^a @X --"4:@ }6`qJ ;:wlô;>V}O@)Ã}ݝMJBq~vzjR|Lx} EE :oϮ[h9K`~q3X]{8sO@e wU4Z:zGG}3͟c[cq7GrOQ$~owg{ksC0/'3=-8~CK3Z*} }~>`\qTԵuY9{FD%$=/*!TT1H}>z }|p߲ ~^.pvz --4P[U^R*-9!62񑵙m9I"gN<~ޱa~Jom޲mz񓧅_rMFw@HdlBW9%U ]=C$(鷨Y=wo{rcI Q|!~.v6ftU R:? ?ɂ<@_C[/(4" D?#+7PY] osKBѓcz?> 0g&ǁT@oW{Kc]uEian˔ĸ@wg --7e]8+xoy[Sk <{A쪔-{:6aQO-,kli"#ONͬ1gMce[hz>B!]mJBi`?'A~.6Vf*J --8%lQez}[{'WH&E5M-a262:s϶KC|Ӝяϸ옠_ --U=1:<n>S)a]REo@/.LMNx:AM tPeE?/vEghbam' 8,*C?O"Sitp?."賚,j>rr 'XY\_uNO3{[kK --r^HI -- qwha~Oub --:o휱-WrLl1>s%R汳o`XԓĔյ-]C$鷈џC3~c8[?O}ȓciT2 د*/+.~ُ ?671+C%DQyLb<po#C=vv GOKuC$ --u>r{0yrȽAἁ|BGnwmSfjrOhm(-J,>:<@WSK_9sXfo;v2b.mUHm;w#ia2rjZ=rp OJM+*kj&Sc'f0?0_Dc6e7s9wP! uĪB&QnNY[@5U!W*E&@_ ojYJZzf@PQMg?̉,RV~g1|ckD''ތiζzb%8?;#-ilD򝛲H @bKoDTeBS3g>|Bg/]od; $26!9-#;PElhn$Qh7E^ WM}w7pObDzs,ķ]<|β?B7+J --r2RAC|ܜ!:jʊq@}}gw/hE%Z~[GWO@Ln{mG%;s\7QtG~aw6Շ#6\ٯ(4eʘTrHXeĸ'f40EEP " " --t; --H2󝯿n2:xT/ 7‚|^UyqANfjb\t WlϜ2;rpﮝ۾ߴ5+`6XN)=Ϥ4@SѲ(li#OYٝsrv[PR^%2E#t --0]Яi>-kaVwpokƆzT,"`?#59/@;Aobo o9v57'1~F/`}NFng'%s>B?_ǽp}pmW%"AmuEIa^Vzr|LdX݀[^n.?kmyF?׮ZƾuXV}qR9IFI˟Ϟ|7^HXdL|rzv^aiEumH*GC'J@곩Zs'&Z\~A?b K% Ey'!}oľ=adOgy'DOIW --R5C_|Xho|BQ~ --ǸVם}>f,UksSCL"K --r3Ӓ#Bthgmqd_Bb:}]}-UFcBO ].TH}6nۍv79z㥫nn}[PR^%zHV|W8A}% kc>=A|c s jj _[i)A}ľI3ľ1e7 --̀BߔЏz --ť}ƫhT|o= >sMވr\>߆?IW#']LÂZD¼OBricFϙ9CuG렭R{:&}>L6l~]{63?cpˍ~w=|iBJzv^QiEumH*WmUubhlY{At1$Y5r>e_,-!0BAmMUEiqa^_oO7g\ G@_oonim@A? Rҳr }dHG-37ͽAbd2T~R)Or0>GXgmʆz_SYV(8霝qӟkžON?r!Iv31=aamtvP̜P,oP6e-ߚ|L!3`q#&a9e~% eŅ9Ө0ľ;aooaM}Fz#j/9_ fO >NBϬnfX|"X,R?ȏgGGb'?<5ٿهZaB07+-)>&2_/k|ClYl ZPg3w{aS LSҝ7M RkKSi ]o޹WXR^$2 --}@s l|;O¹'uzSB(чR/RKx``鼃h74qw:o`?E"@ǯr@ݸ --փ --}|ZsCcC u'bavr~#}~GG#GmijTȥҢ쌔O?q9[S(w_pɗϟ;`uIM3v(?%͘Sul_?naew~TlbJFN~~mR]74,k~7Ml>BcۃI%~;i!z}O<r`ϫRbskl?=z@ÅKWYGFDzWb%}b,-~+K]|$@khu}m{owzlb! 73-).:"b'w_f l֧ӧM2y.wza[{?ANi' f}?-\|y6 [S_(fF}6O}nۚA/CW(b!:@N{(>=~e_"BWfe #w|'cF}^7|GԌ52u*!yx<Cwg|cU"4}HVZľfAofjå(̜? :i.3d_cQZD]-NTiΜ3oXMLOĩ_TZQ]['bR_?7Ī?_G}6Ybg\!sGH9gяypL,Lj}_AU^g'm:֚X8( D\"₂(5AE 5FF; \6bD]9y{/\Ŕ|Û9C؏ܽckDxXHp[ /ժ Y*Џ3"%bIװfYUwYjB.+*?トg*at2 rc?/;#%iABϝ5yh#C}=UXwaU@S~.чab!%=}OMXZێs삩>$_TZ^YAܯrH}8R+V2#&>{R;UIJ_Rrٿx?)'kwE]DC'{ _WުQ w(Y]E0 }5e#{V.#v"O^>hoojPTˊ r3am?a[lƚ2#cVT}vU{|,1y %(?qT7wO/kù?+n$$eU5u m peԇ}f 0< !AfPG$5c[nG#Eٿűʲ̩~K@ߟA, }9A%ug/:}¦=Q --}||XҒb<D~9ulǾ(#Bʽu%y2w!4r)Ց!޸/5_%afida&8L9{B_B֓ߏMS6y&QP_ussXAL"L `>. %=}ZF4pEȇ[~Q~nV=~PphF1W^KD JdFv.5G+1l0F1ɪ -- "GaHhQqTǾ6\hxp~c?b?^E]5mVz#ɪ T;U/%шz~j:q/%˂V ؾ+2*I_p3-R R_r^t8 dIA9?P~}q5Aa~~=a_γw*aS1ǐm ]?r@?g/!ɩـ~)~=CԆ>ș --ؓ1ܹ~rbY62&c1sо=;>ߴ>d ͞93v6cL }+ξߓQ?Y742maec7~Ϧ{^typ[wLԿU[x~;\L/G[w]$nA50=@BDzH?$c4ۙ-Ae%E~"Eư ksF2&=A?M>*3QLF BZ03/$d'''+(-lk1hYؿ~$Oܵ}K5A˖,Z0w WƑ]53e@VUW r_侺)X?70263Qr2m \n#@{5U3I;LRc($b|0'Bܯh> --{,,c/3RKi 7?X ׎p[qcQ L8r0r[6 ]8othv6VMaUF?>}6{|R1o?~┩={/^|UHئϿس!ESZQ߇R_x5AT@Z4HQQHOa$'! I --E>0췱V!y<}d~Q[7dзsbqy%C_`eg --NQ/i+ ?OINɞT݇ܧp)/>A|;|˝"׮ZdтfLsq`g3b2BI rgKI~@FIΒD'i3g]hɲkօGl_ԏOJUN}E|i$N[IgTf ~b}}> -dkTO#*dRO";Uo+]+I9uRXO;r+ 0> --س --9c>YII pObRM-;؇]Ăº*}"|rؿroN=u~>^s<\';#f>**|:I( zG  ]\a|VnؼuƨM{Y{ ΫgX'BBE29!OpFQ 265j?10K,=g)o2`6EU}.Ob/WFc5k8-0OT~U\Fi'&Srriw*!Z1(".bCU']g:ka!+}tw:e8[kKs3c#Gw#K4g?א)g2)!ߥ}%;ె~W=qQyY EF?'Eg/)pO}]TkmiBښ --43upWF./(]oJIioTcۺ3KstڔXEcھy_^8πUuƪUus_>;%/7'ߓBhBb^>KZ~Ӗ --KJ yE3m^(bo{g_N5o*$+gC#lN 6!9ngT}BO"~VRd؉~)d/})Zϩ^?ϧ3̐⧧iFѦY\}d --Kx[L)9c%=lkBLT؉D[dBXY6uqWeo}*3_4Jfǻ,Bo__}q]{=…u1^Kqʫ"T@B߈ӨqyF(kJF ,o6@n؇4akɫ_ɳ?Kp)=xwxy{H.CJD+C?0Kxin? / --ƶeEh~Akԩ))줤~p+٧EcXR --?[ڕ}Xׂ߻O_ȡ?П4e,wKA?sHeJg*>UQcpJA_ ~¾,!Bj8YzGuj*L$fcwZ˔?md --I}~k?}m/Q;o 6Пg~-l~D#†Š]ˊ[21?Y'11)I k` ~iY9YVߛҡۊ;,/CRVW.-Ц$*O;o-֯Y`Lӻ*w_2zD?cOl`IJr k ctMO -է1 --ykgF:H --fFp*,+Aͭp#QK;)e2c_c:K]8dwc;â:qDMTך웠/T --)PU0Ua b, `~v V, JIhu>UM91*rtv%hʳUe&c>]J --;q]7oBZ1؟8ᯌO!PIss_ -- ?]d3߫ҀAC`֬ߴe} W$$s2L/]uԷ>L&% %K}R $ Qc@ØLӘ'~ W]r r_` ?7'KT vf Nj#Nﴇ>RG m}F(4f+ѷgVa[-,S./1_JcchB}5~]NX3`n߹g?wku5Ey]ZjR22{vnU9g̩EІ 2h`~B/_ |BB~2t~O||ָq]{=W2 y0H5u0Gxke8§6RXTU --תAp c`$ʘXDU2}feeO\#J~E3*aڤd?7Gƾ}*}wɾw gCE]8 藵tT_'PQчЇajЯ/)2IW,!ďVDEFFЉRqIɩ4`?h**-؇´ܢ >16UǪo3aQ7]``[+OdehS`W#BV50כ؟!ч'}}9VNW3yЇ;c0]ɀ^޾v9p8RRV_TzE#|%m+q^K wro`ՕHh&2#MCGbQgFtrl9,\JtOO⟹}`$7c] Bdb}G:-A6|#GѢM{oǏ{)$U+*D$JY19UIaȈАаOφ%؇N}1e?|$a*JLl=jB"1X[6]{Οe0.+}rt ~~&\᯺ gFBSB%~k7,}ppH"F)CcIWb~Q?vԷ>{%>N%~Yi GguՕfIM]  --7@\\h5Z:%XЬ @v* wAt(25sι{ 8@JB??I$8c"_~V`tG~7ˇ%48Iχ~0g"f o͜>u --Mbu1GG<:&L딩ӡ!s/CS*Ĵà^JE\iI0aɉZh:*(:g --K+/bٯobƌ[Ӆô10Օgs2S50 --?y/>m}Uk%f 晚ϙm8KWu}_(?_=g2$hfa~-۶.LB$9STZ^YS{nakTT}!!bڿ@(/-.Hf-;"XDH}y݇ ^>c酔~EN?%/ױ_ޟ RǏ?g _џ@7Xl9GíC_.,G BO.(TBE(egi$?*2B'<\DC(K --0h>l"b JJ>}%D#!T_{a?>& QٟїW_C ?яO` #NhkKXkT|a!!tBBBx YiRVoI%dTjJ\:_V\ >66+`V/a-Mp>//;$>̟ 5C761;"oA@W ,dda>`gWS,E#^-Rs}A!g^K݆۸}y٧}I&B!!XEH"~5whԯ>-A?٧,9e?VG  &M: 74o{HяφЧxrBJSчNulqA~nVf:3?:*R -- T RQ\_~vCS3|:R_ K*/->{:6>:"TqhoreK,͡}___w_Y'EXW;EO2," 0z QSP_| --J"D`~RG ~dbrJT@Kʄه --.~c32kˎuEw;$ׯq[ [Z`0627m?CC 3 Kg+֬A%8zL&/~9TRn^ --EBEyl$6^a!A?: p_FS3Xٿt~|sK+|{QeJ`7>L3*clQ~NfZ6Nyؑ0w9ìZ[-0uP~Q~agE xG?8?rӞJ,mb6},^D}~ljjH2F cQ@._ --*gfIk7nݾɄA'k_ }x҈0>di#oj2(<)f$M }+F}0B5_; B6iZHD>sTo\e --~!$mW*9T^ͺzN_R1{(P%e LW.g --3S5jUH`'[?`ú5WX[-]|!sfK#o'`39 sx7_djÚu>h+l --Pi2)K (eP?#]UVl:_VR}9E@?DEc" +Cu+hX/^z~&NX}{d}g>؏F}2.Mbgjy3M#y?N@7%'JПGӖmqP }wя.?q6&G˵5*!0[r/Oϓ'OO/M鱗_vV}cW Q@e_p1:٬b4yI(UH>Ubfնіoj򶱑>~?'$>5_4m]_;w1J>*u&953;Dx!J }\C~񪯯\}\ ߼g&kcՑXz˽ ^^F`(mRJ*/}y-'G>(CTNk0kDȾwsuqoF!I7O'1GC}; --'GcdD>o>o賿\cf D,ExL27Чd&n8Tݤ跷^nj))qW#+5=#>K>1>PGWߐk-,m7#^8KJgfO>D^03Ix?O>P~M`g9tcЏa.äPI)Ȏx?d&_xٲJܮ6`:5?P槱Ύ=Sڱe_ƲA!ob%e1e?pU̲-ԧ迫@O5)} I)i,e֗?~f(;wt!M G  CD"!(D* FK;Wp Xs;UtSi --v>~F~/_w#>!|`>Uk֭r-ή~RhDT>^J˙KW'0F'jn7q[vAR,Oߟ`FC!%P#;#ebȊ;xJgWwٰA>x8z؇#e?'된9z9;~ɆePOgaahߞ`-GϢklǟvPVE X#]@'xBy) %lVp¤H,~aWR2c'eg΁60UN쳱cCtU{A)U pu`os)obldkjPg'33|*>S| M4_͇7wF;{m.n~=@d0ji=fSgHP>&`DoߺAo(+)*;oo"3`MC9"\I#' JΝohΰ_C\{>ha}1;/dONJQJ_ne}-i --ߟ`砯3/^lu []=|8ad#P$;VYSpҪ;~f}.s7߬`]Ғ`BE|Ǜogqa{쿁3F܏?M(l_uВ*7A S0$wC4TVA:q,k --k(4_$n`@H؏O@p3s --J*[oQSlLOHA <=W;.e?q'T, r||{6zk|8ã *Dwo~C/+˘JNRM>&7(_(bY9e%k/%M>,ރM`Ә+`wE#owWv6Vr|C %1KF]Y --= XW]Y^zXVweba>W]ƇO'&y^._o/#jG~l`5|]=|3y;lsqu񅒰h&A.\W{g}`FQOTz|{/\8Z > lt`ryxEbwO?|$;$Y }MgKZk;8mw<c ~kBHS8+m-MkҒ"-7;0Ȇ#B*>^^?Ϙ?) 2@7Yɪ!&t_>DID?oN[I[YZ[#w ~_AQgMD5(UP. , --}((܂ B`Z'b-5ͺ7n;:I|Bqڊ@+W7nv拾ęƆ6905Tχ_ %1R=gY˙N&;|>3Y9*jM s7اaH*oZ#_BWS~{t۷mH/TSY̱??a֘?SCDij37nFmn;@?@K."׾lUwX>y<M .ܙK'<48wu;9:DD"G';-?ZG'RtR+M-Mnvsĩ?I8 @@g?!x05|w89 (6oBKY#RyHz\7_*>#3_{r2_ߴȘB_`7 xwDq~P߾C,C>w@hƺ%y9iTȇ{с#%;%PHX ؞4Ҳ* pa,6 _Or%nbdl`S&O?;Xã?i3fhO/\^onno2dWqw&E{w8ۀ*: --f"jqRC}Z:åⲵ9:9ؚ'Sҳ˔^rSnσl~=6. bRi(6vyzR-wl܇]?ɿPiGr#,uVro31aɧw77$ (T-9U}cX~HBߨ@CPY\E [풞NO;[gMFQP}Rh+k𾵴_Bgw__[Ϧ/s`dDhU,Z[kV,PS^4?cQW"6o51Įo_@?ЏM:ЯjG># m-Z] B --̴,Y --}.V9@|5-W˃6$e/,)?[lq 4>~q!=>^}5\Zիt1 ~H?k=/]Z|s >ǔO$ =OXŲX{e45\*Pt0k%şfO{NY?rјXܣsq/76.ubwGv}ܿ{k89&{I\DBV }- UEgΘ6ubm. SC%_h*c Ig@=/σ,{?&ߕڂ&pq.7ys --}?ܥ --<-Gݰ7D9W76ddU7U})F}oo݂׃_Ck1UU~X~UTZDJ|5k ͷ lE,񽕁 SaO0ROFZ\Tz>lVzJbcz;mHp@y<>N!F]B$}N>ζ &D=d۪ا[89cap  pu-L}U+}u%R?RGc1291ks}hֲV_YN.^!xb@_?^U/W̲YnNVӧd w ͷyV;hYXXZB{,N]B?}P+j@vPV }ThDa!:al ֭kjȿlG&ϑJO:ͷV̅~H؞}LHr1<#T{o(^d%:q=vB0MK*q --TܨyEep`ڤýf49+˱(]B|<\}c#ϖ2?7c`)'M$qwFk|OOAg! -QQ\Jddlj;xx{}02%=l\TB}߼x8Anvb675(+-2} PGLi[X6?hwľCG%pW5^km]ak }0|$3rS8)<,%n.N}pp#? --_[ WG?Z --$>eF~vԺIЗKجsKgcoYzg7_,+)L=HA{㦋h񀚛27߁Ӛ+P}b9V>ݼ ˾abóT@'Ɵoh'YoıddL)ΥXB  9a{`'XgC?}4O<~OC󵡮&"8|ɉ1bN̮0W^3UqfF}_'t4t4*K˾* ( ** -- -- -- --c2fʸMYNV*V,SɏnQgtNyI<=[R1HalTJ5{JZb6(42&>)5}[.>񖶎T싷IۏnÌ}}hGFi;z --Lbj /[d??̣M)zݑ_AB7JY}f)ksԯ,-B4޺eبp¦ УJӖq?*&~u y-ɿg;'}|*Gh.7{ƴ"#G :d[o@? H!oߵWerĄfz,4S_ij,Yb"}prTbmUX?6j=I[25M,XeuCG6v]d>gzE`J --h}*Jfٟ;kTq 4 Z_G}=EgcSgїYlVz G; Kʪף7?GƝo߼C\Wg{k ō5}FX*%Ȱ` --.΂_ --KLf'->WWeﭩk8??'>qTsц5Օe|QMU)hVfRoR/^ďK8+|OVkuF 0}!a GO8km,鿼^=ϣEկس{gԤ舐@D}+5({Lx0=ƃ~Phex}'Œqؿ<E1ݜbpG.20a`V\ _cF>lD߆^_ >rG¤g͝e+M2WD<&oB*.h;~ ßc}~ _3:Oji:J0[ɯ$ֈ -}Ev*]fR *=f --#@L~AN=^sG?ƾAhU}TZ\3RRB\tTxhzrc p$FF+WX-eг/_!/H,d"v.ˋ_xYX\ZNBp=r --_ꇾn\wu?R_[]@f$Q,C_`"9= *?P:C±+>cUϣ<:O_!uホG/>] jU lRa!ϙ5}$Q"|[G?A#L5G@BT;v'âb7oQP\Vojik?ѿpBwWqH=z` --WnS"2kxH` Q||Ĕ= V*ak`HD4+#;UߗOc҅sg p]- --mʥnJL4p~b(]J&o~066cʐV|[; ̏MHܔЊֺÍNw_G_-(P*F2Q --MX*:V"^>8,2:'RZp!aYnǑt(W`KgCH},-.ȧG}/NjxE ϙ9}ʤ _}1Onj1|Xױ[w}PB}?sμ0ZXZ휀㺀@I@o%p/G:suC37]ٙH#ÂXZ?NfR*# ITwrq[R3vU?H귿4ϟ:vƆzIU{0sQ-)ɉ@ZoOw7WFm"-M|lU3U|W7wOﵾ@n~|brʖlaWuA!s }ڡw0kgot _EQ_ú mO(9O!WRIvsq#8u.Kb_h7u5`,=5)^0';?oiS&~GI_7 13ha#Ff3qʴ9sKk;'C#̜Ҋ ~Gs"?f{CzıF}eִ䍱"B~k5j3dlr)%S#cS AwuoKLMھ>|P I FgґC}//'kk䍆# ;klD?ܒgj ߘ9}kVNjIY^&ѦSm,^:O?R/~OWGk:_\99>:"d-T.5.'cofѥk<}|C£b⓰3}Iؘ`cxZw%Y[gg돗wa د(-ڕD_ٗX%cNz;sg/m*v QT= % tB0HA@lly7Wƽu=sv{Āk[q }#43#}{t_fJ+沿 y>A\J --Olu5021wtq --r#T!i\ 6>:;ï{7H'GFŰ9ɩi*KEU:yS+~.N]~}iZTVRF\IwupLi4Q :N\< dH6%/XF]z}o"7^gs~ɮy]M%~y8Yu۶|iZ/G-Wک֬]q;tv;Oзstq dFsaݲBfm>w@?PqDO(}YMLP‰ --e|=|C䘙[Ѐ}[{-/*IdVSOU]iȩ.E[KcVR)*v_0D?7x`旉*%Ɩ6EWwOੑ37Uyɉ(V0R'ibvX>} F+2&. +*~Ww>A[b.G?~6ot_C}gUUjoXY1h1@_/7;kKC ݭb --#Pzd>76FV/onTbB^rmzA[( Ғb#ØA~Nv6A555'}'W7Oo@zpXD4;[P\Z.[;{&%.0JwoN#Ãp!>?+,2x9;Z:>}`CK/y}6ldϾؾszPÞ>dBAZЌ68<:[, -ι?} XOx{2dЩ7 ToVZY\NO&@?oO }U41El쨯GI-THUg?B5,Np;ۚⲒ`6zqcVM ݵsmF`*}d\_<_A _صg᣶ǜ{CXQl@?3L,64u*{} @{pS36}2bo?>VPЗKsS9 舰`zqG-|IF#@;zxqI*P=Sا#lL} 1/sl@Ie ܯ# Ņ| ~ɏ(Lg&3NćW/,淴+'NMCgnP[*I*J >?$ClGYaaa?{gI'64hx&+o_,׫PԗJ*8aJEH} --}}r Tjjw/ŠKLedEU520ʼn}._GI`~w9ݹ5s95УT5p!ady:8>GLr{-6:,E@=; EzQzg]euiR좢(EYgԙ$we&> --Q'avo>hΞ1}I/a2{Yp<'N9 ˋVm8x~ B{C3]OsyﮦeE|iVz*fL!Yʂf>tuu=ô`!bc:_ebɒ&2$`f(}6V>Q Q0h{'W56GŊS$9yX}=vp[aחN=/طP$ -- ~~E L5)`c>dS|5z 2s4uqqRjFv^aQYE b߁VK)=y9FпpSX + --eI舐@?_dSdnBOkkiijjjiiS/7wv_v^3Bq/oZ!оzޡE_f=UW T^~/آOQQBa ?5-_/)+Vq, );w{٫WNz+YdqLD --S<>6UolBŝ#JLI+Rc[={/4LإgOkm9wWc}MEiQa^6ZLiU.7}}]m 36ˉ`(>ewZBS/F3nDl5 -]}C p }6}Qt(kSVי4ZtVqTyjʞyPc/ЯZ(S2%QZl9z"MM uu M#YwrEP_:T==ai[ޟ];ڏ>4} --"ş!!xH$>xx?+'*_(*d~kBDaFȐ"迵P?-Y,6˗ Yиj RiX S,3]asZaBQB2jLZancd>K^Ⱦ]8l(UH7'M>ޫ]lVG76P?nJ?%G*G_CП.2>y; g-~C] R K28Mn%i|Ɩ:+Чg; 3WӟXWC'r --J_~}m @FA?g'&&$>=OMٹ2Aia|.pNO1I>OCPWB$0C4 ysH|DE1#дs? )пyx@obKH-L.ÔW+,7wr}B#6pʋ~]{8MQv>N}u;;NAhBfÃ}ׯ͒]nF__AQeik-٧Pnh" d$(HnFAI --s$G%6QZDA "a)ajefvi;P*S%U*Gn}4؊xOǩЗW8p_i ݧDǝxJA *0yl?쏿s|d~p1~k3] qQ?OINN~$%%',$b|ͭ`~'`ɩ陗sX7+:@o#A}&7:y8t}rbid+B(i38eBs1 țq )Y~i>!) kohKٸtjbltڻy~lW/3}; =jT!w&$df ?p߄ߌB_@h}}r --p\Y9wb_zЏON+,jlntht(?5w/w3ࠀ /7v6M t!TЗ IJJ#)ICA+MWRՃ D'r<}c]%_xjbv2OПrHO"/+D7[;8]bSPKGi1_/.ROï16Njk*گ@d --,> ?/+G澆ΉL,88 دg%4~9;_ZcO#$m %y}v6fF'U7}R4qѽ1|bӆu'RwڽWT\RjCʀ(Ξt%$<[PRQ]A?26DϝaS_Oq!Я(x3&*0 gS't55T  IH4:,<74G/"Y#>| {+nue'aXpP~X99wQ7ZZsq|ĒS#G`A )=E&$ee _9Lه'GmM 5YiI+.x\8w\ped%;wl&#-|o眿qէc --;1tiYT5u!%,ϜuvxʵțX\^UǎG0M03ެF/C@DOv}M5B?'+=9!.&24(URAʪjG742w<4":6>9-_XR~??J%x4~??;3=9[kʋd7#îAy:;0kKۅ`K*7c.s1 䯒kne%f۱^=>Ir,]+FOҗ??ލJ sҒbc"B\fzVƆGU!G拊ݻWDDDO'5J34]A`B:zUlji?, --_ܟ?#oif76P#ҒS/-++GS7465 9D >O"g[x }rQ/?~O~V?* zǏi iТK}Z5cںz\ݽ|!B#o'f{u}C8ք}jIzOu>՞[ʊs2Sb"B]lO+?lᏥI?t\ZtzI "d?+g`q)U?'}vW --s>ܪoi__KDY~Ŀq_Cr3#WRki7pܽ෇h3".$q?VM --Ѡ*/wG{LB+SKCO3465] u!2:6>)%uWfVNAգ>8E81Ѯ7_e-+.@H۞ |Vx:;RUi Rb?yR3k/?ƂCgyѼGQZ[050GJKK@S`?>O|[mwHBw }!rM ZԷu4TBϘNv --YZ:GYEMšc_>2:&>1%5=B! >`=ݝZ}XgK=/Z|LT 5>^NgtT9Y) >O? >Qd@_џl%5M5]=qs\b{a?Y --c㥺-;{AHB2D`^NV̇ AU+)PzpsTSQ&쎌,Obrp1=}|i]$x#3O?A{'~C~c3?3_8FV}gF_ɨI75;-3xdg502UwprY|/0t}DtL\brj:4Z._cqddN{nkW.XqLGf)q7n \s˒Ŷpф |}i>oCYZ>lk3+[~66?7{Ϯ-"ׇ]r9|-2Ϝ.s>M~d}¾?ϱ5#>M}}Q1qIiD_ --BU mU!#7mI3؉hn%? D( DYɉq10D~} Lu穫U #OvGJJpG/7ȄGrVѓgcJO>'-,A`?TUUMLȿݎ'? '~#US?6 --f71W^N --Nur --o8m%K<!aQH؛_A/aodǰO)aZӰ?L߱mk,nlnΎ -v¾(}ac8N}}H} )%$ey:z&f6ή0Dఈحvg9PPxsj(mt~g/."Hߑ将C||@_K?Sq4Ұ8I؇ۍ<2\nC6o&T_?y}+P}tcO55?%:?||B=|/X!|:IAgY_ o#WoAݨzL*`K+I\ST4`_M-m(^ޫoܼM?WTՌۮM7_pTт9Yiۓ`pQ=>t𝓒 D㾱gXiO KaVR5+#̐\օG'mO9p܅J2>M7ڻ],o)#~kKz~)!B}/Kq@6G3_dcԟ-]fVr-ϥWVO9sM'?ΓOjk%C_ihf>GcO׍Pq<|Q?S_yrdtezt! M9:}~G唯_cZ*G(被n.(S\tW:FAsX8[RfZޞ糿?@d?.aŲ`5am-M>,UW! -- r>Fdokz --C]- r??EFZRB}¾?8}D_?ILBRzhbH !+W[npru  ܹ;)%cgΕ]ZUCoy'?RDDLD?aWLdض -n,FUysaqf0#IOcoۀ3@"T˛cXw/6~.A~-:_ԡP>F~knCP/AsE~~V}wPף.;`tѝ>2m|\Y5`_tJ`  gf?QP S>} OƆoTa⦥$i:k˕Pj*s=YJRBa_TT |%&aUQ7^nnfzG-1S3*>WzFvzG E'3L./v_p";+I_Z /7 j8HcE -=#SPхQ?1Ql̫?O6^={s}O GG 59O --10Xĸ0T75PQ\f_g+ӦΑ*ihlCgAg d}q{g𨏻:;y)ո%ŧSwDo 5pTWQdo8RlOA}D_BJCL-gkphxt\}2N^V}пV@1W? + tD?.&",$wW_ --E$Їga_pf [KܒQ?8,*_ P1,>??CA#ܣC#f>>A~w~~?UPOKՇf^_J$,?a_YMطE=BB)~}_>Y߻7^}ʥ gNegeط7!.:|{&gVPkzڰK?vRbDqG8' "})\*(-341[eecgqvCG8Yt+׿Y{Z{H! w oA8'مEP_GKCMY?g6A6b $[9{sDp>'$ '?ߍ{R-L'G{υXB_P__W 5˨OwʀE%iN+?o"`_؇]nop$dawf -- -a/?{G|O|lԎm~^mmVE;<}dGf>O%b%U -]( ^~vD|#r N9LMh_24]{̰ _3SА?oDPE 3gLeCf9,/XɩW? /~W ?4 ~_ y!~&?|h|*>s$|?x~=_I:ĩ`KTWVXLKWR --ٟ: Wn.g`̲7 e(y#n=tZ}slPmLKIڽ32,$wx+ t4T`ue>wR,?>D}qZP J*:88 ܶEܝv3._ 7ё^vb~z8,X7_ΡdL\H3[3i_P%Wӄ3~!P4_ ף>}>q P4I?dAGGD||ZH>/3MwW76ߨ,/-9%'FΨ/?$/_,txٻ*eþ2*h6d;)__8atz?e wnTU\.9+&"4x'uk,͗h%g#ð8#=B'}L}-QDL-֬]gkphD̮̣9y.WT465 O22~GXC ,zښJ --}Y}&ai?A-g,9ޡ:~PhdlB2~iyeuFFec3{%O6~7G)?<䳙?c,`{ϩZ[:>'Gԇ`早1Z-Se@/U}]cS3`z֑T8oG>1N _ߪVqT^vVƁ䄸Aްvk,LA-< yt}dǶ=}>Ti8786j &fl6nw߁켓E80תבyinwtv=qcp$(%J(*]t/EH!T(*%(*S; 㲵%m! mF53f:'>|$WW͗*%+Pf=Q\qa#~QPo9HSxeswd>65t ,b ~;؇ q}'&Ef|nXꕚƥgN&}r[ ͍ Q#Kxe 22?@3LȰ06 --p#ÉhYleO@Hxdtl]:r,taqIĥwǰʠߛ=nsua! t :T\_y8G6ľAhPAQt@>Kke.n"6lښ@fvO J_°\kh"YAta( }1IWRA` t 1"4)BzҘ1"{W_kh2 --bߕ UuPPsT/>~b?џo/ =(>%KQ%~]~mWUDy >'|&ܹ:j --,zƦ3No>W ;߃ON榆:\ eO"3Ci &k;_Pܳ7-# ϞtФPAЗP*C^O }/}-}D}|ތEeOCGMQ ْ@?UP\ZQUM-Qn.KFKq_,T~ڏ柄{Sb6'IK~U1A~^n.D}jʠTy1d{ [[}\a(nSRƲ^o+ :>ns۝˗++`NHۻggׅyZh{lnb47y(nI'@/yT}>ij /u\a \6*fSRrTϕW~yr-fs˝6oz|L$Dߓ N664 'p ! nXW k@w}P3?#?~ۧ{>_|L/NoԿXG//-3RY}ܜAEOڮď e-.s+!ZںF2FEnM`[wd_>wnEٿ奟9}'SSvض9&j@_/l/436T'ia_FF/2"G&M-AYU}<]cV6V{GFmߕ#rO).-/k\Qxv[{C&샔> k4$;~(EзZ̡?GUy}RmC'/@"K[Gg7ONԌlP_xKHoS}Ÿ~,_||?H2_З~_,/)E7GG"sc ,U-Ls!5=A$s{ u(q?} WwBB7߸zt#O޵=.6:2<$e3#8u檫6~@Ѥ [>Q͛%Л>4 Kk{'7a6mMHLw 3;䧅E%e %~CagՀ_~7E2"TJBD_W[KW˱y,ݗQ @QIցo 8:ћQk~ 1'g{(9 >O||^g#WS^wH ~ǽ;D+_3pz:;uP=þA t/MٿwM d./)a?|}3LpUOClzu, --]~xHIZFy=_QUkhjnŃЇ^R׽}w}sS~OA?fâ/ðO^~UGw}9rBԿsSr0꿕"~0싺~N~/v_{>'䋘_a'SV~Yg~VT} X^?W]F؟0In2y oim_-s|[nm"GyMу675N_;q4+#m[6_jrGۥKikjRz@ٗ)CGr菃IQPW[HoQ1؝~kXNk\ٶ\H("ҁHBQ(**qqNXJ(II(C#{ fs?Z]}1}is?As9y !w+jj.@J>7!Ut2"ЧwcV@CcQɠM? t --U~#>p8;q_@~o43ܣ>_@>3;YcC=QV!x*:i --WŶ217^C>C(tcbq) Dzo'y Wn_^Kٯ[zfᵼΞI=m՞.Nh+O5TW=RIq`ñ/v:]}>\@3-.vrq_Ӻ[}w 8r<:6/_I>4Oiᐊ~)A務R@П;^SsEP)I1Cu:nΎ --fΘfh0Qw85U#o>?E>a_}N8s+82F 22q#3sn+lپsGGğNI;uJ~AQ2-% ǧ=$ /IGE Q#ȋחȲsT_YeQ&oϪ7ppxtlbrzfvn>_?Siȗw_ ~V~~b?_ڡ>+~ #M;7S+5UJn@(Tmzy8̳ u4TU --e(t@??cUDdae/~} Abc;˲Q+AD4 !Mgϝgcl --56C< <qlO>> DПO3䣯8CD+ݙto K>X+<{' GiD%ej?&~K/O.p?ϊ6©_p5ب v6VfS &hC#x忱3W4^d؇F+cߡel`aQ}ܤۯ^5Օ%r/d&':|?o^uE6PkScrZa V8ʾ_گpwAe(p''?` $DihUuMm=}ĝx,ZsMvA'%zBvNY5AN;ڍt qDԕf3/TCQ}u-S,l9E&${SIQS Srs⋑Y̗>CAPLBLdXС{tX $Tdѫ/B2 --ٷd?$<}|xC{X[SYx-/'{""4nmU.N.5c&|j`_vyWA|c_xv=Hvȇڸ'A:fZXZ/\ظw׾؄s޼}A_ @r9P@O= --V:5|RZ!onw\o~P?2& &_wp_~ wDy_`!MH_]mMUy"T?#L|Ldh Ks醓&h#wlyAf q7n&76] [O[M/QWݻ{}>=%)>&xHࡀ}|^hokmi>dڔIaͩQQ1l^~rj'>O@ { ZM?kl c_~@)2cWzʡJƨkLd8r3~`hdL T:p3 /})gg玐y_*|iTW{z嬌Ԥwnٰz"PTC;yԎnݙ(3Aʰ=~~ryz{~e:7wg_oɟ+?W++)~^HK>>v;޼a׊lϝmfl44[i8e_ ioáїSzc:@8+=V]S[O馳̳[k͆͐ G"!iYr>1 --v#=yWWON:)U[A{2a>4\r4Q}SP۪?q2>)5#ru8t//?C?;K@o_o>9QGQ;7gNF_dl8F~oF}AEs_ðFƦ,)ۡ<+y76F߼a+_] qjn (aG۶ij_Q={\s%0H$*TVE}RB!SR%[}վN%QmJ$Q!R`|{~oI9i<΄?`kefl^Cu*2b j I> wYI@2hY2\ 8 e܅4%W!Ll BנK"kWJhC(;y/ˆt AhOie?TFS+LOILܾzwybw(IIYs>,9A/sp n _ujIanFjBtA{p߲POK]YI/&*"Շ?r0'#%!GH&X}eKCOP-~~G{+<{ՕWK --r2/%GG C+wVG;  ښjJK$Ο؟$w9 :m|::iӁ9 EK +֪B( ͭtڳ``H3P"r.kmew ZA8|q[Q3P ."x/`>Sp.Чg/G/ ? ?_Lkhbp ?r脔’;-maO7mw} --~J~<={4Ljt?Q ]z0 '=%> --xg@WSm*9i@ݔɓ@ 8RFv>~5lys+b>^salw=I#8vZq,/<51phxyo676[ --X.#4 Xobax|'︪Uo~;g.\R2(*Z +[g;} #.&PV~fM=nFa> }Zݏ: F;1x?@'@rX}x/-'jsρ@~T|JzNAqYEeu}#]}JOcB}ώP%>GbF{_}N}@A;WW]Y~ ;=9.*ԱC~X}{ c fn"nC"ġʮXVm[=w/$,ldt\ҥLhWQhhjik𰫇ldg}$Dh'ЇL~0 B>1qyԟ5g.W\NGc>~qiER>4[Ks?;#П92jx yOM n\+-JKÂ|zm͍+dBL)K =xNϰsD{3ُg]o֠Uom?bÈ'=m`=]߮ZZT.).e&kscCT*),ZH|Uqf^,ٗdcߘžPHIX4(x$U<ڶ_ ={ --Ngǽ۵p񠆗 ~h!?\ľu4`d g&cउd*a'@N'ҰLN^q%eێ>~C/!%=+}rG1xE_D?D8 PcX }v'#,/eЭqj׀aaEEEE2( ( --@@@rNs$ QDtʸ8;;:Δ{nu*WD|4Xb¢R2r K+k:GOMSM^->0^~g3_2Dæ ?~@~IaNƵ(P) c:H}1HMs(/]c>>w/x\ "_7?߇.yt 7p3~%oldp{c]Md@κ9;Zh): WRBTn5:>x --~氿.ڡ> G?\ P P d4 M-m\=ãPTT56v@Od>R~0oG}R71:<؏|%Ey)|!5C=cӢODAqRR_QUS瘉é3^~TjL?F9/>0?0/vw*q%swv@Km,u4THSq_4nj,mN8aQq)yE%7nj'؇~ׯg߾ZCAob my] 7aLKz%OwW'&zrRB[6srN'']gn_AZq1l@srqo.(OZ;k`bE}QqI9PttuA#ɳT{ȓ0 --~FJR\Txpў 0>1W2W}a]R2U5t-lO{\ ON)(zؽ(<9P,->0U=E?@_/NK ?nnMPڰۮl4 ѲΈ} ,y)Ea;{GH?yVW-?>:tw|mU g\NYCVQ<(o.1|[89DNZWoH\J U7('*!we#̬lO @IWy0^7Ң|~txp ѷ23>/[6W / ,WP72?տ qO/MљO޿Xo҇N]ˋҒb#@ܜNXsH --aavjْ[f})V}hh~N~QzbZBLDsnVfF:{%%D!κ9+fJ?R@>^~d)ijwr;{ _DLµ<(Ɩ6{MN{+C!=B ܈/HMJM~YA+ZwͱFB{32>v"_\^]wԇuμl/G~{aђ>591:4TWUV|YWG;k3C]-`Sh;fP j%I8U?}5ľ1b ؿ쇄G'~]csk=I;&}`XW]QR = ---oij$/'- cwfNkYWwB; --Y^VU>']PDliYyEZ&Ot0{aCtÆ c1?FqDأA, xwuu5L>(Ab}I-w gaabZ?C.khfmzϕԬⲪщ)hXP}C4RW Igw:TUG{/Ў+POg{K㍪Ң̔Ę]L t+)`W95͐}Vj }e5 m̾+SP\ZY;42NzW$1yz=|71|fÍqQaWwq9-3zF?Jb)l{ ٟmߒ;G^gZ쌔@? N739pnDz~7>Խ2X>)a^.m,LM 멫*%D֮Y --~U],p?H}QqIYyE5 -]# 6|S7C 8oL[/T᣼Oay[*#?W_{ZE)X?=9>:9p1;k 6X_Gsʶ-r2 QpUg>fOײ6S?|hW -- -- ؓ^cm=#|'p酆G'e+vDI?;4`[8p;WTv2gR7?LK:<$甫š4w!e6n\|1P.M9Ps_ą54h|q9ťƦ{Q'؇OWɰ?#zui0/+-)t#7++oD/['qs? W"b --Jwf~!S3s Kpͭ;qtFgdQ {=4#Cd&8Gu3j>sh/@^+a R>,l\O@ dV\YS> <%an3o4 -w@x:[41ܹ]iF1+@aSþbb_m} ,|}_s#.%fVPowqٟS>?>v7+\.!@oocifjbonuU%{Rp{+|xye<[:2Pj֭C54uAyk'aE$de׫C>7 }FIYxc~<Ѓ7/+.̈́Ǒc[YMM u<8> =?1i~X@*mߩc`r9ʁuw[ +^zԟt~cO}zn;ZnW]+ȥ'E;{帝aS}赪۶IKR`ܿMFa_@/N --541]=|GD'eU\U[OJC'? F/_@ܣViwcvl&6-r2 cn?}`6dU.WVG[!s{SgyE@-mdѢ8hN^=0&^|tDXp/x &B_a,~9Dd#PNLBZn6՝{ML[wyx֍KӒb#8y3Sc=m۶lAqkM>>O?|rj_<@ HB,}GoY]Y/!&*F˩,DS767a'ݬ]}7(}2e W߭g W9z줇7$adlRZv~7nilnDS_r 3e??QOW{ksCmu啲⼬Ę ?/wgG[K6HWk8mv%2v?9rc_ƾ~S3K' ,2j_VQf)4?rq5W/XjnV"r3Sc.zy8L 0TںYv*%u}ު?D #lI`5M\R: --ôgi2"yC=wLп"@כhJp wn --ӓb"Ar?Sn}^GSC@&˦ }㌣ieVWTQ04b-mݽB#bS&յ ]=<ރC3ԟ?Cke&Dv;`c>`WCMYATSi𭩵jʋqaE]AArjrP@%ITrA@P$QFQѱҋ=馇AڽO8~yx6nB%[XEvN~d4}@@ieM4I~t+}*3اCY`DÀ@wg[KcmeYz).&*s)> UòҒOw̋YssD}>,MZ>~غ$V<um] k{gwo`\9tw ͭ]g{܍ ۡVᝇzCΚpx>tԇoAP&s:Q#s+{ߠQ iy5 ͠QT3>u?ꓴC}~~;=meEYiI1a!>v43C=mP$D|hy@}x ؖE%HSQ:rطwrG HyAD?a˅׋=c8@ρ}``d]p --+J --rҒ`o0@ "hD鬹ρ>dȭ9$^،f /(w3s --Jʫþ NLNDƿ}%}Ƒ뮭*+rG~rs45BU Q̇y7?lwh$zf4;gwȘܢΞ;LH dݏ?K{T_H:c#CMuU9#NliZjJi%ډqTݰT}Η RLL-!yQ1~ZⲪF~STc9ǜ%L,f'thˋ1%Ğ=s*- TS@ Pa95>kv&kd\rQqU =CSKwl|bjk-7:If1-_옻f4;=[]m͍uUexI;yR][]eiKΝ9y"AgYN}qH~Ff6^K)iY9Uu-m]0_^|5/R )^ĿζFLyW2R'x8XB d% |8\쓰WmOVγYRda&VvNۥgbk7xo4;}C_媗:“b.=7>۝6H/!PC߱{Rr0KG7/c'Ϝp)5jAieݵ]O>pYZWm˩Ľ&hfb]x[EIφtu0?('vY|盗O2o{"B} m]}c3389 gWGIÉi6ݯ&N%$<G(hmn()̅wBtDXh0C';+sc]-ued@lA~ pJod_7E}oA!}WRӄngFute;w]t&;\$Z7UHaudݝ7ZUf$Ɠb'ff k*ö%E۶|=#¿bw)l-l\=O=1%J~IEmc w>e^cYW#맢->K<&s:P=43G4$w k-sD}>,{3Y^>~$eɍ34]; Vq%~f_`ku-gƖYkf]Ԟ'yqT@9lix9'ՎF#_~M\xy@RP9jlnmz:*6!9=;[}ãgD}:SL_+1Kă{[g[s}uYQnvZR|LdXH2&)$ce+}>&:z&#؇V4` O0" {,l/@hv --2| JPUYQޕKq1Q'l-L 5JKq7`+*1&>iMy/ GD ^x+;'7r#/\L^ZYyjQ𺳡q|{N:Y3^BsRy@,AW }GC}q@DpD%)kY9{E'eU7u@}01=7?B]BH_K}J8@owGkS]UiaNĸSݝliZjJe%P];վcaE>EDAWR$[:z'N29=g8׽ F!II()E}ϒ%)iOJUQ%[68Hcs3sz?߾o3s'x$" ؍C$\ hCHR
Iq1"P=6op23*y-Ⱦ#sǸ9Hcž9 U_XD~ `ME][FrN;sbBϘc}:a5 ,wtQ}uNvXz4AjS"C(AЊH}IiXB*:&l7`lbj’jVå6x#'@?!Rs%9i) xm^`cnl6++LbPwӈgg?b1}%Uľ5( 708 tnaqYE5x --3h ޅ;UΞHCDz!m-M U֮YLB\TDeOKO"ԧNK0he5-]y#=M^Xr8=s~f"N͸US)C[[r/;>=?'#-Hb,G]af7Os --JU_ڎ:yG%vhȮ,+8'c>R_ԟG/0u #b b.IP@}}C k{ <~RjzFV^aIYe k@$E@// 7o4_px4olomnNWS8ŋs&k9Ѥ1&?Gi31h!a1TYYyEU }#3+;NEG2ABi^p 3zɞk`A%8 =}\t6:r<u|П%RAC1R#_.#ԇXۻn|<#; }mHː8U}B}7 ._`Te</׎@fԔdjb"`8&ˡ>^j>I ED^ohjac_Ph3nuLxCk `o[ j8N~v&Aw!쬠 --ҒKDf`h7. ƆQ}}$gT})ka.dEFAwlyU2$ d%BQ>>_5wp$|,D `ci --k)㢓n)S0Jԟň'1$#s޴u.}qINfA%/q`v>G\iCYƩ?&?.~`@?'^lu2.k:q,9!9`kifdK/);+?p%z$2ŗH[iw/ݡ&8 Կo3[f1>=:o\>WRp` ߝ7op01PYj%xϘw.φ؟B?-R)iYyľ˦GE()(*-ؿy`ѓo8 .PCp0DC| --U5 b d_rp}ޠ'pTL4vP}yE m}Lqfs$ߊ9}l\6;f<F !'g+a5 --b3$WZc`bھ7hobJzfb5;Ӄ; ZQcS@h_x֍:|b}]UYqAvF@O76kVJ.BN4vg#P('| --g}`:`qVwTA~tҊjV}妖VX\`8bmׯyXEٙIq1]p!"}C(Sr? ǪOCJT"7IT: ^8 ޴N: --8>I@i9#W^Hb56]<}C£b⏦edUC)yaJPơŏm@6~|\߹v][YZ.oOǶM.fFzZjJ --@@yS R#`tX&:cs+;vxC#@ r K*kX˿d db.,E v/==spgA2v-R(Q*Ң}_j=)eHҢI*JT~-W#Jeg=>_ { x>5UEJٗ=fɠ`f\JT8gx9Kx --9EeUh,741x}7lFIɩG)܆fZr{!7d!;Y=~]Ԅ!WYFROc"C=\,Ly*P}~+ Pȩ?We{HhЈmBEgZ._{>BŶ#fCP 2fvuܾ 5_*/9g֨{ksC=-  --fL+HTA`<>TPQYeEpA`2l06>)`zfvwA߼} ?.>!du">;?]5 g H%2l޸!ըXm>3I/#P}}cǍ窯V_kw)e-9gِv8k<^$|Ɖj*KَHMNGGGNvƆ4ťx @_Vvď@3).P341f ںsORJZfvɒڋ͗h ut=|)8: SH~Rxdع}=:ݾ5]8_YV\MNlgeflt|9K>x.`)_ohL`pr ZOd|x>P^USBBP=Ё-p>{!{wE>ޚtPW[ h\%.㱉FSa;?J3wt;8pW6g.$l5CiǕR-=8>QMXqʵЧwUyJ6b}P1-*Cʤ --ǥ$ǝT-Yn46svU$vjxɗ[~94/?3 \wo]imɞ*8~^nV.'gN͘ -- --;XS9UA &fklݼ|7l Y90۱s%JH{2NRk~'{PSYVRTuP --MaDV&Fi)aOFѨ t̾6s*]m2H1up1z=Y8WwYDu~AO/yo|`ÉCpP*/nFjs,W@'_/7g{5f,:v\}-t1G>?1r&`MɨXsUn^~A6n޾{Yp+mԋݸBԊ3L!ISXcT<Hea- ugKNM?/!v[tDhP2MX31Y&A`f GI?N|PmJ#3Kgw/2Bago9qLEu텦V ?IC|x>ca|@1/֢ O:@ =\p&3cC=e% #-$J̆y ՗PV[X9yGYyqMW]6{_YP{{v. G<{m8Ċ6_`c:_I+nU6XBC_#F --bG=*P4QXDbH?slu]CkQыB8Лo}?4?]b>}" ULKIڳkkTx:{kF:Z31$ GJa_>8q2!d_mni/0$lmӎ-(*)6<{)⣰@z-&yM4c+S ;b"C7';܉6wYRY@ړnh*jPSYV\JN۱%2,PO[ 0SQL%ˍŃ$!\e?o:蠣g'ut#)g -- E\ q?CJ1+:W/aJœéI >f&:ʊ'e_gϠ'U_AIg` wF„P/,>Sq<]mkҀ"}HߤqoHENjVɳ3)T側mzz?Ч:˧@_V,ĩU(C=Z9{a%&:r,Btֽ=dSpۺ/Hd>v\SY޾yӆ nN,SQ7$죨%%%K ƦvN~Rrj-8":t>~?ge"+W>E5v#H k+b z*]m-E ()p٧3VQ}!Xu"S9pHu --pVvNn^BP~au0p"c̘HZUdiWTҾ"uRJ%]R$/e?3su8gs?}~ќk ׽%\zVnSUXsshF.;۝t >BU$#UVR|5P>"#GѭU'N10st@=bEݸmĔ܂ⲪZ vT#CD~yX`4L K$c1a8 )U5FB{'oyA!a+b]{S!E[Z93 =$&:OO(Z̴lX*:r>.XEVf: d_N})^|ߝs'}E -8Sa6ܠ%QS#ьw` J*5jf60C@~ˡI)i9yťu Mx7o㄀WvngHW@=;7.45Ԟf:L . GCciI&rXS}q;GgwZo3z74X`YYUM}(%+\4ܸ, --r{/7Y?Yܱ %-0-ngcibwbHt%G>7TeXں --[gPhgmab9UNVf4ybbJb_^AIE bjh3͋H`b$Yɲʚ3gy;lρoOv --4)n\rxHKIܻ+v7kAݝq,!d(8~X*Çu#tOHu9'SXL-XF%gG --K+a$R|iU+pƢ35eXi!HnΎ3mM t)N5%8 @`//)`%i2RFGjXX9x,Y`jF񢒊3XExm<oN~_:U_<:}Շewn;]~0/W dokefb"bRbWt[{o^PHX"vԌ --*%Q --! ݉`F`._lnŭNCS*x6fF:S&^oA`'./qQCQpWi,Lk;n%QףYylQl$|w6ʑ{mdC銒₼T֍(%!<\-L,'(s+R@[cQM%1̬lܼX~s}h*?]w|e$=SgY=r(S?'젟cyO; j;m\4$h'0fmajˎ!I󯞨Ͽ^v °C١H1ɕPrպ[!I)ixťudH|=(}/hqhAxd!"9qׯ+ ^nFt/=mȾxN --)n he «0lrk`lNs \  I>c)n]r(?73-yD/_(0n䉀lgy+&G/}BQ؟+tv̚ sBʫrR:t>(HQQCDB"%brڛI͞ٶAc֘}?oBRϟs}.b! "ge`0 qk4"'5߷߄2K/G9^$mmc"EǎdO"o4ZmT("ٗBGS} aliLghjni@ AnjcKΞzP]/rXO]r2brtB}c͝=+wf(yK|W+>Ģɔi}4]=}pHdrZ֡E+0qYE;k'bAʨ'瓩o`v%im4]>W 7'#5)nMrw733Kk `dx\\D>c_B72wv#E\ضsԌy'.6]V/hvWc_^0]D,es$$FX5I8Sk1t2G$JeUϣ*QoLs?FڛbaʛR dS_}lO;)Co7ņJN3RiEmXM”{t8^Mʠ/dXlh:4Y:.wqZf&d\RjFN.j ڎ|ǝ!yAJOGϟ1 ?p~+0V\x} ;t׭ܜ-L ̜>ux5 웯F|2D革#5VDm= "Ed'>|@joQ_SYqT8jw$z|c}](JNRlc6~Mm u7RKwEu بywJ/z$;kMjl07'3{{$-60Csi>-Qh_}Chg:sv8Z.t֝ 9VX|aDKK>A>G0{yʥ*PD᬴@,*|CphkenbiNE/ `弌?lcTǩ.}=cֶ.K7G0:4ĸtsNy"!߄ .? صq. QVZ&b@ hJ%6V(J#m&cU8.$\.WP\>d>͓B ٴUwn>A" vw>~P:0n_]\xE# --hKm5L>NafCR8PBWը*&N<201GQ.X!<*zޔ,$QTu~/VO)G>-L@c޸v⅚ғGs2ScG^`:O_Vno] 3?vv.D=i`ck$ģ'TT7(~rGO:ɾ`oTIBfhocۨ 8:Dq[l"d,ts_OU)Vٍ+HϞ;lUlhn0#{7OvkL{^H GanqgJNSoO\۲)$8"41ПhP̣Gkl϶oge>OO/,'bH]ڪӧ --gHI [PE --|Uz/^(uD `723<#)i9Ps5n޺Ï+ /qƹDx=ygGeؗ Ԁ*-4L Bem0WT~2gJOCYz\kj;'x4XkS|VYiw lTAsVC|#k}i9Z$TܴK[nxcƪ+M-p5~k7GEIH9u8nVۀut֝{|&ɨ'㓩> ߀0k/^!q2S᭑a!A6/ښ _ʣ~G.a"92J)4l*Q;b+B|NWTV7dF/N$t2f5Ԕ\wGGm%lh!CI1^!muQ} P}5t_K|Vb􃇱J"L\!l^ }&8ˆړGlK ).䝝9t}P 3c]ڔ68L,~" u9*M$Mٺ]=}B"w'fbW\xڍf^dIN}U9xn+jS#̧xnvĸ]۶_~B3y:Mg.+? L5A pEGWF`pȦ-_.N=k7صvvf-(nQDX)ݕJJJ)%(RrXvmsssfǙ}3y?w'sHYEepPPC"όql҃{bDh7a4CZQ/3Rqw56U 5n$o/v+j6_\$wXvCUah6Rr˾hI}]L!ԑt&RZYbnWACOFVbjWs_U}BAG(Zܬĸ0c>lxm->QK7~'U3cp}3Kk{G]/=}`1GX._Mm/>#j=Wv:|}9RIfMץ%3v>ߞ}"U_s m3<'l,oCX$E6vw8U5hi>-J^^-{V񤢶Ѐ$Ж]_B_bv<:K*ItSGpJoనĔ܂bԙچ Z3E'z#SI}? _opW/5לdؖ1r_ ` --)+]\2Vp)~_xIY7ƍg[41=wE@#vKt@Gj¨ʎJeT#s46 --Kcք0|q<%J>%`!*md#ߢ#Fa՟nlja-T:?x.+woQ zZUu]ܝ{XUaK{^Iޠ8F5bqS^؎!З=m %6NsPq(/w@jd*Ӈ 0ytOb`E\#mMض#3'stSG")ը߃nT&B[޹‹_p0/;#59>:<$s --WgGRVézdÁ.R>~qoZaw 6x%Gki70/:.'taL8vLm4FT^`G:-3tFGB++ʎݕ\䲈&gaj"&~n$ϻcGb΁SOC`cs4vȖqg2 kѨڑ׮\:__[]yFq E-mǪ9iӧ"F #iwՖo>5gᡚ+fԛjhb> yJ%)0$<:>95#;cUg5^nީ!ѹ+ ^+՗ԇ?ak%WWSYsS㢠\ΟC:]_w5]&\o> --[H"8z,A؟i1nXxSP|qW֟Cʬ=Ha|2x~βokefbh0e>Cuꋢ6Lu5%V.HkQvWuɬVh&uUEyAZ[fZJR\4ߛK3gLJC^˚:@˩/2#7dJԤf68zjIaQq)49H_}FaJ5\yo)?pe;8륦'KKs2؈ ?5;͵&a2y1#G@z/5o} >} --11VqLKk{DžKH}A4hg/\zM|!?SWjc @#}KqXTVz=yK F輀f7ٗÓ߿~Tz4#4 {[勒rX! ՇJz/eg0jRlODVؗ[ ^Ci6f>5܁ --s`kt!թG?v)%&դ5^~R|M=O-G ]5,S{dyo— ^78v@a^vFjr|LxHΎs$Xp]]AO6F¾1t&fV6pE.n+ a[C?>5γ5޼sOgQ!)/' "-F/5ifE@O271?ZsxTZ#mX!#cʊFK 퇟tΩre?be2r --Z%vVQ5as$ךn.6hFu'tDG/֯K55)Dՙg`hb>W-{Td\*~w --_o(+uk).J'rx{rs!p{XWaCVU52=>M!99._)9RVQY] 7+ߟ!>Mao,/=X\uKldhR-gbzz) cd?amZY~cx4ZEbgu QR3AmNԩ֊zFAP[]YQvWsǶĸM!-v7v1/+X޺ d_ P̏B3Z CfYRQrq[ BOJ-(>tSq`%8/q^5zzmUd0V|;Ty/A~@#%E9;%Fyq_?`omajɄ/%mAR2w'o:+|w\z#0_h"$=妆J!9RC֓7)v_o?Ym`l ig>(h"2WMKXz/vvlQ=KDAb)V`gmAI=w6nsZeGaݻ+N}  =O36#3B#b1̜|D&$ >_;d<=UŪ=?5$j\:DEI3mh*(RM@AEEPAvA" -- --}aHu?&6N3mL} 3s7<9|?ߛtUnEF, ; ز du(M-*﯋\vMLnjV TWYs=!0ItދW:9vHꨚvt\ļ+GQc5hJys< 6B*qɾ^Z+OVA-R}O> llv6USoerW)rvG.Ӡ%Ĭ --_9wꙣ+?}`Az. 5O_>&8TJDjsUAhFDƢ)i7Qf;t E N)o5I__5zKz*vQ GV)^Rl-] Y>g|s3ZBU%fNQF\}Fƾq3Bly̞,IHI_I@ߠt;#JLo'G'zy,;(u;6?D˃:&E #HcdGGAAU?DPccY)#cSҳ hgV/p뮔Ҽ.)i[w=@!}t3Gk|tJblm׼nf}9xg 5#SnrY2شdz-]*[XlO55 ;pTDdSݫS{9O_X#qd?5[!kQx |2yJ̒MK>*8> !4yϢPǨuHіT8rW|j?jy#=U@cw)1G(4!;#b}RG}{i,^3ITIz4}\O25ҼMQH߻@ږRz%ыhj{kWѭ-M5GT7dKM[r9u3ktIT0l(jgӢ4CML)7-,}BQWZ>YZTn{DS3S{e7t%_ l]HZwc˦*b}#a1]f@},ZF26n,VZG0Gz=A O]eޝ[J4SM $dy40*K,쿋0*UӺ|bҹ-RFvUP&-Kif/nWJ/o}A:á,/݆fHK])`gcmL qLsץ~?Ur )8t0B'z,aM[v +T:f˷d{oOGX aK|*ס?쪀VEٶYkW. /3T'Y3̄ --b)oX: --;2FϚ$Y+챬@|_I? --I+?간ǡ( %7+67 6URY"}LIHXOsDpZ<53>Ǻއ[K? dx,+;XU]]b?jwL@_ޔ*oPzV:?{=Zs7N˲jP}fp+sWס!"9-xx7'm):aMzYNY&Xk$(?&xD @&smrjE>DI,T?Hd{C̅;ɪMJ]!YagYoݑUzS/?j[]XNlkKevl)*@@&FQ/[ {Ǯm)d } }=ٗSDEt4v --%'.KN.(ں#oBnqHIqouQ} BIzyYy֥BT×X(.NP>'H|ᩯ;J{dB8$AqIir7o݉{h͉Sz;ޯd0&ZBI1 --RK4Xdp%I9:$)쿠JU"O]M͛m8)j糼(0{ړz6Q=qq ӛ`")=ՠI]cKkWCWNIϲ;򤓒T0d[I!25)S eV%#KwQ=W$`O9ER)mh>.T˻R'I[ꮑaI8t)qr%ÖTp.JOIZ* v"I;/YR}UI2td_LSzb&c1GOgjLc0ٙ/ڲs79+4ίDrr/$zo﹪o\Wh@SWYRbVB~~xq|9gYvwzF!T®"b2;I{R#B]U`܆q) Ifqkͺ .{qξ?yOOϜ'|>zWCGw0R(~K#0;u!tt" EMI89V |',RFjPHٗoP"n\ )&c!d}zeJ(tT_aS+?f,O@p~rj*Xl Jǒ$VWYvts7GJ%f!a8!i#J3$Y讴o7s4&8N(8GͲSy/yDaYՂo)HM/ vm꼇(ΣD&PHĢ;ᣜyfz[_H,[€/}1Żk/Q4d@ ޠmzTZؓPTcKaKS6 --I--;~W"yGj[ fHo8)bGSP4F6v̨Cq.:p8Sm+񬳨7)QIt΃ĵfnFEx~]t6~S~>=WWh֯Y(!vnX;QUwO6j8 BJa$w4gݗx6g^|e+2r֬H?KW Ic-uxgRd'䑙+ MIdtoH27N{p%s?',#RCP}B0\:vo .Av59ysÃ(NR4[[bIfX{[qjC(Ғ}e4J>x']q\gx͍Mδf=ťekExҥe)?MUUq^H/ʏ*v8j^v%UdHϬSYQo=->PUTzJ $71O"{P;:~&(Q h @JɑcjQ|k!O?e_1=&BsMd1t& rF$'~!e~,(IvQ}2Nf^cTC5 .HΟ>X]e\.}7A:X?^=vȅLDTV }m( JT' ݖ30$2f>u6s|-?yIVc-_7ѧO  ڕK*>ZoڜIŁU^3MhT^~6Νڳr߭Z~; --L[;H)fx&LMϖLW@tƭ:|'c_+1>SJ$ *x}iĔ) NQ}wBUDt܂$YǶ쐪qFV/ 1_N_)ʘϺI GGbA^3ݦpF wlk V$YB_]ܒQBLS9y1LJfw[r-phM9k d~$oVkħ ^=T*+dCvf,]?tw8*B?q}WH(D!4`ߠw 12&PAݸyۮ@%JT%Z% bE+B&ٿ.Y~[Ӗ׬4 FH#F~_SV}7*(l:UwAN.h3<}CtIK%W.^fC_*dSmR~4sEʾCQ}2T՟>i^b%UP&_$?}5h --녾j(kwopݜ<~"y*I~ .δ;[eb=Jې2P:ye"DdAݶdh8δ^~fl¢TlERl{M_*_im 4q~LdH sq N;aJKN?3v*~,+?B&%W'.^z/rpY_U'ubX_B)Т[,RQ6CR#Cg6QVѢ';&ƪ\U}JT6StJCt;'r&Jm"ۃ#yZ,Gf؎ e }ڏV,eCZ1t'w9Ϯ}8D]&N)f~"[kOi^)VͲT_HSS{vRv5M`jM/:2q/R~2V~̻ZZC&G~ B ޢCT|._A-ZF)rrMd򣇔q.#!e_W1.A,PtTb*^aT\cϹf --f,]:iN3oD$3-V^;N*g?Iw*n nȰNIqQlWdpܳyfoگNSE{a@\{INctweJOPwHQᕟޣ Zo@C`j:9`pei3<}C#Rӳ ?T --%}[5=~(*?gq"Dknp?uTy<68TtQ "m,+VMqA "*(",Ƣ՘ FZܣڙؤ6sW,z?;y9uEN'~|Lb_ i4ьi2t}, +L- j fܬtp|nsuV97Gh,P84ol^7\Rvݲ?ڧ/޶cMP9e??T֢w~ --.Zo}4S_FR --_mKY1  oυ簐 h --{ȨNld7/`kz?\p#B`֮/* -- mh7] _ޕ_/`siQ>~8bFR?Q?+ԁ# --:ԇ<֗BXZ vo-W?em --GXIq1!˽= --O& --Mn1;y8ԣ6G=âV'P2o'>kQ7¯mu BH2҈KV¼tPd(u6RWa`sy%bxI.` {/#TVP2TyT0ߵ4"y=&`#> @}8P:uq`3g9vOw*^G7_-NXKOi. }]U --1#TB#Iӳ --K+=9kv߼|yB bעR^#?|zEYR_Kg/it/0RefNA $` tfhfhS&lW%Kˌ:// keԯB+0lb}F"tLC]MNl5 ‚U1QÇY ]S%~7YUxKU(*Mg-bX-OSojǾI_tjtT>Ke \YVAO --b O!^8* Tiry+MI΃e\y#!b_mtƾ, V``XQGDǵG}boE}=|G#noX.%u #?w3:ᥣoSష.LE^H}B2˖V[{Gٮx.+*̱/ FMF7lɄ7:"Qd=VAF}O]KE}X~?l+ml%+B"c@p@/6I&Kԍ}EGYn.+l|oA}( --gEvjPUnʊ g&`{{M;yEL#_&)UZwXU"a.+̜ %do4aڣF<1g$ -- DJa*(Iݤ&,JZ/( 3&-3wCI9 TS׀!|ƭ;uН2bF}L?5OCOT~9'N=QD(Fp8ZpgkX qy y<6 7pC W["ZO("w}4Iv̤fII}C؇+y7PcpxtlbʺlNK0K܆7o-[3 --m7Է|&LH^kW~[4NJxkEiQ^6^xB nfM =bPK8j@O|$>ٯc_ yKK:}?ք}cDZ_DN}w\j$׷G&CQe"0&`U8߹ !eB#qЖeh=(fN; @CXgwtM 5domP?GMWptT'F}xujsEɺCrۖ N@7Nxӎ|ZZ>a6S_}e ӷ(|yso~;Gԋ.ѯl߬I̴xN}7F}G$RXE4 ]`)ɒ^%ܽ@@cЖNSĘYː&-+ sA% uPNѧ2ghbN_sSO\S' K}Vf̱SV Z 9uƎ5|`^|=0d5o8BBudƱf]QeX0n,B)Q75t2i~71e-v*g3.c֢0h`9Z{`#c_XoS5 |yٰQ_LPqi]@0H+Mϟ;}\ZD  +t3 `?0<4~nD> GjT6*>~Aa+M6dF` NH"޽mqLZ3K3CG}0 .Uɩ,i*wwHeS5E(?n{ZGΣ>>`W>gkIl -- QI_)xl'Lj6ScQ$6Z "AP:րQ@EHD@0,qM.,A1L& .ZsgȼO>tZ 6W0xyVSUTO/ohIU u޹kOiG`"Ҥ~qV;oPɗ޽Q>dD.sЈQp$iz CQӰy R8h(H7mJ'`ROagSQ5KOϮsOu5[jBlTV-y7oI;tJA7X Ջ/þj!>wt9W~&XSniT񤱤Aԏ3MBQ( rR1.bN!/Ф!ˢfth4f͚: {AݻlSQZ\m }t]A/_RNgTh3ؿz,UӺ1:lJ%aAԯRŒdN}%% ?,i(A֐a`œ3/1)%}q*AM,m\C1>d ykSP)ӆ\.6֮LO!m>3,$ԁH ktRZ-d.nU}G'3+~]:7~@,/OH/I% -RSI --ޞ`bpa^ 1P NCn~1& @MKb_>ݪ%[CU%g[/c_Jϊ"H}(]Ro2(US"m~)۪7ɕ^ nH:УKQ\9G7S',ZY'~ _ 1:lʧ$<$/צ2R4YptrvI hIZFVA{ oj{]q08Zؿo9#8ŵVSEDVeWZSPWцנv[*K~EHJ6 --'# iTߋP/;9uN1۳iE\3@&˷P̤<&i@I3(K̂ v"h܌w -- -- N!%=Q h7ᣍOơơıՈګ}.MQTݡ --Р~eB[j#mYI2EW #GTA}{*/ /$ دzEXtctٞUOAl8Da(}w4l(F2|ǹΘpI*2T^ cq` [ 3ҖHǰ?L\RdWR R Q & d&#]3'xO'Ua?XSwY0?FjEύwa uЧ;H}d(fwQG#FemU˗/K^K --. ,^Ry"Ȅ#/_'[n?۰?2E qDpRJ1LQ 5QYDc 7ƹyxaΘ5;:.aђ:lj8S+>,W}g8a?a$dN!@}566 o,]_]4)!.[~<`: --ō7식.F[DՍMetٞO=Ay EJ8)rI~PU dCIC' ($lf8 (qqJzf굘:[8k~~̿/\VĎg #lSƑ3DoFHD7k]Z]Jڴo9!TVR !B\vToLk,WģvCy6}]/t>rfgӧ~H0bƣ,F+ : Fr}`0f+WaWlhq8w --˝wq2D89#48bYT&~ wԏO JQXPpЕ@iS oUVF*ٳmemq#Tv>蜼^nDwٰϟ:%bԿ~sg] >CP?3̡Ça`n &L͘Ĥ+ w --?qlhnS2c+ 1xFE6K?z h95{ulbkP32'J_נMK 9}:{EzJR"ty8>7_5u#-S)Hu\: _J]% iKcN}AQ$cơXˉvY`_?a ~I}M)}<kþY eRߍܠ09r%?OisiCnІP|CqU+/K&x /emNwFb?`?5# _kщf{柚Oz%PtǶMeHŀHoX @ćO @3f͎KPơơi+4z8h [ogGpVn zo8JKoXo7g{}Y̱֯O){GTN aY]<}?CI}Etkaɕ r<3 ߜgpWAiYyth膧-XLFM5ma:Z4D~Vd$GasٌM)Z0ogS 'Ԭ"b8 --pXѴw pƱ6m07Ka}%SWEDoS/Sg%Կ_~><hۖQYaA~^Nt_7;P jW --O6 pXAQ9nZ;z@7]&lX -t5Hζ&겢ĘrmS_R<|4 {,zfVkqqH)(éޯ Aam# ۇVҦ0Xٶ,b7Foяx2eqݔqݴuݜ[ZKS>1;n8\jomn#ԯ()NO --rv@Q/QR00 /Dg Sh]DLBj&C.2M0~`')Qe/B}<~jeOAT<%wrm[XVo,B}\#.?.oq /r 9|=]6VY[0؍㶕ο*)aݍwT\rzvݲ%OYk_߽6TK7pAAXBMA*+LM rQ H3@|DΙk _*8~aQqIΝqbؿľX@Pe\E ^}IJ[5ħ,#i m A'eWd'ֱ_2TOWG+[5%9vwv،v:r˩mZǏ}r[9bpM.Ï?#$~gyw?) --7d|?"EPCEzf%Ey9#VXg#N`X?av]xtBJfna)c0`8Ev>!gY^ @onY!o}F"ɲŨLQjQ>=h}udwg[K>&/d⸕Zksbva];Q7Wcbf?@7qIiٸgk}y]F~$]_q]?]6z}N:@<9) !>m̀Aڥ$4z?{1U8^~AaIr6GY _|4,>lګh[4rpg>k +NcٚU\y'ɝŮN} ͸ju1"OCYF}~в󪧫,ڊ$37鲥~9 ]صE3+5nBP7hK+n 8j{?aU{O`)y $ ܙ;qU#<c#C<]!-V0yr)qxFV?i8ܽBvDǧd8 --%ؿİL/'277֓`?!&\a&z]0ys{͈Y)Zľz_ --SoM}ũqG/?gMUYanf --M܃9ІF. --٢]aa-/(4261-+z7Z:G. {_AИL)^ $RAA8Y{b]K3'Ot,Г"p:ns| kJO3x]&Dnn=,Z>TL+~3YBԿԿ>udVg%b^HtϚ.C`3!q/הm}iA70숊ON)(كx %.tI^H8:;TOcQ?IQR;q0Cv:g`R6G|BDt.Cݝh Y$2ؗVF"%ԟ'ɞ --KJwukP*e?xlanFJ<i]@E 0pBᗫ,ZmDԱO,GOЈ̼*&~Ex7j_S>v@#8G<,"Ln%?wშ x --Qy[qȂq޽g}KtbJ‚c#Cpnط4]ZеJL _eݍ  N)㪮ANvH}zZ=uB~uyq~VZ"ՉNJv\5''*t6;b'y'7U-70C tqhǁ i @.ǃkWru3EGBZ%\4Y삒 -- {.4<6>ɺawuYQn&sG=`/,sbO`ײ. ];W'MDgPhdl]YCB(9i ?oeEFcK s2is4yЎ --]Ir=|tmS2r YLxï;"p$&ި'0/1>@/>Nm{fk iĭld {W66M"d(."֌&?E9}D1~cs[Ã0}/rFtJ3N`8aSe縐cȓ!𹫴v/cI 'au|R\TXuC0wOs3 KBHo --i q;.^ --%Ӯ'SQS'W^Z%O/0`_l{a>n,/PEeU|B߶wu3opa_ؿQ+\A i@=$ A!>H%n.*>V1ɀ}m]u!Y\^]' WVG`/"G;)C8wRǒjjذ$6\VHƖ]\CI};4A{_9{3І+h3m:iU+ HB>jp[;7]N>w}=ƾ>/z46\|bJE: rᣏ XʡqC@AV*[GyB#cS2%ARo>5riи݈}\}lTh熵}{rݚ2* n+6Vc=|cpDtBrFgjXWCA}|頭,-WeP@Zqto%ڃGOě?]W 2|5i ^&X 7[,K =F?FQ}`6Uh_Pָm2aDKW?ZS"i{k+J --;p~^Xte-Kg?F 7߈a%q⬉k7xFB] --Vhs0~RA['& gPhlo6hhW>Q}I7l\hC"Wazxun/JFc_A] kbh@lvסbw:;#%16_rNvLiSFa_>`_$ X>!1 ) --F=- --ؿ؇atx}UYQ>,k(Vذg<GMwy38g'M mHU!϶6 VAI --ץT]W>ktcwo`hd,5{sOqk0oK˱cħ 9 @t^<نΉ:囶-nkx#E6›Sx^ЀS7y:x̧Γց((lk\R J¾&?`_62t1pع@m0}\#Ը•G?ܓכNb?:Ca("&!9Z3b&b_#8> --K73%MiɎ:*s~g-Z FYq/kyM3P )+R('}#E+SlSkg6o* kW/vUm,i[dPR9.{;OߑW@[ :?yjO 8 hUh+{\߻%,J2B P oTX `s+:fN --0q샑u`"IAA%CE!ɠu?x )Nn-pjtW/KK܌Hru?6GbR'1%3ggQ<3흘9rBצ>&wt+_+ZԧvU8mL5uL,6pj; [+xw7 /} --.ܻ{B+;p sJsތzVe5w+,-8vF>u`/8ڌq'a7}O}ww]RcRPhFJBtDZP(]ML؇o@Ҝv!T`M mi --vCIzo,Eq1p+__@ԟԟ8aا[n̵R:?8Zj3mz/; -->wD۰ -- ##fHu4$a߂-YfFFPR*bt谯P>U^)ZxmUCҒbB}<9Y,B(/Î_褾>)?ΙT^Э)]u#C0ZoUAPq_3AKjl6jC jך-|>!1ě{Zނ~Q8XOG?ЗĻe:܀΄ĩ()TggB:el$Q4^gK}G(HB]HzoZ}I;ښdxà V,q[ 2`lȭ)ޘ9u/N$Sѭi MOPV&&΁#Jչ 8Lj!>\̑!WtPAժJϜbt{Z~^~AěLhxz[uN.}Op>M}|:C_IqC:q NE2ʥ --B ,X+` cӗ)53g'baa})[DʊsRc#C1x]eZȉ$jנuwҔ%j'QB:ЌoNͪ.,K#? SP"Q}a0Q?)l+Q_zH_/^9ygֱkq[kgf-I0f\Emil(%M"(J=JBRIFVfvٱ׳<˙y'|>tOtjn Mģ=Xޠ Az$e7E%eje}Fwz::g} ͍ gOC阆0h ?cBbsH_= c}sK+Nl8a i^b(5Sj{߻;&24ϛ2 MQ1{WګJ4ÆfE[%vpv'@FN^!F:Z"^}!Rr򳧅k@}񗫣NroN78jGI|K?x{dL\B|C?C౏YO --_0(PHܳkGXH %$j L(EVB>?JLΤ1 --ϣ --^ !/ ,RZ}]*:Ǐ)@}Z2j~\Y7yYQK8oֺ{6N.Z4b tNk[ # 9=Ocs_"iBµzݽR(m·mް dg ef --COONA}hI;N k9#b^*17Tǎ<7.:BH%G{;[(PbzK[)(T4b,(vv cR؜9_ImrW>ꋠy9Sy̨lc꫿׌} 쟛67v+U-7WbJ/3+j5ݼ >}vE;zb_g޿<(<ަYR{BpvP?ssq_t6V|L;TO+wԷQ --Uh׷{OU7}> gubƬ9|-|Ǯ}B8 &VZLR'@5?,e ]VU?SRDJKIiXxd 6"ukT4au׌hz!bчG^UVRT)lkF7gpt\+)LLX --c_k]Ǎ6R?ltkD'V^Ë{C%_D?RkھΩoϊ'awhЊS-g|'@z֡#NJJΜoNk[;k7{b_ǞЧa#?lj/U^(;] ]fg&Yͦal@cGq`YbҿyЄ@(D --&}Oɤľ8 --0ϣ ݈{vѼ|S+ ɰ/5ְ)Kj+rv a=WXTR6*~;HNNJL)JO? s&⪝®څK sӖ{S3/>]vR-bД,_'t ` --Q3h GyՁЀ}L"Gk }+q~I"45^);=%kӪ帻Β0ZAdꭄ}mWSK?k|6u|EDťgaKP?ϩXv]Y5 P>QIQXTZ=KOͥˏZ5t9V0/ ޾}fEġώ`s(vqOki --}#-esNf$.6{y3%fBwMϔa_iRtR!)]_}NLMND,d8` ή&t_p8;-o 'cx^lJ&R_ܨBм7dpV6/\"-[ãcR3rU5 װN[uM+9'DwATXR m`Qxc0엇WӦ$MSI{R+CE[AQDAW4*{#[@*Fe --"( Z<߻x_؂oϟps?ֱbշn3ܽ p@pxT\Rj&Ҋf~>XʗFmY@3){" }8>,-? sҒ#BO?`k ǰgvM k׬\9^ {&O$_Wɾd+N}˓ǣXOKEYiIOuw63b J*#M2f ;Z6Pi"y*5;XuMd0N#bR2r ˪`;0F>B4φiEyXU W?Sb7>щߨihOwz`HDt|rZfn!$źvb --d0kg>:(>t^K7ʲbh @Opu23cRQT_($poq$xce-}&Ty$JX) ,S~^O;C…>0@eoJT`9q*t;Y;1iWTZqz0'蔯?U[7{׊P}]+՟'֪/LYϢz3WB -->"İ --/-]FfVv|OI8w >{d1e$._LcDNygv^%쌔3aA@O7'{ks{wioLAF --ȥ za9@%h|:*?wʲaO>@wu@_((NM u0DWKCmZv/Xȧt),Os%aCǺ˗ Ӝlb --YsftDT6՗wg1GYhgKWV^?][NP|U5 Z/^C GLc -ntu57V&E`L 6] --:Jz#>{J u+ 5d'GAB@gR\ >'2xmW(,AĨkTM-܎xDb,mj*s}vQ}&IGFaT~aNFqU!Wg|sRK~t7OWܶ!ðĔچf |57ςGm --~6]r3S#BOuwq45hi1ZDQ~,^@Z 64f}'}Urv~#?yd+sM}~DA$c ݌ ^TW]^Rts49wh2Da (j=G}2LW\rͺ hfzdPXT|2H%F)Uw?L)Q})ףGaz8P'3?RZ5w"tu4tZ:=~"0$":. m --7oA #biO}X]PyJor|td(^WG;+3]-0x D$>;JƑ\'ʾ)o3^KǑ>0VLa5mXD%ǝ ; a|TC( *Z䮃+3UT}P@(ݨQ&8So2=Cӏ㌔QDc&&ʩODsULgSŊKlܼE[blfeq̇`?>9- 6sb]SK[ ? iOc}WG,}7,h?5e& }<ݜA*wm --v "T =T~+M,^Cf --bʹ2*'lBtD)?/W*;oۺYUEi"Jv<49Z: S(3E_M}ͬSHҲJ+.s2 LWS}ttFOWG+ِ㫾_.DٝNXZFng@p֫A[;yz<p6=+\qYeM=5#9nS&}0@kݝ[/5T!d$ƞ :}!  چuJ/QC^cAA/ };F#xd --?ee<3" k)a%Rb#C35=w.Da) FLQK>ٙrTRZTJuL8xxrSYUmcs{gw/*/iOBQ{T91 --t\p_Ozz1؟ja+Y_]{A C·x -- --;RN} siO{5{)kK --r2Rƒuwq45b&Ub@Zz%9=}Q@WȾ1g s)(Eeԕ憚 ӓQM]YfHYf*˘)na?CeÎ RJdoTIs툷`Hdl"=vtDTgѪϦ(Wy7hgsTT_3QL[-60Zk/X;& - [SK[ãR2rJ˫jݽ7 !NLg|OsDC --g|пThkn(=_x瘇#x h@ҒQ r |$ R9G<@f[B(r٧"``jhzO喦Lpӈ?oOWG[K TW-'j*It,Ť1K̝w8VIU_BZFE[p>#3k{ѓâ~y?E}q<΍w1%9 M[$D& ťTK`A@z/FP9f|5gp'('oA)1\)]H3.$Rrv>:_S|85h>P)=YI)GH7C/+Oeb --Jxv W/ %헯 B%ʛB2t L>QÂ|\+9/\sNc1%9k/(,gVT5 ݸykbq>?so6>厶e)qL('iiYH%%)!&B5FpHρ'+Oɾ%- )$y{I9|4))&95iP oz5Ա),Vg'#Ny;enBɩ*a$tO )25N'wHdlbjfna֎+}_ݚ|ߞPJ'9ͩzmNfJbldHլNTWoE'x 7^ _^Q1 k;ppx+1,uS~[Bz}tZOsC O~Nfj@?$ӕaocifb}NA ^q }V^%Ⱦ*}s$>WbNu)}bF?a=&td db*!6"C`PhNFw0/-\R#"*MjJ4u M̬iE%˫.\?2ۅU4735TÙT}_8>)8@$o߉v]!5M3+['7O̜s5 m 쏂ܞTp/s=>v[jK --sҒb#C}ܜO27=fGv$ l@1P 4gl@8eIiYyEG%4hA}M !TWWdg ~jnjI%)!e\Zďd O~)lRNQE񓖶̀HTY] :P}`k k(}tgtc[RU}E'롈aKl]WU58~704[PR^Yr8`_wxq?sAY0@҅F~ia.;lBlTX#t *H%X6 h }l@kx|VcI?%dZB/ܬz*+eEHPc#CN6'T=;oٌtTD b>S'"6V,+@u --ON/)'G90 y7S --$ ՚`'~G+Rܬ$VdhML4F#GDT9α8l]ڵGZfl ӎ~؄Y%Uށ}O`L#XWUQZNOId.g-O79pID-lX9s/D)'dP+dopi,?ª`g>y_B|~ >9Hܚbƒݜm,Q5KC*?n܁G4@rzxE --KS؟Yo8!'1o[+ʊ3Rà {K3c}j*)e+ 5 :83iV7_F: YX#}W>2PSQZ`Ű05P= ubAUʜh9KZ?*L#kO`hT\Ϫ=Cܭi@k?h0G4e%B}P|BšdkBzi>N>ƻ.*u;,;} 9&f6 px+1%Wدkl%?`>fp-A>ݦeIOW!П}{ "B_@/-v W/ߠtv>FE}?tѡ΋mMVI/離41Nv'edg"`I"* --((^.pUzK/ --ʥ (DMtMD1j}9sn!]فy?ϗ}T4XZ OT`d2' L!SYU]SДdxtBj&K祫n ݂9~U#35s@ --2 P X>RlaG --YA6{S2ro:F=C@ oh;P[UQ^f̍ t45G@?AB\ }ĔO?!T2Ͽ0 ٗ}PTؤ⃇i?2:> Qi/Qyёo}}k:nEY!'3%!:,U$f VR]X5Jr8?iV=.loT4hT fљ~"T)Fe9pT}҂xRWS޵pU˨S6j5Vqhr:Vv,Phdl"`?c+=E쿟.<ˀI \~\TX@_ :/i+A}@L)A1@ GMUpٿ70LKd_R!yPs`q^vZb,!fFzZ<\IŲ(cKW -->jF'vG E֣Qfwz\8vhmaqQ,G 42XȾz5L`dA}j@UЙ1*kY9y$fWVדw&i/:;'":=xy0F趥)Qdcbf'OW,$_"pĊ[GKv$\;miXX;zE%fWV64oؿ?8,GqcpC_#OQП gx}~`I'+-)>`cijW  !<#aПa/œ}HR39Ee\RA>Dì%XS^v6>6kƵ@S[깕eEԄ`?/,SC]MuU`OR Kj)Cddz1GPPxKJnB~.r6,O@ΜCGjc!5Do~1:''5C0nl*J --%^hO-cN`,3,Jghjacp [PBbp?cg>3f{ ~/@铭-K 9Y@_Ow[K3#}jQ %!.WXF 3> --J*TS}WШVMcˉή:?kNjC >xw`Ol?PsdXlksw*! ,Ɇ6E2;%QvnSPR [XVk}׸0MR3!Kw Th]UEY!'3%!: %30Cyt01sP} cI\Bj-_mSPܭ_[7@xt<`SPr[8_2/ ]O8ٓЇ ~FWcgc"B]m̌u4 KdH蓥}$0֑BɾԬJn=IAD O}TѲOP3 5'XT{/;}#07#9>*4іTE/7B{Z)MS?gPNrR2T32… 0-+puC3Dr?1ݗDWaץpP:A!8Ksғ"C}Z[e$DyYvV:{Tvn --(DЇg $MEм %bӲFȾШ܂CU g.ѐDYpS̚{8ͬ3Z+ˋRbƒ Q5TWU޹#kLO&^5Er8:&W3D3ߡ'I%ᱶ ߹wo4P}+(77q+ˊ8ݝ퉺>/8UP}jG>u1/)-#;,KCSG֑[M!aupo_;=/)菎|п-EyH7dgmnbE@FYi~>bB|ZΫD ;@DlbZ6Sg_?dԟ/xy||lljFTc#C|.JKDĞKbRZr#TR}$/(,:!%SX1C 7GƉܜEn --&Oؼ9prWg;ࡒ丨@ܖ,M قMpPTy[_;unߩ506sd ٜRaؿKa)+4/;?A3f?A?vuUpN^ܙ6 Yg'"F}߅} YC")I̴PdM{=Euf繟gy47}}+scC}]MuUeE9>B|<0z DCi**!-N]Ko3+{l֎GRؿyV}\pOJG eOMAMYAv Tl`!RSG8s 7/m\='-#;9ؖjꛘ:R65?~ =]8]z\b"B|<\l̩)ÙҮHI 83sѿ"D쫪ko66utubIKc>l'_7Dd@~B@?F?"4@WK@_\DHk~ПF~ _c!1Ii9EeUu-]}Ccs+;GW/@<ut{ǹNc"a'ZA{AߓdPSQY#.Z`w !c&?Z<-iy2ͭ]ܽãw:Tp)R-=c!cXz:[ 7SldKI ܾ„lUiIZsfϢ5fOMYgzM]#,yۻ`^1bjV5޺Q[G7ٕ觇Շ*mn|454b"C{9XSV!v%KqT|)~2`jq̾f704<*.!y 7-`j>#'c0P鼃[wѿƁ~|tDF@O{jU+1~3o3wRu!y7sڊ[56qϾ#%egtbHl RRnA77VW^XqXSwGrX55٠ Fb9ZWcgM,Q'*!-GLMcsWO+ڍz<4ȡoìJnJ̳'-JOM --vw6C:%9ԟļ,3=f%/f --g`hbnmُz6/) &lj>6~gOtu qFocaj _Ї}WXwK3XGΟ)abժ+U$e»q3f?$"zCJQWB4߹򸽋b>'ݝmkW~:w(?;#-yWLDH9ܒZVʘ?ȩ?OZU &hhKJI%WC3#̡GfwGu5UJs2I 7%'[KCħJ4' L8ohJ[ \-*Ag`dbam'RWaowv?}؇f}4 ƳBP[s*4}ϭ-6"*2G`.B賟} --P@KH)502scg\bJzf#%'ZmZ}Q>> "Wܿsj9؝am-L6oP]+/#)juŲ%V[3h9'&fͦ&7 M*gfef恃y'NW\ؔPǘpvYg --g܀ gEi]!xd#S^yxqSw8qf)b_PXTBJ_A[oɾߨol}N?wxeb"Gq>2D//'< --H}K?<>!Lgs>5V!-l]=}B#bdSpUV5\zb`Sjc]uK\ƒܝL P*B -- * .]_5gJ`" f:u-=)mMس/#'HIYȼ #sѡ=%'=zpVS ؓΗ9/%1ngXﶭNv٩(JS ӡYOy ."#WX`d={z>' }>~ܟ`oЇ.Ы[^ >S}<3ٛҒe(gWzKյ&H{ҧA$<0:К  ŅyMܘ' 3mOb^vG`_HXF&$'+.ׁ]O?_7ǡ=ݝ# r2fʊr2; Gx_s?.d[؟c/ľ8ľ@ܫiEefcZT45M&I"%$P!RJJ*Yl!ҦM/H-w6EVss/{?}y_3s --J*k[æKX)Yl(/ûi a8XO8r޼C\EYR3gL'{GU78+[% im0 ?~b>b?VVQU`;:{M"ܧ7'sՁXЯ(?IoA_]Ue$~3iDc}^}WUi.YpV뀓Iw/߀"XJ(XZDA]]-.Vfksc]M5k.֔_/ǜv].@ʾYS1gJJV6 rՄ7T(p&Q3WYVRT|%?{уmRoN}yjr3iXcC|\UI qGُg54Lv{g>6A_%ѿ3\501P>ӦB|G|?x ±=$]k6oi PWVB '^+%k3NrZa.kW1^9fzC˖hb'-o7XG}G]p&1ڸ OO!a}Y\Z񬦮U+cW>s=Hw+%1.*<$˽v;,Lׯ#$*?x`G_<9:>ɾ..~!aq S09~%~f߇Gg{9o~omF迨(f=oFߘ@_ PKHL-V} )̷l߹gcg\ MHN #+Fz^[j^WXWS]YVRQԤ_/ܬ{[^|9Hadkޘ}䕤Psɲ,v8x~Ađĝ܆-yƿ,ٌV,+ʊR`lWB/xyiu#hm tږSyR>o/!Ⱦ$@!̾ӱ~,r`e}#`;:}ȟw8?4a>vD/$Oxyj2@-c2hh-] f9z s >լ5uͭL68^" ^i_vV[KS}rZan{:~.%fCzSw]‘8wEZKmܴzήg<}.E%ܺIv~qi3HVnZrBldXEsg\۳ssWj/V6}Fc2E?b?N %#f%:Zf켂bZyE~s+nBG?b#~gB}ݝ>UcC]gR~C@?:1HOOc}] P@(U!bjNN{s**?{U n^ 2KxW=fgj'ҷ|?K>|L|~._VQU ~DdÇ =]lЯ//-.!#BDч?]8|&M$g>_[ه_ݻ<|5Zg.G^Mq~n!b_Z*lE۩I^'9cx*=]m u_wGkFXIRZV~+ѫ`W6qv%Rvϝ}M?3ɾ`؏J$+VFoic;:QB37){:LFksS_]UQN+.~@Zlte)SR58+?N0f_2ܺcG\۪k?Ʀ~؉."]ieK-$"xB*hJ83 eևdV 2LKG;%Pǎ UK+SE`9":0ׂV^q y5M]70426>`|H<aZC?=%y~_[U^R@?%1.ߵ>ОOYc{}yGcihjsG,0 [X*V ,i!T_+}aDVˆzkia^VzR,.,"ͫϝ>q}{1 --` L}LjHW~a?۲}B:yem[;zU_\^ R7H 30̞ټAN!QJ|LD}ISLiU..y2/`烰L\e׃oa70$OHN_\VYSC$S'l.O OMϠ_}6KLE>bL ($BWGk)ёA~͕B 9z֫7nZ:yDR3r+j`Q2<ٗifB룐dKtq67ҿ {&;"i I}9_& PCVF2 MB#i%Ҧ{2₦M /K?~3ƆiNpFvRKS`՗5ŮJU¾p>>9-a.~Eu]cK[g7J}dBxzI9UE>}PFdROW{kS}MeYqA^vfzrBltDh}wXG?ݸ %VskOyEeUuMm]D2m Q_0ΥaP? '35hc3aBa_.4*em۱{}vS{fVv>KFFE`s*$;Zj*s2ݜl-L n@u{AQn)f m_` =s`¾o@Hx>>)`?K؟`8\@tvI;X$8lc#tj/N<."$R诓@# ?XL^o>xǾK,}CbqKdqNKބ>1.dlxN&t5UlgizOOeaٽc7!:a N 3)AԗE"_pDL|JFv~qyuCK{77crx $(OLaMB,40"XYQqA:2gNj<zr 10>#sIu ;yE%>yTXR^UE i}C#c &ES@!쫮oEvfJ,@txF%tw57UW>HKC}!XRCS_N` 0T?|\}侍?ُ̰ۻ 0W&'1rH_c( 8RHŏ$#67ҿ}=vk_JUa F}lSE<:#41C [G7H|b*ԓ'; ~&:Hy`JŽʒ̴بP&{!8[u4'(37GQy c?8,2&.1%~eM}SK{gLú?dqx|H ߗt_z>} S"ec#C}4 --P[@AjR<>*<$ @_@ _3 vH6K:w̭=|pIYyuMm2 1 1?A:b5%9 /7G&wo]oE v*b .U,O7.^EבO`. --E$@M2\IMu)Fϑmc-IǴdFJ|LD+W.=u\nIjRآW9_`PhdtlBJzfv^AqYeM]cK[g7BC?`|P t;X$8,&}t*T_[U^R(' @?.&*,8@gU2! --d-v~ԏ ghja넨kBjFN~IEMCKG78:>*QL~B0e3 Ȅ¼ب0Nvto\x )Ŷ~PL]-SI h}_kc46vp Ǝ#k%kɟoIcJrfJ$quJJOÅz[II-MCؖZ>b`r_a__Ph.6!9-an~QiEu]Csد(4xnAT-Hコ{waYvYww)1.JLn߻Qtst|rzv~rB;|z !XWSYVRdgmaW~9&.^)G@KJ*WghjeML/oiG>֮O=+sCc+KH2x(NKS?sԉ/}^D$8R󺮡ohfmr'lɔ²&Rgo?12>=F7ki=ӂs;}FTV;#uqd\F wcwc_7 fV.ȘT*b}Sk[gw_0 ,]?Ⱥ7? CɠS)䞮vRsC-@ 7+-9!6*,8{SA{cE;piW#k`laF --NH-*Q c ^K7+p:62D8VZboefzEWCxEC^<"R'o^ [q1q)mdl+<&!5+ ]3%赗ؑ>#klgeMKQVZR>rO`7߸xdؗUPطupv#xFD%fdW[Hݽr_( ج }=mME9i1a>.vV&w蟖@/] }|ž1 _]oīw@hd\rzNAi%L3ǀcᎽ6A67=1v5Ue&Dzv r2cc%;$OaK;&vN^Ii%ĆvtZSdG>~ħ>L}Ί\f/a0hNRwXAni 2HlZh뫿.9ƾ<}#3K{g^~!Qq)Ye5u ͤ2Jg0G'gr˳/`7"06XO*/)HM &8Z8pwϿI --/^V8f+e1:1=w|q$>xdd+,c _0_H&Fy;Z)?#uJ#z3^ymp\pIq+g8RghfȨ䌜²FRgO?mhd|zwfXBGgY-YM1dx+aFw]͌u4+RJK7,ؑ[+kBM-l\zG&$eVT7uvSa̡7 AӓLJ!tj*S#B nfwtn\vY/?}R؇z݇ի9%K4uo8|âS2r!dMdS ,dhbAs}w^{avj|d%B%y8[iPr^Ȁ$N HDED/#5MFȰ|¢R3ʫ9+rY#]4<8!ܝ,MJZ$<DRkRv?)!%sd_mCS k;GWOȘx~N~QIy<@r~"?K[}aCGsh Rz:[j+ʊ rScC}9X`_x>9|w2iYE,_M=C"cҳ J* -2,#G)NZ L,8QlbZv>6+*jie!!몏O}8*x/HUUU</ڵKJ.B6$AꯙնI|?xǾ;?(4"&>)5#;G?:sms& Bei0Bb >mTO(-LKN pu0k^+)ʜ?{?2n;p}g]I:ЯAүe q8x1x퇫+ɱa@_w{ 7`Ã<ݜl- t!ergŎ="*<a&ٻ:," 0Jn SXZU؜;*)L}ޤ`s&ŤS`R ʒ,23@`T9wn]]R[JJdj7u[:8C"Sҳr *kZ:hC#cS qso3עaʬ 'GA*Njn,/)HM pq01}K%y}1ɰ~Tՙp83L"5qQ@wޛK/r{^#6DLLVE1;;s/KFfw'RrJvnxBPxtBjfEHmJ",=`@OGK}uYbY(gca #!*ȇ X --eGPِ,.w:*/Ԭb ;1 r},/1zIGhʒl~YkIIIqI"SJh3Gf_^̾-ӛ_TZQ];04:>93wiqHٓOGyاo(/ T 9o񇕥٩ʲܬĸ舐@?}Yi Qa>y(cb| C VSXZU?<65|eا)!%`ogkcMEq~VjBLxhk?7繳dˎ}^HA|t7$qT)-gdnEI9V7^^K3#- 5yAy9Yj"W/~DRop?Y?5ܼB"2J*jz&68'W/_ȘԌ’Y%0 `AB*s3C}m uE9i Q!oO7g[+ S#}M}) Q!}ߜy/OÀ=%8rYΰsp --H@˴˜ܽ#bӲK*j@N\Z{]$A,`FG}fP;@6n^YYBI؈`ow'{+3#2f<̌_SAXF5*tA³9N'%oG_S2rʪ멮whw=U2sno*+HGQ8l.h_8(+IZ`Pp=~}l.ߐx!rf6.xЈĔ܂ʚƖ񩽹}>m#e./I۴?=162T_[U^R@puZ"+JytclC-#,E[GW;}bߥ ၾζƺʲ₼쌔ĸ _/G{K?/7?Ա~ƀb 1$%5' $2.9=ohljva[1OSDΖ.Lv6Ԕe&Daudgc}y>~#o"Q\ZNIMSE(JJ.(%inaim}s_p~ۑnx7Iqf,ǎ"tLA&:Hގ|K7aeki9>-ӛWXR^YS78<:Akoܿ>>g??>>1J --ɱ! E9Y) Q!~>xwG;fZTsg$l_|Ч)Xf0ag:u>2Y3/Ĵ|J\Z b0fO xQks֍+ Sc bk+KAy;YjBĄy8ϝe=̈4,a߱f| EpN\`Np;jchT\rFnaYU}s;Mtcڡf9UfJk`J+ sSMuU9$' D_XO'nCѿ L9UP:7419zxFD%gUT54ut myOHCkПT_SU^RB?5)>&2,8@F_UYQNZRLDx K}T/N9 b_HLJVӋaQ)Eegsobo\qeq~,xlomn,/-!"KདྷDZO(<$6v.x1i1 a y5 -no}Io0ȢGhk+vqJ\lgN1SBOGWRQփ;}C£b2sJʫjaw{ )?E? 4C:%Gz;ښ+ʊ rA'EGzy:l,Lu4++JK AecE?A#D6ʼn0"?$26)=?WTgî1UH,tEQiC.E{w)R)JA:ņA)&잳}{gs''Ox~SQswȳx?:hS&LJ;ۚʮ_JONruA,,X1g(XvDb?XP("v Q7Dq`4R݈Sڼ?;C5@52B --rs0צ."x":tw.]VϺ!6}cE%edT5t ,m\=C£b.&&fd\_QUu>>g39Dy>gV%2^nhmQWSYVr=?7JZJR|셈 O7g[+sC=}UeE3R!'yu^!Ճ{_@#!#; $261%#{b&MM ?|gt@cB5Wd<#wz:PdKǎpsFgb;?Ƴ=#D ))i"R’ֿݺ}ghé~[!1>CFؙ<7 Abomfw^FAPG@5҅Qo{h> 괰o@pXdt\¥WWh^ɇPgfqE#3km@џBчЇEZNfFjrŘ@?oW'{K3cC=mMuUe9)q T賠lk诓<;NX)YEsZz6~iyu45 wh,%U豀h8HCwPU^MMx!,PGSMY^F#$χh,X@@1K֍\"D5RL|rzVq$?AfA+}D!،#w{n77TS1*4H# 3:q6ƿnWlS/#b_HTLBYsu M̭l<}B#.']_X\ZQ]t Qb "yibu#ojNEEeL?prblNk*ˁe_M|)!.:2,8@WKC]EIAVFR\T@1^~>bٵ{7t ͬ=|.%^)(ih;2gm-sSGcÃ}ݝmMuU2ӓÃ<]{FRL4XzQOYDhH --h5ըolaODE HFHF7#Sէ#"#?6DQVzrBLD9EU/hFmb>!HHSTV=ghlfics11~^AQIyUM}cs[[=}C#PO-@ByL$,pP@FD ~b(WRc/Dx9;ZP;$/+-)&*|?an.6{X>A[ ht/ $*!#m`B#Z ڵj7{ǎ'V^JX:1+x*Y2EdPEZvFJBld4-4Y)qSǏ`;c?(CbFtS310sv6cIE=_$ˆV_GĔhB941zoVG u]s(.RRb"H1ˆڽ뛏hoK}#'E0R2r --*ZƦv.^aqgUT54BݿON? $Lo --%v@[7;ښkK --&'^ -- pu431>Ni 1!*9?A]Qc)Dv B46N32vp ON+,klG" 4"p & --dƴ.ₜ+B|ܝ,M t4T%DPe4~h "}3 --cRFo5R=7!@}'LJ^lq91$dkij,/#b͡\+mL-cC\T KJ+ih[:8yF u}wóY~@$/{@2D\\agRDޝ]M ufAO rwq036TWQVLj cw~O~46G< &khjeA+95 -]wG<~ ;@ /?̙vkPj^/xԣcCw;[*K s3ӀɆ#&kef0M#Le^]~eҌ_S7m\C"bRҳ9~cB"#k"-AP[c]U`?/Ws~bC߇}}}9xpL8~]%XUeҤ "XE)RDTQz&(v:v=u.q[- 3Nߟ컟KHU5tLͭl.n޾܏K<s?#+~SK{gw}3sga07; BM=]͍0K --r`_L&Aq`gmaflHfu?Ƿi}C,5/0(8,2&!lZ]S;}ɾ&,+bXKڔ*+HPQ23TU%SdW&3P$`!9M<*u/^\CH}cC3cC%R/k1EMqh@|ܜW\Ck8?>쳰Gf_FV^AIU]SGk"ܿr?~M]cs[GW/ɛg=c> C5@OR5eF'ܟ[| ߼kW/?}0 [v|xҲgN --=r`P@?; 3Vlʮj"kQ --'khje.^-P8F1tU3}񑁾œ+GSo!{+3#=-5e,i+pKc~`x[ --۶x89'OHrč۫bwL,憺ꊲ₼l.Џ8y<ND;k 3c=mMu%^VFrN!>nN> @+ --/36Рq9eSVPXLBFNAY][ܚ[DQmvozҲoVmbAB&FkU$֒Ï="'ZVҲ)-1\LP}Nn>t 1gdfmFO$ϥyEh+8-AS-űap --6PbX}|4OѾbR꿃':oL ^loi*/-JB?0=\mM t5Ԕ x4B_}+@i+B/3?߼ NVMJV^I j٣ã.T6v ߸u#߮݋wmq~ѡ겢̴䄘_/j*bY --YCo\{I&c;>V!xx[(Bg-_RQi)0^tw_ND8 tt^JN 9B0V'B"Bp)`"x>߷ψQv2|de%5Mm=cS k[}o_aaOIMK-(*mhjm߼ٟcw&W>BW*ySm͍u5e%yٙ׮ЏBt`? }Wg;K3C}-uU%y9 ?/Bo{>N5Rn-+ $".+hX:xYKe4]o?~ϟl k'ƞ> \ۇ\3)%Ąx8Xl용p+[ Bp<2x4K[ݞ{E^t )*![p~ypa^B#K(\|tĉc|,D,t5},l;88yw풔4tḼl]=P 9rl2̜’ʚΞ, @H~]>#7WC|tx 7+jjyPzw"Z[ik(2R}>^n>+ --72FS?OѰqm0fxaJP̚[;yE$$eU5Ӻ5Lҽ J2 '=BR\ԩ__Qfw?&]][0 CQYס{PP"ޤHEĶTTDݵM41{a=gE~s~/Wsc}mu͂\6Kr>c))$%JBKJ.(t\ --;qډoq[Bl<^3VpOGKCuyQ^f* 'hcab('a Q; --7C,,t_JFNAIUMC[~`q)P KʫjZ;{zGF&Lq>U d]!?P3ӓ.?7w 7+=УPy{9;Y[hSe$%wl'xy0@; 4QfOD\S`\stw)͞p> -cY>޿{ȶ0콟~ur`og[Sm%]gqsdKmJǸ0aQЉJM]C3+{go#!)9eU%4615¹p< --[85?tcfrf\WUZBp(`H"+y ?e>Ë#B"eU(Z:&f6v.@ ݏ>u?+w`h8 2_~}H>!W/п?z~x(?'3-%1~@(NVFjJ --r2RvBIDǻ@d>WEx0^fDYdN )YEum}cskϽC#bR2rʪ`819u!UgrYQ|"MMnoGdKd --vw25դ(KKB b:,xYЉ-',2&!53!:6>fa$1Yl8X[Ao=Nvlv&,(@!q떺"ao[xxq|~A!;%$+*kjZX:8zAr<" --~ZfN~Qi~sۙC2`+FSe,?-gOп216:2:V~A!Q1(:&l!ي+j[>{泯J}Yd --({IګTmm(:{8@>6c}mu;ID>HM}vIƉ!OZFdcji7 z#wĕ l=fő.8 --s2R#BX,DP;|87УY\e!ypx>"?,$M a_V^Qghlfamt IYMosS}}(/Ӡm UE9i)q1'Î9EH_WKCMEIA>0YPHxӠ=8}D6L6.>"bR3rʪ[:ΏMLܼ}w.vm4 v5Ud%E8v8wЊ1 -K6.lFD;HZ^ v^#)h.O]2eaUXcO}q I)jںFV6N@G~2&.1% bg=[l.wt_^Rq:9TtУA@wsv036T(+"m"|x --?N>nMHd6ye5-= m~A!@hsжA --,Зx@^0?3RH}^?{3Sc;F M MLTX nI ( ;Fb~P y5 teڭ;GCODFJHI/b̍[ Q&ZgTO,1:;n\DB 7+=5)>6*xH{]jkpn-Rnr)Rwiۥ"E.@A " U"fwݘ&~n莫'@U+JK1T --Y}n>ggz\ǨN Zi9y * M,lX>!1 eG+8l6mfmpv7PZngoOdgifg3g --D> dmr &Þ, --:!-%h]`%/K 3Ã\̌ t4Ԕ֯]-˔QHb+W|+?Njy|؇?_a./&N"ShtSZv<ںF;\=AbR3 *x"pރ<}5@L~O+.PY=7c1طgĸm!A>.N֛M t/'ÔQ)$ q$"0>̟[ycmK.Y!*N`hh3hKʏWpzkGw0˓ܦ^0܄mN7$nϞ{:Z656TVfF|27υ8hd> A..Ae-Sg_w@ q0U4| --7h.{;n^LɊޙhJ"C)8lGY}1} --.)%-#z Z:z&曭m]ܽ|B#%fd"bcf[GWoѱǀ}$$S3z\7:}aXn؞%Íh6!d :B&s|o3-Ⱦ&ɔYf_PXmGng_mGp{rV׷9moW;3N;|p?["-PWky9iB]!lރ --C>p>QaQQ32C(A;S ;йʣŅriβFsќ> ?Vnb>Ed*M_t_M]S[h?pKX`?%=3'`/`l?4|ebOVgW''z r~ܬԤ^vhiࢿf$J!KyKlQ ---x zҲ<|C"bS3s UTԝklvȃ8tPP=xxz ))ړ##9.*,9:y9): t[Nma0 q^IU!m=gWң'k]8߿{5{.?, EXKgg$G{9YDt ~I>!3!Id --ΐWn7465sdzx!G&$gfs7Z;{Jb!ߠt_lo@p֨Oi]؋ǘ죃y/ٍ?V}٘С%elޮ[-ךk d$FGm pe9Y[oT+JK14 --ρ"?[vuJi-m]=¢wȱ/O= ᭫woπ߄i|lyx_Anfj¶owg{k$jʄ"qۻ|pҐ :fߠؤ:zk{W6< OBOp7 \mj iYV546]miy06>*닗lu3n_n` aכy6-1624oo꿳 @p˖XP*kX0 KSTR~4Vnhb --:meO?$=?<݁Ѕڪ%Ѐ --e$+Y~*'?>}E}}q 2/-#}-=CcSsK;GȘ$Eʏ?/*, /͚AΊ(pt]ҫ4EPT+A{HQq92$}}~'gg?C/S$gh6?rTg0wn~uubl>~@ݚU>^.N+-L8T)ÐX&bX?c"qSPV341sr 3@%moCI=+EX-g:hZ>}B\gkcMEq^VZR{wDl -- Z`kiY(/+-%_HY7c+@Nn:*H ¡˜[Ӏ5 ?x --;Zˋ2S!=PWX.WWU@ h9| h"sut_E 뾾 --g7o߀~$9Uu]}gσ}$ʾ Qwoݸvy|}Mu%\o tsq05fS(D!)D?l }|gNCo"/6w7:7GW/դNHJ+.ih9s~p']^ufo7pPׯ^lܹys}ۚj+K --AkH]g%8SD}ZBp W sh@eUWC(&P EPy2X0d\WUVs*Q(@۷l Y”N) ez<~A>1/AĺL2`YZwr%~‰܂ΞsH{.XO ~3?wxbV073=91!f~`}5sDI, 7oV+-TQer}Oڐ[v;%i䳯_WkaE{ൈp9@1"{;Yik)+0$̛˧ DfP4uXl {J('P|bjfnQyuCK>} شNE; IC808ݝ0ɜSV :i[0a"}I)iY9yZ:zlcS +[{'w/wwHBbJzV^aieMCs^1[wSJd'!YяF3PQa<6<8pt{sCMeia^Vz --~, }W'֖f&l.*}&%/@âOB`4?xg 8jj ݽ#w;]PRYv!b'OaFV\C8Hn yJc|dxڨCxX2)q; '"(8)tt]~*@G%eW4L.N\q=i"<)W'F.A$ 5yYiI Gi}j_/Wu(?L --ݟŔ+(k[9b쯦{0XRJFv~QYUmckGw߹ FI%x(g\o}ͣ#.hm*+HI:w~1[_OGKS$"1y?c}´V i-Ⱦ$CFg`lfw ^KW\R_޾qmb@XРUl}RkyWdTյt '7/u·F0%ɇ [C(!đt4H$Ŀ[wA>t/ u_QYt_[e`dbni~c=~2TNAIyu=XRϙ?x4do 9BW3xBF5՟8T_]^\s*bwEhgkenjlG%fGIϜG<.RK8YD8Z#ZOUkC7n{(>153`pdWO} 1-qPA --<cCu5Vd<w z֭rbkVVF+⦈<%\Hzv+mپ+)r --˪Q$às<8'AChȕa"҂G  vwGO[CMYa)!9ՇDa~!/ŐaʁtXl31vG?"9-3,% "Rς+qO娺] Hϟjoi(-LK>xpmM YTIїY@}4џ9>^ň/_/f.UTY24E\rFNAiU]S;+؂.l5[ap溪B` ̸-͍ d 1~/DH\<|ֆC<հPG&!$kP.NOڊ,G;A'p5Th̥Gا龘HL٥ --4tmGS2`_:{Iٿ}IrcZD}Tͷ(sT\wgkc]UYQ^VzJb‘1wl H ۀ/ǔaH },y?gLi3э˘Ui(7AA:RzUPĂEEQQQ EpvQgv]1&hvSI?ߟOz[ a`52Dbf]I鎪c';/]݃C3̅쫿'GP ?F@Rp'Z[]}sqAnvZbL(0[sc]27f8:|-TQD%/ڰlgMD [-:oE nw- --Ӓb#B}\Y[Ój?D&WźO`t&}*WSohlfamKc_W~ciYeumCS;GR< m t7?} ȇ? ?2#L Ual.RgG[kKsSCmueYy2SDB}3}5K> }g12=1⦈vƬs*|z6nqB`\:ią sACmA --6ﯫY_N@Γ3lԟ9KOOۏtة3t@j?FGIe0޺~<*?k+PJM fA@<Rv&e 1( H|Ov靆 ?fY(4ݽsMŅ9YiIq"? } 3C}|u5> 'NB_O|f4q --4tt Ḽ/] --IL-(޴ֶb 'M}1 2{p˝gN;TjGiɺ59qQB?/7g{ SBmܜqDXwga ׮m9y| 1֍h)QaA+Z/ZT]~&?'SIݟYsAUT<"=&}B"bӳs׮+ٲ07{OBCAV՟@q߹qPCؾd}[1}QQVbגφDGwdt5*W@BΊ\PXt|Jjv^va\X}-l1`#m4* --n:3%>M9mMu>W(7g,p?,%P@ --A e kQ~z34A>ȡǞOuW/k?q}P J]AzZLn؞RuJʪ_ŀ}w/̜MP)$=ܘWDBɾdIq"(v]pVҍ Ve$DxS_.qUU@bb4RN'dAR[_}B=CS {g7/?ahd\r-e;kCcq(l6Kcgs{݆=rp훋 rRcE>.˗.236ۊ)J*?D1c70$"6 QspyH^Aæ>yMlS8ژNKx:-671Pq|CuϾ_}O` --f%N.޾,$ --Z/\~ y${߾ ؞TIq!*9p߽;WӪ_m59Qa.NKa xUe%EZg`DZ&/%c>P_!jr|EyliE! Q* 3gꠔFr[œ1Q~q3r`KwTgvdrO=WL OzgOx>Q}N?|A\}ÂWz8#OA8&o̺2o wtvX' IHXB~Kk[y ȍyGyb0<E\`aq{B+M~%"$<<lџo~2('v[@Cs"c3Kx NH\vj@c8C"s`8#PA :Ϝ)s(LɼodfiqPXt| --=FG1^ǣ`G?2/>hgLc FTh;LHgD'<9g741[' 84, ddrWn㈐Cw("8#`]h?2|򅳧OЪ_\q%@_>ͤcQOfcW^od --spv --Gr[䶦B'CRaԀ -- m;~[ o0̹وs8A}#GPycRrlQ}_W h{“/?w7|Ձ%1n>8wܦ>)Out721_%P B~9@$7f%f0@ӓI},.>3<#Awg%EzXon"}Z&EܞrS34[+ MJ+n --1ˍ;9'n鐰@'.޻u̠2R]mSqAnVjBtxpJKľ-ДaK}GW@CKGM'PQ@+ݎ7 (g:0>;LDŲH.\zA@Ă,`נ --P@ -- --jFEM dژ5}{nf=?y{0}:18c%D{9[j()ȡ3 X>o ݗ؇̚- ؗ#gM-Aܽg/1mhlF2ڃ/?y}A9wԉK/E`kenbBS)Ӣ?Ix'RsgILv춬Ԃ ;<5ԧ܀?%=0i=CNYi!|'9MT #} kQo~3f,fzxAO/>c"G}AOB~ 43f'A@1$O$'qt`:}}bڋ ,m\=}h_`IYyeM)l =!!>dqx>ww߸ --niAݽR`owvl6}џO݂+)i豌ͬzD',w)Bk2Xo!!:, z%)AT#,X<;=).24@ގtb@|a,m]<}â+1J1Z1nvc'joE@З@G[KS"m Յ u~%xOKa#cb_򡮩Z`bneEd?=k٪#3@{Y$nH<1'/: sύ5Ue;l* dociflH[ HQp?I~tQԟ>tlS:( !>~ԅ n=AdX싌@#߶݇vҌ@_!@0&ܼc+ --< B?+C}ON7IO'qsv'ABvOoݳPaO 'ؗmjam~b*2­?tBynL|gJysG+.@>oްnU.>:RhkenbdHGS:RџOΜ%;w*ZF&6!IiYyXw;960긓'tL8e%;6oX2gIjBtxb;+3c pDl"Ɲ9߿m<wnL e&Ąy9[#")ɓ3c"vE1?g|9H!l%e0ԟ --QΘ/8<J%eU D]?˷>QNF 'Hp>-xqݪeYi0S!qQcԧo>tD%ݳi+w>h,nX܋)Q_1#ē'Qinٳ̞%)aA@1t?ؗB؟Ba }yE$4) 5)ھ{A j~`?}j*Jwl٘<;#9>:<؟zȋ9LFA_$%~G}!WyEe5 1ȋNqXT|ʒ+֬/چB\I BPbP'*'v@ϝ9MyI! #}]-u-D{ނrw*'04*>9{r| --޸I=C>"m%_`G[KSEu!(< =>>}e- ʪ`XA &n۵-º^tz[G[yG13̘\}xrVp(ÕGཚu DboU_GS]e"LVY_PП/%:"Ǐ:eH2y,1u>qHp؉X]ZA]`E7PeX`?|apQN^4#9.*4b:L}ϧ;eBPj.Pħ`0(,gϗs5m\1$I?Ƽ4mL^=gOsՓ '6", V/!|bu}p$ٹ.*j;yEoڲsO顊ZfIT? e*3@#ᮎW.]8{dݱཚçZJH^2ODD'MpTA^L`:yDb]n㖝ťVq|!~ --0zAyp]7ۮo_45V|h9KRÂ@PL,L}E0Nx=PhCcsk;ge".q\"޿!4x kWdy.276IRSVC$fH `_Dds."&.XbҲ &Dʫj_|&a7PQrE --#1QnV8n9J\r^ -- rs@R\3/ PGrt},2_̒Cd_˾3$8"&!5 --h}T?uQs07(C\zsݝ7^n?Tյsb FNKDMPT7t{ػtAQ#F D H"B8ܹZk8&sO}D\̰W],gcu! cDϺ^,e:Nls k<|mޱQ:D]7;NPHR>rٓj*Ko^taЃL ' 9 գo4$ov|`!OsveY14&/;#9>*<8=78Y-; ,I[ --'{'h;p-5$tX --rr2 8<*T؄7!sO2ea匔`0`.W{\xv1*HӇ }Kqd'P$/c&3srqua `+npો((Ѯ$)@4pP '  --\3!Puy8s!bR/ ֶ>k6y~kЛ~~; @mAwQ_zO"{&-#a[hm * ؄ҳr0EP;4 JNfjbLd۹e/$EL u%<2K c_N'J*&|7ESh --wQaNP`aInKzܽʘ pc=>d2K˶k}WllT_R}Hy^݁?vQa#9nD}{N8*wi *$~`jl2߯Kˣ>3Ee|p8٠ϋ~pa\c6;i~&/%!}~G do?? p]""+T^Dz?@]C[h9-m`=8s9/i --EQ_XJPis9aת:Z.;kep"  _︣qu]-bu]yGOGDǧdVY:4Hy%'0 omy_,|xB$Y,A --QYGE瘚Вஷw>4N1W,sA1d.X^?g(ʴCT_NNRbe8b.;X}G%܁uDrEywռ丨 Ļ0 WXdk)ʄqcTPR!AA9@Q>H%,]\=|6/$":!ʫp.8y} --YIqÂǹ)%dI/+Ȩ/'}FA!lBk ? ,l}\|B A^tYNj,g.%g]~U nG`C]6&UӃ'*"4 PG!__W {?y0t81j'O3BԷuZ{FD}JxT\rz6JY%>$,a_}ܗ@qP٫aqn{f93M Ǩ(aէԅN?dOrd܅eF.SkdXLs9YO@ Ev(3SC])Mޝ\7h#UƨM8~_Q_F*`k{dA`S6K/ G}Rdb_LM};} o6Dt5qUE!'2KqxS{|ؤ+E5w~yY}cӫ7-mb.O,≲"\ϭ,NO --)!. ԗtRe볲svqDOHDtB%2xʫj-@>Ft {hR(_Pan~> zȺ"`#qTгl"%,$}I\YTʱ$JhwbnB񃻵%7]ιs!$Ա{wl^l t4'K2'~yGeqfadn`,M"X. *"6PޤI$%X --**)Rj4%qf7q}ygCDw;3bO((akY8,Y_~KJ-P\z>"b>$R>ޝ[M5W.gg$DE۵mӺ+ܜ,7g.'OoH}p#cL5`|SskeAkoގvp"6)53AmC3\t;x)`t bb7$k aE}gHt^=a~q XP?NꨔuGԧOs_CPq%(?'# csyƳ t"V)p>]Y *Wޙsx(6!uv?xGbQ_ --"/V8#L"Ő' --w2hhOg9|'NQ!gN'ԝ;7ه/B0s؆ȰR0| X~BkZ@+G%h'/bs/q=Yg|M|Jo Н[7dg)ސ?;.Fw߫ ʹPYG9wiZ3[ou NHI+t UֶnTY>]m-;PO[2^IA gV ; --QV0/08:|ǣTTss#@}{w߽Z à ad$ngBTT ́@5 c2s .\zO}Em?QCrK<.E$ b6߆l 6tj@*!ve7[JT<M%]!Ay>ZS&;Vvn^lڶk_xdTLbJFv>;5ͷki&FYv:[v_(mܶ3woH?t8\XXt f͙gjneDS~q5..b0 Y7ܗD}#?u&]|<\l(!D̊.2 :Te%8<deL3]yjx a%Tâ쌔Ę}mZzE՜6EU nW L|[wv.GĘᰀ{;[7e0]K (?0rCePD0EIJ/\L,]ا/Aoo8D=Tt  O(#T2<^ĒnhXDTLtn޾H~Ce .^C 9z󡧫HQǫ}Ve`#?c߽vyx m0i;TiGL}~٩@g//;=%!*;gHG$b@/] O& --P) }}1KSawuo=vVB}oeE$bntmPxXGdbK['WO[w=xxt|rzV^Œu]hǨ] ^ww7j]| 73- e7ы”DQ{4^eތs-qtYj-Nş>soJʾ}ġO//e% eI?u;lXv&F:j'3JVH? CBԂ2S K|6Dԧ>` --_ --SS8n솢4  Xj:z\{T=O+@^ST7 --pq0[0w =m uC^Jx>ۇCG' @go#}v:t^v/xkX) @J --?!2/9<` 2ԂodB'~LbjEʚzD}Ob곰a4+v}B}JQvKM=NSJJ`XQW^IYeTu3f7vX/o޾{'c2sy idQ^cwwo6U㬛Mn'鰩7Q Y͓а켢KWʉQzC M}vHbrέ/9/LJZ]JI렫''Nt^gz E}5P l GQ/*.-Q ) }}B_{y ?QoEM?%>gߑK.)Gk+#dS҃uLc~eݬZ;;tę ޾!Qq)~fNAqjc~o?;{y!7䄘Ȱ ϝ8mV[ksu/F~lX^hzL69=x^Q )gm_}XƺW9$Fz_8s}6kV=i8$D}:{^FD3ũOF7bMC7[l4$W/.cS2x"=3=e5-=k;'{WG o]!3!׊ b#Ãz?};Yo2٠zEj|5o3y#&XMK'ԣGHo(i ǔ᨟OMGO1R5ţaiެv?wY8j,Yjmn{xx:w?(V̝䴇O2򊞿,mhbԧ{rz`~ݖW/ >)qQiM.510ROSG\c ތOJ5~ָ?8ץ(/ ]:w܂KLJtm27//R%\ԗoř~=<.($TO>־_(cTƸ0R#Bh]m6RمJnOT%d'2r3f]PUCgkYmqtٹ{c' --/Hk_Ġ@_uN^rH}Ѧ]I+U4qFfL8k.($ݻ?^twtqbif~e5T.;KiR_FH㗈mԟ="ԏ/~QVQ]odKϸωc>daHn^v6."E8z{>'ܛPN __RYS߈nV8Y>'fy.@pYJ --ߴdLD=[l%\:fVԥs}dåQhPzC@g?y?4?'E_b%J}PB/]AoR> ѲyoaKW$$}^ܗvadeKOq0v&H}PVR_ I՗\qǃ<9Z1|jh6l#;~/&nzFv~o+D}, ȇonKA䄘ȰkW/;GƖ;2z --nD7dc<D1wuuu --Bs[~Bl$VcPeOt%XBԟ4y --V_nҬ hh/^rz#3-.;w?|$8Ӭ’(4uvO))ȅAjb\TDH3'locajj)=oLE"NU?a'"erZ~FhfzF^:P_ROo 㕋gO;N-fFºhkIa9yZ}?F̜|*ͭm~v,B|}T; L7upd,ɠ~X> --/f1V6X6x"LT1)rDZOȧSQIv '@1yw`8=Ro]~aF#5}9(f>SP5g>s$_Żq^![B}^R\tDHֵUuf]!iP(:cZ9_ ;q~uE %'Ā>[@}:c6i_Qޝԗ%󮚖.LCGO>rQz&Z*0Xwb眇}=x[P}^]7D^ujfއ"^<֝706u瀇'v+Nr'ٰeյ ͌xRT3RJblTxHu83G:s'FQA_gaQ\Yy EDUeqCT\PDw&F\ЀTQ@DDPp"4K7Mݸ"J'#sj&/}sV_oAcPㄏ7 2Cz~9߹qS{ Ƙ7WǓ --&ədo~GN --^b[wK8rag<Q`[9))!.6fuW, <*0`P??oeץZ˻XTRV)WZ=}>#cJ|^tZ[#k[v|(ެXR}Tn0.>Y9jfOށ>_0q67/("Sz:b`-}F=}Xú/aBq"f0ٽVkwۺC;g~A#H+39+ٕ#/޻\r[Ή.,_6ݹ}]lQQ>~\Tku#zh"j454d?'O>F6@ߢ8s|~Zh~>W&Inզ-Vխa#M1kޢ8[>v2#+'EFoտh൏>>TVUJ%Bs)IT]0H3}V{洅3=R ģƎ?6 <L6JP?Gs?~jRvbgRw֣CQE2~E^c: _V",wsgOM߷kkV.]0wbxxhڐCΡ&:{tSY9y݃xwi\O4."9sıCmY8H>h[:@ bR], EiZa ~!ȇ#*F)Gqc~3Oެ-N/b:GslRߛPߴeu5e_>>MwxcbggkP":V9MDdaNTh C^w{Bw+gٌdrrS,*EWV_WγdoQ:r;`܍δ-и;E+堾R #_g#rT2\3o}[} V_5YYetrɮ~s><ʭ`(Q7( pTpȨ%+V۸-fo\B/biZ5`@WxfBu:v9y@tuƑG^ W찋{ݿ?`ȰA!F̞P{~Hr鳹޸sX\ --Ƒ6fuW,>)49~-?ȱue۹ꗖWJ7:$+**/A~v2 >Ķ8mG酜L[շ}1c yx8rLHnغ_y1~^s"/043Dwn\{tj_@gGL4bؐ޵ mVc){1&a>wsg~_ֲX}}>t# q{wnݰoGG 320``_?/{mg$'A}qiY E||$~YTZZZBViT --Wdaߖaꗈy B}:iyzۺ,8%bEˉȻYW.(*ވԯ# t4}I-~iLG͘BQ -->sG9^~a#'lHn7 --$*ZgxioW}ÊHbH7HM>3*7ꧤgBN --@ --Y B10/"bOOq׶6 Q!տw弜3NM՟9 ߬WQ0wpl֩K==}:| S"̎:vԙn+~>֯E~\I@tjeUT"({K3Rbcm\zŒHȼ)ro;LQ'M`57hϜ.Jp:﷫hjE}{YPD8ywlU͛1e¸Cգ[Nn.qeeYzױ% -->|| / --bP$F! 3+2va_W*deΤ1&Ṉ̃]}ۖ0-[nR H}xO6s.r<[yPoi@2M<59X>oR}}/\F}Q^Oد]E߰g]"dDCdDZlܙ'O;z٣[n_8wtmV-mQVV_T"-R >⢢d (*EJf-}>dz6~GEu_q?MUYh1  ---6j*(, ťj&uD}X`fMDvU{ofIsϹ^YJV?wjwu7{ y\.*>9=+7_,Wݮ --wO~?>=vvW;k׬Za[Y#S[~ǦNTBy+nЈD :PA[GWwK};>7/+=%^,-mk@ BUg"XZVI}>Jwk#B>YAQ1?yڻհ}/^66/?tq[}ρ#ǃ^r-<2%NAHohnE=!F_~VEV,xl|􉣇;TGm?ԟoYZ/ZӶ;y|հؤT&-J Mݗ8!={ --w~r~ųAei!D$? ֐kPꯥQPTZVЮQ*dB~r 1J# wWdB}d^.ZJrH}]f/9:y]?5WB|@/&F]O;M>NKmm-L@}C}]D>ml>m2h چǎh=vIj>N5ӻnnKDE̴k/ :~^ne1eN.V}MրTNqɩLV_R*>_Ws8lv.6} $0 --W VdP ŋ뫃C W[oW}G6z\=} wzC#b`x _Ԃy,W%mJ4TCc<ݜX*FmXH}Ssꉳr --eDR~cݠ¡u[Gt:_OWg~]aT? _ ԯB5(c+dR|L>a#E);P''a G+O;Z)GřP_>תRQyq'L'O՟ϙkfaecnz)͘FFvTVqUWR.Vz"̴8ؐar"N+]WxZacX+W{[yރ_|u7W/.CȮ[}XW/)oiG%X}FbLDh\8'ڷkFpX3z km Bs --"1E_^&|A|VvVVf&WffVv6+'G Oʕم&-ʰ?'W~|A>=y9@Z5Yt0+כ!eZ{4ؿoo --U 'b4:ϝꋃ{wl^r9V͜n՟3z;4'drW˯q7RֽSW4QӠ>4]!+-)eg0bn|?߹egZf --%XYEOӟ*_mDX# Pդ2TXR$㘏dfYy}e --a:: UԏDˏjfb/Z5_},O Gޠ!F'+Wݮ --uHS_`# `10=%!o1y]j Oӛ:'Q@Mﮩop#WxN +,*kCjRQ7/iqS#NѲhE5X7(Կr= >_}V" -- l@~zZj*#%%WJ --#5 7{ v>!'WoX՗'EQ'շ --Jh3f665__}ρ#ǃ^|-<2.)-3SP$``@4|}t;p쭩@ys|4CU:7/1 -- ,llحpZwCB#bL'*kM_HH'*AǏ Sw~p aدBA_~!ρ)ONJLL +11)9gfr7ߩHJ}<]XY:ZkiA:K]=}6m۽g._ Õ%ģG66Oz:u5Օebf11!Ο>qо][7~i^s3f0QF#'"u &fH}ܴ?45,5 O6s?]A= --JH(!l rsq\775=k.VX#w QSX}G,P_T"Ke}p}H> 9?#-+66.>g9 ȣNm]}csmݔT' .2M235)+Wc{kT$ .e`wcy}^}/`nM --9,478?zȑCUӞ:Gg7xOkaz A?;'&DGEEFF@EFFEE}&_AMi;;+j*z}^ -- -- --Ulm-@ I#C-Ze;$rpHwvy}%mrq?? ˭$fg0jvӴߣ -- J3"j4|u48tir %28yⲪzISk{g7?SS_G{P%t?)ଙ.h%/0B'syE5BWy,UvrCK5_FeO3B_B_~SSXLf2&F%=}jeSu_ZWէ?t`=q-Ro-꿇՟WrGS?@sMHiw(J Dfz_$2~/Hjr#Ӌo5\vZ2J twsurF[Za'{oنAf,ltA7SgAfZV.oniDfT>ס'swg{kSc}mUY bТÃ.~5ޕxWPC2'ѐz'e&>%#}=Fx:ȟ3|biSKۍNrgږo2ԇ 'y3UY՟{ MWDuprus#fv.jEP,@c\8pFSŘf)Ύv6App53]}}P_q(78(<:.  rLInnCgM'GdKʰ2T(VA0?NRcPq4zr?-#+;_QU#H[;(DIW\k՚HR6՟yLsL-V^y}.GO~IOJ7HwܼG --<ͺKma$H}_?JpP}#M N'7k aWع{CN)y%@7`'>Qt,]T_*Cy" AB^.;-?_o/O8ol͢E}ZA K~|n.ɌxZ,5&:BPcF2+5/)kh\'}ȡORU7O}yjUlz֨?S@145_jݦ-;vwg01|L`Cc3"PHj\? #o<}Ľ;w /]Lf" 419OF*tZ,'<""2*ܧ'&R|9ԉҦ6epR}"/^/5W,ʦZA}gGjD`՟?gE/+'(.zD}C>%ׅ~scR ?;3|G޹c˦uO?>[ OڅΛ&FysG>i״V^\/LI/<~e]V[7͙ //֫?ťU5u>OFH#GE?M    DS}njyU^B.< iWM!|PIRwV^7?*q68c 皐lcQ"AaQqtWP\KZ;SS_5xc4[] 7_H}@0P8 TS-34slP?Ydjb[l8qESɩV_,miy[r(spݤu; --/֏յBQb'Я CGAW/ G `ܵZV;yG$/7>cron/V_&E|nV:3!vX}7Wf^z'a41be+ltΞ;LJ+kDP9@۽w`R}iWHm-R1RNMS# <ݏ8ںOp nəyc%RՍP/089/˰cX](W --M 8DZtxPksg׮Zt5u]gRꗃu"(hEu~~^HrR@@%?$,-g?+'_XRVY]G.z>_բ򍩯e5H4PJVV( $Ǚ0H}k;gW7u @~|f* |6 !9wz2Se%ө@?_o$o%9ٯ4sd TDcA1T[r&bl"" "{ ,/KG1 W, ⚙3|3iǬ.ܣiv"URUYq>5=9 Hz:ZjHJo\d|qa96\U5 fX_SUQF+ϡ{yzA{xzG'fd{58B?0O,|TӐ=ww]sFY5uUPنCO7(<&1-+?D/+]ǓG''WIn YM\r:5-ۃAR1Nz+P UkUx4VUZ/zO,;m @V\KL' --\]q~A,ťtvؿuD=( --Y}([OIlDbF&6iR}qjj RRҟSP&W=sДbE'f>L(oཞ@M#^]$VNh)nWR sZ/w@hT\r!a=}ƭ>ϦM? q9lX*fE:P混1-M u5Ғ¼Y~|LdX}o0 >:qBHD d՟<å. R/*R_5N}gy $$/]&%z-[wf>#NpԏOɼZPBofv?z Q+!Vzw_U^OHm, t4~PU"_ї_yH}hxawr5L ;z'o_7WHgO<v4Tf&Ƅz8QLVe"E"Zژ-k*hE9I(xyv66v྇i?.1%=;'wg1U'dQfNZx'$_AO D}㹢/ޝ{SE_'(տw)Q,ϟ9qUi v˖,|'4 A͝|s )94onFݹœԄ@B} gf׸UY"R_'fR --Aj> --m`>hnl,/-.ȥf%'F軻v6VVJ/械_ڏ/1 S}`8>1ʛE},#Y^IϳHd\r5PGaV ;Z\>#;A}4:H}d3745TJ --sS#Bm(,)Vֶa1 Y(WT71ڻ`?ix/xYǛ>8f'>(~ϙUX}E_~GO蝻ddnN+.mdCญ&P̉'P웉/ I --Pа/%:Y9PaYR}ߠԬ --P ԿuO,Ǧۦjm~9t#orꗔUT76L~sc}-''DNv6V s33S(33s ~HxT\b*T6(ŞE\/?ʥ>{u/e9syh6lWT8tsYٻxG&ebGf htxigq]t9R&9BCu^d eV@m]d(ڔ >}zwGkS]Uyq>5#9.2ol$kKIJ_f>~.G}F+ }+JзXA[{Fģ_эwo`'OW`gu9?Z]R@~#jJ* --ξSd_~'X:̮\<{\m* --r6#_`vFS]eYq5= `mntI_a}vUEdB®R G`45UW9Q?"4֚bafjlt#cS3 5~&{/kX'AL RHQ PP̾2r --ʄںg/R=@ԬBV& RwW382տh,-NKtG;uH*XURA>/V9|6Fְ!IԼbBk7n?&mt[՟2n]PܩG؃WQv ;G)fCf>GrDl"x9oaf_6ep7m]ܽpOHNφ7˫黉G|>oHG_<?pMPPM]0̼X;{ML-,q%Ɲ R}";bD[_by9 עRlW赿8i?Im=RB25o> --BAVڪĸP\=8|s3s>z(*aQ )yPAw \g!lA}/˲L @ˁW~ ojRm ΜM`0˫!y=pepOQv@}`֮RZDli?P__vڦm_CoaU?-+Pس;82g'9d^+Ɍ$ԯolBw`7d1sғbCPwsur|SSpطsp&~phD٤܂^k'A8k哾e9Hz9X}y%:[v=CSaOHlfQyUʼgWⲃo*N --Am3R_CШ8P?ԇrJrjyH^6ׯ\6)ˆ&F6Z+K --SqwZ1[Pl]P?~&Ϝbؽ֎ ãPn V>ī/&˲0r --X 7{4XP8ʪ}X}:8 ^X[YVGpu&W3Aϐ+Vku E"qUܟ AWJS'yqhݽkVu"9~4C4Fb귵4(+.HM8|U}{[>1op*,*6!`˳gW.qw>y#'AnWƒl'K2;O7]*ˊҒ8[jk6 (ȳ՟?'~JǑMd xQ?sUH>Vߖjj߲QE˕˗*cp6E(R髟VTWfPUZ{&<$1o\i0}K5*~'C#cӳ --K+jۻz8K}h]5HrD߿!*,FW۴ ߯}Ȁbamx:-,}Ł﯎ݺsbǏHKU~v:R?aGKC{ݹ} BRϦ>w9yE-H}zTzPGĪ/cˋ٠0TSC{ᱠ>~,GY2;PKHv~KscC]M%v*)O15|A#d qBl-VW_fDWݴ M1"IH-F߾{R__%_}S ص{)ZhP,fUcF\9>q<~ŵ/?v_ԗHN6+K --1'|TLcG;oDDk76/O!F{?zu&ρPտ?1~KC_'[޹cg}?__Pg>8On&\,X"#Q⁀5bl_Pޑ"E" HtDPbD,oxcxwIO˙L}.,BVff>Wcm@}Lc9%>zl-a?"Ѣ =B"~|LDH˴aia,aS_{3s K*w 귟oki>]_s07+3=%1>6*<$0>b}Ј lieMs6\U`B}vKMׅmjDD6t6_,! 6k0!R!5R"XS KO>,:Tzǚ(=T?ƠҢ 2o9S_U^q8qt8RIeةY]=L-MHₜiD r8|.d0 & {K8t8x|܅7H+ɡ~tJ --}h R][/^Zך=}տ5wbG[scmeIaDgm&+/SXO*+谑m+U[6rT}(NEYRwu/`ηmj,+9t`_tdO7T9l&OL6 rtq rv ԿVW3Qap]!R}].Zw( ;uVB%ˌLi, MHJ.@}{杻x+9QK£ӵ>q(@6o\gj+6[_/JN=yj– eOEEu-YzoEȁcokmu>u' ʫf"?צ~9BҢcGJ puCg`>3Xl._(vv`Jzfv~qyu2BF=߂ --C2 A}9f*0Z76[a4&OC}LPRJ%Q¯A+:J )  w 5_nbf?n&jƫ~mV]~RLCmUEɼ)Q{B}\\6Amm}::%^~A!wO<>qJdT; LP+o>?("GHBk;W&S?\H}$/UK*$0loXá?gRFw[[ȷUcP;P1V@͍5%2=\|}WZPDTLLZ%>nbb|pf`qBG7/ԣYyp{N:ŭ*; yL.Z3#Y%c_[KWoɈW/ AxtE햠)B}P_`aI5r15&EԿnomn()LKJ E<Pi;қ>UgB귶49U^\u4-Ȱ>>ԧ}(,O vv p(5#+dF~MCA 'fw4Na =$NH8_""m8υQwz\SxwH݅\# ԷFꯙN1Boڊ }dW7K*?=X|J}hGxOvd,U,ocƧ~9Rw)_ Ie3Qշc>s9z c<[XZY}ԿRo-nS}uy1/arA3__D/giuke"sH+Fz}S}KWnB?|TO<(RHg:ie@áeYﰴذpq P_7\،P@؄LPK^_ժ?ROm $T}!IF!':(G⼙ IԿ7!ˊ rg&.q:pqP\P_ߍ_C}2fDzH|6f-׭^E5gTby֕}mjHH$շg;%2spWf-te@}5W --5(#RhjlbC9ȢS͘9cykh,E~vAqEMbzJ.+K6G?~p=U77cT_{8 --PU}kT /t##c+W_m тi&.ךqсcokbjgϞ9Daӕ}-%H#,_ib_~eCg t&CɃ+SI}ž^}UB}/-ѠS6~*~nn֬klkDQlD^bfa)*1A b,A,X")"VDcGQ1Gf0#w2O%.YN>mG7_\UqWet:YukY#eݕ¨]~ --L蛚"RVF1ەc[&P?",4xƙ\=>bIJiB=p(KBP(s~M|B Txg{8+mdf3A# ȝDOu<5y*|pTQT --rҒA5+-Y8odD9~.J[P) }\ttF1yc1{ȁy3R6ZF̜ds׳;3b4OX -Xt9)B6yU&bS6U?k8ԷG4N~gs9k=~BߥSs2ӒyYYNb؉SgJgwN;7|e5BǜeHeEF}{KPr'Q_*gꛌ4M;E%KJ؝O/tWƩU_Y~/qMH9 -- ;Tl FRTO6t~_/wD"!K-Q}wo9A!ظ[▟=ęѫ"`_4'y+S*}O!m?;Q+7"ϒʕN~`ȢU1~zvna'o@?T U,|PsQV8w$zZWO74&kneK~s|Rj&_rտ|MFgԯ~RodMrǩ`ke.TyP?kg4AN_z9;K@}sT݋N}h\ݩ{-9I]Caq '+=%!6&z@_t<[N2a(C'5W]he_u NmIA O9ys'g0W1{oO~] oԲ0#,`c^V}^~ɩ9EK>[^߹{UuoIkKhX#DTټ}dշsp/$od4.m4xV;}[7eꨰΚ1u#H{C싹n~Zwf4r̄)MvDK\aKBJw7Q}j QOg|f*Ӏnݚॸ:vZ{{Ma{AyKQ4Pk娚Qߛ+c6boci^5iU#GsVgj2QeeD32U?,{T?ը{׮TUq _gNg܅{9)2 xקeSTU;Uߐoapt,Ӳr --PYIxheC1?'35WAae!Tg]4G}j_ԗ6JO;v#TFFa0N}q9Z~Jfaτ,dVTӳs?\Žw?]p䏇!xYlɢ4&O3h8$n.²kc/P3 %3فw)Qk|h㮚jwMU-!_|A՟:qPNe4%GNWS6Y}M/3Y~4xM* 5 -- L4\ݫPkoT/PCc>^аQ~j"Tly%UUUsԿGկdav6p9btO0DI_yv`ȢUDtP5;F_<#ݨpO퉼>JlȨÉ"]pCZ$ъˉ/W;y*} g]+Ξ" 54x.\H[?pu[:x%9v --ԿV{5è*QC гUrS_zÍF@}'NXP;,πŠ~ؘhN}'C~Ƭ%Oݸ_xӪe_C}.5շo@_,vP116Z=\ _ .0 ~ˎ ӟVdܤ$斶אX ؝G//7>7o6RWLeCP _Lwb@PZ"Ũ?vr;'w^;V}AkC sŰRp|@kyԜ?cQ\*P?4֥s5w7oWFjRf(lctuPXc'3166~O(Rgrݦn"BUOhP9;2vEK9ZT[VߛVg E?~Sɧ>5{aG#j@귿m>{EWQ9}HB\LԶ𰐠K;;XBx(/'xqcF"ʲ/Ű CvNn>!Zwܼ~BB[r"(5GR.a,z^yѮCQ-_r2~3"<,8 >P_UFt/rsoB}"Ϟ袡eg&H<' _j+}s*M(Z|,5oX:]b[C^``Hb?ˤꬾMI.y[[gCOV Oaq3O&rՇ@/2cWQC)9bXghL#J= @}3Pߪ'*kD>GlzF\4.l/dA9ȭBW,e)25*ƎA}!,"~K"h@}/Re_hHRŶ ԿDޠ|Z}ez_z66o_ ፌCf~~nVpnZ}PdCK]EQ:Pw~y~2V?jۦuX}}dsS1GgW???8[Nڥ 'cu˩o6o6}]mMu%b?sMl]0?E=dbc"nUƳ )e*n4V}yP>VǏ̜<=ZJ}gGR"R\Tp%/73 U߯Rw';WߞPɊW>h*袩"Sy.dn:+̩cGDm B}83gLhAM@XXE2ݨ?AFEo {2?㩳9=V1PWo"~BW}w'Nꋓa7K+*[/cTJַ}U > \}<-`O}VQ|Щ׶V*݂:U&~O-vDٷ23c4}d UIr2a hn,"ި?o  ع'T?Z~}F )Hs2S@C>WA6A{n{R?-3Pѓ.~#ՇbD홗CO 껃Ԟʴۓ~G~n˫(e% CeL^/-M24 }Fe# 9 3?u>j8ں>Ұw>R}\{LC>Z;8%?H_PG߻ͯ&/Ǝpg6TNP_&S[Sy5Ye?h7d9Zj*J --e'qx:? /WTQ[Q{2O7!Cx_\T@cW/Xh7d,C)ړU'0ARB8˾룖eoGGM"9-37ixie_DP Կ|^O@BU/!7iceHG`e3٧էnmnO<+r[xXȚUz;;Z̙9cXCYwGM0?JƭP??U?p9`՟BIOcƊKBxU4 g5qt\PGR%ں޳`7cT_@cm=U)QQ6 eY$}ࠕK`C'{K3c>˾f_e_DG#G170mlamU?.OBwBS?~ΈྪOI9?NP?)>oZ~}?>!U%VV.ԧ>`!Tٿe?}1Q> -M6>Uؗet$e5PoN:2WꟻSq{<UP|V:'o)LGo --b/H`Q^5R=!/QFo߼!$PߖR_UU>]nvA}t՝~sϞ>~`|ȭB֬^ڂd_GKCMEQa"bٯ(<T%kU5J6&j[( -- --*\5A]edSA@A肕{fgz.kUoľ"E}]́ꇑ7^RPW|!PIifi*%@YXxM?r'T?B1/DҢӓFjO2 ) 4눱̈ -- \O8:9hckɖkW-[5d2b_tl=L-P$¢bRnC1CHۑןq8y[t"_ʮ)~Y}Lu iԇ쿣'Uf[351ndXpM/KXIGYY05ټcw (5I}?ńmT'~zRRP}Kө.\ԏe0 Hۃs(:UK W?dOQWPTQR~i R{`&$ľ"Y}!TBzB}{1hnO!;O(foo kbGCK9$:@f'5uR>yҌ:nU90?~zJ½>^twsu>p䠭۷BW 5q%~zշ؎P՟W+Y}A,!$?oά_aï)|9>w0`S /;3-(|A];VXNXk*#CCk[Q*I}N),LPd釩o@ɩ߇r9T振uEWI+&P9oZrbO>zcw|c]Z\ >3%o{*` Jo"_LWu=oBzL~$ n?r[b W)5ǀcB~ --Vũp^Ɠ2dw7"$H}:K^_O76[j#.{\Tp/&2,Tvsg\N]쳲?{7ٟ ʉLg7!""_"l%C~aR )'ދ߸ ԧ^x܀znuUa^vfZrB\LDXp --? ?M/?(TYUV *I]:ڙy!5>-4m͍uܪ --viqܬ$F\tDhPMPN?vo+ ľ"EIS/1\W$}mPT('0 iԇ-O y1Oq2}fj#6:<4` Do_ȫ:\};WOaFITۯ> --݋QSG;L'?uD[(=H}z)c0yqkk*9e --s3ScCoxy\rwsطۿgξ9}uE1m45Pcc>\}=E@ T嫟꿓Z>Ox/y}ྟ67s+9Qw ހ_\O:9 _Wgd?G!|JUp@a"ӫF3>x$"KRUiAK`4 y}=q+جG3X@ޞT-MjEOoF>=ۓ>P^+Q}vi_FU_\.'^6/A}~?xOZUR{1ޞW.r0؇#ߤR2?<_l|=%R_AKbSAbwTK eg%'Dv}[=}%D!IlfJE}MJfŲEH}-R_Λ>8d |d" ?"6q5~\B*AKc}8qC~i[k3c> W o-ξ,?B74Wr?gSc?^nľ=wucꗳJ"o/2ԟ;Q64#GRr?0};;pYT?Ъ5eM-CWDk4H} eg_ǭ 9!/Kf_HƍZGw#8H}IaB_t65гvIG+-үAKR q}~UU`?>6:\2A+12A>6E&_ۋ?D8ľrGHR_2|S_Q\y/w"'tT((@AXDXY16+b![&crzKN{3fwvvv-?>o_'a}͇LrLi՗ >ag4bb3~,QK,D}y3S_}[c_K?]~2  ‡W/D} Q_%%a;?ɾsgq`M,Tw#k)&!}t/@D=D}mUE/baE}# --TonLM6R0쬵&_pKὂz>RѱC쏖e_ELXRAWBWXͺQ?"$8Wq{CW+?~w)s??Q~~O6;H7$AWjZRQQ_Bٿ%Q)eOSȾLW1F --gL3'˪+mX1_/햻D;7o`~fO$sodG(Շ5&~ϰ>PTL5R7%oA׫aWv쟓[b& bn\췒e_󇈎g+T_%cqm`~NV* oc:VF?9FaQ1RR^}X --M$YT{}R,?~w?oC+X37!i# --dW 8Ԑ+6HQ|՗X`O V[Eb?v_ _ٟBЯOxm0*D5Y?$?AgWHjf6~0?Ú@n\k|S#~:P?'!kM o 7g*QǬ|z }onv}3Sp" cOP@i_lT$~? V,q_N+ꃚY) $k3D}JXa}}~)}qkfQ+~28~(R?֜4u_ --Zz5\+ҚD}} --Q_7S쟒_i=dт™S'c;Wpd#`D~Vu=7nt_/- 72OWCN=B{9b S_35IQ_E|3AGCߝb߹sGG{[ 'ǾV*T\}#x0G0 )Y[U_iHQ_sGzDGR'a_BomeanjWZ --rliMOL_.QMDK{Ce߸bb *M}c#R?ߟR4__|3#ϟ]7PߞX>kV?]uWM gN?ZSS?wTvF*TOXOZvD}/,fEMgBES|<ݺv`g7;AoH;}%~H~P\@lRN!{RϞ;v`C#0=\o --f_\߮% Jܓ =ׯk(.*?R?N'Q_!k+z&0oR!q wٷ473)ɱ?L !PߣCpߠ;SNJgp >TkPS_PKO wwuԷ_U}rSSQ&$Nկ:xb\u ?W~][ % 7;zDVfZrB@?onr07ˏ}PRO(?x8O(x͗/PڹtZLTOkjfwvED/E;}X7'XgVMS#RT3ĸLm&@vD}m pfeɒfO;:'+#-)a}{ --ط0>9UR|CqTN=N1yr&՗_h07q ~w;Ohd/Mw7FFٿx d;+ʶlR_%gXFjR"_/w7.)dmiQ[c_׳PޱC9ۀ@oC/7kI~^SZ^+wVМ@/]8wSӠ0aO4ިg+$†A?YY-`bx%EsgMϟ2zؘȈОA"Ow׮V@VjPnP(PO5o@CZ.|?|`/C19PA6L4T^~Te?ī}:w]Zy5Bn. %*KɑH7QhNL!J٘dvp]{e{߽oN;ݵ}}O>V5a9;Y1`.4 gCYڹm:KiSSV=sǏ3>LO5=Z!!=Rn]SoPOx?b1RnEYI傜 ]ԟ1u2X1ꋙ}|67Tc S 8t`׎-n.k-LY/Z8_]Eqа? TOGϖU^|3YB6PVͫϞvbkE';3A}EU >i=~t\rZv>RV_|HBP?䠏6P?_MhRr{(f7\[V\z0/+BblݻsfwWg5Ɔ+i/֜ /#%$̻z1r cR2s aʸ՛0z٣חx --Կ}jQ~VZR?!v@Zu.&?9|q|ݑ[X"Ud~˫kFKJ܌P?<$=orْElP"6P у{̴䄘S!ccifdRW}%sp&Tobak~cHĔ>G7r߼R@C?V8KCX}hPR]}-yǮ|IiYR?(?׆տuR?,W}7g{k P6V_NT-F}1`%ڻwn,RT>*"DP>{vhgma33Y}o;p= GуIwX·X*~^VjRl!l XӰ* @U,SK[Gj@]ߣo^!kkܺ~073%_A} J}uJiCVb}m-Meo^|1?;#%):~{w{na*]%|a,} Ϩ[ bQ0GX8l䪏G/Tư'9@O`V0)Orwਯ{'#Qw ԇFR7({S5JPSԿ --=Q7DCC\'hki(u¼ ё9”Zo@!1On=LVC>"`xa(6i AD>CP҄'~oT4zeoL<.ߗƺҒW/f%DE --8t`׎-\!t-9`~oŋpZ}Ip2<ؑ~"݂D/4:ϣƍ8jbD:jQsLQ9PG,+F}qwݘ憺wn,Rw ~?߽oI}99%rBO}4#$FI;aҔCzwH|~umCKO1?|G+H --aX_SLI9U7@WW͠_|3Ύ ٱxǽgA"JA}[}y$*`#Q~9G4VWݺqra^VS!ǎ/k(/+L4aR@Rf?TO㨯BԷ섙D%eo}U /AGx{nC[[=GpP?E؎Qo<R~MKCm5V??+-).zG[+SR-M Utc$كͨQ؇y3~G[Kc}MUyiE"þl2E 4TInL --r x`"fZPY[}3+;'"㒑nL}t} _R|07#%`@Bر2ر_/T{9O9z --Ri]v$GsbR))ިI!mw۝& uQr{fSs{ߵZ7<Ϭ~[W|54@Z~qa^/?{϶d#A}Fd;;[>ynɭkWsx t> Bl` "L>;=y,ʪX}S㲅V?"K˫`!~wLPPB@ gi7[nr]|=Ab$>:)V Ys@z7nտp)&!%#ʵXGO[ ߑ<_RW0BMPhf)M#bNʌQ_C65?~x͢$#j}]j* !J4n ~VDxPR_KWoA;oHhnr:~_N]zY8$SoZǿ[@, zw-N/~|J:~P&ԇB!/Egєz o25s(20K_(q->$:AzRez@@O{:lEy9P8}ƨ?PiExM7X; #n`BRBOCZ|B~UE) ,6b5)Klt:^pҡ?}O"tR!G t`/0֒n˖jj,ǂJ3!S&MQۀE44`BBaZB[ȱC x<ր~ piov%^5їh%{ՌbaQ'e엕@ٿK ;rXPݻ'YYXMe<%I _EΟԗ8 vZqzWGos@ ݊5`S?}PE ߽g:å)ʎC2$4"̣)!EVG+"s@KΝ>vAj Rċ-;l3#9RT`\!o*ը߸^m(1.*qHF{&%H}S'N$è/T_P:7wrտIm<~۠ԇAKFm-Y&|V_1CU̗2JH}MPg^`~/߁FP?#%!&"9zi/VWlXlB}Q3[=è/M,?_SUqVQ!"-щCe%h --KQ(՗eԗ|V_Em R7 VbdlBx6y_Y~Vqaoi)Ui7S^nԟ*0Si:V߄elr& --o)귴waQP)%7_HM --Է17c} pOez^kWs3y1aCN=\A}Ԉ-Eo>C?>T>^O./\clfaL]X$l^&޼{5b6op75H8#}c;ok oԗ?}ԗ"-َ|!dãҲ --~pTPZͽ2~nfjbldw6fkVBQSACAzGb/e'Doomݯ,/}:{9o[&iՇVNĻs~ÓUwDntąsЇx{7Z!8'PXU]SGg;nr+ --p/F~֧xP^_ol,Te(>!gǒsY =}?C,ޯ{ּ귷[!~VZR\T8{&G6ohʨtEP}\A_>homj{H_\x%'3->H=>\6Xl՟0?R_& "G`GQ+M?MNa|eU )˒! >MeׂM]}T}oFWg&F^m2k*u?fzmoi'2 ^>T67C,ŵ+~| H'̓Vv_2K8B+ԇt LYVlXhn2/;/?{b㊂E1RE$1tPb @QD*(PQquhsNaf?x}z~޾ n}ۚj+@}1AX --B}:WUZ+u#*"A}:Ws!@}fFvdm흰dz&~o~}uݒ,|dޞn`cA3 #E:RRw Y @4JTB^GZǐFM_SA# W >憚ʲEyLx^.9Mt  e gIA}YB}EB}]#S.^1켂e5 ͭoWxPWPb$DG_%շjfuE> --T*>īϕP^a9x\c\$!$$GKBg$oK75F"P½nܼm;nWuݒ?^A}+zz۫^G}&{f>ԗc 7!b!zSKʿrͿҕo@%$Ϳ ?eN_CpML{}$ϖ_CԊR_zGF` >y~S}Me‚gޮ|x9xO --E~H#=B%uJjZ;vYcO^ w]h/Iߎ>vP>| X)aϞ:H} /nڠ^S%S۬׫oN g/),B:@޾/_[6oI_rjokAg&^UF[KSC &_"lP#f('(C\!K&$gNy8u"$ϠԗG=cA}PيVSVŎ]V8rgqɩ~qiyUm#xObԯJKy '~!VwlEBPo L,lv9x~T|JZV P'=h&k>4o*/-3S@gN~ȁo̍ah)<Xf~E/5y}@ |RAksR7r̤?[[ ua5eKĪ?RE}Bz 蛘[&Շsf{Uu=ƒ7|Ý߇ޝb̴+?&1?EK,V_š>n6luRKD%կ5G4K5 sTI(P3HB;75VA+0b$^ggt>'{ ]Z>_|)//PS)Ǩ1!$2/ +B#! cOxOOq8ɚ`FT&,f~E/%E>>X PX_SY~0?/;#-QDZ#:Y:;PS@}93g𖃠ZsPded^^Ec@q1,":>_Xr^u=ROIkKo;wrh O}+sc]H}5ĿODdB9R}5.}cs+{eɩ}l^TRMa~N+%>:"^ 6<?G@}~=5TQKID'ݏon(} ;x)Ow{lfmި(/]'% 'z --hC h7Oo ~EWw cP?#5)syoҺU+?¿3fΞ._z&glfeㄏ_  [voYUm#%U7AzaI+l#!:"lJ.J};>^PvpZp/)*b$^s8qD6FCHj#D% >8T^aՈvwT?<2&-(]VQS _7B}wK_ԇ3)vt3#=ZU"-/ꠄUbPZ%Z۵v|/]Mbfd[ [-{%C( nANNks} Ě\v:#!&T>G[KSC]mP"ѭ,,qN|PE/5QOFBQ~魛pDAOx;zh.0Ec --ڌ>]WPvCj=/rP;kdJ]ܽN LCW4 u"ܽA J`^v:318wMt::VcuqnP%ԗE+#8~~BJF.ЌGݎ ݻnˡOv62k@1"Bp=]hFzJnI P_4h"՟9$GE}@%tomGQ3?w.4+3c͛4Ԕ!XQcv\[}y @ .Z#-KQFSM-i>KJ/]^ 귢n}R޼zNG:ښUwKK9 ._Sܘ]}edWgE76srSk 9һU涎@WC#ߌN>.RڅlĬ,]sStuYRH}) 쎅vI?w A0ۚUwns?PPZPuU(r2kWCEcyhr՗(iSͬlݼ=u5.)=ԯe6pd~/~-Rԏ>}O޽X_GyR|gvBKS56urھAxP_Kۏc"t~qAvzR(B}hʌ Qx"՟G?2jvYozFҒ¼X>Q| --VAdBfwr9W0u5>9=nem}bs_?K "qsғc01wGN#=j=r.#ׄ=rD<sӆ(RC[Na#!oigT-YTz#ZňlE}S&uUeEVCCQ-|R)]A-# h?`,&@˘(ᷫ~!ƍ__O7G)U_[Cԗ-iO59yp6pڼV8m贡iN@=;~pw676~<>"՟QgGЇ÷V1=7+->Oԅ3!ǏDQԇ_._Wmū<EKZ|u@b፫}=!%#^RVQhhn~?0]U|)~#ޝ[EiIq1"B]hFzES.;oЯ,E 329ꇄE%eckll_Vk ̔ё;=€*PçEٞ_fHg}l F{Qwg{[s#¼ث#υ -->v)C"X{"Woq*H//"&.zz *6njsN9'd,khi_W#߂Z}u --4g݈:rp߮:XWRA}'߹/R;PUPRUߤgdbi] B_5Z3/(fO>{oi 2SG_qׁH}# BAPԬBj;\}\Ad --ϩ`c]5_{Pboca2ξ_{_앛I՟ger.rӽmȚ"՟;zq ?r};:Z[Pux>Z h-\!P_Bj,EIUCȾ>c7f;}?$ze_yPU_msn<ۆ{7m9nFmúm|}<]hFzJY5RjSƛT,߃пTϨ[v 7+-9!6&¹S'?fm 5[P+OX[!aQL}92RjjEst(8>vIiE+khze_WM ~sOLIgV-Zpɯ_j2\?YÜ_&&ν? )t>? ߳DH<֋Ĭ,]ux9ҬL:j9 --M!~>=/+=91Ȉ@2bD,s!r3x/8W --P_WѧY:::~6L ݐ- C;Y$2T%Q]J*Jb(ZƸsLs_|}mce>^.>%# --olwv#0݌ԇϺ;4ݻ}0'35!V_^yܜPK60sB ?SXZQ}ǝϐᏳVh94NoiDd_8u|=]l-L 2a^n7L՜Rhjܬ)ç9v0$hNG[+3cvM"K@5A@P4Eb9%:FA4vGs'}X}@_^9Z*O?a9FF0̡S6F3 OmXXFчwaՕ׊ sd&/s"phHpoW';ks=m-e$EYD1kAϺ1Q0ϫ׮,YgK;gwF􍎃[X2usVw9f{d}!p_. F^vuL, --Ǎ&iAͳ7MOVqM7vVzB|L_?lֿ]Ϳ|Gt17G+n_<s@ǂBH}ENP?h/GO9)9 Yvrp?}{$v_OtLAÝ[5׮e'cks#crQ!پsT͵('wn\g%Ɯ9y˾@^.Vf4]m-uU21F0E}b+('/| > ү䍛^36T~_H}dd O$UK޹o&}̭;Gt9q%qǼt޹G޹`_nkQ/'Ŝ:vp_^_/NvVzZ[Ueń7 --rsnXnTԟMd8ϋ՗٬C3qt| ,usOoB-JC72PHR_AN --ÉG<&鵧[W"9yRr --H}=C3+nF_7өͿ@n^/+ϾɈ MgP^nRHŜWQ/E9~B?h{=\-L vlQm&!A(A[FEYXǏ37/gIy%Um:4 ['WOg4u)UuwO>x. '-V6,)+ΉcQbR3r --JʫnܾBE+ g0&4ݻ}0'35!=^nv,&Y[fb˦ EC˙9%rSKngVƤ>ȖǶ|.jbA#۬:X Qd$\<Tá!{|v9;Xtk*++.*Q>l˖AR||y60_qZ) $|u|'?o8Ge8oCg qތ>tլ[ ⇮o%‘&8o 5TgY yR/xQ/6I"m-͌hڀf)q1}׭]賊RL/q^BsBRr --*jzFfV.~!#O%eVܬohjma2B৏}ϟvwӛVdg_8{P„+b‚>OɞL`P_PX Wuh&h)UuwO a^Λ/ ? 74UޞGoT^+JKs:2PH>R_QNÅ_GJE(JEi&B t4(JI pq|~-@EhWZׇSI)"AQѱbAU:@)+v IB*.JpGEI6s*y>d&|9H̕UF-_ebfe+ѓg.D&faݽHTw~?R/m qW@cBwo `mnr#}mM5P_AN/#e@}5Mm}ȼ{sݡ_|ԯmhnCփݷkݾYV{%ɣCvlrw63zڴdޘF&c |. B__GW%%fKЪ?ZG}|^iX@sk{g/, 6(b\t cEVbHWH}^0h֋ÙI!31P$Vܙ?~&\f4p4t7\ ;D"qu(;l/"ao_rXe|@_F --Gw/d> 82r י8xxm'ިx㽷&^Ai{Iΐ{/l2C=:MUEY ԗ@>_wB?i2?}$ --2aon}4hұp MKC7%9Qp߄y ?oO A})YOޏRD?ʁ. --+)@#HAB_7\iP͢b%jV1Xbz .mj?uRt|rFNA RɳNP --;[} S>R&PZfjb ȁ};0,Mt R:¨B#g!dt]}cS3UTq߇'BQ|~ueyIANFrBs@;~ڲu5+jiJ2Dho|KhQOR@?P/ .]>0WI --D'JpWP};~脔܂>!g8q=?Au̔Oltu4%˰ -->Ǩ#C#ЦDhf1 )D]}or2B/p+A׍˨ 808 7';+3PHNSd"3gL#SSGCO GDݚ˙/& mO7S񨏊yڌ"bsJ*SVQ21wrg --9_MJͺVT[?OW=/}K[KC-R8?;j\ء=ͱښ?E#{jE25RR:w5=;_҆:w;V85n׋Ӯ]`̕ZvQOG/$~;_sw@_KC})3מ[9l_oݹWFk¿qm?/wѶ^Q؅Þu4mYg](9PNk`uu¤YϚuuĬI fׅ~:Z#5m9?Q\K"fr?}?np1Ob-I.f mb?uRt|rFNA z[ڞǡ;[}ۅozXsZfjbL3'طs/t2C]*#Thg/'H}AɃ~XПƉ --}Awҫ --K/^77>ojmx y˭G7,w^CXz9b{|eoeB>tY_dJyeUtt,mw{zG'gdॷXzK/P/JK x$RcNm&kT/]4_>?Y;7CX|9?,a}mv;ًp'N3IRyV[%9)WB=]ľj --+-Y(Cg?;U {}=Ϻ~2q׏PԗSPV޸YQer,1ՇX:ښk-Qqqu67߼Q[sV6o.ԟsǹѰ --*8}#bS3sn}PS^pj\>> @_ۚA녹R#._8s!/wWG[ȭr&7|+߾yR ƪe.;/ň~PЯW]FVrqol-㦟~w^>>:68Α1 wtB\bڱ~#ln<>y>(7lg --T'Qꏉw&x}ulP ՟ --]&2]ls غlAtUĴqgW8+U5n52? 8ڸoAz/8 5EyYiIaΝ:vw.۶lٴNK}ҪHKAMR곡?~c~FA2'o0t_R ˮXZ]k-[pr{c] --_\Z^QY>Vۈ_p1H:;ZݾYR|4RszP_I'#%)4R2(z]CSK{ݠG'gdܼ}OOC {ajoiEg']E9x`vez-u"B"pz=J}A2/Ԫ?#<̕WXyЌ _\rzv>Ư?v>j+~>!I˜9ojjcBǝ=w$^ +!xx_9yșLD=J}gC_bt'QXc$ 32upq --SPƱ^yϞOxqrH՟''v9IiYy=r 9ۑ֦wn]/̹}3'rwq27ۼQ[SMEAχ#gNgO-(G7D@)G8xh*PT47n76uts h\DtBBܸ6q QVPn̴ٍĘЋgOD?J}^_P[- --}L,]JiM[ LnS.E&eWT4KoT/BbnMܺ^s-%!JHHo󆵚j --+-Y(Cꋉ0_/OFa%i2Jye5t̬l\ --Z!˿r[+#VދʊaΟ>~nN-M lZ$/ zB~5.9=;{-]z ?}[/}]MuUn,)H -- -- `cifa9V/_av?}DN~"?NF?M>&3^ި}GC>Oj1}qWà 3»ԟ3{/bQ3I3{'7 cx{}gNy\`9VplTSQ[t|3DsQN_FxrU+>¥o O}TXR^]v|y񼽥YЀw=]XYi۽ci 5Dvx?ևRBW o&ЇcHG+Nlf黰ɤ|xմL-&{ KNR\VU؂/0,8^Q`R0?'#9>*,wqKS#=)q2Zߝ?'E%zݖ!{|rԇL~lӪOt[PvP ;A~<jXJy'QgȪ?2~*4]~- ĸ)P/LR-2eH}n> B7InSPRV9}#' _+g1 --X>Z߽skjݥUVZ#e/9-cw?ތwNxkcvH_[]EYIANFRLDHP{eKc!<5ЇH_/;[j*"SINQ7H}7/{s|톧PxLBjfnAQiyu}RwP/]}T %8 W~sCm峧f%F<|1 ] U --Π>+xR[!1]oz<^ }d|GC;ۚ+J --Rc"}n^qjzjXJѧW{=2n-^hsm͍~YI}㺫B+T/H=l98E޲Uq^5M]C +Tw`B"ҳՒuwp 7[kr݅C*DLM qٟO5; '#)Qh?7J!"˖sY˿Ah&r --J*2;r*,Ng:3:=pSV$?;=9.*4y;+KSC=M}wl"- _f5JǯRaRv'WChϼlkif%D|ׯ3Ž{K{IEV32%o`hT\rzNⲪohѾ͡'hA%`WGkS]uyI܌ {_t'6:u@EyfMH<_޴D?rg|_t{a)9H֎miGqHO0?'#%>:,8-Czϣ_: jf(gE(ro@koi,/}$?7+=9!&24.lQhC.w {̶v@}1Iz=._v/1{=h9Qd,Mu "٦?ϛt .{vn^# --&C?MVёwh{_u?oomjB?JOI G\.9AfK&e}Q --iأ*n^>Aa1);W76;z9nxz$fVT7;@?6A!)y{KCm%0;=).24[nNl,L u5RܺEZ\ϻO| :/*.-Uq^UM]C +݈_[mC 8R\_SQZTsh[eEgӣԟ }~?5YqaA^vFJblTX$r"[YiSaRe1/.44t L̏!yVQSo5bgط@憚gO?JKA9_? 1/QSӓş1ćOOWgI #COⓟ*IN/8uam(gSꏍ*UeWg{Kc}MeYIQÜĸ({ˎؚD_C //+-I`ì?`-f_c%1?cijzV6vx\v_1]r>͗ʮ'QvO57QeW^FJ CS>^yt9@}> B"b2 --JphYN>:u~}ӛߩ:IO -- tqKS#=-}wl۲YbF kyVsS/Pς>yҫT~P[U^q~nfZR|txH-()k#f&}=;(vfH_Tk_vgU)S"dC2<'B$2c(2gLD$\-n:g|{o{o{95ٺB}Gz FW䤃CPV b\G ߒ©zO}>ؾζƺ̴بWx_locajp --87(G벰qpr\Wt]H z#w:ԣ>zSdԫAKGkoej\WB}+~=V10Į޵`78 WN\˯u* --s3X~kү#.,~ٳ{qߺ©ODL0=>6']+JS@AW=ݜl,M5UEz30=glnxՠĻEeUu>z>26>vtu.<aB^noij)/NK v咇@} AcG2<Pb&Pi@{OPDBZNAY][qށaº}_qnvzO:=Wz'.2Fe/wWG[ c}-5e9iq42Q8@D}J՟T%0Ǐ4Tna17xzsq43PUЗEIR]",ܽ.ai& P[Ozdq[_PF ޿ @o^⼬;nas0&ABo]Sفg @K 4 |05!QZˋҒ=|v'S >}RHGGt47Uf&F -- t|Z^@_X87Gpo1F>L1^D}fCGx1V101_R^NCu~[Eu)T>~x]AW}=/u17RS:%+%.ˆ{Nm x!yгgdn@xv"h<;ڟ/+=;%!~޿s25PQ:rPU©OZ'1A}MEiQ^VZJb\TXj}1̌ ~އCsBi0/ L[`HxLBrzNAiEmcskGwW} mm]>0Fd|l$P07#%16u:Xj*H bcO.շC{`' &` 'fDLBJFNai%@OгSh d -- 0=59> --v0'#%bz`Q= \8R+1( bfGMUz --}PWK)b‚y`g%B/,Z'8B&dUBKya5?Hnļ҂䄘%53%qhPLmෳۑXd'gTo{dwjk{H3Dvʊr3&wWG c}-5e9iqacG0eFFZ r/) aB{CK s3Sb#ozysq45RWQ=F };poRCRDĥմ-l]ݽ.FI+󑱉ɷ3s2E1xkW.ys45Q?s QyL{v(Gy'X~w8ArϨkX:yE_R^ ;0L70 v>/|87;l Ӂ']mW+Js;֍˗<ܜl-M ÷ N}f@՟?9> ĸbvVfFJ --'eE0hRg.Xo#PxW\^]6- ydi[0%yy b+/JMgaEWBZtw }#»~q+*۷j÷MAԧ1;vV:*w{wbl|xp/$/>t!jtIK'D޸lomnb|Z^VZBTH!6NVAv8$eU4t ͬ]]PRQEw ۚErѝN@{EywE]twu0RS>%+-.,63bb,lܼbRTm^ --ߝĻEeUu>ߝ/8Xœ>ϻ8Xj*H >|!6pӣ>R}A0՟TZ}<~xcqLMEH)ɞ"/QZ=G,)mڑKlCT76̝{o39<9?~[6ympu]gm‚>{8~<ԟR2x,ќ &oۮ}c]H[PR^Upg/x6}㠺6U_/+*~ԁȝB|vVP` tT(̠ݖ A:Iz| 2M]M-m<"8{;B/x,wlct));1Bu6bzV^aiEuݍ֎NDg}@c)<UeУꊒܬbps0Y}}ͣ?3(B!;D5d^徙moP[U^\s N9Z5wZcC=m UeRw$Or;~1h1νH8}fN~ʚFh<vϛ4D57Tgg¢9-}6np]olJ:w Ǐ/(K>cCaiYA<}C`ra!} 7g;+ +YDvA>*= Zd&e-r=-;م\%1sU&W-]y03IEekog c OC{K#k%ӃHCǏSyd#:Kx@EᩏYAq@+J^K?}pm6Нm֙W} P}QV} --By*j:FL,iNtk .]-()m{i8ɽ W3RΜ<}`ODxtZ˖.Y$7ј_?*`kXmjic?8,UӤkzF]uEIanVqQwo fXZaɝįF|GI_U=(oT]K,fmi --U_Gsb~՟1_Qԟ4L!a%h}/gVThj>{?OJ ={`&Dҫyӡ E tsDxxk2:> ;~7d]0>bH+'w9 Ły@v Q1ُ>? aBk*f_߲ٗpsv0P[ --qƪ4FR/XBJ0*;¶]ܽ|BwD㲓VNs?8;q[rvmdНhF:j@}9@}Y| B|Zs+;GWo Bv^qY[5mӾCeiz=mu9B --Rݣ?%T38(~oJR_YAIyDSWB:um=X9{qtlbjfnai՛w[uFC0Ɇatxh;ۚkUe]H;sؑvx{8YA+i ńTp,Yf;r --XM)&eV]kjziwO{GėAϟR t#w5a)Jr"9AHl3>ЏdZg}4yOMj@}̤G>Y62*.f.Ppt!+ Pw;8S4d@} --"CbOe\S*+sdIUy --JH.8{£NKH),ro6)(=eVWks㍆:JЏH --a-f r4{S>M"-A:0.?s>9b~qj;^m'QpGP}@@}H;7Td&  ڷhZ]-5U+I!fPIUȢEXdt --܃GOAy-{_VR)'GSG:,[,)%RAY][`=D~SPRA~.#ckoi@+1=| Pua"B  O E"b.z:zl K\i^.xIeNv[6ݣ '|)$eclԎ+?Ba! _|ԗ𓎶 cԇ`/ɞCSKŠGSTۼ{Јgb2s K+޼SE Qx$A<~xRV} rRw6g{+3(kVk;8Ro?ن Db(8&# F\RZV^QYյD>2>_>~b t?1: .תʊ.@G1Gb[#14U'}HNOM 4*rP^:Pa1ё`dOXfPjk*ݺt0J\AmL}؟# ,قs'++oVzt!;]s[8L}G{EҢܬĸ3#&fEC1oPԟ:7,9X aQ rPu:61 |v1 l@'O2>Gtu171B I Ee0>E DP@7Tz0p._O7';+3cuz1-@ԟ;̟J}< --X-p-_# GWOEFǜOI۵ -=yS-X,y@n{uwn^,)LM=ov/(FQ%`rtt0F}JIMKGL}AHs )9%Ё_j|a1:24j;|96>y_NMKo| --s3PE'H_ --JAVQ;9A}1S\Yao_miZ9N?qdlIڪRSABL/r1odjni 1;{<>)bVnQYu}k=}~#c?lwn =~8rzjr‰#1ё;m1t I̡`CnUoQA6 1H_Kl8CYR N1\[ܬgN;|`_dxH&:`V+Aq03/'r@9L}9E_M vN3嶁+θ0 LM0w\uy#.f m ,R xQmyH+*ۨETAaĝN:[XVUߌOO/8#v:S#,8%TGTDH(?lR(y0 "P_4)#+[KS]U|3Sq1{"Bܜ-L t4T``W73VF~Pnr>Q8g/d5Q){ɳ/'^Mb&Zn^fv֍+UePA:ػ;4~P_OKr[>v>pn'0m]FNAiemoW d3؟< Hb^YUk+L-m\=Pxn[Gw[CVpU ;r۟n ذZJD -- rB o xU4u X:>.T6s?Ļsd.'w]^nF:j H)AfAꋢ>-Dc}t}H^4Td^LMN8y}!feKL`Q>C/y!QE齔S[v? qaN}{Ɛccm./ʣ R[}m5`H,ꋉq DV)SV341 g/.?)Do3Hr38xݡ.;,L 5T) NdwyBCYQA2*+ b\_]^pOH?NaVYIBb{+ --eҲlqq6q^si9uMTQϧ^)@~^ 0דމ.?L 3LDR`"IA --X.^( [ፄ=BO0v9bX] --rt07 dSqXC;o%dn}aD#aG8R#«c`ljne+rI)rʪ뛁qtE,d(Ub$2ۈ@wgЁ?lՂԗ!n9!!}$ꚺ[Y9{A'~`nwpdlşw8/+=HL4(ն-*֮Fwc/ZGQaA^:;`HO'e?$dx6KmkVcO`}JdB;&EKqR3Ė#'q+jZ:}><!{ !(eq̖dDNM@?vWG[kcMEIK-g 'r%Q"0M}}KGܒ:1pSӳkZh#!FnȑGr$S#KF} £Cl&|1̈́y3C}AӨOVbX9(PYطo^oP3SÂ=\lo512PUٰЎKr }F !E8)YyD8U m=C3 *Q^ &*cl'(EyYShcinjRS^%"ܽo&_.Ll\=ŝNJI-,oz^l0 "K"OUiaNfڹq1,Ł/ϧ-0Qg.FK(ؐ{P" --H^ѫ%v*זIrgp9֓dfzֳTeL؛_a/bƃgL琹&_ζkزȒ}OWG[0]MJkV"d"rs)b 8vu_OvWZc GW/ >[R{22ly;p\Awp b%y܁W[ϖ(¹koTWQX%Z>^QJ --PQPV'ޙڄ s O92 #fTW]YVGn m-?K/7ǻPG S-s --zW.5ֱe?>Ug S#}-׫(ʯ\RT,sQk)*ߨkhji{#)%5}7{(tz-&Z@gNdypopMՔDWb-d;A*@*V!?hρc'NVT6u߄g?/^O&3>:~s%N8q`OP)E --h6C}^?ܩO5K_Tٯd?.&2l?/7';ksC=֩)+HI_ --_H `?GVwhfm}Rk@k#bg:CãɎGǨOpcC@}>vw4Z$?MkqxRG,Y).:L,lݼܽ?gjPU8C --s3Sa EYiIq1 /bBf:xs>UaDL*}Cwtu236݊ +/B_H>Ujr\bIS|36qp b@kO|bfܻ3~rS}Meyq~vzJ⑟޹@g UE)|r ܅ -- TvTӲV5\mM@{ڮ4U-+JONTv.TU }?3R0Ub,%eܬcGG?kci@GkUb}e ؟M=nxa +ۨkhbi捬ں>7ԧ5ɷSVÏm* --j %\fq 4(\@kՉP \@㏧f>CjT`~I*N ou\yIMՔJIE,^ /!8C}.4j"wCÍd6W[k_ --r2Ӓb" rs05ٲqZi$JS؟w+ Fٴb% 52s s U䩂Ҋs ͭ;o޹pϡbPǗX[jF<#pƕK/ XzhLVf4AҨkM2/CSK;'w %: Phxl9m>P,=[/]:SJrb p 'eJ.p|c?32]^zڡȍu5ۢl舃|=ݜM UJI^) --9̐gd3nDqtUTذE/0$4,p|RQFwޚjU8AIujJ2kVY'Dx\!L4?h!2r8 [G7/tOt 4uXt,S3XN 'P];\m,L tlX$7-@c?3awٟ7wot]|BueyianVƉ];}<\̍ nްNMYQNFJRcK~#J͒ ?F 1Nˢ>DƖm]aOFƞMx9 Ϫ'|$P1P#?vnt3FtPU])B8-?崳?BPAE]s cҲrAry'rF}$L}"gg$6ܿoC;KS#=- $,( M0c=3Qwx죛_n uwܸT_ SRrp_K3c] --} --}7ҲJBj:jO@О1qNuB-@<*yʥΔp@pp23JSڥcQ6^D9s9AvNE:~Gc| $`Ο=aZv2:stTVK=!dɾo( --HF$Qķ,YB.Rv_KȒi63|Ms=~yӋ5`InٸN@r5G> as0֖kE94'Bxy:Xؗ,h2O8Q]#`2f~_టNIHI-(.k7J*KV(/Bjb|L@?ョN&zj --sFx;h --ZOZpFa1IyeUu-] LR&.![XR^SIAg/ù#h --N,Zjb)P&PHO#Wa!(/D}e5O޿7~fc}mUYIa ZjSǂ|:[[hilUQO  -o5kf٧vO v5 DťUqLxFN4ڬ --̶.1[$~O36zgLZJ?,~VUF+!O\U Ҡ$ V.`FDǞKNȹ\\6~2oѹ<{GhXWUV|9'#-\lԉРﶷ6gM&@ Qh&Hr ]i#3+{g7OCG{z GO4o$b=qk4 MtDhA/w@3 𣨿 >\8WLMhmi^WSqJAnŴQ=\m̌ v +H --;ؚ>U?Sd[# |+)ghba?83 )9DMq(AB' &z*^aڣPh=8Yܱ}EY)qM0پc'w,8< ["⛖ahcifPqAhV@4_ .& #߲ϠN%Y8@CH^W'[KSC=m6(%" N Eb!<<6:PST}y'(l5M-m~ P7clI3Sc#C憚¼ q1,4ԔY"UgD$J$dUյt -l]< OA"2s JʫAVfi3 }>>GN32tfSCmUyIQ~N& }txyqv4ݥ +%!&]F  --}T_ZV%&-oln۝-Wa/feٗwv-gP}0g r3SDGpq176RWU`['ȇ 0O:`1"QXTBZNIen/\rZFⲪk73w>LDA;hmU]|.6*"4A/w8s#1(/>ϑ߻;4vFc}mUYIaLZj|udxhpV%y)q1~@mf9}9e7Oq Q_@h=VRVAYMC[ѕg3s --luG'bH}`[ --a>ۥl'9|`n{kZ{5%DPe"y9x4Ed$v8 qG"3'i) q2!}EY)Pg=Re"SLNEE,Lj}?zwpc0RFzJcA>]M whmQ'^Qgǎ5>r-/ZfUظxxdL|bꅬ’Nz i/Tg_Oٙ鉱ѡޮ[ W/O9~4s$` 6{őυ_H%ZR= 9y*.1tF&f!,4zW[ SQZ9 9loEfW% *\z}t_CyY`F{;Z[T\-.;:}m$6lBFm=U?qPQfX\AXLBZ^IU]SGa;a[4]vbM>\{;kRc\\w4TfR͆AݿPWK]MYAFrFk0֖3ƭ?b"X+k$kh'_O176 ËE0:*J HtDeǏ,ԟ``M Vf%'/>q@}r%vXo( ٧?㨲 ݰynye5Ml.K ;՞"M"qC}jޢYQSrZBLdXpr* --{%DoiPc,ObEojEq@t q.t&":>9=ӮC\UlCWr^fjb y.d,[Z\T:e^/y4g>x_H쿆]!?2<~zc}meYQANfjRBl cnF2j --{eEnްdl31,[b*[J?k P =_TVUH O"s\ăၾƺhN$ԤġꡟUvA}d9'*Cpw --I)jzϞKJʃuA@=Bԅ XqPomj@1@_/7tQ%(C+!!d%D>/M٨?M$3稹º鼍_WSYZ~톺ZJ{`f6 Iemz9<ȑ&ʟL%) Colnep)=P.65ԟjHe{;oc-Uǎ:21PUy{&8,"!. Yۻx -- [HΞ~8c " hj2r162<$5$ ]͡ 0ԟcw쳰p?4oqj]uE)ĸ舰f:U߶?hӳqY4rf KWVdg.$?x㧈i0\aNקT >^>cFu\k,e1X#EH[B{#V/~dDpDD32sv >A: 1fH{[B.tГǏyvm~e= Ex;AD#_hJ}};tfsSÕ¼dA<\l,L5ԔHvGUQGv%SdE%dHZ9y --=_TVUH8dX&`Ll_w;l}MEqAvzrBL̾ MEk";y9\FJZ됈y Z:9~"W563'w6`txGCDvVfza%#-J؍ohţ?Ge`c,f.ڪԤب̯77Qߧ$V_h'/>MШK%_Pp,,ihؑ#0HVVw)6 u4ՔwK߀=".yDz>x`W{#=[o\ZW]E~~p1O7g{C u  GMz9n^DuUK -- !"χP2Ya#Ds?c wSԗ;7S bm-2Qa^,7W:h.[ ԇMxFЌXO0,f`+רkoٶ}[0E(ήA2%gop+C8{O*Ғb#BO= CF- Tef)qP3@((.\|jD<2N IL --Eeo|1$)lj$U9) a$rwv(2УuRSV$18؟R_7G)r0̝NK $π]ې7h-_@V,#8g1 --(ΛP°6.`c$R3s De`涎[#ꏂ&lkiT&SbϞ /449nzƗO˪GP&Eʎ#\69 ՗$:oש\$c# !v07:DmLq?`ZnwؿRW}H;+3!PÈE8Sq,qs3)b4u;wZ9y  MJW6\Ͱ(Na̰4fG9wmt=6 3!LRHQYm1l P=6ur WD#&_A;b`Jӓ}x{z\3Es<._3b.Y v8~ E49{>gB3׫>8#66ixR/ɲOQZgu!ޙ*#'!kT=%fop+_у!ׯ0OO ={˃ ,Tf4VWVAS(>{LRJlģFQDLb_ 1>G --ĄzG#Czz,LM&]l̍hJg$9؟R_ǰ/^aL$İ$Fpwq4E4cQ |bْ$b9g38[2byU/[edqe\ `x(K^G;Gݝ7Zj+EB?-1&ܩ,676ܾ@OG ,|9w($ciE --R"xobybcҏK}9RL؇KcCZc}MeyiQ>Lbl$Lf` ܼi5XqFHi2 `qQfje_`pȸ’Uu WKOc_Sez` G9Gkoe^_W[21t,b$ݦNn UHWT --RUt VWЏU(^EEQ U U0T)&=K{\4ż}75UqQa0af<[ hFp3ԓN WV[Uk56n6غad+ --`/TT_ne/({]GjIeçC5 EbdHlN}e+nH|ګ ,2̢"bӲ’ZfAbOT*t"F k. --rYCJEQܐ Lq/c ?zpԅy) >f(u)}-sr~d+ --2pJ*+V[M/d|PIFl?0 _ ѿDyjCmeyPOK8w?N2(zį4J}1NwHIv"C>!ãR3s 6u )7~i%EU?S¼PhH?"';+St4.RUb>wz\˕a4샥vloE(SY 6'X&\ AwG[KlkfP~ROsXl_krzv^QŪ+77ïe6>G}wv0d=:ʊdzF_[vr]-y,wc n*/hF4#e0#5urv()-+xs5D[D$FoE""r4ā@"K:-=-ueȹf4~\uH8KJ}1D<v-(u2Ϟ*=.E*춭 3@}-u+L}n?U&U}y bVW/Јtǚ:{=yY?oȧ?~,댉Ο'G[cS#1 "ԇqfƥojmvN.>U !kZN4-J}OdZl Ҡ}wz`ʐ!d$FqLԟ`9OXϧoW+Ř o[S2r --**/V5w^F^߉kWw' --s&B hG>`L[ 2@}O"BM"FZz+Mͭlv{E/.T][oF^oF_BvWGkS=3̸puⅤP5yyquG}1/1^{}P)PPXTBbi~eqi --df&C}Zs6zAYUtWB (ȲnrPܑc%,y~1&>"ki$ZYQV 9 nߢcS_ߍfa7bRRMSx8//ЈCXJOjtCrوD![ ɑA=ښY(=)>:"4r %d+=?)joi_/. C ?V}2TUC[p dY]"'g#Ů:{b@/[%bGz;KK'1locjt --r2"Z.GLLd_{U }^7rr NIr}sy$2^8~Jd$g7t#kFkW``N%|%OPWH}Po\jO>]+(ՃTTlb\ةkZ:n{(-xC]o6 Qx8 R׿gJiy:-42A9@9Z1iEc28,2&!%#=2/F))ڍ``MJ --e/ --acWTabsĄw>'ބ?\UԵaכ[m߱/04P|RZVSg\Nv0[A5?'#9!&2 }W^H 7WM5# ###׭Kn^tbYyX5lrcrdh;=mL9:]V|8'{6P% ҂ JN%|%C@S?y6R2~R@hiq/,0KjZkbх`e5FE_CLX]!<|vJғyJ@WS LANf0F\~Oc#4(,^#sr(.15XaɳUyW99849I>+F$'H0' '/?S~>N6x!FuHP*`Pd_xf܁8}T!z!%1. --(ǣG}{OϕWVQ#jJwoȁ#ag5vt߾h'cCo6߀:s07",zZ*۲ Fo EhR̘zf&s+[]GbPWT^ojk2/iG׎G|48/ۡmXH[C=3ARr?Q_<3 L%Xh ,ƺj)@!dPA+2;-(9X?ҳf󼕨!l?(,2przv^Qs\ps~a0lq(/HN w ~UQ^D *D%34Gyc704":>)=YM]aP/( (i=zGu5W/VV$g#F:j˖dQG} ZP>77Րzx^vzrB𐽾^n;dX2nEKTUFLSxN>dSFQomoEbFw' &_(yE NeSovac% d0|oDiScG᪵&fvdhpQqLϰ{|R}33#v$M~t,3H1#_O:4X',FP>!_{lXGa?J: aޮVR^Acp~yeueaxfpMVb,XXFDEB^E:)"  --RH@z;ht5Isν'H1_y(t@mʊXdV.\{|g_b HHZ#%-Ye}Zzf֠!1)jn7wt{6x+D={:ZoÇj|Q c}Mur2RkWKJ,Y4'_gy_M$o+N^AaQITTVATܽO7q#zh G0[5tu27: foOmŲ%$+Y | --}/K --\[,9|r|tD)_Xhh&[7Fc/E>VlէEThkU9l7mjT\RjFv^aqYz},meL@[+\y>).*촿|7◞6mYibbsEgk2U_%kHwݯkh7042칌 --J+XSCD׃ =|%tV1?tP]4 (3Bcc%37N'8ꏕ MOT㿠)+g4 --rc./BF UDZ7R:k`zq{wS iPZk5-/8_,kj+`{@-J/HZEEf HD}&-^ --KUuC&}#bRx AcVeg%\ --JWG{[ ӐSc#C- (5Hhn>ed3 ?>K0 0/B3tWo7g{aM1J_c+?y>ZSJE̝`oUËjecz5H[M_ݽ,|+5"k}:;W'8/ZZ-ܦ(/M/ۤS --KeRZVa3m57\¢gf/_c4O<ò²0/;3U /7G榺d_~zܑؠ?`į\&GGy:#> u*I --_Ϝ9#T++kb+\{i]igu --}U|/sP}Q'!݅,+au4;#=mYqKJ,M)䪾JKѹ-QIKOHH 7kܺ.HL u4ޡ nB1LI&GQ> 9|PuAslb$S̐M}nVɖC)QV -=C3 /ȘĔ|O5rVL/t>gmus^ۻw@۸ivMb%kreTUפ' 8":!%38ԑ`pH1+H# r&̍`9"gzO97sG@V}?{ RkWa3''D9#1mkZHL->ߛQ~FO]:ԞE%fdURډ!P7wAx bx/oo*e͹|Qxm]˨^73ɥR:pyb KHZNZm=#s+N2pIkhq % a>%.IKOqw?~!*J_n -ٟ<>ZbtgO} RrY<L lyْE xQTSV3aeХc^ -]CSc.>#b_-^US׀Uf)[A]67VWeg&EA#c27n4A&Ї5{\U^ZT2=(!Y\}9;OP)p1/p1V hK20mwv m̹|zeu]CNH猰mi*v2|xrBtxp;&:;ex$XԟB'DLtPOͷ4̭pb‰G%ffUV64CM§5=ܬĘ [kK3C=-'I ѧLQ;G =S_ohav^[kSC]͍+3RQ}Xmʛ`֬$ŕ_aex#L -E*%# R;2s/0426\zVnAަ ?r|u"빏|U𸨰~^v6VfFzdgCMjV'd*}az"N| L]Sc.!dx$tGO߆MݝmtO*r6Li/70_NU^i̎LȬYcD#c --HR( EH"tHE:\EP":48dw=|߽ߥy|?8oy~{D*Ⱦvi|(Q_'?C=]m U`/1@#TۿF2`/Ie7P`n)iZڜ<) CW3ş'T}W+8/u@OK %}+5ˡtSZNФˇWM2r --{T5t1=FW$jZڹ$2|ƌgLf0ai(ё9rZj+C)62,gvL싱R>BC8ܫCz:9pVW^Hz96*<$k#Շ@ GhYMW}4D[H1T_[,Մ2&!n=yS5M3mu-勑A^nh*QͦŐ%Ԥ'8HhJnܲmU>|)9z_I̡32PPC91+3x 4df>Kb|4N;8z )1$9h>^/X? wA(/'3-)!.:|l?D`(X\YT*Pku߮G3*>U^B/kjykphxt>VEVvw5Td\ tu09ȗU H*"3KH?W\ V|֬'ꧥg`lfe. fv^QyuEFK<.Our|Thy;4GBK~VRK/P[7y֦ڪkɉ>gܜ-1V} J IͬUQIP}Aͭ0"c/'e,U6pY}-P}Q --`ldd&jc]uYQ^vzrB\TX^6UQ>Rŏw!/a&p+*QRСRoP腋.syB|B SF_b\txHYOWG *VFC?eeCo>ϟq;ښjKFz8436)VS޷k}ay7/e4>ǎp:_ zwdl!<Ϥii,-$z!4۩6ǎ9%&%ҹ +J$7nr@[O* J*j:{aG̚wA^R9Sn&|+f^ vꤍeU=CiЇwC AFuEIԫ#yS79rHWK]EqN)9gYU_L4`Dյ ͬlݽC#7s:y4=~J/};ZC'\x~KA8?'#%1>:VUsC}mYMuVN/zdNTϗXjZ*7wUV302DDRTlBrzV^QYF 6_L[_@lج*+pT\K$pJp^@- L tupZ+Jr2Sc.=`gm3T\ KȒSGl@Hxt\brF6Ŭ;wGO>Z|2?~>~}@Uiee7oe&gDP} c`229y M腘KWR3sAS;@OLUD'kB, [oTaO|Ԉ,M]t*>OFv*&m --U4tȚ;fN'ZGHIHNk;]C~rc4ד{)*)1N(}KwC,Y/'_<O@U0-L u4ԔVmٲQoͥ,ɛMx&/%yu@[\XچWXx(Cibsh=X5%c<0<Ύ㗝fH QP *M*U@@ޑޫtQADlEClQX&ugs --!=szʊRF#M=z@WSJJB;\@7<VkHtyc/e;76sD)GǧdV\RYOqu߾[0ďC} "GuEy 73%>&<)OWH>5ܝ\: >SC0@A _[SUQZt.;#%!6*,@O瀆.d-۶ --coV}\3[U[; Wyihdtlr%4lM}M4ur@OۍW+J --r2a]̌*BsH*1V塹dnOq#Wr --*|ШؤbΫo5vt8<:61Md ;GL]mTwIK6&[$F]:<}sZjϾvؙ_THf e_}A"9 QWfJT￧?BAՕp瘈@SGX6>tPviIm[avT:3yP)WPQ'wE[P --zQGw?'^,4=x}nX4lPldI7g#4D7a W<U.$>я$>CͷTJ%yɾ6Ⱦod=#+? >o>?:^W;@FCp@?˱6fhnR\T@0CA.UCP=oD~@(2ԬsEHZWoN?AYUQZt!]M=JsuA50qrM[H*3:li@mMqI9%pvF?&$_@SPd?mMa~. S݇|Q_(C5LѴN=y@/W.^(/)JO +231ӡs+!*E\$,ԟ0~ޮ;7Te!Rts?babpPknҒb"46|;Ns=$B2* --_Px44hnAiEGν6{q٧ 'zm"Y!4. --ɾ koBaBP'_$n }SF…}]m2R0HV> 'Q}GT?:>*PMO'1R}X!'a~zruEIAnFr< ΁Jn;SU8NC!M>~AV [88Sd ѱi7Yf0߀J+J s3SbPbٷ%BX- | }<K) */(=Яi=`kmnj/CFZR/ȏo0<KU[Rf(5+"6Ͼ{ *>^cPMM@?oomBzz\vZbldH6S* --_oDvSs --] ydYjpHC}AiUݧl3]ig+4$ݔJ\ʝB!BD(rD$]GDlMj.ڝg?;;óz|9Q~R_  6`{K egI9pu7is@RptN?Q}k'P}{"cR@;ŪT?9D;Jltda|<]7bLT)G?ZgS_EeXT3o)Q +-.Adp9+Yw>tCԡ=9M'&ݡX@/-);];=9ŕ}X ABR$d>[GiUZ_[ giqёa~nΛ7Q[WW%>X6՗xҪGEٌ>d&`0QҪNѩ1cZ]5񼬴=HNm271ZU(5Se --MwB}Fӛ>jxyE%Xt7dIV2#JhGW7A=D엗@4#V"WE?dO>/9:Iwp S}JOLK=E_k&> --$, s_ȯӔjm$?9҃^S}-E#IsVGMfƆ/Ԟ 5YIQ)p9?TC}FGꏛ0Iy*Ԩ:Ԩ޲kmhmkwXCG1-zy]aZŲ0a?@@>{KA_\AMHH߽uo!5Δ=}kxH6 --0!O+OR}b*~2R5u7Dϸ~ p'Mې6_ZwRa}<\AMWX3O(tH5{T#{v]wx >hu]C{vEye+C WG#ً 'PTgB --k҅K --ѧ -- ou4_Y]П-8 1$E2О*@AyմwH8(l5ίt̩㹙G |olkiNT[KcLi42>ݤ0S9,xgϝOtZvϝG3rJWT^o.2Q/.mk:2(wʾ zyϣOqDlo(N/MN7ꄡoX!>J+H"~4eĠgŔG_dTGVlEME~7L9W^r"?CQQ[l61b:"yOC57hҩhsiwT1Sҳ,;+i['#~ȾȤHGXhH ُdP_B{HB 1{ "PWs2zXvƑ䤄}{C89ZZp?kW DOIK^TSc%T% --ROĴWW}PwݽuZ]e$Rc"yl01ZbKUK'*L@/KzQ_C+եxTP'*MˮDfIa)RfQSOh+I"T#NI~J?Y=gQGd[oCBT\8Svd/3 2hkeaj\ i}C#כ©|K$U b#3b -- !\zU&eh|6wXK1h+4?#XI~d_U]s2J]=|vڟ J7o5Ӥ}ʾOW ?F<W'넥ջtIQAnVzĸȰ_/׭RkWDП9 --W Зㅾ@}'>շg>T+WT[LR`̩㹙G>@tv&O ̞TKjS V[\#cg,CkYw i[=FY?1Vُ&@} sU%[NX_[uY4Ec h>5*}@}$J$PUȄ X KNŪtC/lD/.7Zԃ_vx^VZJR|LĞ ?ow&FW,]CI;Vѣh6p~f;Zv-Ll;LvSKW]o}EHj뛾+e{W\}J2e7c?#:G x9T6V(Ű驇#Gz89XoXghTo61eŠ/#=b? ՗cT\UU1/N}⤍W* --psv%_1TPoJ0YW_'NUW'8jE1DM! ""**" ( RQAAD]QT jԸMۚ3;==x`יp={>gMzV^AQIyeM'\^>yCM0۴7w+}BR_N G|J/`7kw*-.,HMS4wٞL蛙L6W.%Y*3ObQq/c>H5%ScƒHm,N@*J&U(ɜQ44B5 --[63'i/S`~l)T2}[~Ԗ`I/ }LRΝn:qPꊲMgI"Â,hgmABbܓG} &H{Z yNO>L6!p3"m=x0]۶`4%ů\C@hgeNi&jGR_%;X0Fbi@k4 4bEԌ<U>~'i_DZ --VW^1qt1i;r --~=9'CoΙg;%О1J})8j%7@b(q܇ eT<@u]=- +ZZֶou+QxPS a{R+J}ږq9ԇ,߾uӆi) И33!Ik --C}<Pm؈X~O2ԿPrR}ՎgN4)t+~ƒ/ȥR ڿ| ha48,p&ܜm,̐T?/ --%UfRN8 Mm])xOTa2f߲^R϶w|yhduW؏ )73$ƾ<){JOD"HxXon.vVؗlL1"'؍bkТhQB}?L%=Roy^ʣ~=A,]homj`tڤa><]EukrRt(UVcĂc --^nOOupajDt5yMgΓѼsXPޞW|IrOKN T[J=)/?{K>~_P/,֛10m >zwR+~{Q QhDZ"'RBĔtJ --BFF}!Fe p@} n}hĸ %%(y4ȓI*-RC1M*lam#ku_в4u0 VلRJaJ}vkCIk= =yH>䦼uI1)E --"a}eO!-IP?#5 .ozwWޟz4JܓG} 4Ϊ}@&Jn-).enBh`sI"' @z 7j"BMaf \ --k`k,NľxBݽb?%!6*<&}<V+P R}aӎ:w-\CoR?7 =iI)zS<2B@Ј5eu,;??2 [7oX@V |q.\\ȫe< V VKCZWPTR^YSOk%Z9ZTo "p#CfU֦3bG]ޮOJ}>K}hofrM'B?VoߺiC6 }aH<0 1CChz~bGB_4kmI!mbٺcgU[S?~AaP䵙9[p6:[9x=bUTlw5>[j}RI}z0/١6UWǥ$ƱtDPOWG}F{RYPma#F"djamH[#Cɭ hkn6\K>(,ɆPQ_u]veꬣg85*<2 PAV"Exx>@APU# --(8,6ծVӵҴ]{s@{r3oo6oJҥgZy)t/R pE?Y&߹UOI}Oo=C_KHEi10am<Blm i; QBY~lE4P4XlF'WL|o!MKƭ/nO֣q(/+MQЭd9F#mqOÈ28ط? OOȨDmjFn2\/562?!VcRlcb*\bԉলpa߯2Xr}JKRzlGJ'%Cdoټ1R# ݞݕ7,LDO$-]7 QBRl}1B6Ui0'CUG[b^ ҇Kʒe'PTT~uWOvS cmת;wAq^_' --y5/Tu%`_Zke /FFzM58:D M _8R8XJB{H Q7P?SP\#>lO;BH%[JdYHr dԧQ'Qw CzkzU XĔTXq:wϾد氿'735E@*+/WRIR VŖSR|Sz+J w@bwDf@z*o>>DCl@Of'~ JKbYdD/ /(7KL.O}Cwa6,zԘRF 3}ڏ}VKc0j8,`Y෰axM2f&oM}$N=_ܼ!ԃV,J1_;уt؉8S }g؆$z3F&wI4^g(BW[(9K{w@)+w%9?p!V,-H};Gw>m X0?)RcFl^fZFgԚ XXa;x:޲{J>{j=*Њ7Z.|z1̝5"AFs:7J苞 ? ?a2P Ə3VK'ID_Sxyy;ϝ$:[;:2<$?=(?L/N}1{=؏]HS'?x/U(}tԞo؜d56,6#Lba`OI}>'M7| Ě gdw ~}<Ӂ?:Q" 袄0B 1>mlM:rauԌB>ZF{{ډ`j黒ܴqUD.N\©c؆J=Ї&d)ԧUϡO!{!e+[G8~$#?;|`P&!z[Ds'K!r 5ۃ=}{na[Z=2ggiŠA}B˗(qfx0nfL8N+[Ro:o0nšM7? ύ=^ȏ3Ї%E͹r^ݜ '' J{y2zr!49ЈĔ\C'Tv9}^d$'vl #ç,!$~yP,ɚcU[ǨtYE%减8}Oqk۱Ovkeu>.t]X8k`̝ ʲGeaB2nOイS_24>kWjQh=yat=OM=ңdЗ>c$ԛ !!/Y _\B/A#/'iT1Lz &`>]nM-Wv&,9߼?-Y}w BHm"6[kO+ĉmWuve7aIC}\acl_an^Dhp/4!7Q_ }g!@lA\ ?id,XLФeǨ_]`LۙBH}g?a8\H}7 "_Vԗp^ᢵE%؇wdU0~qI~%ߞ-#\8l~vp\Aq\u%GW=uJ{9>j/>.ƾ g74a-z>xp9;<$Sad€$H$ Է.D;`[S'wg _b!xE%EY$U ~*yApRtwv%_M+o°%OLI={W>"Wڪ3'LM$u%]b)]-Vs̙Vg]>S1M}b9>֍zb =A(lA7)< ssNҀAC2;GF9%R/SKk#ȳcW?N ;^zȰ @}aé,}qصj}EF`ΫЈ8d2"%oaJJ+,y}s%ٻw%y5^7L2sPt[}k+z`vB-맾mS.$hn?yH`VNc vtb=ր"v(Ǧg!?Qb3hۑ3 1vلTk9ť4MxzvQWgǗ ?X6IVE&#Jҋ ,(Q --(E(]"8 % ݸEƒdc$?;3"#p9[֎O_]QhU^VZTo'r Ưc>m;'n¦-.%I>^ݹ7}7^qdqGV89 (N ptZӧ >ѳ{iQR/v9ؼwg- {+Rp÷Ϲ_UL:Q?``߀aQ)T;*R| ^59ɧ3bQUd]v*YCtv4j/hd_􁾋2}5JcSЬ]hK?,p-[vHR?Rw{?~OuҼgG%nf''Jht~rPy5=tє*G Tq>U_"MJD,\UӰ~oʵ --īɫ~}ueup,]l--fU_x --? &fsYۃ{>dc'*4!_ ~'Gnn[E|XvP(n63 mKቤZ~|LdXw?X[ޱ:MiLDp ʞ={l9FU@wxp3Ø8J,d [տKUSz/*ڂ\@?|zsf4ÅUOEQik#(&7n#ώnkdd[vI {TeĐ[}\{HS?KAJc׭JK G?QeTqQs)&eQmhlڏ9w T Q TO߸nu~6:gdhb# {"ɂ;Sُ@D/۲ ee@ K}vcAW$Ƒr[@d zx5*\jJԗSh($6?B}|7Ok=PSI&{9H}4rz'(ȃGsY͵upY;(gu<| --UokJϫۺU"Zp:Wje_vQE⓵}m k894'y_ro݀OJdfZTBlɎ`)Sc\iVkĩKW>O"~<|ؿ E@0>wtX>T)StKGI q9D8=}= 鰃E8տ艆U4U=S(VsA9՗zzOT}w/%!1$hweo뚕wo3٧y{xWX,>&"d;GfCN7"l6mRs*x G}/}/o5uWSg,{pGotԕmꏗ>|Ӛ7!O|RjFNMU5}z+{._7o߻{u9 zT?U? U}UTbS}5=Z4"W_.h_{d;nCvԈ/c< [Ioik5v 2o%hFY){xEIb> --G}@2剨{s)A8ț p[T:dT '!w;8/p g --U4yvN`>B# wr nD?u]GTP@|ouO\wmC,LcķTLlj]?}&LN9oҠOeή̉H+7[e>ZHrP¾.9K%Q!A>@}P?R?)5CZxP{Q 큋Ǡ3 ReU?ӃJh'|qpT!ϕtshX7m2Տ\$W}iS><3_0~coJ_-^Eim״ >;ouϝ"D\Z073-Y* Z wu'oj>]o{WS:Ǜ&2WM --{gW7ꚱ YyEnZKW]ACU_x-|՗QoV6ϣ23G?[JfEל?ۻHv] ^򍐺9@x6.$v鳅r]QB@$7ž7RiHx4~~-G}eRO} --6& --/9m[$8q9q L̳sUۓʚ]{k^OjT_lAU<^?O9Ř --Cx畲o~PN WUdSڕK}ݝwQJ"# # Gw,b^mf~*!SK"C#c5Bpᨏ!n[ޙ uOpڞHJ pƐգġ9Š /08<:.1%=;Sc'ZՄE! ?_1R S}ꏕ{y&zedɕ~8/*+4nh34aQR" A"} \/. --.H WD\ "l""RV((b:1NƦuj3ts}*e>=W63ڽ nGVLd?{ww@ʺ COsn^YTٽÄ~pADJyT"s@}l.ZLRɢrc~R1_I}Ti&zfcsh&̞T}畄8fbrJLҊ&4u>#dZh~Dy&Z3X}zI쯦e_#D_zd eDX[UVRD7 &x,Ҽ.NLTŤ`'FU~sD(GGawR_$h:ԯoJPvEd樑3Q_iBLBe/v LeA4A4ohv<~O>ѩwQ6mR}AUƫ'e,o ~_oN:RJ%e{K)ه}%up,^DdAU:؟?ol }qu_o|D\Ӑ*оǏ lbXAHvW 7:gd D~=RZ8cO&ź@eE\P޶cC --6NiP?kꛫTT"5˝WbsreDr=|Daq6pvAnBnL7USKOkVTc@g}_j!W[S>ӅϴoYI\A&wn߲1>&B!Iprt_jkmv.`1 --v/A7 mm:?I0yT""U_ HCaH{,Z;PA1& W?wUПe1Ic9n`lX*SD&$mIݕfMWϣ'jǤd8aT5A;7\\?C՟;TߐSaвo9Lٿ8쏨}q蛫[UM5cs3w V --`C+ ccbޘRPRc}muxmVT(}P}@$ UFFoǍ@c~'_WU5ܘj ߚ?3 m^h>$~igKJ0Cã59Yy dMÿÔ0p`_Wm@%;{"/úѲO,:(=%IT'ۅqZks#EA!][b# ˃jeKlzAΞ9`&u i ƘW\tPӡ |}p Ł2ExDqݼbh7?ApGT\m` Qz@Ɵ%L^b4$͡ u/=MiĴ5 sV}+ϘJ?z_YٿiPBO/=έm-EYIѩ#;MC"`7'GV [~q8CT&m_YC~+R| t2bΖQuRHr}6 Di:EDtt?mlnN4ߦG>XE}O?Ӈ23gYAXYSvcZ6_,^ƫA2/HcH W fZ[i?eX(շQ}P}-l 2(N5xv Kè(-.$ @z{:/'v6 d*So,ԬE&Pxa8)6D*CeA\_(B7N= u1gI~P S6:OZf9}&rgpK52ax &`k7;.z=y̿pHFQ Z{)o-yXTH0!h,TRTT RDD cAQE@Ac6h5k]w={SGDQ2~|?w.PY/E^b<O//~3CJ8;3 }2"$Zp#Ū 0_HdgPGB՜,/-.lÃ|ܜ-@M FƦf,׎ȝeg:4ԧ>`PRK@}ΉҢ m-oZLH --OF?2E B f| V[k~!nI);r;IfD3cW.P}KU}Z Q}WP}A:_^KwH~/#(d_X3ymib J'yC XZL]mByP3i&bq~K >[_AClc"Bwx8۠웙3661jL.>+!NO͡.LBe]o$~) '.O:O#Q$bb0-&, d03.,.ȴ%Q'/RT = ?gWA@"TywA /a_14[=7_|$wBlTh h}=XC(bDe>ׇ_P'O{ gs1GG7rN;Xdhv[kK6`7EowrKťjҁ.Q(~bldP_7GxSZ%J9)1^ _G/H4GK˫jP`BZ9_)=[7e'$ReʾHĈ\a&GD=+lHPx8eibM U(ϜL?~o~uUcE l`_O7g} 6 OVۂo@D@``n1@P_?ٖz{Էdoҟ8HTU_?V]Brj7[:zF"a2X-xALI|uHPnTVP}.Q}˴I˾H8D"K=Dh4=,)"z[Cί\0Jl ?owg{m,Zź:Z˗-Z4O2M\dP 4bǭ>Yqh̴}{ (v֖ls>,s _ nurJj!-g[/M q L_]QQNDO5 eԗH(%uJ2nr`fQ xQS\RGw e f3Fp8 "&;nݦ&D(8#ϤC_bIU:TBFǠh d?`N>}.>Yn;+x~= Ms1WIPh}= ,r:O]捼S?]@k8pzޤA~> !mA<}âbrJʫjZ$&GvP_ Pd@dԗD'FIB"6CEKRŋZeTl"A:$Z V?-H^)]J—dO>ۢE1_H0qٿKd6r(Ϙ#{wvN}8j9eũ)1!>.PƦ\45ԗ.?WXS'O7P규jjlT(;v$?'+@d߁`mnfo#w@"unц. R>Cn?Jʲb~JR\ThRoJ}yrUʨ>JTLT`F&ZbBdߓɵY2:ٗ,c\n\ktqucG! fF_z4}F}ƃ H}>`ǭ9YY^z0/&Fdo܇gemwtvDMؽzީ3q{R=?PK~~M\_ K?˨?E&NY#WWRYH RKТAPʒ*yˍH".E/U$Rw`T_Rhe `*4n#K#a?E`}7uP{&јn$dDYTA:{mWr Dk9U'ʎJOMٝ --طG]='5N\5\kp2<<Կ(~!R?9>:,o --@k}Wf1yOA$ --$⓫V5@P:zDܕJ C5.QQ1L0Ee 1,QQQ9ˡwE^w7Alc[N4qs=Y3x\~e]SkKWo{ >F aUBUS}1U}'i0T+|>);[{KywrOZǘ O?}| DS{xzR\txH٘A#hA8j*P@;JaIľϣ~n~K}~{{;b~eyIaYq!DΎ}+ ྙ0֞,?ZP\^]H[d)28Pb9@oۼqP#rRO*2T#XOlҪ5*jkmج]O3261'>Q7{rlQ/Qܸz<~UT=.D_PC"ʼnҺ<eѼy)>M+ΰ¼SٙQaB>wt4ԡ.Q LVR˓" |@j>~;>FҢ39ҒőDEn|ľ9yV6v}~x4 E9e0KS?2R`>$#/'+{ @?"gCO"o$ϙTT\Re?6\E^~AaQ,mɾ$0ޝ^:Zk˱2R!>n6`<דR^@+/ͦ`b_HA_]YV|6){{\<;[k+KxV6v}PXlۻ.\ۏ5& PHW/wCE|G^f Ij-^J\~(ZV&\!;UDuOk4>9DrmV'QOEVǡ#OȾb Rw{3WȯKG*yp>dk/t77# $E{MH>z:j*kV)-ا ɱa1d49B7ԯoln!'Gٯ*/)Dُ -- ";]E~T3rr ˫j[:N`DppԿ//'EI>HJ RI.,WTU[nfz{M̭]ݽC"bɽU6dl Op\c&T&;b0>IT};#TԧZ #Ʀ6ʞR? #4ntCv2q/@_S5L>Q<;+ )^V_?>'* zE}TNxDUW쟢녶stgsr};q*pL@W" OR77O=J &~ezK//7e/9$ --ByeU5uS E^~AaQqIi8 K+km deB+Iw+D&Q?{e~Gk#]\K]QO]PءC-@-ed[L'o)sS 쫿-r2Rđ!>$!Cwl޴#bVà)3Ihƽ8w77Trwx~Vb}sw8cS]^& ql ~ 5%@+¥Q547io۱ L704RslIQI2)Tqɱ>$ .׳-JSG?!edDM,lC/1Fe]Z/_q[L:Z [b/qa-߾Ej1VUVk@_2ڸn6r b$Y+ x㡾4*kjZZQWUQOMG=܅3y.|ݓB?:6!9UlIyumcK;|gmA^~7Р-1P_/@##ԟ g6o¯F*@ٸyo ?d --Dqv%"\[qYU$axSFTRЗ>ǔ3Ғ}HOY9ۀ]]N$DR{zn/ EQLb~QieM}Sky$g[cؖHK@-MJ$`A0?K%&P,WZFEUm-DW55'/(,:.)؉4$")ћ[$)/߽s~gLT?+#%!&" UrXW*?jWQEfeXXT,_Fxd[cP̯_>g29v --4sKcmuy39824і{fM Iy --ťKhNsHaiϠ~FVʚ:>@b\uEYټ'2Ӓ(|"M(}(S38/s Ϟ`F0o/)%pu!u4?fɢD%r --H(Z[ܵ-E)NU}Ӵ=9&m%`QQ {"*ޗqYL C@@,nD --䴮 ic>\/~2 --Kʫj9Pnt(}`*FGR{cuʾC3u5ՕŧsOd%'ewvrd3%CQI!~y:nu+\^x@woT --ԏⓕVE -- jo34'Nc9ڍ[wB"\=}؄n5ODJCPNkWSmx9ycX޾y٪ --l*YG o{>AN~YQ^vzrm0[LA}m`ROB.Qnl@ 7H]Oa4{ޢ+VYlLwvFp1h8Ͻd)xX Y=H R5P,~\hgT9FCTT*Iɬه)_gL}u1a%R9麉d%x;G (7P=[FYT샿*zKLesR?dAq>Ɔ:`dvfzj~H tp )<3W7:nva7COѫ>~gf%~~vz --Q_*qw:b_ /5E꫱-9'Epr:p܅KAn޾,qrc -- W #} (?)My~BldX!bF QٟVg6|B()&el'sirbA}M|ڙxlʲₓ'S(`ޝ[1 --z&L YikRCSXzmcⲊFE|>a0?7;xjRdW}!O%hh.[w;vB#cR27aH/p)'g4ZX?UW*em؆f 34ytuPgͰkaދՠ>KgӥŧrODÈR?_!rHo(6>'ˢǥ o:3HIPRvԇRaI}諸#ˡ?Ns$]=i $pt$1$Ee --: gg %P%@$~NGT.>1$j2cKfYN>e ZxTܟwY_ex(薫M5TYZtnVѫ/03AԩY^#X^tM}Y˗/ g"q}p?  ѱqi~AQiy~ǭ#>mU{UԿzQO%x8=hE7Dž)كQe_Ч BH!yFfΞpUfKC~29I^ai9Ӂ-"IHD|<R@_H(ay@vug*9ITxHYcjBhWqCP!nj0Q%->0ۋa䆴Pѐ}첒UBXh'ez0ĆloUTѩxZGѻmZlܙ()?Z&t_ry~SS%EɉyxL̾,4\s,>1\3Ub?7qd2%$:saNO%qc.Xy\nӶ]G7/_c) t@UTQ [,`#)1~nNޝ[7X<E֐T8.3cS䅒9l# H Kii1wCEUT4^c07USGfO%.vV{wlـifbxOכTпrgo`/B Gq I)i}BS煮 _&5HAX%wl^gԟOkǐ|8`'sPcS1`Vv"aǬ܂2ڀnH/#Fך9FJ ǰ`)(brvrGEt3gH e_dL4m [kiL4}z,G~"/]̺ov%][U4m,iW,]4oa_Wg^&__Uw?鱚ӸM1qO@Ł{m(*" 2es i54$XӾ?s;P xNjؚ P JJ}JU a?IAs/^  fO˔CJ*D[w --~Q<#eCjoCAĐ: m.hEQ*J%Đ+O?rÿ́PLZB۲&~^}b f֙}Y~Qi9ko3_su`V`V'F=~-";q.ڕK"c})5}/kϣ RGPT կb_SLCC^ GDIej藖ǭh[EGJI~kW,`7y@ݺPQ_۵'|0k~ 42f>zmںcۡ' WG'&uG.VǟȐE߬易&K\82lghmafUO\;v`?v_3:~k5߃ɰcǛ[9`RgFE((ר#Jg~<3UI9/4~g,sgXj4)6`8 oN r@:eʒb-a!ׂ 䇅GF'$R 2U?;/^M}XA1N6oCcЃKc1,l;]tڍƽ .7&R3y%8q~>B7]s|*>@l7y#r랝[7[p4?~=~떡 di k[t5ښ [ڋ>yAeLEâۧZ jjeq~n6gTgO;|` /^0g&6q/kƱ߅8/(*T~5}}U\yVFZ,)Q &'JS3յڪRCy[-d --?%RHᄄ^; />7FbG=%zLw5g'g:{C"ڨb[v$ƧFZR¼ gN=.X#՟jkez b<%~ B_&h죬s?|~rzv.KW yMg}T5$Z^NVzr":{ElMF[b쿧P_!/*Q2կaq_UQ,-.,˕3g܏`_ddG̗ed&SwA!j߹Y4>: XPG'~>[8ڨߞCkz>jǴ䌫o޶4^5^d2㵴Q9,/-S}X#ǵKrٱuڕ\'O2Q}5ߪE~}ݧ@!GA;a=q#ņ|ouZ#UIMQWSlXhf]L~qL2dwչ>#S:}Y^}"to>z --1oѲU렌]罯ei9\}|4?zHx8C!HJb"3>q~gׯ^ht{[1ק';kTMQ}}o-Lh3|5Fʵ?Grh|\rkkh7o &Z esں@MaS]{?rmٰf5Ega Lkew!`ͨ'I'ZWG+ʔ%Ls3diR"/gD'gBلKÉvwٵ` {K&~M髾}L &@3 k[s.%t| x9aM* --U5]Cz<{sgxVd%'BgOyz&c\dӦ`ˍ3bA>Gڪ22o+ 쏝0Qac99":k&I)ي^ꍦ܏=7>ZhyrY)I Dw+m6*m: ׻'Oԝ38øћ,-WU߸Q__W0/Wʳ2 24ITER>P+Tۅ>SRMʲܬ4N} /բ1AVCwE؀-~J`d2th ,د*; 'ўԨu4QDQ@D 2-"θ{ F8PCeehg؜~.ÞОB?[t%ض i --FGT-Ɯ*nG Y塾'<^˧~ueyi>[G`s簩oaf/LMONB~7vQ|P q8bQaӕƢ+)}f\3t%#EוR]fZrB +tݻ㛍V/_LMwۧWfpE8L Xb9BL*}2S~B\l ƞpD@M:|/_wDyo>B3IAW.?e{V} h`+ӗ?x08c pclW5ޛNt;aQ$cq)M#Jtܯ#|eڋ ^.<Đj,ʴ̬BB_*-y̌Ԕ ~%<1 ?gC__@|M6VoL'o۴n\}KͶL@7~>C(RtӴY;xnɴlI~QVo ǻw{h/)qQawoa.8rzZtw9?VGKSc6]oREq&V6N(mԼ6lA|lD'Sz;<~xcSxNW6r;} çyڕߤhm=]8B]Mߏ6v$?TJͣOW1~A~^.s?=-59)11!>>O!eH -- --KEy!G_0hk_ W]%-Sڣ; g`tȠ8PeQ_[L;W,YƦ>mEB#m~M}G~{ki)Ι5m`_:H܋Oozgƾ+[dFں BۗJ RmӭF>(vkN5MֽEkn5|e%YH!ּV-[9:Z)đQBM9 詗n>cL2_UUOXp?'˟.<| Gi`WTU(Aͧ~sQ(VXe T[W>oaY>F"WÆXc3i9s=/_ 1v졡+84"&>)5#+7DZQE SV4~=4~Y<<QLS?-9!&^||(ܜ1mM --Y{>rdu7}JqD} --ڷPWӵ(P_ЇE$%z'm1azJb\Tx dx̉#xs\F̩'X}]tp5~u`[V6ƞԿP?GTIʪiޗϺ'  D?ۂ=>_#͢8Kghjni3iԙ.ʵ}>~KWnŻ@V^Aqiye5N}R~+Bׯ^>L`$GG`& S;l".\gOw2717_12* o4AFIfSA{YX9"Gؼ7mE#!" eZ[{WI!BU7z&wV*% <\gdol 45PHR?P췠{r}G LktTX"ҋ --{]wTTD:(b)傂(MQwtb63sDy "B~rg?I|%}eTdg<~pEȹTʥ ̘2ag{k&C"ikRIBUW-de@66i1 Azc9F``=L1&?'?Sdn#-4vc^k$m6o';$Qbֶ SC[q0@}9g},W~Q zL~Vy~&&/33++˙ --%7hwfD~d,oW#JNQaJ ɕr턅_tĨظ$+J>q?~ pQ --s)iq#ڕŮm֯^+H 3Bzʫ~S<5on;&vNtgYI|vBXTՄ$\o""G og(eǻTl9YzSlΞ>Ib-Y@ݍV9~]m^27kQL5g/H89/cK --?(/}OI|"_oZQa?̘Bԯ~3}~kjj:r --ĩ3.Xb }}OÊK|EfHXJ$ʴxuœG޽+N?z`4DbdqpbXqwh/CYobUOWVh26lspq,i߸h7[yBU7?<.MQbm݈x4肏F`'\~gٮ:7;p-gbUQ?Rx$?g˞Hɗ7˩ 8կ~s9 C>Pl]OBpjHs//1W]O&aD2+$7e,TD"?/7;#!5DPqV!ŪeΜ:UԘaoMuR%!|ߣ8 02 i <}|m##B#/'ܺ'%+( ?z&( [%V?WcÑecGpaΛM'| 0SK'q~[%7QaX)32w=TQ^W“_HC~|n+AWѠE+wU~N\Hx4HNf(,~UR&wG]Qʯ60r߿rLaJkʥ͚6cn`_~2[Io׭~_[b37l~AU#QoS~$>7|*5`UӢjXVR\L}B՗Crj[?of1ui-Z&sఏ_!Qq I)i3s --߰CQ --T(C('+{SQɉG݉vr93L?JX7XhR#tU_*VZ~w[Ou-* We߃߰iۮ30(84-K33[r¬WmX솇]88imD/+dgm5G --wUoJP5 &z3oޖ_9eee)GѯPRDSDV2!w }u-8ɕnrCtKq(8D r'fgR;׮D\֛6Ej4D9O1gJWβ<r{T$JaV+~m+G%U_N}|WՏ?U}Bja}MOt81zĩ3.Xb U}}Dh$Uq%rX(Lo^_ q%n$DZnx#쵖>s07bDU_[: r: UʾUZ{%o`8mƭ;)QlїY9$&s0ݐgI\$Gɦϯ8v9g<(ı#o[7/?Q#̉}\rJUUWt;wjpwvZ Eɩr( 8L~N{w_~@ZkC~uY7|&Ƃx56*4 {W?}ZاACM[s>a --嫉_!#x5|+_V!2%Y˪[^(|<ݾ|F;}Xj¹38XY:ZVT++-eC'kh"U!GPog_L۱()iw?L%VsťMz) oi)I qQ!K~Gռqw=Z8 CB$NH4)vnMRA* Js*JvJ Kѽ\i@,wu}rs⮵{~R!!9,sSc]mMLUd>uX/UP_ow@7#cO$fd>N}2܁q|.*;oE_BT}tƵj~*Q`ԇYh|0T/" '6!耣pp`βy ~ȑ p?]D2|eg] > Őw Z(< Ä{pzvq#PW{:YaOa1Gu`2(,8_Ec]nhR*ߴ-`#3s --.\EN#=ǛxvZiEمhd 5 7xH_/8`?c:9?9H)fO>yQkƭ{OLM+*bS<=~C/fɩÒPUV#Q8?;#5D}aU}2 --MX6Nk}6l޾ }8|&#+֐]xAv>^>Iz Goݸ~‚̳)(m}׭qX21&WUpTI6rbG+:1 ?NdañDKWĊ]~8"8 --N\oB~oEdU7mr*o|HA6֐ --7qGI3bP}5 qw/T?4"&>1%=+N:A.^Dx_7k/1}['p#/Qc>B5A}bƴa~?G2A(@>$AeB @_҆:( <w2)5=+pHOꗮ!>o] @ W+/eg!<ڷG-q Sޜ3HdMoX}!"c¥c*&gb5=+ΝX|ak?Um7eNk}Hc%!T?/nygB|QaGlRUQVG${s".(AU-}#UlGwOo?@ ܄'RfAU_ڀ_W{aHS_[@Ym-ݹx-?.)h`ZW'zڸ*&#?͌} 9s [,721c8$ u9p\N!~F[E.'4j._6' --:߱qvV-e_ 8}?L*jT}+P@Hxt\̜BxoTL}OT' 17_?_GFw|ց߹@/JO9M --_}b(T@G /K`/Yns/.AĆyE%.p<޹IAb~*$?JO[MXSUqBANVz*N#!6 {K3K/ZΙ%/㘩?z8L~c:KDӝP}Js+;G؍}|&#;Reum};<~\ڜߎ7.$[ G\أ-q2F_t1qJþ oCDo;t;uw՟>7Bp.bGOG"pKr΂!D}oO7'^7vY+j +-֬EcON --K`]@{o >LBvSC}mu奒D}qToT}:Mw;zdҙx741E1n䋘/6 --+{~IanDxȁ=W'@PO[S}Q_/#B) --r2 --X7lߵ`€{0+ --.o}p;>4 H"4A8yN >sF_pmmj2MQ/2A`cxDbd܆pʑodjƲuC!~dRj:gd{\qdsaBN~xF//-LOM:y<:ӅC;ކejk)NZ.Jrp).ZkbwӶ]"cO$:!Qln>A=ux%D էC?aFAv|چ:œ4QGQ}uk\XfRE_?MN~EAԜekqXY8 .,jaCnHk%2 !N}7"$= Y^Ru,tXTx(M~ޞӼ9'%8V|#SD?v.C~xq?θe.q}QZ${T}ChQ)EPT*EJB ƾ/u`sϹyψ99?Ͽ>MG=2:.wsiYeM&8j\Nپƌ~%)] m[ --ؒrV(`G*fdY|rz%v16SUHB#'OO9utP9yQl!_FXt{_t!dzxϞjk=vn)WGWcYwq17c_S}z+82+84>nO@hxd̊[a5$!/],˒/c[E{OsDVxKmb_}mUyI쌔X _OtùC} f8H 9ǨBAé38]x13 ߩ?T?!2+n_hS[YuSإa`י@pp^W0_ B_C=?(,<'^WPL@lS:Iv)qUU --~plϝ9yè0aMsV K-At 75FPWe H*H,xT}Y;9ZYmR62m\3K9OPxeJzV:D\^Y1ŗ|8 isY'1׼qϮٚþ"\ .=Y}-(b =ЋG#MZslS GW/`\pD&oCqIYf !V RHė̗W4+"a[Ȩ@?ٱaVZR%ᡁ>vVfsfNɩ?DPb #UƂ]F@/(lbꁩkعq?C/ M+4sU(R8U6۷wy 5Ap |=]m-)&jSG~ ;/Ctu1 --9G1[9y=lE*X9 qe5w܅|Gdw]s@9 ki&̹ --,p)e7'{k S}qjt?V`eggSҝM̭\<}G,MHN^[PنH yBAރL} KL~To^ --+HsS6LM\0$͉ 5 G1%Ey7g P}-B:J_`(gdX\}=d5Czeːp^]B)C聵U۶aQ Y1?-jlh3a<Çȳ_e;~`VǟP٧󮬪) Μn{rZfNMb'A#wD.caQ;e,̹v,d9:,et`Zt8NvtsfNbGNrM.9x(~[et 1Y;{'e/aAnI7ԗS/0͡/?d~sZQ./-ޘzы{9Z026PRT_~ߏ  -- Q0bhq<70t@?%=+wqPQ]goq^o;BwWٮ]H5W{j9IQ œ9Ր*?F2 --0ݔA)[~{^(5 ϳutEC ^r^_ --+o2BEγjŌEWU^㎜Ӓ>;pu271fL2}{Ȫ? p7srY$WX k47#w;8 --˂T={&&E ;WgOk!:qdӆ쌔EpʤZcUF 胂ihvNpu@Tں&c@KWg=#9ڝ<d88dqo$Yq].:`B\tdxh *#vY`85JsA|+_U.ew{>gNu,F3f[;{Ϗj"4ia9KJ8WtmƌƎ;|{Mey梂5`I`G[Nډ^ --ʾ<&1tfZ:y/XWV󽿙划vM#+i?2yL=!_o礅LϝondX`1i޿qKY˖Fz[3uƓ ,Q/f(?:uOy5tƦVv>!#̜|X@__=y?ggƚHcm"R4c=TB*{T]PS!'FU)S.)~.S --933c\o7Tz?k3s4xh@8f*I рrlcH0C}(9D'Œy8S&nU&<(azDxF)T .\_ie븖QWZQ]sw ^%{%t<4m: .險 --{~xV~^0쬁}C=mJÎu<-;ǾťK Y.XoGmVo mY{; Kk/ _>wvQqDZn0ij5U`E~nvmCoWg{K衞9Rc`=F<[m @s *0@@Nk;ON;!p@TޏE{cQGJ۷;~GTDh7mŲFzh*( -- 0?_w籯0FqBI٧M-,<}C#٬8I5\¢ʏ:1iBz 릓&QǰFQ߼U׀By2R} zط0#/^ȰFWfاdpSeQjjQ=|B·%%e+(.?I5},FN =^F|D/^p0E$q~ybyqA]1a^\W.[j=Q2qb"Q⣡CC_y*}rK;/?@L EQE p,b$Dq HPT%/Pv= H|6[C05YYj pciʫ~73)?j^.jc(m:H"ťYʺ gaƮC# v~XpJh w>Ҥe(i-Zkfm?(,"zgޔn՞g-Q)H|@?!a/["^X!Hٓ}/(&sWz?Si>#/&-A~ --/x*p{wA5+&L6XpN&a v͛]VZnnbK0]eҤ?0A_N>]q,9Xčhyoఈ(ZviY9\`}["U<,…6߳Nhx.gOGܰOh&r>r0+ A{{ IF0U%ɫdC]?a$% --ٴt  %-fWžhS縒ol/dq. xӊÎ~-֞b-ٶC0 ZICrp48E6m7۴j[@9%&  --!Z'j$k/e{+".];} `Vjrb\LdxpC uUCQ20?`Ϟ3O> ۺ=Ї2:rXII\O=s?:Vd 8zx 1w,ƛ(l,GR?0 :2<n%idrtχ)tpS}1} Rd,t D ;M,̜_?Sw/=y,񭖝rζjzliޡ5 22DzGꬿ icP(6cULi 1(/<[g /[WWtr2R$쌊 rwYcgrRC%զ(+bIԗ=B&}-]ҾV }$~0N9y>|"~bNMЗPQPw 9){hmfnbVdϲ=#FtsW=cş)wuϿ72-׮`Ґ5\E˽6T?_l>z~MueYqa>2Ǽr'UdzROؗ)R_J*fQXmo+[un}7oDٿnll1gk2/~_̗By9"APĴ}I@ߍnkmV`!䇌cp.J{om?-'+}NJka1^pLMUEGvXOA$[٦/"c19"halê>;7E+odsxL~ߤź|.w uzYQa~nNfj2I]!þ a}nYsm3iM-,mhyEF#ƔeI,oc~f9ݿc~/З8z&ՌLwDx{m,-p3ڜ Θ?8h$0M+o[}̜et9> ۉe;QcyxWTN߿'aWtdxHo=436Yh}o| T --iuQ;!B0 --})*jZzKWZM۴ /.qo*bwu 8Mh1_Mϰ{f:rCn+AJMНJ!EmE%ERvUb\;LņkGn~ص^s-e||CbUϱ]Do ěǚBѷ+REɒ֫76oGtho14<m/~XL2a˂d_ C}os%G,|Vb)WXА n3LC41'V& *}_ _> --?6>)%-t> --*>׾G"U}úbd =y>շ. 6%obU_ EDX`Z:C$Z .]\%lj/195C --Qd4_=wosS!x~h=bom2@B a[ZC{c|]X޸j*ˠ&_¿uA7G<TLukV. [1`ai8|ؐj$T~~P_ mCJs;M?&,"2jktL,>~ȡЗsx}c%Y1Ɲ|·wgAB}Zml}2DP]>fЂ7-mN1ˏb]&s=Ec'=&=[uþ Sl8GuZS#o {>#6#So(s K-:xe!Q76Eꇅ"Njg3a8P_D1Vs7MxUONMlj~u-5 }[7Zq쌴0>qCD -->;af޴4;CU_}LO ߡƿzK72k=X0a0.}=M8b:)戨IW-[iaoXC}b^ --~(W}uM~~oX}Q}+k+=^p@|/1p3 --o\]{/ĺWS>a1J} --ݙ1{ؖ,vvfe9G߃F[ 65󵞒 g{ݨt 2lŸ P\g;_/Ow$?o9 --\ola{Sfcy-_)n)s --YeW^د/6#8"~fƣ2XWbWb --9vy27n Z%M!{z٣mߵ ^^!A_e8tϞB,HrwkJ -- r5:SS,q%i^"6lHI_\Q)h"ͼ&g߈a ߠL _  --]6onbcO>@oʱG/joq!n6Q)edcV7%+; }pDNpIH #h5DVH~C TBe&B --eϾ~&@'>r|/xw8}Fj2u&K}yPv6-dڛIM|ɾ@ &%7B^L ?4qɲ1I Xz'NEyqVf<~Ř>=|nT$M֮?o˰ž21Hȑ6e6hcV *󊠼c}[T7d݂>@Ǫΐ%d.oYD RD'NQmߪ跓!AI}wr- ;]_, =9«@5v CI1[6] ݽLo4Dϐ6M8ڄ$[M?%ᢧ&Y"bGFmݱ;j?HNAq)~DyuM_SYװ3֧PHKIۍ _6?ᵰnAH)7oo NVb`o7m;NK/W MzЗrDv>] "+P˟Dwm3=an %.!PZfvnBUţEtf]=+o`;Ik>آ"Q縺8b36>ʻC_->p~Bғߧ )NgXtEXcԌ\Sg@+yW'KTl}>/CU9s@;DɱSڽؗ7oͦC?J.^~KWK޾kbA)a ۅLt!W"EP("M~9.ݵ}@?u-H Qo;W|ͅ%@ߞC> --;X,8Q~{RWT( Ow#lyٙi)X`sw1m*uH\lf5:38bu0V, Hi --a5T  --R+FcA@)(Rtf{;x4g ޿myMS_Ӑa#9/7dQpYMwv5oW+ {` bR3sN\{6Jr)'E -- --p~gs )} kpɶvrq)rkK+9׿U~khjl9-+KKf`= cb)[GrQw/A  m Aߚ?c|>t<CGUCѿVtVe5Aj^E_+xbGbԤxo~}?4ZE,}ɘegp\ھeZfyIU}a>-Z Bzp~qs{(}eKыwhw> /9!6*"t>*`0;zwӋ b$[17 R|O ^hu5\0m`EF͗ |U)ci 8~^vfZrblt$8X[7Iw*O@;fQƈk]\d>|C0DlãM`3]hE>/sBGp:K̙1f"T} #bVD,U'982E!Q moC &xOɲ߹]uHcG#Â|Iq04M:U> 9/4$5Gcjnek0s¥+V`@OJ΃QtfELӒ(䓝9?ѵ*w쇅!fO7' rwPs1vPPdi2 #{Bk\:l~!a6KVoRۂ>VDŕKAxX…P .;A[+s19-DX:E=mf.2UoўD20ǚYBo,cvR /~@{eeZ=vpmE#xb8(Tξr,BDɜ#.`@l\jO`1Z~էꋫ 4))Xpeџ͢.2:"]tZ}r kYIcM5«c֬r7m$+ ӱR)ҿ&Vu:*~2e_0 8a}"bIM~Hr,/+!b$[TD}ߐf8.E}ݾ\[:U? %C[G`';3`B 8t$(xO."=74JV>`?}֔,d?&*B¾'Ǿ e}=)81et:[_w[6Ok6l)FD$$fk]kͲ_-Lpk Ν an:vCdh U ÅH Uk ΰ-o CяMEC --}{N$Ct1ȇKr,vb|wEC CSįi9,8o4@OR)~ֵ>A!򂫉.0FD{^8u¥+d #ZHJ@s/qh__'Ϸ9a)~>[O b_cJ].\P[|17}`i3O/[v#,ooU\ B.6oXEfyL`g %q/1-BW7Vv}H.Z\rȖ 宙nFv5Ut Ξˆ` bMH|ݗ~4EM1Yɔ} 'Ş워3=c5f"-3s2P D맟<K/p"B97ae__Wd_d~ImnENs,Y)!ȱ_9UvKAXR| kW-[<q%HII[j2 --o@Чz]EuWf;NB]MuE9~"'3-{w~s)N(2_7Ť1ӧ! Ǿ{h 0lA n kr͜p) '\|/g&'FEҹXjsf:ZӒ8h`?/aJ \:b%~;Y&B4EA --}D?"*_WsЇ$QוOO?[7$)rnCu~ݟ^k*HQmr|OCF{ --A/`6 >Dg7wN@mX?]|T?'PC3CR> eM}_1 ƊgH;c_AĆ !0 la; o<ۊ~EbS~Z2jppLw7gI\I4oBIT(x?iq_/^5kWX2GMWPR܍0EMMr+R!KTRB>55)1q,˜3kfbq:{-V߼y>aa],nїֺAO[n~o\+?7ltqcb\LԲ,u m2Zu ]l SCǞxPhO$`[dy4;e>re>̊Vd?~؇2sA/P} ~_wVƾw 8V|86S 1ٿi? -vlݴ;"r9GDK(2/z(X%>+|u` $"0I试D8Խߺ$id!Ȇښ>Y.m&z EoOuO"_PׄnqOK.L 2!2t'z_51)%uٹyLF?@,<{u|x/8 NAc&DߍϦP؟Hnr󎊉KN9_X.,)I /7W'iShIyPt 4:k>.tGi]}?>$Iп߾Kv[~t"F_o[hϞ4a7޾jcyٙ٩)I+"]N&_7^&SEm=0%8#:p Z0R 9&%&o8-ܥoh,!B`ob7 --DO2TjObf_E8d9dsv;4fnO+c9YPA(ôohI@0YB*E_[~c,2Aʵ:>z}n,S?I߻ه۵msr"lK͟l5Ⱦn{.twΰ͝x_Rleb҆!14djfz"51zMz8wO:r 3Q lw &&FCV`6$$P[^/ľe?_ʾ6a_J.c!O 7cH yЇ| vDbdqХMy߽C_CZ>%s;p/?s ---174vю}^Y{MT_w=-ybb5f=q4eO@0`@6mݱ'-棠\S[׀XJV41grb{â{I1)ʁv/{AQT+/"z/If'TL/n6~o8RwMˀ[2x诉^0:8 --f0 !\;*A瀠oC}oAK7:bC7(q1Ɇ LɂGgŶuӆu#laA>3]C{͘k --Q)щU&M[ZA50\ݼ|&_t؄$h{df>RS[v#Y'ht<#_U}'dw}8}Cʾ`O+.HnSuk>`(7mɛ)M#2tR7''Ư^p3g3a(II$^/HK$<'rQF>SkM9\,xtqa^nv1%)!v[8s{MbW1OA<1 0('˜8:p:7b񲨘8h0#'#RQU k J(ZAgcÓ?J>)yzAsc\C --}eg_5ŢsB#:1a LD  |>~1U}$CwSR= Xa֡aХUIF]䪫*.++)?}]cbK!FĶ~"{1d[B9 --`hb'OTA?3x%e{ ?'#pœD0> --gێσ.JD {$Icߑ~WL_c}S@z l4?zQ6\,p /p&ީ)I VD. KSl&5Sd6(sk:ؗE >D;i3~u Zƽ_x^u/>o"?B>[0La ϖ@9)G lj[6m4ԇWaRs&.(,U"=&FNCcS3[{g"<*6!9 VT֜or[ dpPA eǭ?q,1Q"o%1$Cݓ=Bdݗ2eDn&DyiưRrٯ g --|C_j%[^kR}b>'' L Mlσ; _Owˑ=,z`oh$T Ԥz:x6urC{DEV M8IMnms7PDtĬSeU0-ͭWڮwaȫ1~v:a؇@gf 2!p?OyVƳ?6ُ {gӭikjWR>a9e_o6طgQegYBm=E%l 0߉DϛM} M@ }40 O5%_vbsgNfq(?oG;X-:qy!Jٹ6OLQ!'`ܐbNnIIL9~khjty& `؇q}މܬXdߟdoK71쫩b]G6Qe}w+,U}~>p ր>hA&E9З&0D>}̜E_ASWUc'[?=kG)̍?7>bee8E$؏ af(} d --H>㾌T}blL{13~ p"nC+0sNInxzsП| s=uMMuՕԤx:035`d -- Q\$> 58:F&-[9 %1*6!9- ^qiEU/jNfzѱל3=S``+`uW"}+(Ce@p8u_؟Ͽ #ľ(Y`o̠pҖ/}7,-͛wJ*[vF[lac q ɩwA;L4ї#?>{ --a}=7o]n(-8^gV`9T)rCsM(EJ}BKGp#rgjq(":./G;zA]S+qn6D8$q)0#KhM\N[Z);v+/(4`WPtmr86#Osh&e/"3Ra0У*p+*g%f_ݟ7 HSDgqB#*Dt1s_@fW%iS 3b  <"ճ/\q}򷷗{B}3e --!#A~d۽k6 D__Wkw+ RĞƆ(J@ 2E`7(#0@ڄ 3Kή^'f?VT54\ --yO~xFgf3>QB~bܑȰ`E];,Ru5ג +0rh U(Zܠ#.-Q3Or/ˏFxm]=# vnGva~N^Aaq)Eyj2i}C v7PW}NHM903ŋME&E\WnӞHx"iF&p*{=|B£b2 --h 5utu04LN`pN<8}pٯ>[^Z\X C]w }Beh=9_ey`>xe%_/҈pчId]}i,F4j>~?$~*-/5>VSſ+GhQ=}V z797PDt\ggK+tĶ_{g/yjt,2r] --paAB --B\Q0QPV%:8AhfZkgLyweQ,|_'O M5U̴ ,$n \$Aw@ tOJ&w_M"*>Es1aKC[ --Ͷ$h~PH&M/FE; )&Ac[8z$vlps EV>HW/:4> .FCb%o(qq,¤q `E_^UۈT8y,aLpcfxjsc~_\I0I?Zma, 0H<%l$$0s}"Ȳ?7 s IL=Xa[V"k[{G/Зv!=yVX/ohto)ߝ4o!aƮvp̴hiǁ~>.mİf&$GCw8^Ǜ}&  $(^m a?܊]N GFLޣd6wٿd_Q --])cep}j}">^7Ycư؟' }.g˦ՕSD̠aK~hT+')eU MjyI&ic#Cفӧj(-ρ(a_m0]%ˬ 9x.?5I 8C#b܂2CgWϙ>KW _ @=o75VURCQ8%>G8a@@XX:}NopkmD}ϞrKxqM}g€Y!a XybJ:ɸчK/CW/]87w`]5kAnV:DI:;֛BA3E]q񩊡v}>тG#b="j<15#;PQա4`@qĝ)ٿ@D8EonP$NOI12eGFIoan*4A@t.(WaQgꕲ VзŢO̟>}.o"B@}'g9{ ?/_]ۈw"'VLܾi_C!̞ΎD(_o7H1H>B%4O9XJ0Q p9hbfa)a/'e**k<8/^NM!Ҝe)(>>/ܛ*@щtA%d_Aôa5px.& EՌkDJW$D2~=@i3쩓?_V5R#t]#f_浫/0w=PS YiIۃ=\$b+̄ކ#(2"WߌT1\쿇%ba(qu+¤q ɻ’*ɯz)Xq+ 0I͍ude&%}=}J` 2}@Gf --l`p`u`}H*'E`D4[Q1q IY%n# --)ZA?O$菓bG47Tݓ EK>*q$a1FnOPB/.ttxz87Vo ߝ_TZQUxc'`do*`G?B?ϲPc݁}%EYP!P ?/Zdag --_ ;r}3rGdvs --/W}=e$WV"kf_@PHF_TdU ? bgqSO0kKsvJN (>tuvIb132|ד׽Б-&W0%_kA(sTgVTlim?uLexdt:a_ ͂ =݄*K --r3Ӓ @L-MNhh@|a`X,u6W>g@ ̢T}}1܂%.,R[PTR^yxwϙ>@"?LQmUܿ;I~A=; --aVWb9K,c"C}x|G';k4] S%t/_O9aJ/1Eǹ±2[Xm --7oQ;剩yeaZ;`9b:=`ԣ,=;z7 x88TB(ܕ !),y yBB}(*t2}pI --Ker5shiye E@D)'пG?'Sj_7>Qw]]2yB@@(B<p QP(@jq:- S[9vnM%sqwM gw,K)Q;')EE?NJI͠PWhpGFp Gf7 }y (?$ƿUѷI,H.)Myiaa)`Z6 -- -- *bTjR[9Q =듧3`4}.] ?f75ijIHSq "48sZTe_s֛PL?!7oCC_ra&p,N-lz"8e:-c]FS;z)?ѿѿkb6wq,aZffG-8~?7;3-%1!MA --9Eigkd ޔif0`=$UNRސC7G*U --PTKV{  S --* 23MĐ I U,qۮXw[xH^ --ƾvWZ1Z3sf51&yGh賓ԡoi%"LܥQ,s+DoIRgnߙWtoZͧzN } -- egNQG5fVZ,=*K,c?0uOO4=3aXJ1gQLXe5[?9ާew`(N\qٿe˗>;7`77B₼tb"&*",$(oHHTX(Z-&ܟ OCGsPD[ME臄EDP9ydll6D1?(ң!>89}NX,+.۶&)c"B*,W*9Vs֡?Sбϧ*&q+/ Q!08,2:nKr*+,)xB;G/Hrڍ/t21Tu%3}cݝDEYqa~N6FRxaSmYAbX}>g3s,f7sb|&tiN?7vsCHCRqXSvNR$CQGF&$"ˬⲊ}>G;q4}z/n\cq=wXWGƃ@0o' 3wtq8WXFQ,I#C)MeiBGl8^>A!'&fl/S^C:ցj_FkBSӲԬTg8P]QVR *RST`?2Vz{2đϹ0/ڢMo~?/^:зyl|:Oo_@R5#7Sg>yM%&G+T'G --G$.YU^9=#Œ "9v#H=/yAma>XHfQ!Wxxm --7&>1%-P]M-mݽ'NF.r96$?Qy[q@ueyIaRA@_pʜ%b['A)h:38aRS()_x0@>"p.[nc+F2W)"8JA9bUVk~+%a| 6rl;tY3RfxHBNYz"?_`i16HvӦ >}ZԱ?{\ +-B)bTt(khji9qvQ"^C/ UӅdSC}mM(ðHߚ#B@̐IIhX/ajU`Ooo?7D8ώӡo%YS~v) [rp{jj~[GW@lCWFnMoAg1m@X'b- u --fVZFW Y._?SS3uNB(R!v q$@eQ\VYol=p¥aW_߹;3S~=2b?p4m-͍DFqa~NvֶĄpBbZTh/_t1ʆw%`r|3SktáϒcYPvB.ec+w8׮ܸ)<2:6!1%u[VvN~a1%Xlag$ X9lwy%,+.۶&)c#BY }(KEIk4I=-q1]Ͼ --g V qv!aq[S~^a د=xCc2{L&d SO}"۷K twFEYIa~.HMQ)Fhp/:<>Ӧ4( ^ Q ᆕ,,,뮬,B r --\r }Y(P`q4b$CqM6֐I;5ujga‑ŒˍtZ}^}? C'O ڣ?WѧW+5l&-}3 +.yzAzAQ1iٹ%Gjwt]@= u{'oa/gam#2@?+##yy&h=>C%JoO9{iz Afh4igsynY܂*pI`Mff?}~}}FɞvFEiQAnDYltK";5t &Coc6>f_k]-<4' --Q|$%782 m&C{-M41f9pF2 a u}m@U5ʵ<>5-(,\ž6&wqwyg..Ik .JTه)ɿݽCؿ6ⳡOѠ8+ˊ --3R~>R wq6榤o~WWg˗S --u[B_TG˷\QQhkYM-mɅ"'dUV T>E$on']8wbfgqA^v&izK7.fh@ ZILԵǓه)flw8 !~r`ʺF`at߿05>chũ@Gksc}MeYC9#,${N # ܗԤ٧!,?Raj+>zO-xp^4 -\vmي7g;: D;wyEKHN͐:\\VUS،=f`pMJx)_ӧNtkknCqiQ!X з40wa0ovi\jjQ?5-QVກXI=c.ml8ή;vz K*,klia;(W(:h>(ٿW痆< wwkki*/)L۟/&*<4 ]tcY[0!z` R&Y/t[LjOY[3>cY8\PG@jiY9%~SK۱ngtp4Jn^FW=XW]Cv{q۪\g --:/_Bj)+*};#cs --O/Јq ~ie5[{t Х,JP,ߟD 끦m0naHEia~n6D'8G* =<'2}<]Z5t_*aJ}*櫡?: --nF]\蛚[@`'cX" +KLI?_XZq>{EX/^'4o,24߭^À±ݘFL`P؉<>A>rB=jGpZ~``_1m_Q쏍 _m@(-*;(OOI{"7gGb&] [,. $QO4.}(w8+ؼT.{ !?WPTZQ]wtΞpqx]gF-\` FϑFH=E|&܄idfSE_ڷ%_SÂbJ :6DaОH/S2,*ih@_)%e9Of --OK aLHfد,+D bB}ibfiͲs`s]݅"O݀~hxT̾ yΡeuͭG}8[{D_ЇAtj$Pn9#[PTVUۀ._:'#w9@dhpLܗǏ67T@L۟( -- HЃs%pgoZ ̺`K#`qc??XB1[чZCׂ32~8BD --YGeB*,)GDoп%bOa'@)Z迮}HOESm]5trv --9SP\ZQ][ wJl_ N@!} \8$l5~ꊒ¼,@?6 --dҭM0&T-v@ϰn<ׯO04TR`) --U} --اёl_PXTlBJ:L5u!Gc7x[}7ӈ}ۃ}]n67%Y駓`‚|9l7ӁacM056=uGuݻvʿ]>>CT. Pw ,%!#TCc3 Árqcs|aNgUBRMKW{oY!QF +";;Z3%E~J]M - 5 --(My9 &}5X!D@ --Y*Ꚙ}S ڱ'phE%`&*1~wM`O9x}->db􍛽Ȓs-2na^vFjrBlTxH;x`gK?jifbwXG[󠚊>\wγcX}E}%eHH[簞Q#W%o9AI:.b跷67A*NOIٮ'EL --If)%V;ƕD bV}C%eUuMm] 0 `|5u0}Wqܼ؟xk:pd>y4k183&0}IC]MUyIQ~NfZJb\tDh#bmenjd@TtwHd}A=~ --FE㬢C<ҥP Lͭ!!PhD4T̜򪚺(Q_?~@ --׃x([]ƺb'vqjkb`wn" 5}?}e,@7'f >TO@p8b"#NͪF( ocrW_(0{0|'}{S_'7t\q 7 a :ؐ --h yc3rɏ~Ffb/E}M-HjhlfA0,767 8,2T܂Ҋt{nCHc_NNݻR`}_p/y=[+0e9~txQK3JhvA} sI'bQEG)> =c3Kk;Gf")w >?> --?`2xB[ksRY-HM -- tVlaM(:Hsnٟ&GA'Gs2UPO0_RK}mcv_`HxTl<[v^!jjnmpjWwO_ +2""G {7oo_l?X_SUV\' twqrdGt!NJxok迫'uT5dv9>ܝ>ܜ0 ~yUm}`jg͑n@GKSC]MUyIQ~NfjrB\tDhWYu~亿#=9Q$!U ?"OU$q/GƦV6Nή^>Aq i9E%U5u o흐ᑻ_LxD1b|;CD &<}]Xvi>aq3?LQO --42 --9y䄂~5 ; M0Lb"04"&>953[^]YS ܛH~qi#w21>6:<4XvP_[]QZ\x*&2,8vsap`if&zqWQ_̪/-Z3^qg#1|>3d4_KECǜE_Yz&f4-ō 9[P\ZQ][߀| G'P.!sS}$gVhZϞ,-IQ!~ޞ'+sS#*꾆Iu3ut3c߾?X}?&O(ɘ('߈fIE:4+] -- --Rstr>t:#;[Vyl}csk[+]{` )pxK8Ö ~ta?.ɀ~h/d}C*EGKCMe"}YaUwf-[ewUDE`߂FGLzpB#c,>V푱>o --E'$I'z^vflMUyIQ>ܝ qA>^P k!yPmκߴIje >D"OVM9AM-_OUgǧK)3(HJ]Q: * 싀oBAQd'b&jE K8bꤝ>s K)y>{`";vSփ?qᴫ9ЈĔ/,KS{xk{uX>6f'} Uu --8 siN?KQa3xJ`f(`B吆aC#sK[Gg7O$ao`0><|rFCՕe%Ņ/dg&gG;SfGh:Oy7J۶nބ%}1d' --(?^~G#?g> KQ]R҅@蟲st> S).)ű7w]xM +`r͆ku5Uy1/'+#59!62 澑>{wܱ2$?t(c /}?}^2S/c>/OJŚ?5ES. };wPMC[OЈYo؄䴌IiyUM }2IB|詉5ީ{xf,E$hkinbdxXG --V@ͪTr0yϝG_5M?v(Ȇ\f&}Ⱦ;짝ϦW'g}>RO00j*^TT $'EGtw=MraMuUG>.(Oęho౏Uٍ1?ȏ<#/0Ik|E_c諨CS9jlbƅPhDt\b -- $7NjEUmƦ xeG̝} <+~6 4. --wq2716d  φ?m --{AA"NQ Q¾a?; "~h?OƘf(RR\!;3=%)>&2LǏji"$ܗl|%$L DŽ;?>0ߙ1C_>LBWqSsKa1I限U%W .yp\p?Я* !>^.vV 7_C>,49G,/lr EdwugHNDK 7nQ$[Cه|-`HZR35%L^NVFjrBlTxV'O@hA*&t}I6'c>L_hZR~5~|.}kSY|i { 4u OZX:vu<(-!h?^-zc|c18/%gruwq05>TRd|D_S47G'2dbe_y?o[D`HD a?O6waH}dYGZlV{y2,f~.PqØ+}XSd}\ՙ¹dqa0Ҏg$}>}`> gOY;o4|AĿ }0aB1uC/ЈĔtD~A%EUmݵF,a]~}. 亊AE6DA Ofwu0=~@WK0OYQ?B?Ͼ _m]:I kwdl{O?q-nڗ 5M#eWJ !HSc"Â|Ϻ8`ir+?a/ ϸ?{6hcR}Irȧ] ~A7ߍh>9!`/V^kзwrq;c̾pJYEumMC_C{ߋA?&"$d߯LjZ/W\nS#$(R}iʾU --mۑ}Uu-=d*WP<ӽds&zZ[`7nr2ҒbCy&obLr_]4W_葕A},}I} a,?"q|D[Z>߅(>EC跶"M7_1ѧ"#h, _}e}( }Wws~!Q i` --5u;iumk/ czZ۷mSП/1<"{+ɱ ;_/^JȰG?}/04R}'wubd>|@xKE NzJ"Arr_hUܗ_dB?.ues,Os_ Gc߉ΰϲ1O$q, }eG4:k 4\K-\d+q`P 7"߫? iG~"_][K§&kk[p=Oo% --7D4kPw>ddيCE'8z]h?@bulIGF6-zJ| >4+)!51,׭Yrf?j0w}GD9}ipτ>4:7K}_w _GWV]iB~s_h|,6?=N4gH>l(yCBrͺ<0ȱxlK~U|mU3m PuM ?3gMC6uԣoW=wg.aOSWw}/XnVb?\>I3?4O}ЇJtiDu5Օkp'9Ӏ'PTdwcezܟc,T6VJKs$?cSүe;%~uM ǯ//-)?9C/>WX*lTvN-B,oׯ(:?}lb2\tWV֩ىj }&ݙzCϔQ ?yHB'CHJcCG@d*l;{Om9cC;}> c=!DbT`}4zVmuUEY.7\t<#a۷_<ljmUVJ @}}}_t}?#?p^%e} fV>tZaV;`' (߾oo=~<J*)k<п$Eou׶~8uӺ5+~!/:ɁoSK=w}crmG1'_bدձޣ-kT ƴH\LJL?})ݵZYr}7NlmȜg&ߧ]ecYz%#3;eB,{nvfƕT\g0"}\_m|1/7߬`TZ rtCk, idoqF?}؉ xe, --P;q8Օ-GstO#3{ҟtA&_~Yd>)a * g3?"#"coҖi ZLjki/&3bc!e< ?6 1cgJi<}[pŮ~Lӎ̚3+YPXKJW -- ĢEw-Џ$37b0_aQ!@Oo#' --?,7oݽ(&6ݵ/Ѣ]UK'N͎g? ~a/ӣ??wv --s~;3v5N`ނEJ0D2j&/4})mw+ᚥ/(!SxWD>CAzlOo7B?HDтyBw]kξ d컸yг?l~Ec7?/>L˴AM,~N|y -"(Qsޜf͘7w;Ji7cK~S`^~{B` %7oXjywCGg>}2BiewcƎ4ew_S!7RSӻ --+}t|)%5jfv.C --HpG$G_GI=@ Cg}4`#<S~1ՌMeS1Thh6TUU~>Euq$tRq4""kCɾ4 BEI8*RE.lX1 A1%rfjj~ܾM涂m8/8<=W\FC --6+ I>^'l,/ХiO@3uvհRͭ]]pwv[qaqW0tKf0bf54,F&K,l.w{!B#Elo%GJ5п|5M=t}I3K,0 --9731{rЧ(6僿Sߣi4JS%d؟a_eg۔dlTc_rWH:r\"TW#~|aRtDromin hkRϐw*1_UT'N6b> *"ā}E}/?)rO?Q|3sKk/B?,"UqJ|"mVѰ?32l߿7xwn7oHs,L:͟8Qr?O&prVp"#7_GKSC dws,RKW/CME_Cؐ?>|l51%W,LgF1 --;H} rr 1-M 'Hrr?26:2,dE~2+%p߀X>6XYHќ|DI3M--8--Mg`> }k*?7EObRy9Gb\j|ܩ7]baev7`EHXdt,6%5 %5u'Z4/пNj4HB]L+&Ģ?HQ~5 .v#Eg?IQ)%7:b)$ZXg_:]X>}BCu/rO.]lokm>sqC1szT*.&*"48_hܷ&F tᾆ<ٳs_ --9~h(LI$1ZYM?Y4sן$Wӻ=Hv7>xIDQO.}jٌ5&0o- [%;j]FvЯ"E i}!C0tӝ蟕GRm1@_Ko/T`Kٯf?g>_6dުaWZEWK#' --M[7mHK]+  --zy fM tu55gruoS wkvSP@Hq🪯?S_ --ˎH+*س{'O}9SygBB̜o$pGbVelؔ|O --hICr·\BcegC_4[\ľr{.2pP*|[z/b?eߊ1WYW|}c;}=xṟ>߼1Q"NX"Udv_ddPyݟ:r#B!"y_/j/ua~ޗM"D@_+|Eșa͟O7Z-l.w{Y N*sq9R1g/w҅C+3"e;#_Jdc0o@_ƒ~3؟; --%(/2^e꨺a2Ą}:#bn9rJw-Y2֭YCޞ.ΎRRPsIodZ}52Q_ hE௩WU-+-9՞ܜMQ*(̟5jZ0BoDj?084< --ؐ+E rпIC-J-Hѿ+CrAqEӇrSQd0gΰDzhsE^hwrmoF$%NJ"C^n.v|+:LFT`T^rK +*+*++G$0_6|Z&ELWe|E5WN%|Kb%  -- '$)7p/}>9YOC=Yc[=ĢGѿΠ.CTR_~ џˇ[Q`O JϒXRa;),䱳?/hB 69/A}g7tgYpjU+c#‚Wxy --}C}='?f?/Sh϶nIrHRr(NyyY!b~ q2 2D./Oc̟h67VKwzxYJٯ<3ӝ^ծ3ne۵ԓ(J@}W!nˣxtڝvG^ v;]wt?~"pt`];}ۙ9sgUE%JoP5MZm3,QV5 h'K`'s2Y }`ˍ;-e-`]{8`EF&㝄Qj.ѐ|C|B?&:@jTt}>Paѐ菒跷43B^nkxiW U~fѳ__?a?E?"{@ܿ4{t4iZ*0JMJ d1nv"ݷl~oӟF>ω}GY!QB.r_ܯU7(U*ZQU*eC/m6f#cC0 }sJG3oo`G[Ig"cRm$_M --Hпn.):7iL}/8; --wYU/]S1sthf;L bRSOW2M!͍ꆺD,,+)fgX1Q,_+clU:_57'?g>4:~B2;#+ܗ:/ȗIY}: П&ge[la~wu}|YQ1pufd=,d5u CB {#CaQߛчH?2C_c>j_ZD9YJ,1e?ee~ ^4wWCwN --1 --ϐ}̀Ștԩr_TY%5xU2iURzjR|LdXpA^@,``oH_毀X7AgV09^޾LȘdvzVN~/(UJkmK; --c'!ϑ cPESOc< .;-3z09l7FE5/'3s --8|AE%fـE5cǟ Rj}ľaOL'Fz:ښJE\RYQVc+!.:2,$Пߊː'tR?vFFD%2aH\Y%HaI$UbQ Ǘf;%1.:"4}ɖOgӻ滸yxy3!aѱ IiĥYZV!k 涎& --(ۨf1TQCס.ES͍*>OOrSke䯄cw٧a#Wmұkq2g=Sp?>G]=|PFreqr_$S!,/EsipcFCÕ b?'l*mnێͷw IgC#bR2`8%JV]%mm=:8||rߠBA٘ ÁfH"TD0c}4a,Ο;sS~gF_j~"e}VJkJ`ǁs/&ٿ=6~|ŒX|=:CgQ9ҤQʥrxRAr ܷ߃߾mf#QVbܟ&,sa؇_5&>1r<~I@P@PZq9`~:; @@ioMOiJئ:כ1la+=>(6/-UJJMSK[瑞c(N --1h"n4tA?X&ч?><׍W"_s~ ~FN>دV(5io07QFwcerCܿJQ}]͍E\"(+q s`q1PL_:ݕr G}<fݟvwpluf0h".ܢ* oOwg'GLijG<30O64uufߡ7ߝ3W啖U%E* }b*fTk!071֣Q* s2IV --tuIb̾bsx^9:}5&l%fxɒUc9OıFU_W- %Ŝ̴Ԥh &; #ZpdOrb̂͘ ?0~VNnÁEOܓ~ :AGiɟ2 _Cvzmu;鏞GLM+ TɪUmK{aS 0>>tw(.]ӟ$ojuRB?O}G.gΟ>dC8FLjD"FT@\( {aYu{>EQXI0Z4Ӊvy .6ϟ|?(fw?@'"F)?4:~ ؿߟA@31jOMlstxUX_SU^*s2Ғ<.'"48微[Dkac _7O~Q̾cSsKkv:gb"~n #°LgOف֖ 0;1|运|E/3A3צ\ay}~|yW>/˾~KWPTo!؟;DEEÉp!ll>2=Ai36ͱ';d ;4͋ S32sD%u -mݽC#(п uPch'Y1m~~Fa(d!*NԌZvS}?P?F(}B?ˍD3<ݜ6G~MHU¾ž >/ɍ'dd~mbop[` --g)oQWE+az:[5UqA~ns 1Qa!_hZ)=ڴP߰~}WW1곿{A3 +c)}/ӟa,/n1k+ Fz:{v ߡR2(a7|(3-`͝g=!//JWw^]=,}SSb?42:6A+K*).NL^!G2fGyU>naoӹ?:<&mj,+)*df&'y\NDXp{f ܱS>>r:JoDGlG%wqsfLJBo{T9zEknGJ|Hd36M-d>;+(84ɩ9y¢چ&i[GWo(ag`+}b +7w=4W''. WIB g1)}_n`@ƾ=f%3s~M};0<6_{|zgȫEqܟ}Vic}mUE@,9N724ޥ&> -- 8-~Q-۶kj}Ww_!:9{xxzztB.e^ϴ4}&\J/| !.0ߐ6q|0ǏΉIٹ‚"IYEUm}o`h0gp)_ >dx޺yꕉq@/f'##ހ=*oQm44LVb?#,,췴wW؟!d䞷`,>׮N^4>62XWSU^*fOOM$DsC} }}{ж Iqk,~ --jÿR}SEWN;8:9`4 --MB/)eSm>(eoڵ[{/7#K|70 --dGF%Rg%U5u-ݽC#c.C@]Y/}5T=x?ٟп[Ņœ̴dA-X:}uUp_?kEL/]/(~54u9}K>'gܾ"g}v:,IP,D"mE"O_Ce>+(*,4_|BB#bSٜ,n^AqiyUM]CS |gw/ܛ? s?=|%oC+Q OL> Aܱ!@ZA0/G;}ѯ\F?a_f?r_@PHxTLBr:'; EgrzGK>}LӏBAn}]MeyiQA^N'=59!.:*<4$(0O.t_Wd --~0K,T )e)YZ.};{G'g..qq`ogØbB_B8? $S)us+(*oM? --{1GE%$sr --J+k[.wCߝցKPK>2zzhFamkms9i 1~i/G}[k D_Wї^F=bP} d_XNq/d?,*&>9-#;ap-p^do%\rߛb)d\XvGz:گ67VWde&%FGS{s۽K_ O/+x_蕒}E7BnWPRQO9bk1oae oщG}@^kwT<7RD --z' '_8̇̇wk׀?GF&$gdUV76^i߹xXp;TeЇyR)>G{: r3ҒcBxyG=<WoLrw 8U"W;{;@ 3ܧrB?[p(qUpRmuEYIQ~nNfFzJR<㾿(-) tvji8 /W2oHk ٓcggkk[1@ --}%bf)I|MT)( PSءSG>}F'l7eȋI)iٹ%eյ8h8L;T#wXoa0cLЧCt[90WZ/Tp2Ғc"Âx]h mEk`c>"R3~ͥ`opg,S>oH4sr.x|+MpxܿWUfgf$^뾍5oJݩخ?pÕ%_r6nڌ+B}#cSz/9VV@ca++n"yFG_"EG~)W0V0'櫨m`iҏ뎥H2'3eU5Z.ݽ`w'`In;KWD/>/sjFΓGSf;<=~>7|Ckk‡\UFIľ!Oط's KLegrJ vt K?#n?t0h>xH>;G'.܆0BhoCj*J}nv&;-rG!;:ءf >}JtKo_$R z _n*+Ů!o[&@.}fQUQRݗuD/ "$'>Mɇ_|||xpexrij30 _͍rD(NM t?;X!_I_%}s+{IO3C#.%3s꺆f`w`ht >n@3쿥/s~Ylcr??ae OMޟwBrp?!w3待觫k6^o`+_gBNe5t2~cSkGOB_nVmKK (?$d_A+S a1@GOesyť`~cs+70ߺso1Z^ w _xC%[}גvCa+Jr2)q#B< GM , uo,}u )W;_WXBvhdlٟ| z}M}2!_<\p#QWZJp a --J}۽Vf{Lvخ --*`oZOÿjQd]ܰQz̖mZ_,(+ x̘L[dmfADDE}_DQ%7DAwYDYL&5TfjsҷMI9/ا>o --1As|=|ҡ݊BEو`A_߮H|YI_ɇ_3_4e>|48̷oݶ}.pGh/7e+ ۞00"C"o)GIa[j+"^:s"+PZJR|Ldh./ --}S#&sGy)0 }B#bS3srkEwKWjZa)0Cãh#LG.>erԛё!؉ޞNpFTI_ܿ||>]Bߘ5٬A F(1 n_}|IFF<qI 5ԗ}e~JG>&,j˘. \VOߐ3 `bsr`~|QM]CS ޾~<#0 )63̹G/Z!1M "@nq_wqCcL}]̾`/04":>19-pVܼWb*DM-Ϻa-f --"܇@+pjk}] KAGZ[Z p~ --eK"eg& -- rY<65?ccj_rCo```#P^B_>n ˱ϦŸ&ŗD>?#2 |D>?l >pzF<N+c~eR.n:"4з9>za:G|Ja[z-Ʀ;wDD%&O?|3g7nݹ_ZVQUSу=2Zžܟ}'o>׃⁗/Cn67ׂJ ܏!wv,&F\_K_ӒU~+2'r>(WP L¿YGG>::I7ZC_Y(|Պħ#IR-MLkӦo5261[XY;"=櫈&lڴI<_E>q=|;t7o-$B}wˋGwSWg|}C.Ϙo&ZXـή[͏Cɚ60Y7ual4 }vlSEAAx>zn߼e@G3ߗ` ˿UGEsG)%K)}+[g;v Mؗz0ȱ?߼}꺆VXɩw?ӻAYC^|x=toqd?ݻvl89X[ --e+I՗)%_YH%|ʰ?f>a~M--j"̇}N}ė#>3O^ O}$3ᛙ -m۶EDaSͿI y_? 5aG;42HF~R=c=591>bG)P[ WK<}ؑF;<VBG~OW$mľb7 8,2voRCG?ZQݒ啢چgݽ}aXɩ4|/Ddv;E/Ftu-M --'%ȸZ[YIL ) D~U*+)P/'˿~}cu"%ϗ?s*LU3Rĝ$"17[XY;8;v OJ6&^d246O5{>>iix`u6׊*-.V8y@jȰ_o}3>P_GIAysćy --LN}ȘI)i2sr --.엖UjZ;:)G`G޾!GO,؟lSY?>6:zP<IWgvF`p{'hogc~=,Fb$/?0_}0:|ć밚@6B3%՗>Xg%_"2_ wtvus@)km|Q 6 1z#!C_Ie}rQ@&2,k o8sGjIUY_Lj boi?(4"&>1%-pV37nݹ_Z`M`K qm2 Bg{"H~}U}P1W⪱&{͂ --`CTU:APTt)D5JUANd3!PE||)i9y%& Mw5oniu1[;Q1tw|xvW=}aFpСO |d>d؁C01vQ~ זG k*7YIQᡁ~G) t5TlK^ɋ>:Ts6 --`_r)Fܯu?1 8C?z --`H3, --T'd +$*1t!l@UtcAT|^'|~|IiY9߻5|0b~r*12^iكJb~0ɸ`(0i&Wf?& }}eT0hgO;;Z+K*VXd7߷ _O_ΠL'4kcKJ*(F{>r7 8,2&.1%=3;bq'˞TH(ЮPæPB3})dU('wHaa>ss(b#)OyQ7 --)J? ϥ~^Va>>g>/_5՟bB?d>"_JZV4?`q 2㔷?1?6.!2ac^ãxN&fSϢOO2NC vnn(+!fg rwq?~ oj/Ca>þ)1qg2s/_~NIYEUm}cs+tR7fлHT"侈B=/p|f~鐠?/Nvǎ@[B4O_~ ~l''_I'>>|+s9'7&|9HLӸ?BOϐD>!b߶/+*e3͑c8iOGF1c˞^da4lǘ;lh9fBw:n BywדƇUJܼ~r~nq}N81h(Jd_rLϡVXð/Mvqj e+ȧ, --}1ϟu_"O~߱ȗSPTRQUӠ2߄|k|wO/b٤LwKS7";:v ?*`>dOY)ute^ݝ-T=+.^8.-)LtDhIGcY0mkb?CVd_2*j:z4'} 3g(vrig9DEzpsqvGoo@_WGKS]MUC~JQ)/bGG@}OQ;ܧGbQsn>ϣB --|a mœ/ȗWTRVUS.t懆EDŜ&27ocLC#>_40z_bhkij,/{ pFPOGSMEQ^z`,J(ak~fֆq BM~ޅsɉwCoM.cC=]m- u5_/Ɂ` --D~>k? (KH=SLg%C>e>}L&\E+>7W'uguK!U5u 2ߖd粲/_*dͯo131lߡхɅj_Ϻò/J68?̸B1'FG --I🠂>=MM t55U~~"/ϫ.GYZ} ͂ --cAiB[>G}q ]p/"/@zD&^U54ut M̷?3/ (txdtl\BbX]W|a0-O&., ?gч}3 --ZI{ƇUJܼ~r~nvfzٸȰ_AUg'][2q]\X֭ {JGH{)8 *;dL2$yO瞫Htwo O --}m 5e2Ǐ oc_ /+(jhY;zG'&^kZۻzG'fP7;L |I K @OW[KC ?/.N]吟 }hg'g"G]| --}*%('K|D>="#/+*"u L-ܼ:ިPcT+_xTbh_<[Їy]joAf]docifl/?| ~>c_#_Ҳ --JZ4~!q3sJ+[ڻzFǧ]]qka` rJZ}_qG?8~WGĂP_OG[SC]UEY~<HBM~LWG?e`K>8.)}f꿕}xN|Z|BE>ȗD7653 e741͟Y`ɑ6{ -- cCK?HD>FjZ:@d;##cSR3r.wt`S"̇c>O_|} --}WVx>Cӓc#}ݝm U%y9i)bΆz MuUNɟG_G_@o}mGH w싓>!wJQEMone{:(lT칤eUM}c3 nܾs6  ƾ._67 --~/7WgG;kK 3 ~]-M 5DC+.O 0mtuvb ݁'[{{3~vcF>N>[Z;:y@Ag>e~eum}c3f~2Rϙccu}lV_AѿqmanfzbtxrvFꅤsQgBNz9;Zh(;!}D_D'>CoCwob#-lw+"?Wqjz&n>Ag"c.^/.oji2wjW<]" *>H& rrs /'? `~_oOw7'G{;+Ks3cC6r<?|E?~)i]:&gL}w~='t"Goeckw:ܼ*Nd?}evO --(|>O+6%aN!=}KnPoW{Kc]MeiQ~n֥ 1gB}|' (2N_B/LON {-M u}<2Sł?ޖ_?$??3A~ .(gOO-n''gC?7m>>sA{{.Iė '"$"|Ss +k[{'gWw/_ x'㙏_SЄ5=KA]OhH_(߹}"T`Og[sc]uEiQ^Nfĸ@?oW'{K3c=m Ue2Ǐ~ B?g;?D~?d¢J+(jhR{ED%OI+,)mhn_v{'q&rnfz --:Z +}K|I#1ȷsptvu? --œ`~qiyeu-ց_@/ݹ_3/O0=deЇk 3cÃ} U%y9i)φy8Y#u4TeeH --b.~?D&e;.}1#}iYSJ*ZFv.^FŞKJIȾ\P\VYS;04:153wد4U3c 1Jhda (sMI$;GiAdPU[;;05֬{ν}{ow3j=ù/_z --تU/ZC<.I tuaWU?TDXHpm׼ȁ oD_@~5G@?a*|e"ojȷXJw聑? ($,<2:&.! f~>kjA淶wvi & mJsB_ &޾~ }sYζ憺e%E9Ԅب_o˞. scC}G4ޥWoܵ{j78c|̂bc育@M+SZoj39|0Ȫə'`޼ Xo8utq),ޞ6uW?Z --51!.&*2<4$(~g~$?~DdUQяOmT^fE该>_Lm_M|(*Ya-q/]HM0[:{i 'ff --*bxB'tX0Mj*Jeg&D޼~D$諡7hcu=t؉gΙqB#bRҳr K+k5wӘl`X$_XYs,/ Sr#e P'' <I om9 ؘ?Y~RPWүO8ȗ}}٤÷GodGW_&MLAm!^.%?,"*:6>1)95=#+'f~j7?Hg8< +_|$QᝄOׯ\Z\<6X_[}nqAnVzJR\tDhm}7 v6VM18yؑCjkj߷A 7?kEʾ=U5;~i-r-Ј̜Se%k'x|(4G#’bmckwC߄B#cS2sa̯2o`W^RwƵ+_tur15=;7`24"%+0B ߼z>zLÔbk⎰WxQSK{Wo? DPX/V^]7ur>¾BAa/.< <I vw__[Ғ‚j^q>O~u$!$1I0F:=={|=L|uB%>v \\!dɏKHgf-|:#ɩٹ'/o> Bqa~vzbL,p ZOW{Kꪊ;ycJW֌U[c( --*%""H9,H$S74MHAQwrvvkjڇwCneԧ}MJ  x:X3ӽu]횒˲ϝ=}8@_X!^/Ґe?B"b8rJ*jZڷ ,m\=}?MHJ+,)50Z;{G'f 7ϑ{qg^_*seiq~nfzrbltxzj]MUEyiqQA^NvfzZJR"8~Wg'~kK sSc#Cn!<_KO'?;/;ή7'ĵ{4‡ࣉ/ #>$|C6NېWPX\ZVQ^$AsLN/.0Wٜ'GO79,loa4PkK --3R=}p?,8EP_a.QF}Gؗ:A撜m}CcS k;Gw/Ј؇Rҳr *km}F's.n}Y جՕESXwu63hTe%Ņy9YXoO~G{;k+ s3Sc0DG?/\''O\]>D`k={>y/@|(>| -m]<<)~(ɩY9y%eյu̟[X\^a؜':5/cnWPhom_ZzXO,+.JOyhgmajd[G[SCUEQ^̅Rg!GDo7 G?*v  dUEeUu:w[:8yRC#c2sJ+M]cӳH@{rͮe݇\Ƃ|l&VWS]Y^VRT-.Nv6V׻%?_ʏD7!XϏ??=#q>_ !|yO> -->P|U\|$D[98:lGCʪ:j=ɩUy _yC- _́`oW{kVW]QZGtsv271{GW熦+(NH?&vTDC/l>h 'N9{N"`_A7u [;zxEF%$fdW-m=}CS3s Lͭ/^_vVno ܇{ \=g'60 ~,ꩵ5U%EټGx{y8;9oȏ&?*?~ ?~y,y'σ?I7l!zdޣK$>_ 'Ȅ.n^>AaӸWTRi V"G`/.0Wٜ'gϡx=>;O4~kb } ѡζF0/;#5)!_oW'{K3{z7]SVzE} ?~'@_0/|Tĉe/)(ihi746stq -- ᣔ܂j}cs[Gw㡑مU6X v_?)wwl/?#z --_cVWgg@!ߍ3@VWUcՙf ~~Y~i~|GG~xyv{f=Y{^IޣKcˢ O|\;P|c3n;#Eܼٞb:Z҆d~3YlP[|oዷث} 70_^]Y|X_WSYV\alTDh-m- 5%'OH=*,t/ggB"b/UT54un52spvFD'&eVTM-]=ãS30>C}?w5{ ylomibiuey$b"#CC|)ޞDZ#F:~~XoDGbp{T|hs$)"-_?Ȩ蘸ťeƦǃC# g_f8ku{ f>06á:\^joij+Js2Ӓc"C(nVFwohkj(]p^ --/)!.&*",tX`>vv`~@K69e{)X_YZhmn*/)HKg"C\yI;kKs#} 5UeE}h}01߇ }fwA%eUڀ}}C3 k'θ{\쇄GI܂ʚ M-}cs+kT?WO? gOA?Bia~nvzjb|tdh,nvV'-59)!>"hI37240#Ou??ZhKZ{r"E==֞== --|=}C#&$EĿt=D>++" ?:>15=3O=2_k>?ӡ 1E`_wg{ ʲ,Njb\Lԭ +>^=O9;031=~D[󠆚$DO }L苇0(?r/+~PS1}CcS +[{G'/\v+*&.1%=3'NݮށщY*2s} --Br3__]Y䤧$%&Ɛ%{zSя[MMQ OO7^d 07"9 ~@c/=^{&| J|Z|O"/? D~(I)̬uL{G&&gK+3[*#oj ܷ Dj #K ܙѡޮ; +Js2ӓb#os]m,L tAUUee 84?& rI)*`_1=#Ss+{'Sg{^x#fdtlBrZFv^aI9֎ΞF?Z8e5$c$?wA33R?,l~OGۑoi??C?-5J0|&Pzz=C{T{~A-I!ߓ@0OIKπUTV 70/,-of>2w3:W'Fz:[n/&ųY!z_VgٙO%RRJZVNAQYUMu L,Ntq;s㢗Հ!,v|R*'+WM-mw{ybl/ǸN _$~" {k+ٙ>aKK --r28i$Ѭ (C~_꧳i???j?-1)zz==Ž8' ?ŊfOddeD$zvn~aqyeu A'fW2n[$_c_@oݶI$D -- uv֖f&F!jʊ}i)/iTxv9e --`_Sq]}Cc3 kή=.\v+UwZ;zF'g@~GH* Svqwr ~ у͍{+ˋ VWA rsx͊" E? Og?e?߈OGOO/ [2ix#_ħ0z{D{̽= |_(AX+(,.)-"t|]X\ZY]*]z]!|{5 b}GF胻ѡ?>2X_[U^B?#-9!6:fk~>/w?hokeafl{숶A 5%Ey9ibų>t/%edTT[;8:{ߵ/.78<61=] r@o/v>12Q? --Ǐ>ؾ_[]YZ\bGᯩ,/+-.* ɟg'@wolL'6\k@ v)z(===={@/>N"tG[@?|t |:z }>3ﶃп]SYV\IMg"C\y)'{+sSc=$@їCgW}|ǹؗ+()k:|TGᤋۙs|܏KLI/*?4 --sAd/"PIP?-kQh " A"ҫiBGiREi;EШ5jv7[6lL&Y&3svel$;s_6 ~JZzFE**j!mr䏞=!ȿCEO*hOP`gI/I?akW ύ4`_OW{k~EyiQA̴vlۜnAޞ.NY͞ejbdЧCJGy $i5u V6ή =GD&`oښ'5#;' ~cK[gl߄ܿr2z?I2?1K'OxCI}) ~3~3.|$ _OQ%aA~^}Y驼ۈO~~/OLl?@t --cpW,VzISE{xzqO --_!xS32/(d_QU]S[WԂ铐?vÏK@H>dG4󿦙fs>w%g/oal蓖P!̩zv57adgINںiUc#B|y.tuvjӧ1U_?D:6׋𷷶476 --_\x ?W,."?FT~~0~f?tbo??O'lc)=_yt*G=`iO'y؇=zρ/K,~n~b!k[Zۑ޾cCb7@hӧ\?76_4$ --1oɆq jySvܾe5+D- ]f97P_OG[SC}d ڲ(oS"jZ:Fm\ܽ}B#%X.qe?\uro`%2{!r r'Te 🗅hokm%yYiIȟɟFKV|3 lppp --`=C_%S@=g=Ӟ=? z/>-|!iy ~QIiY([;' --#_/e2|Lo>o #gWO3Bפ_u ̴vlۜnإ!Aޞ.NY!F:Zj)}%G!}d>g`db:kBE>~!aѱWݰikRTe*![; [ݽsx]$uU&'} --?^T --??92|h㓿pbD$9IŒY1(8=xOO"CK/.-;X~ήcLJGNʒD|_esF>gOl>| ( ]_?FC~4nڰv舰@?E ]m,f2562Pi3J絏,GIӦkhjܷsp^7 8tITLܲkoܲ}'rz>O:3r:ܽo_3r[x#*/c}=B78$?;+ȿGG!??O & [n 3{xcǨQ39P{R49Y+?3+[*ʪ#u B:>|?䟕!2gc.QeD/>3p۟пrIG0 --r߲qF- ]f9Ɔz:ښ>>AЧ#6_N쾔*3&3}ym\=}B#&X.q3B6i_r_N#B]gY7\s߿˟ W 14?2<G^N\"8G~? #@g =}AG@`=bOGEaߣ4?/'~}CD~;> 4?_.GQ_1Q01|9ܻ٭ --?ʅюfJ9{H["!6:2<$v>CP_WGKSBG_UUe}y# --؟2o`d2sl3s +k[{Ggׅ|"c◯ZKrwJz --.I_rMrO3Mr_}ve/`s1%GG~HHAH^HNHFȟӏُcCǓ'As L7]GO,y͛:OGI9Q"!{bQ|"~Qq /~ ⷵwBBB䏜?䟗'd>%3 o2_O>~6CL$Sv܎jy|LTDXp"Ύ6Vfgjki#hB'5Q3辊 --ru\Uyp| ̴Jro{} }!; 6VhVȰT[*Kf0@LAکN9 !Ng19>7wO?iJ@`phDTl|RJzfvn~QɜKWs Jn6}vr 7WAt_ &_䯖 ߣʿ-_D9ECϣW''o_<| hU OIУDb=c,py/_S"XA "j| <zc7c7E3 O/ߍ ^ --C] m[(_^EsJs3Sc"BPX&@"CwrRw]S#j0{,>#G=5vSG%&eL+, pK)7mGU'O_[܋;Fɦ, 6~a׸]$!O`ߦ~؏[O '^| JוQI?`y+#R9s !e߳ >zMm"IZG0Q: cOU/>_|? {lm^x,]m-͍vCS迴d¼iɉq1AӦN&Gz[LF0 l} phP'gg .w$ A!aѱ IY3r fB?bWQ^)Oܯkhjxݠ/^_goI௯c#'(+0A2khR_ *?O/x ![Gyz^P3R{{%=~ Z2 --@>F /Rn⿆d\Lпtwv676Я9oP迺Bg)Y;#+=5)!6:2,B҄qcFz<=܌./~N;;; <}vw5{?єQ1)i9Eų=ROsJ76wvu:c+sS'o.c:]~*9Ar"R7d~*\>x;@(@0@={ׂk#~9_$ob|Fj][71:[[ | c?3ovqa~NvfZJb|LTDhp`ltw3J}W0PVPWWO8t-7lx.+̃Rz^W_r=s}V^]iů<mD~ (A}(V# }|{]675a׿`8^Ua[)K)/)LOIП2i¸1|^nF0 l}<ز/rȾd KLN˘WX~c'!/|z~}csK[;7,7n6~K --ח__d_Ce --q #@gr +A|>ǿ[ Az^G!KWuܯ"UG_I?A *_7X_c? 0/̛1=#-91.&2<4Ce]Ccsk[G'l8>l6wjJ[?CA;~#nW߲u (W .:x)Y`5)O$=Pom=bCܿv=p-&6w = --7Xi̿+Ϳ C[KscCݗW8ϞG~T?޹"P/ПSRT4Bx<܍W5S[oe} t>#$#\ F7O/7hb? 084"*&>1%-szN~alV;?Py%3_\ohjim=KV%7N_$U?D~I?ew9Vԟڟ/Up3wObPyf'z7ZpsvK"U׊G;kz!?~k,M'󿂧*Μ:Y]UY~BO;_B0/B?>& --B?0` --~>f/O7#D;w j;;>jps4->~cO<r?<2:.!95#kFnLN_AQg")!j4M$mڦm;j&QPS^Dbw9TiI;h2*U1GF~h& --l䟀~~a?#{ #@3;@Kn݉O{/vzKKڳ{=~ --ۈߦGE>Iɧ ?3 ,|Kɠ:Li r --LaRoB'OHN/,)@jm8שMfk?.ܿ[~Srܟ$TU ?4?& &%?߭u$2`?O/ُß?2" #@3;@K/v'>_M0 zaG#"Y3Eߓ~~_ħX#+G#̿'@ +` CɨhoVWb&'FG@  -- --'xB?(N7s7K龂}t٧gsXhWFBOI<[PTZ^YSW߈r_ۣ3VH=__2^{L!H~L~_3W/g?gOs? XZvN|B,G*Q#q==x*_ Lv!~_OcCH0'|S9̟;_ ~hj3u=N --u5%Eb C!w?zuW.CB ^ }4_B_e}Mf>/rs;}`s/ 0h<_\bMr/~Dtl|BrjFVN^aqYEU o{uS~xG}`bw'/>,/b:y3kH?f?ڟHgG?X604؝O0 2{ B |'>C)ȷȿ"F>=}$ŷ!293~pj3t]d~ɦMMUEiqa^NVFjRBC-_jŲE/ -- П7軸HDy3v'!]=.r._f˯[Xow41%-3;7Ds^dA(Q}|o}J; --~= #R_Z_DL~a?t? s %`'=4 939z=jq_E(V-CIȗɿ~wm2g[&{ߚ (??g (ףr#` fl/㟕3U `K@w<:Ϡ9=>#3K/%1[Q|R!&>E>?ȇ~O!'3ѧ'ϝ3o5z]̇j*K --g&?qnC5bQ --><1G }4_3776}.ܟO!a#cb&&edUTj]ݽ:b .^,LS?|CUѯ W_ZRLO/`@#+@; ρ݉蛈<*̃@=^^>'KJUCM*UP|x"0EOBȟ&oI_ 3t=]ς-'45UŅy9i Gc# 1ߡyݚU=cx{y"})99wL"}}WWyސ )rmo;p(컹{_,Ukmzpdtl|BrjFVN^AqiyUM]}#>MfK0G=u~;&?`'*NJ5Z??߆M ]?"<0$=PO֫g'k4[d;rۉ?_Am#~̟1+';o1m0 xVzjRB|ltC|m[H/~0x{B.&|5w̝]"] rߍrߗr7MB;}£b&&edUTj维=:_+6ڢT8R {5j}՛$M3l6{{^ lc4 !`?}Sw$bIyd?g??_?Yx`1Pp~ 3γ#Bqsޓ%>IE>w/|A/|@_d2Ƶ+:[+K --r3Ғ#C}]P[ --C0c-G諨O}>f循*G7nڼuێsK'4! ,<"bR3s --K+j[/\|.(vfvrKr* ~"36~߻;77;#~}=ݜYqSc @#gvnG_Ee <S`qOrO񾻧0sħO/|{9=u{bltdhC /'3-%1>&*"48@OQO>F>E>EJO>!f}CsK{GwOѱ ɩY%eյM-m) ?66>q+_K!3'/jC7]PW]Y^RTdokenjdwFq2B#?UOWV$3>bæ[m)TS?qRKGW/08,"*6>)%=3'݋COcp?YWB'?`"OOgG@&n^u<Ay`Gz\{{8) W((__.Ls?kn !; u5Uyٙ)1Qa~nv֖f$O@C w߆C#b>!E_JB}jqoظi4rC<}FPH؄Ԍ’ /_~?04BݟU3/ߕB_&?;Ef?c T??XXd --: --hocenbta{ \#UTġ+[ٓJ.׭ r/lrA#N)%=3;q --vp?/tY𿖁y/K~>T?00d(sܯ5z"=XmOq/^|^cˈϏ|1A2͟#{8j*K --3Rc"‚=ݜl,L :q\{\.C- D_y+|ϲ}Un.?C@ZX;{MHJM+,.klnDra'8gu?ş?/X0d*sܯ5zXmiO=8_(238+6ڕK¼Ԥبa!>.N6VFzgOk8zDX( kTUG_iV$}>o]?xXI-]}Cc3Kk;gWo߀踄Ԍ’zn-{|N| kBYb??(O #@fYv$IoypROa?3Oz >L4G;'M͟5<8doGde&'EGzy:;Z[h8vp@$?z~S/}kxQArБ5Oi;gdbnic[PTR^ ]x*˹g\<_y qs3˟I??Odz1Px+Q?e'sqg#L+wpu?f/=jBz("B gMf{JGDT9Rsw"If_y~Oْ8#y3z z}\^mWYs> ?r@_wg[KcCmuEYqa^vfZJb|LdxH|-[ЗЗ:aU bsL MHJM/,)S5wML;,pSEܿ 8~_-bW?؏?W??h3@->D}%==K{II"%CcNd<4mә'O?7351:<ڤ,+)JOI V*|=e.0l޴qHRL2__DrsZsuvvήnr/䴌܂zUskGWo쾃YRw_Lk_XhyOO --?O?h +@G>_prIO󵧹'yO{ --||NS$./EHߣ̿/S`Y웝hmVTfe&'EGx\@܎B:KsS#C5j;!B_D1oܴy2wo_2(4<*&>1%-3;w`hd|rzn?tOC#?v@H~!yOw??G</GY]E4&=PggkpO=7W./mqȘu1s`Sg'F{;ښk*J 3Rc"C^ wBDЗЗi:=sEk LL-m"{z)"cRӳr K*Z;F'gGx{O4@/6*"4X\E-+g羉%}ݶvήn^>A!aq ɩYE%5uΞщh!PY?ώ~uO'@ &j%z{X{{5'(w$ߡͿEq?5>:<Ҥ,/)HMN 񒻹:;ٲB RKNe:澱}+k.2wo_2(4<*&.19-#;^?8<vCyWoߡݿG ~V<$g:D4x+,G?w Wi{:6|CÃ=]ͪҢ쌴ĸ >2+2|鞶?7Xkdbfsm]vN.nrOo?E`phDTl|RJzfN^aqYEUm}cs[GWo,vIݿE/2/"ό"OO->BFzzd==^{5_kz/Bd>17f5cy`lNM{:Zk*J 3Rc"B --?oOsA蛚_-tKה/-_}37mbef@`HXDtlBRjzVN~aIYeumCcK[Gw$r'NFqkU}?#t -- ~-. 2 --0K_c'3sx |a,7{l1?y86zbld0/'3=%)!6:",80K`gQ5|KC_B_`X復 Rg? ($<2&.!95#+7??x%Q#ߡ ~_:ϵ_?/d&pPO|uzl=i={_:/|_Mow --240I`@owg[KSC]ueYIa~NVzjrB\tdXHP --u( ֬^>m-?_^r՚W YX"{z*Q1iٹEU5u*~p?_}} Ob_~<1 `VZu=dQG3{/ --ENe>06d>2e93ǁ}ݝ-Mܬĸ ]߾ B+^̗B_%yzq104265ܷawvu{)"bR2 --V0pFs.^ >~~N,YcP @M%vgDzL=cҞŽ1o7˗.~E?5? --loWfg$DE+~>r7W';6;l޴q: 3Sc+AHЗn gr` :]{ --:8>yHA0IiVޫ$@HB --BH1`lO8PGmWS=ݻ2=gu~_+VEKLN/,)+kضc^8rcO~;roB}X#[KL Z`ouy4A=a==S{&<޻3;ƻ%0# ̷̄ 0`Wywl,/+.JOMNZ --Bh44*\&Pw&JXRG}D*S(`2CG^_TRVQYSaN~㑣}rא)ϑl'џZ`,&{XǑ&oJ{{>/D|;(kװ̇G ݛ&iwnk(+)HKND̛MVV*dX?q{}p>}?X"+TϞ;WG]>>)%-3;tCEU- wwp㑗׹7]VQlCQONŐ򻤟m??[zP+<w8ғs'x/|e-Xxc揎 ;6loK#CoPRT>fr(gz]ZK%b΄a?2R YspWER3s --K7lDoݾsyG;x_ n  0ϵğ?? \NͰ?8#8ړ;y/|a%?gfm,+,/]"qi`Gطg-k6n(-*LOIJYvue~XHPѠjTJL*`To{gb?@$RB &sp(?o%VQѱq ɩY9yť6!wwpKk\O-v> --kdq߅wŸҟZ --p NSS;sO{9BI$ޏw̿26[Ab6[6oX^Z\ Zlɢ&^Q+2DOB73ǣt,DbLPtzc ?s6~x䚨ɩY9e7mߺõ߀͘=AchGU|dÆE淵4p }{vmZyS5gMF.@Re1Odo{gܟrr2R p._ S2r K+7a?xEpO"o#ܷ`b?r/p~& Yi g8=`{& tAO\`{|+/ә揎 m>02+߳k:ܬ40} r C]Fˤb?2 }_2'yC;|S||PC$RBh9($lkI~vn~QIYEeum]6orLs }/2'7dR~ğ?X?=_3 -- E 362daY[ 7WEi)I`|Aը --T"Ч͇w+r*ӱ%2B&sp(?o%VB%ٹE%('1~u!1e'{$3Yg|[q:'rk>;+x/aq5J --td~l4@^Q)2X'C3[o{O/He --ZLA! /]"3"侤TiNc\ --k࿏2ӟk<#ڻޭCɧ{̿3A@_d4uZJ7IEY/,'DEA|<iCߋ}~b?ÞBܟes~`HWo*,j}BRkuzCpo!؂g3 |./W, GAߡf߱Yݦ.CnW*Rd~uey)n~62?U?_\ --OIN ̇/Ct3^rrs/CB#cSa/{7 W2CqY*W5.c?084Mq}ߙ~@-ABQ0~|B҂E=~~n^A!~Mm=p_֮t: F}a?::6>~N~wOsۏ8?3̿2e~d4tUͯ_,,E#P_i31'%FGEEBd-QBߛ}~rT">LY$ !aQ16_x --A3/^*)74ZJZL P_Pc Gfb A6ϕ^O~ۙ=yh >3ߓɿ'g0ݦ.^U --_QVrf~243/<_͏   'w }|~f r?{> 88w?1iB+ oF@g:MrZRܗvCe0?K9%GsChⲜl;>6ȿ wA@_թШrisSCnӧ2X%hI6vaA}>dyM1o}_gA܏OL^p1r5'?GoE?s\ Eťf]ujO9~7wfSܮI26|D3b1 :F*67J+K.?w7!dV+H濆_̏ ̇o|ƣaߋ}}}HBq ۑGspE֪PDSG=5O+#b8Q|tO8Ok0(U+&`~MUǎ"wnGu|d`~H͇?w.2@@5ߛl>>i8C}~Yظvv=rn'Nfe/xFR"+Վ? .gK~wB?M?9i$2CwWȥM u`~Yɥy9Y'O ݍ$ _#A!χ>i<Is9vbG:>W/76KemJF# kסw݁l_ Sqpv#=o|2*e[L 2_R]Y^J5?Apw4)0?v0|rϠOʏ&ܷ/#ݟ7s?̅|i ~jZzFgΞ?E&W(iRs=]?%?`'ⳓ #|Hub3_ 3_P_ 2sgϜ>cۖM~|0(p>a> '7 G }\>}OJNYDGo۱kϾ௨545K7?7۴߇%dwGxt*cq'B| ( (NP'(O6Ё}{v#FaEE$́}OB( C1fCG;~dVvNn^AK% %mXa;SP)|l@7/PwᙯD2d>0 /7';ǎ!/֭E$C"doC6}ha>Oos6}Wn߹{/}ť0kv;aAGCYǓ ---Ywn$>MG>F+Cց>D| d~ xcܿw[7ӛl~|l0C78ܧq_ 2ᄋb*NMK'kt qr ~HhX㟑?7lܴeێ]{0+(_N ে?.B?s97wGO?ɿH-!V@m2:ux_2?/7'; C8~d`.Ď  { "b 3Czf7Xn잳͋};ϝ,Iϛ=sDKU4AcQ/%C[:n_LO_/wuGKo`pxdt|9 --~Z_unj^7qɎ|94 ё!̗cOdF]b`̄259_ƛϏ9 s 4Wpobf! wt& -- ܳoϏ=y,ɩxoljikF_0._/C,msOF4_ɟb#k@c#Ã=]0W`_g~r+ qϞ>}@福A_͇c/Qϣwku%"w/@}*2Tkhlnm --G )gs~Vk_o X_ --|/>{J?".FWcC}=ݝm-͍ udOIbf>|?/|{[XjG7VVB}7/Н>۽7Gǜ8uO&e}CSKk{GWwo6I?H 5ȯ!uC*B_#Q_Es@*0homnjWTWa♟Je>aQ{wkghp 4 3_" |m[dxCr)Yofo ܗ\d🏋O ? --EUum]}cSK[{gW A&.sq]{T#gFgO 45+kO#3'c20̷ -NK/澑) p  ܳoA>.Ӄ\^YUkhl&N}#S)9粟9'>R|H U??G?>:2<8PW[SɰO'2sDcGFA=ݡv&FL\_On|㇍ź)} KDj 2 B^Y]ohjnmFKɇ!ɏ_gYk==| "| >Nm$mM uʚJyEYIqaA-?zЁ0~>|WgG;Zhi2S5?D7?A{}>Oo5nd ݷ^>~;w=I  --EUu`hxd{d?!)gM7YC_]9_I|(;( 땵ՕBY~.,/}@?/7`Tlcmeiafjlp+OC/Ǐ56 6YEb`0 =agfȊJ努: vX K=gGL~t3Wٯ`W6g'>Jy(*'ɿ X_W[] --r2Ss= }==\m%bJ@`zcǏ*_&f+H,wprqu  -- Â?#@'/(,.)WdHg0gO? %-C\^{{n5?G_to݄!ȯfgOd~:%$Px d ߇e~hpTbc 751od75-/J5;LL-,mR[{Gg7/o_@??.>/RR3s --dEť --?OMMϨWJ~fgگ\G@?WDt9g$>]Y E>F8A~/A~3F~u_$LOrB|y1xGa2V*Y[YZ`B7`bRG}2_v6oY"ӛ]+R22s -- --Jpkq[;:q ?Fψ~~O_-/B}~={j3SS G>|!$%EkW@;2?*w`g+V 3Sc۶`_E7Ww_a-[  ,"ٕT|\W%&edeU,#xG&?>!C~TsOh --,yuiڣWy>"?ſv+8xAy'i*mKwzu{{ N&F$9s -- o~}ȇ$A`oOwWg{kKSC}mueEYI|uDD̿hogceinfblˤh? q?_QWO_,1F&V6N.nxOJWPX\Z^QUS[A??_]߄߹K%?&[r'_Gg x [zzZ{>k_O0߽ɿ }0d~&V滹89Z[Y*2|G1ׂ„v?|'y/H --+~ C@GOLNMRWVԑ_ំ/ao^ߺ -"Cqe?/ y!HbOj=qfD> -@ݝ-%.m-͍u5UEy9ꬌ4 #@3HK $"}=`YG6_@_0 ekquEbTP[Z;$¢ꚺֶ. --5k !dsא7'K϶_#,Gȟ)I93GM70_zr"c\||,oݼ~$K~kscC]MueyYIQA~:;3=d~p<}==`;XY*2D, ;?AGWO_,1F&V0`{ -- _X\RVQY][:+"Q+?|OٯJ 'p/Գ gGW0]/Cg"0?7';3#-%)1>d~X*|WV&F --@"_8Of`0amS}, "TPYXZ ~蘸,uN^AaqiYE/3s K+k; o.__C'I?|3s}4ϕ=={QrFD$rbI~SC]mueEYIqa~^NvVFZjrbB\LTdxhHp`+M --@"BO󵴎&<츖/utEbTPao`*4,"2:6>!)%5=3KWPĄxtlbrjfv~aqyeum$.gd渚G???X[]YZ\ ȯ(+-.,Qge&'%FGF}a02_)I%b.0|3d„qӤ/ --CF𻺹{zB#bbR3 w ONM/.-RL~L'~~~H?LqyGh< fZbi{|=L| |,q?Fu2@/NOM@{媳2SSc"CU~>^t[Й/G?I#//Lءwx!ڸTC/Eb*-A98:\r -- OL&煿o`pxdt|bjzfI]<9߇?|DgD?K/h8=4zLi?,|:D.ˋ 3ӓ#Ã}Wsٙi)I1Q!A~ޞn76T*dRz ϟC23_78n>$_0_úx?p ~~P,? 򕞾ѱI"@og{:yǻ?W``:{gQؓ3' |P`ğr M~$?hog|]F4|aGpOk ~cS3sK+"1}UQ$5uM-{zGF䟇ɿ#? >,!G8 `\[p/?ǭGg=(=$0_-&y E@_oOΎ֖zXH~*80풋J\ --2_ey$1OO<1#|a~uTS?yJ[~b<`[Z;B= A!,չy Mͭm]e><8 0&l2^%R+% {8^xm mH --I(HZHCa(m4MTjJ8PUҜ~:2=3wc Q<#q`/F̿?_>Мuɯe{D{)վ# |q. s3GMu45Z Sb##vx{z|b`8]ooqO]֮o"S_U?(KHLNIsSKk{o`pxdl|bzv DӪr#oүŸ?k? ]6 --lS?.Q/g+qK ?Ԃ&,";o#<0(ɉLOC'FGE  --&6"a?|}/o)4u7@o٪YiYyeph&YASij?.)NYݿ'ɟC^ƞjr_8ٙ4Gz:;Zur-ɄА?_/u3߀2_608=".kWe --? P --'$%o[;m=CR!'ycH~Νh3g/W @'@'}O߅zn=`O۞h^{={w --?:73}dE@oOe)cc!>ވ]n:|dzl dTϑ+O#t7'?vRSWa?<:6~`VS!?~Le7oOsH @''}#c)R#1$,o~׊N9n|07θ'>_rGf}W?4+5Ʀֶ#&!g@y*IE~B'W]_\$x`#w@dԥB QϬ'sqKޓ'&Oj?4y`bltdxF~G[ksS_\ThG~4@b!_U33|jjf>!08鸿\v>GI'n=<}|B(ܼ|TVQiY!X !rS5/D闲wYg3HV@^y tO_96^^ž=s^BI_M|*<?P"ZWk6WVJ\-CC|}|%2EUR gSe:s$28;)ZSlpqIiYyeRSG7084<A_cJ?&__X2t ([ l|?g_3"S9DGD{(_%hH1$ N#b,/+-)_XggeߵG/2kX /37θ'?}5? "c#cbܽ!khwtں䟦k!Џ(E_90xC ?}'V@=X/c/k/ i#/^$>vF?@w:;ڔ/7W77@]c] 3BOY,~WgjzFfvΞy --KL4k M-mH.$?ˏɯ~Y+_%,? ^<x --@$~}&=zZϰW}/>YԊߎoj7+ۻ'';3#=U%? rE濸d毒_3Y0θ>FEk{hKHLJIMٓ_P(R[WomljnU}#K?W/-tHc =};; {={{Rc!#L.$~ZD~aA~^̌ԔĄؘȈ0;wؑ3N毱||{r}۶!IɩiY9RWTk T~߇#v@?d4?'3t @V4O_ߓ['Y/giϵg܋޳.G(U[ HjsU9YiI F=4_ߤ 3O_8@S_!Cc1 Ȩ蘸lť*omO/яy? /~ J/Ol| ,uS.z=HOcq3 ,/^8Oy/ ' Mb(3HOMINJ Gk߾uF>^0W1}ooqOÿQ;C7!/SY!l|BbRH}KJMHjU~G?JgI~gΞc˟/d)`@g'R1TzB==ŞiϹ'y<1~=gYaERJHț=Ȧ,: [ l D --HYTpDE 7tȦN:3Gϒ}0wW) {v$߹vU+ a||?G7T*)K2?/0rK55j FZCsE%eW\ƒKێ=E}YOP~Ft~_O?yC?ǿ  pl~kP~-?<Y=jok[ߋ P[<gm]IXl/"'$_2q55 3gC# +; ~"7,3~I~'j$zI[BDOOЯY+b?g`  䒯ʃy8EްW}{{^?>%&>?t04>߶Uߴq}6X"/K;3gdo':#o~xѕ_mm _-IS?CB-u鲆W --pt Uz3}_`m^OuhϺW% sggS}׬^/#|bǓ%4祥x?@'M 7ߓG/z$ȿoQ{T~D??R~Yw p Yz3}O --}zZثoKދ{B-?#U^_WŌ|#oO'AɯcS& Zؚqߓ'ȏ;:ץѯJe/_w/]OO}t0vF؃ 7|1/+YibKν --U|$~oׯ+EIȟ< --@}F=ɏoP.?&I/t5o)߲?-E՟o --`l l _o0oЫ iuKއUK;T|D~am?3?^[p0Ko --O o_ KW?s.&@ !2w?p]W!=>P5>h9wi&# O2?/-pC 5seo%ɟmGgk~vg޲sAostt8X̀-zKU?'0Ao "5HOz`ڟ=^#xo_~?9?F {17W_ ߒA_/63Ms,NV;`SA_|>PyG~}O^^}O-C5s$BJ cȏNjw u+ --5pgg+%Oe ]pҗU`%Ew^wzޱg3s܋/O˃?8=iv!EoIH~x#?ƦfI6IS-_ }Ffw*ӯg   --pt z__EOPy8SzR;iGދϣ{W~q?sFTF&7ĻDŽҠ*?!I5]s_@?3~ _SL/  --`8?/ΫP̋ --={=Z'=gP|FI B~SScCC>/?*No䟈sөw~_?ؿ_/≓?m@'G3)}Zz>c /' "=hbZ7OxQ^} --|9$s3OCOA B~ːݟQEGŻo(?Rihllj%Oz;Z59zqӟ62\@3}sV7 DzP/g7;u#={~7?'/:E~sSccCA~`ȏ/ވ~_W"d?#%#a$<$?+'ĔF~3GWpj>A埜_G?ԫ__Oُ߰q?߾cΞޠpttNIρ<^]z;=^~s&~z/_2>'?SğB{[[kK į͏Nj7ﶛ^?U*OgΚ]@?_ ~ڿfm㿥{?_ --`:m>#<G{t^wI[gw%uvhߛ㏥ğk/P񧖈DX{!͒͏o]?7ɯ/ϙ_'ٯK\oԥ[,LnF+9(?_YUW[ic $H #ت7:tݳ.{s '3ߪ@?HG{Fp_c]8oagkkLx! G45z_%Wk޸us[wv#z?h`W_?%Eנ> ?A/}gb}>hM{_x+s^O?yhoמ,L|{ "~7@>BwN~O~WIk*8PO> w_|ͷ߉?242Y~}@?Hԫ{ў{7UIM=׮_#WE|"_sȇ?俾;?w?? @@#@+@3Ci~'y~>P'½\?=>x?>>8^ ~:щ7Grqς|P};tџgwo?_ -- c3}%Iyb~p^Գ9tߧoΝ۷:"~?<ϕG>G~;G_?ҿM"~I_g0 6Fgv@@WD<1?8/Ћl}kq? W 8UK$~:NRx_GSgwG 6{҇MB'y^OG& Wz#ߐf|im:'Izbſ0ihhxh-oC<1OЋB=[ϗb+wo !ԭ)'ȿL_џ_?e LHf<y~^eسms+ſL/''_ߦa_O?0,NmLyJ^c yRIz~>^w܏x_O|'R##փO_t;؟eth --ľf*Gz/{U{#{wIOxǎ|o`{_ -M̀ nAi%$_x,ʳJ/wXϗso*yo !4&'?] ]0:a b+-6:OЫrG;}ƽ>U`N9-OWgo.Om{$_hs --y__Og##zᯝm W3= ,@a }UYOe/[7HȽ>=/Bl2Us߶O'Z8<q --b#E --+=C'h_r>N~S|:%?;s0idx516RoOG5˃B ʟW'?22i v rOc<;?f' }:W#+_JgYnL@ͱܓuQ|y#H'p_~)yOYnB鯝~s HKF~O>gp>x}: }q#%[k_H  # ?"L=[i_p/=-_i~?;m_,n@43J~O{>t>G-);??7 0CA3x~^zk}[#q{gn?o7[0=r^\}C|Ђӑ?_99¿8q15| +\o:#WXO>5-?[iLʿ~K[Sc _O 7 @>Sލ߼~K}#q5П_?? Nsʾ>KW33s >G[GGa p3\||oEOew_!p7OG#8qK0}Ծx?|:սo_?O0g /7ݩe?iΕG܏x#swl*S0; qT~o˿@kЪ CzcY'ϽoBWS{n A_*^z}}=GZ_܀uo8_P_`=G5؟___N5 kܷTu0>j|&} *#|lĽ:5[!_V0=GF3YjOh`#NS |ǩsBWt!)w?!5yuE"бnޢ%BujG;shB/lt_nkBK-_!N~#!t!B!B!B!B!B!Bzm --endstream endobj 204 0 obj <>stream --((( --endstream endobj 86 0 obj <> endobj 205 0 obj <> endobj 206 0 obj [0.0 0.0 0.0] endobj 207 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream --q --/GS0 gs --244.1599945 0 0 245.4399945 59.3429222 55.4917377 cm --/Im0 Do --Q -- --endstream endobj 208 0 obj <> endobj 209 0 obj <>/Filter/FlateDecode/Height 1534/Intent/RelativeColorimetric/Length 418298/Name/X/Subtype/Image/Type/XObject/Width 1526>>stream --HgwaP@ )65@4l1!~xmS<*њ9K:zv@!B!B!B!B!BqWC"^?q Bh> iK @-ؤ4B[5>z!>P~W`Bm6kC6Bhö~?!6P¾+CBhֈ}W_ؘG~}?۴HxF?Bg%}3liCЙ؏V㾛ޯG!};3:v? --!Tw[o>1zZo#RoH}c@B --~}&%\f]U'K7i|ldCSSM?-ނ ѿ!) ~T:uO%Mw,}/' !y~)x?P`UÏ Ǡ~ --oCB۽v}VuS}z? j~ȏ@~agO~8H ##C{v! GÎu.z~ #@&3?W!}j ~f׸OOy=xc߀Oߑ~ȏG'{=!Lbs7 8kdz#6No}{K: o --XNr3NdbnoBh+(~ip;'{aO7NG)?go'b %~}g~ G؛sioj?o%0Csw?7wgiOh+6{>>0>B-|ڧ]܁o??O~ȏ2ŏo>^WCMz|`|bڜ#{' --pG.@ז~-WCgB.#?#~<3缏m/+&1>--&%?³;vb_d2&?Gn? --~}Ƚh܋Ƽ7>`}IܒR_ v OٯK/ȿ#Y_?ޗwث*}ȼ#"]ծ]O~hos΀NcF~?5{/oϨY/ʼ3޻~CZvl?p3,tfTD(~P:5R#yۼ7 {>^w;oq+mםb}I>w 7<#o:_Gɿ7+Kڨ)d#=>[= !>?'ϤG,?G(oN#$~h׿H vDdL~jn_'!7{^7I{]Fs^7*nIyK>=r/ DaGm#:_B~I|~}{bϫ^7y5x<>y~?Ďw8%+K0k?BMTqk!y7O້~}{ӞWz^WxE9akïACWn\:?`2SMmL~ --G~0Kwwq^gyE^'_T}2뫅Ia@\|0;c|uwz^UxkU/s+E=K Wn_=Aşp3gtc;LZ/#ȯ&>6|{}=YOԳ 0/+GԷoKiIWe --z -- gyEÿf<~7OBi'#?PN|?3}'yWؓJB/ --< ݪQߧ~ 1}_W3!+7O;ۿŸ Y/?O;P~??;?!΍@~f?K?87?_ |+mW {^'Yz^Wԏ~DiC|W+m_ caH͛:BM~?I~_'7~DM3IOȟ!牿Lm~;V;_y^}M{[O+Ƽ /74H@\>z8џ?M]6~W{yF^Y*:V:ȟ}3g&_"]s{ C)g/eӺ_m_i˞7zޘwRsUgB$!wȅr !HJI !$FBaFtiu --hAI-! V߸og9I;#K~x|֗hÎFSx9rpP?wѿ_w\!mm"’?I{%?3qgD~D>_O/ --6~y!y㸗7{^WyA^}'?{ws)ӟ[<_@\=v/[Tq۶liMuQgժKHzIUUyS?vlRJ>_2Qՙ˳_FgQ[i}-y?0 u/8mOS+bPyQ^7h'yNɾ2Y3~o@.];_'G hGl'6_uYGI+ ?/ϊDe 4>?8{4=b/3*:/ȫji/&N/%37]>_'9a M51W@e,bV_/ςd w_pXX6M>ϑOs/] --!.{{z jޏH3=^7Uz8/̋;K>N{e٫sY_C^w̋;D{r |v#' :?e}%~~ϣ?k|W  --I??;1CMM2g|y W --x ?.~B=}{i{aY+p^W +bWkn~/snNSK&?~Tg#䯯S2/ȂA̟Je~6D~ Xώg8?SQ1~l޴WzAoCy1xg̯c7x_1䭝=rpp9oS!c4~8FR'ɟ=ÿ( ?d# ~Xt$2'82.q䧋5~Bw}%Խre/؋Nz^ ¾Eȗ --9r0?G>?zό_(s36na?7N⒒DIlKl]ߋV½=Wz^Ey&mwRg_x.vp ӟ_(?rߓ6ї?~NQ3?6-6̟#/L$gx;2w|x)3gSۓRWzރ^W'~G9C W;WIjghǏiGџ)O~I~ --8< 3|#8'ɑ/7o[[⧃ޟ%/1`/փzH/ jb?8+y#`'@'#_Wx'_PBM͐ߒ}ɟ~q fK2?W2/D~E>7|{!K{߼?w=^gzD}$8ț@'b?<+y#`@ N+sI}1M --EE!¦rJ~A&U)k7#oBoߑ!w>{OK޻O@/̛N_~)9f]<2}]w RNm իK"//#$~wowWgkoimԸ75WW1 /,\&c~/+c9A>D:"DF"v=}C?? GE(=/>sGG؋ޠ7#?>g9pgn(;wf͛./ٟIF??k~xоݝ{:$>ڲPO8/#3aa%?ә@_J_g~}=Gua$1@HcE;qBSJ]޻ PҪU[E/N@(ȀM0 1iS^)s\]|g GFE'&%_XT\ZV7oB >ރGu/r'أ S9D'x?G33@o9??*/\`ٯE?[P]UQ^VZ\T}%䤄(  _?k~GG/o)_Ag*j>$2dFi#As=ZL~HhXDdTLl\BbRJj%eՆI$>O| ) ?z{xqϵex"S_IW9g| 'isI?WD?o7k Օ%Ņ(23ޕ@] () ~}u^`f& .ɏOHLNIݕgoF־$KJ** 5 @|#?_eY߆ރ'uOgi^P/9/O=ۯ0Z ??*I_d~"M@CU%M9efݝ ï#BM_ --:u+Y۳j>!@+ _#MOgf?#P[Wjl$Q#9 W'}gyO'mgcE9£Xo-L~>n?`Sroݺym~ЏBmZCuIܜ2IEAwP[̃߆:u/ṡcmR.g>&' {O$?`^~AQ1c[;_)B_~轐,{b=B/ -a g`)DBcA/,ܹ _G@nSWG{'IqQA~2!i)"~z ;' O_-Ru_癿J4ḋ3w{kuzH~0$? --D߷?_XTRZ^Q #iB'_ --[8޽w>==cOsEg2ƿop 'GGُɫ'sǀ@nSgG$eEYiqQa~ n{{i<N~oa1ױuNg1 Ia>"_43<۶trvqs$@1"y%eU5$;:{zFF? >p#u"h3 --(eLNq `@G? U?_! ?48c$_W[S]UQ^ZBߗ?x{y]0wogݷseRԩ|l@a7l2k$;v:5>Z@`p&?Ʀf]޾ѱQ3 --!7n¿ |G0EeEE"J"K'2~,1ooEP9 @?L֖i}4n w෧/Z --}u>-|H`>|G[xA;9{h:`7ut;?.&> >|{T{=^)gNH'2B% --_cL3H@Çf&itwu[j Օe2)Iq1ёaA~zKd --'$_oF=f毁ڮ]G߰qoH}C""cRRWTU745;L=}0'g>rP3J!H?x --1={ʽ=^^ޚX֬@ O_"A,g'G?48mh3q)Q_[߸aqZ[[3WS?rͷA٭G8߂SGFb瘑?04<:6>953;wQ @ ,>?"c=^Оa/RoƼ?3g%O?q'3J!$_&>uıGh :M 5Y{!I ?_<(Uթ{{__w fV -- OHJNMgAZ}C#c3Pw#/K⿋lj={νJe-PIO/?ȿ  ?HS4&'Fz:B@w&'&FGEwtognZ[[_m]wǑpHNۧ,ۢIEjャM{meyHNۤm>vPǖE@ۤ9^^(R?8< 8D##kbOy?q>8Oϴ}mâV{ 6䟟62<8KH?Ÿ pwuqr ~>~~F1 ?a>Fwrvu ONMQRo&6:>19=| M(>|%ĿOC("'^=γζ .?gc,ϐK~(?Hm"gg&'FG{{)2Rb##Bxo ~!Zas -->?~賛#q q2|SHl!R3?jPHXxdtL\BbrjZFV2/X$ph?5=;7LD|L|h98ϨC"{)3焝eߒ --?C5C =D#"?_+&X_[Y^ZF߉.U*33Rb#BS_ ~ECCΟ}}~9k|cS3Bj)e~@`PphxDTLl|bRJZFf27HU.B\ZYEF>.>h_ ޳jO^wtqhOk8~ѿϔO~ ?A򯭮,-.BǘWKTE9ٙi)I1QA0=\Aۑ/o,O?cƻϏߩEͿH1d#f"Dji%'3f~̬"UIx!!'D?)|mSgrj^ߝx(tU?F?\Ssc}ue?35IL]R\T ߇RXdEZ;Ν@O4 BBb)RX98 3?$4<2*&.!195-#+GWPT\.ohjiEȟ/-on] |X䣍gK||4ikhϴ^/uu3'G_'.?M~奅y*%Ņyʜ2]VXɤ HAkwS03̇̿b$065-2faQ R22yŪҲ: Z!nݾ#O_ ^'ֹc]k紟~M۽s΍[k775VWUŅ4Qah;(2KHhfj,0m} ϝ˼3320L$6HeVrk;{Gg7wOo,#A'%gfJ5HJ --$=@>U|"qL> -->ܳ[|ߏ#Od#O~6O~ݽ;o`PWS]Y.UdeOFR*1LMFW.cX?sT߿761|5|gW7/o_TY?9ƎwGgF_(ɿOM~/߽}&+}ݝm-͍u5U‚gm|#P ͷ[;:yxzMf~.|Uo`p(N!X?"S|jg{u[=^Oş~.5%=!ё榆J"9twsqv[YJf}#{Y}~ډGkHl.ʬֶvNή^> AGO2?fd~M]}csk{GWO_4$yuAH)Kg{=?Ot_,G?|  ?sSc#C=]m k*%0X' Za%JB3Ssj00m+FhR&W;8{z 3? --M-mݽC#cӳs cΟ88'QۭVlLbWAOOtO D]UeL䓑"B|TkWK>GOG?J<`vC6|Y^NVfzZJRb|lLTdĥCϞ0#@xV8;9Z[Zb6?A($I1SP'lǘ_P[X;:=}`o3!A懞y%:6>!)%5=3 PKDY%#%B|V^z@L?B{D_TeԔ+#.=?xoztْŴC)Ҥ1.}&E.[njniecgd<󃘙2򕨘􌬜\M~A>T _|ڋg?8Gϲ_8   -- Yiɉ q /1<3z{wuqv07]l)p_|٧:ܟov]}i}=}hbϧ73spt^]?e~EQ1)iٹyrED]VQ ɿ& 7⏢G$vࣼiLJ9解GQ:}8dk_ /S@yٙi)IQ c~> k}}n+l,͠hBgkov_I{]3_ct/X%KYnfaimk_f|`~ !x_'/PRWsf}n$#s\|v*.N-?a_ ᯪ,/+-)*Tr2SS@G_aCxzp%u?㾾4iO͟*y M,m+k13Od,@槦gd¢Ҳ*H~m]} 2"1$(082erRUTRZVQyZƦ6~X?#~"+ ~ʐKG?7X_q_^VZRR*2XJ֭_o7/w&PcCF&&h?69nn/̏2__*,.UWV]765C9?z42:3޿1ԏ~g$c,!C{ f-\]Z\*ȗMC:j}Ksq!&͟J?2nN.koܴ;?x̏3?_,,*Q̯Qohjnik&`/ --7{Ɗg&GhoC;-M 5 +`T$'wnv˦;9XvLiҤ6_4`滮3|`~4;K̯546wtvo# gG[xM(Jʯ:476i$_? +ww6z&8?>hmq=Hص{w:r$n~D$0dWa_Wȿ ȿsA~E|fJOJ{^~q򣓟'c>olokmnj_}Ld<#.];w!Gݞݻtjܗr_*11!30 f݆[:z>"I)i0e ̯_u$?OG3+[={_P~>{ Am05k ?O?۶nxy }> }Ⱦ!&O!|# s0?g=ve~2#_ߘ{wH~-[]m-/-)RɂKzԉcG߰n(ܧ72rr_r_b_=z0M0gsŘ30(4칰 ""b`gfWW33f7||"|1a~^RI|IBcs' &,W*@ggqBAܟs? sĄ}}RK{1LC~?7qq) ۴%?:-߷1BϦ CHBB!`076mYdI| --mga0>0mL t]iWޕdK yfzFO"2wH? ]?WPT\Z^2_ og ,;ſ^|Qa Cحsy9(߼iO)~ --}HpAr4>h*`w1_̏OLNa77IW!߲u;p0d~3E8̷@淢wI~/A&wD/?lԳs ]'?)qmV//+)*!3طg׎۶v?>.&:/BCQ/b4 6 i}ŗ釰Y9ťe*:G ۉ?;.&&wimx_Qw_;fZW)*J ssN1Wr@>q |>6_(HQl濇_0v޻?Of+(*.-T(UjF淠?| 2d~wſ*oBG! --WsU~g2~2-Tkk* uı#_3܏@N#}Zsa~H,#"`~a ߈߶2gʪjF5@曚Dwf5A'AU~&=5?{ :F,/-)g߱i#rC.?'"##}!vOr?Q|cz#!;B/Kx0??g濆_N0?B0BQUh:fD2 >I/qC|hs= ?(iGbZꌵzF]](sϜr_s'v?"T&B'M6ce/b_g7~ť`R FSb@u.(߻g}Zzߗd\,f17F]D:Oߏߊ@wu;ܟ1mJZjJRb|lLTd\&iuˏ&[| !BX* O'36 wW]o6[mֶvh2#o!=9ӕ܄o1'? (Z6X_gj*^"_ydp? prߑ| "|2"OϞc --/WpWP̯ViZc]CcSjoi?ǖH_  OßWOy1>ߏg ~pf4756kuZJY/:EjpO<أsgϜOb"a2X --;r> _/&B!BD&KHLNgei$?F_RWkZc}l[;Pmp!o x`{/w#[}q& --N --~p_bn25k~5rp1LWEyrjIɉ q1ёT"'|{1 --?1T(HeȨx0?5fs//^b%azGhW(`o456{k[Y0+o2" YPQ|W8wgti޽\s;!Z6}^[+ʜa~5o/[d1 SScc"2X$GOv}~#kL9B?B<>*KdaQ1I)`̛`!6Zx +_zL`No#oim8{2'df[Lrkz>ByF []ʕˤlj3uRp?c/\Uq|ե8 --@!{I! ! : cE: --H !=4wvw}<{sM;qo3;s)oݼoLYXOf~)Sc#熇Μ: ? p򒢂4hrq p_U+2X$_bOpmi>=L>0x|H,ɕjNok_a^p`~|RJZfv.^8柆揎MLNM7ϚAunOC|&ϋE[?~r7B75{ɯuC?|sUM e%Yiɉ?ukmmB.5pߘe`?>G SC -- y|H,)Tj  -- KLN/,)ojnm?ǠCi`>533Xb߄|VQӴg;? SGො ?-oޜ)FBT/.HMN=\]vzZI"!g>>ܖ --?8|+_ KdrZٯqtGD%$gUT7.Ss#cSKTg1oCY2|'YZ(WfGSTNd%N8!i࿎?e4COa9UŅy9YI qQa!km:Z)I"r`0g _me\lloظi`phDT!!)5=3'k{o_?0yh+@=v1"nWp̿ 3<ȧbI|JSGg8O!m?,bio?F3i3?{& K1ǎA%>i? S3&??߷c{Wt 7;3-%1烹 wh*L* <,C/r3_BC_&W5:}'gW7wOo䴌ʚ--[;͜S q]ϒ/.-I>Kf)N> {(tM Q>՟J?)/,_H3bBorנ/oڲ(?7+#-91>6:2,$(^Q+2X(_e\s[z[|[YBD*W4Z[`> }h`HXDTl\BrjFVN~aIYeu]CSK[Ƕ;/Aߠ52 jS2g>FSGg~ٵ9!FIi3^y^i-wg?&>0;wtohkij(+)HMN >pFQ)R }k, Զ毶"TP6z;M=|C#b I9yeյMm]{oei`e||3@??~D~)~(eL7'zgp`ΞmmMUŅy9I @?/3pNӪ --T,sE/7|?:GB_,ɕ*NoB_@Phxd!>)%-3;g݃{c>F̿*a,f>p22OzD6>>=z*W]A-ЏR @Oo*όCzߢ}e?tC~=wtw67Teg$#C=\]AuR.ܖ̄c }k_B_Pз_>0?($,":6>19-#;qKή]g^ܷe2|[HV7bB">>=QzT㍘˸.l祐 '''>D࿍?/>wG/د6;k.oKb;vz wV{kKcRQU^ZT.MIDG }n<';oXv.;.- зc՝- --%&KeJ?8lcB#!D/I~|.kwD|6{=^4W27>C#з,,{Jyy6#ﰮs S53c}7ρϨ_sQྺMPWS]YVR#ϐ&'DE/O7gG;;o۲y'0,VXs1wPv`lJ3skmc#C#cbR2r --*kjTm>hSg~˘?}F_|R|F|=֞`Oγr?g> 'O?c5z%&7ւݨS}6USCmMUEYqa^vVzZJR|ltdX8@${`o jKs3&5~u迿x(-|]ֶNOGCOcKڤ'9hmiUTfgKS%aA~o+zk,̹_BB ߶}'}GgwO/`phD$.1Y*˔W*-]=C#cl/#o5&6%j3 }ĎZ3⣾c lY>=fw>C^Br?O׸~&ƍ~7oߺyec#C=]͍JEeyIQ~|7߸c+A>0 UfV(7mBޑEDKRҳ --*kTma`GO<}Li%$j"9j󏯾c{=^=Ih7]72 ~|h?ʏ?뷘oMvu'Ǐ= Wwwjk*J ҥ)舰 ?=m \s[HB'n;g7O/(P%KL2s J˫M-m=_`\~srvOMQk|ck!#"3Sz<#uWG[KS}(?W)&'DE>^n.Nv6 ~Q[_f*ss{S3.N @cA _ o2OntoM޸ܿp̩ǎF{{:U u5eyYi)@_3s6}}nofB_' --54wwpyxšQ1qRYfvnAQiEUMmC[?82wA[w!4⅚ϙ7 90O;ƇC{=žR'S!gN;izI|_|@S~B@~~m_0ˀcl?r{?A?EOh?`MP*/-*ȕgʤ q1Q!Їst/ZD}}n8% }>070) A;:~A!aѱ I yN~QIyBYѥ>z20ٯ種3Lf1(Ǝ_8Ę:bP{ZIZ!!*"dl ys-ۄIŠ{Wo|/?6gqWCc9IգTz<3 JSkQ {_@/zgS~|bGUGxtǃP_p?O~KBP'(eg$Dz:ZY=}ٵr|5_a}Ön/gsJkMi۶CB䩳-m]=}C"c2s $e*Ym=u =l8aHb>#}{h='=u!x'qdMl=B7}@/v~B?'Re --9 m/|&FVVV)-+)HKN tsq4?ԉcG߻{vŹ4Kr8S ǩχ>> }}o --Bwf k;g7oЈ؄Ԍ’Rieum}cs 5> `I4;4@3_| --z/gS xTWOVGW+F49|_fw #L'NxJ4?-͍5Օ%9YI QfNz}׎!$7m4%羁}0_Bq#*{4߇۶=p(PhxTL|RJzfN^aEq̿rud6e/O'Ч5G =pi#Ly&< WVkq|] WD'S)4oѣOïRtRAFj+~OŎ6eKSC]MUE /'3-%1>&*<$S'=t`۷s's oJZ#M 7W=< }Kk;Gg7O䴌܂"IYEI ` Vb,b%5Y諄>?gS='S0)LXʄ|c3orE r|g''}VVV%-fg%'EGy{9;Y[\8w$wk&k׬rȈa --*_ɇ~FwC߁G<}7 (4"*6!)5=+7TZ)o+Z;.]GON!#n/3|"WG_-||F>xS{3Qs WV3|+/y)YVg{ƾ?-?^ 6*"4(L-?P֯3Yccs%O羁}^4BC }> \o,O9?0$<2&>1%=3'EI'׎7? _#9чvYf"=psS9Tx4V'㖫ci|ާW@?Oy!6Cޜ} Le_+ >>8cp`]mʖ憺rIqA^vfZJb\LdXHGHo o,Uj̐iO'ϣv 7. --?93 k[gWoఈ踄䴌܂"IYEIlۏ]c~"~K-HGA>p641*Oo"z:Og#9l\Y& ~%[6 %7c >}vg NP`ՒH/}Ml>Ϯ^{/v)M *i 7;#59!6:"48II]c,OsWo`߰8E7^kt _0-m!|BãbRӳr KJFcbkƅ|==J [<}=|N|xzJ@U}5$7oyjCV6NQ IYE2iIl6zG'QƽϘF/S1>`gX-۔ --ysc_qh=ROGx&{,.M?ipUQBIn}GBZp@[XRA]a $!d_B6]v:6CrIز^ =?$W>/=3yg}Qs --^׀]:R~$N._pσ -->(ا=׷CF_#hWiF <~}yٻ3RSb#Bm٪~,rm7\.*}依ƾtI[ BЧoO߱~gGBǷujKk֮߸ekHXxTL|brjzfv}!a>((d&Яo8owd [\"ȠTtS~I?'sF;TΒ}Lcyq"Q}>֌p?r=ٙ黒wDoٺyW $"Bz:R'omZBC۫opvqsݗC__߰)(8tGdtΤ]iY9c'>2R#0]d9F/I}C_{ךDM|x {e=QO x;Yf% --5[7Uq -- ,폈d?#3 {b#&bibFl1#-%)!.:bG趠Md:GR߷wO侏с 徽=/s_o6iS}7BG>P5zIZ迏_@o OLI؝ᣪRhQiJoli~ ܳT_m ѯDiRY|/'5y6^N/|J5?GoЫ _O'RV_c*o[Eۺ͚5MƲ %ŴIfU:/?7{wzjrb|lTxX-5%Dϖ?sӫ}7Wg'Gboggc6?<OK)BgGB{}?fSYbj;"c(3 /E \(3VT" a>g"ĸ%Ϳm淑 --ƆkBG_HqOMIf,>I{z!bK0i>EF|@CK!?ß3 gjtu/_V[@[cm G㣍?_\tVl6q̴]I;b"wlڴHiS'Oǹ?x~}wW'cgN)s ܷͣ2􁾽>Bۥ/ 6O 2R/GЏMu?9sN+L02b=~Ӎ-W[K}⢾VԠg}bB_3>.&OK='Bz</}'?,l5~ޠW5+@'@3~?$GEƳY9yj:j|Z]=-b}g5eo+侩XZr\Y_nyٻ3RSb"B!KUϓ?eF "s[_oOw7gry~ܷoGo G;]=||dϜ;Q3O:iX$JJ)/B͇Zf귑j --}*}!@0?6: --Ƈ >' {a^1KѼY jb1z׀q迌~=,>ܯǧ[iI16Z >N=ٙ黒UoFr>M{r/kdp@Kvvm}+L}e~#̿1_O;ZꃉkW/Cs8AA>ė/&큽gBxhHyA'?NsgO]O#a??˿j5ÿiKжv?!7 دJZߑߵؿ߼ɹ/ܿ|TUQ▟=r_~qD_eϚ[qGЯOݐn.G:f?6mc~;}sv@D`prvu={?pАnj8e~s.VgN KJ+La>BCͿ߬oV7L}SeyYIqQaD~2˦ ֮Y' E3D^0/迧K3GΛ;~A:t_~Xqs68Lt/(\Yye7[Yk}}~-7DQ_h(/57r#Wr?s?^wsߠܟ:e1~Ç4?r{W_/wWg'r_ܷ{Y=ImN?uyp|bT01m]oEQ[VihMhVc\"ײ˲. Uqy 5igę}3E}C#BRbck7B/08,":.B>G/^^Y]S[ vg eH?nQd}> --G tBdP >e=YOs39d$6$ !ô --`A). ;qXU5 RZ>/\O}}=tSWe҆:pW !w3-??=-9!.:",8徝D,! cA3}2?F"@Jb?C?($<*&>1B?k z! ?qEAu MrEKkJ/Ûυ3jP]J֖ƺe?;rߺ/X9}aϨgssIJio{<ɶ-П_&ϯudjzEuM]cSsK+]?}bx!:ԔƆ[7!]/& VageB'Dzy9c6+ 3Sٟ`@ױ:ZB_CCBXlbjniemkO>B/ 84":6!95B?;7B-BqI)Me[B̧{wOP}J\)2i7ʮ\Kpߞߒ6_ K=bIO39h(H6k?) --h@#~_]nFto?'r_܍ʛ2^{|ٷG?+W:;TJELXrt߼s?7{~jRBltDhpӧ Z[Y CǾny?B__BHlbfa)4yʴ]=|C"cS221WPB("A} C]F?~>K>J1[[M 5UJ5w;úPrA|?#gԓ{x!;;mʖfY&K/Y]M`Ԥب _/7g9S&CH,L"cd}?L Ӡohd,215c;8{ED%$C/\B H0LWVS+!;:nc}}dkQKGWȥ 7+o]tܙS }{@m[6_K@/Ȝ#=hs39ys_6x !A?OJf-FW۸6<.\RvfmTb#|͎^qH}} wuv[ --rz߲r?gi qa~ޞ.N3O}ط075jaGctG+oc 7Jc&f@)f̲wtv -- OL d)wڍ`pЯkhl7ԝwE3>  ",pf_SU~_~cGЇ[f3!=pOFywǃf)['Q~?=cr?v[}>skU5,\?K: --ᄊ׸z/w~/߅;˗.ɂOI  puv5cڔɓl%f&b`?gc XǾn O}}} --o!"f" s]<}B#bRc\퇡>/oʚʶvuGg7>o>/dhb|CjmK1=}àcMʼe$h$=!/NҸqih`!~ @ (h~.s?z/KbK-*o<~מrc=srs2BÍS[2/7r?=5)!6*<4(qӁ_NXZE2O7V:u}>}=} ʚG/08,2:.19-#3B`{b -->пBu>ڀA` >zx~&/8F$QQGҫ{ EPHPAP)4 FF{SjVƙ59(O'a{?w~oT])+)LOI??b;T>D>GDzO}~SfVYryC]-/$sz}_oMN6VF4TB<܈ff!+9~>U\<|B"k֮SPRQܨghlfame|KB?,<2~l?1)eQ`?~[Z*Ude&%@oߊwqrDc|=Y'S3}WGř(Z8ib4LߠNƒ_r?7;3#~dxXh_o`kmaflQSMEIAr_ZR\TDHŋqV0gW}}.n^>Aa1 )-}CsK;G^>p拊K@_8=q跣CȮП?"0PltxՋ&Կt0ٴqp}twmD;Z[YH{d=-=<-<\6B_K.7B_@HXT\BjzyE5 ںFVNp}'@p(ɩ/_͌`86FNᡗݝm-$/)L?W&gdF#Dz"~];z{or2752ޠ(^Vf(f_|R/8scC/&/[苈KJSPRQܨghlfamr>CL٬ %8oM./ 3?7}G, ok~WGkܿs~nVFjҩa{-]]&F|- >xeȬg5!0V@#Q#1}GgWwO -- >q*)5#+~ՍwqlrrMWU\.+Pu6L)CK+|k Sc=퍚j*J --}iIqQa!~^n`>9}|G>}.n>~A!1 @:9eUuM-}C3K{G7/m~;w;v< --ss  --6?A$#Y z1~yp[+K!ϥ%9~p֣зBA|U=[Og0OOI.G9~Dojqcut}SsKk[S~G%$/-~ǻ~7QQNy}G 1k _sbQ~s)8;zwmhgcifb n`_LDHk8sc/+Wqq  --IH]/A[֞;v :sT"~fv^aqI努B>mg13M?'Fݝm- O~}x7OI --?r0RWɹ#r}Jƹ /;3ɘA{w{[+s#}] ʊ}) 1aA>^nU4K>g 0+}^~!aQqFm=vή=>_tJ嵛Яǡ߁B>2?'<3c#C/{;ښ?}ޝO8zh^=>\x ScC}d>T>{= vw蓌ؿ\yνGOj:{_Cٻ('p͐(k yJY酢,بCVF 5E2$E1<\VXG!9s9/`gAC苈KJYNNAIU]#D6ȱȘS32s K.]Zu;w?_<=~}EE?suT@2HAYA$I9gA s9H2(QtFUuvD}SW!"Cj>&  --_96-ܿrP[]QZ\ r?JlTxhp3xsr჊{H mssr`v }*>2s9g> +;7/nq=2]WFw] ̜’J~ױП 0߼B##  3w'o ;Zj*J --r2Rb#Ax8ZhiW:r>||a>aO<p +?=@H?ʏKJIߏ?8 --:F6.0#cR2r --J*jZ:Ƚc7'f_3ߘ}ܟD?24r~a^NfZrB\tDXHP6Q"\luk1WC d9KЧu;'V?-nCG+R:w?08~JzVnAQiE --}chˡψ/>(f޾u}t8?;=)>:H}7';+sc]- 5 -- $ġ|(>rYOux\MaP$.|`CH~?t_Ld_ ]c3+;'£ҳ˫;{Fߺ}wfn/?}!oDiJ_O&4VUf$D^docif|^Yxg$8 ?yyXY62g,l}n$+<|섊O@PHXD4 涎NC#c0')OW3{sw#WImMuUeEyqQa`XTWUV:/&/Ob=yzY C [w~{q5 M,P_KL+*kj#u_ߙw ^}Fi$y%?r0/;#5 --@O7g[+sCSWU9~E9Ypۅx8p3g!R_ۼEhȎbK~3ںFv.^~.^_TR^USF" eB`>R/_<{ßߛ3q`_0'#%!&"43UcAqCDd>$ǴǥSFl!|N\@#~v؉O?3gu `{F$dV6Gݜ3={}K3+rmjwIm-5U%E9i0/_ -- --rwq052T?}ı#ۻVdf>nNMl 0}f)C询BOA>pA٩9{NQ`phxT앤Ԍ܂Ҋچή<'VwQ7S7Ɔ{- 5%!~05?|vP|={K_Obh_| )s m;b70$<:>9=;8}Sy?/r֦ܬtQ=\m,͌pJY;wlڲ --qL")_M@/ Utnq)i9paשih[:8yED%$eU56u{)?BzvB̧Wϑ 3S7ƆzYiqQa>0UUTF2ǸǭW:Y_T)C101eOžO@pXT\bZV~qyu}s;w`hRWN%/-rXWSYVR r?!.:",$P_GKC|P@b.ȾbcZ*3_FM\<|8bR{eªSU502stq xrdL|bJzVN~QiyUm}SK;o-S(|)`w'ǯt5Ue&F^vs4 RRamYGC1/Boŋ?f??xs^Ҳb_ľЈ؄̼ΞQ?hnܟ Ձ2(?'+=%1>&rHPٯ(49F{ADކAzC:Cw*]z )bMvHN}wf`7{y}G ^.wKΟ=suY(E>3=gΝxʵ}t\Bb4 M-m\=}Aaq)YEĪGcO@!?!g=$!+ˊr3S xJ}q!~ܨ]̇C)ܯ[0ef_o@9@ƾLNH-*DO>}_"wYGÃ}=]͍u5UҢܬĸhBh n@aA2E߸qF0g --п Ч=n^!Ptr*X'/ 8,2&>)5#;DxB%Je v vlTlLnoi,-H --vw27PQEM]mXt!|gȇ~ ?sW32sr --O-,mhi&GƐWV?6^.̿db> /;#5)>:",8`cinb(' /x oi::d9 `ٿ> S`/\Nn> 9y%U `HxTlBrZfN~aIye̓}d'A?79oBQiqnfzjblկ(-IO rs45Ū)KKs}d> >[xð8nAϜE_܁(԰n^~aQq95P>Pn]w?ܟ}N}r_wgæՕ%y9iI1!>^VF:Xu%yIq7|:qc}L0B,I>m98y1R --ʪZf]=}AĔ܂RbUM]csk{Wi`ph?ό~ {WXR`cab(+EI}v6?FMo6Оf:~?uAUT10o]PRQSG[\>Pm=)쯾yMgߣ t67TK Q }3c]- U%yY)qQ v6[7A@"/>s6 =_Сp#hп/(,*!-ghbnic KL+(.oji'ON=Frc?:<ԯ&g%Fx[[kk(Hb@߽:Q;v%>o=65~'rMjcD%eT4-\<}B#bҲKHG*(>"z;Zk*ʊ rS#‚|=\m,M 5Քd%Dy@c%I@>s>:t п}.(9~!a1Ii9Eu,@ --/,)~pɩA-,.Z~vg{;[ꪉY1 2w}Nn^!qIy%U P(!*6!9-3'XUSC?̋+oV~O?_^Cܝ,͌tjJrR‚\Gwq_Sȧ[q՞f۟H~\bWPX\JNI kdfebS;o?_0bROW{ksc]M%(?'3-9!6`keajH rowz"ofK&l@S_f|q)Y}k;'Wo_|PXDt\bJzVnAqYEUm}SK[Gwo?yhٹmBBSR --Mvw45Ū*Jax8ﲱRS3}T?'F?"<~.\zoXr`ĤdUfvN8`BtBj&Pj{rݦܟ}> stdLhki"f$EB.v͌ t4TeE0|ܜ4N>ŗCFO/gecĈJH*(ij[;z~}FEyf$kv +RAAE * #U@z  ҤKw 3''j}g&FfMr2b‚HcFT>C|.3~>[`:=(!#76hfsrB_J(Is@_OW{kSCmuEYqa䄸А@OW[vV('> '#(_!쯙쯨+ --8@_#{(}Kmw/߀a1)i9E%5umݽ# qx$iBB 3Bwtuꛚik(JK@Rf+sLy3_ ȮG^!Ҳ --*z&fX;GW/?~ --QϬ2M$q GG{:ښj*Js2R#zvvƀ#jʊraUc;+le= oFCG_R#7#[_1= +%~`8exɛ7m>J|yB~Q Qm]{G:T9sEϕ}܇#?;CISDݝm-M5U%O --r!1z8`-]`r#:j*i&o ,>7  --WRQ?vή~!Q --K+kZۻzFF8D1]|.bp>۾؇'@ugV+Os'or>yzjǽ@lomj(-.{a҃ب;~N7o3TWQG_0e!aq ɩY9E%e5um]#'I4Jc }Cs~yڿt#Y_@WSH߳ 1=30_u^/_TL --#x_qy>ܧQ)ӤI"7>ltdx0?'+=59!.:<4$ Mϝ1:qL_*`_FR ~m[6󭲿:\_;,%dU568~WYXY;v [PTR^US?[LKh>D[?-s/j/'9]y껾 @}n7~,9Å~}}ʀ!T7?xIՀǙ{AS3s --xssp?CISDζ쌴ĸ舰A>n,78|HKCUIAVF --/Ɂyoۼ{/D.X{'w/;G&_/ێ6XkW.?k|8`_[CUYANFJ>ؘ`e61_J%OPXSTV=ri ̮[޴uprWX\VQ]?8<2llGB --CC=%~a;'I=IP}>2K۶ f>gό}4uA}3sT?8 [XRY }>>A$/uY܇#?KRIDA NM)4>jk4/e`]_, ?| ԯ,-Lf&F# w .M77kk3O}um=C#S3 T?*>)-+QQԧ;kmp9b334 --4E$Lhkn,+.JOMN -- puvy)Ct _v[ i__Q{gquz(t؅"Hw-9̀{Z=}gaQ|éOTJm_ѹO-@wҨOR_JFNAU omNH-*@QI}8^_/'{cGsĢQ񱑡ƺ~b\tDHKKS#=-uE'}W/gaߞ.6o>?QKBY!/"vYT5 ͬl\=}B#b!ťUM-mݽ}$ --Ч?3߫ _k}0޾0(MuUeEy 1A.@}}-U9)tR;*BfV?u/ ՗ST72{$fAZ;iՇrR}2<A!'Fhki(-*JOx:ZikBK/_d?w>,Ojt~`8F<}&o}.~AJ=|$LIUSG7 8,2&>)5#;$!tCJR3AU8)cQc=m$Rcƒ<]l̍d$oN8 --g&X]`ģO ;(ꃵ 9~ݒ| TQMoW\^]30<@a)X!>_MV>e I 91> --loij(+.HM ts276PUz&`_D  --| {?oc7C/c'\B"/^E_AYMS  k;gw/߀؄̜’ʚq --Ceϰkh#]mYi^6ϵՔ>{ڥ<$Y2Ueć>H>,D9ywy+s:!Ob(@_OW{ksC]ueYIa`?9!6*,8䅾2`ۀEX#w6niwC(@;<~ --}ndja//*)oli ?@a8@Dc'qiЧAECq> --1s4[h$Q҂@wV*Ϟ<ƕ |\@}ٽk۶jK46@t0=;w`>zYv.>!(hZt O),mhGbH]G/_>d2I, P[]QZ\OMx:Xi(ʓٿzYwهa-_I!뱓D7$$KCU5 ͭl<}"IUV54vtG(>,3١OEes~[+@4~hmf$Dz8[TUsE1!>n>t4/[`k#D0? /$vMI)9U-f.A )P֎ >a|߾UU[)1CaG!Fz[+ˊ 31a>nNVfƆzOdKJ܀ qs?|m0?Bs --]LIUCG7 8<*6!9-3' ?8<26Da8D50O;}{ا}àw6Ue&Ƅy28]?}i,59~Gksc]MeyIa~޳ɀ@?OW'{K3c}/G?q >}=w<Ҳo)QQ506?(,2_TZ^U[ DcgHWުP#>51:4T_]^\`cnzGU)qQ|L t4Tg3 CT4 LNpp?+"&!uUM=c W/'m]@ vEu|}g;oǷL>) zr|ldh~R|LDh}+3cM5;}3|ߕo3X>Z&V^"ced<Q\ZQ]Ҏ?Bcff@/'}d4U#3!C6 J4=1:<\_SQ"7IJblD} }-5eW$ rq8tRoX}$ w蟰(i2yp Ee5m}K[G7oؤ%5 ]ch(p"p_3kA8y_C#~57;3EONloi?HKyᾕuYi}}N}Z{]B^\F_o@px@?\~YEu]Csk{WOQyE}b#巆qqԟBO u4Ve&E;Zh߽}Μ>v0[ʃdfΫwBd)9Lw8IB/^v붊O@hdԌ煥 -}@I7}mj-as<> --?r2 Qa^.&Z싊 --rsr챿ޖgá/п$%-{C6@_[70$<*.~~aIYeM]csk2( @ eWk歅`qv>frlewGkcmUYgG>p63PQdgead%%'Wۭ>!ꓐԧc`dae/*kl92>7oũyGMB>>4hmn,+.~$QblTxH`_<{η9)#//s F_C[/0$":.1qz<~yeM}cK[GWo@B}0h}x ­wp; g}=?;A{:[ˋs2ӒÃ|=]l̍4U(\*%!&rljcL Tfda. SV>-Qc'8xE$PPV3qp --IHN)(.kjGagA5wL;w}HNOaГ~~[sc}Mey `Yf:`?.:<$PO[b5)}!>'m} --}>+9rG+Oq"qܧpIMŻj&Nn!I)Y/J*jۺzF'PXXw+)78?bG$:oU _!쏍{;ZkK --#B|<\l,M5T?'$>=aj*=oK32Csп72wr --ed<WT64^Q0|%(ףU񛃕_ZV_z_?؇nnjoi,-NOM qw25QW}KNEQa>NvVF:8bc6> >94t ,<|¢2rT4t ͬ=|BfdV6w B{.\HD'4 csGri ff~vf --FM k*JDx:Xpg3 tc1gJ?lՌ[k39 0( --dAr9 (H49N4(Q݇{o,Pyjnu9?I\B --A_E]K_`Hxt~fN^a @X --"4:@ }6`qJ ;:wlô;>V}O@)Ã}ݝMJBq~vzjR|Lx} EE :oϮ[h9K`~q3X]{8sO@e wU4Z:zGG}3͟c[cq7GrOQ$~owg{ksC0/'3=-8~CK3Z*} }~>`\qTԵuY9{FD%$=/*!TT1H}>z }|p߲ ~^.pvz --4P[U^R*-9!62񑵙m9I"gN<~ޱa~Jom޲mz񓧅_rMFw@HdlBW9%U ]=C$(鷨Y=wo{rcI Q|!~.v6ftU R:? ?ɂ<@_C[/(4" D?#+7PY] osKBѓcz?> 0g&ǁT@oW{Kc]uEian˔ĸ@wg --7e]8+xoy[Sk <{A쪔-{:6aQO-,kli"#ONͬ1gMce[hz>B!]mJBi`?'A~.6Vf*J --8%lQez}[{'WH&E5M-a262:s϶KC|Ӝяϸ옠_ --U=1:<n>S)a]REo@/.LMNx:AM tPeE?/vEghbam' 8,*C?O"Sitp?."賚,j>rr 'XY\_uNO3{[kK --r^HI -- qwha~Oub --:o휱-WrLl1>s%R汳o`XԓĔյ-]C$鷈џC3~c8[?O}ȓciT2 د*/+.~ُ ?671+C%DQyLb<po#C=vv GOKuC$ --u>r{0yrȽAἁ|BGnwmSfjrOhm(-J,>:<@WSK_9sXfo;v2b.mUHm;w#ia2rjZ=rp OJM+*kj&Sc'f0?0_Dc6e7s9wP! uĪB&QnNY[@5U!W*E&@_ ojYJZzf@PQMg?̉,RV~g1|ckD''ތiζzb%8?;#-ilD򝛲H @bKoDTeBS3g>|Bg/]od; $26!9-#;PElhn$Qh7E^ WM}w7pObDzs,ķ]<|β?B7+J --r2RAC|ܜ!:jʊq@}}gw/hE%Z~[GWO@Ln{mG%;s\7QtG~aw6Շ#6\ٯ(4eʘTrHXeĸ'f40EEP " " --t; --H2󝯿n2:xT/ 7‚|^UyqANfjb\t WlϜ2;rpﮝ۾ߴ5+`6XN)=Ϥ4@SѲ(li#OYٝsrv[PR^%2E#t --0]Яi>-kaVwpokƆzT,"`?#59/@;Aobo o9v57'1~F/`}NFng'%s>B?_ǽp}pmW%"AmuEIa^Vzr|LdX݀[^n.?kmyF?׮ZƾuXV}qR9IFI˟Ϟ|7^HXdL|rzv^aiEumH*GC'J@곩Zs'&Z\~A?b K% Ey'!}oľ=adOgy'DOIW --R5C_|Xho|BQ~ --ǸVם}>f,UksSCL"K --r3Ӓ#Bthgmqd_Bb:}]}-UFcBO ].TH}6nۍv79z㥫nn}[PR^%zHV|W8A}% kc>=A|c s jj _[i)A}ľI3ľ1e7 --̀BߔЏz --ť}ƫhT|o= >sMވr\>߆?IW#']LÂZD¼OBricFϙ9CuG렭R{:&}>L6l~]{63?cpˍ~w=|iBJzv^QiEumH*WmUubhlY{At1$Y5r>e_,-!0BAmMUEiqa^_oO7g\ G@_oonim@A? Rҳr }dHG-37ͽAbd2T~R)Or0>GXgmʆz_SYV(8霝qӟkžON?r!Iv31=aamtvP̜P,oP6e-ߚ|L!3`q#&a9e~% eŅ9Ө0ľ;aooaM}Fz#j/9_ fO >NBϬnfX|"X,R?ȏgGGb'?<5ٿهZaB07+-)>&2_/k|ClYl ZPg3w{aS LSҝ7M RkKSi ]o޹WXR^$2 --}@s l|;O¹'uzSB(чR/RKx``鼃h74qw:o`?E"@ǯr@ݸ --փ --}|ZsCcC u'bavr~#}~GG#GmijTȥҢ쌔O?q9[S(w_pɗϟ;`uIM3v(?%͘Sul_?naew~TlbJFN~~mR]74,k~7Ml>BcۃI%~;i!z}O<r`ϫRbskl?=z@ÅKWYGFDzWb%}b,-~+K]|$@khu}m{owzlb! 73-).:"b'w_f l֧ӧM2y.wza[{?ANi' f}?-\|y6 [S_(fF}6O}nۚA/CW(b!:@N{(>=~e_"BWfe #w|'cF}^7|GԌ52u*!yx<Cwg|cU"4}HVZľfAofjå(̜? :i.3d_cQZD]-NTiΜ3oXMLOĩ_TZQ]['bR_?7Ī?_G}6Ybg\!sGH9gяypL,Lj}_AU^g'm:֚X8( D\"₂(5AE 5FF; \6bD]9y{/\Ŕ|Û9C؏ܽckDxXHp[ /ժ Y*Џ3"%bIװfYUwYjB.+*?トg*at2 rc?/;#%iABϝ5yh#C}=UXwaU@S~.чab!%=}OMXZێs삩>$_TZ^YAܯrH}8R+V2#&>{R;UIJ_Rrٿx?)'kwE]DC'{ _WުQ w(Y]E0 }5e#{V.#v"O^>hoojPTˊ r3am?a[lƚ2#cVT}vU{|,1y %(?qT7wO/kù?+n$$eU5u m peԇ}f 0< !AfPG$5c[nG#Eٿűʲ̩~K@ߟA, }9A%ug/:}¦=Q --}||XҒb<D~9ulǾ(#Bʽu%y2w!4r)Ց!޸/5_%afida&8L9{B_B֓ߏMS6y&QP_ussXAL"L `>. %=}ZF4pEȇ[~Q~nV=~PphF1W^KD JdFv.5G+1l0F1ɪ -- "GaHhQqTǾ6\hxp~c?b?^E]5mVz#ɪ T;U/%шz~j:q/%˂V ؾ+2*I_p3-R R_r^t8 dIA9?P~}q5Aa~~=a_γw*aS1ǐm ]?r@?g/!ɩـ~)~=CԆ>ș --ؓ1ܹ~rbY62&c1sо=;>ߴ>d ͞93v6cL }+ξߓQ?Y742maec7~Ϧ{^typ[wLԿU[x~;\L/G[w]$nA50=@BDzH?$c4ۙ-Ae%E~"Eư ksF2&=A?M>*3QLF BZ03/$d'''+(-lk1hYؿ~$Oܵ}K5A˖,Z0w WƑ]53e@VUW r_侺)X?70263Qr2m \n#@{5U3I;LRc($b|0'Bܯh> --{,,c/3RKi 7?X ׎p[qcQ L8r0r[6 ]8othv6VMaUF?>}6{|R1o?~┩={/^|UHئϿس!ESZQ߇R_x5AT@Z4HQQHOa$'! I --E>0췱V!y<}d~Q[7dзsbqy%C_`eg --NQ/i+ ?OINɞT݇ܧp)/>A|;|˝"׮ZdтfLsq`g3b2BI rgKI~@FIΒD'i3g]hɲkօGl_ԏOJUN}E|i$N[IgTf ~b}}> -dkTO#*dRO";Uo+]+I9uRXO;r+ 0> --س --9c>YII pObRM-;؇]Ăº*}"|rؿroN=u~>^s<\';#f>**|:I( zG  ]\a|VnؼuƨM{Y{ ΫgX'BBE29!OpFQ 265j?10K,=g)o2`6EU}.Ob/WFc5k8-0OT~U\Fi'&Srriw*!Z1(".bCU']g:ka!+}tw:e8[kKs3c#Gw#K4g?א)g2)!ߥ}%;ె~W=qQyY EF?'Eg/)pO}]TkmiBښ --43upWF./(]oJIioTcۺ3KstڔXEcھy_^8πUuƪUus_>;%/7'ߓBhBb^>KZ~Ӗ --KJ yE3m^(bo{g_N5o*$+gC#lN 6!9ngT}BO"~VRd؉~)d/})Zϩ^?ϧ3̐⧧iFѦY\}d --Kx[L)9c%=lkBLT؉D[dBXY6uqWeo}*3_4Jfǻ,Bo__}q]{=…u1^Kqʫ"T@B߈ӨqyF(kJF ,o6@n؇4akɫ_ɳ?Kp)=xwxy{H.CJD+C?0Kxin? / --ƶeEh~Akԩ))줤~p+٧EcXR --?[ڕ}Xׂ߻O_ȡ?П4e,wKA?sHeJg*>UQcpJA_ ~¾,!Bj8YzGuj*L$fcwZ˔?md --I}~k?}m/Q;o 6Пg~-l~D#†Š]ˊ[21?Y'11)I k` ~iY9YVߛҡۊ;,/CRVW.-Ц$*O;o-֯Y`Lӻ*w_2zD?cOl`IJr k ctMO -է1 --ykgF:H --fFp*,+Aͭp#QK;)e2c_c:K]8dwc;â:qDMTך웠/T --)PU0Ua b, `~v V, JIhu>UM91*rtv%hʳUe&c>]J --;q]7oBZ1؟8ᯌO!PIss_ -- ?]d3߫ҀAC`֬ߴe} W$$s2L/]uԷ>L&% %K}R $ Qc@ØLӘ'~ W]r r_` ?7'KT vf Nj#Nﴇ>RG m}F(4f+ѷgVa[-,S./1_JcchB}5~]NX3`n߹g?wku5Ey]ZjR22{vnU9g̩EІ 2h`~B/_ |BB~2t~O||ָq]{=W2 y0H5u0Gxke8§6RXTU --תAp c`$ʘXDU2}feeO\#J~E3*aڤd?7Gƾ}*}wɾw gCE]8 藵tT_'PQчЇajЯ/)2IW,!ďVDEFFЉRqIɩ4`?h**-؇´ܢ >16UǪo3aQ7]``[+OdehS`W#BV50כ؟!ч'}}9VNW3yЇ;c0]ɀ^޾v9p8RRV_TzE#|%m+q^K wro`ՕHh&2#MCGbQgFtrl9,\JtOO⟹}`$7c] Bdb}G:-A6|#GѢM{oǏ{)$U+*D$JY19UIaȈАаOφ%؇N}1e?|$a*JLl=jB"1X[6]{Οe0.+}rt ~~&\᯺ gFBSB%~k7,}ppH"F)CcIWb~Q?vԷ>{%>N%~Yi GguՕfIM]  --7@\\h5Z:%XЬ @v* wAt(25sι{ 8@JB??I$8c"_~V`tG~7ˇ%48Iχ~0g"f o͜>u --Mbu1GG<:&L딩ӡ!s/CS*Ĵà^JE\iI0aɉZh:*(:g --K+/bٯobƌ[Ӆô10Օgs2S50 --?y/>m}Uk%f 晚ϙm8KWu}_(?_=g2$hfa~-۶.LB$9STZ^YS{nakTT}!!bڿ@(/-.Hf-;"XDH}y݇ ^>c酔~EN?%/ױ_ޟ RǏ?g _џ@7Xl9GíC_.,G BO.(TBE(egi$?*2B'<\DC(K --0h>l"b JJ>}%D#!T_{a?>& QٟїW_C ?яO` #NhkKXkT|a!!tBBBx YiRVoI%dTjJ\:_V\ >66+`V/a-Mp>//;$>̟ 5C761;"oA@W ,dda>`gWS,E#^-Rs}A!g^K݆۸}y٧}I&B!!XEH"~5whԯ>-A?٧,9e?VG  &M: 74o{HяφЧxrBJSчNulqA~nVf:3?:*R -- T RQ\_~vCS3|:R_ K*/->{:6>:"TqhoreK,͡}___w_Y'EXW;EO2," 0z QSP_| --J"D`~RG ~dbrJT@Kʄه --.~c32kˎuEw;$ׯq[ [Z`0627m?CC 3 Kg+֬A%8zL&/~9TRn^ --EBEyl$6^a!A?: p_FS3Xٿt~|sK+|{QeJ`7>L3*clQ~NfZ6Nyؑ0w9ìZ[-0uP~Q~agE xG?8?rӞJ,mb6},^D}~ljjH2F cQ@._ --*gfIk7nݾɄA'k_ }x҈0>di#oj2(<)f$M }+F}0B5_; B6iZHD>sTo\e --~!$mW*9T^ͺzN_R1{(P%e LW.g --3S5jUH`'[?`ú5WX[-]|!sfK#o'`39 sx7_djÚu>h+l --Pi2)K (eP?#]UVl:_VR}9E@?DEc" +Cu+hX/^z~&NX}{d}g>؏F}2.Mbgjy3M#y?N@7%'JПGӖmqP }wя.?q6&G˵5*!0[r/Oϓ'OO/M鱗_vV}cW Q@e_p1:٬b4yI(UH>Ubfնіoj򶱑>~?'$>5_4m]_;w1J>*u&953;Dx!J }\C~񪯯\}\ ߼g&kcՑXz˽ ^^F`(mRJ*/}y-'G>(CTNk0kDȾwsuqoF!I7O'1GC}; --'GcdD>o>o賿\cf D,ExL27Чd&n8Tݤ跷^nj))qW#+5=#>K>1>PGWߐk-,m7#^8KJgfO>D^03Ix?O>P~M`g9tcЏa.äPI)Ȏx?d&_xٲJܮ6`:5?P槱Ύ=Sڱe_ƲA!ob%e1e?pU̲-ԧ迫@O5)} I)i,e֗?~f(;wt!M G  CD"!(D* FK;Wp Xs;UtSi --v>~F~/_w#>!|`>Uk֭r-ή~RhDT>^J˙KW'0F'jn7q[vAR,Oߟ`FC!%P#;#ebȊ;xJgWwٰA>x8z؇#e?'된9z9;~ɆePOgaahߞ`-GϢklǟvPVE X#]@'xBy) %lVp¤H,~aWR2c'eg΁60UN쳱cCtU{A)U pu`os)obldkjPg'33|*>S| M4_͇7wF;{m.n~=@d0ji=fSgHP>&`DoߺAo(+)*;oo"3`MC9"\I#' JΝohΰ_C\{>ha}1;/dONJQJ_ne}-i --ߟ`砯3/^lu []=|8ad#P$;VYSpҪ;~f}.s7߬`]Ғ`BE|Ǜogqa{쿁3F܏?M(l_uВ*7A S0$wC4TVA:q,k --k(4_$n`@H؏O@p3s --J*[oQSlLOHA <=W;.e?q'T, r||{6zk|8ã *Dwo~C/+˘JNRM>&7(_(bY9e%k/%M>,ރM`Ә+`wE#owWv6Vr|C %1KF]Y --= XW]Y^zXVweba>W]ƇO'&y^._o/#jG~l`5|]=|3y;lsqu񅒰h&A.\W{g}`FQOTz|{/\8Z > lt`ryxEbwO?|$;$Y }MgKZk;8mw<c ~kBHS8+m-MkҒ"-7;0Ȇ#B*>^^?Ϙ?) 2@7Yɪ!&t_>DID?oN[I[YZ[#w ~_AQgMD5(UP. , --}((܂ B`Z'b-5ͺ7n;:I|Bqڊ@+W7nv拾ęƆ6905Tχ_ %1R=gY˙N&;|>3Y9*jM s7اaH*oZ#_BWS~{t۷mH/TSY̱??a֘?SCDij37nFmn;@?@K."׾lUwX>y<M .ܙK'<48wu;9:DD"G';-?ZG'RtR+M-Mnvsĩ?I8 @@g?!x05|w89 (6oBKY#RyHz\7_*>#3_{r2_ߴȘB_`7 xwDq~P߾C,C>w@hƺ%y9iTȇ{с#%;%PHX ؞4Ҳ* pa,6 _Or%nbdl`S&O?;Xã?i3fhO/\^onno2dWqw&E{w8ۀ*: --f"jqRC}Z:åⲵ9:9ؚ'Sҳ˔^rSnσl~=6. bRi(6vyzR-wl܇]?ɿPiGr#,uVro31aɧw77$ (T-9U}cX~HBߨ@CPY\E [풞NO;[gMFQP}Rh+k𾵴_Bgw__[Ϧ/s`dDhU,Z[kV,PS^4?cQW"6o51Įo_@?ЏM:ЯjG># m-Z] B --̴,Y --}.V9@|5-W˃6$e/,)?[lq 4>~q!=>^}5\Zիt1 ~H?k=/]Z|s >ǔO$ =OXŲX{e45\*Pt0k%şfO{NY?rјXܣsq/76.ubwGv}ܿ{k89&{I\DBV }- UEgΘ6ubm. SC%_h*c Ig@=/σ,{?&ߕڂ&pq.7ys --}?ܥ --<-Gݰ7D9W76ddU7U})F}oo݂׃_Ck1UU~X~UTZDJ|5k ͷ lE,񽕁 SaO0ROFZ\Tz>lVzJbcz;mHp@y<>N!F]B$}N>ζ &D=d۪ا[89cap  pu-L}U+}u%R?RGc1291ks}hֲV_YN.^!xb@_?^U/W̲YnNVӧd w ͷyV;hYXXZB{,N]B?}P+j@vPV }ThDa!:al ֭kjȿlG&ϑJO:ͷV̅~H؞}LHr1<#T{o(^d%:q=vB0MK*q --TܨyEep`ڤýf49+˱(]B|<\}c#ϖ2?7c`)'M$qwFk|OOAg! -QQ\Jddlj;xx{}02%=l\TB}߼x8Anvb675(+-2} PGLi[X6?hwľCG%pW5^km]ak }0|$3rS8)<,%n.N}pp#? --_[ WG?Z --$>eF~vԺIЗKجsKgcoYzg7_,+)L=HA{㦋h񀚛27߁Ӛ+P}b9V>ݼ ˾abóT@'Ɵoh'YoıddL)ΥXB  9a{`'XgC?}4O<~OC󵡮&"8|ɉ1bN̮0W^3UqfF}_'t4t4*K˾* ( ** -- -- -- --c2fʸMYNV*V,SɏnQgtNyI<=[R1HalTJ5{JZb6(42&>)5}[.>񖶎T싷IۏnÌ}}hGFi;z --Lbj /[d??̣M)zݑ_AB7JY}f)ksԯ,-B4޺eبp¦ УJӖq?*&~u y-ɿg;'}|*Gh.7{ƴ"#G :d[o@? H!oߵWerĄfz,4S_ij,Yb"}prTbmUX?6j=I[25M,XeuCG6v]d>gzE`J --h}*Jfٟ;kTq 4 Z_G}=EgcSgїYlVz G; Kʪף7?GƝo߼C\Wg{k ō5}FX*%Ȱ` --.΂_ --KLf'->WWeﭩk8??'>qTsц5Օe|QMU)hVfRoR/^ďK8+|OVkuF 0}!a GO8km,鿼^=ϣEկس{gԤ舐@D}+5({Lx0=ƃ~Phex}'Œqؿ<E1ݜbpG.20a`V\ _cF>lD߆^_ >rG¤g͝e+M2WD<&oB*.h;~ ßc}~ _3:Oji:J0[ɯ$ֈ -}Ev*]fR *=f --#@L~AN=^sG?ƾAhU}TZ\3RRB\tTxhzrc p$FF+WX-eг/_!/H,d"v.ˋ_xYX\ZNBp=r --_ꇾn\wu?R_[]@f$Q,C_`"9= *?P:C±+>cUϣ<:O_!uホG/>] jU lRa!ϙ5}$Q"|[G?A#L5G@BT;v'âb7oQP\Vojik?ѿpBwWqH=z` --WnS"2kxH` Q||Ĕ= V*ak`HD4+#;UߗOc҅sg p]- --mʥnJL4p~b(]J&o~066cʐV|[; ̏MHܔЊֺÍNw_G_-(P*F2Q --MX*:V"^>8,2:'RZp!aYnǑt(W`KgCH},-.ȧG}/NjxE ϙ9}ʤ _}1Onj1|Xױ[w}PB}?sμ0ZXZ휀㺀@I@o%p/G:suC37]ٙH#ÂXZ?NfR*# ITwrq[R3vU?H귿4ϟ:vƆzIU{0sQ-)ɉ@ZoOw7WFm"-M|lU3U|W7wOﵾ@n~|brʖlaWuA!s }ڡw0kgot _EQ_ú mO(9O!WRIvsq#8u.Kb_h7u5`,=5)^0';?oiS&~GI_7 13ha#Ff3qʴ9sKk;'C#̜Ҋ ~Gs"?f{CzıF}eִ䍱"B~k5j3dlr)%S#cS AwuoKLMھ>|P I FgґC}//'kk䍆# ;klD?ܒgj ߘ9}kVNjIY^&ѦSm,^:O?R/~OWGk:_\99>:"d-T.5.'cofѥk<}|C£b⓰3}Iؘ`cxZw%Y[gg돗wa د(-ڕD_ٗX%cNz;sg/m*v QT= % tB0HA@lly7Wƽu=sv{Āk[q }#43#}{t_fJ+沿 y>A\J --Olu5021wtq --r#T!i\ 6>:;ï{7H'GFŰ9ɩi*KEU:yS+~.N]~}iZTVRF\IwupLi4Q :N\< dH6%/XF]z}o"7^gs~ɮy]M%~y8Yu۶|iZ/G-Wک֬]q;tv;Oзstq dFsaݲBfm>w@?PqDO(}YMLP‰ --e|=|C䘙[Ѐ}[{-/*IdVSOU]iȩ.E[KcVR)*v_0D?7x`旉*%Ɩ6EWwOੑ37Uyɉ(V0R'ibvX>} F+2&. +*~Ww>A[b.G?~6ot_C}gUUjoXY1h1@_/7;kKC ݭb --#Pzd>76FV/onTbB^rmzA[( Ғb#ØA~Nv6A555'}'W7Oo@zpXD4;[P\Z.[;{&%.0JwoN#Ãp!>?+,2x9;Z:>}`CK/y}6ldϾؾszPÞ>dBAZЌ68<:[, -ι?} XOx{2dЩ7 ToVZY\NO&@?oO }U41El쨯GI-THUg?B5,Np;ۚⲒ`6zqcVM ݵsmF`*}d\_<_A _صg᣶ǜ{CXQl@?3L,64u*{} @{pS36}2bo?>VPЗKsS9 舰`zqG-|IF#@;zxqI*P=Sا#lL} 1/sl@Ie ܯ# Ņ| ~ɏ(Lg&3NćW/,淴+'NMCgnP[*I*J >?$ClGYaaa?{gI'64hx&+o_,׫PԗJ*8aJEH} --}}r Tjjw/ŠKLedEU520ʼn}._GI`~w9ݹ5s95УT5p!ady:8>GLr{-6:,E@=; EzQzg]euiR좢(EYgԙ$we&> --Q'avo>hΞ1}I/a2{Yp<'N9 ˋVm8x~ B{C3]OsyﮦeE|iVz*fL!Yʂf>tuu=ô`!bc:_ebɒ&2$`f(}6V>Q Q0h{'W56GŊS$9yX}=vp[aחN=/طP$ -- ~~E L5)`c>dS|5z 2s4uqqRjFv^aQYE b߁VK)=y9FпpSX + --eI舐@?_dSdnBOkkiijjjiiS/7wv_v^3Bq/oZ!оzޡE_f=UW T^~/آOQQBa ?5-_/)+Vq, );w{٫WNz+YdqLD --S<>6UolBŝ#JLI+Rc[={/4LإgOkm9wWc}MEiQa^6ZLiU.7}}]m 36ˉ`(>ewZBS/F3nDl5 -]}C p }6}Qt(kSVי4ZtVqTyjʞyPc/ЯZ(S2%QZl9z"MM uu M#YwrEP_:T==ai[ޟ];ڏ>4} --"ş!!xH$>xx?+'*_(*d~kBDaFȐ"迵P?-Y,6˗ Yиj RiX S,3]asZaBQB2jLZancd>K^Ⱦ]8l(UH7'M>ޫ]lVG76P?nJ?%G*G_CП.2>y; g-~C] R K28Mn%i|Ɩ:+Чg; 3WӟXWC'r --J_~}m @FA?g'&&$>=OMٹ2Aia|.pNO1I>OCPWB$0C4 ysH|DE1#дs? )пyx@obKH-L.ÔW+,7wr}B#6pʋ~]{8MQv>N}u;;NAhBfÃ}ׯ͒]nF__AQeik-٧Pnh" d$(HnFAI --s$G%6QZDA "a)ajefvi;P*S%U*Gn}4؊xOǩЗW8p_i ݧDǝxJA *0yl?쏿s|d~p1~k3] qQ?OINN~$%%',$b|ͭ`~'`ɩ陗sX7+:@o#A}&7:y8t}rbid+B(i38eBs1 țq )Y~i>!) kohKٸtjbltڻy~lW/3}; =jT!w&$df ?p߄ߌB_@h}}r --p\Y9wb_zЏON+,jlntht(?5w/w3ࠀ /7v6M t!TЗ IJJ#)ICA+MWRՃ D'r<}c]%_xjbv2OПrHO"/+D7[;8]bSPKGi1_/.ROï16Njk*گ@d --,> ?/+G澆ΉL,88 دg%4~9;_ZcO#$m %y}v6fF'U7}R4qѽ1|bӆu'RwڽWT\RjCʀ(Ξt%$<[PRQ]A?26DϝaS_Oq!Я(x3&*0 gS't55T  IH4:,<74G/"Y#>| {+nue'aXpP~X99wQ7ZZsq|ĒS#G`A )=E&$ee _9Lه'GmM 5YiI+.x\8w\ped%;wl&#-|o眿qէc --;1tiYT5u!%,ϜuvxʵțX\^UǎG0M03ެF/C@DOv}M5B?'+=9!.&24(URAʪjG742w<4":6>9-_XR~??J%x4~??;3=9[kʋd7#îAy:;0kKۅ`K*7c.s1 䯒kne%f۱^=>Ir,]+FOҗ??ލJ sҒbc"B\fzVƆGU!G拊ݻWDDDO'5J34]A`B:zUlji?, --_ܟ?#oif76P#ҒS/-++GS7465 9D >O"g[x }rQ/?~O~V?* zǏi iТK}Z5cںz\ݽ|!B#o'f{u}C8ք}jIzOu>՞[ʊs2Sb"B]lO+?lᏥI?t\ZtzI "d?+g`q)U?'}vW --s>ܪoi__KDY~Ŀq_Cr3#WRki7pܽ෇h3".$q?VM --Ѡ*/wG{LB+SKCO3465] u!2:6>)%uWfVNAգ>8E81Ѯ7_e-+.@H۞ |Vx:;RUi Rb?yR3k/?ƂCgyѼGQZ[050GJKK@S`?>O|[mwHBw }!rM ZԷu4TBϘNv --YZ:GYEMšc_>2:&>1%5=B! >`=ݝZ}XgK=/Z|LT 5>^NgtT9Y) >O? >Qd@_џl%5M5]=qs\b{a?Y --c㥺-;{AHB2D`^NV̇ AU+)PzpsTSQ&쎌,Obrp1=}|i]$x#3O?A{'~C~c3?3_8FV}gF_ɨI75;-3xdg502UwprY|/0t}DtL\brj:4Z._cqddN{nkW.XqLGf)q7n \s˒Ŷpф |}i>oCYZ>lk3+[~66?7{Ϯ-"ׇ]r9|-2Ϝ.s>M~d}¾?ϱ5#>M}}Q1qIiD_ --BU mU!#7mI3؉hn%? D( DYɉq10D~} Lu穫U #OvGJJpG/7ȄGrVѓgcJO>'-,A`?TUUMLȿݎ'? '~#US?6 --f71W^N --Nur --o8m%K<!aQH؛_A/aodǰO)aZӰ?L߱mk,nlnΎ -v¾(}ac8N}}H} )%$ey:z&f6ή0Dఈحvg9PPxsj(mt~g/."Hߑ将C||@_K?Sq4Ұ8I؇ۍ<2\nC6o&T_?y}+P}tcO55?%:?||B=|/X!|:IAgY_ o#WoAݨzL*`K+I\ST4`_M-m(^ޫoܼM?WTՌۮM7_pTт9Yiۓ`pQ=>t𝓒 D㾱gXiO KaVR5+#̐\օG'mO9p܅J2>M7ڻ],o)#~kKz~)!B}/Kq@6G3_dcԟ-]fVr-ϥWVO9sM'?ΓOjk%C_ihf>GcO׍Pq<|Q?S_yrdtezt! M9:}~G唯_cZ*G(被n.(S\tW:FAsX8[RfZޞ糿?@d?.aŲ`5am-M>,UW! -- r>Fdokz --C]- r??EFZRB}¾?8}D_?ILBRzhbH !+W[npru  ܹ;)%cgΕ]ZUCoy'?RDDLD?aWLdض -n,FUysaqf0#IOcoۀ3@"T˛cXw/6~.A~-:_ԡP>F~knCP/AsE~~V}wPף.;`tѝ>2m|\Y5`_tJ`  gf?QP S>} OƆoTa⦥$i:k˕Pj*s=YJRBa_TT |%&aUQ7^nnfzG-1S3*>WzFvzG E'3L./v_p";+I_Z /7 j8HcE -=#SPхQ?1Ql̫?O6^={s}O GG 59O --10Xĸ0T75PQ\f_g+ӦΑ*ihlCgAg d}q{g𨏻:;y)ո%ŧSwDo 5pTWQdo8RlOA}D_BJCL-gkphxt\}2N^V}пV@1W? + tD?.&",$wW_ --E$Їga_pf [KܒQ?8,*_ P1,>??CA#ܣC#f>>A~w~~?UPOKՇf^_J$,?a_YMطE=BB)~}_>Y߻7^}ʥ gNegeط7!.:|{&gVPkzڰK?vRbDqG8' "})\*(-341[eecgqvCG8Yt+׿Y{Z{H! w oA8'مEP_GKCMY?g6A6b $[9{sDp>'$ '?ߍ{R-L'G{υXB_P__W 5˨OwʀE%iN+?o"`_؇]nop$dawf -- -a/?{G|O|lԎm~^mmVE;<}dGf>O%b%U -]( ^~vD|#r N9LMh_24]{̰ _3SА?oDPE 3gLeCf9,/XɩW? /~W ?4 ~_ y!~&?|h|*>s$|?x~=_I:ĩ`KTWVXLKWR --ٟ: Wn.g`̲7 e(y#n=tZ}slPmLKIڽ32,$wx+ t4T`ue>wR,?>D}qZP J*:88 ܶEܝv3._ 7ё^vb~z8,X7_ΡdL\H3[3i_P%Wӄ3~!P4_ ף>}>q P4I?dAGGD||ZH>/3MwW76ߨ,/-9%'FΨ/?$/_,txٻ*eþ2*h6d;)__8atz?e wnTU\.9+&"4x'uk,͗h%g#ð8#=B'}L}-QDL-֬]gkphD̮̣9y.WT465 O22~GXC ,zښJ --}Y}&ai?A-g,9ޡ:~PhdlB2~iyeuFFec3{%O6~7G)?<䳙?c,`{ϩZ[:>'Gԇ`早1Z-Se@/U}]cS3`z֑T8oG>1N _ߪVqT^vVƁ䄸Aްvk,LA-< yt}dǶ=}>Ti8786j &fl6nw߁켓E80תבyinwtv=qcp$(%J(*]t/EH!T(*%(*S; 㲵%m! mF53f:'>|$WW͗*%+Pf=Q\qa#~QPo9HSxeswd>65t ,b ~;؇ q}'&Ef|nXꕚƥgN&}r[ ͍ Q#Kxe 22?@3LȰ06 --p#ÉhYleO@Hxdtl]:r,taqIĥwǰʠߛ=nsua! t :T\_y8G6ľAhPAQt@>Kke.n"6lښ@fvO J_°\kh"YAta( }1IWRA` t 1"4)BzҘ1"{W_kh2 --bߕ UuPPsT/>~b?џo/ =(>%KQ%~]~mWUDy >'|&ܹ:j --,zƦ3No>W ;߃ON榆:\ eO"3Ci &k;_Pܳ7-# ϞtФPAЗP*C^O }/}-}D}|ތEeOCGMQ ْ@?UP\ZQUM-Qn.KFKq_,T~ڏ柄{Sb6'IK~U1A~^n.D}jʠTy1d{ [[}\a(nSRƲ^o+ :>ns۝˗++`NHۻggׅyZh{lnb47y(nI'@/yT}>ij /u\a \6*fSRrTϕW~yr-fs˝6oz|L$Dߓ N664 'p ! nXW k@w}P3?#?~ۧ{>_|L/NoԿXG//-3RY}ܜAEOڮď e-.s+!ZںF2FEnM`[wd_>wnEٿ奟9}'SSvض9&j@_/l/436T'ia_FF/2"G&M-AYU}<]cV6V{GFmߕ#rO).-/k\Qxv[{C&샔> k4$;~(EзZ̡?GUy}RmC'/@"K[Gg7ONԌlP_xKHoS}Ÿ~,_||?H2_З~_,/)E7GG"sc ,U-Ls!5=A$s{ u(q?} WwBB7߸zt#O޵=.6:2<$e3#8u檫6~@Ѥ [>Q͛%Л>4 Kk{'7a6mMHLw 3;䧅E%e %~CagՀ_~7E2"TJBD_W[KW˱y,ݗQ @QIցo 8:ћQk~ 1'g{(9 >O||^g#WS^wH ~ǽ;D+_3pz:;uP=þA t/MٿwM d./)a?|}3LpUOClzu, --]~xHIZFy=_QUkhjnŃЇ^R׽}w}sS~OA?fâ/ðO^~UGw}9rBԿsSr0꿕"~0싺~N~/v_{>'䋘_a'SV~Yg~VT} X^?W]F؟0In2y oim_-s|[nm"GyMу675N_;q4+#m[6_jrGۥKikjRz@ٗ)CGr菃IQPW[HoQ1؝~kXNk\ٶ\H("ҁHBQ(**qqNXJ(II(C#{ fs?Z]}1}is?As9y !w+jj.@J>7!Ut2"ЧwcV@CcQɠM? t --U~#>p8;q_@~o43ܣ>_@>3;YcC=QV!x*:i --WŶ217^C>C(tcbq) Dzo'y Wn_^Kٯ[zfᵼΞI=m՞.Nh+O5TW=RIq`ñ/v:]}>\@3-.vrq_Ӻ[}w 8r<:6/_I>4Oiᐊ~)A務R@П;^SsEP)I1Cu:nΎ --fΘfh0Qw85U#o>?E>a_}N8s+82F 22q#3sn+lپsGGğNI;uJ~AQ2-% ǧ=$ /IGE Q#ȋחȲsT_YeQ&oϪ7ppxtlbrzfvn>_?Siȗw_ ~V~~b?_ڡ>+~ #M;7S+5UJn@(Tmzy8̳ u4TU --e(t@??cUDdae/~} Abc;˲Q+AD4 !Mgϝgcl --56C< <qlO>> DПO3䣯8CD+ݙto K>X+<{' GiD%ej?&~K/O.p?ϊ6©_p5ب v6VfS &hC#x忱3W4^d؇F+cߡel`aQ}ܤۯ^5Օ%r/d&':|?o^uE6PkScrZa V8ʾ_گpwAe(p''?` $DihUuMm=}ĝx,ZsMvA'%zBvNY5AN;ڍt qDԕf3/TCQ}u-S,l9E&${SIQS Srs⋑Y̗>CAPLBLdXС{tX $Tdѫ/B2 --ٷd?$<}|xC{X[SYx-/'{""4nmU.N.5c&|j`_vyWA|c_xv=Hvȇڸ'A:fZXZ/\ظw׾؄s޼}A_ @r9P@O= --V:5|RZ!onw\o~P?2& &_wp_~ wDy_`!MH_]mMUy"T?#L|Ldh Ks醓&h#wlyAf q7n&76] [O[M/QWݻ{}>=%)>&xHࡀ}|^hokmi>dڔIaͩQQ1l^~rj'>O@ { ZM?kl c_~@)2cWzʡJƨkLd8r3~`hdL T:p3 /})gg玐y_*|iTW{z嬌Ԥwnٰz"PTC;yԎnݙ(3Aʰ=~~ryz{~e:7wg_oɟ+?W++)~^HK>>v;޼a׊lϝmfl44[i8e_ ioáїSzc:@8+=V]S[O馳̳[k͆͐ G"!iYr>1 --v#=yWWON:)U[A{2a>4\r4Q}SP۪?q2>)5#ru8t//?C?;K@o_o>9QGQ;7gNF_dl8F~oF}AEs_ðFƦ,)ۡ<+y76F߼a+_] qjn (aG۶ij_Q={\s%0H$*TVE}RB!SR%[}վN%QmJ$Q!R`|{~oI9i<΄?`kefl^Cu*2b j I> wYI@2hY2\ 8 e܅4%W!Ll BנK"kWJhC(;y/ˆt AhOie?TFS+LOILܾzwybw(IIYs>,9A/sp n _ujIanFjBtA{p߲POK]YI/&*"Շ?r0'#%!GH&X}eKCOP-~~G{+<{ՕWK --r2/%GG C+wVG;  ښjJK$Ο؟$w9 :m|::iӁ9 EK +֪B( ͭtڳ``H3P"r.kmew ZA8|q[Q3P ."x/`>Sp.Чg/G/ ? ?_Lkhbp ?r脔’;-maO7mw} --~J~<={4Ljt?Q ]z0 '=%> --xg@WSm*9i@ݔɓ@ 8RFv>~5lys+b>^salw=I#8vZq,/<51phxyo676[ --X.#4 Xobax|'︪Uo~;g.\R2(*Z +[g;} #.&PV~fM=nFa> }Zݏ: F;1x?@'@rX}x/-'jsρ@~T|JzNAqYEeu}#]}JOcB}ώP%>GbF{_}N}@A;WW]Y~ ;=9.*ԱC~X}{ c fn"nC"ġʮXVm[=w/$,ldt\ҥLhWQhhjik𰫇ldg}$Dh'ЇL~0 B>1qyԟ5g.W\NGc>~qiER>4[Ks?;#П92jx yOM n\+-JKÂ|zm͍+dBL)K =xNϰsD{3ُg]o֠Uom?bÈ'=m`=]߮ZZT.).e&kscCT*),ZH|Uqf^,ٗdcߘžPHIX4(x$U<ڶ_ ={ --Ngǽ۵p񠆗 ~h!?\ľu4`d g&cउd*a'@N'ҰLN^q%eێ>~C/!%=+}rG1xE_D?D8 PcX }v'#,/eЭqj׀aaEEEE2( ( --@@@rNs$ QDtʸ8;;:Δ{nu*WD|4Xb¢R2r K+k:GOMSM^->0^~g3_2Dæ ?~@~IaNƵ(P) c:H}1HMs(/]c>>w/x\ "_7?߇.yt 7p3~%oldp{c]Md@κ9;Zh): WRBTn5:>x --~氿.ڡ> G?\ P P d4 M-m\=ãPTT56v@Od>R~0oG}R71:<؏|%Ey)|!5C=cӢODAqRR_QUS瘉é3^~TjL?F9/>0?0/vw*q%swv@Km,u4THSq_4nj,mN8aQq)yE%7nj'؇~ׯg߾ZCAob my] 7aLKz%OwW'&zrRB[6srN'']gn_AZq1l@srqo.(OZ;k`bE}QqI9PttuA#ɳT{ȓ0 --~FJR\Txpў 0>1W2W}a]R2U5t-lO{\ ON)(zؽ(<9P,->0U=E?@_/NK ?nnMPڰۮl4 ѲΈ} ,y)Ea;{GH?yVW-?>:tw|mU g\NYCVQ<(o.1|[89DNZWoH\J U7('*!we#̬lO @IWy0^7Ң|~txp ѷ23>/[6W / ,WP72?տ qO/MљO޿Xo҇N]ˋҒb#@ܜNXsH --aavjْ[f})V}hh~N~QzbZBLDsnVfF:{%%D!κ9+fJ?R@>^~d)ijwr;{ _DLµ<(Ɩ6{MN{+C!=B ܈/HMJM~YA+ZwͱFB{32>v"_\^]wԇuμl/G~{aђ>591:4TWUV|YWG;k3C]-`Sh;fP j%I8U?}5ľ1b ؿ쇄G'~]csk=I;&}`XW]QR = ---oij$/'- cwfNkYWwB; --Y^VU>']PDliYyEZ&Ot0{aCtÆ c1?FqDأA, xwuu5L>(Ab}I-w gaabZ?C.khfmzϕԬⲪщ)hXP}C4RW Igw:TUG{/Ў+POg{K㍪Ң̔Ę]L t+)`W95͐}Vj }e5 m̾+SP\ZY;42NzW$1yz=|71|fÍqQaWwq9-3zF?Jb)l{ ٟmߒ;G^gZ쌔@? N739pnDz~7>Խ2X>)a^.m,LM 멫*%D֮Y --~U],p?H}QqIYyE5 -]# 6|S7C 8oL[/T᣼Oay[*#?W_{ZE)X?=9>:9p1;k 6X_Gsʶ-r2 QpUg>fOײ6S?|hW -- -- ؓ^cm=#|'p酆G'e+vDI?;4`[8p;WTv2gR7?LK:<$甫š4w!e6n\|1P.M9Ps_ą54h|q9ťƦ{Q'؇OWɰ?#zui0/+-)t#7++oD/['qs? W"b --Jwf~!S3s Kpͭ;qtFgdQ {=4#Cd&8Gu3j>sh/@^+a R>,l\O@ dV\YS> <%an3o4 -w@x:[41ܹ]iF1+@aSþbb_m} ,|}_s#.%fVPowqٟS>?>v7+\.!@oocifjbonuU%{Rp{+|xye<[:2Pj֭C54uAyk'aE$de׫C>7 }FIYxc~<Ѓ7/+.̈́Ǒc[YMM u<8> =?1i~X@*mߩc`r9ʁuw[ +^zԟt~cO}zn;ZnW]+ȥ'E;{帝aS}赪۶IKR`ܿMFa_@/N --541]=|GD'eU\U[OJC'? F/_@ܣViwcvl&6-r2 cn?}`6dU.WVG[!s{SgyE@-mdѢ8hN^=0&^|tDXp/x &B_a,~9Dd#PNLBZn6՝{ML[wyx֍KӒb#8y3Sc=m۶lAqkM>>O?|rj_<@ HB,}GoY]Y/!&*F˩,DS767a'ݬ]}7(}2e W߭g W9z줇7$adlRZv~7nilnDS_r 3e??QOW{ksCmu啲⼬Ę ?/wgG[K6HWk8mv%2v?9rc_ƾ~S3K' ,2j_VQf)4?rq5W/XjnV"r3Sc.zy8L 0TںYv*%u}ު?D #lI`5M\R: --ôgi2"yC=wLп"@כhJp wn --ӓb"Ar?Sn}^GSC@&˦ }㌣ieVWTQ04b-mݽB#bS&յ ]=<ރC3ԟ?Cke&Dv;`c>`WCMYATSi𭩵jʋqaE]AArjrP@%ITrA@P$QFQѱҋ=馇AڽO8~yx6nB%[XEvN~d4}@@ieM4I~t+}*3اCY`DÀ@wg[KcmeYz).&*s)> UòҒOw̋YssD}>,MZ>~غ$V<um] k{gwo`\9tw ͭ]g{܍ ۡVᝇzCΚpx>tԇoAP&s:Q#s+{ߠQ iy5 ͠QT3>u?ꓴC}~~;=meEYiI1a!>v43C=mP$D|hy@}x ؖE%HSQ:rطwrG HyAD?a˅׋=c8@ρ}``d]p --+J --rҒ`o0@ "hD鬹ρ>dȭ9$^،f /(w3s --Jʫþ NLNDƿ}%}Ƒ뮭*+rG~rs45BU Q̇y7?lwh$zf4;gwȘܢΞ;LH dݏ?K{T_H:c#CMuU9#NliZjJi%ډqTݰT}Η RLL-!yQ1~ZⲪF~STc9ǜ%L,f'thˋ1%Ğ=s*- TS@ Pa95>kv&kd\rQqU =CSKwl|bjk-7:If1-_옻f4;=[]m͍uUexI;yR][]eiKΝ9y"AgYN}qH~Ff6^K)iY9Uu-m]0_^|5/R )^ĿζFLyW2R'x8XB d% |8\쓰WmOVγYRda&VvNۥgbk7xo4;}C_媗:“b.=7>۝6H/!PC߱{Rr0KG7/c'Ϝp)5jAieݵ]O>pYZWm˩Ľ&hfb]x[EIφtu0?('vY|盗O2o{"B} m]}c3389 gWGIÉi6ݯ&N%$<G(hmn()̅wBtDXh0C';+sc]-ued@lA~ pJod_7E}oA!}WRӄngFute;w]t&;\$Z7UHaudݝ7ZUf$Ɠb'ff k*ö%E۶|=#¿bw)l-l\=O=1%J~IEmc w>e^cYW#맢->K<&s:P=43G4$w k-sD}>,{3Y^>~$eɍ34]; Vq%~f_`ku-gƖYkf]Ԟ'yqT@9lix9'ՎF#_~M\xy@RP9jlnmz:*6!9=;[}ãgD}:SL_+1Kă{[g[s}uYQnvZR|LdXH2&)$ce+}>&:z&#؇V4` O0" {,l/@hv --2| JPUYQޕKq1Q'l-L 5JKq7`+*1&>iMy/ GD ^x+;'7r#/\L^ZYyjQ𺳡q|{N:Y3^BsRy@,AW }GC}q@DpD%)kY9{E'eU7u@}01=7?B]BH_K}J8@owGkS]UiaNĸSݝliZjJe%P];վcaE>EDAWR$[:z'N29=g8׽ F!II()E}ϒ%)iOJUQ%[68Hcs3sz?߾o3s'x$" ؍C$\ hCHR
Iq1"P=6op23*y-Ⱦ#sǸ9Hcž9 U_XD~ `ME][FrN;sbBϘc}:a5 ,wtQ}uNvXz4AjS"C(AЊH}IiXB*:&l7`lbj’jVå6x#'@?!Rs%9i) xm^`cnl6++LbPwӈgg?b1}%Uľ5( 708 tnaqYE5x --3h ޅ;UΞHCDz!m-M U֮YLB\TDeOKO"ԧNK0he5-]y#=M^Xr8=s~f"N͸US)C[[r/;>=?'#-Hb,G]af7Os --JU_ڎ:yG%vhȮ,+8'c>R_ԟG/0u #b b.IP@}}C k{ <~RjzFV^aIYe k@$E@// 7o4_px4olomnNWS8ŋs&k9Ѥ1&?Gi31h!a1TYYyEU }#3+;NEG2ABi^p 3zɞk`A%8 =}\t6:r<u|П%RAC1R#_.#ԇXۻn|<#; }mHː8U}B}7 ._`Te</׎@fԔdjb"`8&ˡ>^j>I ED^ohjac_Ph3nuLxCk `o[ j8N~v&Aw!쬠 --ҒKDf`h7. ƆQ}}$gT})ka.dEFAwlyU2$ d%BQ>>_5wp$|,D `ci --k)㢓n)S0Jԟň'1$#s޴u.}qINfA%/q`v>G\iCYƩ?&?.~`@?'^lu2.k:q,9!9`kifdK/);+?p%z$2ŗH[iw/ݡ&8 Կo3[f1>=:o\>WRp` ߝ7op01PYj%xϘw.φ؟B?-R)iYyľ˦GE()(*-ؿy`ѓo8 .PCp0DC| --U5 b d_rp}ޠ'pTL4vP}yE m}Lqfs$ߊ9}l\6;f<F !'g+a5 --b3$WZc`bھ7hobJzfb5;Ӄ; ZQcS@h_x֍:|b}]UYqAvF@O76kVJ.BN4vg#P('| --g}`:`qVwTA~tҊjV}妖VX\`8bmׯyXEٙIq1]p!"}C(Sr? ǪOCJT"7IT: ^8 ޴N: --8>I@i9#W^Hb56]<}C£b⏦edUC)yaJPơŏm@6~|\߹v][YZ.oOǶM.fFzZjJ --@@yS R#`tX&:cs+;vxC#@ r K*kX˿d db.,E v/==spgA2v-R(Q*Ң}_j=)eHҢI*JT~-W#Jeg=>_ { x>5UEJٗ=fɠ`f\JT8gx9Kx --9EeUh,741x}7lFIɩG)܆fZr{!7d!;Y=~]Ԅ!WYFROc"C=\,Ly*P}~+ Pȩ?We{HhЈmBEgZ._{>BŶ#fCP 2fvuܾ 5_*/9g֨{ksC=-  --fL+HTA`<>TPQYeEpA`2l06>)`zfvwA߼} ?.>!du">;?]5 g H%2l޸!ըXm>3I/#P}}cǍ窯V_kw)e-9gِv8k<^$|Ɖj*KَHMNGGGNvƆ4ťx @_Vvď@3).P341f ںsORJZfvɒڋ͗h ut=|)8: SH~Rxdع}=:ݾ5]8_YV\MNlgeflt|9K>x.`)_ohL`pr ZOd|x>P^USBBP=Ё-p>{!{wE>ޚtPW[ h\%.㱉FSa;?J3wt;8pW6g.$l5CiǕR-=8>QMXqʵЧwUyJ6b}P1-*Cʤ --ǥ$ǝT-Yn46svU$vjxɗ[~94/?3 \wo]imɞ*8~^nV.'gN͘ -- --;XS9UA &fklݼ|7l Y90۱s%JH{2NRk~'{PSYVRTuP --MaDV&Fi)aOFѨ t̾6s*]m2H1up1z=Y8WwYDu~AO/yo|`ÉCpP*/nFjs,W@'_/7g{5f,:v\}-t1G>?1r&`MɨXsUn^~A6n޾{Yp+mԋݸBԊ3L!ISXcT<Hea- ugKNM?/!v[tDhP2MX31Y&A`f GI?N|PmJ#3Kgw/2Bago9qLEu텦V ?IC|x>ca|@1/֢ O:@ =\p&3cC=e% #-$J̆y ՗PV[X9yGYyqMW]6{_YP{{v. G<{m8Ċ6_`c:_I+nU6XBC_#F --bG=*P4QXDbH?slu]CkQыB8Лo}?4?]b>}" ULKIڳkkTx:{kF:Z31$ GJa_>8q2!d_mni/0$lmӎ-(*)6<{)⣰@z-&yM4c+S ;b"C7';܉6wYRY@ړnh*jPSYV\JN۱%2,PO[ 0SQL%ˍŃ$!\e?o:蠣g'ut#)g -- E\ q?CJ1+:W/aJœéI >f&:ʊ'e_gϠ'U_AIg` wF„P/,>Sq<]mkҀ"}HߤqoHENjVɳ3)T側mzz?Ч:˧@_V,ĩU(C=Z9{a%&:r,Btֽ=dSpۺ/Hd>v\SY޾yӆ nN,SQ7$죨%%%K ƦvN~Rrj-8":t>~?ge"+W>E5v#H k+b z*]m-E ()p٧3VQ}!Xu"S9pHu --pVvNn^BP~au0p"c̘HZUdiWTҾ"uRJ%]R$/e?3su8gs?}~ќk ׽%\zVnSUXsshF.;۝t >BU$#UVR|5P>"#GѭU'N10st@=bEݸmĔ܂ⲪZ vT#CD~yX`4L K$c1a8 )U5FB{'oyA!a+b]{S!E[Z93 =$&:OO(Z̴lX*:r>.XEVf: d_N})^|ߝs'}E -8Sa6ܠ%QS#ьw` J*5jf60C@~ˡI)i9yťu Mx7o㄀WvngHW@=;7.45Ԟf:L . GCciI&rXS}q;GgwZo3z74X`YYUM}(%+\4ܸ, --r{/7Y?Yܱ %-0-ngcibwbHt%G>7TeXں --[gPhgmab9UNVf4ybbJb_^AIE bjh3͋H`b$Yɲʚ3gy;lρoOv --4)n\rxHKIܻ+v7kAݝq,!d(8~X*Çu#tOHu9'SXL-XF%gG --K+a$R|iU+pƢ35eXi!HnΎ3mM t)N5%8 @`//)`%i2RFGjXX9x,Y`jF񢒊3XExm<oN~_:U_<:}Շewn;]~0/W dokefb"bRbWt[{o^PHX"vԌ --*%Q --! ݉`F`._lnŭNCS*x6fF:S&^oA`'./qQCQpWi,Lk;n%QףYylQl$|w6ʑ{mdC銒₼T֍(%!<\-L,'(s+R@[cQM%1̬lܼX~s}h*?]w|e$=SgY=r(S?'젟cyO; j;m\4$h'0fmajˎ!I󯞨Ͽ^v °C١H1ɕPrպ[!I)ixťudH|=(}/hqhAxd!"9qׯ+ ^nFt/=mȾxN --)n he «0lrk`lNs \  I>c)n]r(?73-yD/_(0n䉀lgy+&G/}BQ؟+tv̚ sBʫrR:t>(HQQCDB"%brڛI͞ٶAc֘}?oBRϟs}.b! "ge`0 qk4"'5߷߄2K/G9^$mmc"EǎdO"o4ZmT("ٗBGS} aliLghjni@ AnjcKΞzP]/rXO]r2brtB}c͝=+wf(yK|W+>Ģɔi}4]=}pHdrZ֡E+0qYE;k'bAʨ'瓩o`v%im4]>W 7'#5)nMrw733Kk `dx\\D>c_B72wv#E\ضsԌy'.6]V/hvWc_^0]D,es$$FX5I8Sk1t2G$JeUϣ*QoLs?FڛbaʛR dS_}lO;)Co7ņJN3RiEmXM”{t8^Mʠ/dXlh:4Y:.wqZf&d\RjFN.j ڎ|ǝ!yAJOGϟ1 ?p~+0V\x} ;t׭ܜ-L ̜>ux5 웯F|2D革#5VDm= "Ed'>|@joQ_SYqT8jw$z|c}](JNRlc6~Mm u7RKwEu بywJ/z$;kMjl07'3{{$-60Csi>-Qh_}Chg:sv8Z.t֝ 9VX|aDKK>A>G0{yʥ*PD᬴@,*|CphkenbiNE/ `弌?lcTǩ.}=cֶ.K7G0:4ĸtsNy"!߄ .? صq. QVZ&b@ hJ%6V(J#m&cU8.$\.WP\>d>͓B ٴUwn>A" vw>~P:0n_]\xE# --hKm5L>NafCR8PBWը*&N<201GQ.X!<*zޔ,$QTu~/VO)G>-L@c޸v⅚ғGs2ScG^`:O_Vno] 3?vv.D=i`ck$ģ'TT7(~rGO:ɾ`oTIBfhocۨ 8:Dq[l"d,ts_OU)Vٍ+HϞ;lUlhn0#{7OvkL{^H GanqgJNSoO\۲)$8"41ПhP̣Gkl϶oge>OO/,'bH]ڪӧ --gHI [PE --|Uz/^(uD `723<#)i9Ps5n޺Ï+ /qƹDx=ygGeؗ Ԁ*-4L Bem0WT~2gJOCYz\kj;'x4XkS|VYiw lTAsVC|#k}i9Z$TܴK[nxcƪ+M-p5~k7GEIH9u8nVۀut֝{|&ɨ'㓩> ߀0k/^!q2S᭑a!A6/ښ _ʣ~G.a"92J)4l*Q;b+B|NWTV7dF/N$t2f5Ԕ\wGGm%lh!CI1^!muQ} P}5t_K|Vb􃇱J"L\!l^ }&8ˆړGlK ).䝝9t}P 3c]ڔ68L,~" u9*M$Mٺ]=}B"w'fbW\xڍf^dIN}U9xn+jS#̧xnvĸ]۶_~B3y:Mg.+? L5A pEGWF`pȦ-_.N=k7صvvf-(nQDX)ݕJJJ)%(RrXvmsssfǙ}3y?w'sHYEepPPC"όql҃{bDh7a4CZQ/3Rqw56U 5n$o/v+j6_\$wXvCUah6Rr˾hI}]L!ԑt&RZYbnWACOFVbjWs_U}BAG(Zܬĸ0c>lxm->QK7~'U3cp}3Kk{G]/=}`1GX._Mm/>#j=Wv:|}9RIfMץ%3v>ߞ}"U_s m3<'l,oCX$E6vw8U5hi>-J^^-{V񤢶Ѐ$Ж]_B_bv<:K*ItSGpJoనĔ܂bԙچ Z3E'z#SI}? _opW/5לdؖ1r_ ` --)+]\2Vp)~_xIY7ƍg[41=wE@#vKt@Gj¨ʎJeT#s46 --Kcք0|q<%J>%`!*md#ߢ#Fa՟nlja-T:?x.+woQ zZUu]ܝ{XUaK{^Iޠ8F5bqS^؎!З=m %6NsPq(/w@jd*Ӈ 0ytOb`E\#mMض#3'stSG")ը߃nT&B[޹‹_p0/;#59>:<$s --WgGRVézdÁ.R>~qoZaw 6x%Gki70/:.'taL8vLm4FT^`G:-3tFGB++ʎݕ\䲈&gaj"&~n$ϻcGb΁SOC`cs4vȖqg2 kѨڑ׮\:__[]yFq E-mǪ9iӧ"F #iwՖo>5gᡚ+fԛjhb> yJ%)0$<:>95#;cUg5^nީ!ѹ+ ^+՗ԇ?ak%WWSYsS㢠\ΟC:]_w5]&\o> --[H"8z,A؟i1nXxSP|qW֟Cʬ=Ha|2x~βokefbh0e>Cuꋢ6Lu5%V.HkQvWuɬVh&uUEyAZ[fZJR\4ߛK3gLJC^˚:@˩/2#7dJԤf68zjIaQq)49H_}FaJ5\yo)?pe;8륦'KKs2؈ ?5;͵&a2y1#G@z/5o} >} --11VqLKk{DžKH}A4hg/\zM|!?SWjc @#}KqXTVz=yK F輀f7ٗÓ߿~Tz4#4 {[勒rX! ՇJz/eg0jRlODVؗ[ ^Ci6f>5܁ --s`kt!թG?v)%&դ5^~R|M=O-G ]5,S{dyo— ^78v@a^vFjr|LxHΎs$Xp]]AO6F¾1t&fV6pE.n+ a[C?>5γ5޼sOgQ!)/' "-F/5ifE@O271?ZsxTZ#mX!#cʊFK 퇟tΩre?be2r --Z%vVQ5as$ךn.6hFu'tDG/֯K55)Dՙg`hb>W-{Td\*~w --_o(+uk).J'rx{rs!p{XWaCVU52=>M!99._)9RVQY] 7+ߟ!>Mao,/=X\uKldhR-gbzz) cd?amZY~cx4ZEbgu QR3AmNԩ֊zFAP[]YQvWsǶĸM!-v7v1/+X޺ d_ P̏B3Z CfYRQrq[ BOJ-(>tSq`%8/q^5zzmUd0V|;Ty/A~@#%E9;%Fyq_?`omajɄ/%mAR2w'o:+|w\z#0_h"$=妆J!9RC֓7)v_o?Ym`l ig>(h"2WMKXz/vvlQ=KDAb)V`gmAI=w6nsZeGaݻ+N}  =O36#3B#b1̜|D&$ >_;d<=UŪ=?5$j\:DEI3mh*(RM@AEEPAvA" -- --}aHu?&6N3mL} 3s7<9|?ߛtUnEF, ; ز du(M-*﯋\vMLnjV TWYs=!0ItދW:9vHꨚvt\ļ+GQc5hJys< 6B*qɾ^Z+OVA-R}O> llv6USoerW)rvG.Ӡ%Ĭ --_9wꙣ+?}`Az. 5O_>&8TJDjsUAhFDƢ)i7Qf;t E N)o5I__5zKz*vQ GV)^Rl-] Y>g|s3ZBU%fNQF\}Fƾq3Bly̞,IHI_I@ߠt;#JLo'G'zy,;(u;6?D˃:&E #HcdGGAAU?DPccY)#cSҳ hgV/p뮔Ҽ.)i[w=@!}t3Gk|tJblm׼nf}9xg 5#SnrY2شdz-]*[XlO55 ;pTDdSݫS{9O_X#qd?5[!kQx |2yJ̒MK>*8> !4yϢPǨuHіT8rW|j?jy#=U@cw)1G(4!;#b}RG}{i,^3ITIz4}\O25ҼMQH߻@ږRz%ыhj{kWѭ-M5GT7dKM[r9u3ktIT0l(jgӢ4CML)7-,}BQWZ>YZTn{DS3S{e7t%_ l]HZwc˦*b}#a1]f@},ZF26n,VZG0Gz=A O]eޝ[J4SM $dy40*K,쿋0*UӺ|bҹ-RFvUP&-Kif/nWJ/o}A:á,/݆fHK])`gcmL qLsץ~?Ur )8t0B'z,aM[v +T:f˷d{oOGX aK|*ס?쪀VEٶYkW. /3T'Y3̄ --b)oX: --;2FϚ$Y+챬@|_I? --I+?간ǡ( %7+67 6URY"}LIHXOsDpZ<53>Ǻއ[K? dx,+;XU]]b?jwL@_ޔ*oPzV:?{=Zs7N˲jP}fp+sWס!"9-xx7'm):aMzYNY&Xk$(?&xD @&smrjE>DI,T?Hd{C̅;ɪMJ]!YagYoݑUzS/?j[]XNlkKevl)*@@&FQ/[ {Ǯm)d } }=ٗSDEt4v --%'.KN.(ں#oBnqHIqouQ} BIzyYy֥BT×X(.NP>'H|ᩯ;J{dB8$AqIir7o݉{h͉Sz;ޯd0&ZBI1 --RK4Xdp%I9:$)쿠JU"O]M͛m8)j糼(0{ړz6Q=qq ӛ`")=ՠI]cKkWCWNIϲ;򤓒T0d[I!25)S eV%#KwQ=W$`O9ER)mh>.T˻R'I[ꮑaI8t)qr%ÖTp.JOIZ* v"I;/YR}UI2td_LSzb&c1GOgjLc0ٙ/ڲs79+4ίDrr/$zo﹪o\Wh@SWYRbVB~~xq|9gYvwzF!T®"b2;I{R#B]U`܆q) Ifqkͺ .{qξ?yOOϜ'|>zWCGw0R(~K#0;u!tt" EMI89V |',RFjPHٗoP"n\ )&c!d}zeJ(tT_aS+?f,O@p~rj*Xl Jǒ$VWYvts7GJ%f!a8!i#J3$Y讴o7s4&8N(8GͲSy/yDaYՂo)HM/ vm꼇(ΣD&PHĢ;ᣜyfz[_H,[€/}1Żk/Q4d@ ޠmzTZؓPTcKaKS6 --I--;~W"yGj[ fHo8)bGSP4F6v̨Cq.:p8Sm+񬳨7)QIt΃ĵfnFEx~]t6~S~>=WWh֯Y(!vnX;QUwO6j8 BJa$w4gݗx6g^|e+2r֬H?KW Ic-uxgRd'䑙+ MIdtoH27N{p%s?',#RCP}B0\:vo .Av59ysÃ(NR4[[bIfX{[qjC(Ғ}e4J>x']q\gx͍Mδf=ťekExҥe)?MUUq^H/ʏ*v8j^v%UdHϬSYQo=->PUTzJ $71O"{P;:~&(Q h @JɑcjQ|k!O?e_1=&BsMd1t& rF$'~!e~,(IvQ}2Nf^cTC5 .HΟ>X]e\.}7A:X?^=vȅLDTV }m( JT' ݖ30$2f>u6s|-?yIVc-_7ѧO  ڕK*>ZoڜIŁU^3MhT^~6Νڳr߭Z~; --L[;H)fx&LMϖLW@tƭ:|'c_+1>SJ$ *x}iĔ) NQ}wBUDt܂$YǶ쐪qFV/ 1_N_)ʘϺI GGbA^3ݦpF wlk V$YB_]ܒQBLS9y1LJfw[r-phM9k d~$oVkħ ^=T*+dCvf,]?tw8*B?q}WH(D!4`ߠw 12&PAݸyۮ@%JT%Z% bE+B&ٿ.Y~[Ӗ׬4 FH#F~_SV}7*(l:UwAN.h3<}CtIK%W.^fC_*dSmR~4sEʾCQ}2T՟>i^b%UP&_$?}5h --녾j(kwopݜ<~"y*I~ .δ;[eb=Jې2P:ye"DdAݶdh8δ^~fl¢TlERl{M_*_im 4q~LdH sq N;aJKN?3v*~,+?B&%W'.^z/rpY_U'ubX_B)Т[,RQ6CR#Cg6QVѢ';&ƪ\U}JT6StJCt;'r&Jm"ۃ#yZ,Gf؎ e }ڏV,eCZ1t'w9Ϯ}8D]&N)f~"[kOi^)VͲT_HSS{vRv5M`jM/:2q/R~2V~̻ZZC&G~ B ޢCT|._A-ZF)rrMd򣇔q.#!e_W1.A,PtTb*^aT\cϹf --f,]:iN3oD$3-V^;N*g?Iw*n nȰNIqQlWdpܳyfoگNSE{a@\{INctweJOPwHQᕟޣ Zo@C`j:9`pei3<}C#Rӳ ?T --%}[5=~(*?gq"Dknp?uTy<68TtQ "m,+VMqA "*(",Ƣ՘ FZܣڙؤ6sW,z?;y9uEN'~|Lb_ i4ьi2t}, +L- j fܬtp|nsuV97Gh,P84ol^7\Rvݲ?ڧ/޶cMP9e??T֢w~ --.Zo}4S_FR --_mKY1  oυ簐 h --{ȨNld7/`kz?\p#B`֮/* -- mh7] _ޕ_/`siQ>~8bFR?Q?+ԁ# --:ԇ<֗BXZ vo-W?em --GXIq1!˽= --O& --Mn1;y8ԣ6G=âV'P2o'>kQ7¯mu BH2҈KV¼tPd(u6RWa`sy%bxI.` {/#TVP2TyT0ߵ4"y=&`#> @}8P:uq`3g9vOw*^G7_-NXKOi. }]U --1#TB#Iӳ --K+=9kv߼|yB bעR^#?|zEYR_Kg/it/0RefNA $` tfhfhS&lW%Kˌ:// keԯB+0lb}F"tLC]MNl5 ‚U1QÇY ]S%~7YUxKU(*Mg-bX-OSojǾI_tjtT>Ke \YVAO --b O!^8* Tiry+MI΃e\y#!b_mtƾ, V``XQGDǵG}boE}=|G#noX.%u #?w3:ᥣoSష.LE^H}B2˖V[{Gٮx.+*̱/ FMF7lɄ7:"Qd=VAF}O]KE}X~?l+ml%+B"c@p@/6I&Kԍ}EGYn.+l|oA}( --gEvjPUnʊ g&`{{M;yEL#_&)UZwXU"a.+̜ %do4aڣF<1g$ -- DJa*(Iݤ&,JZ/( 3&-3wCI9 TS׀!|ƭ;uН2bF}L?5OCOT~9'N=QD(Fp8ZpgkX qy y<6 7pC W["ZO("w}4Iv̤fII}C؇+y7PcpxtlbʺlNK0K܆7o-[3 --m7Է|&LH^kW~[4NJxkEiQ^6^xB nfM =bPK8j@O|$>ٯc_ yKK:}?ք}cDZ_DN}w\j$׷G&CQe"0&`U8߹ !eB#qЖeh=(fN; @CXgwtM 5domP?GMWptT'F}xujsEɺCrۖ N@7Nxӎ|ZZ>a6S_}e ӷ(|yso~;Gԋ.ѯl߬I̴xN}7F}G$RXE4 ]`)ɒ^%ܽ@@cЖNSĘYː&-+ sA% uPNѧ2ghbN_sSO\S' K}Vf̱SV Z 9uƎ5|`^|=0d5o8BBudƱf]QeX0n,B)Q75t2i~71e-v*g3.c֢0h`9Z{`#c_XoS5 |yٰQ_LPqi]@0H+Mϟ;}\ZD  +t3 `?0<4~nD> GjT6*>~Aa+M6dF` NH"޽mqLZ3K3CG}0 .Uɩ,i*wwHeS5E(?n{ZGΣ>>`W>gkIl -- QI_)xl'Lj6ScQ$6Z "AP:րQ@EHD@0,qM.,A1L& .ZsgȼO>tZ 6W0xyVSUTO/ohIU u޹kOiG`"Ҥ~qV;oPɗ޽Q>dD.sЈQp$iz CQӰy R8h(H7mJ'`ROagSQ5KOϮsOu5[jBlTV-y7oI;tJA7X Ջ/þj!>wt9W~&XSniT񤱤Aԏ3MBQ( rR1.bN!/Ф!ˢfth4f͚: {AݻlSQZ\m }t]A/_RNgTh3ؿz,UӺ1:lJ%aAԯRŒdN}%% ?,i(A֐a`œ3/1)%}q*AM,m\C1>d ykSP)ӆ\.6֮LO!m>3,$ԁH ktRZ-d.nU}G'3+~]:7~@,/OH/I% -RSI --ޞ`bpa^ 1P NCn~1& @MKb_>ݪ%[CU%g[/c_Jϊ"H}(]Ro2(US"m~)۪7ɕ^ nH:УKQ\9G7S',ZY'~ _ 1:lʧ$<$/צ2R4YptrvI hIZFVA{ oj{]q08Zؿo9#8ŵVSEDVeWZSPWцנv[*K~EHJ6 --'# iTߋP/;9uN1۳iE\3@&˷P̤<&i@I3(K̂ v"h܌w -- -- N!%=Q h7ᣍOơơıՈګ}.MQTݡ --Р~eB[j#mYI2EW #GTA}{*/ /$ دzEXtctٞUOAl8Da(}w4l(F2|ǹΘpI*2T^ cq` [ 3ҖHǰ?L\RdWR R Q & d&#]3'xO'Ua?XSwY0?FjEύwa uЧ;H}d(fwQG#FemU˗/K^K --. ,^Ry"Ȅ#/_'[n?۰?2E qDpRJ1LQ 5QYDc 7ƹyxaΘ5;:.aђ:lj8S+>,W}g8a?a$dN!@}566 o,]_]4)!.[~<`: --ō7식.F[DՍMetٞO=Ay EJ8)rI~PU dCIC' ($lf8 (qqJzf굘:[8k~~̿/\VĎg #lSƑ3DoFHD7k]Z]Jڴo9!TVR !B\vToLk,WģvCy6}]/t>rfgӧ~H0bƣ,F+ : Fr}`0f+WaWlhq8w --˝wq2D89#48bYT&~ wԏO JQXPpЕ@iS oUVF*ٳmemq#Tv>蜼^nDwٰϟ:%bԿ~sg] >CP?3̡Ça`n &L͘Ĥ+ w --?qlhnS2c+ 1xFE6K?z h95{ulbkP32'J_נMK 9}:{EzJR"ty8>7_5u#-S)Hu\: _J]% iKcN}AQ$cơXˉvY`_?a ~I}M)}<kþY eRߍܠ09r%?OisiCnІP|CqU+/K&x /emNwFb?`?5# _kщf{柚Oz%PtǶMeHŀHoX @ćO @3f͎KPơơi+4z8h [ogGpVn zo8JKoXo7g{}Y̱֯O){GTN aY]<}?CI}Etkaɕ r<3 ߜgpWAiYyth膧-XLFM5ma:Z4D~Vd$GasٌM)Z0ogS 'Ԭ"b8 --pXѴw pƱ6m07Ka}%SWEDoS/Sg%Կ_~><hۖQYaA~^Nt_7;P jW --O6 pXAQ9nZ;z@7]&lX -t5Hζ&겢ĘrmS_R<|4 {,zfVkqqH)(éޯ Aam# ۇVҦ0Xٶ,b7Foяx2eqݔqݴuݜ[ZKS>1;n8\jomn#ԯ()NO --rv@Q/QR00 /Dg Sh]DLBj&C.2M0~`')Qe/B}<~jeOAT<%wrm[XVo,B}\#.?.oq /r 9|=]6VY[0؍㶕ο*)aݍwT\rzvݲ%OYk_߽6TK7pAAXBMA*+LM rQ H3@|DΙk _*8~aQqIΝqbؿľX@Pe\E ^}IJ[5ħ,#i m A'eWd'ֱ_2TOWG+[5%9vwv،v:r˩mZǏ}r[9bpM.Ï?#$~gyw?) --7d|?"EPCEzf%Ey9#VXg#N`X?av]xtBJfna)c0`8Ev>!gY^ @onY!o}F"ɲŨLQjQ>=h}udwg[K>&/d⸕Zksbva];Q7Wcbf?@7qIiٸgk}y]F~$]_q]?]6z}N:@<9) !>m̀Aڥ$4z?{1U8^~AaIr6GY _|4,>lګh[4rpg>k +NcٚU\y'ɝŮN} ͸ju1"OCYF}~в󪧫,ڊ$37鲥~9 ]صE3+5nBP7hK+n 8j{?aU{O`)y $ ܙ;qU#<c#C<]!-V0yr)qxFV?i8ܽBvDǧd8 --%ؿİL/'277֓`?!&\a&z]0ys{͈Y)Zľz_ --SoM}ũqG/?gMUYanf --M܃9ІF. --٢]aa-/(4261-+z7Z:G. {_AИL)^ $RAA8Y{b]K3'Ot,Г"p:ns| kJO3x]&Dnn=,Z>TL+~3YBԿԿ>udVg%b^HtϚ.C`3!q/הm}iA70숊ON)(كx %.tI^H8:;TOcQ?IQR;q0Cv:g`R6G|BDt.Cݝh Y$2ؗVF"%ԟ'ɞ --KJwukP*e?xlanFJ<i]@E 0pBᗫ,ZmDԱO,GOЈ̼*&~Ex7j_S>v@#8G<,"Ln%?wშ x --Qy[qȂq޽g}KtbJ‚c#Cpnط4]ZеJL _eݍ  N)㪮ANvH}zZ=uB~uyq~VZ"ՉNJv\5''*t6;b'y'7U-70C tqhǁ i @.ǃkWru3EGBZ%\4Y삒 -- {.4<6>ɺawuYQn&sG=`/,sbO`ײ. ];W'MDgPhdl]YCB(9i ?oeEFcK s2is4yЎ --]Ir=|tmS2r YLxï;"p$&ި'0/1>@/>Nm{fk iĭld {W66M"d(."֌&?E9}D1~cs[Ã0}/rFtJ3N`8aSe縐cȓ!𹫴v/cI 'au|R\TXuC0wOs3 KBHo --i q;.^ --%Ӯ'SQS'W^Z%O/0`_l{a>n,/PEeU|B߶wu3opa_ؿQ+\A i@=$ A!>H%n.*>V1ɀ}m]u!Y\^]' WVG`/"G;)C8wRǒjjذ$6\VHƖ]\CI};4A{_9{3І+h3m:iU+ HB>jp[;7]N>w}=ƾ>/z46\|bJE: rᣏ XʡqC@AV*[GyB#cS2%ARo>5riи݈}\}lTh熵}{rݚ2* n+6Vc=|cpDtBrFgjXWCA}|頭,-WeP@Zqto%ڃGOě?]W 2|5i ^&X 7[,K =F?FQ}`6Uh_Pָm2aDKW?ZS"i{k+J --;p~^Xte-Kg?F 7߈a%q⬉k7xFB] --Vhs0~RA['& gPhlo6hhW>Q}I7l\hC"Wazxun/JFc_A] kbh@lvסbw:;#%16_rNvLiSFa_>`_$ X>!1 ) --F=- --ؿ؇atx}UYQ>,k(Vذg<GMwy38g'M mHU!϶6 VAI --ץT]W>ktcwo`hd,5{sOqk0oK˱cħ 9 @t^<نΉ:囶-nkx#E6›Sx^ЀS7y:x̧Γց((lk\R J¾&?`_62t1pع@m0}\#Ը•G?ܓכNb?:Ca("&!9Z3b&b_#8> --K73%MiɎ:*s~g-Z FYq/kyM3P )+R('}#E+SlSkg6o* kW/vUm,i[dPR9.{;OߑW@[ :?yjO 8 hUh+{\߻%,J2B P oTX `s+:fN --0q샑u`"IAA%CE!ɠu?x )Nn-pjtW/KK܌Hru?6GbR'1%3ggQ<3흘9rBצ>&wt+_+ZԧvU8mL5uL,6pj; [+xw7 /} --.ܻ{B+;p sJsތzVe5w+,-8vF>u`/8ڌq'a7}O}ww]RcRPhFJBtDZP(]ML؇o@Ҝv!T`M mi --vCIzo,Eq1p+__@ԟԟ8aا[n̵R:?8Zj3mz/; -->wD۰ -- ##fHu4$a߂-YfFFPR*bt谯P>U^)ZxmUCҒbB}<9Y,B(/Î_褾>)?ΙT^Э)]u#C0ZoUAPq_3AKjl6jC jך-|>!1ě{Zނ~Q8XOG?ЗĻe:܀΄ĩ()TggB:el$Q4^gK}G(HB]HzoZ}I;ښdxà V,q[ 2`lȭ)ޘ9u/N$Sѭi MOPV&&΁#Jչ 8Lj!>\̑!WtPAժJϜbt{Z~^~AěLhxz[uN.}Op>M}|:C_IqC:q NE2ʥ --B ,X+` cӗ)53g'baa})[DʊsRc#C1x]eZȉ$jנuwҔ%j'QB:ЌoNͪ.,K#? SP"Q}a0Q?)l+Q_zH_/^9ygֱkq[kgf-I0f\Emil(%M"(J=JBRIFVfvٱ׳<˙y'|>tOtjn Mģ=Xޠ Az$e7E%eje}Fwz::g} ͍ gOC阆0h ?cBbsH_= c}sK+Nl8a i^b(5Sj{߻;&24ϛ2 MQ1{WګJ4ÆfE[%vpv'@FN^!F:Z"^}!Rr򳧅k@}񗫣NroN78jGI|K?x{dL\B|C?C౏YO --_0(PHܳkGXH %$j L(EVB>?JLΤ1 --ϣ --^ !/ ,RZ}]*:Ǐ)@}Z2j~\Y7yYQK8oֺ{6N.Z4b tNk[ # 9=Ocs_"iBµzݽR(m·mް dg ef --COONA}hI;N k9#b^*17Tǎ<7.:BH%G{;[(PbzK[)(T4b,(vv cR؜9_ImrW>ꋠy9Sy̨lc꫿׌} 쟛67v+U-7WbJ/3+j5ݼ >}vE;zb_g޿<(<ަYR{BpvP?ssq_t6V|L;TO+wԷQ --Uh׷{OU7}> gubƬ9|-|Ǯ}B8 &VZLR'@5?,e ]VU?SRDJKIiXxd 6"ukT4au׌hz!bчG^UVRT)lkF7gpt\+)LLX --c_k]Ǎ6R?ltkD'V^Ë{C%_D?RkھΩoϊ'awhЊS-g|'@z֡#NJJΜoNk[;k7{b_ǞЧa#?lj/U^(;] ]fg&Yͦal@cGq`YbҿyЄ@(D --&}Oɤľ8 --0ϣ ݈{vѼ|S+ ɰ/5ְ)Kj+rv a=WXTR6*~;HNNJL)JO? s&⪝®څK sӖ{S3/>]vR-bД,_'t ` --Q3h GyՁЀ}L"Gk }+q~I"45^);=%kӪ帻Β0ZAdꭄ}mWSK?k|6u|EDťgaKP?ϩXv]Y5 P>QIQXTZ=KOͥˏZ5t9V0/ ޾}fEġώ`s(vqOki --}#-esNf$.6{y3%fBwMϔa_iRtR!)]_}NLMND,d8` ή&t_p8;-o 'cx^lJ&R_ܨBм7dpV6/\"-[ãcR3rU5 װN[uM+9'DwATXR m`Qxc0엇WӦ$MSI{R+CE[AQDAW4*{#[@*Fe --"( Z<߻x_؂oϟps?ֱbշn3ܽ p@pxT\Rj&Ҋf~>XʗFmY@3){" }8>,-? sҒ#BO?`k ǰgvM k׬\9^ {&O$_Wɾd+N}˓ǣXOKEYiIOuw63b J*#M2f ;Z6Pi"y*5;XuMd0N#bR2r ˪`;0F>B4φiEyXU W?Sb7>щߨihOwz`HDt|rZfn!$źvb --d0kg>:(>t^K7ʲbh @Opu23cRQT_($poq$xce-}&Ty$JX) ,S~^O;C…>0@eoJT`9q*t;Y;1iWTZqz0'蔯?U[7{׊P}]+՟'֪/LYϢz3WB -->"İ --/-]FfVv|OI8w >{d1e$._LcDNygv^%쌔3aA@O7'{ks{wioLAF --ȥ za9@%h|:*?wʲaO>@wu@_((NM u0DWKCmZv/Xȧt),Os%aCǺ˗ Ӝlb --YsftDT6՗wg1GYhgKWV^?][NP|U5 Z/^C GLc -ntu57V&E`L 6] --:Jz#>{J u+ 5d'GAB@gR\ >'2xmW(,AĨkTM-܎xDb,mj*s}vQ}&IGFaT~aNFqU!Wg|sRK~t7OWܶ!ðĔچf |57ςGm --~6]r3S#BOuwq45hi1ZDQ~,^@Z 64f}'}Urv~#?yd+sM}~DA$c ݌ ^TW]^Rts49wh2Da (j=G}2LW\rͺ hfzdPXT|2H%F)Uw?L)Q})ףGaz8P'3?RZ5w"tu4tZ:=~"0$":. m --7oA #biO}X]PyJor|td(^WG;+3]-0x D$>;JƑ\'ʾ)o3^KǑ>0VLa5mXD%ǝ ; a|TC( *Z䮃+3UT}P@(ݨQ&8So2=Cӏ㌔QDc&&ʩODsULgSŊKlܼE[blfeq̇`?>9- 6sb]SK[ ? iOc}WG,}7,h?5e& }<ݜA*wm --v "T =T~+M,^Cf --bʹ2*'lBtD)?/W*;oۺYUEi"Jv<49Z: S(3E_M}ͬSHҲJ+.s2 LWS}ttFOWG+ِ㫾_.DٝNXZFng@p֫A[;yz<p6=+\qYeM=5#9nS&}0@kݝ[/5T!d$ƞ :}!  چuJ/QC^cAA/ };F#xd --?ee<3" k)a%Rb#C35=w.Da) FLQK>ٙrTRZTJuL8xxrSYUmcs{gw/*/iOBQ{T91 --t\p_Ozz1؟ja+Y_]{A C·x -- --;RN} siO{5{)kK --r2Rƒuwq45b&Ub@Zz%9=}Q@WȾ1g s)(Eeԕ憚 ӓQM]YfHYf*˘)na?CeÎ RJdoTIs툷`Hdl"=vtDTgѪϦ(Wy7hgsTT_3QL[-60Zk/X;& - [SK[ãR2rJ˫jݽ7 !NLg|OsDC --g|пThkn(=_x瘇#x h@ҒQ r |$ R9G<@f[B(r٧"``jhzO喦Lpӈ?oOWG[K TW-'j*It,Ť1K̝w8VIU_BZFE[p>#3k{ѓâ~y?E}q<΍w1%9 M[$D& ťTK`A@z/FP9f|5gp'('oA)1\)]H3.$Rrv>:_S|85h>P)=YI)GH7C/+Oeb --Jxv W/ %헯 B%ʛB2t L>QÂ|\+9/\sNc1%9k/(,gVT5 ݸykbq>?so6>厶e)qL('iiYH%%)!&B5FpHρ'+Oɾ%- )$y{I9|4))&95iP oz5Ա),Vg'#Ny;enBɩ*a$tO )25N'wHdlbjfna֎+}_ݚ|ߞPJ'9ͩzmNfJbldHլNTWoE'x 7^ _^Q1 k;ppx+1,uS~[Bz}tZOsC O~Nfj@?$ӕaocifb}NA ^q }V^%Ⱦ*}s$>WbNu)}bF?a=&td db*!6"C`PhNFw0/-\R#"*MjJ4u M̬iE%˫.\?2ۅU4735TÙT}_8>)8@$o߉v]!5M3+['7O̜s5 m 쏂ܞTp/s=>v[jK --sҒb#C}ܜO27=fGv$ l@1P 4gl@8eIiYyEG%4hA}M !TWWdg ~jnjI%)!e\Zďd O~)lRNQE񓖶̀HTY] :P}`k k(}tgtc[RU}E'롈aKl]WU58~704[PR^Yr8`_wxq?sAY0@҅F~ia.;lBlTX#t *H%X6 h }l@kx|VcI?%dZB/ܬz*+eEHPc#CN6'T=;oٌtTD b>S'"6V,+@u --ON/)'G90 y7S --$ ՚`'~G+Rܬ$VdhML4F#GDT9α8l]ڵGZfl ӎ~؄Y%Uށ}O`L#XWUQZNOId.g-O79pID-lX9s/D)'dP+dopi,?ª`g>y_B|~ >9Hܚbƒݜm,Q5KC*?n܁G4@rzxE --KS؟Yo8!'1o[+ʊ3Rà {K3c}j*)e+ 5 :83iV7_F: YX#}W>2PSQZ`Ű05P= ubAUʜh9KZ?*L#kO`hT\Ϫ=Cܭi@k?h0G4e%B}P|BšdkBzi>N>ƻ.*u;,;} 9&f6 px+1%Wدkl%?`>fp-A>ݦeIOW!П}{ "B_@/-v W/ߠtv>FE}?tѡ΋mMVI/離41Nv'edg"`I"* --((^.pUzK/ --ʥ (DMtMD1j}9sn!]فy?ϗ}T4XZ OT`d2' L!SYU]SДdxtBj&K祫n ݂9~U#35s@ --2 P X>RlaG --YA6{S2ro:F=C@ oh;P[UQ^f̍ t45G@?AB\ }ĔO?!T2Ͽ0 ٗ}PTؤ⃇i?2:> Qi/Qyёo}}k:nEY!'3%!:,U$f VR]X5Jr8?iV=.loT4hT fљ~"T)Fe9pT}҂xRWS޵pU˨S6j5Vqhr:Vv,Phdl"`?c+=E쿟.<ˀI \~\TX@_ :/i+A}@L)A1@ GMUpٿ70LKd_R!yPs`q^vZb,!fFzZ<\IŲ(cKW -->jF'vG E֣Qfwz\8vhmaqQ,G 42XȾz5L`dA}j@UЙ1*kY9y$fWVדw&i/:;'":=xy0F趥)Qdcbf'OW,$_"pĊ[GKv$\;miXX;zE%fWV64oؿ?8,GqcpC_#OQП gx}~`I'+-)>`cijW  !<#aПa/œ}HR39Ee\RA>Dì%XS^v6>6kƵ@S[깕eEԄ`?/,SC]MuU`OR Kj)Cddz1GPPxKJnB~.r6,O@ΜCGjc!5Do~1:''5C0nl*J --%^hO-cN`,3,Jghjacp [PBbp?cg>3f{ ~/@铭-K 9Y@_Ow[K3#}jQ %!.WXF 3> --J*TS}WШVMcˉή:?kNjC >xw`Ol?PsdXlksw*! ,Ɇ6E2;%QvnSPR [XVk}׸0MR3!Kw Th]UEY!'3%!: %30Cyt01sP} cI\Bj-_mSPܭ_[7@xt<`SPr[8_2/ ]O8ٓЇ ~FWcgc"B]m̌u4 KdH蓥}$0֑BɾԬJn=IAD O}TѲOP3 5'XT{/;}#07#9>*4іTE/7B{Z)MS?gPNrR2T32… 0-+puC3Dr?1ݗDWaץpP:A!8Ksғ"C}Z[e$DyYvV:{Tvn --(DЇg $MEм %bӲFȾШ܂CU g.ѐDYpS̚{8ͬ3Z+ˋRbƒ Q5TWU޹#kLO&^5Er8:&W3D3ߡ'I%ᱶ ߹wo4P}+(77q+ˊ8ݝ퉺>/8UP}jG>u1/)-#;,KCSG֑[M!aupo_;=/)菎|п-EyH7dgmnbE@FYi~>bB|ZΫD ;@DlbZ6Sg_?dԟ/xy||lljFTc#C|.JKDĞKbRZr#TR}$/(,:!%SX1C 7GƉܜEn --&Oؼ9prWg;ࡒ丨@ܖ,M قMpPTy[_;unߩ506sd ٜRaؿKa)+4/;?A3f?A?vuUpN^ܙ6 Yg'"F}߅} YC")I̴PdM{=Euf繟gy47}}+scC}]MuUeE9>B|<0z DCi**!-N]Ko3+{l֎GRؿyV}\pOJG eOMAMYAv Tl`!RSG8s 7/m\='-#;9ؖjꛘ:R65?~ =]8]z\b"B|<\l̩)ÙҮHI 83sѿ"D쫪ko66utubIKc>l'_7Dd@~B@?F?"4@WK@_\DHk~ПF~ _c!1Ii9EeUu-]}Ccs+;GW/@<ut{ǹNc"a'ZA{AߓdPSQY#.Z`w !c&?Z<-iy2ͭ]ܽãw:Tp)R-=c!cXz:[ 7SldKI ܾ„lUiIZsfϢ5fOMYgzM]#,yۻ`^1bjV5޺Q[G7ٕ觇Շ*mn|454b"C{9XSV!v%KqT|)~2`jq̾f704<*.!y 7-`j>#'c0P鼃[wѿƁ~|tDF@O{jU+1~3o3wRu!y7sڊ[56qϾ#%egtbHl RRnA77VW^XqXSwGrX55٠ Fb9ZWcgM,Q'*!-GLMcsWO+ڍz<4ȡoìJnJ̳'-JOM --vw6C:%9ԟļ,3=f%/f --g`hbnmُz6/) &lj>6~gOtu qFocaj _Ї}WXwK3XGΟ)abժ+U$e»q3f?$"zCJQWB4߹򸽋b>'ݝmkW~:w(?;#-yWLDH9ܒZVʘ?ȩ?OZU &hhKJI%WC3#̡GfwGu5UJs2I 7%'[KCħJ4' L8ohJ[ \-*Ag`dbam'RWaowv?}؇f}4 ƳBP[s*4}ϭ-6"*2G`.B賟} --P@KH)502scg\bJzf#%'ZmZ}Q>> "Wܿsj9؝am-L6oP]+/#)juŲ%V[3h9'&fͦ&7 M*gfef恃y'NW\ؔPǘpvYg --g܀ gEi]!xd#S^yxqSw8qf)b_PXTBJ_A[oɾߨol}N?wxeb"Gq>2D//'< --H}K?<>!Lgs>5V!-l]=}B#bdSpUV5\zb`Sjc]uK\ƒܝL P*B -- * .]_5gJ`" f:u-=)mMس/#'HIYȼ #sѡ=%'=zpVS ؓΗ9/%1ngXﶭNv٩(JS ӡYOy ."#WX`d={z>' }>~ܟ`oЇ.Ы[^ >S}<3ٛҒe(gWzKյ&H{ҧA$<0:К  ŅyMܘ' 3mOb^vG`_HXF&$'+.ׁ]O?_7ǡ=ݝ# r2fʊr2; Gx_s?.d[؟c/ľ8ľ@ܫiEefcZT45M&I"%$P!RJJ*Yl!ҦM/H-w6EVss/{?}y_3s --J*k[æKX)Yl(/ûi a8XO8r޼C\EYR3gL'{GU78+[% im0 ?~b>b?VVQU`;:{M"ܧ7'sՁXЯ(?IoA_]Ue$~3iDc}^}WUi.YpV뀓Iw/߀"XJ(XZDA]]-.Vfksc]M5k.֔_/ǜv].@ʾYS1gJJV6 rՄ7T(p&Q3WYVRT|%?{уmRoN}yjr3iXcC|\UI qGُg54Lv{g>6A_%ѿ3\501P>ӦB|G|?x ±=$]k6oi PWVB '^+%k3NrZa.kW1^9fzC˖hb'-o7XG}G]p&1ڸ OO!a}Y\Z񬦮U+cW>s=Hw+%1.*<$˽v;,Lׯ#$*?x`G_<9:>ɾ..~!aq S09~%~f߇Gg{9o~omF迨(f=oFߘ@_ PKHL-V} )̷l߹gcg\ MHN #+Fz^[j^WXWS]YVRQԤ_/ܬ{[^|9Hadkޘ}䕤Psɲ,v8x~Ađĝ܆-yƿ,ٌV,+ʊR`lWB/xyiu#hm tږSyR>o/!Ⱦ$@!̾ӱ~,r`e}#`;:}ȟw8?4a>vD/$Oxyj2@-c2hh-] f9z s >լ5uͭL68^" ^i_vV[KS}rZan{:~.%fCzSw]‘8wEZKmܴzήg<}.E%ܺIv~qi3HVnZrBldXEsg\۳ssWj/V6}Fc2E?b?N %#f%:Zf켂bZyE~s+nBG?b#~gB}ݝ>UcC]gR~C@?:1HOOc}] P@(U!bjNN{s**?{U n^ 2KxW=fgj'ҷ|?K>|L|~._VQU ~DdÇ =]lЯ//-.!#BDч?]8|&M$g>_[ه_ݻ<|5Zg.G^Mq~n!b_Z*lE۩I^'9cx*=]m u_wGkFXIRZV~+ѫ`W6qv%Rvϝ}M?3ɾ`؏J$+VFoic;:QB37){:LFksS_]UQN+.~@Zlte)SR58+?N0f_2ܺcG\۪k?Ʀ~؉."]ieK-$"xB*hJ83 eևdV 2LKG;%Pǎ UK+SE`9":0ׂV^q y5M]70426>`|H<aZC?=%y~_[U^R@?%1.ߵ>ОOYc{}yGcihjsG,0 [X*V ,i!T_+}aDVˆzkia^VzR,.,"ͫϝ>q}{1 --` L}LjHW~a?۲}B:yem[;zU_\^ R7H 30̞ټAN!QJ|LD}ISLiU..y2/`烰L\e׃oa70$OHN_\VYSC$S'l.O OMϠ_}6KLE>bL ($BWGk)ёA~͕B 9z֫7nZ:yDR3r+j`Q2<ٗifB룐dKtq67ҿ {&;"i I}9_& PCVF2 MB#i%Ҧ{2₦M /K?~3ƆiNpFvRKS`՗5ŮJU¾p>>9-a.~Eu]cK[g7J}dBxzI9UE>}PFdROW{kS}MeYqA^vfzrBltDh}wXG?ݸ %VskOyEeUuMm]D2m Q_0ΥaP? '35hc3aBa_.4*em۱{}vS{fVv>KFFE`s*$;Zj*s2ݜl-L n@u{AQn)f m_` =s`¾o@Hx>>)`?K؟`8\@tvI;X$8lc#tj/N<."$R诓@# ?XL^o>xǾK,}CbqKdqNKބ>1.dlxN&t5UlgizOOeaٽc7!:a N 3)AԗE"_pDL|JFv~qyuCK{77crx $(OLaMB,40"XYQqA:2gNj<zr 10>#sIu ;yE%>yTXR^UE i}C#c &ES@!쫮oEvfJ,@txF%tw57UW>HKC}!XRCS_N` 0T?|\}侍?ُ̰ۻ 0W&'1rH_c( 8RHŏ$#67ҿ}=vk_JUa F}lSE<:#41C [G7H|b*ԓ'; ~&:Hy`JŽʒ̴بP&{!8[u4'(37GQy c?8,2&.1%~eM}SK{gLú?dqx|H ߗt_z>} S"ec#C}4 --P[@AjR<>*<$ @_@ _3 vH6K:w̭=|pIYyuMm2 1 1?A:b5%9 /7G&wo]oE v*b .U,O7.^EבO`. --E$@M2\IMu)Fϑmc-IǴdFJ|LD+W.=u\nIjRآW9_`PhdtlBJzfv^AqYeM]cK[g7BC?`|P t;X$8,&}t*T_[U^R(' @?.&*,8@gU2! --d-v~ԏ ghja넨kBjFN~IEMCKG78:>*QL~B0e3 Ȅ¼ب0Nvto\x )Ŷ~PL]-SI h}_kc46vp Ǝ#k%kɟoIcJrfJ$quJJOÅz[II-MCؖZ>b`r_a__Ph.6!9-an~QiEu]Csد(4xnAT-Hコ{waYvYww)1.JLn߻Qtst|rzv~rB;|z !XWSYVRdgmaW~9&.^)G@KJ*WghjeML/oiG>֮O=+sCc+KH2x(NKS?sԉ/}^D$8R󺮡ohfmr'lɔ²&Rgo?12>=F7ki=ӂs;}FTV;#uqd\F wcwc_7 fV.ȘT*b}Sk[gw_0 ,]?Ⱥ7? CɠS)䞮vRsC-@ 7+-9!6*,8{SA{cE;piW#k`laF --NH-*Q c ^K7+p:62D8VZboefzEWCxEC^<"R'o^ [q1q)mdl+<&!5+ ]3%赗ؑ>#klgeMKQVZR>rO`7߸xdؗUPطupv#xFD%fdW[Hݽr_( ج }=mME9i1a>.vV&w蟖@/] }|ž1 _]oīw@hd\rzNAi%L3ǀcᎽ6A67=1v5Ue&Dzv r2cc%;$OaK;&vN^Ii%ĆvtZSdG>~ħ>L}Ί\f/a0hNRwXAni 2HlZh뫿.9ƾ<}#3K{g^~!Qq)Ye5u ͤ2Jg0G'gr˳/`7"06XO*/)HM &8Z8pwϿI --/^V8f+e1:1=w|q$>xdd+,c _0_H&Fy;Z)?#uJ#z3^ymp\pIq+g8RghfȨ䌜²FRgO?mhd|zwfXBGgY-YM1dx+aFw]͌u4+RJK7,ؑ[+kBM-l\zG&$eVT7uvSa̡7 AӓLJ!tj*S#B nfwtn\vY/?}R؇z݇ի9%K4uo8|âS2r!dMdS ,dhbAs}w^{avj|d%B%y8[iPr^Ȁ$N HDED/#5MFȰ|¢R3ʫ9+rY#]4<8!ܝ,MJZ$<DRkRv?)!%sd_mCS k;GWOȘx~N~QIy<@r~"?K[}aCGsh Rz:[j+ʊ rScC}9X`_x>9|w2iYE,_M=C"cҳ J* -2,#G)NZ L,8QlbZv>6+*jie!!몏O}8*x/HUUU</ڵKJ.B6$AꯙնI|?xǾ;?(4"&>)5#;G?:sms& Bei0Bb >mTO(-LKN pu0k^+)ʜ?{?2n;p}g]I:ЯAүe q8x1x퇫+ɱa@_w{ 7`Ã<ݜl- t!ergŎ="*<a&ٻ:," 0Jn SXZU؜;*)L}ޤ`s&ŤS`R ʒ,23@`T9wn]]R[JJdj7u[:8C"Sҳr *kZ:hC#cS qso3עaʬ 'GA*Njn,/)HM pq01}K%y}1ɰ~Tՙp83L"5qQ@wޛK/r{^#6DLLVE1;;s/KFfw'RrJvnxBPxtBjfEHmJ",=`@OGK}uYbY(gca #!*ȇ X --eGPِ,.w:*/Ԭb ;1 r},/1zIGhʒl~YkIIIqI"SJh3Gf_^̾-ӛ_TZQ];04:>93wiqHٓOGyاo(/ T 9o񇕥٩ʲܬĸ舐@?}Yi Qa>y(cb| C VSXZU?<65|eا)!%`ogkcMEq~VjBLxhk?7繳dˎ}^HA|t7$qT)-gdnEI9V7^^K3#- 5yAy9Yj"W/~DRop?Y?5ܼB"2J*jz&68'W/_ȘԌ’Y%0 `AB*s3C}m uE9i Q!oO7g[+ S#}M}) Q!}ߜy/OÀ=%8rYΰsp --H@˴˜ܽ#bӲK*j@N\Z{]$A,`FG}fP;@6n^YYBI؈`ow'{+3#2f<̌_SAXF5*tA³9N'%oG_S2rʪ멮whw=U2sno*+HGQ8l.h_8(+IZ`Pp=~}l.ߐx!rf6.xЈĔ܂ʚƖ񩽹}>m#e./I۴?=162T_[U^R@puZ"+JytclC-#,E[GW;}bߥ ၾζƺʲ₼쌔ĸ _/G{K?/7?Ա~ƀb 1$%5' $2.9=ohljva[1OSDΖ.Lv6Ԕe&Daudgc}y>~#o"Q\ZNIMSE(JJ.(%inaim}s_p~ۑnx7Iqf,ǎ"tLA&:Hގ|K7aeki9>-ӛWXR^YS78<:Akoܿ>>g??>>1J --ɱ! E9Y) Q!~>xwG;fZTsg$l_|Ч)Xf0ag:u>2Y3/Ĵ|J\Z b0fO xQks֍+ Sc bk+KAy;YjBĄy8ϝe=̈4,a߱f| EpN\`Np;jchT\rFnaYU}s;Mtcڡf9UfJk`J+ sSMuU9$' D_XO'nCѿ L9UP:7419zxFD%gUT54ut myOHCkПT_SU^RB?5)>&2,8@F_UYQNZRLDx K}T/N9 b_HLJVӋaQ)Eegsobo\qeq~,xlomn,/-!"KདྷDZO(<$6v.x1i1 a y5 -no}Io0ȢGhk+vqJ\lgN1SBOGWRQփ;}C£b2sJʫjaw{ )?E? 4C:%Gz;ښ+ʊ rA'EGzy:l,Lu4++JK AecE?A#D6ʼn0"?$26)=?WTgî1UH,tEQiC.E{w)R)JA:ņA)&잳}{gs''Ox~SQswȳx?:hS&LJ;ۚʮ_JONruA,,X1g(XvDb?XP("v Q7Dq`4R݈Sڼ?;C5@52B --rs0צ."x":tw.]VϺ!6}cE%edT5t ,m\=C£b.&&fd\_QUu>>g39Dy>gV%2^nhmQWSYVr=?7JZJR|셈 O7g[+sC=}UeE3R!'yu^!Ճ{_@#!#; $261%#{b&MM ?|gt@cB5Wd<#wz:PdKǎpsFgb;?Ƴ=#D ))i"R’ֿݺ}ghé~[!1>CFؙ<7 Abomfw^FAPG@5҅Qo{h> 괰o@pXdt\¥WWh^ɇPgfqE#3km@џBчЇEZNfFjrŘ@?oW'{K3cC=mMuUe9)q T賠lk诓<;NX)YEsZz6~iyu45 wh,%U豀h8HCwPU^MMx!,PGSMY^F#$χh,X@@1K֍\"D5RL|rzVq$?AfA+}D!،#w{n77TS1*4H# 3:q6ƿnWlS/#b_HTLBYsu M̭l<}B#.']_X\ZQ]t Qb "yibu#ojNEEeL?prblNk*ˁe_M|)!.:2,8@WKC]EIAVFR\T@1^~>bٵ{7t ͬ=|.%^)(ih;2gm-sSGcÃ}ݝmMuU2ӓÃ<]{FRL4XzQOYDhH --h5ըolaODE HFHF7#Sէ#"#?6DQVzrBLD9EU/hFmb>!HHSTV=ghlfics11~^AQIyUM}cs[[=}C#PO-@ByL$,pP@FD ~b(WRc/Dx9;ZP;$/+-)&*|?an.6{X>A[ ht/ $*!#m`B#Z ڵj7{ǎ'V^JX:1+x*Y2EdPEZvFJBld4-4Y)qSǏ`;c?(CbFtS310sv6cIE=_$ˆV_GĔhB941zoVG u]s(.RRb"H1ˆڽ뛏hoK}#'E0R2r --*ZƦv.^aqgUT54BݿON? $Lo --%v@[7;ښkK --&'^ -- pu431>Ni 1!*9?A]Qc)Dv B46N32vp ON+,klG" 4"p & --dƴ.ₜ+B|ܝ,M t4T%DPe4~h "}3 --cRFo5R=7!@}'LJ^lq91$dkij,/#b͡\+mL-cC\T KJ+ih[:8yF u}wóY~@$/{@2D\\agRDޝ]M ufAO rwq036TWQVLj cw~O~46G< &khjeA+95 -]wG<~ ;@ /?̙vkPj^/xԣcCw;[*K s3ӀɆ#&kef0M#Le^]~eҌ_S7m\C"bRҳ9~cB"#k"-AP[c]U`?/Ws~bC߇}}}9xpL8~]%XUeҤ "XE)RDTQz&(v:v=u.q[- 3Nߟ컟KHU5tLͭl.n޾܏K<s?#+~SK{gw}3sga07; BM=]͍0K --r`_L&Aq`gmaflHfu?Ƿi}C,5/0(8,2&!lZ]S;}ɾ&,+bXKڔ*+HPQ23TU%SdW&3P$`!9M<*u/^\CH}cC3cC%R/k1EMqh@|ܜW\Ck8?>쳰Gf_FV^AIU]SGk"ܿr?~M]cs[GW/ɛg=c> C5@OR5eF'ܟ[| ߼kW/?}0 [v|xҲgN --=r`P@?; 3Vlʮj"kQ --'khje.^-P8F1tU3}񑁾œ+GSo!{+3#=-5e,i+pKc~`x[ --۶x89'OHrč۫bwL,憺ꊲ₼l.Џ8y<ND;k 3c=mMu%^VFrN!>nN> @+ --/36Рq9eSVPXLBFNAY][ܚ[DQmvozҲoVmbAB&FkU$֒Ï="'ZVҲ)-1\LP}Nn>t 1gdfmFO$ϥyEh+8-AS-űap --6PbX}|4OѾbR꿃':oL ^loi*/-JB?0=\mM t5Ԕ x4B_}+@i+B/3?߼ NVMJV^I j٣ã.T6v ߸u#߮݋wmq~ѡ겢̴䄘_/j*bY --YCo\{I&c;>V!xx[(Bg-_RQi)0^tw_ND8 tt^JN 9B0V'B"Bp)`"x>߷ψQv2|de%5Mm=cS k[}o_aaOIMK-(*mhjm߼ٟcw&W>BW*ySm͍u5e%yٙ׮ЏBt`? }Wg;K3C}-uU%y9 ?/Bo{>N5Rn-+ $".+hX:xYKe4]o?~ϟl k'ƞ> \ۇ\3)%Ąx8Xl용p+[ Bp<2x4K[ݞ{E^t )*![p~ypa^B#K(\|tĉc|,D,t5},l;88yw풔4tḼl]=P 9rl2̜’ʚΞ, @H~]>#7WC|tx 7+jjyPzw"Z[ik(2R}>^n>+ --72FS?OѰqm0fxaJP̚[;yE$$eU5Ӻ5Lҽ J2 '=BR\ԩ__Qfw?&]][0 CQYס{PP"ޤHEĶTTDݵM41{a=gE~s~/Wsc}mu͂\6Kr>c))$%JBKJ.(t\ --;qډoq[Bl<^3VpOGKCuyQ^f* 'hcab('a Q; --7C,,t_JFNAIUMC[~`q)P KʫjZ;{zGF&Lq>U d]!?P3ӓ.?7w 7+=УPy{9;Y[hSe$%wl'xy0@; 4QfOD\S`\stw)͞p> -cY>޿{ȶ0콟~ur`og[Sm%]gqsdKmJǸ0aQЉJM]C3+{go#!)9eU%4615¹p< --[85?tcfrf\WUZBp(`H"+y ?e>Ë#B"eU(Z:&f6v.@ ݏ>u?+w`h8 2_~}H>!W/п?z~x(?'3-%1~@(NVFjJ --r2RvBIDǻ@d>WEx0^fDYdN )YEum}cskϽC#bR2rʪ`819u!UgrYQ|"MMnoGdKd --vw25դ(KKB b:,xYЉ-',2&!53!:6>fa$1Yl8X[Ao=Nvlv&,(@!q떺"ao[xxq|~A!;%$+*kjZX:8zAr<" --~ZfN~Qi~sۙC2`+FSe,?-gOп216:2:V~A!Q1(:&l!ي+j[>{泯J}Yd --({IګTmm(:{8@>6c}mu;ID>HM}vIƉ!OZFdcji7 z#wĕ l=fő.8 --s2R#BX,DP;|87УY\e!ypx>"?,$M a_V^Qghlfamt IYMosS}}(/Ӡm UE9i)q1'Î9EH_WKCMEIA>0YPHxӠ=8}D6L6.>"bR3rʪ[:ΏMLܼ}w.vm4 v5Ud%E8v8wЊ1 -K6.lFD;HZ^ v^#)h.O]2eaUXcO}q I)jںFV6N@G~2&.1% bg=[l.wt_^Rq:9TtУA@wsv036T(+"m"|x --?N>nMHd6ye5-= m~A!@hsжA --,Зx@^0?3RH}^?{3Sc;F M MLTX nI ( ;Fb~P y5 teڭ;GCODFJHI/b̍[ Q&ZgTO,1:;n\DB 7+=5)>6*xH{]jkpn-Rnr)Rwiۥ"E.@A " U"fwݘ&~n莫'@U+JK1T --Y}n>ggz\ǨN Zi9y * M,lX>!1 eG+8l6mfmpv7PZngoOdgifg3g --D> dmr &Þ, --:!-%h]`%/K 3Ã\̌ t4Ԕ֯]-˔QHb+W|+?Njy|؇?_a./&N"ShtSZv<ںF;\=AbR3 *x"pރ<}5@L~O+.PY=7c1طgĸm!A>.N֛M t/'ÔQ)$ q$"0>̟[ycmK.Y!*N`hh3hKʏWpzkGw0˓ܦ^0܄mN7$nϞ{:Z656TVfF|27υ8hd> A..Ae-Sg_w@ q0U4| --7h.{;n^LɊޙhJ"C)8lGY}1} --.)%-#z Z:z&曭m]ܽ|B#%fd"bcf[GWoѱǀ}$$S3z\7:}aXn؞%Íh6!d :B&s|o3-Ⱦ&ɔYf_PXmGng_mGp{rV׷9moW;3N;|p?["-PWky9iB]!lރ --C>p>QaQQ32C(A;S ;йʣŅriβFsќ> ?Vnb>Ed*M_t_M]S[h?pKX`?%=3'`/`l?4|ebOVgW''z r~ܬԤ^vhiࢿf$J!KyKlQ ---x zҲ<|C"bS3s UTԝklvȃ8tPP=xxz ))ړ##9.*,9:y9): t[Nma0 q^IU!m=gWң'k]8߿{5{.?, EXKgg$G{9YDt ~I>!3!Id --ΐWn7465sdzx!G&$gfs7Z;{Jb!ߠt_lo@p֨Oi]؋ǘ죃y/ٍ?V}٘С%elޮ[-ךk d$FGm pe9Y[oT+JK14 --ρ"?[vuJi-m]=¢wȱ/O= ᭫woπ߄i|lyx_Anfj¶owg{k$jʄ"qۻ|pҐ :fߠؤ:zk{W6< OBOp7 \mj iYV546]miy06>*닗lu3n_n` aכy6-1624oo꿳 @p˖XP*kX0 KSTR~4Vnhb --:meO?$=?<݁Ѕڪ%Ѐ --e$+Y~*'?>}E}}q 2/-#}-=CcSsK;GȘ$Eʏ?/*, /͚AΊ(pt]ҫ4EPT+A{HQq92$}}~'gg?C/S$gh6?rTg0wn~uubl>~@ݚU>^.N+-L8T)ÐX&bX?c"qSPV341sr 3@%moCI=+EX-g:hZ>}B\gkcMEq^VZR{wDl -- Z`kiY(/+-%_HY7c+@Nn:*H ¡˜[Ӏ5 ?x --;Zˋ2S!=PWX.WWU@ h9| h"sut_E 뾾 --g7o߀~$9Uu]}gσ}$ʾ Qwoݸvy|}Mu%\o tsq05fS(D!)D?l }|gNCo"/6w7:7GW/դNHJ+.ih9s~p']^ufo7pPׯ^lܹys}ۚj+K --AkH]g%8SD}ZBp W sh@eUWC(&P EPy2X0d\WUVs*Q(@۷l Y”N) ez<~A>1/AĺL2`YZwr%~‰܂ΞsH{.XO ~3?wxbV073=91!f~`}5sDI, 7oV+-TQer}Oڐ[v;%i䳯_WkaE{ൈp9@1"{;Yik)+0$̛˧ DfP4uXl {J('P|bjfnQyuCK>} شNE; IC808ݝ0ɜSV :i[0a"}I)iY9yZ:zlcS +[{'w/wwHBbJzV^aieMCs^1[wSJd'!YяF3PQa<6<8pt{sCMeia^Vz --~, }W'֖f&l.*}&%/@âOB`4?xg 8jj ݽ#w;]PRYv!b'OaFV\C8Hn yJc|dxڨCxX2)q; '"(8)tt]~*@G%eW4L.N\q=i"<)W'F.A$ 5yYiI Gi}j_/Wu(?L --ݟŔ+(k[9b쯦{0XRJFv~QYUmckGw߹ FI%x(g\o}ͣ#.hm*+HI:w~1[_OGKS$"1y?c}´V i-Ⱦ$CFg`lfw ^KW\R_޾qmb@XРUl}RkyWdTյt '7/u·F0%ɇ [C(!đt4H$Ŀ[wA>t/ u_QYt_[e`dbni~c=~2TNAIyu=XRϙ?x4do 9BW3xBF5՟8T_]^\s*bwEhgkenjlG%fGIϜG<.RK8YD8Z#ZOUkC7n{(>153`pdWO} 1-qPA --<cCu5Vd<w z֭rbkVVF+⦈<%\Hzv+mپ+)r --˪Q$às<8'AChȕa"҂G  vwGO[CMYa)!9ՇDa~!/ŐaʁtXl31vG?"9-3,% "Rς+qO娺] Hϟjoi(-LK>xpmM YTIїY@}4џ9>^ň/_/f.UTY24E\rFNAiU]S;+؂.l5[ap溪B` ̸-͍ d 1~/DH\<|ֆC<հPG&!$kP.NOڊ,G;A'p5Th̥Gا龘HL٥ --4tmGS2`_:{Iٿ}IrcZD}Tͷ(sT\wgkc]UYQ^VzJb‘1wl H ۀ/ǔaH },y?gLi3э˘Ui(7AA:RzUPĂEEQQQ EpvQgv]1&hvSI?ߟOz[ a`52Dbf]I鎪c';/]݃C3̅쫿'GP ?F@Rp'Z[]}sqAnvZbL(0[sc]27f8:|-TQD%/ڰlgMD [-:oE nw- --Ӓb#B}\Y[Ój?D&WźO`t&}*WSohlfamKc_W~ciYeumCS;GR< m t7?} ȇ? ?2#L Ual.RgG[kKsSCmueYy2SDB}3}5K> }g12=1⦈vƬs*|z6nqB`\:ią sACmA --6ﯫY_N@Γ3lԟ9KOOۏtة3t@j?FGIe0޺~<*?k+PJM fA@<Rv&e 1( H|Ov靆 ?fY(4ݽsMŅ9YiIq"? } 3C}|u5> 'NB_O|f4q --4tt Ḽ/] --IL-(޴ֶb 'M}1 2{p˝gN;TjGiɺ59qQB?/7g{ SBmܜqDXwga ׮m9y| 1֍h)QaA+Z/ZT]~&?'SIݟYsAUT<"=&}B"bӳs׮+ٲ07{OBCAV՟@q߹qPCؾd}[1}QQVbגφDGwdt5*W@BΊ\PXt|Jjv^va\X}-l1`#m4* --n:3%>M9mMu>W(7g,p?,%P@ --A e kQ~z34A>ȡǞOuW/k?q}P J]AzZLn؞RuJʪ_ŀ}w/̜MP)$=ܘWDBɾdIq"(v]pVҍ Ve$DxS_.qUU@bb4RN'dAR[_}B=CS {g7/?ahd\r-e;kCcq(l6Kcgs{݆=rp훋 rRcE>.˗.236ۊ)J*?D1c70$"6 QspyH^Aæ>yMlS8ژNKx:-671Pq|CuϾ_}O` --f%N.޾,$ --Z/\~ y${߾ ؞TIq!*9p߽;WӪ_m59Qa.NKa xUe%EZg`DZ&/%c>P_!jr|EyliE! Q* 3gꠔFr[œ1Q~q3r`KwTgvdrO=WL OzgOx>Q}N?|A\}ÂWz8#OA8&o̺2o wtvX' IHXB~Kk[y ȍyGyb0<E\`aq{B+M~%"$<<lџo~2('v[@Cs"c3Kx NH\vj@c8C"s`8#PA :Ϝ)s(LɼodfiqPXt| --=FG1^ǣ`G?2/>hgLc FTh;LHgD'<9g741[' 84, ddrWn㈐Cw("8#`]h?2|򅳧OЪ_\q%@_>ͤcQOfcW^od --spv --Gr[䶦B'CRaԀ -- m;~[ o0̹وs8A}#GPycRrlQ}_W h{“/?w7|Ձ%1n>8wܦ>)Out721_%P B~9@$7f%f0@ӓI},.>3<#Awg%EzXon"}Z&EܞrS34[+ MJ+n --1ˍ;9'n鐰@'.޻u̠2R]mSqAnVjBtxpJKľ-ДaK}GW@CKGM'PQ@+ݎ7 (g:0>;LDŲH.\zA@Ă,`נ --P@ -- --jFEM dژ5}{nf=?y{0}:18c%D{9[j()ȡ3 X>o ݗ؇̚- ؗ#gM-Aܽg/1mhlF2ڃ/?y}A9wԉK/E`kenbBS)Ӣ?Ix'RsgILv춬Ԃ ;<5ԧ܀?%=0i=CNYi!|'9MT #} kQo~3f,fzxAO/>c"G}AOB~ 43f'A@1$O$'qt`:}}bڋ ,m\=}h_`IYyeM)l =!!>dqx>ww߸ --niAݽR`owvl6}џO݂+)i豌ͬzD',w)Bk2Xo!!:, z%)AT#,X<;=).24@ގtb@|a,m]<}â+1J1Z1nvc'joE@З@G[KS"m Յ u~%xOKa#cb_򡮩Z`bneEd?=k٪#3@{Y$nH<1'/: sύ5Ue;l* dociflH[ HQp?I~tQԟ>tlS:( !>~ԅ n=AdX싌@#߶݇vҌ@_!@0&ܼc+ --< B?+C}ON7IO'qsv'ABvOoݳPaO 'ؗmjam~b*2­?tBynL|gJysG+.@>oްnU.>:RhkenbdHGS:RџOΜ%;w*ZF&6!IiYyXw;960긓'tL8e%;6oX2gIjBtxb;+3c pDl"Ɲ9߿m<wnL e&Ąy9[#")ɓ3c"vE1?g|9H!l%e0ԟ --QΘ/8<J%eU D]?˷>QNF 'Hp>-xqݪeYi0S!qQcԧo>tD%ݳi+w>h,nX܋)Q_1#ē'Qinٳ̞%)aA@1t?ؗB؟Ba }yE$4) 5)ھ{A j~`?}j*Jwl٘<;#9>:<؟zȋ9LFA_$%~G}!WyEe5 1ȋNqXT|ʒ+֬/چB\I BPbP'*'v@ϝ9MyI! #}]-u-D{ނrw*'04*>9{r| --޸I=C>"m%_`G[KSEu!(< =>>}e- ʪ`XA &n۵-º^tz[G[yG13̘\}xrVp(ÕGཚu DboU_GS]e"LVY_PП/%:"Ǐ:eH2y,1u>qHp؉X]ZA]`E7PeX`?|apQN^4#9.*4b:L}ϧ;eBPj.Pħ`0(,gϗs5m\1$I?Ƽ4mL^=gOsՓ '6", V/!|bu}p$ٹ.*j;yEoڲsO顊ZfIT? e*3@#ᮎW.]8{dݱཚçZJH^2ODD'MpTA^L`:yDb]n㖝ťVq|!~ --0zAyp]7ۮo_45V|h9KRÂ@PL,L}E0Nx=PhCcsk;ge".q\"޿!4x kWdy.276IRSVC$fH `_Dds."&.XbҲ &Dʫj_|&a7PQrE --#1QnV8n9J\r^ -- rs@R\3/ PGrt},2_̒Cd_˾3$8"&!5 --h}T?uQs07(C\zsݝ7^n?Tյsb FNKDMPT7t{ػtAQ#F D H"B8ܹZk8&sO}D\̰W],gcu! cDϺ^,e:Nls k<|mޱQ:D]7;NPHR>rٓj*Ko^taЃL ' 9 գo4$ov|`!OsveY14&/;#9>*<8=78Y-; ,I[ --'{'h;p-5$tX --rr2 8<*T؄7!sO2ea匔`0`.W{\xv1*HӇ }Kqd'P$/c&3srqua `+npો((Ѯ$)@4pP '  --\3!Puy8s!bR/ ֶ>k6y~kЛ~~; @mAwQ_zO"{&-#a[hm * ؄ҳr0EP;4 JNfjbLd۹e/$EL u%<2K c_N'J*&|7ESh --wQaNP`aInKzܽʘ pc=>d2K˶k}WllT_R}Hy^݁?vQa#9nD}{N8*wi *$~`jl2߯Kˣ>3Ee|p8٠ϋ~pa\c6;i~&/%!}~G do?? p]""+T^Dz?@]C[h9-m`=8s9/i --EQ_XJPis9aת:Z.;kep"  _︣qu]-bu]yGOGDǧdVY:4Hy%'0 omy_,|xB$Y,A --QYGE瘚Вஷw>4N1W,sA1d.X^?g(ʴCT_NNRbe8b.;X}G%܁uDrEywռ丨 Ļ0 WXdk)ʄqcTPR!AA9@Q>H%,]\=|6/$":!ʫp.8y} --YIqÂǹ)%dI/+Ȩ/'}FA!lBk ? ,l}\|B A^tYNj,g.%g]~U nG`C]6&UӃ'*"4 PG!__W {?y0t81j'O3BԷuZ{FD}JxT\rz6JY%>$,a_}ܗ@qP٫aqn{f93M Ǩ(aէԅN?dOrd܅eF.SkdXLs9YO@ Ev(3SC])Mޝ\7h#UƨM8~_Q_F*`k{dA`S6K/ G}Rdb_LM};} o6Dt5qUE!'2KqxS{|ؤ+E5w~yY}cӫ7-mb.O,≲"\ϭ,NO --)!. ԗtRe볲svqDOHDtB%2xʫj-@>Ft {hR(_Pan~> zȺ"`#qTгl"%,$}I\YTʱ$JhwbnB񃻵%7]ιs!$Ա{wl^l t4'K2'~yGeqfadn`,M"X. *"6PޤI$%X --**)Rj4%qf7q}ygCDw;3bO((akY8,Y_~KJ-P\z>"b>$R>ޝ[M5W.gg$DE۵mӺ+ܜ,7g.'OoH}p#cL5`|SskeAkoގvp"6)53AmC3\t;x)`t bb7$k aE}gHt^=a~q XP?NꨔuGԧOs_CPq%(?'# csyƳ t"V)p>]Y *Wޙsx(6!uv?xGbQ_ --"/V8#L"Ő' --w2hhOg9|'NQ!gN'ԝ;7ه/B0s؆ȰR0| X~BkZ@+G%h'/bs/q=Yg|M|Jo Н[7dg)ސ?;.Fw߫ ʹPYG9wiZ3[ou NHI+t UֶnTY>]m-;PO[2^IA gV ; --QV0/08:|ǣTTss#@}{w߽Z à ad$ngBTT ́@5 c2s .\zO}Em?QCrK<.E$ b6߆l 6tj@*!ve7[JT<M%]!Ay>ZS&;Vvn^lڶk_xdTLbJFv>;5ͷki&FYv:[v_(mܶ3woH?t8\XXt f͙gjneDS~q5..b0 Y7ܗD}#?u&]|<\l(!D̊.2 :Te%8<deL3]yjx a%Tâ쌔Ę}mZzE՜6EU nW L|[wv.GĘᰀ{;[7e0]K (?0rCePD0EIJ/\L,]ا/Aoo8D=Tt  O(#T2<^ĒnhXDTLtn޾H~Ce .^C 9z󡧫HQǫ}Ve`#?c߽vyx m0i;TiGL}~٩@g//;=%!*;gHG$b@/] O& --P) }}1KSawuo=vVB}oeE$bntmPxXGdbK['WO[w=xxt|rzV^Œu]hǨ] ^ww7j]| 73- e7ы”DQ{4^eތs-qtYj-Nş>soJʾ}ġO//e% eI?u;lXv&F:j'3JVH? CBԂ2S K|6Dԧ>` --_ --SS8n솢4  Xj:z\{T=O+@^ST7 --pq0[0w =m uC^Jx>ۇCG' @go#}v:t^v/xkX) @J --?!2/9<` 2ԂodB'~LbjEʚzD}Ob곰a4+v}B}JQvKM=NSJJ`XQW^IYeTu3f7vX/o޾{'c2sy idQ^cwwo6U㬛Mn'鰩7Q Y͓а켢KWʉQzC M}vHbrέ/9/LJZ]JI렫''Nt^gz E}5P l GQ/*.-Q ) }}B_{y ?QoEM?%>gߑK.)Gk+#dS҃uLc~eݬZ;;tę ޾!Qq)~fNAqjc~o?;{y!7䄘Ȱ ϝ8mV[ksu/F~lX^hzL69=x^Q )gm_}XƺW9$Fz_8s}6kV=i8$D}:{^FD3ũOF7bMC7[l4$W/.cS2x"=3=e5-=k;'{WG o]!3!׊ b#Ãz?};Yo2٠zEj|5o3y#&XMK'ԣGHo(i ǔ᨟OMGO1R5ţaiެv?wY8j,Yjmn{xx:w?(V̝䴇O2򊞿,mhbԧ{rz`~ݖW/ >)qQiM.510ROSG\c ތOJ5~ָ?8ץ(/ ]:w܂KLJtm27//R%\ԗoř~=<.($TO>־_(cTƸ0R#Bh]m6RمJnOT%d'2r3f]PUCgkYmqtٹ{c' --/Hk_Ġ@_uN^rH}Ѧ]I+U4qFfL8k.($ݻ?^twtqbif~e5T.;KiR_FH㗈mԟ="ԏ/~QVQ]odKϸωc>daHn^v6."E8z{>'ܛPN __RYS߈nV8Y>'fy.@pYJ --ߴdLD=[l%\:fVԥs}dåQhPzC@g?y?4?'E_b%J}PB/]AoR> ѲyoaKW$$}^ܗvadeKOq0v&H}PVR_ I՗\qǃ<9Z1|jh6l#;~/&nzFv~o+D}, ȇonKA䄘ȰkW/;GƖ;2z --nD7dc<D1wuuu --Bs[~Bl$VcPeOt%XBԟ4y --V_nҬ hh/^rz#3-.;w?|$8Ӭ’(4uvO))ȅAjb\TDH3'locajj)=oLE"NU?a'"erZ~FhfzF^:P_ROo 㕋gO;N-fFºhkIa9yZ}?F̜|*ͭm~v,B|}T; L7upd,ɠ~X> --/f1V6X6x"LT1)rDZOȧSQIv '@1yw`8=Ro]~aF#5}9(f>SP5g>s$_Żq^![B}^R\tDHֵUuf]!iP(:cZ9_ ;q~uE %'Ā>[@}:c6i_Qޝԗ%󮚖.LCGO>rQz&Z*0Xwb眇}=x[P}^]7D^ujfއ"^<֝706u瀇'v+Nr'ٰeյ ͌xRT3RJblTxHu83G:s'FQA_gaQ\Yy EDUeqCT\PDw&F\ЀTQ@DDPp"4K7Mݸ"J'#sj&/}sV_oAcPㄏ7 2Cz~9߹qS{ Ƙ7WǓ --&ədo~GN --^b[wK8rag<Q`[9))!.6fuW, <*0`P??oeץZ˻XTRV)WZ=}>#cJ|^tZ[#k[v|(ެXR}Tn0.>Y9jfOށ>_0q67/("Sz:b`-}F=}Xú/aBq"f0ٽVkwۺC;g~A#H+39+ٕ#/޻\r[Ή.,_6ݹ}]lQQ>~\Tku#zh"j454d?'O>F6@ߢ8s|~Zh~>W&Inզ-Vխa#M1kޢ8[>v2#+'EFoտh൏>>TVUJ%Bs)IT]0H3}V{洅3=R ģƎ?6 <L6JP?Gs?~jRvbgRw֣CQE2~E^c: _V",wsgOM߷kkV.]0wbxxhڐCΡ&:{tSY9y݃xwi\O4."9sıCmY8H>h[:@ bR], EiZa ~!ȇ#*F)Gqc~3Oެ-N/b:GslRߛPߴeu5e_>>MwxcbggkP":V9MDdaNTh C^w{Bw+gٌdrrS,*EWV_WγdoQ:r;`܍δ-и;E+堾R #_g#rT2\3o}[} V_5YYetrɮ~s><ʭ`(Q7( pTpȨ%+V۸-fo\B/biZ5`@WxfBu:v9y@tuƑG^ W찋{ݿ?`ȰA!F̞P{~Hr鳹޸sX\ --Ƒ6fuW,>)49~-?ȱue۹ꗖWJ7:$+**/A~v2 >Ķ8mG酜L[շ}1c yx8rLHnغ_y1~^s"/043Dwn\{tj_@gGL4bؐ޵ mVc){1&a>wsg~_ֲX}}>t# q{wnݰoGG 320``_?/{mg$'A}qiY E||$~YTZZZBViT --Wdaߖaꗈy B}:iyzۺ,8%bEˉȻYW.(*ވԯ# t4}I-~iLG͘BQ -->sG9^~a#'lHn7 --$*ZgxioW}ÊHbH7HM>3*7ꧤgBN --@ --Y B10/"bOOq׶6 Q!տw弜3NM՟9 ߬WQ0wpl֩K==}:| S"̎:vԙn+~>֯E~\I@tjeUT"({K3Rbcm\zŒHȼ)ro;LQ'M`57hϜ.Jp:﷫hjE}{YPD8ywlU͛1e¸Cգ[Nn.qeeYzױ% -->|| / --bP$F! 3+2va_W*deΤ1&Ṉ̃]}ۖ0-[nR H}xO6s.r<[yPoi@2M<59X>oR}}/\F}Q^Oد]E߰g]"dDCdDZlܙ'O;z٣[n_8wtmV-mQVV_T"-R >⢢d (*EJf-}>dz6~GEu_q?MUYh1  ---6j*(, ťj&uD}X`fMDvU{ofIsϹ^YJV?wjwu7{ y\.*>9=+7_,Wݮ --wO~?>=vvW;k׬Za[Y#S[~ǦNTBy+nЈD :PA[GWwK};>7/+=%^,-mk@ BUg"XZVI}>Jwk#B>YAQ1?yڻհ}/^66/?tq[}ρ#ǃ^r-<2%NAHohnE=!F_~VEV,xl|􉣇;TGm?ԟoYZ/ZӶ;y|հؤT&-J Mݗ8!={ --w~r~ųAei!D$? ֐kPꯥQPTZVЮQ*dB~r 1J# wWdB}d^.ZJrH}]f/9:y]?5WB|@/&F]O;M>NKmm-L@}C}]D>ml>m2h چǎh=vIj>N5ӻnnKDE̴k/ :~^ne1eN.V}MրTNqɩLV_R*>_Ws8lv.6} $0 --W VdP ŋ뫃C W[oW}G6z\=} wzC#b`x _Ԃy,W%mJ4TCc<ݜX*FmXH}Ssꉳr --eDR~cݠ¡u[Gt:_OWg~]aT? _ ԯB5(c+dR|L>a#E);P''a G+O;Z)GřP_>תRQyq'L'O՟ϙkfaecnz)͘FFvTVqUWR.Vz"̴8ؐar"N+]WxZacX+W{[yރ_|u7W/.CȮ[}XW/)oiG%X}FbLDh\8'ڷkFpX3z km Bs --"1E_^&|A|VvVVf&WffVv6+'G Oʕم&-ʰ?'W~|A>=y9@Z5Yt0+כ!eZ{4ؿoo --U 'b4:ϝꋃ{wl^r9V͜n՟3z;4'drW˯q7RֽSW4QӠ>4]!+-)eg0bn|?߹egZf --%XYEOӟ*_mDX# Pդ2TXR$㘏dfYy}e --a:: UԏDˏjfb/Z5_},O Gޠ!F'+Wݮ --uHS_`# `10=%!o1y]j Oӛ:'Q@Mﮩop#WxN +,*kCjRQ7/iqS#NѲhE5X7(Կr= >_}V" -- l@~zZj*#%%WJ --#5 7{ v>!'WoX՗'EQ'շ --Jh3f665__}ρ#ǃ^|-<2.)-3SP$``@4|}t;p쭩@ys|4CU:7/1 -- ,llحpZwCB#bL'*kM_HH'*AǏ Sw~p aدBA_~!ρ)ONJLL +11)9gfr7ߩHJ}<]XY:ZkiA:K]=}6m۽g._ Õ%ģG66Oz:u5Օebf11!Ο>qо][7~i^s3f0QF#'"u &fH}ܴ?45,5 O6s?]A= --JH(!l rsq\775=k.VX#w QSX}G,P_T"Ke}p}H> 9?#-+66.>g9 ȣNm]}csmݔT' .2M235)+Wc{kT$ .e`wcy}^}/`nM --9,478?zȑCUӞ:Gg7xOkaz A?;'&DGEEFF@EFFEE}&_AMi;;+j*z}^ -- -- --Ulm-@ I#C-Ze;$rpHwvy}%mrq?? ˭$fg0jvӴߣ -- J3"j4|u48tir %28yⲪzISk{g7?SS_G{P%t?)ଙ.h%/0B'syE5BWy,UvrCK5_FeO3B_B_~SSXLf2&F%=}jeSu_ZWէ?t`=q-Ro-꿇՟WrGS?@sMHiw(J Dfz_$2~/Hjr#Ӌo5\vZ2J twsurF[Za'{oنAf,ltA7SgAfZV.oniDfT>ס'swg{kSc}mUY bТÃ.~5ޕxWPC2'ѐz'e&>%#}=Fx:ȟ3|biSKۍNrgږo2ԇ 'y3UY՟{ MWDuprus#fv.jEP,@c\8pFSŘf)Ύv6App53]}}P_q(78(<:.  rLInnCgM'GdKʰ2T(VA0?NRcPq4zr?-#+;_QU#H[;(DIW\k՚HR6՟yLsL-V^y}.GO~IOJ7HwܼG --<ͺKma$H}_?JpP}#M N'7k aWع{CN)y%@7`'>Qt,]T_*Cy" AB^.;-?_o/O8ol͢E}ZA K~|n.ɌxZ,5&:BPcF2+5/)kh\'}ȡORU7O}yjUlz֨?S@145_jݦ-;vwg01|L`Cc3"PHj\? #o<}Ľ;w /]Lf" 419OF*tZ,'<""2*ܧ'&R|9ԉҦ6epR}"/^/5W,ʦZA}gGjD`՟?gE/+'(.zD}C>%ׅ~scR ?;3|G޹c˦uO?>[ OڅΛ&FysG>i״V^\/LI/<~e]V[7͙ //֫?ťU5u>OFH#GE?M    DS}njyU^B.< iWM!|PIRwV^7?*q68c 皐lcQ"AaQqtWP\KZ;SS_5xc4[] 7_H}@0P8 TS-34slP?Ydjb[l8qESɩV_,miy[r(spݤu; --/֏յBQb'Я CGAW/ G `ܵZV;yG$/7>cron/V_&E|nV:3!vX}7Wf^z'a41be+ltΞ;LJ+kDP9@۽w`R}iWHm-R1RNMS# <ݏ8ںOp nəyc%RՍP/089/˰cX](W --M 8DZtxPksg׮Zt5u]gRꗃu"(hEu~~^HrR@@%?$,-g?+'_XRVY]G.z>_բ򍩯e5H4PJVV( $Ǚ0H}k;gW7u @~|f* |6 !9wz2Se%ө@?_o$o%9ٯ4sd TDcA1T[r&bl"" "{ ,/KG1 W, ⚙3|3iǬ.ܣiv"URUYq>5=9 Hz:ZjHJo\d|qa96\U5 fX_SUQF+ϡ{yzA{xzG'fd{58B?0O,|TӐ=ww]sFY5uUPنCO7(<&1-+?D/+]ǓG''WIn YM\r:5-ۃAR1Nz+P UkUx4VUZ/zO,;m @V\KL' --\]q~A,ťtvؿuD=( --Y}([OIlDbF&6iR}qjj RRҟSP&W=sДbE'f>L(oཞ@M#^]$VNh)nWR sZ/w@hT\r!a=}ƭ>ϦM? q9lX*fE:P混1-M u5Ғ¼Y~|LdX}o0 >:qBHD d՟<å. R/*R_5N}gy $$/]&%z-[wf>#NpԏOɼZPBofv?z Q+!Vzw_U^OHm, t4~PU"_ї_yH}hxawr5L ;z'o_7WHgO<v4Tf&Ƅz8QLVe"E"Zژ-k*hE9I(xyv66v྇i?.1%=;'wg1U'dQfNZx'$_AO D}㹢/ޝ{SE_'(տw)Q,ϟ9qUi v˖,|'4 A͝|s )94onFݹœԄ@B} gf׸UY"R_'fR --Aj> --m`>hnl,/-.ȥf%'F軻v6VVJ/械_ڏ/1 S}`8>1ʛE},#Y^IϳHd\r5PGaV ;Z\>#;A}4:H}d3745TJ --sS#Bm(,)Vֶa1 Y(WT71ڻ`?ix/xYǛ>8f'>(~ϙUX}E_~GO蝻ddnN+.mdCญ&P̉'P웉/ I --Pа/%:Y9PaYR}ߠԬ --P ԿuO,Ǧۦjm~9t#orꗔUT76L~sc}-''DNv6V s33S(33s ~HxT\b*T6(ŞE\/?ʥ>{u/e9syh6lWT8tsYٻxG&ebGf htxigq]t9R&9BCu^d eV@m]d(ڔ >}zwGkS]Uyq>5#9.2ol$kKIJ_f>~.G}F+ }+JзXA[{Fģ_эwo`'OW`gu9?Z]R@~#jJ* --ξSd_~'X:̮\<{\m* --r6#_`vFS]eYq5= `mntI_a}vUEdB®R G`45UW9Q?"4֚bafjlt#cS3 5~&{/kX'AL RHQ PP̾2r --ʄںg/R=@ԬBV& RwW382տh,-NKtG;uH*XURA>/V9|6Fְ!IԼbBk7n?&mt[՟2n]PܩG؃WQv ;G)fCf>GrDl"x9oaf_6ep7m]ܽpOHNφ7˫黉G|>oHG_<?pMPPM]0̼X;{ML-,q%Ɲ R}";bD[_by9 עRlW赿8i?Im=RB25o> --BAVڪĸP\=8|s3s>z(*aQ )yPAw \g!lA}/˲L @ˁW~ ojRm ΜM`0˫!y=pepOQv@}`֮RZDli?P__vڦm_CoaU?-+Pس;82g'9d^+Ɍ$ԯolBw`7d1sғbCPwsur|SSpطsp&~phD٤܂^k'A8k哾e9Hz9X}y%:[v=CSaOHlfQyUʼgWⲃo*N --Am3R_CШ8P?ԇrJrjyH^6ׯ\6)ˆ&F6Z+K --SqwZ1[Pl]P?~&Ϝbؽ֎ ãPn V>ī/&˲0r --X 7{4XP8ʪ}X}:8 ^X[YVGpu&W3Aϐ+Vku E"qUܟ AWJS'yqhݽkVu"9~4C4Fb귵4(+.HM8|U}{[>1op*,*6!`˳gW.qw>y#'AnWƒl'K2;O7]*ˊҒ8[jk6 (ȳ՟?'~JǑMd xQ?sUH>Vߖjj߲QE˕˗*cp6E(R髟VTWfPUZ{&<$1o\i0}K5*~'C#cӳ --K+jۻz8K}h]5HrD߿!*,FW۴ ߯}Ȁbamx:-,}Ł﯎ݺsbǏHKU~v:R?aGKC{ݹ} BRϦ>w9yE-H}zTzPGĪ/cˋ٠0TSC{ᱠ>~,GY2;PKHv~KscC]M%v*)O15|A#d qBl-VW_fDWݴ M1"IH-F߾{R__%_}S ص{)ZhP,fUcF\9>q<~ŵ/?v_ԗHN6+K --1'|TLcG;oDDk76/O!F{?zu&ρPտ?1~KC_'[޹cg}?__Pg>8On&\,X"#Q⁀5bl_Pޑ"E" HtDPbD,oxcxwIO˙L}.,BVff>Wcm@}Lc9%>zl-a?"Ѣ =B"~|LDH˴aia,aS_{3s K*w 귟oki>]_s07+3=%1>6*<$0>b}Ј lieMs6\U`B}vKMׅmjDD6t6_,! 6k0!R!5R"XS KO>,:Tzǚ(=T?ƠҢ 2o9S_U^q8qt8RIeةY]=L-MHₜiD r8|.d0 & {K8t8x|܅7H+ɡ~tJ --}h R][/^Zך=}տ5wbG[scmeIaDgm&+/SXO*+谑m+U[6rT}(NEYRwu/`ηmj,+9t`_tdO7T9l&OL6 rtq rv ԿVW3Qap]!R}].Zw( ;uVB%ˌLi, MHJ.@}{杻x+9QK£ӵ>q(@6o\gj+6[_/JN=yj– eOEEu-YzoEȁcokmu>u' ʫf"?צ~9BҢcGJ puCg`>3Xl._(vv`Jzfv~qyu2BF=߂ --C2 A}9f*0Z76[a4&OC}LPRJ%Q¯A+:J )  w 5_nbf?n&jƫ~mV]~RLCmUEɼ)Q{B}\\6Amm}::%^~A!wO<>qJdT; LP+o>?("GHBk;W&S?\H}$/UK*$0loXá?gRFw[[ȷUcP;P1V@͍5%2=\|}WZPDTLLZ%>nbb|pf`qBG7/ԣYyp{N:ŭ*; yL.Z3#Y%c_[KWoɈW/ AxtE햠)B}P_`aI5r15&EԿnomn()LKJ E<Pi;қ>UgB귶49U^\u4-Ȱ>>ԧ}(,O vv p(5#+dF~MCA 'fw4Na =$NH8_""m8υQwz\SxwH݅\# ԷFꯙN1Boڊ }dW7K*?=X|J}hGxOvd,U,ocƧ~9Rw)_ Ie3Qշc>s9z c<[XZY}ԿRo-nS}uy1/arA3__D/giuke"sH+Fz}S}KWnB?|TO<(RHg:ie@áeYﰴذpq P_7\،P@؄LPK^_ժ?ROm $T}!IF!':(G⼙ IԿ7!ˊ rg&.q:pqP\P_ߍ_C}2fDzH|6f-׭^E5gTby֕}mjHH$շg;%2spWf-te@}5W --5(#RhjlbC9ȢS͘9cykh,E~vAqEMbzJ.+K6G?~p=U77cT_{8 --PU}kT /t##c+W_m тi&.ךqсcokbjgϞ9Daӕ}-%H#,_ib_~eCg t&CɃ+SI}ž^}UB}/-ѠS6~*~nn֬klkDQlD^bfa)*1A b,A,X")"VDcGQ1Gf0#w2O%.YN>mG7_\UqWet:YukY#eݕ¨]~ --L蛚"RVF1ەc[&P?",4xƙ\=>bIJiB=p(KBP(s~M|B Txg{8+mdf3A# ȝDOu<5y*|pTQT --rҒA5+-Y8odD9~.J[P) }\ttF1yc1{ȁy3R6ZF̜ds׳;3b4OX -Xt9)B6yU&bS6U?k8ԷG4N~gs9k=~BߥSs2ӒyYYNb؉SgJgwN;7|e5BǜeHeEF}{KPr'Q_*gꛌ4M;E%KJ؝O/tWƩU_Y~/qMH9 -- ;Tl FRTO6t~_/wD"!K-Q}wo9A!ظ[▟=ęѫ"`_4'y+S*}O!m?;Q+7"ϒʕN~`ȢU1~zvna'o@?T U,|PsQV8w$zZWO74&kneK~s|Rj&_rտ|MFgԯ~RodMrǩ`ke.TyP?kg4AN_z9;K@}sT݋N}h\ݩ{-9I]Caq '+=%!6&z@_t<[N2a(C'5W]he_u NmIA O9ys'g0W1{oO~] oԲ0#,`c^V}^~ɩ9EK>[^߹{UuoIkKhX#DTټ}dշsp/$od4.m4xV;}[7eꨰΚ1u#H{C싹n~Zwf4r̄)MvDK\aKBJw7Q}j QOg|f*Ӏnݚॸ:vZ{{Ma{AyKQ4Pk娚Qߛ+c6boci^5iU#GsVgj2QeeD32U?,{T?ը{׮TUq _gNg܅{9)2 xקeSTU;Uߐoapt,Ӳr --PYIxheC1?'35WAae!Tg]4G}j_ԗ6JO;v#TFFa0N}q9Z~Jfaτ,dVTӳs?\Žw?]p䏇!xYlɢ4&O3h8$n.²kc/P3 %3فw)Qk|h㮚jwMU-!_|A՟:qPNe4%GNWS6Y}M/3Y~4xM* 5 -- L4\ݫPkoT/PCc>^аQ~j"Tly%UUUsԿGկdav6p9btO0DI_yv`ȢUDtP5;F_<#ݨpO퉼>JlȨÉ"]pCZ$ъˉ/W;y*} g]+Ξ" 54x.\H[?pu[:x%9v --ԿV{5è*QC гUrS_zÍF@}'NXP;,πŠ~ؘhN}'C~Ƭ%Oݸ_xӪe_C}.5շo@_,vP116Z=\ _ .0 ~ˎ ӟVdܤ$斶אX ؝G//7>7o6RWLeCP _Lwb@PZ"Ũ?vr;'w^;V}AkC sŰRp|@kyԜ?cQ\*P?4֥s5w7oWFjRf(lctuPXc'3166~O(Rgrݦn"BUOhP9;2vEK9ZT[VߛVg E?~Sɧ>5{aG#j@귿m>{EWQ9}HB\LԶ𰐠K;;XBx(/'xqcF"ʲ/Ű CvNn>!Zwܼ~BB[r"(5GR.a,z^yѮCQ-_r2~3"<,8 >P_UFt/rsoB}"Ϟ袡eg&H<' _j+}s*M(Z|,5oX:]b[C^``Hb?ˤꬾMI.y[[gCOV Oaq3O&rՇ@/2cWQC)9bXghL#J= @}3Pߪ'*kD>GlzF\4.l/dA9ȭBW,e)25*ƎA}!,"~K"h@}/Re_hHRŶ ԿDޠ|Z}ez_z66o_ ፌCf~~nVpnZ}PdCK]EQ:Pw~y~2V?jۦuX}}dsS1GgW???8[Nڥ 'cu˩o6o6}]mMu%b?sMl]0?E=dbc"nUƳ )e*n4V}yP>VǏ̜<=ZJ}gGR"R\Tp%/73 U߯Rw';WߞPɊW>h*袩"Sy.dn:+̩cGDm B}83gLhAM@XXE2ݨ?AFEo {2?㩳9=V1PWo"~BW}w'Nꋓa7K+*[/cTJַ}U > \}<-`O}VQ|Щ׶V*݂:U&~O-vDٷ23c4}d UIr2a hn,"ި?o  ع'T?Z~}F )Hs2S@C>WA6A{n{R?-3Pѓ.~#ՇbD홗CO 껃Ԟʴۓ~G~n˫(e% CeL^/-M24 }Fe# 9 3?u>j8ں>Ұw>R}\{LC>Z;8%?H_PG߻ͯ&/Ǝpg6TNP_&S[Sy5Ye?h7d9Zj*J --e'qx:? /WTQ[Q{2O7!Cx_\T@cW/Xh7d,C)ړU'0ARB8˾룖eoGGM"9-37ixie_DP Կ|^O@BU/!7iceHG`e3٧էnmnO<+r[xXȚUz;;Z̙9cXCYwGM0?JƭP??U?p9`՟BIOcƊKBxU4 g5qt\PGR%ں޳`7cT_@cm=U)QQ6 eY$}ࠕK`C'{K3c>˾f_e_DG#G170mlamU?.OBwBS?~ΈྪOI9?NP?)>oZ~}?>!U%VV.ԧ>`!Tٿe?}1Q> -M6>Uؗet$e5PoN:2WꟻSq{<UP|V:'o)LGo --b/H`Q^5R=!/QFo߼!$PߖR_UU>]nvA}t՝~sϞ>~`|ȭB֬^ڂd_GKCMEQa"bٯ(<T%kU5J6&j[( -- --*\5A]edSA@A肕{fgz.kUoľ"E}]́ꇑ7^RPW|!PIifi*%@YXxM?r'T?B1/DҢӓFjO2 ) 4눱̈ -- \O8:9hckɖkW-[5d2b_tl=L-P$¢bRnC1CHۑןq8y[t"_ʮ)~Y}Lu iԇ쿣'Uf[351ndXpM/KXIGYY05ټcw (5I}?ńmT'~zRRP}Kө.\ԏe0 Hۃs(:UK W?dOQWPTQR~i R{`&$ľ"Y}!TBzB}{1hnO!;O(foo kbGCK9$:@f'5uR>yҌ:nU90?~zJ½>^twsu>p䠭۷BW 5q%~zշ؎P՟W+Y}A,!$?oά_aï)|9>w0`S /;3-(|A];VXNXk*#CCk[Q*I}N),LPd釩o@ɩ߇r9T振uEWI+&P9oZrbO>zcw|c]Z\ >3%o{*` Jo"_LWu=oBzL~$ n?r[b W)5ǀcB~ --Vũp^Ɠ2dw7"$H}:K^_O76[j#.{\Tp/&2,Tvsg\N]쳲?{7ٟ ʉLg7!""_"l%C~aR )'ދ߸ ԧ^x܀znuUa^vfZrB\LDXp --? ?M/?(TYUV *I]:ڙy!5>-4m͍uܪ --viqܬ$F\tDhPMPN?vo+ ľ"EIS/1\W$}mPT('0 iԇ-O y1Oq2}fj#6:<4` Do_ȫ:\};WOaFITۯ> --݋QSG;L'?uD[(=H}z)c0yqkk*9e --s3ScCoxy\rwsطۿgξ9}uE1m45Pcc>\}=E@ T嫟꿓Z>Ox/y}ྟ67s+9Qw ހ_\O:9 _Wgd?G!|JUp@a"ӫF3>x$"KRUiAK`4 y}=q+جG3X@ޞT-MjEOoF>=ۓ>P^+Q}vi_FU_\.'^6/A}~?xOZUR{1ޞW.r0؇#ߤR2?<_l|=%R_AKbSAbwTK eg%'Dv}[=}%D!IlfJE}MJfŲEH}-R_Λ>8d |d" ?"6q5~\B*AKc}8qC~i[k3c> W o-ξ,?B74Wr?gSc?^nľ=wucꗳJ"o/2ԟ;Q64#GRr?0};;pYT?Ъ5eM-CWDk4H} eg_ǭ 9!/Kf_HƍZGw#8H}IaB_t65гvIG+-үAKR q}~UU`?>6:\2A+12A>6E&_ۋ?D8ľrGHR_2|S_Q\y/w"'tT((@AXDXY16+b![&crzKN{3fwvvv-?>o_'a}͇LrLi՗ >ag4bb3~,QK,D}y3S_}[c_K?]~2  ‡W/D} Q_%%a;?ɾsgq`M,Tw#k)&!}t/@D=D}mUE/baE}# --TonLM6R0쬵&_pKὂz>RѱC쏖e_ELXRAWBWXͺQ?"$8Wq{CW+?~w)s??Q~~O6;H7$AWjZRQQ_Bٿ%Q)eOSȾLW1F --gL3'˪+mX1_/햻D;7o`~fO$sodG(Շ5&~ϰ>PTL5R7%oA׫aWv쟓[b& bn\췒e_󇈎g+T_%cqm`~NV* oc:VF?9FaQ1RR^}X --M$YT{}R,?~w?oC+X37!i# --dW 8Ԑ+6HQ|՗X`O V[Eb?v_ _ٟBЯOxm0*D5Y?$?AgWHjf6~0?Ú@n\k|S#~:P?'!kM o 7g*QǬ|z }onv}3Sp" cOP@i_lT$~? V,q_N+ꃚY) $k3D}JXa}}~)}qkfQ+~28~(R?֜4u_ --Zz5\+ҚD}} --Q_7S쟒_i=dт™S'c;Wpd#`D~Vu=7nt_/- 72OWCN=B{9b S_35IQ_E|3AGCߝb߹sGG{[ 'ǾV*T\}#x0G0 )Y[U_iHQ_sGzDGR'a_BomeanjWZ --rliMOL_.QMDK{Ce߸bb *M}c#R?ߟR4__|3#ϟ]7PߞX>kV?]uWM gN?ZSS?wTvF*TOXOZvD}/,fEMgBES|<ݺv`g7;AoH;}%~H~P\@lRN!{RϞ;v`C#0=\o --f_\߮% Jܓ =ׯk(.*?R?N'Q_!k+z&0oR!q wٷ473)ɱ?L !PߣCpߠ;SNJgp >TkPS_PKO wwuԷ_U}rSSQ&$Nկ:xb\u ?W~][ % 7;zDVfZrB@?onr07ˏ}PRO(?x8O(x͗/PڹtZLTOkjfwvED/E;}X7'XgVMS#RT3ĸLm&@vD}m pfeɒfO;:'+#-)a}{ --ط0>9UR|CqTN=N1yr&՗_h07q ~w;Ohd/Mw7FFٿx d;+ʶlR_%gXFjR"_/w7.)dmiQ[c_׳PޱC9ۀ@oC/7kI~^SZ^+wVМ@/]8wSӠ0aO4ިg+$†A?YY-`bx%EsgMϟ2zؘȈОA"Ow׮V@VjPnP(PO5o@CZ.|?|`/C19PA6L4T^~Te?ī}:w]Zy5Bn. %*KɑH7QhNL!J٘dvp]{e{߽oN;ݵ}}O>V5a9;Y1`.4 gCYڹm:KiSSV=sǏ3>LO5=Z!!=Rn]SoPOx?b1RnEYI傜 ]ԟ1u2X1ꋙ}|67Tc S 8t`׎-n.k-LY/Z8_]Eqа? TOGϖU^|3YB6PVͫϞvbkE';3A}EU >i=~t\rZv>RV_|HBP?䠏6P?_MhRr{(f7\[V\z0/+BblݻsfwWg5Ɔ+i/֜ /#%$̻z1r cR2s aʸ՛0z٣חx --Կ}jQ~VZR?!v@Zu.&?9|q|ݑ[X"Ud~˫kFKJ܌P?<$=orْElP"6P у{̴䄘S!ccifdRW}%sp&Tobak~cHĔ>G7r߼R@C?V8KCX}hPR]}-yǮ|IiYR?(?׆տuR?,W}7g{k P6V_NT-F}1`%ڻwn,RT>*"DP>{vhgma33Y}o;p= GуIwX·X*~^VjRl!l XӰ* @U,SK[Gj@]ߣo^!kkܺ~073%_A} J}uJiCVb}m-Meo^|1?;#%):~{w{na*]%|a,} Ϩ[ bQ0GX8l䪏G/Tư'9@O`V0)Orwਯ{'#Qw ԇFR7({S5JPSԿ --=Q7DCC\'hki(u¼ ё9”Zo@!1On=LVC>"`xa(6i AD>CP҄'~oT4zeoL<.ߗƺҒW/f%DE --8t`׎-\!t-9`~oŋpZ}Ip2<ؑ~"݂D/4:ϣƍ8jbD:jQsLQ9PG,+F}qwݘ憺wn,Rw ~?߽oI}99%rBO}4#$FI;aҔCzwH|~umCKO1?|G+H --aX_SLI9U7@WW͠_|3Ύ ٱxǽgA"JA}[}y$*`#Q~9G4VWݺqra^VS!ǎ/k(/+L4aR@Rf?TO㨯BԷ섙D%eo}U /AGx{nC[[=GpP?E؎Qo<R~MKCm5V??+-).zG[+SR-M Utc$كͨQ؇y3~G[Kc}MUyiE"þl2E 4TInL --r x`"fZPY[}3+;'"㒑nL}t} _R|07#%`@Bر2ر_/T{9O9z --Ri]v$GsbR))ިI!mw۝& uQr{fSs{ߵZ7<Ϭ~[W|54@Z~qa^/?{϶d#A}Fd;;[>ynɭkWsx t> Bl` "L>;=y,ʪX}S㲅V?"K˫`!~wLPPB@ gi7[nr]|=Ab$>:)V Ys@z7nտp)&!%#ʵXGO[ ߑ<_RW0BMPhf)M#bNʌQ_C65?~x͢$#j}]j* !J4n ~VDxPR_KWoA;oHhnr:~_N]zY8$SoZǿ[@, zw-N/~|J:~P&ԇB!/Egєz o25s(20K_(q->$:AzRez@@O{:lEy9P8}ƨ?PiExM7X; #n`BRBOCZ|B~UE) ,6b5)Klt:^pҡ?}O"tR!G t`/0֒n˖jj,ǂJ3!S&MQۀE44`BBaZB[ȱC x<ր~ piov%^5їh%{ՌbaQ'e엕@ٿK ;rXPݻ'YYXMe<%I _EΟԗ8 vZqzWGos@ ݊5`S?}PE ߽g:å)ʎC2$4"̣)!EVG+"s@KΝ>vAj Rċ-;l3#9RT`\!o*ը߸^m(1.*qHF{&%H}S'N$è/T_P:7wrտIm<~۠ԇAKFm-Y&|V_1CU̗2JH}MPg^`~/߁FP?#%!&"9zi/VWlXlB}Q3[=è/M,?_SUqVQ!"-щCe%h --KQ(՗eԗ|V_Em R7 VbdlBx6y_Y~Vqaoi)Ui7S^nԟ*0Si:V߄elr& --o)귴waQP)%7_HM --Է17c} pOez^kWs3y1aCN=\A}Ԉ-Eo>C?>T>^O./\clfaL]X$l^&޼{5b6op75H8#}c;ok oԗ?}ԗ"-َ|!dãҲ --~pTPZͽ2~nfjbldw6fkVBQSACAzGb/e'Doomݯ,/}:{9o[&iՇVNĻs~ÓUwDntąsЇx{7Z!8'PXU]SGg;nr+ --p/F~֧xP^_ol,Te(>!gǒsY =}?C,ޯ{ּ귷[!~VZR\T8{&G6ohʨtEP}\A_>homj{H_\x%'3->H=>\6Xl՟0?R_& "G`GQ+M?MNa|eU )˒! >MeׂM]}T}oFWg&F^m2k*u?fzmoi'2 ^>T67C,ŵ+~| H'̓Vv_2K8B+ԇt LYVlXhn2/;/?{b㊂E1RE$1tPb @QD*(PQquhsNaf?x}z~޾ n}ۚj+@}1AX --B}:WUZ+u#*"A}:Ws!@}fFvdm흰dz&~o~}uݒ,|dޞn`cA3 #E:RRw Y @4JTB^GZǐFM_SA# W >憚ʲEyLx^.9Mt  e gIA}YB}EB}]#S.^1켂e5 ͭoWxPWPb$DG_%շjfuE> --T*>īϕP^a9x\c\$!$$GKBg$oK75F"P½nܼm;nWuݒ?^A}+zz۫^G}&{f>ԗc 7!b!zSKʿrͿҕo@%$Ϳ ?eN_CpML{}$ϖ_CԊR_zGF` >y~S}Me‚gޮ|x9xO --E~H#=B%uJjZ;vYcO^ w]h/Iߎ>vP>| X)aϞ:H} /nڠ^S%S۬׫oN g/),B:@޾/_[6oI_rjokAg&^UF[KSC &_"lP#f('(C\!K&$gNy8u"$ϠԗG=cA}PيVSVŎ]V8rgqɩ~qiyUm#xObԯJKy '~!VwlEBPo L,lv9x~T|JZV P'=h&k>4o*/-3S@gN~ȁo̍ah)<Xf~E/5y}@ |RAksR7r̤?[[ ua5eKĪ?RE}Bz 蛘[&Շsf{Uu=ƒ7|Ý߇ޝb̴+?&1?EK,V_š>n6luRKD%կ5G4K5 sTI(P3HB;75VA+0b$^ggt>'{ ]Z>_|)//PS)Ǩ1!$2/ +B#! cOxOOq8ɚ`FT&,f~E/%E>>X PX_SY~0?/;#-QDZ#:Y:;PS@}93g𖃠ZsPded^^Ec@q1,":>_Xr^u=ROIkKo;wrh O}+sc]H}5ĿODdB9R}5.}cs+{eɩ}l^TRMa~N+%>:"^ 6<?G@}~=5TQKID'ݏon(} ;x)Ow{lfmި(/]'% 'z --hC h7Oo ~EWw cP?#5)syoҺU+?¿3fΞ._z&glfeㄏ_  [voYUm#%U7AzaI+l#!:"lJ.J};>^PvpZp/)*b$^s8qD6FCHj#D% >8T^aՈvwT?<2&-(]VQS _7B}wK_ԇ3)vt3#=ZU"-/ꠄUbPZ%Z۵v|/]Mbfd[ [-{%C( nANNks} Ě\v:#!&T>G[KSC]mP"ѭ,,qN|PE/5QOFBQ~魛pDAOx;zh.0Ec --ڌ>]WPvCj=/rP;kdJ]ܽN LCW4 u"ܽA J`^v:318wMt::VcuqnP%ԗE+#8~~BJF.ЌGݎ ݻnˡOv62k@1"Bp=]hFzJnI P_4h"՟9$GE}@%tomGQ3?w.4+3c͛4Ԕ!XQcv\[}y @ .Z#-KQFSM-i>KJ/]^ 귢n}R޼zNG:ښUwKK9 ._Sܘ]}edWgE76srSk 9һU涎@WC#ߌN>.RڅlĬ,]sStuYRH}) 쎅vI?w A0ۚUwns?PPZPuU(r2kWCEcyhr՗(iSͬlݼ=u5.)=ԯe6pd~/~-Rԏ>}O޽X_GyR|gvBKS56urھAxP_Kۏc"t~qAvzR(B}hʌ Qx"՟G?2jvYozFҒ¼X>Q| --VAdBfwr9W0u5>9=nem}bs_?K "qsғc01wGN#=j=r.#ׄ=rD<sӆ(RC[Na#!oigT-YTz#ZňlE}S&uUeEVCCQ-|R)]A-# h?`,&@˘(ᷫ~!ƍ__O7G)U_[Cԗ-iO59yp6pڼV8m贡iN@=;~pw676~<>"՟QgGЇ÷V1=7+->Oԅ3!ǏDQԇ_._Wmū<EKZ|u@b፫}=!%#^RVQhhn~?0]U|)~#ޝ[EiIq1"B]hFzES.;oЯ,E 329ꇄE%eckll_Vk ̔ё;=€*PçEٞ_fHg}l F{Qwg{[s#¼ث#υ -->v)C"X{"Woq*H//"&.zz *6njsN9'd,khi_W#߂Z}u --4g݈:rp߮:XWRA}'߹/R;PUPRUߤgdbi] B_5Z3/(fO>{oi 2SG_qׁH}# BAPԬBj;\}\Ad --ϩ`c]5_{Pboca2ξ_{_앛I՟ger.rӽmȚ"՟;zq ?r};:Z[Pux>Z h-\!P_Bj,EIUCȾ>c7f;}?$ze_yPU_msn<ۆ{7m9nFmúm|}<]hFzJY5RjSƛT,߃пTϨ[v 7+-9!6&¹S'?fm 5[P+OX[!aQL}92RjjEst(8>vIiE+khze_WM ~sOLIgV-Zpɯ_j2\?YÜ_&&ν? )t>? ߳DH<֋Ĭ,]ux9ҬL:j9 --M!~>=/+=91Ȉ@2bD,s!r3x/8W --P_WѧY:::~6L ݐ- C;Y$2T%Q]J*Jb(ZƸsLs_|}mce>^.>%# --olwv#0݌ԇϺ;4ݻ}0'35!V_^yܜPK60sB ?SXZQ}ǝϐᏳVh94NoiDd_8u|=]l-L 2a^n7L՜Rhjܬ)ç9v0$hNG[+3cvM"K@5A@P4Eb9%:FA4vGs'}X}@_^9Z*O?a9FF0̡S6F3 OmXXFчwaՕ׊ sd&/s"phHpoW';ks=m-e$EYD1kAϺ1Q0ϫ׮,YgK;gwF􍎃[X2usVw9f{d}!p_. F^vuL, --Ǎ&iAͳ7MOVqM7vVzB|L_?lֿ]Ϳ|Gt17G+n_<s@ǂBH}ENP?h/GO9)9 Yvrp?}{$v_OtLAÝ[5׮e'cks#crQ!پsT͵('wn\g%Ɯ9y˾@^.Vf4]m-uU21F0E}b+('/| > ү䍛^36T~_H}dd O$UK޹o&}̭;Gt9q%qǼt޹G޹`_nkQ/'Ŝ:vp_^_/NvVzZ[Ueń7 --rsnXnTԟMd8ϋ՗٬C3qt| ,usOoB-JC72PHR_AN --ÉG<&鵧[W"9yRr --H}=C3+nF_7өͿ@n^/+ϾɈ MgP^nRHŜWQ/E9~B?h{=\-L vlQm&!A(A[FEYXǏ37/gIy%Um:4 ['WOg4u)UuwO>x. '-V6,)+ΉcQbR3r --JʫnܾBE+ g0&4ݻ}0'35!=^nv,&Y[fb˦ EC˙9%rSKngVƤ>ȖǶ|.jbA#۬:X Qd$\<Tá!{|v9;Xtk*++.*Q>l˖AR||y60_qZ) $|u|'?o8Ge8oCg qތ>tլ[ ⇮o%‘&8o 5TgY yR/xQ/6I"m-͌hڀf)q1}׭]賊RL/q^BsBRr --*jzFfV.~!#O%eVܬohjma2B৏}ϟvwӛVdg_8{P„+b‚>OɞL`P_PX Wuh&h)UuwO a^Λ/ ? 74UޞGoT^+JKs:2PH>R_QNÅ_GJE(JEi&B t4(JI pq|~-@EhWZׇSI)"AQѱbAU:@)+v IB*.JpGEI6s*y>d&|9H̕UF-_ebfe+ѓg.D&faݽHTw~?R/m qW@cBwo `mnr#}mM5P_AN/#e@}5Mm}ȼ{sݡ_|ԯmhnCփݷkݾYV{%ɣCvlrw63zڴdޘF&c |. B__GW%%fKЪ?ZG}|^iX@sk{g/, 6(b\t cEVbHWH}^0h֋ÙI!31P$Vܙ?~&\f4p4t7\ ;D"qu(;l/"ao_rXe|@_F --Gw/d> 82r י8xxm'ިx㽷&^Ai{Iΐ{/l2C=:MUEY ԗ@>_wB?i2?}$ --2aon}4hұp MKC7%9Qp߄y ?oO A})YOޏRD?ʁ. --+)@#HAB_7\iP͢b%jV1Xbz .mj?uRt|rFNA RɳNP --;[} S>R&PZfjb ȁ};0,Mt R:¨B#g!dt]}cS3UTq߇'BQ|~ueyIANFrBs@;~ڲu5+jiJ2Dho|KhQOR@?P/ .]>0WI --D'JpWP};~脔܂>!g8q=?Au̔Oltu4%˰ -->Ǩ#C#ЦDhf1 )D]}or2B/p+A׍˨ 808 7';+3PHNSd"3gL#SSGCO GDݚ˙/& mO7S񨏊yڌ"bsJ*SVQ21wrg --9_MJͺVT[?OW=/}K[KC-R8?;j\ء=ͱښ?E#{jE25RR:w5=;_҆:w;V85n׋Ӯ]`̕ZvQOG/$~;_sw@_KC})3מ[9l_oݹWFk¿qm?/wѶ^Q؅Þu4mYg](9PNk`uu¤YϚuuĬI fׅ~:Z#5m9?Q\K"fr?}?np1Ob-I.f mb?uRt|rFNA z[ڞǡ;[}ۅozXsZfjbL3'طs/t2C]*#Thg/'H}AɃ~XПƉ --}Awҫ --K/^77>ojmx y˭G7,w^CXz9b{|eoeB>tY_dJyeUtt,mw{zG'gdॷXzK/P/JK x$RcNm&kT/]4_>?Y;7CX|9?,a}mv;ًp'N3IRyV[%9)WB=]ľj --+-Y(Cg?;U {}=Ϻ~2q׏PԗSPV޸YQer,1ՇX:ښk-Qqqu67߼Q[sV6o.ԟsǹѰ --*8}#bS3sn}PS^pj\>> @_ۚA녹R#._8s!/wWG[ȭr&7|+߾yR ƪe.;/ň~PЯW]FVrqol-㦟~w^>>:68Α1 wtB\bڱ~#ln<>y>(7lg --T'Qꏉw&x}ulP ՟ --]&2]ls غlAtUĴqgW8+U5n52? 8ڸoAz/8 5EyYiIaΝ:vw.۶lٴNK}ҪHKAMR곡?~c~FA2'o0t_R ˮXZ]k-[pr{c] --_\Z^QY>Vۈ_p1H:;ZݾYR|4RszP_I'#%)4R2(z]CSK{ݠG'gdܼ}OOC {ajoiEg']E9x`vez-u"B"pz=J}A2/Ԫ?#<̕WXyЌ _\rzv>Ư?v>j+~>!I˜9ojjcBǝ=w$^ +!xx_9yșLD=J}gC_bt'QXc$ 32upq --SPƱ^yϞOxqrH՟''v9IiYy=r 9ۑ֦wn]/̹}3'rwq27ۼQ[SMEAχ#gNgO-(G7D@)G8xh*PT47n76uts h\DtBBܸ6q QVPn̴ٍĘЋgOD?J}^_P[- --}L,]JiM[ LnS.E&eWT4KoT/BbnMܺ^s-%!JHHo󆵚j --+-Y(Cꋉ0_/OFa%i2Jye5t̬l\ --Z!˿r[+#VދʊaΟ>~nN-M lZ$/ zB~5.9=;{-]z ?}[/}]MuUn,)H -- -- `cifa9V/_av?}DN~"?NF?M>&3^ި}GC>Oj1}qWà 3»ԟ3{/bQ3I3{'7 cx{}gNy\`9VplTSQ[t|3DsQN_FxrU+>¥o O}TXR^]v|y񼽥YЀw=]XYi۽ci 5Dvx?ևRBW o&ЇcHG+Nlf黰ɤ|xմL-&{ KNR\VU؂/0,8^Q`R0?'#9>*,wqKS#=)q2Zߝ?'E%zݖ!{|rԇL~lӪOt[PvP ;A~<jXJy'QgȪ?2~*4]~- ĸ)P/LR-2eH}n> B7InSPRV9}#' _+g1 --X>Z߽skjݥUVZ#e/9-cw?ތwNxkcvH_[]EYIANFRLDHP{eKc!<5ЇH_/;[j*"SINQ7H}7/{s|톧PxLBjfnAQiyu}RwP/]}T %8 W~sCm峧f%F<|1 ] U --Π>+xR[!1]oz<^ }d|GC;ۚ+J --Rc"}n^qjzjXJѧW{=2n-^hsm͍~YI}㺫B+T/H=l98E޲Uq^5M]C +Tw`B"ҳՒuwp 7[kr݅C*DLM qٟO5; '#)Qh?7J!"˖sY˿Ah&r --J*2;r*,Ng:3:=pSV$?;=9.*4y;+KSC=M}wl"- _f5JǯRaRv'WChϼlkif%D|ׯ3Ž{K{IEV32%o`hT\rzNⲪohѾ͡'hA%`WGkS]uyI܌ {_t'6:u@EyfMH<_޴D?rg|_t{a)9H֎miGqHO0?'#%>:,8-Czϣ_: jf(gE(ro@koi,/}$?7+=9!&24.lQhC.w {̶v@}1Iz=._v/1{=h9Qd,Mu "٦?ϛt .{vn^# --&C?MVёwh{_u?oomjB?JOI G\.9AfK&e}Q --iأ*n^>Aa1);W76;z9nxz$fVT7;@?6A!)y{KCm%0;=).24[nNl,L u5RܺEZ\ϻO| :/*.-Uq^UM]C +݈_[mC 8R\_SQZTsh[eEgӣԟ }~?5YqaA^vFJblTX$r"[YiSaRe1/.44t L̏!yVQSo5bgط@憚gO?JKA9_? 1/QSӓş1ćOOWgI #COⓟ*IN/8uam(gSꏍ*UeWg{Kc}MeYIQÜĸ({ˎؚD_C //+-I`ì?`-f_c%1?cijzV6vx\v_1]r>͗ʮ'QvO57QeW^FJ CS>^yt9@}> B"b2 --JphYN>:u~}ӛߩ:IO -- tqKS#=-}wl۲YbF kyVsS/Pς>yҫT~P[U^q~nfZR|txH-()k#f&}=;(vfH_Tk_vgU)S"dC2<'B$2c(2gLD$\-n:g|{o{o{95ٺB}Gz FW䤃CPV b\G ߒ©zO}>ؾζƺ̴بWx_locajp --87(G벰qpr\Wt]H z#w:ԣ>zSdԫAKGkoej\WB}+~=V10Į޵`78 WN\˯u* --s3X~kү#.,~ٳ{qߺ©ODL0=>6']+JS@AW=ݜl,M5UEz30=glnxՠĻEeUu>z>26>vtu.<aB^noij)/NK v咇@} AcG2<Pb&Pi@{OPDBZNAY][qށaº}_qnvzO:=Wz'.2Fe/wWG[ c}-5e9iq42Q8@D}J՟T%0Ǐ4Tna17xzsq43PUЗEIR]",ܽ.ai& P[Ozdq[_PF ޿ @o^⼬;nas0&ABo]Sفg @K 4 |05!QZˋҒ=|v'S >}RHGGt47Uf&F -- t|Z^@_X87Gpo1F>L1^D}fCGx1V101_R^NCu~[Eu)T>~x]AW}=/u17RS:%+%.ˆ{Nm x!yгgdn@xv"h<;ڟ/+=;%!~޿s25PQ:rPU©OZ'1A}MEiQ^VZJb\TXj}1̌ ~އCsBi0/ L[`HxLBrzNAiEmcskGwW} mm]>0Fd|l$P07#%16u:Xj*H bcO.շC{`' &` 'fDLBJFNai%@OгSh d -- 0=59> --v0'#%bz`Q= \8R+1( bfGMUz --}PWK)b‚y`g%B/,Z'8B&dUBKya5?Hnļ҂䄘%53%qhPLmෳۑXd'gTo{dwjk{H3Dvʊr3&wWG c}-5e9iqacG0eFFZ r/) aB{CK s3Sb#ozysq45RWQ=F };poRCRDĥմ-l]ݽ.FI+󑱉ɷ3s2E1xkW.ys45Q?s QyL{v(Gy'X~w8ArϨkX:yE_R^ ;0L70 v>/|87;l Ӂ']mW+Js;֍˗<ܜl-M ÷ N}f@՟?9> ĸbvVfFJ --'eE0hRg.Xo#PxW\^]6- ydi[0%yy b+/JMgaEWBZtw }#»~q+*۷j÷MAԧ1;vV:*w{wbl|xp/$/>t!jtIK'D޸lomnb|Z^VZBTH!6NVAv8$eU4t ͬ]]PRQEw ۚErѝN@{EywE]twu0RS>%+-.,63bb,lܼbRTm^ --ߝĻEeUu>ߝ/8Xœ>ϻ8Xj*H >|!6pӣ>R}A0՟TZ}<~xcqLMEH)ɞ"/QZ=G,)mڑKlCT76̝{o39<9?~[6ympu]gm‚>{8~<ԟR2x,ќ &oۮ}c]H[PR^Upg/x6}㠺6U_/+*~ԁȝB|vVP` tT(̠ݖ A:Iz| 2M]M-m<"8{;B/x,wlct));1Bu6bzV^aiEuݍ֎NDg}@c)<UeУꊒܬbps0Y}}ͣ?3(B!;D5d^徙moP[U^\s N9Z5wZcC=m UeRw$Or;~1h1νH8}fN~ʚFh<vϛ4D57Tgg¢9-}6np]olJ:w Ǐ/(K>cCaiYA<}C`ra!} 7g;+ +YDvA>*= Zd&e-r=-;م\%1sU&W-]y03IEekog c OC{K#k%ӃHCǏSyd#:Kx@EᩏYAq@+J^K?}pm6Нm֙W} P}QV} --By*j:FL,iNtk .]-()m{i8ɽ W3RΜ<}`ODxtZ˖.Y$7ј_?*`kXmjic?8,UӤkzF]uEIanVqQwo fXZaɝįF|GI_U=(oT]K,fmi --U_Gsb~՟1_Qԟ4L!a%h}/gVThj>{?OJ ={`&Dҫyӡ E tsDxxk2:> ;~7d]0>bH+'w9 Ły@v Q1ُ>? aBk*f_߲ٗpsv0P[ --qƪ4FR/XBJ0*;¶]ܽ|BwD㲓VNs?8;q[rvmdНhF:j@}9@}Y| B|Zs+;GWo Bv^qY[5mӾCeiz=mu9B --Rݣ?%T38(~oJR_YAIyDSWB:um=X9{qtlbjfnai՛w[uFC0Ɇatxh;ۚkUe]H;sؑvx{8YA+i ńTp,Yf;r --XM)&eV]kjziwO{GėAϟR t#w5a)Jr"9AHl3>ЏdZg}4yOMj@}̤G>Y62*.f.Ppt!+ Pw;8S4d@} --"CbOe\S*+sdIUy --JH.8{£NKH),ro6)(=eVWks㍆:JЏH --a-f r4{S>M"-A:0.?s>9b~qj;^m'QpGP}@@}H;7Td&  ڷhZ]-5U+I!fPIUȢEXdt --܃GOAy-{_VR)'GSG:,[,)%RAY][`=D~SPRA~.#ckoi@+1=| Pua"B  O E"b.z:zl K\i^.xIeNv[6ݣ '|)$eclԎ+?Ba! _|ԗ𓎶 cԇ`/ɞCSKŠGSTۼ{Јgb2s K+޼SE Qx$A<~xRV} rRw6g{+3(kVk;8Ro?ن Db(8&# F\RZV^QYյD>2>_>~b t?1: .תʊ.@G1Gb[#14U'}HNOM 4*rP^:Pa1ё`dOXfPjk*ݺt0J\AmL}؟# ,قs'++oVzt!;]s[8L}G{EҢܬĸ3#&fEC1oPԟ:7,9X aQ rPu:61 |v1 l@'O2>Gtu171B I Ee0>E DP@7Tz0p._O7';+3cuz1-@ԟ;̟J}< --X-p-_# GWOEFǜOI۵ -=yS-X,y@n{uwn^,)LM=ov/(FQ%`rtt0F}JIMKGL}AHs )9%Ё_j|a1:24j;|96>y_NMKo| --s3PE'H_ --JAVQ;9A}1S\Yao_miZ9N?qdlIڪRSABL/r1odjni 1;{<>)bVnQYu}k=}~#c?lwn =~8rzjr‰#1ё;m1t I̡`CnUoQA6 1H_Kl8CYR N1\[ܬgN;|`_dxH&:`V+Aq03/'r@9L}9E_M vN3嶁+θ0 LM0w\uy#.f m ,R xQmyH+*ۨETAaĝN:[XVUߌOO/8#v:S#,8%TGTDH(?lR(y0 "P_4)#+[KS]U|3Sq1{"Bܜ-L t4T``W73VF~Pnr>Q8g/d5Q){ɳ/'^Mb&Zn^fv֍+UePA:ػ;4~P_OKr[>v>pn'0m]FNAiemoW d3؟< Hb^YUk+L-m\=Pxn[Gw[CVpU ;r۟n ذZJD -- rB o xU4u X:>.T6s?Ļsd.'w]^nF:j H)AfAꋢ>-Dc}t}H^4Td^LMN8y}!feKL`Q>C/y!QE齔S[v? qaN}{Ɛccm./ʣ R[}m5`H,ꋉq DV)SV341 g/.?)Do3Hr38xݡ.;,L 5T) NdwyBCYQA2*+ b\_]^pOH?NaVYIBb{+ --eҲlqq6q^si9uMTQϧ^)@~^ 0דމ.?L 3LDR`"IA --X.^( [ፄ=BO0v9bX] --rt07 dSqXC;o%dn}aD#aG8R#«c`ljne+rI)rʪ뛁qtE,d(Ub$2ۈ@wgЁ?lՂԗ!n9!!}$ꚺ[Y9{A'~`nwpdlşw8/+=HL4(ն-*֮Fwc/ZGQaA^:;`HO'e?$dx6KmkVcO`}JdB;&EKqR3Ė#'q+jZ:}><!{ !(eq̖dDNM@?vWG[kcMEIK-g 'r%Q"0M}}KGܒ:1pSӳkZh#!FnȑGr$S#KF} £Cl&|1̈́y3C}AӨOVbX9(PYطo^oP3SÂ=\lo512PUٰЎKr }F !E8)YyD8U m=C3 *Q^ &*cl'(EyYShcinjRS^%"ܽo&_.Ll\=ŝNJI-,oz^l0 "K"OUiaNfڹq1,Ł/ϧ-0Qg.FK(ؐ{P" --H^ѫ%v*זIrgp9֓dfzֳTeL؛_a/bƃgL琹&_ζkزȒ}OWG[0]MJkV"d"rs)b 8vu_OvWZc GW/ >[R{22ly;p\Awp b%y܁W[ϖ(¹koTWQX%Z>^QJ --PQPV'ޙڄ s O92 #fTW]YVGn m-?K/7ǻPG S-s --zW.5ֱe?>Ug S#}-׫(ʯ\RT,sQk)*ߨkhji{#)%5}7{(tz-&Z@gNdypopMՔDWb-d;A*@*V!?hρc'NVT6u߄g?/^O&3>:~s%N8q`OP)E --h6C}^?ܩO5K_Tٯd?.&2l?/7';ksC=֩)+HI_ --_H `?GVwhfm}Rk@k#bg:CãɎGǨOpcC@}>vw4Z$?MkqxRG,Y).:L,lݼܽ?gjPU8C --s3Sa EYiIq1 /bBf:xs>UaDL*}Cwtu236݊ +/B_H>Ujr\bIS|36qp b@kO|bfܻ3~rS}Meyq~vzJ⑟޹@g UE)|r ܅ -- TvTӲV5\mM@{ڮ4U-+JONTv.TU }?3R0Ub,%eܬcGG?kci@GkUb}e ؟M=nxa +ۨkhbi捬ں>7ԧ5ɷSVÏm* --j %\fq 4(\@kՉP \@㏧f>CjT`~I*N ou\yIMՔJIE,^ /!8C}.4j"wCÍd6W[k_ --r2Ӓb" rs05ٲqZi$JS؟w+ Fٴb% 52s s U䩂Ҋs ͭ;o޹pϡbPǗX[jF<#pƕK/ XzhLVf4AҨkM2/CSK;'w %: Phxl9m>P,=[/]:SJrb p 'eJ.p|c?32]^zڡȍu5ۢl舃|=ݜM UJI^) --9̐gd3nDqtUTذE/0$4,p|RQFwޚjU8AIujJ2kVY'Dx\!L4?h!2r8 [G7/tOt 4uXt,S3XN 'P];\m,L tlX$7-@c?3awٟ7wot]|BueyianVƉ];}<\̍ nްNMYQNFJRcK~#J͒ ?F 1Nˢ>DƖm]aOFƞMx9 Ϫ'|$P1P#?vnt3FtPU])B8-?崳?BPAE]s cҲrAry'rF}$L}"gg$6ܿoC;KS#=- $,( M0c=3Qwx죛_n uwܸT_ SRrp_K3c] --} --}7ҲJBj:jO@О1qNuB-@<*yʥΔp@pp23JSڥcQ6^D9s9AvNE:~Gc| $`Ο=aZv2:stTVK=!dɾo( --HF$Qķ,YB.Rv_KȒi63|Ms=~yӋ5`InٸN@r5G> as0֖kE94'Bxy:Xؗ,h2O8Q]#`2f~_టNIHI-(.k7J*KV(/Bjb|L@?ョN&zj --sFx;h --ZOZpFa1IyeUu-] LR&.![XR^SIAg/ù#h --N,Zjb)P&PHO#Wa!(/D}e5O޿7~fc}mUYIa ZjSǂ|:[[hilUQO  -o5kf٧vO v5 DťUqLxFN4ڬ --̶.1[$~O36zgLZJ?,~VUF+!O\U Ҡ$ V.`FDǞKNȹ\\6~2oѹ<{GhXWUV|9'#-\lԉРﶷ6gM&@ Qh&Hr ]i#3+{g7OCG{z GO4o$b=qk4 MtDhA/w@3 𣨿 >\8WLMhmi^WSqJAnŴQ=\m̌ v +H --;ؚ>U?Sd[# |+)ghba?83 )9DMq(AB' &z*^aڣPh=8Yܱ}EY)qM0پc'w,8< ["⛖ahcifPqAhV@4_ .& #߲ϠN%Y8@CH^W'[KSC=m6(%" N Eb!<<6:PST}y'(l5M-m~ P7clI3Sc#C憚¼ q1,4ԔY"UgD$J$dUյt -l]< OA"2s JʫAVfi3 }>>GN32tfSCmUyIQ~N& }txyqv4ݥ +%!&]F  --}T_ZV%&-oln۝-Wa/feٗwv-gP}0g r3SDGpq176RWU`['ȇ 0O:`1"QXTBZNIen/\rZFⲪk73w>LDA;hmU]|.6*"4A/w8s#1(/>ϑ߻;4vFc}mUYIaLZj|udxhpV%y)q1~@mf9}9e7Oq Q_@h=VRVAYMC[ѕg3s --luG'bH}`[ --a>ۥl'9|`n{kZ{5%DPe"y9x4Ed$v8 qG"3'i) q2!}EY)Pg=Re"SLNEE,Lj}?zwpc0RFzJcA>]M whmQ'^Qgǎ5>r-/ZfUظxxdL|bꅬ’Nz i/Tg_Oٙ鉱ѡޮ[ W/O9~4s$` 6{őυ_H%ZR= 9y*.1tF&f!,4zW[ SQZ9 9loEfW% *\z}t_CyY`F{;Z[T\-.;:}m$6lBFm=U?qPQfX\AXLBZ^IU]SGa;a[4]vbM>\{;kRc\\w4TfR͆AݿPWK]MYAFrFk0֖3ƭ?b"X+k$kh'_O176 ËE0:*J HtDeǏ,ԟ``M Vf%'/>q@}r%vXo( ٧?㨲 ݰynye5Ml.K ;՞"M"qC}jޢYQSrZBLdXpr* --{%DoiPc,ObEojEq@t q.t&":>9=ӮC\UlCWr^fjb y.d,[Z\T:e^/y4g>x_H쿆]!?2<~zc}meYQANfjRBl cnF2j --{eEnްdl31,[b*[J?k P =_TVUH O"s\ăၾƺhN$ԤġꡟUvA}d9'*Cpw --I)jzϞKJʃuA@=Bԅ XqPomj@1@_/7tQ%(C+!!d%D>/M٨?M$3稹º鼍_WSYZ~톺ZJ{`f6 Iemz9<ȑ&ʟL%) Colnep)=P.65ԟjHe{;oc-Uǎ:21PUy{&8,"!. Yۻx -- [HΞ~8c " hj2r162<$5$ ]͡ 0ԟcw쳰p?4oqj]uE)ĸ舰f:U߶?hӳqY4rf KWVdg.$?x㧈i0\aNקT >^>cFu\k,e1X#EH[B{#V/~dDpDD32sv >A: 1fH{[B.tГǏyvm~e= Ex;AD#_hJ}};tfsSÕ¼dA<\l,L5ԔHvGUQGv%SdE%dHZ9y --=_TVUH8dX&`Ll_w;l}MEqAvzrBL̾ MEk";y9\FJZ됈y Z:9~"W563'w6`txGCDvVfza%#-J؍ohţ?Ge`c,f.ڪԤب̯77Qߧ$V_h'/>MШK%_Pp,,ihؑ#0HVVw)6 u4ՔwK߀=".yDz>x`W{#=[o\ZW]E~~p1O7g{C u  GMz9n^DuUK -- !"χP2Ya#Ds?c wSԗ;7S bm-2Qa^,7W:h.[ ԇMxFЌXO0,f`+רkoٶ}[0E(ήA2%gop+C8{O*Ғb#BO= CF- Tef)qP3@((.\|jD<2N IL --Eeo|1$)lj$U9) a$rwv(2УuRSV$18؟R_7G)r0̝NK $π]ې7h-_@V,#8g1 --(ΛP°6.`c$R3s De`涎[#ꏂ&lkiT&SbϞ /449nzƗO˪GP&Eʎ#\69 ՗$:oש\$c# !v07:DmLq?`ZnwؿRW}H;+3!PÈE8Sq,qs3)b4u;wZ9y  MJW6\Ͱ(Na̰4fG9wmt=6 3!LRHQYm1l P=6ur WD#&_A;b`Jӓ}x{z\3Es<._3b.Y v8~ E49{>gB3׫>8#66ixR/ɲOQZgu!ޙ*#'!kT=%fop+_у!ׯ0OO ={˃ ,Tf4VWVAS(>{LRJlģFQDLb_ 1>G --ĄzG#Czz,LM&]l̍hJg$9؟R_ǰ/^aL$İ$Fpwq4E4cQ |bْ$b9g38[2byU/[edqe\ `x(K^G;Gݝ7Zj+EB?-1&ܩ,676ܾ@OG ,|9w($ciE --R"xobybcҏK}9RL؇KcCZc}MeyiQ>Lbl$Lf` ܼi5XqFHi2 `qQfje_`pȸ’Uu WKOc_Sez` G9Gkoe^_W[21t,b$ݦNn UHWT --RUt VWЏU(^EEQ U U0T)&=K{\4ż}75UqQa0af<[ hFp3ԓN WV[Uk56n6غad+ --`/TT_ne/({]GjIeçC5 EbdHlN}e+nH|ګ ,2̢"bӲ’ZfAbOT*t"F k. --rYCJEQܐ Lq/c ?zpԅy) >f(u)}-sr~d+ --2pJ*+V[M/d|PIFl?0 _ ѿDyjCmeyPOK8w?N2(zį4J}1NwHIv"C>!ãR3s 6u )7~i%EU?S¼PhH?"';+St4.RUb>wz\˕a4샥vloE(SY 6'X&\ AwG[KlkfP~ROsXl_krzv^QŪ+77ïe6>G}wv0d=:ʊdzF_[vr]-y,wc n*/hF4#e0#5urv()-+xs5D[D$FoE""r4ā@"K:-=-ueȹf4~\uH8KJ}1D<v-(u2Ϟ*=.E*춭 3@}-u+L}n?U&U}y bVW/Јtǚ:{=yY?oȧ?~,댉Ο'G[cS#1 "ԇqfƥojmvN.>U !kZN4-J}OdZl Ҡ}wz`ʐ!d$FqLԟ`9OXϧoW+Ř o[S2r --**/V5w^F^߉kWw' --s&B hG>`L[ 2@}O"BM"FZz+Mͭlv{E/.T][oF^oF_BvWGkS=3̸puⅤP5yyquG}1/1^{}P)PPXTBbi~eqi --df&C}Zs6zAYUtWB (ȲnrPܑc%,y~1&>"ki$ZYQV 9 nߢcS_ߍfa7bRRMSx8//ЈCXJOjtCrوD![ ɑA=ښY(=)>:"4r %d+=?)joi_/. C ?V}2TUC[p dY]"'g#Ů:{b@/[%bGz;KK'1locjt --r2"Z.GLLd_{U }^7rr NIr}sy$2^8~Jd$g7t#kFkW``N%|%OPWH}Po\jO>]+(ՃTTlb\ةkZ:n{(-xC]o6 Qx8 R׿gJiy:-42A9@9Z1iEc28,2&!%#=2/F))ڍ``MJ --e/ --acWTabsĄw>'ބ?\UԵaכ[m߱/04P|RZVSg\Nv0[A5?'#9!&2 }W^H 7WM5# ###׭Kn^tbYyX5lrcrdh;=mL9:]V|8'{6P% ҂ JN%|%C@S?y6R2~R@hiq/,0KjZkbх`e5FE_CLX]!<|vJғyJ@WS LANf0F\~Oc#4(,^#sr(.15XaɳUyW99849I>+F$'H0' '/?S~>N6x!FuHP*`Pd_xf܁8}T!z!%1. --(ǣG}{OϕWVQ#jJwoȁ#ag5vt߾h'cCo6߀:s07",zZ*۲ Fo EhR̘zf&s+[]GbPWT^ojk2/iG׎G|48/ۡmXH[C=3ARr?Q_<3 L%Xh ,ƺj)@!dPA+2;-(9X?ҳf󼕨!l?(,2przv^Qs\ps~a0lq(/HN w ~UQ^D *D%34Gyc704":>)=YM]aP/( (i=zGu5W/VV$g#F:j˖dQG} ZP>77Րzx^vzrB𐽾^n;dX2nEKTUFLSxN>dSFQomoEbFw' &_(yE NeSovac% d0|oDiScG᪵&fvdhpQqLϰ{|R}33#v$M~t,3H1#_O:4X',FP>!_{lXGa?J: aޮVR^Acp~yeueaxfpMVb,XXFDEB^E:)"  --RH@z;ht5Isν'H1_y(t@mʊXdV.\{|g_b HHZ#%-Ye}Zzf֠!1)jn7wt{6x+D={:ZoÇj|Q c}Mur2RkWKJ,Y4'_gy_M$o+N^AaQITTVATܽO7q#zh G0[5tu27: foOmŲ%$+Y | --}/K --\[,9|r|tD)_Xhh&[7Fc/E>VlէEThkU9l7mjT\RjFv^aqYz},meL@[+\y>).*촿|7◞6mYibbsEgk2U_%kHwݯkh7042칌 --J+XSCD׃ =|%tV1?tP]4 (3Bcc%37N'8ꏕ MOT㿠)+g4 --rc./BF UDZ7R:k`zq{wS iPZk5-/8_,kj+`{@-J/HZEEf HD}&-^ --KUuC&}#bRx AcVeg%\ --JWG{[ ӐSc#C- (5Hhn>ed3 ?>K0 0/B3tWo7g{aM1J_c+?y>ZSJE̝`oUËjecz5H[M_ݽ,|+5"k}:;W'8/ZZ-ܦ(/M/ۤS --KeRZVa3m57\¢gf/_c4O<ò²0/;3U /7G榺d_~zܑؠ?`į\&GGy:#> u*I --_Ϝ9#T++kb+\{i]igu --}U|/sP}Q'!݅,+au4;#=mYqKJ,M)䪾JKѹ-QIKOHH 7kܺ.HL u4ޡ nB1LI&GQ> 9|PuAslb$S̐M}nVɖC)QV -=C3 /ȘĔ|O5rVL/t>gmus^ۻw@۸ivMb%kreTUפ' 8":!%38ԑ`pH1+H# r&̍`9"gzO97sG@V}?{ RkWa3''D9#1mkZHL->ߛQ~FO]:ԞE%fdURډ!P7wAx bx/oo*e͹|Qxm]˨^73ɥR:pyb KHZNZm=#s+N2pIkhq % a>%.IKOqw?~!*J_n -ٟ<>ZbtgO} RrY<L lyْE xQTSV3aeХc^ -]CSc.>#b_-^US׀Uf)[A]67VWeg&EA#c27n4A&Ї5{\U^ZT2=(!Y\}9;OP)p1/p1V hK20mwv m̹|zeu]CNH猰mi*v2|xrBtxp;&:;ex$XԟB'DLtPOͷ4̭pb‰G%ffUV64CM§5=ܬĘ [kK3C=-'I ѧLQ;G =S_ohav^[kSC]͍+3RQ}Xmʛ`֬$ŕ_aex#L -E*%# R;2s/0426\zVnAަ ?r|u"빏|U𸨰~^v6VfFzdgCMjV'd*}az"N| L]Sc.!dx$tGO߆MݝmtO*r6Li/70_NU^i̎LȬYcD#c --HR( EH"tHE:\EP":48dw=|߽ߥy|?8oy~{D*Ⱦvi|(Q_'?C=]m U`/1@#TۿF2`/Ie7P`n)iZڜ<) CW3ş'T}W+8/u@OK %}+5ˡtSZNФˇWM2r --{T5t1=FW$jZڹ$2|ƌgLf0ai(ё9rZj+C)62,gvL싱R>BC8ܫCz:9pVW^Hz96*<$k#Շ@ GhYMW}4D[H1T_[,Մ2&!n=yS5M3mu-勑A^nh*QͦŐ%Ԥ'8HhJnܲmU>|)9z_I̡32PPC91+3x 4df>Kb|4N;8z )1$9h>^/X? wA(/'3-)!.:|l?D`(X\YT*Pku߮G3*>U^B/kjykphxt>VEVvw5Td\ tu09ȗU H*"3KH?W\ V|֬'ꧥg`lfe. fv^QyuEFK<.Our|Thy;4GBK~VRK/P[7y֦ڪkɉ>gܜ-1V} J IͬUQIP}Aͭ0"c/'e,U6pY}-P}Q --`ldd&jc]uYQ^vzrB\TX^6UQ>Rŏw!/a&p+*QRСRoP腋.syB|B SF_b\txHYOWG *VFC?eeCo>ϟq;ښjKFz8436)VS޷k}ay7/e4>ǎp:_ zwdl!<Ϥii,-$z!4۩6ǎ9%&%ҹ +J$7nr@[O* J*j:{aG̚wA^R9Sn&|+f^ vꤍeU=CiЇwC AFuEIԫ#yS79rHWK]EqN)9gYU_L4`Dյ ͬlݽC#7s:y4=~J/};ZC'\x~KA8?'#%1>:VUsC}mYMuVN/zdNTϗXjZ*7wUV302DDRTlBrzV^QYF 6_L[_@lج*+pT\K$pJp^@- L tupZ+Jr2Sc.=`gm3T\ KȒSGl@Hxt\brF6Ŭ;wGO>Z|2?~>~}@Uiee7oe&gDP} c`229y M腘KWR3sAS;@OLUD'kB, [oTaO|Ԉ,M]t*>OFv*&m --U4tȚ;fN'ZGHIHNk;]C~rc4ד{)*)1N(}KwC,Y/'_<O@U0-L u4ԔVmٲQoͥ,ɛMx&/%yu@[\XچWXx(Cibsh=X5%c<0<Ύ㗝fH QP *M*U@@ޑޫtQADlEClQX&ugs --!=szʊRF#M=z@WSJJB;\@7<VkHtyc/e;76sD)GǧdV\RYOqu߾[0ďC} "GuEy 73%>&<)OWH>5ܝ\: >SC0@A _[SUQZt.;#%!6*,@O瀆.d-۶ --coV}\3[U[; Wyihdtlr%4lM}M4ur@OۍW+J --r2a]̌*BsH*1V塹dnOq#Wr --*|ШؤbΫo5vt8<:61Md ;GL]mTwIK6&[$F]:<}sZjϾvؙ_THf e_}A"9 QWfJT￧?BAՕp瘈@SGX6>tPviIm[avT:3yP)WPQ'wE[P --zQGw?'^,4=x}nX4lPldI7g#4D7a W<U.$>я$>CͷTJ%yɾ6Ⱦod=#+? >o>?:^W;@FCp@?˱6fhnR\T@0CA.UCP=oD~@(2ԬsEHZWoN?AYUQZt!]M=JsuA50qrM[H*3:li@mMqI9%pvF?&$_@SPd?mMa~. S݇|Q_(C5LѴN=y@/W.^(/)JO +231ӡs+!*E\$,ԟ0~ޮ;7Te!Rts?babpPknҒb"46|;Ns=$B2* --_Px44hnAiEGν6{q٧ 'zm"Y!4. --ɾ koBaBP'_$n }SF…}]m2R0HV> 'Q}GT?:>*PMO'1R}X!'a~zruEIAnFr< ΁Jn;SU8NC!M>~AV [88Sd ѱi7Yf0߀J+J s3SbPbٷ%BX- | }<K) */(=Яi=`kmnj/CFZR/ȏo0<KU[Rf(5+"6Ͼ{ *>^cPMM@?oomBzz\vZbldH6S* --_oDvSs --] ydYjpHC}AiUݧl3]ig+4$ݔJ\ʝB!BD(rD$]GDlMj.ڝg?;;óz|9Q~R_  6`{K egI9pu7is@RptN?Q}k'P}{"cR@;ŪT?9D;Jltda|<]7bLT)G?ZgS_EeXT3o)Q +-.Adp9+Yw>tCԡ=9M'&ݡX@/-);];=9ŕ}X ABR$d>[GiUZ_[ giqёa~nΛ7Q[WW%>X6՗xҪGEٌ>d&`0QҪNѩ1cZ]5񼬴=HNm271ZU(5Se --MwB}Fӛ>jxyE%Xt7dIV2#JhGW7A=D엗@4#V"WE?dO>/9:Iwp S}JOLK=E_k&> --$, s_ȯӔjm$?9҃^S}-E#IsVGMfƆ/Ԟ 5YIQ)p9?TC}FGꏛ0Iy*Ԩ:Ԩ޲kmhmkwXCG1-zy]aZŲ0a?@@>{KA_\AMHH߽uo!5Δ=}kxH6 --0!O+OR}b*~2R5u7Dϸ~ p'Mې6_ZwRa}<\AMWX3O(tH5{T#{v]wx >hu]C{vEye+C WG#ً 'PTgB --k҅K --ѧ -- ou4_Y]П-8 1$E2О*@AyմwH8(l5ίt̩㹙G |olkiNT[KcLi42>ݤ0S9,xgϝOtZvϝG3rJWT^o.2Q/.mk:2(wʾ zyϣOqDlo(N/MN7ꄡoX!>J+H"~4eĠgŔG_dTGVlEME~7L9W^r"?CQQ[l61b:"yOC57hҩhsiwT1Sҳ,;+i['#~ȾȤHGXhH ُdP_B{HB 1{ "PWs2zXvƑ䤄}{C89ZZp?kW DOIK^TSc%T% --ROĴWW}PwݽuZ]e$Rc"yl01ZbKUK'*L@/KzQ_C+եxTP'*MˮDfIa)RfQSOh+I"T#NI~J?Y=gQGd[oCBT\8Svd/3 2hkeaj\ i}C#כ©|K$U b#3b -- !\zU&eh|6wXK1h+4?#XI~d_U]s2J]=|vڟ J7o5Ӥ}ʾOW ?F<W'넥ջtIQAnVzĸȰ_/׭RkWDП9 --W Зㅾ@}'>շg>T+WT[LR`̩㹙G>@tv&O ̞TKjS V[\#cg,CkYw i[=FY?1Vُ&@} sU%[NX_[uY4Ec h>5*}@}$J$PUȄ X KNŪtC/lD/.7Zԃ_vx^VZJR|LĞ ?ow&FW,]CI;Vѣh6p~f;Zv-Ll;LvSKW]o}EHj뛾+e{W\}J2e7c?#:G x9T6V(Ű驇#Gz89XoXghTo61eŠ/#=b? ՗cT\UU1/N}⤍W* --psv%_1TPoJ0YW_'NUW'8jE1DM! ""**" ( RQAAD]QT jԸMۚ3;==x`יp={>gMzV^AQIyeM'\^>yCM0۴7w+}BR_N G|J/`7kw*-.,HMS4wٞL蛙L6W.%Y*3ObQq/c>H5%ScƒHm,N@*J&U(ɜQ44B5 --[63'i/S`~l)T2}[~Ԗ`I/ }LRΝn:qPꊲMgI"Â,hgmABbܓG} &H{Z yNO>L6!p3"m=x0]۶`4%ů\C@hgeNi&jGR_%;X0Fbi@k4 4bEԌ<U>~'i_DZ --VW^1qt1i;r --~=9'CoΙg;%О1J})8j%7@b(q܇ eT<@u]=- +ZZֶou+QxPS a{R+J}ږq9ԇ,߾uӆi) И33!Ik --C}<Pm؈X~O2ԿPrR}ՎgN4)t+~ƒ/ȥR ڿ| ha48,p&ܜm,̐T?/ --%UfRN8 Mm])xOTa2f߲^R϶w|yhduW؏ )73$ƾ<){JOD"HxXon.vVؗlL1"'؍bkТhQB}?L%=Roy^ʣ~=A,]homj`tڤa><]EukrRt(UVcĂc --^nOOupajDt5yMgΓѼsXPޞW|IrOKN T[J=)/?{K>~_P/,֛10m >zwR+~{Q QhDZ"'RBĔtJ --BFF}!Fe p@} n}hĸ %%(y4ȓI*-RC1M*lam#ku_в4u0 VلRJaJ}vkCIk= =yH>䦼uI1)E --"a}eO!-IP?#5 .ozwWޟz4JܓG} 4Ϊ}@&Jn-).enBh`sI"' @z 7j"BMaf \ --k`k,NľxBݽb?%!6*<&}<V+P R}aӎ:w-\CoR?7 =iI)zS<2B@Ј5eu,;??2 [7oX@V |q.\\ȫe< V VKCZWPTR^YSOk%Z9ZTo "p#CfU֦3bG]ޮOJ}>K}hofrM'B?VoߺiC6 }aH<0 1CChz~bGB_4kmI!mbٺcgU[S?~AaP䵙9[p6:[9x=bUTlw5>[j}RI}z0/١6UWǥ$ƱtDPOWG}F{RYPma#F"djamH[#Cɭ hkn6\K>(,ɆPQ_u]veꬣg85*<2 PAV"Exx>@APU# --(8,6ծVӵҴ]{s@{r3oo6oJҥgZy)t/R pE?Y&߹UOI}Oo=C_KHEi10am<Blm i; QBY~lE4P4XlF'WL|o!MKƭ/nO֣q(/+MQЭd9F#mqOÈ28ط? OOȨDmjFn2\/562?!VcRlcb*\bԉলpa߯2Xr}JKRzlGJ'%Cdoټ1R# ݞݕ7,LDO$-]7 QBRl}1B6Ui0'CUG[b^ ҇Kʒe'PTT~uWOvS cmת;wAq^_' --y5/Tu%`_Zke /FFzM58:D M _8R8XJB{H Q7P?SP\#>lO;BH%[JdYHr dԧQ'Qw CzkzU XĔTXq:wϾد氿'735E@*+/WRIR VŖSR|Sz+J w@bwDf@z*o>>DCl@Of'~ JKbYdD/ /(7KL.O}Cwa6,zԘRF 3}ڏ}VKc0j8,`Y෰axM2f&oM}$N=_ܼ!ԃV,J1_;уt؉8S }g؆$z3F&wI4^g(BW[(9K{w@)+w%9?p!V,-H};Gw>m X0?)RcFl^fZFgԚ XXa;x:޲{J>{j=*Њ7Z.|z1̝5"AFs:7J苞 ? ?a2P Ə3VK'ID_Sxyy;ϝ$:[;:2<$?=(?L/N}1{=؏]HS'?x/U(}tԞo؜d56,6#Lba`OI}>'M7| Ě gdw ~}<Ӂ?:Q" 袄0B 1>mlM:rauԌB>ZF{{ډ`j黒ܴqUD.N\©c؆J=Ї&d)ԧUϡO!{!e+[G8~$#?;|`P&!z[Ds'K!r 5ۃ=}{na[Z=2ggiŠA}B˗(qfx0nfL8N+[Ro:o0nšM7? ύ=^ȏ3Ї%E͹r^ݜ '' J{y2zr!49ЈĔ\C'Tv9}^d$'vl #ç,!$~yP,ɚcU[ǨtYE%减8}Oqk۱Ovkeu>.t]X8k`̝ ʲGeaB2nOイS_24>kWjQh=yat=OM=ңdЗ>c$ԛ !!/Y _\B/A#/'iT1Lz &`>]nM-Wv&,9߼?-Y}w BHm"6[kO+ĉmWuve7aIC}\acl_an^Dhp/4!7Q_ }g!@lA\ ?id,XLФeǨ_]`LۙBH}g?a8\H}7 "_Vԗp^ᢵE%؇wdU0~qI~%ߞ-#\8l~vp\Aq\u%GW=uJ{9>j/>.ƾ g74a-z>xp9;<$Sad€$H$ Է.D;`[S'wg _b!xE%EY$U ~*yApRtwv%_M+o°%OLI={W>"Wڪ3'LM$u%]b)]-Vs̙Vg]>S1M}b9>֍zb =A(lA7)< ssNҀAC2;GF9%R/SKk#ȳcW?N ;^zȰ @}aé,}qصj}EF`ΫЈ8d2"%oaJJ+,y}s%ٻw%y5^7L2sPt[}k+z`vB-맾mS.$hn?yH`VNc vtb=ր"v(Ǧg!?Qb3hۑ3 1vلTk9ť4MxzvQWgǗ ?X6IVE&#Jҋ ,(Q --(E(]"8 % ݸEƒdc$?;3"#p9[֎O_]QhU^VZTo'r Ưc>m;'n¦-.%I>^ݹ7}7^qdqGV89 (N ptZӧ >ѳ{iQR/v9ؼwg- {+Rp÷Ϲ_UL:Q?``߀aQ)T;*R| ^59ɧ3bQUd]v*YCtv4j/hd_􁾋2}5JcSЬ]hK?,p-[vHR?Rw{?~OuҼgG%nf''Jht~rPy5=tє*G Tq>U_"MJD,\UӰ~oʵ --īɫ~}ueup,]l--fU_x --? &fsYۃ{>dc'*4!_ ~'Gnn[E|XvP(n63 mKቤZ~|LdXw?X[ޱ:MiLDp ʞ={l9FU@wxp3Ø8J,d [տKUSz/*ڂ\@?|zsf4ÅUOEQik#(&7n#ώnkdd[vI {TeĐ[}\{HS?KAJc׭JK G?QeTqQs)&eQmhlڏ9w T Q TO߸nu~6:gdhb# {"ɂ;Sُ@D/۲ ee@ K}vcAW$Ƒr[@d zx5*\jJԗSh($6?B}|7Ok=PSI&{9H}4rz'(ȃGsY͵upY;(gu<| --UokJϫۺU"Zp:Wje_vQE⓵}m k894'y_ro݀OJdfZTBlɎ`)Sc\iVkĩKW>O"~<|ؿ E@0>wtX>T)StKGI q9D8=}= 鰃E8տ艆U4U=S(VsA9՗zzOT}w/%!1$hweo뚕wo3٧y{xWX,>&"d;GfCN7"l6mRs*x G}/}/o5uWSg,{pGotԕmꏗ>|Ӛ7!O|RjFNMU5}z+{._7o߻{u9 zT?U? U}UTbS}5=Z4"W_.h_{d;nCvԈ/c< [Ioik5v 2o%hFY){xEIb> --G}@2剨{s)A8ț p[T:dT '!w;8/p g --U4yvN`>B# wr nD?u]GTP@|ouO\wmC,LcķTLlj]?}&LN9oҠOeή̉H+7[e>ZHrP¾.9K%Q!A>@}P?R?)5CZxP{Q 큋Ǡ3 ReU?ӃJh'|qpT!ϕtshX7m2Տ\$W}iS><3_0~coJ_-^Eim״ >;ouϝ"D\Z073-Y* Z wu'oj>]o{WS:Ǜ&2WM --{gW7ꚱ YyEnZKW]ACU_x-|՗QoV6ϣ23G?[JfEל?ۻHv] ^򍐺9@x6.$v鳅r]QB@$7ž7RiHx4~~-G}eRO} --6& --/9m[$8q9q L̳sUۓʚ]{k^OjT_lAU<^?O9Ř --Cx畲o~PN WUdSڕK}ݝwQJ"# # Gw,b^mf~*!SK"C#c5Bpᨏ!n[ޙ uOpڞHJ pƐգġ9Š /08<:.1%=;Sc'ZՄE! ?_1R S}ꏕ{y&zedɕ~8/*+4nh34aQR" A"} \/. --.H WD\ "l""RV((b:1NƦuj3ts}*e>=W63ڽ nGVLd?{ww@ʺ COsn^YTٽÄ~pADJyT"s@}l.ZLRɢrc~R1_I}Ti&zfcsh&̞T}畄8fbrJLҊ&4u>#dZh~Dy&Z3X}zI쯦e_#D_zd eDX[UVRD7 &x,Ҽ.NLTŤ`'FU~sD(GGawR_$h:ԯoJPvEd樑3Q_iBLBe/v LeA4A4ohv<~O>ѩwQ6mR}AUƫ'e,o ~_oN:RJ%e{K)ه}%up,^DdAU:؟?ol }qu_o|D\Ӑ*оǏ lbXAHvW 7:gd D~=RZ8cO&ź@eE\P޶cC --6NiP?kꛫTT"5˝WbsreDr=|Daq6pvAnBnL7USKOkVTc@g}_j!W[S>ӅϴoYI\A&wn߲1>&B!Iprt_jkmv.`1 --v/A7 mm:?I0yT""U_ HCaH{,Z;PA1& W?wUПe1Ic9n`lX*SD&$mIݕfMWϣ'jǤd8aT5A;7\\?C՟;TߐSaвo9Lٿ8쏨}q蛫[UM5cs3w V --`C+ ccbޘRPRc}muxmVT(}P}@$ UFFoǍ@c~'_WU5ܘj ߚ?3 m^h>$~igKJ0Cã59Yy dMÿÔ0p`_Wm@%;{"/úѲO,:(=%IT'ۅqZks#EA!][b# ˃jeKlzAΞ9`&u i ƘW\tPӡ |}p Ł2ExDqݼbh7?ApGT\m` Qz@Ɵ%L^b4$͡ u/=MiĴ5 sV}+ϘJ?z_YٿiPBO/=έm-EYIѩ#;MC"`7'GV [~q8CT&m_YC~+R| t2bΖQuRHr}6 Di:EDtt?mlnN4ߦG>XE}O?Ӈ23gYAXYSvcZ6_,^ƫA2/HcH W fZ[i?eX(շQ}P}-l 2(N5xv Kè(-.$ @z{:/'v6 d*So,ԬE&Pxa8)6D*CeA\_(B7N= u1gI~P S6:OZf9}&rgpK52ax &`k7;.z=y̿pHFQ Z{)o-yXTH0!h,TRTT RDD cAQE@Ac6h5k]w={SGDQ2~|?w.PY/E^b<O//~3CJ8;3 }2"$Zp#Ū 0_HdgPGB՜,/-.lÃ|ܜ-@M FƦf,׎ȝeg:4ԧ>`PRK@}ΉҢ m-oZLH --OF?2E B f| V[k~!nI);r;IfD3cW.P}KU}Z Q}WP}A:_^KwH~/#(d_X3ymib J'yC XZL]mByP3i&bq~K >[_AClc"Bwx8۠웙3661jL.>+!NO͡.LBe]o$~) '.O:O#Q$bb0-&, d03.,.ȴ%Q'/RT = ?gWA@"TywA /a_14[=7_|$wBlTh h}=XC(bDe>ׇ_P'O{ gs1GG7rN;Xdhv[kK6`7EowrKťjҁ.Q(~bldP_7GxSZ%J9)1^ _G/H4GK˫jP`BZ9_)=[7e'$ReʾHĈ\a&GD=+lHPx8eibM U(ϜL?~o~uUcE l`_O7g} 6 OVۂo@D@``n1@P_?ٖz{Էdoҟ8HTU_?V]Brj7[:zF"a2X-xALI|uHPnTVP}.Q}˴I˾H8D"K=Dh4=,)"z[Cί\0Jl ?owg{m,Zź:Z˗-Z4O2M\dP 4bǭ>Yqh̴}{ (v֖ls>,s _ nurJj!-g[/M q L_]QQNDO5 eԗH(%uJ2nr`fQ xQS\RGw e f3Fp8 "&;nݦ&D(8#ϤC_bIU:TBFǠh d?`N>}.>Yn;+x~= Ms1WIPh}= ,r:O]捼S?]@k8pzޤA~> !mA<}âbrJʫjZ$&GvP_ Pd@dԗD'FIB"6CEKRŋZeTl"A:$Z V?-H^)]J—dO>ۢE1_H0qٿKd6r(Ϙ#{wvN}8j9eũ)1!>.PƦ\45ԗ.?WXS'O7P규jjlT(;v$?'+@d߁`mnfo#w@"unц. R>Cn?Jʲb~JR\ThRoJ}yrUʨ>JTLT`F&ZbBdߓɵY2:ٗ,c\n\ktqucG! fF_z4}F}ƃ H}>`ǭ9YY^z0/&Fdo܇gemwtvDMؽzީ3q{R=?PK~~M\_ K?˨?E&NY#WWRYH RKТAPʒ*yˍH".E/U$Rw`T_Rhe `*4n#K#a?E`}7uP{&јn$dDYTA:{mWr Dk9U'ʎJOMٝ --طG]='5N\5\kp2<<Կ(~!R?9>:,o --@k}Wf1yOA$ --$⓫V5@P:zDܕJ C5.QQ1L0Ee 1,QQQ9ˡwE^w7Alc[N4qs=Y3x\~e]SkKWo{ >F aUBUS}1U}'i0T+|>);[{KywrOZǘ O?}| DS{xzR\txH٘A#hA8j*P@;JaIľϣ~n~K}~{{;b~eyIaYq!DΎ}+ ྙ0֞,?ZP\^]H[d)28Pb9@oۼqP#rRO*2T#XOlҪ5*jkmج]O3261'>Q7{rlQ/Qܸz<~UT=.D_PC"ʼnҺ<eѼy)>M+ΰ¼SٙQaB>wt4ԡ.Q LVR˓" |@j>~;>FҢ39ҒőDEn|ľ9yV6v}~x4 E9e0KS?2R`>$#/'+{ @?"gCO"o$ϙTT\Re?6\E^~AaQ,mɾ$0ޝ^:Zk˱2R!>n6`<דR^@+/ͦ`b_HA_]YV|6){{\<;[k+KxV6v}PXlۻ.\ۏ5& PHW/wCE|G^f Ij-^J\~(ZV&\!;UDuOk4>9DrmV'QOEVǡ#OȾb Rw{3WȯKG*yp>dk/t77# $E{MH>z:j*kV)-ا ɱa1d49B7ԯoln!'Gٯ*/)Dُ -- ";]E~T3rr ˫j[:N`DppԿ//'EI>HJ RI.,WTU[nfz{M̭]ݽC"bɽU6dl Op\c&T&;b0>IT};#TԧZ #Ʀ6ʞR? #4ntCv2q/@_S5L>Q<;+ )^V_?>'* zE}TNxDUW쟢녶stgsr};q*pL@W" OR77O=J &~ezK//7e/9$ --ByeU5uS E^~AaQqIi8 K+km deB+Iw+D&Q?{e~Gk#]\K]QO]PءC-@-ed[L'o)sS 쫿-r2Rđ!>$!Cwl޴#bVà)3Ihƽ8w77Trwx~Vb}sw8cS]^& ql ~ 5%@+¥Q547io۱ L704RslIQI2)Tqɱ>$ .׳-JSG?!edDM,lC/1Fe]Z/_q[L:Z [b/qa-߾Ej1VUVk@_2ڸn6r b$Y+ x㡾4*kjZZQWUQOMG=܅3y.|ݓB?:6!9UlIyumcK;|gmA^~7Р-1P_/@##ԟ g6o¯F*@ٸyo ?d --Dqv%"\[qYU$axSFTRЗ>ǔ3Ғ}HOY9ۀ]]N$DR{zn/ EQLb~QieM}Sky$g[cؖHK@-MJ$`A0?K%&P,WZFEUm-DW55'/(,:.)؉4$")ћ[$)/߽s~gLT?+#%!&" UrXW*?jWQEfeXXT,_Fxd[cP̯_>g29v --4sKcmuy39824і{fM Iy --ťKhNsHaiϠ~FVʚ:>@b\uEYټ'2Ӓ(|"M(}(S38/s Ϟ`F0o/)%pu!u4?fɢD%r --H(Z[ܵ-E)NU}Ӵ=9&m%`QQ {"*ޗqYL C@@,nD --䴮 ic>\/~2 --Kʫj9Pnt(}`*FGR{cuʾC3u5ՕŧsOd%'ewvrd3%CQI!~y:nu+\^x@woT --ԏⓕVE -- jo34'Nc9ڍ[wB"\=}؄n5ODJCPNkWSmx9ycX޾y٪ --l*YG o{>AN~YQ^vzrm0[LA}m`ROB.Qnl@ 7H]Oa4{ޢ+VYlLwvFp1h8Ͻd)xX Y=H R5P,~\hgT9FCTT*Iɬه)_gL}u1a%R9麉d%x;G (7P=[FYT샿*zKLesR?dAq>Ɔ:`dvfzj~H tp )<3W7:nva7COѫ>~gf%~~vz --Q_*qw:b_ /5E꫱-9'Epr:p܅KAn޾,qrc -- W #} (?)My~BldX!bF QٟVg6|B()&el'sirbA}M|ڙxlʲₓ'S(`ޝ[1 --z&L YikRCSXzmcⲊFE|>a0?7;xjRdW}!O%hh.[w;vB#cR27aH/p)'g4ZX?UW*em؆f 34ytuPgͰkaދՠ>KgӥŧrODÈR?_!rHo(6>'ˢǥ o:3HIPRvԇRaI}諸#ˡ?Ns$]=i $pt$1$Ee --: gg %P%@$~NGT.>1$j2cKfYN>e ZxTܟwY_ex(薫M5TYZtnVѫ/03AԩY^#X^tM}Y˗/ g"q}p?  ѱqi~AQiy~ǭ#>mU{UԿzQO%x8=hE7Dž)كQe_Ч BH!yFfΞpUfKC~29I^ai9Ӂ-"IHD|<R@_H(ay@vug*9ITxHYcjBhWqCP!nj0Q%->0ۋa䆴Pѐ}첒UBXh'ez0ĆloUTѩxZGѻmZlܙ()?Z&t_ry~SS%EɉyxL̾,4\s,>1\3Ub?7qd2%$:saNO%qc.Xy\nӶ]G7/_c) t@UTQ [,`#)1~nNޝ[7X<E֐T8.3cS䅒9l# H Kii1wCEUT4^c07USGfO%.vV{wlـifbxOכTпrgo`/B Gq I)i}BS煮 _&5HAX%wl^gԟOkǐ|8`'sPcS1`Vv"aǬ܂2ڀnH/#Fך9FJ ǰ`)(brvrGEt3gH e_dL4m [kiL4}z,G~"/]̺ov%][U4m,iW,]4oa_Wg^&__Uw?鱚ӸM1qO@Ł{m(*" 2es i54$XӾ?s;P xNjؚ P JJ}JU a?IAs/^  fO˔CJ*D[w --~Q<#eCjoCAĐ: m.hEQ*J%Đ+O?rÿ́PLZB۲&~^}b f֙}Y~Qi9ko3_su`V`V'F=~-";q.ڕK"c})5}/kϣ RGPT կb_SLCC^ GDIej藖ǭh[EGJI~kW,`7y@ݺPQ_۵'|0k~ 42f>zmںcۡ' WG'&uG.VǟȐE߬易&K\82lghmafUO\;v`?v_3:~k5߃ɰcǛ[9`RgFE((ר#Jg~<3UI9/4~g,sgXj4)6`8 oN r@:eʒb-a!ׂ 䇅GF'$R 2U?;/^M}XA1N6oCcЃKc1,l;]tڍƽ .7&R3y%8q~>B7]s|*>@l7y#r랝[7[p4?~=~떡 di k[t5ښ [ڋ>yAeLEâۧZ jjeq~n6gTgO;|` /^0g&6q/kƱ߅8/(*T~5}}U\yVFZ,)Q &'JS3յڪRCy[-d --?%RHᄄ^; />7FbG=%zLw5g'g:{C"ڨb[v$ƧFZR¼ gN=.X#՟jkez b<%~ B_&h죬s?|~rzv.KW yMg}T5$Z^NVzr":{ElMF[b쿧P_!/*Q2կaq_UQ,-.,˕3g܏`_ddG̗ed&SwA!j߹Y4>: XPG'~>[8ڨߞCkz>jǴ䌫o޶4^5^d2㵴Q9,/-S}X#ǵKrٱuڕ\'O2Q}5ߪE~}ݧ@!GA;a=q#ņ|ouZ#UIMQWSlXhf]L~qL2dwչ>#S:}Y^}"to>z --1oѲU렌]罯ei9\}|4?zHx8C!HJb"3>q~gׯ^ht{[1ק';kTMQ}}o-Lh3|5Fʵ?Grh|\rkkh7o &Z esں@MaS]{?rmٰf5Ega Lkew!`ͨ'I'ZWG+ʔ%Ls3diR"/gD'gBلKÉvwٵ` {K&~M髾}L &@3 k[s.%t| x9aM* --U5]Cz<{sgxVd%'BgOyz&c\dӦ`ˍ3bA>Gڪ22o+ 쏝0Qac99":k&I)ي^ꍦ܏=7>ZhyrY)I Dw+m6*m: ׻'Oԝ38øћ,-WU߸Q__W0/Wʳ2 24ITER>P+Tۅ>SRMʲܬ4N} /բ1AVCwE؀-~J`d2th ,د*; 'ўԨu4QDQ@D 2-"θ{ F8PCeehg؜~.ÞОB?[t%ض i --FGT-Ɯ*nG Y塾'<^˧~ueyi>[G`s簩oaf/LMONB~7vQ|P q8bQaӕƢ+)}f\3t%#EוR]fZrB +tݻ㛍V/_LMwۧWfpE8L Xb9BL*}2S~B\l ƞpD@M:|/_wDyo>B3IAW.?e{V} h`+ӗ?x08c pclW5ޛNt;aQ$cq)M#Jtܯ#|eڋ ^.<Đj,ʴ̬BB_*-y̌Ԕ ~%<1 ?gC__@|M6VoL'o۴n\}KͶL@7~>C(RtӴY;xnɴlI~QVo ǻw{h/)qQawoa.8rzZtw9?VGKSc6]oREq&V6N(mԼ6lA|lD'Sz;<~xcSxNW6r;} çyڕߤhm=]8B]Mߏ6v$?TJͣOW1~A~^.s?=-59)11!>>O!eH -- --KEy!G_0hk_ W]%-Sڣ; g`tȠ8PeQ_[L;W,YƦ>mEB#m~M}G~{ki)Ι5m`_:H܋Oozgƾ+[dFں BۗJ RmӭF>(vkN5MֽEkn5|e%YH!ּV-[9:Z)đQBM9 詗n>cL2_UUOXp?'˟.<| Gi`WTU(Aͧ~sQ(VXe T[W>oaY>F"WÆXc3i9s=/_ 1v졡+84"&>)5#+7DZQE SV4~=4~Y<<QLS?-9!&^||(ܜ1mM --Y{>rdu7}JqD} --ڷPWӵ(P_ЇE$%z'm1azJb\Tx dx̉#xs\F̩'X}]tp5~u`[V6ƞԿP?GTIʪiޗϺ'  D?ۂ=>_#͢8Kghjni3iԙ.ʵ}>~KWnŻ@V^Aqiye5N}R~+Bׯ^>L`$GG`& S;l".\gOw2717_12* o4AFIfSA{YX9"Gؼ7mE#!" eZ[{WI!BU7z&wV*% <\gdol 45PHR?P췠{r}G LktTX"ҋ --{]wTTD:(b)傂(MQwtb63sDy "B~rg?I|%}eTdg<~pEȹTʥ ̘2ag{k&C"ikRIBUW-de@66i1 Azc9F``=L1&?'?Sdn#-4vc^k$m6o';$Qbֶ SC[q0@}9g},W~Q zL~Vy~&&/33++˙ --%7hwfD~d,oW#JNQaJ ɕr턅_tĨظ$+J>q?~ pQ --s)iq#ڕŮm֯^+H 3Bzʫ~S<5on;&vNtgYI|vBXTՄ$\o""G og(eǻTl9YzSlΞ>Ib-Y@ݍV9~]m^27kQL5g/H89/cK --?(/}OI|"_oZQa?̘Bԯ~3}~kjj:r --ĩ3.Xb }}OÊK|EfHXJ$ʴxuœG޽+N?z`4DbdqpbXqwh/CYobUOWVh26lspq,i߸h7[yBU7?<.MQbm݈x4肏F`'\~gٮ:7;p-gbUQ?Rx$?g˞Hɗ7˩ 8կ~s9 C>Pl]OBpjHs//1W]O&aD2+$7e,TD"?/7;#!5DPqV!ŪeΜ:UԘaoMuR%!|ߣ8 02 i <}|m##B#/'ܺ'%+( ?z&( [%V?WcÑecGpaΛM'| 0SK'q~[%7QaX)32w=TQ^W“_HC~|n+AWѠE+wU~N\Hx4HNf(,~UR&wG]Qʯ60r߿rLaJkʥ͚6cn`_~2[Io׭~_[b37l~AU#QoS~$>7|*5`UӢjXVR\L}B՗Crj[?of1ui-Z&sఏ_!Qq I)i3s --߰CQ --T(C('+{SQɉG݉vr93L?JX7XhR#tU_*VZ~w[Ou-* We߃߰iۮ30(84-K33[r¬WmX솇]88imD/+dgm5G --wUoJP5 &z3oޖ_9eee)GѯPRDSDV2!w }u-8ɕnrCtKq(8D r'fgR;׮D\֛6Ej4D9O1gJWβ<r{T$JaV+~m+G%U_N}|WՏ?U}Bja}MOt81zĩ3.Xb U}}Dh$Uq%rX(Lo^_ q%n$DZnx#쵖>s07bDU_[: r: UʾUZ{%o`8mƭ;)QlїY9$&s0ݐgI\$Gɦϯ8v9g<(ı#o[7/?Q#̉}\rJUUWt;wjpwvZ Eɩr( 8L~N{w_~@ZkC~uY7|&Ƃx56*4 {W?}ZاACM[s>a --嫉_!#x5|+_V!2%Y˪[^(|<ݾ|F;}Xj¹38XY:ZVT++-eC'kh"U!GPog_L۱()iw?L%VsťMz) oi)I qQ!K~Gռqw=Z8 CB$NH4)vnMRA* Js*JvJ Kѽ\i@,wu}rs⮵{~R!!9,sSc]mMLUd>uX/UP_ow@7#cO$fd>N}2܁q|.*;oE_BT}tƵj~*Q`ԇYh|0T/" '6!耣pp`βy ~ȑ p?]D2|eg] > Őw Z(< Ä{pzvq#PW{:YaOa1Gu`2(,8_Ec]nhR*ߴ-`#3s --.\EN#=ǛxvZiEمhd 5 7xH_/8`?c:9?9H)fO>yQkƭ{OLM+*bS<=~C/fɩÒPUV#Q8?;#5D}aU}2 --MX6Nk}6l޾ }8|&#+֐]xAv>^>Iz Goݸ~‚̳)(m}׭qX21&WUpTI6rbG+:1 ?NdañDKWĊ]~8"8 --N\oB~oEdU7mr*o|HA6֐ --7qGI3bP}5 qw/T?4"&>1%=+N:A.^Dx_7k/1}['p#/Qc>B5A}bƴa~?G2A(@>$AeB @_҆:( <w2)5=+pHOꗮ!>o] @ W+/eg!<ڷG-q Sޜ3HdMoX}!"c¥c*&gb5=+ΝX|ak?Um7eNk}Hc%!T?/nygB|QaGlRUQVG${s".(AU-}#UlGwOo?@ ܄'RfAU_ڀ_W{aHS_[@Ym-ݹx-?.)h`ZW'zڸ*&#?͌} 9s [,721c8$ u9p\N!~F[E.'4j._6' --:߱qvV-e_ 8}?L*jT}+P@Hxt\̜BxoTL}OT' 17_?_GFw|ց߹@/JO9M --_}b(T@G /K`/Yns/.AĆyE%.p<޹IAb~*$?JO[MXSUqBANVz*N#!6 {K3K/ZΙ%/㘩?z8L~c:KDӝP}Js+;G؍}|&#;Reum};<~\ڜߎ7.$[ G\أ-q2F_t1qJþ oCDo;t;uw՟>7Bp.bGOG"pKr΂!D}oO7'^7vY+j +-֬EcON --K`]@{o >LBvSC}mu奒D}qToT}:Mw;zdҙx741E1n䋘/6 --+{~IanDxȁ=W'@PO[S}Q_/#B) --r2 --X7lߵ`€{0+ --.o}p;>4 H"4A8yN >sF_pmmj2MQ/2A`cxDbd܆pʑodjƲuC!~dRj:gd{\qdsaBN~xF//-LOM:y<:ӅC;ކejk)NZ.Jrp).ZkbwӶ]"cO$:!Qln>A=ux%D էC?aFAv|چ:œ4QGQ}uk\XfRE_?MN~EAԜekqXY8 .,jaCnHk%2 !N}7"$= Y^Ru,tXTx(M~ޞӼ9'%8V|#SD?v.C~xq?θe.q}QZ${T}ChQ)EPT*EJB ƾ/u`sϹyψ99?Ͽ>MG=2:.wsiYeM&8j\Nپƌ~%)] m[ --ؒrV(`G*fdY|rz%v16SUHB#'OO9utP9yQl!_FXt{_t!dzxϞjk=vn)WGWcYwq17c_S}z+82+84>nO@hxd̊[a5$!/],˒/c[E{OsDVxKmb_}mUyI쌔X _OtùC} f8H 9ǨBAé38]x13 ߩ?T?!2+n_hS[YuSإa`י@pp^W0_ B_C=?(,<'^WPL@lS:Iv)qUU --~plϝ9yè0aMsV K-At 75FPWe H*H,xT}Y;9ZYmR62m\3K9OPxeJzV:D\^Y1ŗ|8 isY'1׼qϮٚþ"\ .=Y}-(b =ЋG#MZslS GW/`\pD&oCqIYf !V RHė̗W4+"a[Ȩ@?ٱaVZR%ᡁ>vVfsfNɩ?DPb #UƂ]F@/(lbꁩkعq?C/ M+4sU(R8U6۷wy 5Ap |=]m-)&jSG~ ;/Ctu1 --9G1[9y=lE*X9 qe5w܅|Gdw]s@9 ki&̹ --,p)e7'{k S}qjt?V`eggSҝM̭\<}G,MHN^[PنH yBAރL} KL~To^ --+HsS6LM\0$͉ 5 G1%Ey7g P}-B:J_`(gdX\}=d5Czeːp^]B)C聵U۶aQ Y1?-jlh3a<Çȳ_e;~`VǟP٧󮬪) Μn{rZfNMb'A#wD.caQ;e,̹v,d9:,et`Zt8NvtsfNbGNrM.9x(~[et 1Y;{'e/aAnI7ԗS/0͡/?d~sZQ./-ޘzы{9Z026PRT_~ߏ  -- Q0bhq<70t@?%=+wqPQ]goq^o;BwWٮ]H5W{j9IQ œ9Ր*?F2 --0ݔA)[~{^(5 ϳutEC ^r^_ --+o2BEγjŌEWU^㎜Ӓ>;pu271fL2}{Ȫ? p7srY$WX k47#w;8 --˂T={&&E ;WgOk!:qdӆ쌔EpʤZcUF 胂ihvNpu@Tں&c@KWg=#9ڝ<d88dqo$Yq].:`B\tdxh *#vY`85JsA|+_U.ew{>gNu,F3f[;{Ϗj"4ia9KJ8WtmƌƎ;|{Mey梂5`I`G[Nډ^ --ʾ<&1tfZ:y/XWV󽿙划vM#+i?2yL=!_o礅LϝondX`1i޿qKY˖Fz[3uƓ ,Q/f(?:uOy5tƦVv>!#̜|X@__=y?ggƚHcm"R4c=TB*{T]PS!'FU)S.)~.S --933c\o7Tz?k3s4xh@8f*I рrlcH0C}(9D'Œy8S&nU&<(azDxF)T .\_ie븖QWZQ]sw ^%{%t<4m: .險 --{~xV~^0쬁}C=mJÎu<-;ǾťK Y.XoGmVo mY{; Kk/ _>wvQqDZn0ij5U`E~nvmCoWg{K衞9Rc`=F<[m @s *0@@Nk;ON;!p@TޏE{cQGJ۷;~GTDh7mŲFzh*( -- 0?_w籯0FqBI٧M-,<}C#٬8I5\¢ʏ:1iBz 릓&QǰFQ߼U׀By2R} zط0#/^ȰFWfاdpSeQjjQ=|B·%%e+(.?I5},FN =^F|D/^p0E$q~ybyqA]1a^\W.[j=Q2qb"Q⣡CC_y*}rK;/?@L EQE p,b$Dq HPT%/Pv= H|6[C05YYj pciʫ~73)?j^.jc(m:H"ťYʺ gaƮC# v~XpJh w>Ҥe(i-Zkfm?(,"zgޔn՞g-Q)H|@?!a/["^X!Hٓ}/(&sWz?Si>#/&-A~ --/x*p{wA5+&L6XpN&a v͛]VZnnbK0]eҤ?0A_N>]q,9Xčhyoఈ(ZviY9\`}["U<,…6߳Nhx.gOGܰOh&r>r0+ A{{ IF0U%ɫdC]?a$% --ٴt  %-fWžhS縒ol/dq. xӊÎ~-֞b-ٶC0 ZICrp48E6m7۴j[@9%&  --!Z'j$k/e{+".];} `Vjrb\LdxpC uUCQ20?`Ϟ3O> ۺ=Ї2:rXII\O=s?:Vd 8zx 1w,ƛ(l,GR?0 :2<n%idrtχ)tpS}1} Rd,t D ;M,̜_?Sw/=y,񭖝rζjzliޡ5 22DzGꬿ icP(6cULi 1(/<[g /[WWtr2R$쌊 rwYcgrRC%զ(+bIԗ=B&}-]ҾV }$~0N9y>|"~bNMЗPQPw 9){hmfnbVdϲ=#FtsW=cş)wuϿ72-׮`Ґ5\E˽6T?_l>z~MueYqa>2Ǽr'UdzROؗ)R_J*fQXmo+[un}7oDٿnll1gk2/~_̗By9"APĴ}I@ߍnkmV`!䇌cp.J{om?-'+}NJka1^pLMUEGvXOA$[٦/"c19"halê>;7E+odsxL~ߤź|.w uzYQa~nNfj2I]!þ a}nYsm3iM-,mhyEF#ƔeI,oc~f9ݿc~/З8z&ՌLwDx{m,-p3ڜ Θ?8h$0M+o[}̜et9> ۉe;QcyxWTN߿'aWtdxHo=436Yh}o| T --iuQ;!B0 --})*jZzKWZM۴ /.qo*bwu 8Mh1_Mϰ{f:rCn+AJMНJ!EmE%ERvUb\;LņkGn~ص^s-e||CbUϱ]Do ěǚBѷ+REɒ֫76oGtho14<m/~XL2a˂d_ C}os%G,|Vb)WXА n3LC41'V& *}_ _> --?6>)%-t> --*>׾G"U}úbd =y>շ. 6%obU_ EDX`Z:C$Z .]\%lj/195C --Qd4_=wosS!x~h=bom2@B a[ZC{c|]X޸j*ˠ&_¿uA7G<TLukV. [1`ai8|ؐj$T~~P_ mCJs;M?&,"2jktL,>~ȡЗsx}c%Y1Ɲ|·wgAB}Zml}2DP]>fЂ7-mN1ˏb]&s=Ec'=&=[uþ Sl8GuZS#o {>#6#So(s K-:xe!Q76Eꇅ"Njg3a8P_D1Vs7MxUONMlj~u-5 }[7Zq쌴0>qCD -->;af޴4;CU_}LO ߡƿzK72k=X0a0.}=M8b:)戨IW-[iaoXC}b^ --~(W}uM~~oX}Q}+k+=^p@|/1p3 --o\]{/ĺWS>a1J} --ݙ1{ؖ,vvfe9G߃F[ 65󵞒 g{ݨt 2lŸ P\g;_/Ow$?o9 --\ola{Sfcy-_)n)s --YeW^د/6#8"~fƣ2XWbWb --9vy27n Z%M!{z٣mߵ ^^!A_e8tϞB,HrwkJ -- r5:SS,q%i^"6lHI_\Q)h"ͼ&g߈a ߠL _  --]6onbcO>@oʱG/joq!n6Q)edcV7%+; }pDNpIH #h5DVH~C TBe&B --eϾ~&@'>r|/xw8}Fj2u&K}yPv6-dڛIM|ɾ@ &%7B^L ?4qɲ1I Xz'NEyqVf<~Ř>=|nT$M֮?o˰ž21Hȑ6e6hcV *󊠼c}[T7d݂>@Ǫΐ%d.oYD RD'NQmߪ跓!AI}wr- ;]_, =9«@5v CI1[6] ݽLo4Dϐ6M8ڄ$[M?%ᢧ&Y"bGFmݱ;j?HNAq)~DyuM_SYװ3֧PHKIۍ _6?ᵰnAH)7oo NVb`o7m;NK/W MzЗrDv>] "+P˟Dwm3=an %.!PZfvnBUţEtf]=+o`;Ik>آ"Q縺8b36>ʻC_->p~Bғߧ )NgXtEXcԌ\Sg@+yW'KTl}>/CU9s@;DɱSڽؗ7oͦC?J.^~KWK޾kbA)a ۅLt!W"EP("M~9.ݵ}@?u-H Qo;W|ͅ%@ߞC> --;X,8Q~{RWT( Ow#lyٙi)X`sw1m*uH\lf5:38bu0V, Hi --a5T  --R+FcA@)(Rtf{;x4g ޿myMS_Ӑa#9/7dQpYMwv5oW+ {` bR3sN\{6Jr)'E -- --p~gs )} kpɶvrq)rkK+9׿U~khjl9-+KKf`= cb)[GrQw/A  m Aߚ?c|>t<CGUCѿVtVe5Aj^E_+xbGbԤxo~}?4ZE,}ɘegp\ھeZfyIU}a>-Z Bzp~qs{(}eKыwhw> /9!6*"t>*`0;zwӋ b$[17 R|O ^hu5\0m`EF͗ |U)ci 8~^vfZrblt$8X[7Iw*O@;fQƈk]\d>|C0DlãM`3]hE>/sBGp:K̙1f"T} #bVD,U'982E!Q moC &xOɲ߹]uHcG#Â|Iq04M:U> 9/4$5Gcjnek0s¥+V`@OJ΃QtfELӒ(䓝9?ѵ*w쇅!fO7' rwPs1vPPdi2 #{Bk\:l~!a6KVoRۂ>VDŕKAxX…P .;A[+s19-DX:E=mf.2UoўD20ǚYBo,cvR /~@{eeZ=vpmE#xb8(Tξr,BDɜ#.`@l\jO`1Z~էꋫ 4))Xpeџ͢.2:"]tZ}r kYIcM5«c֬r7m$+ ӱR)ҿ&Vu:*~2e_0 8a}"bIM~Hr,/+!b$[TD}ߐf8.E}ݾ\[:U? %C[G`';3`B 8t$(xO."=74JV>`?}֔,d?&*B¾'Ǿ e}=)81et:[_w[6Ok6l)FD$$fk]kͲ_-Lpk Ν an:vCdh U ÅH Uk ΰ-o CяMEC --}{N$Ct1ȇKr,vb|wEC CSįi9,8o4@OR)~ֵ>A!򂫉.0FD{^8u¥+d #ZHJ@s/qh__'Ϸ9a)~>[O b_cJ].\P[|17}`i3O/[v#,ooU\ B.6oXEfyL`g %q/1-BW7Vv}H.Z\rȖ 宙nFv5Ut Ξˆ` bMH|ݗ~4EM1Yɔ} 'Ş워3=c5f"-3s2P D맟<K/p"B97ae__Wd_d~ImnENs,Y)!ȱ_9UvKAXR| kW-[<q%HII[j2 --o@Чz]EuWf;NB]MuE9~"'3-{w~s)N(2_7Ť1ӧ! Ǿ{h 0lA n kr͜p) '\|/g&'FEҹXjsf:ZӒ8h`?/aJ \:b%~;Y&B4EA --}D?"*_WsЇ$QוOO?[7$)rnCu~ݟ^k*HQmr|OCF{ --A/`6 >Dg7wN@mX?]|T?'PC3CR> eM}_1 ƊgH;c_AĆ !0 la; o<ۊ~EbS~Z2jppLw7gI\I4oBIT(x?iq_/^5kWX2GMWPR܍0EMMr+R!KTRB>55)1q,˜3kfbq:{-V߼y>aa],nїֺAO[n~o\+?7ltqcb\LԲ,u m2Zu ]l SCǞxPhO$`[dy4;e>re>̊Vd?~؇2sA/P} ~_wVƾw 8V|86S 1ٿi? -vlݴ;"r9GDK(2/z(X%>+|u` $"0I试D8Խߺ$id!Ȇښ>Y.m&z EoOuO"_PׄnqOK.L 2!2t'z_51)%uٹyLF?@,<{u|x/8 NAc&DߍϦP؟Hnr󎊉KN9_X.,)I /7W'iShIyPt 4:k>.tGi]}?>$Iп߾Kv[~t"F_o[hϞ4a7޾jcyٙ٩)I+"]N&_7^&SEm=0%8#:p Z0R 9&%&o8-ܥoh,!B`ob7 --DO2TjObf_E8d9dsv;4fnO+c9YPA(ôohI@0YB*E_[~c,2Aʵ:>z}n,S?I߻ه۵msr"lK͟l5Ⱦn{.twΰ͝x_Rleb҆!14djfz"51zMz8wO:r 3Q lw &&FCV`6$$P[^/ľe?_ʾ6a_J.c!O 7cH yЇ| vDbdqХMy߽C_CZ>%s;p/?s ---174vю}^Y{MT_w=-ybb5f=q4eO@0`@6mݱ'-棠\S[׀XJV41grb{â{I1)ʁv/{AQT+/"z/If'TL/n6~o8RwMˀ[2x诉^0:8 --f0 !\;*A瀠oC}oAK7:bC7(q1Ɇ LɂGgŶuӆu#laA>3]C{͘k --Q)щU&M[ZA50\ݼ|&_t؄$h{df>RS[v#Y'ht<#_U}'dw}8}Cʾ`O+.HnSuk>`(7mɛ)M#2tR7''Ư^p3g3a(II$^/HK$<'rQF>SkM9\,xtqa^nv1%)!v[8s{MbW1OA<1 0('˜8:p:7b񲨘8h0#'#RQU k J(ZAgcÓ?J>)yzAsc\C --}eg_5ŢsB#:1a LD  |>~1U}$CwSR= Xa֡aХUIF]䪫*.++)?}]cbK!FĶ~"{1d[B9 --`hb'OTA?3x%e{ ?'#pœD0> --gێσ.JD {$Icߑ~WL_c}S@z l4?zQ6\,p /p&ީ)I VD. KSl&5Sd6(sk:ؗE >D;i3~u Zƽ_x^u/>o"?B>[0La ϖ@9)G lj[6m4ԇWaRs&.(,U"=&FNCcS3[{g"<*6!9 VT֜or[ dpPA eǭ?q,1Q"o%1$Cݓ=Bdݗ2eDn&DyiưRrٯ g --|C_j%[^kR}b>'' L Mlσ; _Owˑ=,z`oh$T Ԥz:x6urC{DEV M8IMnms7PDtĬSeU0-ͭWڮwaȫ1~v:a؇@gf 2!p?OyVƳ?6ُ {gӭikjWR>a9e_o6طgQegYBm=E%l 0߉DϛM} M@ }40 O5%_vbsgNfq(?oG;X-:qy!Jٹ6OLQ!'`ܐbNnIIL9~khjty& `؇q}މܬXdߟdoK71쫩b]G6Qe}w+,U}~>p ր>hA&E9З&0D>}̜E_ASWUc'[?=kG)̍?7>bee8E$؏ af(} d --H>㾌T}blL{13~ p"nC+0sNInxzsП| s=uMMuՕԤx:035`d -- Q\$> 58:F&-[9 %1*6!9- ^qiEU/jNfzѱל3=S``+`uW"}+(Ce@p8u_؟Ͽ #ľ(Y`o̠pҖ/}7,-͛wJ*[vF[lac q ɩwA;L4ї#?>{ --a}=7o]n(-8^gV`9T)rCsM(EJ}BKGp#rgjq(":./G;zA]S+qn6D8$q)0#KhM\N[Z);v+/(4`WPtmr86#Osh&e/"3Ra0У*p+*g%f_ݟ7 HSDgqB#*Dt1s_@fW%iS 3b  <"ճ/\q}򷷗{B}3e --!#A~d۽k6 D__Wkw+ RĞƆ(J@ 2E`7(#0@ڄ 3Kή^'f?VT54\ --yO~xFgf3>QB~bܑȰ`E];,Ru5ג +0rh U(Zܠ#.-Q3Or/ˏFxm]=# vnGva~N^Aaq)Eyj2i}C v7PW}NHM903ŋME&E\WnӞHx"iF&p*{=|B£b2 --h 5utu04LN`pN<8}pٯ>[^Z\X C]w }Beh=9_ey`>xe%_/҈pчId]}i,F4j>~?$~*-/5>VSſ+GhQ=}V z797PDt\ggK+tĶ_{g/yjt,2r] --paAB --B\Q0QPV%:8AhfZkgLyweQ,|_'O M5U̴ ,$n \$Aw@ tOJ&w_M"*>Es1aKC[ --Ͷ$h~PH&M/FE; )&Ac[8z$vlps EV>HW/:4> .FCb%o(qq,¤q `E_^UۈT8y,aLpcfxjsc~_\I0I?Zma, 0H<%l$$0s}"Ȳ?7 s IL=Xa[V"k[{G/Зv!=yVX/ohto)ߝ4o!aƮvp̴hiǁ~>.mİf&$GCw8^Ǜ}&  $(^m a?܊]N GFLޣd6wٿd_Q --])cep}j}">^7Ycư؟' }.g˦ՕSD̠aK~hT+')eU MjyI&ic#Cفӧj(-ρ(a_m0]%ˬ 9x.?5I 8C#b܂2CgWϙ>KW _ @=o75VURCQ8%>G8a@@XX:}NopkmD}ϞrKxqM}g€Y!a XybJ:ɸчK/CW/]87w`]5kAnV:DI:;֛BA3E]q񩊡v}>тG#b="j<15#;PQա4`@qĝ)ٿ@D8EonP$NOI12eGFIoan*4A@t.(WaQgꕲ VзŢO̟>}.o"B@}'g9{ ?/_]ۈw"'VLܾi_C!̞ΎD(_o7H1H>B%4O9XJ0Q p9hbfa)a/'e**k<8/^NM!Ҝe)(>>/ܛ*@щtA%d_Aôa5px.& EՌkDJW$D2~=@i3쩓?_V5R#t]#f_浫/0w=PS YiIۃ=\$b+̄ކ#(2"WߌT1\쿇%ba(qu+¤q ɻ’*ɯz)Xq+ 0I͍ude&%}=}J` 2}@Gf --l`p`u`}H*'E`D4[Q1q IY%n# --)ZA?O$菓bG47Tݓ EK>*q$a1FnOPB/.ttxz87Vo ߝ_TZQUxc'`do*`G?B?ϲPc݁}%EYP!P ?/Zdag --_ ;r}3rGdvs --/W}=e$WV"kf_@PHF_TdU ? bgqSO0kKsvJN (>tuvIb132|ד׽Б-&W0%_kA(sTgVTlim?uLexdt:a_ ͂ =݄*K --r3Ӓ @L-MNhh@|a`X,u6W>g@ ̢T}}1܂%.,R[PTR^yxwϙ>@"?LQmUܿ;I~A=; --aVWb9K,c"C}x|G';k4] S%t/_O9aJ/1Eǹ±2[Xm --7oQ;剩yeaZ;`9b:=`ԣ,=;z7 x88TB(ܕ !),y yBB}(*t2}pI --Ker5shiye E@D)'пG?'Sj_7>Qw]]2yB@@(B<p QP(@jq:- S[9vnM%sqwM gw,K)Q;')EE?NJI͠PWhpGFp Gf7 }y (?$ƿUѷI,H.)Myiaa)`Z6 -- -- *bTjR[9Q =듧3`4}.] ?f75ijIHSq "48sZTe_s֛PL?!7oCC_ra&p,N-lz"8e:-c]FS;z)?ѿѿkb6wq,aZffG-8~?7;3-%1!MA --9Eigkd ޔif0`=$UNRސC7G*U --PTKV{  S --* 23MĐ I U,qۮXw[xH^ --ƾvWZ1Z3sf51&yGh賓ԡoi%"LܥQ,s+DoIRgnߙWtoZͧzN } -- egNQG5fVZ,=*K,c?0uOO4=3aXJ1gQLXe5[?9ާew`(N\qٿe˗>;7`77B₼tb"&*",$(oHHTX(Z-&ܟ OCGsPD[ME臄EDP9ydll6D1?(ң!>89}NX,+.۶&)c"B*,W*9Vs֡?Sбϧ*&q+/ Q!08,2:nKr*+,)xB;G/Hrڍ/t21Tu%3}cݝDEYqa~N6FRxaSmYAbX}>g3s,f7sb|&tiN?7vsCHCRqXSvNR$CQGF&$"ˬⲊ}>G;q4}z/n\cq=wXWGƃ@0o' 3wtq8WXFQ,I#C)MeiBGl8^>A!'&fl/S^C:ցj_FkBSӲԬTg8P]QVR *RST`?2Vz{2đϹ0/ڢMo~?/^:зyl|:Oo_@R5#7Sg>yM%&G+T'G --G$.YU^9=#Œ "9v#H=/yAma>XHfQ!Wxxm --7&>1%-P]M-mݽ'NF.r96$?Qy[q@ueyIaRA@_pʜ%b['A)h:38aRS()_x0@>"p.[nc+F2W)"8JA9bUVk~+%a| 6rl;tY3RfxHBNYz"?_`i16HvӦ >}ZԱ?{\ +-B)bTt(khji9qvQ"^C/ UӅdSC}mM(ðHߚ#B@̐IIhX/ajU`Ooo?7D8ώӡo%YS~v) [rp{jj~[GW@lCWFnMoAg1m@X'b- u --fVZFW Y._?SS3uNB(R!v q$@eQ\VYol=p¥aW_߹;3S~=2b?p4m-͍DFqa~NvֶĄpBbZTh/_t1ʆw%`r|3SktáϒcYPvB.ec+w8׮ܸ)<2:6!1%u[VvN~a1%Xlag$ X9lwy%,+.۶&)c#BY }(KEIk4I=-q1]Ͼ --g V qv!aq[S~^a د=xCc2{L&d SO}"۷K twFEYIa~.HMQ)Fhp/:<>Ӧ4( ^ Q ᆕ,,,뮬,B r --\r }Y(P`q4b$CqM6֐I;5ujga‑ŒˍtZ}^}? C'O ڣ?WѧW+5l&-}3 +.yzAzAQ1iٹ%Gjwt]@= u{'oa/gam#2@?+##yy&h=>C%JoO9{iz Afh4igsynY܂*pI`Mff?}~}}FɞvFEiQAnDYltK";5t &Coc6>f_k]-<4' --Q|$%782 m&C{-M41f9pF2 a u}m@U5ʵ<>5-(,\ž6&wqwyg..Ik .JTه)ɿݽCؿ6ⳡOѠ8+ˊ --3R~>R wq6榤o~WWg˗S --u[B_TG˷\QQhkYM-mɅ"'dUV T>E$on']8wbfgqA^v&izK7.fh@ ZILԵǓه)flw8 !~r`ʺF`at߿05>chũ@Gksc}MeYC9#,${N # ܗԤ٧!,?Raj+>zO-xp^4 -\vmي7g;: D;wyEKHN͐:\\VUS،=f`pMJx)_ӧNtkknCqiQ!X з40wa0ovi\jjQ?5-QVກXI=c.ml8ή;vz K*,klia;(W(:h>(ٿW痆< wwkki*/)L۟/&*<4 ]tcY[0!z` R&Y/t[LjOY[3>cY8\PG@jiY9%~SK۱ngtp4Jn^FW=XW]Cv{q۪\g --:/_Bj)+*};#cs --O/Јq ~ie5[{t Х,JP,ߟD 끦m0naHEia~n6D'8G* =<'2}<]Z5t_*aJ}*櫡?: --nF]\蛚[@`'cX" +KLI?_XZq>{EX/^'4o,24߭^À±ݘFL`P؉<>A>rB=jGpZ~``_1m_Q쏍 _m@(-*;(OOI{"7gGb&] [,. $QO4.}(w8+ؼT.{ !?WPTZQ]wtΞpqx]gF-\` FϑFH=E|&܄idfSE_ڷ%_SÂbJ :6DaОH/S2,*ih@_)%e9Of --OK aLHfد,+D bB}ibfiͲs`s]݅"O݀~hxT̾ yΡeuͭG}8[{D_ЇAtj$Pn9#[PTVUۀ._:'#w9@dhpLܗǏ67T@L۟( -- HЃs%pgoZ ̺`K#`qc??XB1[чZCׂ32~8BD --YGeB*,)GDoп%bOa'@)Z迮}HOESm]5trv --9SP\ZQ][ wJl_ N@!} \8$l5~ꊒ¼,@?6 --dҭM0&T-v@ϰn<ׯO04TR`) --U} --اёl_PXTlBJ:L5u!Gc7x[}7ӈ}ۃ}]n67%Y駓`‚|9l7ӁacM056=uGuݻvʿ]>>CT. Pw ,%!#TCc3 Árqcs|aNgUBRMKW{oY!QF +";;Z3%E~J]M - 5 --(My9 &}5X!D@ --Y*Ꚙ}S ڱ'phE%`&*1~wM`O9x}->db􍛽Ȓs-2na^vFjrBlTxH;x`gK?jifbwXG[󠚊>\wγcX}E}%eHH[簞Q#W%o9AI:.b跷67A*NOIٮ'EL --If)%V;ƕD bV}C%eUuMm] 0 `|5u0}Wqܼ؟xk:pd>y4k183&0}IC]MUyIQ~NfZJb\tDh#bmenjd@TtwHd}A=~ --FE㬢C<ҥP Lͭ!!PhD4T̜򪚺(Q_?~@ --׃x([]ƺb'vqjkb`wn" 5}?}e,@7'f >TO@p8b"#NͪF( ocrW_(0{0|'}{S_'7t\q 7 a :ؐ --h yc3rɏ~Ffb/E}M-HjhlfA0,767 8,2T܂Ҋt{nCHc_NNݻR`}_p/y=[+0e9~txQK3JhvA} sI'bQEG)> =c3Kk;Gf")w >?> --?`2xB[ksRY-HM -- tVlaM(:Hsnٟ&GA'Gs2UPO0_RK}mcv_`HxTl<[v^!jjnmpjWwO_ +2""G {7oo_l?X_SUV\' twqrdGt!NJxok迫'uT5dv9>ܝ>ܜ0 ~yUm}`jg͑n@GKSC]MUyIQ~NfjrB\tDhWYu~亿#=9Q$!U ?"OU$q/GƦV6Nή^>Aq i9E%U5u o흐ᑻ_LxD1b|;CD &<}]Xvi>aq3?LQO --42 --9y䄂~5 ; M0Lb"04"&>953[^]YS ܛH~qi#w21>6:<4XvP_[]QZ\x*&2,8vsap`if&zqWQ_̪/-Z3^qg#1|>3d4_KECǜE_Yz&f4-ō 9[P\ZQ][߀| G'P.!sS}$gVhZϞ,-IQ!~ޞ'+sS#*꾆Iu3ut3c߾?X}?&O(ɘ('߈fIE:4+] -- --Rstr>t:#;[Vyl}csk[+]{` )pxK8Ö ~ta?.ɀ~h/d}C*EGKCMe"}YaUwf-[ewUDE`߂FGLzpB#c,>V푱>o --E'$I'z^vflMUyIQ>ܝ qA>^P k!yPmκߴIje >D"OVM9AM-_OUgǧK)3(HJ]Q: * 싀oBAQd'b&jE K8bꤝ>s K)y>{`";vSփ?qᴫ9ЈĔ/,KS{xk{uX>6f'} Uu --8 siN?KQa3xJ`f(`B吆aC#sK[Gg7O$ao`0><|rFCՕe%Ņ/dg&gG;SfGh:Oy7J۶nބ%}1d' --(?^~G#?g> KQ]R҅@蟲st> S).)ű7w]xM +`r͆ku5Uy1/'+#59!62 澑>{wܱ2$?t(c /}?}^2S/c>/OJŚ?5ES. };wPMC[OЈYo؄䴌IiyUM }2IB|詉5ީ{xf,E$hkinbdxXG --V@ͪTr0yϝG_5M?v(Ȇ\f&}Ⱦ;짝ϦW'g}>RO00j*^TT $'EGtw=MraMuUG>.(Oęho౏Uٍ1?ȏ<#/0Ik|E_c諨CS9jlbƅPhDt\b -- $7NjEUmƦ xeG̝} <+~6 4. --wq2716d  φ?m --{AA"NQ Q¾a?; "~h?OƘf(RR\!;3=%)>&2LǏji"$ܗl|%$L DŽ;?>0ߙ1C_>LBWqSsKa1I限U%W .yp\p?Я* !>^.vV 7_C>,49G,/lr EdwugHNDK 7nQ$[Cه|-`HZR35%L^NVFjrBlTxV'O@hA*&t}I6'c>L_hZR~5~|.}kSY|i { 4u OZX:vu<(-!h?^-zc|c18/%gruwq05>TRd|D_S47G'2dbe_y?o[D`HD a?O6waH}dYGZlV{y2,f~.PqØ+}XSd}\ՙ¹dqa0Ҏg$}>}`> gOY;o4|AĿ }0aB1uC/ЈĔtD~A%EUmݵF,a]~}. 亊AE6DA Ofwu0=~@WK0OYQ?B?Ͼ _m]:I kwdl{O?q-nڗ 5M#eWJ !HSc"Â|Ϻ8`ir+?a/ ϸ?{6hcR}Irȧ] ~A7ߍh>9!`/V^kзwrq;c̾pJYEumMC_C{ߋA?&"$d߯LjZ/W\nS#$(R}iʾU --mۑ}Uu-=d*WP<ӽds&zZ[`7nr2ҒbCy&obLr_]4W_葕A},}I} a,?"q|D[Z>߅(>EC跶"M7_1ѧ"#h, _}e}( }Wws~!Q i` --5u;iumk/ czZ۷mSП/1<"{+ɱ ;_/^JȰG?}/04R}'wubd>|@xKE NzJ"Arr_hUܗ_dB?.ues,Os_ Gc߉ΰϲ1O$q, }eG4:k 4\K-\d+q`P 7"߫? iG~"_][K§&kk[p=Oo% --7D4kPw>ddيCE'8z]h?@bulIGF6-zJ| >4+)!51,׭Yrf?j0w}GD9}ipτ>4:7K}_w _GWV]iB~s_h|,6?=N4gH>l(yCBrͺ<0ȱxlK~U|mU3m PuM ?3gMC6uԣoW=wg.aOSWw}/XnVb?\>I3?4O}ЇJtiDu5Օkp'9Ӏ'PTdwcezܟc,T6VJKs$?cSүe;%~uM ǯ//-)?9C/>WX*lTvN-B,oׯ(:?}lb2\tWV֩ىj }&ݙzCϔQ ?yHB'CHJcCG@d*l;{Om9cC;}> c=!DbT`}4zVmuUEY.7\t<#a۷_<ljmUVJ @}}}_t}?#?p^%e} fV>tZaV;`' (߾oo=~<J*)k<п$Eou׶~8uӺ5+~!/:ɁoSK=w}crmG1'_bدձޣ-kT ƴH\LJL?})ݵZYr}7NlmȜg&ߧ]ecYz%#3;eB,{nvfƕT\g0"}\_m|1/7߬`TZ rtCk, idoqF?}؉ xe, --P;q8Օ-GstO#3{ҟtA&_~Yd>)a * g3?"#"coҖi ZLjki/&3bc!e< ?6 1cgJi<}[pŮ~Lӎ̚3+YPXKJW -- ĢEw-Џ$37b0_aQ!@Oo#' --?,7oݽ(&6ݵ/Ѣ]UK'N͎g? ~a/ӣ??wv --s~;3v5N`ނEJ0D2j&/4})mw+ᚥ/(!SxWD>CAzlOo7B?HDтyBw]kξ d컸yг?l~Ec7?/>L˴AM,~N|y -"(Qsޜf͘7w;Ji7cK~S`^~{B` %7oXjywCGg>}2BiewcƎ4ew_S!7RSӻ --+}t|)%5jfv.C --HpG$G_GI=@ Cg}4`#<S~1ՌMeS1Thh6TUU~>Euq$tRq4""kCɾ4 BEI8*RE.lX1 A1%rfjj~ܾM涂m8/8<=W\FC --6+ I>^'l,/ХiO@3uvհRͭ]]pwv[qaqW0tKf0bf54,F&K,l.w{!B#Elo%GJ5п|5M=t}I3K,0 --9731{rЧ(6僿Sߣi4JS%d؟a_eg۔dlTc_rWH:r\"TW#~|aRtDromin hkRϐw*1_UT'N6b> *"ā}E}/?)rO?Q|3sKk/B?,"UqJ|"mVѰ?32l߿7xwn7oHs,L:͟8Qr?O&prVp"#7_GKSC dws,RKW/CME_Cؐ?>|l51%W,LgF1 --;H} rr 1-M 'Hrr?26:2,dE~2+%p߀X>6XYHќ|DI3M--8--Mg`> }k*?7EObRy9Gb\j|ܩ7]baev7`EHXdt,6%5 %5u'Z4/пNj4HB]L+&Ģ?HQ~5 .v#Eg?IQ)%7:b)$ZXg_:]X>}BCu/rO.]lokm>sqC1szT*.&*"48_hܷ&F tᾆ<ٳs_ --9~h(LI$1ZYM?Y4sן$Wӻ=Hv7>xIDQO.}jٌ5&0o- [%;j]FvЯ"E i}!C0tӝ蟕GRm1@_Ko/T`Kٯf?g>_6dުaWZEWK#' --M[7mHK]+  --zy fM tu55gruoS wkvSP@Hq🪯?S_ --ˎH+*س{'O}9SygBB̜o$pGbVelؔ|O --hICr·\BcegC_4[\ľr{.2pP*|[z/b?eߊ1WYW|}c;}=xṟ>߼1Q"NX"Udv_ddPyݟ:r#B!"y_/j/ua~ޗM"D@_+|Eșa͟O7Z-l.w{Y N*sq9R1g/w҅C+3"e;#_Jdc0o@_ƒ~3؟; --%(/2^e꨺a2Ą}:#bn9rJw-Y2֭YCޞ.ΎRRPsIodZ}52Q_ hE௩WU-+-9՞ܜMQ*(̟5jZ0BoDj?084< --ؐ+E rпIC-J-Hѿ+CrAqEӇrSQd0gΰDzhsE^hwrmoF$%NJ"C^n.v|+:LFT`T^rK +*+*++G$0_6|Z&ELWe|E5WN%|Kb%  -- '$)7p/}>9YOC=Yc[=ĢGѿΠ.CTR_~ џˇ[Q`O JϒXRa;),䱳?/hB 69/A}g7tgYpjU+c#‚Wxy --}C}='?f?/Sh϶nIrHRr(NyyY!b~ q2 2D./Oc̟h67VKwzxYJٯ<3ӝ^ծ3ne۵ԓ(J@}W!nˣxtڝvG^ v;]wt?~"pt`];}ۙ9sgUE%JoP5MZm3,QV5 h'K`'s2Y }`ˍ;-e-`]{8`EF&㝄Qj.ѐ|C|B?&:@jTt}>Paѐ菒跷43B^nkxiW U~fѳ__?a?E?"{@ܿ4{t4iZ*0JMJ d1nv"ݷl~oӟF>ω}GY!QB.r_ܯU7(U*ZQU*eC/m6f#cC0 }sJG3oo`G[Ig"cRm$_M --Hпn.):7iL}/8; --wYU/]S1sthf;L bRSOW2M!͍ꆺD,,+)fgX1Q,_+clU:_57'?g>4:~B2;#+ܗ:/ȗIY}: П&ge[la~wu}|YQ1pufd=,d5u CB {#CaQߛчH?2C_c>j_ZD9YJ,1e?ee~ ^4wWCwN --1 --ϐ}̀Ștԩr_TY%5xU2iURzjR|LdXpA^@,``oH_毀X7AgV09^޾LȘdvzVN~/(UJkmK; --c'!ϑ cPESOc< .;-3z09l7FE5/'3s --8|AE%fـE5cǟ Rj}ľaOL'Fz:ښJE\RYQVc+!.:2,$Пߊː'tR?vFFD%2aH\Y%HaI$UbQ Ǘf;%1.:"4}ɖOgӻ滸yxy3!aѱ IiĥYZV!k 涎& --(ۨf1TQCס.ES͍*>OOrSke䯄cw٧a#Wmұkq2g=Sp?>G]=|PFreqr_$S!,/EsipcFCÕ b?'l*mnێͷw IgC#bR2`8%JV]%mm=:8||rߠBA٘ ÁfH"TD0c}4a,Ο;sS~gF_j~"e}VJkJ`ǁs/&ٿ=6~|ŒX|=:CgQ9ҤQʥrxRAr ܷ߃߾mf#QVbܟ&,sa؇_5&>1r<~I@P@PZq9`~:; @@ioMOiJئ:כ1la+=>(6/-UJJMSK[瑞c(N --1h"n4tA?X&ч?><׍W"_s~ ~FN>دV(5io07QFwcerCܿJQ}]͍E\"(+q s`q1PL_:ݕr G}<fݟvwpluf0h".ܢ* oOwg'GLijG<30O64uufߡ7ߝ3W啖U%E* }b*fTk!071֣Q* s2IV --tuIb̾bsx^9:}5&l%fxɒUc9OıFU_W- %Ŝ̴Ԥh &; #ZpdOrb̂͘ ?0~VNnÁEOܓ~ :AGiɟ2 _Cvzmu;鏞GLM+ TɪUmK{aS 0>>tw(.]ӟ$ojuRB?O}G.gΟ>dC8FLjD"FT@\( {aYu{>EQXI0Z4Ӊvy .6ϟ|?(fw?@'"F)?4:~ ؿߟA@31jOMlstxUX_SU^*s2Ғ<.'"48微[Dkac _7O~Q̾cSsKkv:gb"~n #°LgOف֖ 0;1|运|E/3A3צ\ay}~|yW>/˾~KWPTo!؟;DEEÉp!ll>2=Ai36ͱ';d ;4͋ S32sD%u -mݽC#(п uPch'Y1m~~Fa(d!*NԌZvS}?P?F(}B?ˍD3<ݜ6G~MHU¾ž >/ɍ'dd~mbop[` --g)oQWE+az:[5UqA~ns 1Qa!_hZ)=ڴP߰~}WW1곿{A3 +c)}/ӟa,/n1k+ Fz:{v ߡR2(a7|(3-`͝g=!//JWw^]=,}SSb?42:6A+K*).NL^!G2fGyU>naoӹ?:<&mj,+)*df&'y\NDXp{f ܱS>>r:JoDGlG%wqsfLJBo{T9zEknGJ|Hd36M-d>;+(84ɩ9y¢چ&i[GWo(ag`+}b +7w=4W''. WIB g1)}_n`@ƾ=f%3s~M};0<6_{|zgȫEqܟ}Vic}mUE@,9N724ޥ&> -- 8-~Q-۶kj}Ww_!:9{xxzztB.e^ϴ4}&\J/| !.0ߐ6q|0ǏΉIٹ‚"IYEUm}o`h0gp)_ >dx޺yꕉq@/f'##ހ=*oQm44LVb?#,,췴wW؟!d䞷`,>׮N^4>62XWSU^*fOOM$DsC} }}{ж Iqk,~ --jÿR}SEWN;8:9`4 --MB/)eSm>(eoڵ[{/7#K|70 --dGF%Rg%U5u-ݽC#c.C@]Y/}5T=x?ٟп[Ņœ̴dA-X:}uUp_?kEL/]/(~54u9}K>'gܾ"g}v:,IP,D"mE"O_Ce>+(*,4_|BB#bSٜ,n^AqiyUM]CS |gw/ܛ? s?=|%oC+Q OL> Aܱ!@ZA0/G;}ѯ\F?a_f?r_@PHxTLBr:'; EgrzGK>}LӏBAn}]MeyiQA^N'=59!.:*<4$(0O.t_Wd --~0K,T )e)YZ.};{G'g..qq`ogØbB_B8? $S)us+(*oM? --{1GE%$sr --J+k[.wCߝցKPK>2zzhFamkms9i 1~i/G}[k D_Wї^F=bP} d_XNq/d?,*&>9-#;ap-p^do%\rߛb)d\XvGz:گ67VWde&%FGS{s۽K_ O/+x_蕒}E7BnWPRQO9bk1oae oщG}@^kwT<7RD --z' '_8̇̇wk׀?GF&$gdUV76^i߹xXp;TeЇyR)>G{: r3ҒcBxyG=<WoLrw 8U"W;{;@ 3ܧrB?[p(qUpRmuEYIQ~nNfFzJR<㾿(-) tvji8 /W2oHk ٓcggkk[1@ --}%bf)I|MT)( PSءSG>}F'l7eȋI)iٹ%eյ8h8L;T#wXoa0cLЧCt[90WZ/Tp2Ғc"Âx]h mEk`c>"R3~ͥ`opg,S>oH4sr.x|+MpxܿWUfgf$^뾍5oJݩخ?pÕ%_r6nڌ+B}#cSz/9VV@ca++n"yFG_"EG~)W0V0'櫨m`iҏ뎥H2'3eU5Z.ݽ`w'`In;KWD/>/sjFΓGSf;<=~>7|Ckk‡\UFIľ!Oط's KLegrJ vt K?#n?t0h>xH>;G'.܆0BhoCj*J}nv&;-rG!;:ءf >}JtKo_$R z _n*+Ů!o[&@.}fQUQRݗuD/ "$'>Mɇ_|||xpexrij30 _͍rD(NM t?;X!_I_%}s+{IO3C#.%3s꺆f`w`ht >n@3쿥/s~Ylcr??ae OMޟwBrp?!w3待觫k6^o`+_gBNe5t2~cSkGOB_nVmKK (?$d_A+S a1@GOesyť`~cs+70ߺso1Z^ w _xC%[}גvCa+Jr2)q#B< GM , uo,}u )W;_WXBvhdlٟ| z}M}2!_<\p#QWZJp a --J}۽Vf{Lvخ --*`oZOÿjQd]ܰQz̖mZ_,(+ x̘L[dmfADDE}_DQ%7DAwYDYL&5TfjsҷMI9/ا>o --1As|=|ҡ݊BEو`A_߮H|YI_ɇ_3_4e>|48̷oݶ}.pGh/7e+ ۞00"C"o)GIa[j+"^:s"+PZJR|Ldh./ --}S#&sGy)0 }B#bS3srkEwKWjZa)0Cãh#LG.>erԛё!؉ޞNpFTI_ܿ||>]Bߘ5٬A F(1 n_}|IFF<qI 5ԗ}e~JG>&,j˘. \VOߐ3 `bsr`~|QM]CS ޾~<#0 )63̹G/Z!1M "@nq_wqCcL}]̾`/04":>19-pVܼWb*DM-Ϻa-f --"܇@+pjk}] KAGZ[Z p~ --eK"eg& -- rY<65?ccj_rCo```#P^B_>n ˱ϦŸ&ŗD>?#2 |D>?l >pzF<N+c~eR.n:"4з9>za:G|Ja[z-Ʀ;wDD%&O?|3g7nݹ_ZVQUSу=2Zžܟ}'o>׃⁗/Cn67ׂJ ܏!wv,&F\_K_ӒU~+2'r>(WP L¿YGG>::I7ZC_Y(|Պħ#IR-MLkӦo5261[XY;"=櫈&lڴI<_E>q=|;t7o-$B}wˋGwSWg|}C.Ϙo&ZXـή[͏Cɚ60Y7ual4 }vlSEAAx>zn߼e@G3ߗ` ˿UGEsG)%K)}+[g;v Mؗz0ȱ?߼}꺆VXɩw?ӻAYC^|x=toqd?ݻvl89X[ --e+I՗)%_YH%|ʰ?f>a~M--j"̇}N}ė#>3O^ O}$3ᛙ -m۶EDaSͿI y_? 5aG;42HF~R=c=591>bG)P[ WK<}ؑF;<VBG~OW$mľb7 8,2voRCG?ZQݒ啢چgݽ}aXɩ4|/Ddv;E/Ftu-M --'%ȸZ[YIL ) D~U*+)P/'˿~}cu"%ϗ?s*LU3Rĝ$"17[XY;8;v OJ6&^d246O5{>>iix`u6׊*-.V8y@jȰ_o}3>P_GIAysćy --LN}ȘI)i2sr --.엖UjZ;:)G`G޾!GO,؟lSY?>6:zP<IWgvF`p{'hogc~=,Fb$/?0_}0:|ć밚@6B3%՗>Xg%_"2_ wtvus@)km|Q 6 1z#!C_Ie}rQ@&2,k o8sGjIUY_Lj boi?(4"&>1%-pV37nݹ_Z`M`K qm2 Bg{"H~}U}P1W⪱&{͂ --`CTU:APTt)D5JUANd3!PE||)i9y%& Mw5oniu1[;Q1tw|xvW=}aFpСO |d>d؁C01vQ~ זG k*7YIQᡁ~G) t5TlK^ɋ>:Ts6 --`_r)Fܯu?1 8C?z --`H3, --T'd +$*1t!l@UtcAT|^'|~|IiY9߻5|0b~r*12^iكJb~0ɸ`(0i&Wf?& }}eT0hgO;;Z+K*VXd7߷ _O_ΠL'4kcKJ*(F{>r7 8,2&.1%=3;bq'˞TH(ЮPæPB3})dU('wHaa>ss(b#)OyQ7 --)J? ϥ~^Va>>g>/_5՟bB?d>"_JZV4?`q 2㔷?1?6.!2ac^ãxN&fSϢOO2NC vnn(+!fg rwq?~ oj/Ca>þ)1qg2s/_~NIYEUm}cs+tR7fлHT"侈B=/p|f~鐠?/Nvǎ@[B4O_~ ~l''_I'>>|+s9'7&|9HLӸ?BOϐD>!b߶/+*e3͑c8iOGF1c˞^da4lǘ;lh9fBw:n BywדƇUJܼ~r~nq}N81h(Jd_rLϡVXð/Mvqj e+ȧ, --}1ϟu_"O~߱ȗSPTRQUӠ2߄|k|wO/b٤LwKS7";:v ?*`>dOY)ute^ݝ-T=+.^8.-)LtDhIGcY0mkb?CVd_2*j:z4'} 3g(vrig9DEzpsqvGoo@_WGKS]MUC~JQ)/bGG@}OQ;ܧGbQsn>ϣB --|a mœ/ȗWTRVUS.t懆EDŜ&27ocLC#>_40z_bhkij,/{ pFPOGSMEQ^z`,J(ak~fֆq BM~ޅsɉwCoM.cC=]m- u5_/Ɂ` --D~>k? (KH=SLg%C>e>}L&\E+>7W'uguK!U5u 2ߖd粲/_*dͯo131lߡхɅj_Ϻò/J68?̸B1'FG --I🠂>=MM t55U~~"/ϫ.GYZ} ͂ --cAiB[>G}q ]p/"/@zD&^U54ut M̷?3/ (txdtl\BbX]W|a0-O&., ?gч}3 --ZI{ƇUJܼ~r~nvfzٸȰ_AUg'][2q]\X֭ {JGH{)8 *;dL2$yO瞫Htwo O --}m 5e2Ǐ oc_ /+(jhY;zG'&^kZۻzG'fP7;L |I K @OW[KC ?/.N]吟 }hg'g"G]| --}*%('K|D>="#/+*"u L-ܼ:ިPcT+_xTbh_<[Їy]joAf]docifl/?| ~>c_#_Ҳ --JZ4~!q3sJ+[ڻzFǧ]]qka` rJZ}_qG?8~WGĂP_OG[SC]UEY~<HBM~LWG?e`K>8.)}f꿕}xN|Z|BE>ȗD7653 e741͟Y`ɑ6{ -- cCK?HD>FjZ:@d;##cSR3r.wt`S"̇c>O_|} --}WVx>Cӓc#}ݝm U%y9i)bΆz MuUNɟG_G_@o}mGH w싓>!wJQEMone{:(lT칤eUM}c3 nܾs6  ƾ._67 --~/7WgG;kK 3 ~]-M 5DC+.O 0mtuvb ݁'[{{3~vcF>N>[Z;:y@Ag>e~eum}c3f~2Rϙccu}lV_AѿqmanfzbtxrvFꅤsQgBNz9;Zh(;!}D_D'>CoCwob#-lw+"?Wqjz&n>Ag"c.^/.oji2wjW<]" *>H& rrs /'? `~_oOw7'G{;+Ks3cC6r<?|E?~)i]:&gL}w~='t"Goeckw:ܼ*Nd?}evO --(|>O+6%aN!=}KnPoW{Kc]MeiQ~n֥ 1gB}|' (2N_B/LON {-M u}<2Sł?ޖ_?$??3A~ .(gOO-n''gC?7m>>sA{{.Iė '"$"|Ss +k[{'gWw/_ x'㙏_SЄ5=KA]OhH_(߹}"T`Og[sc]uEiQ^Nfĸ@?oW'{K3c=m Ue2Ǐ~ B?g;?D~?d¢J+(jhR{ED%OI+,)mhn_v{'q&rnfz --:Z +}K|I#1ȷsptvu? --œ`~qiyeu-ց_@/ݹ_3/O0=deЇk 3cÃ} U%y9i)φy8Y#u4TeeH --b.~?D&e;.}1#}iYSJ*ZFv.^FŞKJIȾ\P\VYS;04:153wد4U3c 1Jhda (sMI$;GiAdPU[;;05֬{ν}{ow3j=ù/_z --تU/ZC<.I tuaWU?TDXHpm׼ȁ oD_@~5G@?a*|e"ojȷXJw聑? ($,<2:&.! f~>kjA淶wvi & mJsB_ &޾~ }sYζ憺e%E9Ԅب_o˞. scC}G4ޥWoܵ{j78c|̂bc育@M+SZoj39|0Ȫə'`޼ Xo8utq),ޞ6uW?Z --51!.&*2<4$(~g~$?~DdUQяOmT^fE该>_Lm_M|(*Ya-q/]HM0[:{i 'ff --*bxB'tX0Mj*Jeg&D޼~D$諡7hcu=t؉gΙqB#bRҳr K+k5wӘl`X$_XYs,/ Sr#e P'' <I om9 ؘ?Y~RPWүO8ȗ}}٤÷GodGW_&MLAm!^.%?,"*:6>1)95=#+'f~j7?Hg8< +_|$QᝄOׯ\Z\<6X_[}nqAnVzJR\tDhm}7 v6VM18yؑCjkj߷A 7?kEʾ=U5;~i-r-Ј̜Se%k'x|(4G#’bmckwC߄B#cS2sa̯2o`W^RwƵ+_tur15=;7`24"%+0B ߼z>zLÔbk⎰WxQSK{Wo? DPX/V^]7ur>¾BAa/.< <I vw__[Ғ‚j^q>O~u$!$1I0F:=={|=L|uB%>v \\!dɏKHgf-|:#ɩٹ'/o> Bqa~vzbL,p ZOW{Kꪊ;ycJW֌U[c( --*%""H9,H$S74MHAQwrvvkjڇwCneԧ}MJ  x:X3ӽu]횒˲ϝ=}8@_X!^/Ґe?B"b8rJ*jZڷ ,m\=}?MHJ+,)50Z;{G'f 7ϑ{qg^_*seiq~nfzrbltxzj]MUEyiqQA^NvfzZJR"8~Wg'~kK sSc#Cn!<_KO'?;/;ή7'ĵ{4‡ࣉ/ #>$|C6NېWPX\ZVQ^$AsLN/.0Wٜ'GO79,loa4PkK --3R=}p?,8EP_a.QF}Gؗ:A撜m}CcS k;Gw/Ј؇Rҳr *km}F's.n}Y جՕESXwu63hTe%Ņy9YXoO~G{;k+ s3Sc0DG?/\''O\]>D`k={>y/@|(>| -m]<<)~(ɩY9y%eյu̟[X\^a؜':5/cnWPhom_ZzXO,+.JOyhgmajd[G[SCUEQ^̅Rg!GDo7 G?*v  dUEeUu:w[:8yRC#c2sJ+M]cӳH@{rͮe݇\Ƃ|l&VWS]Y^VRT-.Nv6V׻%?_ʏD7!XϏ??=#q>_ !|yO> -->P|U\|$D[98:lGCʪ:j=ɩUy _yC- _́`oW{kVW]QZGtsv271{GW熦+(NH?&vTDC/l>h 'N9{N"`_A7u [;zxEF%$fdW-m=}CS3s Lͭ/^_vVno ܇{ \=g'60 ~,ꩵ5U%EټGx{y8;9oȏ&?*?~ ?~y,y'σ?I7l!zdޣK$>_ 'Ȅ.n^>AaӸWTRi V"G`/.0Wٜ'gϡx=>;O4~kb } ѡζF0/;#5)!_oW'{K3{z7]SVzE} ?~'@_0/|Tĉe/)(ihi746stq -- ᣔ܂j}cs[Gw㡑مU6X v_?)wwl/?#z --_cVWgg@!ߍ3@VWUcՙf ~~Y~i~|GG~xyv{f=Y{^IޣKcˢ O|\;P|c3n;#Eܼٞb:Z҆d~3YlP[|oዷث} 70_^]Y|X_WSYV\alTDh-m- 5%'OH=*,t/ggB"b/UT54un52spvFD'&eVTM-]=ãS30>C}?w5{ ylomibiuey$b"#CC|)ޞDZ#F:~~XoDGbp{T|hs$)"-_?Ȩ蘸ťeƦǃC# g_f8ku{ f>06á:\^joij+Js2Ӓc"C(nVFwohkj(]p^ --/)!.&*",tX`>vv`~@K69e{)X_YZhmn*/)HKg"C\yI;kKs#} 5UeE}h}01߇ }fwA%eUڀ}}C3 k'θ{\쇄GI܂ʚ M-}cs+kT?WO? gOA?Bia~nvzjb|tdh,nvV'-59)!>"hI37240#Ou??ZhKZ{r"E==֞== --|=}C#&$EĿt=D>++" ?:>15=3O=2_k>?ӡ 1E`_wg{ ʲ,Njb\Lԭ +>^=O9;031=~D[󠆚$DO }L苇0(?r/+~PS1}CcS +[{G'/\v+*&.1%=3'NݮށщY*2s} --Br3__]Y䤧$%&Ɛ%{zSя[MMQ OO7^d 07"9 ~@c/=^{&| J|Z|O"/? D~(I)̬uL{G&&gK+3[*#oj ܷ Dj #K ܙѡޮ; +Js2ӓb#os]m,L tAUUee 84?& rI)*`_1=#Ss+{'Sg{^x#fdtlBrZFv^aI9֎ΞF?Z8e5$c$?wA33R?,l~OGۑoi??C?-5J0|&Pzz=C{T{~A-I!ߓ@0OIKπUTV 70/,-of>2w3:W'Fz:[n/&ųY!z_VgٙO%RRJZVNAQYUMu L,Ntq;s㢗Հ!,v|R*'+WM-mw{ybl/ǸN _$~" {k+ٙ>aKK --r28i$Ѭ (C~_꧳i???j?-1)zz==Ž8' ?ŊfOddeD$zvn~aqyeu A'fW2n[$_c_@oݶI$D -- uv֖f&F!jʊ}i)/iTxv9e --`_Sq]}Cc3 kή=.\v+UwZ;zF'g@~GH* Svqwr ~ у͍{+ˋ VWA rsx͊" E? Og?e?߈OGOO/ [2ix#_ħ0z{D{̽= |_(AX+(,.)-"t|]X\ZY]*]z]!|{5 b}GF胻ѡ?>2X_[U^B?#-9!6:fk~>/w?hokeafl{숶A 5%Ey9ibų>t/%edTT[;8:{ߵ/.78<61=] r@o/v>12Q? --Ǐ>ؾ_[]YZ\bGᯩ,/+-.* ɟg'@wolL'6\k@ v)z(===={@/>N"tG[@?|t |:z }>3ﶃп]SYV\IMg"C\y)'{+sSc=$@їCgW}|ǹؗ+()k:|TGᤋۙs|܏KLI/*?4 --sAd/"PIP?-kQh " A"ҫiBGiREi;EШ5jv7[6lL&Y&3svel$;s_6 ~JZzFE**j!mr䏞=!ȿCEO*hOP`gI/I?akW ύ4`_OW{k~EyiQA̴vlۜnAޞ.NY͞ejbdЧCJGy $i5u V6ή =GD&`oښ'5#;' ~cK[gl߄ܿr2z?I2?1K'OxCI}) ~3~3.|$ _OQ%aA~^}Y驼ۈO~~/OLl?@t --cpW,VzISE{xzqO --_!xS32/(d_QU]S[WԂ铐?vÏK@H>dG4󿦙fs>w%g/oal蓖P!̩zv57adgINںiUc#B|y.tuvjӧ1U_?D:6׋𷷶476 --_\x ?W,."?FT~~0~f?tbo??O'lc)=_yt*G=`iO'y؇=zρ/K,~n~b!k[Zۑ޾cCb7@hӧ\?76_4$ --1oɆq jySvܾe5+D- ]f97P_OG[SC}d ڲ(oS"jZ:Fm\ܽ}B#%X.qe?\uro`%2{!r r'Te 🗅hokm%yYiIȟɟFKV|3 lppp --`=C_%S@=g=Ӟ=? z/>-|!iy ~QIiY([;' --#_/e2|Lo>o #gWO3Bפ_u ̴vlۜnإ!Aޞ.NY!F:Zj)}%G!}d>g`db:kBE>~!aѱWݰikRTe*![; [ݽsx]$uU&'} --?^T --??92|h㓿pbD$9IŒY1(8=xOO"CK/.-;X~ήcLJGNʒD|_esF>gOl>| ( ]_?FC~4nڰv舰@?E ]m,f2562Pi3J絏,GIӦkhjܷsp^7 8tITLܲkoܲ}'rz>O:3r:ܽo_3r[x#*/c}=B78$?;+ȿGG!??O & [n 3{xcǨQ39P{R49Y+?3+[*ʪ#u B:>|?䟕!2gc.QeD/>3p۟пrIG0 --r߲qF- ]f9Ɔz:ښ>>AЧ#6_N쾔*3&3}ym\=}B#&X.q3B6i_r_N#B]gY7\s߿˟ W 14?2<G^N\"8G~? #@g =}AG@`=bOGEaߣ4?/'~}CD~;> 4?_.GQ_1Q01|9ܻ٭ --?ʅюfJ9{H["!6:2<$v>CP_WGKSBG_UUe}y# --؟2o`d2sl3s +k[{Ggׅ|"c◯ZKrwJz --.I_rMrO3Mr_}ve/`s1%GG~HHAH^HNHFȟӏُcCǓ'As L7]GO,y͛:OGI9Q"!{bQ|"~Qq /~ ⷵwBBB䏜?䟗'd>%3 o2_O>~6CL$Sv܎jy|LTDXp"Ύ6Vfgjki#hB'5Q3辊 --ru\Uyp| ̴Jro{} }!; 6VhVȰT[*Kf0@LAکN9 !Ng19>7wO?iJ@`phDTl|RJzfvn~QɜKWs Jn6}vr 7WAt_ &_䯖 ߣʿ-_D9ECϣW''o_<| hU OIУDb=c,py/_S"XA "j| <zc7c7E3 O/ߍ ^ --C] m[(_^EsJs3Sc"BPX&@"CwrRw]S#j0{,>#G=5vSG%&eL+, pK)7mGU'O_[܋;Fɦ, 6~a׸]$!O`ߦ~؏[O '^| JוQI?`y+#R9s !e߳ >zMm"IZG0Q: cOU/>_|? {lm^x,]m-͍vCS迴d¼iɉq1AӦN&Gz[LF0 l} phP'gg .w$ A!aѱ IY3r fB?bWQ^)Oܯkhjxݠ/^_goI௯c#'(+0A2khR_ *?O/x ![Gyz^P3R{{%=~ Z2 --@>F /Rn⿆d\Lпtwv676Я9oP迺Bg)Y;#+=5)!6:2,B҄qcFz<=܌./~N;;; <}vw5{?єQ1)i9Eų=ROsJ76wvu:c+sS'o.c:]~*9Ar"R7d~*\>x;@(@0@={ׂk#~9_$ob|Fj][71:[[ | c?3ovqa~NvfZJb|LTDhp`ltw3J}W0PVPWWO8t-7lx.+̃Rz^W_r=s}V^]iů<mD~ (A}(V# }|{]675a׿`8^Ua[)K)/)LOIП2i¸1|^nF0 l}<ز/rȾd KLN˘WX~c'!/|z~}csK[;7,7n6~K --ח__d_Ce --q #@gr +A|>ǿ[ Az^G!KWuܯ"UG_I?A *_7X_c? 0/̛1=#-91.&2<4Ce]Ccsk[G'l8>l6wjJ[?CA;~#nW߲u (W .:x)Y`5)O$=Pom=bCܿv=p-&6w = --7Xi̿+Ϳ C[KscCݗW8ϞG~T?޹"P/ПSRT4Bx<܍W5S[oe} t>#$#\ F7O/7hb? 084"*&>1%-szN~alV;?Py%3_\ohjim=KV%7N_$U?D~I?ew9Vԟڟ/Up3wObPyf'z7ZpsvK"U׊G;kz!?~k,M'󿂧*Μ:Y]UY~BO;_B0/B?>& --B?0` --~>f/O7#D;w j;;>jps4->~cO<r?<2:.!95#kFnLN_AQg")!j4M$mڦm;j&QPS^Dbw9TiI;h2*U1GF~h& --l䟀~~a?#{ #@3;@Kn݉O{/vzKKڳ{=~ --ۈߦGE>Iɧ ?3 ,|Kɠ:Li r --LaRoB'OHN/,)@jm8שMfk?.ܿ[~Srܟ$TU ?4?& &%?߭u$2`?O/ُß?2" #@3;@K/v'>_M0 zaG#"Y3Eߓ~~_ħX#+G#̿'@ +` CɨhoVWb&'FG@  -- --'xB?(N7s7K龂}t٧gsXhWFBOI<[PTZ^YSW߈r_ۣ3VH=__2^{L!H~L~_3W/g?gOs? XZvN|B,G*Q#q==x*_ Lv!~_OcCH0'|S9̟;_ ~hj3u=N --u5%Eb C!w?zuW.CB ^ }4_B_e}Mf>/rs;}`s/ 0h<_\bMr/~Dtl|BrjFVN^aqYEU o{uS~xG}`bw'/>,/b:y3kH?f?ڟHgG?X604؝O0 2{ B |'>C)ȷȿ"F>=}$ŷ!293~pj3t]d~ɦMMUEiqa^NVFjRBC-_jŲE/ -- П7軸HDy3v'!]=.r._f˯[Xow41%-3;7Ds^dA(Q}|o}J; --~= #R_Z_DL~a?t? s %`'=4 939z=jq_E(V-CIȗɿ~wm2g[&{ߚ (??g (ףr#` fl/㟕3U `K@w<:Ϡ9=>#3K/%1[Q|R!&>E>?ȇ~O!'3ѧ'ϝ3o5z]̇j*K --g&?qnC5bQ --><1G }4_3776}.ܟO!a#cb&&edUTj]ݽ:b .^,LS?|CUѯ W_ZRLO/`@#+@; ρ݉蛈<*̃@=^^>'KJUCM*UP|x"0EOBȟ&oI_ 3t=]ς-'45UŅy9i Gc# 1ߡyݚU=cx{y"})99wL"}}WWyސ )rmo;p(컹{_,Ukmzpdtl|BrjFVN^AqiyUM]}#>MfK0G=u~;&?`'*NJ5Z??߆M ]?"<0$=PO֫g'k4[d;rۉ?_Am#~̟1+';o1m0 xVzjRB|ltC|m[H/~0x{B.&|5w̝]"] rߍrߗr7MB;}£b&&edUTj维=:_+6ڢT8R {5j}՛$M3l6{{^ lc4 !`?}Sw$bIyd?g??_?Yx`1Pp~ 3γ#Bqsޓ%>IE>w/|A/|@_d2Ƶ+:[+K --r3Ғ#C}]P[ --C0c-G諨O}>f循*G7nڼuێsK'4! ,<"bR3s --K+j[/\|.(vfvrKr* ~"36~߻;77;#~}=ݜYqSc @#gvnG_Ee <S`qOrO񾻧0sħO/|{9=u{bltdhC /'3-%1>&*"48@OQO>F>E>EJO>!f}CsK{GwOѱ ɩY%eյM-m) ?66>q+_K!3'/jC7]PW]Y^RTdokenjdwFq2B#?UOWV$3>bæ[m)TS?qRKGW/08,"*6>)%=3'݋COcp?YWB'?`"OOgG@&n^u<Ay`Gz\{{8) W((__.Ls?kn !; u5Uyٙ)1Qa~nv֖f$O@C w߆C#b>!E_JB}jqoظi4rC<}FPH؄Ԍ’ /_~?04BݟU3/ߕB_&?;Ef?c T??XXd --: --hocenbta{ \#UTġ+[ٓJ.׭ r/lrA#N)%=3;q --vp?/tY𿖁y/K~>T?00d(sܯ5z"=XmOq/^|^cˈϏ|1A2͟#{8j*K --3Rc"‚=ݜl,L :q\{\.C- D_y+|ϲ}Un.?C@ZX;{MHJM+,.klnDra'8gu?ş?/X0d*sܯ5zXmiO=8_(238+6ڕK¼Ԥبa!>.N6VFzgOk8zDX( kTUG_iV$}>o]?xXI-]}Cc3Kk;gWo߀踄Ԍ’zn-{|N| kBYb??(O #@fYv$IoypROa?3Oz >L4G;'M͟5<8doGde&'EGzy:;Z[h8vp@$?z~S/}kxQArБ5Oi;gdbnic[PTR^ ]x*˹g\<_y qs3˟I??Odz1Px+Q?e'sqg#L+wpu?f/=jBz("B gMf{JGDT9Rsw"If_y~Oْ8#y3z z}\^mWYs> ?r@_wg[KcCmuEYqa^vfZJb|LdxH|-[ЗЗ:aU bsL MHJM/,)S5wML;,pSEܿ 8~_-bW?؏?W??h3@->D}%==K{II"%CcNd<4mә'O?7351:<ڤ,+)JOI V*|=e.0l޴qHRL2__DrsZsuvvήnr/䴌܂zUskGWo쾃YRw_Lk_XhyOO --?O?h +@G>_prIO󵧹'yO{ --||NS$./EHߣ̿/S`Y웝hmVTfe&'EGx\@܎B:KsS#C5j;!B_D1oܴy2wo_2(4<*&>1%-3;w`hd|rzn?tOC#?v@H~!yOw??G</GY]E4&=PggkpO=7W./mqȘu1s`Sg'F{;ښk*J 3Rc"C^ wBDЗЗi:=sEk LL-m"{z)"cRӳr K*Z;F'gGx{O4@/6*"4X\E-+g羉%}ݶvήn^>A!aq ɩYE%5uΞщh!PY?ώ~uO'@ &j%z{X{{5'(w$ߡͿEq?5>:<Ҥ,/)HMN 񒻹:;ٲB RKNe:澱}+k.2wo_2(4<*&.19-#;^?8<vCyWoߡݿG ~V<$g:D4x+,G?w Wi{:6|CÃ=]ͪҢ쌴ĸ >2+2|鞶?7Xkdbfsm]vN.nrOo?E`phDTl|RJzfN^aqYEUm}cs[GWo,vIݿE/2/"ό"OO->BFzzd==^{5_kz/Bd>17f5cy`lNM{:Zk*J 3Rc"B --?oOsA蛚_-tKה/-_}37mbef@`HXDtlBRjzVN~aIYeumCcK[Gw$r'NFqkU}?#t -- ~-. 2 --0K_c'3sx |a,7{l1?y86zbld0/'3=%)!6:",80K`gQ5|KC_B_`X復 Rg? ($<2&.!95#+7??x%Q#ߡ ~_:ϵ_?/d&pPO|uzl=i={_:/|_Mow --240I`@owg[KSC]ueYIa~NVzjrB\tdXHP --u( ֬^>m-?_^r՚W YX"{z*Q1iٹEU5u*~p?_}} Ob_~<1 `VZu=dQG3{/ --ENe>06d>2e93ǁ}ݝ-Mܬĸ ]߾ B+^̗B_%yzq104265ܷawvu{)"bR2 --V0pFs.^ >~~N,YcP @M%vgDzL=cҞŽ1o7˗.~E?5? --loWfg$DE+~>r7W';6;l޴q: 3Sc+AHЗn gr` :]{ --:8>yHA0IiVޫ$@HB --BH1`lO8PGmWS=ݻ2=gu~_+VEKLN/,)+kضc^8rcO~;roB}X#[KL Z`ouy4A=a==S{&<޻3;ƻ%0# ̷̄ 0`Wywl,/+.JOMNZ --Bh44*\&Pw&JXRG}D*S(`2CG^_TRVQYSaN~㑣}rא)ϑl'џZ`,&{XǑ&oJ{{>/D|;(kװ̇G ݛ&iwnk(+)HKND̛MVV*dX?q{}p>}?X"+TϞ;WG]>>)%-3;tCEU- wwp㑗׹7]VQlCQONŐ򻤟m??[zP+<w8ғs'x/|e-Xxc揎 ;6loK#CoPRT>fr(gz]ZK%b΄a?2R YspWER3s --K7lDoݾsyG;x_ n  0ϵğ?? \NͰ?8#8ړ;y/|a%?gfm,+,/]"qi`Gطg-k6n(-*LOIJYvue~XHPѠjTJL*`To{gb?@$RB &sp(?o%VQѱq ɩY9yť6!wwpKk\O-v> --kdq߅wŸҟZ --p NSS;sO{9BI$ޏw̿26[Ab6[6oX^Z\ Zlɢ&^Q+2DOB73ǣt,DbLPtzc ?s6~x䚨ɩY9e7mߺõ߀͘=AchGU|dÆE淵4p }{vmZyS5gMF.@Re1Odo{gܟrr2R p._ S2r K+7a?xEpO"o#ܷ`b?r/p~& Yi g8=`{& tAO\`{|+/ә揎 m>02+߳k:ܬ40} r C]Fˤb?2 }_2'yC;|S||PC$RBh9($lkI~vn~QIYEeum]6orLs }/2'7dR~ğ?X?=_3 -- E 362daY[ 7WEi)I`|Aը --T"Ч͇w+r*ӱ%2B&sp(?o%VB%ٹE%('1~u!1e'{$3Yg|[q:'rk>;+x/aq5J --td~l4@^Q)2X'C3[o{O/He --ZLA! /]"3"侤TiNc\ --k࿏2ӟk<#ڻޭCɧ{̿3A@_d4uZJ7IEY/,'DEA|<iCߋ}~b?ÞBܟes~`HWo*,j}BRkuzCpo!؂g3 |./W, GAߡf߱Yݦ.CnW*Rd~uey)n~62?U?_\ --OIN ̇/Ct3^rrs/CB#cSa/{7 W2CqY*W5.c?084Mq}ߙ~@-ABQ0~|B҂E=~~n^A!~Mm=p_֮t: F}a?::6>~N~wOsۏ8?3̿2e~d4tUͯ_,,E#P_i31'%FGEEBd-QBߛ}~rT">LY$ !aQ16_x --A3/^*)74ZJZL P_Pc Gfb A6ϕ^O~ۙ=yh >3ߓɿ'g0ݦ.^U --_QVrf~243/<_͏   'w }|~f r?{> 88w?1iB+ oF@g:MrZRܗvCe0?K9%GsChⲜl;>6ȿ wA@_թШrisSCnӧ2X%hI6vaA}>dyM1o}_gA܏OL^p1r5'?GoE?s\ Eťf]ujO9~7wfSܮI26|D3b1 :F*67J+K.?w7!dV+H濆_̏ ̇o|ƣaߋ}}}HBq ۑGspE֪PDSG=5O+#b8Q|tO8Ok0(U+&`~MUǎ"wnGu|d`~H͇?w.2@@5ߛl>>i8C}~Yظvv=rn'Nfe/xFR"+Վ? .gK~wB?M?9i$2CwWȥM u`~Yɥy9Y'O ݍ$ _#A!χ>i<Is9vbG:>W/76KemJF# kסw݁l_ Sqpv#=o|2*e[L 2_R]Y^J5?Apw4)0?v0|rϠOʏ&ܷ/#ݟ7s?̅|i ~jZzFgΞ?E&W(iRs=]?%?`'ⳓ #|Hub3_ 3_P_ 2sgϜ>cۖM~|0(p>a> '7 G }\>}OJNYDGo۱kϾ௨545K7?7۴߇%dwGxt*cq'B| ( (NP'(O6Ё}{v#FaEE$́}OB( C1fCG;~dVvNn^AK% %mXa;SP)|l@7/PwᙯD2d>0 /7';ǎ!/֭E$C"doC6}ha>Oos6}Wn߹{/}ť0kv;aAGCYǓ ---Ywn$>MG>F+Cց>D| d~ xcܿw[7ӛl~|l0C78ܧq_ 2ᄋb*NMK'kt qr ~HhX㟑?7lܴeێ]{0+(_N ে?.B?s97wGO?ɿH-!V@m2:ux_2?/7'; C8~d`.Ď  { "b 3Czf7Xn잳͋};ϝ,Iϛ=sDKU4AcQ/%C[:n_LO_/wuGKo`pxdt|9 --~Z_unj^7qɎ|94 ё!̗cOdF]b`̄259_ƛϏ9 s 4Wpobf! wt& -- ܳoϏ=y,ɩxoljikF_0._/C,msOF4_ɟb#k@c#Ã=]0W`_g~r+ qϞ>}@福A_͇c/Qϣwku%"w/@}*2Tkhlnm --G )gs~Vk_o X_ --|/>{J?".FWcC}=ݝm-͍ udOIbf>|?/|{[XjG7VVB}7/Н>۽7Gǜ8uO&e}CSKk{GWwo6I?H 5ȯ!uC*B_#Q_Es@*0homnjWTWa♟Je>aQ{wkghp 4 3_" |m[dxCr)Yofo ܗ\d🏋O ? --EUum]}cSK[{gW A&.sq]{T#gFgO 45+kO#3'c20̷ -NK/澑) p  ܳoA>.Ӄ\^YUkhl&N}#S)9粟9'>R|H U??G?>:2<8PW[SɰO'2sDcGFA=ݡv&FL\_On|㇍ź)} KDj 2 B^Y]ohjnmFKɇ!ɏ_gYk==| "| >Nm$mM uʚJyEYIqaA-?zЁ0~>|WgG;Zhi2S5?D7?A{}>Oo5nd ݷ^>~;w=I  --EUu`hxd{d?!)gM7YC_]9_I|(;( 땵ՕBY~.,/}@?/7`Tlcmeiafjlp+OC/Ǐ56 6YEb`0 =agfȊJ努: vX K=gGL~t3Wٯ`W6g'>Jy(*'ɿ X_W[] --r2Ss= }==\m%bJ@`zcǏ*_&f+H,wprqu  -- Â?#@'/(,.)WdHg0gO? %-C\^{{n5?G_to݄!ȯfgOd~:%$Px d ߇e~hpTbc 751od75-/J5;LL-,mR[{Gg7/o_@??.>/RR3s --dEť --?OMMϨWJ~fgگ\G@?WDt9g$>]Y E>F8A~/A~3F~u_$LOrB|y1xGa2V*Y[YZ`B7`bRG}2_v6oY"ӛ]+R22s -- --Jpkq[;:q ?Fψ~~O_-/B}~={j3SS G>|!$%EkW@;2?*w`g+V 3Sc۶`_E7Ww_a-[  ,"ٕT|\W%&edeU,#xG&?>!C~TsOh --,yuiڣWy>"?ſv+8xAy'i*mKwzu{{ N&F$9s -- o~}ȇ$A`oOwWg{kKSC}mueEYI|uDD̿hogceinfblˤh? q?_QWO_,1F&V6N.nxOJWPX\Z^QUS[A??_]߄߹K%?&[r'_Gg x [zzZ{>k_O0߽ɿ }0d~&V滹89Z[Y*2|G1ׂ„v?|'y/H --+~ C@GOLNMRWVԑ_ំ/ao^ߺ -"Cqe?/ y!HbOj=qfD> -@ݝ-%.m-͍u5UEy9ꬌ4 #@3HK $"}=`YG6_@_0 ekquEbTP[Z;$¢ꚺֶ. --5k !dsא7'K϶_#,Gȟ)I93GM70_zr"c\||,oݼ~$K~kscC]MueyYIQA~:;3=d~p<}==`;XY*2D, ;?AGWO_,1F&V0`{ -- _X\RVQY][:+"Q+?|OٯJ 'p/Գ gGW0]/Cg"0?7';3#-%)1>d~X*|WV&F --@"_8Of`0amS}, "TPYXZ ~蘸,uN^AaqiYE/3s K+k; o.__C'I?|3s}4ϕ=={QrFD$rbI~SC]mueEYIqa~^NvVFZjrbB\LTdxhHp`+M --@"BO󵴎&<츖/utEbTPao`*4,"2:6>!)%5=3KWPĄxtlbrjfv~aqyeum$.gd渚G???X[]YZ\ ȯ(+-.,Qge&'%FGF}a02_)I%b.0|3d„qӤ/ --CF𻺹{zB#bbR3 w ONM/.-RL~L'~~~H?LqyGh< fZbi{|=L| |,q?Fu2@/NOM@{媳2SSc"CU~>^t[Й/G?I#//Lءwx!ڸTC/Eb*-A98:\r -- OL&煿o`pxdt|bjzfI]<9߇?|DgD?K/h8=4zLi?,|:D.ˋ 3ӓ#Ã}Wsٙi)I1Q!A~ޞn76T*dRz ϟC23_78n>$_0_úx?p ~~P,? 򕞾ѱI"@og{:yǻ?W``:{gQؓ3' |P`ğr M~$?hog|]F4|aGpOk ~cS3sK+"1}UQ$5uM-{zGF䟇ɿ#? >,!G8 `\[p/?ǭGg=(=$0_-&y E@_oOΎ֖zXH~*80풋J\ --2_ey$1OO<1#|a~uTS?yJ[~b<`[Z;B= A!,չy Mͭm]e><8 0&l2^%R+% {8^xm mH --I(HZHCa(m4MTjJ8PUҜ~:2=3wc Q<#q`/F̿?_>Мuɯe{D{)վ# |q. s3GMu45Z Sb##vx{z|b`8]ooqO]֮o"S_U?(KHLNIsSKk{o`pxdl|bzv DӪr#oүŸ?k? ]6 --lS?.Q/g+qK ?Ԃ&,";o#<0(ɉLOC'FGE  --&6"a?|}/o)4u7@o٪YiYyeph&YASij?.)NYݿ'ɟC^ƞjr_8ٙ4Gz:;Zur-ɄА?_/u3߀2_608=".kWe --? P --'$%o[;m=CR!'ycH~Νh3g/W @'@'}O߅zn=`O۞h^{={w --?:73}dE@oOe)cc!>ވ]n:|dzl dTϑ+O#t7'?vRSWa?<:6~`VS!?~Le7oOsH @''}#c)R#1$,o~׊N9n|07θ'>_rGf}W?4+5Ʀֶ#&!g@y*IE~B'W]_\$x`#w@dԥB QϬ'sqKޓ'&Oj?4y`bltdxF~G[ksS_\ThG~4@b!_U33|jjf>!08鸿\v>GI'n=<}|B(ܼ|TVQiY!X !rS5/D闲wYg3HV@^y tO_96^^ž=s^BI_M|*<?P"ZWk6WVJ\-CC|}|%2EUR gSe:s$28;)ZSlpqIiYyeRSG7084<A_cJ?&__X2t ([ l|?g_3"S9DGD{(_%hH1$ N#b,/+-)_XggeߵG/2kX /37θ'?}5? "c#cbܽ!khwtں䟦k!Џ(E_90xC ?}'V@=X/c/k/ i#/^$>vF?@w:;ڔ/7W77@]c] 3BOY,~WgjzFfvΞy --KL4k M-mH.$?ˏɯ~Y+_%,? ^<x --@$~}&=zZϰW}/>YԊߎoj7+ۻ'';3#=U%? rE濸d毒_3Y0θ>FEk{hKHLJIMٓ_P(R[WomljnU}#K?W/-tHc =};; {={{Rc!#L.$~ZD~aA~^̌ԔĄؘȈ0;wؑ3N毱||{r}۶!IɩiY9RWTk T~߇#v@?d4?'3t @V4O_ߓ['Y/giϵg܋޳.G(U[ HjsU9YiI F=4_ߤ 3O_8@S_!Cc1 Ȩ蘸lť*omO/яy? /~ J/Ol| ,uS.z=HOcq3 ,/^8Oy/ ' Mb(3HOMINJ Gk߾uF>^0W1}ooqOÿQ;C7!/SY!l|BbRH}KJMHjU~G?JgI~gΞc˟/d)`@g'R1TzB==ŞiϹ'y<1~=gYaERJHț=Ȧ,: [ l D --HYTpDE 7tȦN:3Gϒ}0wW) {v$߹vU+ a||?G7T*)K2?/0rK55j FZCsE%eW\ƒKێ=E}YOP~Ft~_O?yC?ǿ  pl~kP~-?<Y=jok[ߋ P[<gm]IXl/"'$_2q55 3gC# +; ~"7,3~I~'j$zI[BDOOЯY+b?g`  䒯ʃy8EްW}{{^?>%&>?t04>߶Uߴq}6X"/K;3gdo':#o~xѕ_mm _-IS?CB-u鲆W --pt Uz3}_`m^OuhϺW% sggS}׬^/#|bǓ%4祥x?@'M 7ߓG/z$ȿoQ{T~D??R~Yw p Yz3}O --}zZثoKދ{B-?#U^_WŌ|#oO'AɯcS& Zؚqߓ'ȏ;:ץѯJe/_w/]OO}t0vF؃ 7|1/+YibKν --U|$~oׯ+EIȟ< --@}F=ɏoP.?&I/t5o)߲?-E՟o --`l l _o0oЫ iuKއUK;T|D~am?3?^[p0Ko --O o_ KW?s.&@ !2w?p]W!=>P5>h9wi&# O2?/-pC 5seo%ɟmGgk~vg޲sAostt8X̀-zKU?'0Ao "5HOz`ڟ=^#xo_~?9?F {17W_ ߒA_/63Ms,NV;`SA_|>PyG~}O^^}O-C5s$BJ cȏNjw u+ --5pgg+%Oe ]pҗU`%Ew^wzޱg3s܋/O˃?8=iv!EoIH~x#?ƦfI6IS-_ }Ffw*ӯg   --pt z__EOPy8SzR;iGދϣ{W~q?sFTF&7ĻDŽҠ*?!I5]s_@?3~ _SL/  --`8?/ΫP̋ --={=Z'=gP|FI B~SScCC>/?*No䟈sөw~_?ؿ_/≓?m@'G3)}Zz>c /' "=hbZ7OxQ^} --|9$s3OCOA B~ːݟQEGŻo(?Rihllj%Oz;Z59zqӟ62\@3}sV7 DzP/g7;u#={~7?'/:E~sSccCA~`ȏ/ވ~_W"d?#%#a$<$?+'ĔF~3GWpj>A埜_G?ԫ__Oُ߰q?߾cΞޠpttNIρ<^]z;=^~s&~z/_2>'?SğB{[[kK į͏Nj7ﶛ^?U*OgΚ]@?_ ~ڿfm㿥{?_ --`:m>#<G{t^wI[gw%uvhߛ㏥ğk/P񧖈DX{!͒͏o]?7ɯ/ϙ_'ٯK\oԥ[,LnF+9(?_YUW[ic $H #ت7:tݳ.{s '3ߪ@?HG{Fp_c]8oagkkLx! G45z_%Wk޸us[wv#z?h`W_?%Eנ> ?A/}gb}>hM{_x+s^O?yhoמ,L|{ "~7@>BwN~O~WIk*8PO> w_|ͷ߉?242Y~}@?Hԫ{ў{7UIM=׮_#WE|"_sȇ?俾;?w?? @@#@+@3Ci~'y~>P'½\?=>x?>>8^ ~:щ7Grqς|P};tџgwo?_ -- c3}%Iyb~p^Գ9tߧoΝ۷:"~?<ϕG>G~;G_?ҿM"~I_g0 6Fgv@@WD<1?8/Ћl}kq? W 8UK$~:NRx_GSgwG 6{҇MB'y^OG& Wz#ߐf|im:'Izbſ0ihhxh-oC<1OЋB=[ϗb+wo !ԭ)'ȿL_џ_?e LHf<y~^eسms+ſL/''_ߦa_O?0,NmLyJ^c yRIz~>^w܏x_O|'R##փO_t;؟eth --ľf*Gz/{U{#{wIOxǎ|o`{_ -M̀ nAi%$_x,ʳJ/wXϗso*yo !4&'?] ]0:a b+-6:OЫrG;}ƽ>U`N9-OWgo.Om{$_hs --y__Og##zᯝm W3= ,@a }UYOe/[7HȽ>=/Bl2Us߶O'Z8<q --b#E --+=C'h_r>N~S|:%?;s0idx516RoOG5˃B ʟW'?22i v rOc<;?f' }:W#+_JgYnL@ͱܓuQ|y#H'p_~)yOYnB鯝~s HKF~O>gp>x}: }q#%[k_H  # ?"L=[i_p/=-_i~?;m_,n@43J~O{>t>G-);??7 0CA3x~^zk}[#q{gn?o7[0=r^\}C|Ђӑ?_99¿8q15| +\o:#WXO>5-?[iLʿ~K[Sc _O 7 @>Sލ߼~K}#q5П_?? Nsʾ>KW33s >G[GGa p3\||oEOew_!p7OG#8qK0}Ծx?|:սo_?O0g /7ݩe?iΕG܏x#swl*S0; qT~o˿@kЪ CzcY'ϽoBWS{n A_*^z}}=GZ_܀uo8_P_`=G5؟___N5 kܷTu0>j|&} *#|lĽ:5[!_V0=GF3YjOh`#NS |ǩsBWt!)w?!5yuE"бnޢ%BujG;shB/lt_nkBK-_!N~#!t!B!B!B!B!B!Bzm --endstream endobj 42 0 obj <> endobj 81 0 obj <> endobj 83 0 obj <>/ExtGState<>>>/Subtype/Form>>stream --/CS0 CS 0.729 0.729 0.729 SCN --1.351 w 10 M 0 j 0 J []0 d --/GS0 gs --q 1 0 0 1 262.472 35.6399 cm --0 0 m ---162.11 0 l ---197.855 0 -226.833 28.977 -226.833 64.723 c ---226.833 226.833 l ---226.833 262.578 -197.855 291.555 -162.11 291.555 c --0 291.555 l --35.746 291.555 64.723 262.578 64.723 226.833 c --64.723 64.723 l --64.723 28.977 35.746 0 0 0 c --h --S --Q -- --endstream endobj 210 0 obj <> endobj 82 0 obj <> endobj 211 0 obj <> endobj 212 0 obj [1.0] endobj 213 0 obj <>/XObject<>>>/Subtype/Form>>stream --q --0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs --0 TL/Fm0 Do --Q -- --endstream endobj 214 0 obj <> endobj 215 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream --q --/GS0 gs --297.1199934 0 0 297.1199934 32.8574219 32.8570574 cm --/Im0 Do --Q -- --endstream endobj 216 0 obj <> endobj 217 0 obj <>/Filter/FlateDecode/Height 1857/Intent/RelativeColorimetric/Length 26176/Name/X/Subtype/Image/Type/XObject/Width 1857>>stream --HKَMPHi5U$~ --j\ @ù.$ -- YٶemRxch:Ey̩7MM7$I^J/'RfqwȧuiQ-XI*ٸO=]Vt|}_4Q#4E+GWcp,ci85Η)geqpܘ2pi΍K --J۞zEƜO8LFq݁;мФPefkOv=SZOǠ tiņWʼnjJ򢼬r{@h֎]e]WE:Tap8?7G* :t:4J&܍1Cjs'͡y;tk7:46qFϢ" hOSԡj҆fe},v/.D6>$v6T~RTSfDzwς K|Vinte? gFyIZ摷5f.wς[sϸkϣPRn] 6YnSW}CǢ2O5D|J&C Ъݍ>aBG*c'ύ  c&FP0k\ߛ־h;ċEx7Yl&>4|v4'%EoK --#4T7='~6eQmqI --=3or:l򅛁ù epUg4JY,#џ:* mVA(w6듓$XY QxQCB?֝=N h --,q'yXj ,1ZmSGwȒnjÅf%V(*ɍjEi7wf}|5`'#h Ȏ1^q^2&7F>>g>:~2Tsi -- BocYo~rTs}qB >Xx; pa --]*طz ZzsEy(I#'k8 &8I@Wd'ҬL"ofXC5GEͬ@9v9a}/7YU73Ͷ@\1\Iɫ~!Mv ~\0!8I}j?"]ưY9eXOǚnìl0f.(/y[hKv")1v)aN nZLִY+;8E,Ismف>vi)f^mLO6'0gU]l@:D(%fz!u{s?&Ց>|ڧenf;=r(p$͎> *(p ^4ӹוbÉ0Fҽ32Tyw1Y9*뉁~s]O --hm&;I7RTzEc3s5q\cUISB k3%Ggd_h2DW)sP\?guD!Jd;Q?bNQ.PB^?MOw PBѬo՜l(sPZ=f33K~P%Tԋ ;OwS\B.zh@oKWSɚ{]ihrbU-`>rÜ~:#C~jN6uEob|6sfi3tnaud 4{;ZfzlxTaU-|#h#ݕ;pBMS^TPG45ey_4in\^RB4qoॴ*Hܲ9f%%na޿+xSf(emّ.@-+5uhjJ3SdP6)Z3$;-j#HwK+; \Lw+x&ѥg~\PG4pA5ey[XձWS4q|RZ}$t47E8aXVWvZx3$;P&&7ґ^[s^,47cDNB1)kf%tCF+BwЕ^MwIʪѱA_Na8O&; n Q 9}41L{ඵ{}*Q:Ӌ(d4TT2YO0_}? RY>]a |#ys-;̻ձWq헖&; ~:dc?Ov‚s/atyc>G?#"Dlƺ"; z[jY0|lŒr4vN$pyU,2An\eY+0: -->q}ȷu9@z}uo),L'zqJUqYޘq/h sPGgIYrK?ǂ|uu9 *duw1 ,7ؔjM%dJ|D?*w#<6vv:4thdջLC= -7W0'󴾿)7SqۿEv2ve}?+%)V'idm.1VJCS-1TM#1tO}im0jG;'gd#!tMSwD4X-S~˿j%Уcy*E~; jzQ*L#T/~y[>cL*+J)ֱ'B56tOymT=^h}f}A7t/ye&U<2tOhTغ*ӟgR8pLSwônݵo,LCM_X'wjWמ[7VoNmSeOEӈ8pzmT>^htS5M>^JӛZU1tO1 --bbl*nZġkh}qRd:jS")(=:[Rd{ ɲUu/y1:2_ t/tp*C?,d<2tOt3uOyrS20yV7"9=S^bpe}[@Gؓe^r}>нE&Dt8,u|1>q%=='/FWRV5uOtFT" g\ֽ)PL+xq'd%N7Rr|'\ J)1Y":{)]U]ŁsxYľB=Skp.kyw}b^ {kU?NP jv*r3"hJ Jg]'.رJ|n'- --"9C/ˋx=gyʋbzoh*ɥ72KKzmq&tyoCuX Bd웩Ʃ[uYQd2'XJ<#m'Rm(U嫁k 9VhDNJyuLt`<+,69&W}n8ZC*/:\Um --˹Vhǫq*ijvyV٢plr%xF`;H-h&V`9' --Rf^w~E?9:W}qXc5^t| 7 ---cNJy>z]tYQdC%`+34 --D&p)i u^ \SnQ㑒xY({˵:MZtt#&ך=P\klkRϋBq(ly>^J8k(יgEq^?:R\4 v^Rlނp-. pw-U2lMNX[^@^|KYZ|ѻ3?/Xys E*н/RUX Bտ/]QX3ϋ]a'^KDw~|[J {^ ]ӫQ,e7= --R֝٪ӛW=W;}G`;/: ;P{|snUqx-/Uy_'KQgw$>Ȳw3ܫ}'v?>tjϠgrp/?dԨlMCQXN'ͺ"|~&מ>2xT^͘;˪HFv(Qu5cѱf  BCՋ2]拺+?EwqE:{Nlz[[nV*{c4FY^S/JBY:uBi+?k//eq4d,EY^;>k}_d+Q٬MX99֯qDZQخ1JTu #^jֈødU$Qs9Mu%uV~Rlֺ=ў2 pQ;-EIy^sJ7NVE28 --5FIQ}}*,[I͓>K|.|~&מΦ[wyi^s|QR%MX%Jo;y(l~b=oR_\èq_GUdq^{~.iҼukzR4m=wk|u;ΔLƿ :i+M07rxVUD%3X6$!I|GGuŻtܮmLW|sV,]Rx --Wt~uUkv~w7GmANڵ r֞dwmtKWid,oMt-|WYfߝ.Acok'd1o1-^O/~]m._l3 /ULn߾<=餳G@ŰYڼ,5I2jU_&ȽZgZ[rs$-ݫMI{%Q~ *r5l8'/^9Zf~wF7o/ޫt9??8,NG@^_GiX|{,g[~e|{Tܴ+5լ[&ȽzgHǻvxujYW=/aiW9Vv5 *qMtU r|:J0Vr|1C(7i:nU7j24v rod,&ڦ~oo~&Ƚd1l/gB&G@;gţwd(Ƚ*Z=aM{n9>-_NQ4hV r֙M6r67@U;Y~UnP˧;/_lǀ rҞϻ ӧ(r6"ճqfs^9Z{4n긟󃵣h]dtx]֍or#9Qqݦ-潽nܫ'i?]&wQM{('}ԫeu^tGڙ (|Qn>6nA@o z hyݦ֍/ --h/~ (|Vn ƀ&Z&Ƚr/\h- hO@?(|)}(7ڍ?| --} --`S@jV7@=4  --:<<n5i,PZkzwZn=][?-7?eu^mL --Wt~K! vUםoOG7Q2ewEtۋ(WEwVۋRf% jygh\X<!־(7m(K>~Lz| h_@+ --_\(CU٩hUm-L&ynyy9]W<;nqqayb~}Г5?*<;~m6_̭Wn?_\yWQ0^-F7qWkv̺dwng'i3o~m(6Nqq~vJc(76^^[I@ͺMS^^ִn׼ F}@UPuI@ h{Z7{l@? | 躀S|hn#667| cښM0NyuUunMZ<PQY\\ --(p`6 ;òدhc趧u̼ŝI@6n9ۼ}yV[y1`ƽXy3>`\Wrt]_w?3o~p8>W;êјM0[Vja9?)uf CJ 8چIZtw%rgOhX}Z=[ N(.?~q@'r@?MPq_ >u8yXh=ۧC)c5pV8{;ݗ2]&7d ao U&>.c._ƉxW03d>"YN冫VMhve Y]'~+6PGa,ty`aYu*=[q@t~.=_b{QYzr=7Wl@{?E0=3gz/^bSYr[Yo+F9c-T;'y-ӓ*ܟNޭJnzQUtr'\Mh:]%72op-/RU ݭdo~TUoڻkI9ȺM:@sɮ1Ea --g:VFgU~<*[d&gG)c$Nh}/ZM=7Ru X&YsvU|&7Z'?vdɮm= --k&W(=d -?Xw/d7Km<2^^$ѵ,/2Z{b&7c)yY;"YTm6Ld/vQhΰʷ0?Z';fН9 JM?Zmn@{=(d-/*^6#}(?y(l --4^gJOFМ1UL šytʭioJ獿@*[7~R O.?xU7L b;7 --D06t&lo3@T9ߟVyVk]=JFtˤ尭MhoRFNύT?߷ שwNt.&F[МaosU3KE-Clk3@sVk*{VKНER%y"VU V?eBYۉ(4gدy^3ٕ88g!}}Wr*yV+]o --~RUr&7XDRF^=:>#V,ç޹4um@s{~q[m@st_xV*F; K/G7^$UrIon2t/GN Tbw? --/{2p@s[._*> --Y,# --(snq_b7\{3LoK # wbLg%e|YP|ꕡ ->sO_7KjiFb< JŽuT$H*r2™mb; ]9gB7o2sgyqeq4pt:dO/wY|<"ML#LY^\jAeOL\MT2컓IbwwG)l2xeY^\*nURi`&~zQe왘P01f(eȚUb0dJc$lTZdD6Ӌ*c6 H5<gPhuoq ^'m%ӫcJ8=r\*Y3^NZu)k=ϿܦL"Hi%Zw6K|w_ڭA&dǭ{JdVhSE'yɟg7ȅ:mO6kzUCnثm()ȃ֋m2Y=@GEX(]F^MVEhj⧢*Z Pu_e}ܗu]ƞ~WquhiuP*s&(ࡸL2k>x\uy.6@|_mam&ot c/.>G ۟{^n --(ﲗ7 --uIY}_*uɞg^rEo3Pӿut<|o~H\*y|!|OwE/͂\Kq>ov ؋Z#(DKm.2f}7L7i%/hd{qYU7$e3@/j4Ts߇fAvQ}l/:w}__xJ2:MT\u~??l9m pZFR  ¿m 2ATP]I%鎧,w}{)<^-j9QQf2*4w޳{(S~|i/-o|U(PCoUޠ./{t ?e]IY"]2* ~hM\~M{Fs"]%D &;w陗Xx޳Kyyp{3U믲BӝvNc?*]#5 uv pnI.^yVM"WKqB Kw~^!|_&*]!?W92]la^Y8S_W,"mHKȽ>.5 u{út ޸Q>}gܤ,SgIu4 ]ZSOKq*]o֥u>;vik%iQ&nϖ.`rI;]S?ԇ*iInkLmgK %UviIQ&%]8zf ğvaj*z>.h%h;k]*oX.7J]Ð.-vM2YlQ3/4)]jOzOKGhVIvϤK~vֺ̽a]pj(KVto{nRʖ.-bfit-'=)=SU钧0κiHRFZ"&&[%T}Lrޟ[%OTԦL+[pˇ(uU䩌$Л"umҙJ{C:ɬ,*6:ߌ˴ --&-S:잛 %#S/SGtɳlEo?ʾZ't6ǁXD]K:pD̎E捛t3Y\l`/9UNǔNywWd~]p4jeupiK@}ReW>zXmM%$7E4Z)`v0/2!"VwNZ~0c_y8m)/dܤ(oX.Z:zK^>ԦLW/.~MN@,s𶬎E捛t+0CSNJkeZNǔNyܴܨ`:N2ҖNy%Jm6jP."xqS.y-Fs2YIu9[<~7S^qB)sK:pOdu4S^u>t! --;*V{wEQӐNe9S^YvEפKztk;iоy,T8l)lLpeALTQ"4tO;t --loU%q0NC]IǒN5ZYu_FY_I9.u87SP=UQ$nt -- XAEtʛ:@:[)`v&^EÆ)Ƭe:]Rf{xyw_,e*Q?næ=7.XP*])DmMLYP lO/+tI͑6ÂL,ըaH!4t `OU>ݟeIxL zd&9uO7hy!GcZ*v-?tEدIݛǺ8z:lޱN?|VeAOcu~~~A3ӎ)[N;0<`$rd"  ~kStOڝq>WJ['rUx9H5,Ҫ? aљT2L:/hBm[/T --xUMZ"Z_ӟVx(KhP ÙR"V]wBh֥AӪԝ57?_UH-|ѝE48'}mPԝCA[ΙLyYʐ|jr/u; @e B gr_$; @ 2ۺVfggjR92e<^O:0'a?b_7.i8qqy,2nSw/fv&~"DO{0o^T5g4(әi՟ ,UFހHͶU֏mSwd:n+%nE0n6t9QFgIf`<\drtM {Ry6ufg'Bfݧ0'¼T"z~wTt;]%fРe[ڜ"50ӟ:MaNL*UO:0ȼwɆ=}n Wә,xxc!rWfV]wOQo /, i>)UˑQaPEZwYd:MaNs3O3$Ry 4wUo 0WܭlSwư(WJˡmNxG=ZƲ,EjV H6 |MgE[ui>39|" f_>zh4uh Dن4wKU'^J>g --|3ӢTY0|dMgIRy 4ngA"ٌ;좟˰H(%6tF{']ċ5OV^zL:4ٙl,4L8|q/ͶYd:MiD-cT-F6#Naa^/O;٨^B$g1B.{uKn^wj:N2 \m"doӜþ --j6S8%5;YEȓ'FЯVzM:B;;o"V[ia&<ٸP8 *J|=j/#td8]ԧOaVbOP8r52?}b~TzȢ83}/s9^z4F"d!ֿju7೚st;0BԭtgBdrܽ>"=ZƢܗ2^:P8&hfRd;kUx y]\]?̣ոk1?y3yd=QY(/H|ԝPn'0Bp>IiAV"%H5>LKડ;'Tճ<]]΃?Vkѝ̬V3lv --,To=OK.si i޾-ʪbXhO/)h>S<(]}94]:6^죜qt!?!ex77zjpUhiXB㓹 2&DUDۙjԮ>xIQy|XNm7̹<][PAFӍ<]/t{U-x8!S>?-+^ΒI)jR?}lmUr5j}Yy+EU_ ([V|scyYIXJpTMQA)/\Ӈ?~OzrńmFtGYneBNMCyIii4Z4KpBԱ>`H}{ tG>L, vkT(ɴL|YNKOV I8ܯMƆ*3|NG)zTYL~.|n:KBt -- R:xI+Q03hB3.kijƴd|nO!>P}iYՏuU$kv(8{0G]'Uӭ>ʙkh3J^Uev9ʀgJge eh]We --WOe|&9D%ӱA[iMiQ(C2^JS|m]#gۣvcS]Z::z^1@V_P{ =X E9UYn{'vv|䒇&Gz2^2=6m/-mdޡ::ۓsFKsv ١:|Pt(\?ֳ`¤?N}C>6.g칔ѡ7t-Fi铅S9v[VLvz6m)ʍ6tQ6ey2)D1ph<^0zԞ.g 'p:w빉5FgyXY\=ᔞ;ԋ)D4K8gp~(=p0Ɋ,"KBZ Nj-g\Y󢴵>We%'eNM,L'١t涾JT+Fta?ux[tdraLYUix,=%)7plцFi* --ъY7h78}VQxvڋ (̓'AcΞBu]`oW47j_vavq;i҈2zyx[@)s|W" --^SwABЙ,, }ZQ(4؝cޏ8T/颢~;l~Qy8#Z̤nWPw8ew5: =ajG^]/J F#Z׵<ӊm~v=xijt)͗;zvKIJH`OOx+.Xsz!ӈD{X-fSwnN෱ih:.2b\^ŮX'V3RF8`@B$P N.ҿcT"c>_w]/S\qv RIT4^'Ѯc$L4=IM0|XF-S:xūuNΦ:;y<<>>~p6d~7I~V". g4nf~cvE+&}T Ӫhw=?z`2 --h! 5<?w/o --C)/a6u;Ϳn%6uΉRURӲVj۝geCjy!v΄> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 224 0 obj <> endobj 223 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 222 0 obj <> endobj 227 0 obj <> endobj 221 0 obj <> endobj 228 0 obj <> endobj 220 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 219 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 218 0 obj <> endobj 233 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 242 0 obj [/View/Design] endobj 243 0 obj <>>> endobj 240 0 obj [/View/Design] endobj 241 0 obj <>>> endobj 238 0 obj [/View/Design] endobj 239 0 obj <>>> endobj 236 0 obj [/View/Design] endobj 237 0 obj <>>> endobj 234 0 obj [/View/Design] endobj 235 0 obj <>>> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --130.2232208 0 0 -130.2232208 181.4170837 178.7505341 cm --BX /Sh0 sh EX Q -- --endstream endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 245 0 obj <> endobj 252 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --120.39328 0 0 -120.39328 180.528183 176.5283051 cm --BX /Sh0 sh EX Q -- --endstream endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 244 0 obj <> endobj 258 0 obj <>/Shading<>>>/Subtype/Form>>stream --q --0 g --/GS0 gs --0 -0.4444444 -0.4444444 -0 170.9031067 125.0784531 cm --BX /Sh0 sh EX Q -- --endstream endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream --%!PS-Adobe-3.0 --%%Creator: Adobe Illustrator(R) 24.0 --%%AI8_CreatorVersion: 25.0.1 --%%For: (janek) () --%%Title: (keepassxc.ai) --%%CreationDate: 12/20/2020 5:21 PM --%%Canvassize: 16383 --%%BoundingBox: -224 -228 324 320 --%%HiResBoundingBox: -223.39905511811 -227.480944881889 323.480944881891 319.399055118111 --%%DocumentProcessColors: Cyan Magenta Yellow Black --%AI5_FileFormat 14.0 --%AI12_BuildNumber: 66 --%AI3_ColorUsage: Color --%AI7_ImageSettings: 0 --%%RGBProcessColor: 0 0 0 (R=0 G=0 B=0) --%%+ 0.403921574354172 0.729411780834198 0.176470592617989 (R=103 G=186 B=45) --%%+ 0.988235294818878 0.988235294818878 0.988235294818878 (R=252 G=252 B=252) --%%+ 0.192156866192818 0.450980395078659 0.16078431904316 (R=49 G=115 B=41) --%%+ 0 0 0 ([Registration]) --%AI3_Cropmarks: -131.417322834645 -131.417322834646 231.417322834646 231.417322834645 --%AI3_TemplateBox: 50.5 49.610236220502 50.5 49.610236220502 --%AI3_TileBox: -235.600006103515 -358.899993896484 335.600006103516 458.899993896484 --%AI3_DocumentPreview: None --%AI5_ArtSize: 14400 14400 --%AI5_RulerUnits: 1 --%AI24_LargeCanvasScale: 1 --%AI9_ColorModel: 1 --%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 --%AI5_TargetResolution: 800 --%AI5_NumLayers: 5 --%AI9_OpenToView: -373.888888888889 363.332458442724 2.25 1992 1274 18 0 0 78 121 0 0 0 1 1 0 1 1 0 1 --%AI5_OpenViewLayers: 77773 --%%PageOrigin:-247 -370.8897637795 --%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 --%AI9_Flatten: 1 --%AI12_CMSettings: 00.MS --%%EndComments -- --endstream endobj 20 0 obj <>stream --%AI24_ZStandard_Data(/Xj+@y1,q7yƺџ39297"h --! w<{^ߞnƳ|w{u眾;Οs{/^s7>k?kfo6֛W/抅,v"k=X଻==bw}rqu˳Y{eܯ߹Ýsyߎܵuu]{s.޸wW,>0̊E=}}S,:ͯ}Zo.*ыbX_bm^׿y9ouvw.wkΘ7盽;cwY0sϚ1go׽qݿ~wW|8f;=Qg/_{{=}>BOF~˟7Qy("(z؉\b8a?bCpC?`CEzsNȹbyE6W?Xsͳb ;Yk/_?EN]繻V,}'nc^C!rP>?/= =nq;}m ?O̠7?!(#xCP;a*=P oo"ߌcv|]yX"{wx=jQ:Ԡ;Zk5WYa}V,z:g,s7]8_ow{w;4w3yÞsߜY,g~_w{1=Wߏsg[{w{sʹ˹Y=ޗYkw{~9ݻEQox+|ùޱ>}/wwLnqs7wwE-nE/~?Cq84{Q,rG,;c|x^~׻owW|W0}wܻsyߜ+w[b~M}-gg],e*=޸]}_Xtf=~* rv3"yY+[0EIҢ" e+ --QV,Qyv%A0<`zZ*QzZ*H.QBc --K֌\&Ւ3MGg2eTrmIDԢ&YI<ٔqZњJеl[2`Reg)ak*CHʕ<Ljj$PSE EZU)RVesM[UY() ݨt͠f+vP>Ahf+MP(RJtfd[RpۦX>ܽ1Z-y7wo_,fPnהLf\ wJg{q\vyow֚ӝξtהR:BKU3 H,ؙe-[+9BqLY/OR%*[+A3 ۚ(i-X޽Ex P^<הc/Δ̗ߜ;/3]^YwYw91%y@Slc|>A}?afw_}|qdw?s||YA& .~:n?_1?wfn6_v2=Anf2¶PmKQ"aT,edI(ue-SX4c*㍇XoS,^*2,O٢ed(I,욞)Ȳ*]A-Zb4Xg묳=~zΔ c1i usd;gJf~-\6B{R0YPg7\qf)[2DS3bj˒jY <[smEE^%JJ@2˚ۦX`rq2JgQ{ɣ"?vz;o%++rAkZMRmRjeU+LaN=]{cݽ>78ok%Wo1n9yDe嚲/[:@:ej뻯]{MGėw5q߽טN;w)Y@*|wB&L٤̻~}1︛{ӜhAkIMT͡Jq{LN"<",qc --\0@?A ʏA<Ȍ"Évⰹ&kl*jLnTq<e"!t,B м2~ e`ϤruL*IVR%̤GDh#7^AeJQ)Zm˔2% --cdJ"*tj`KU\եJjM l-W2_k --@zt[e(9Z=LEoLAY5W/4&+J6$%3*f橪dR䙑fVS6[%Rkjj4CSb)eI7 X2+OdBM$ ͲfJf%[Ff)U2,9V򳖟ٲeH\3i0ϧI)X5*[r-2k%?0s --%[QJCP!r͠ \AJJ=婚Hs:eJU*T̔D%LIԢ)JXdQ-~t̛5.QXKELVa?)m(Hm(ܬ\RAk8iuVT~C(g0vN_ NR`_ KMKMD'5, u}r ڥ쫅rZuK#^AhV$>g^>% G> %G=DM2sZ=Ӛ'P6(@:jBSlBW1@XʤX mEœ=PK8pS,&U[`I |Hx,:Dl z<[!hDCd*TWLH0GU<  P0T/b?PpyH!hQ:%ԁE&DVxP"& "4ب\ SD0 5`d[0 --<ᨀ}awAzv --6"<U, cŲp2%2ąu3BK tLPp vx{%|)uS"7b\E~ﶃ;N;!gCBNTN}$K&mQTo% g4فSi3&'vt=ؾAsҤ4* --#L.*W9ILv)OZȤ%q ϔLO2u,H#:II&&lft1#-0Sd@6D8x<=Fk!NG *#%| Q^b~1}.ȦX`^Sz|\1 --1)l;|PS<( C:xrlTf!1r/)uǦX@<рAGo --spJsT,uE$ΔXmb3ӆu9|6ׂ+X.m݆ xsx&'6 Vm\UblkrT8 d,K ӚM\&PFD2H`a-6\`mlD'K4`VXI`4N ʁĨ@1^I$B VAA%a1'NDi0HÅَ*b4:ңelƃTƃڀ1&N$7,&R &B1( 1*$pR`(hLڦXP4 5i XI#.I۟H3Ԃ -2$hh^FsP70!jF˧M0JMshqmERhɢi5Aڊ]ht@ZY-`W;0[-BIq@J%c,L4#RN D\C p4Wߴ$h !AC<8C4mhV",0tO!cC4`h[$ڄ)!1$iZhBMЬLUihih --\>/V(K=@ e^ob"/<C --x ިVOJ祉>oS,&lXo"11XSNjܔa7n=au*/ 7Ö!wqMhW-DDLU)0ZHX`&$v؞Z8gt F"o$\F !ւPf.M+kZVD"G"$9  t erA[+J:x n @rȈ6sA --hudH|$[L}j-J 6I`e&D#8e#dT>с&2X6$U7[ZOmaHl``E__P%Ƌ%B+L(\Dlu0 %3uS,ߣ90hN5$\HE>G=&BP (Eku? Mc=:"Ta8TkAX&ԏ7{r#:V8uOĦ2:qe2M@u7‚XX1GM& r+܄ÄYW= --"7`I<'-ITѨ(#\ԓC\E"KYގ`?c8yhNc8011h1]Cv9p@ڇ ̦Xl5eb/LG iZ]{&&(ЁIMC3+Hj2.(31HQ\&V NZ%8]&"D_A*IdPN"ȦJpRA%8H$dE$L`%!pBV@Q6V --&`Ɗ86k8h N]-7CvTym!mNA `Bx 4f2kSS辑12"HA\V@h\8CeV(-ih@A4PHႎDCQ'/RIp'bA)$XRI~MKiI2$Sj$8= ΎGidD8 --DDh.Qdya L0Hl=6Fhm騑FwH0 Um$nĀ'q0&-e.ПQ c80e@kHD&2&FOǤ}MeF"H>Vw#!1 --{i2}yS,.t --XhZL4˒JS&kZ,ba&YJPdcu */b<HYeL^Ph@֝@>=S&^:_!$sȏj_ȦDNMe.AVHmy7U DdT[^±)0P@mPNLĒH`iDd(DBJpJЉYW=e.OC},I --KWED%A~LmEe52Lj --ЍGAU0, GRf1`y4נktP* Jj8qѢ]_&NAm+ cF#h+Ƭ+X*$ /Mt֧Bbfryi` --vGF@X]PBC[!3 qq$p ]M4bW-yGxCqh(6eg . 2` _.4*[ā%t*aP'E00KăŒ 4פT FWRHe :8 ]!I ./v¾ktCktГ /,)Pdy E)C ---X0E'-u]h\͠ZtDV \)cu) BbW`O_t8Rv=p TlKgD\ryd bnHy@ρ%h[Qu7BS%,dwW$6/x UhTѱnS,a$m` Nf6b%j$!t,#]J^MZTv@JX%,|n1^ёa"23}3],vf`DDr9Yn-lIT,`) hY~`xB)ȦX pUMa5b)dKvaX_zoEؑcu%&ς%Js!]0؂X3/T)3hn7 $7ɖ_5Mj.#COD$6 X1դ̟Q&ùbAp; DԋC\&h-=%Duh"  :P4IADST3f-+iGs!HۖaA>D!ç̐3p|Zm:!3cZ IwMD(`n]! dLOo.B$i2dvLS Ehf` wI6,V@F02"I0, őAA)Ŕs&ҙDsu D&[xsWi)}BV5ۂ^(& `GI0p7V*xI^J6L2Wب_\͕@(,60VML,;Ѯ߱ +L\Dz8ЏVn2~;-Ґ/$l6=7 (eqB.vl^ K.þ/ RkcK_΀ğ'FUk卢~}i?V0F62䃽G-Ռ2F!X1IWCYKEFߑy(޵K4AHؔ!t.SGv/ts bpt&.~Faig5kN#&x\Q=' 2h&дƂ7ʊVca]gW$5 :v }I_hl¥ --];a3ZF]*5#~g0cc`gE|&%Nr>%8Ck?];5eHml1% 4 vgiTQ4tG8r@LhَmQ!җdj8TGhqkH)K>˄rtCܒ2"fê7dT%>lxt k z&4Zq0Xc.AdeġUJe(ih"|i)x5 --g}ɓ6~îLnb`@x!LNe p!qZ6T8N%0g2QK5R7&wuF>ĻSl/%ذSa\Ay3jNn^On`$@XL?=11 --jG3DU$N׵hOA@n=LS}i>Rٚf0N`7l"a9ݸc&^K0@˕668&y9Qm}lDCqgFr^`lp8 T='ꂸ-}=Y6X!ͼnPYSL`ht? WF4'ݞO%cU`y𞱋Vd.BPZcpi*gn<PUA1`Ɯ!Y۞{e`gJ{!$S ~:i6e-b}R8"u7ɕ)T4Ɏd*r]d.M^)807"5|CeJQR\\@8.PNDOv`=R? VEj!*RA}dzɣDf̲)'Q?N*," --Poވb'6^YOǗ%;tdz"/p:!i4Pl4LDp<Rh -WxL~ZiBly$*&bC"%$UypES7wQ`:pVE6Րq.XC_MRÍݪrB4vIUq'_3"!-bo[Gx)0JOly"6j.YmvÙY[[.j>mB_ơ#ڰP$ =0x؄jcS;!Ynt}?qOv_TdNGNct2l2PبdIH+%rg_+{=v1g9QpYuxz.r%֦,N.VƗW*DC6^|e<9Q;l٩ˀO2\36ywWըgsg`;S'}#QQǵY-U6 --;mt~ ~&ԛ4d@eC9Cޗ5J'*0taKhĜ7 BG>t>K+OO@%}zaja] aEO4 --Znt5.}U &"/%{P!U2DTm`ߩl6qJE/{ s5qWKMXv^HY*y 6;<@8UԞzd39gz|U0IH|mHa)}Y*j3vP?e8]gMύIȾϷ^߻+Af'CgBDpSC2Dn>y^wñRSqWr&(șgr{]) e@i$1Ӗ3d%ɯ ^4lQd.CNak Х0Thn1 KA)˓Z ~@[RӞcNań]E~I,55twPbեQm,٥4,llD+7 ^]rm䮉`"K0 C٩pf'3j{T[NX}8@:̕0E6%ȱ5Ԕb,>f(濟MKP)QXçN2Mj=<[q|hIj_kpx5AAI:eY_UctO\w"8O --^_CȳaeɛN˃B>xppDW5C\9M;8SZiӒPq'j@KG`e A>94Vp~]m euo %8jkC ^SZ3);m vBb.evPYݰ#Jx --p#Vb[ K]:b-ˡ# 2M_YjUfTصV4|'(wX+Ean7QzD@}SwG=:KJ@.dKuKQ;aCd>|mN8#ޠYf)..};8Rj(@L8@`"GAcYo,z?!P~=U2${%ǰe(sk s,T C8h1ZsNc켨|zʉ&f&YldjEc5a16g ?gN9P"In muc}lR@1Thv΅=*F@zbq$S) SEEh)(6eDb -- 'A">fbm:5Dr3(Q]8^XtsC?q>r:ݦTcy}]V8`cJ^JR"t --)z;h_PJ|X>JR*^der!eY‹! ߳i#oDz8/)b{|\3%UKp,+xʎC`D7 mbV --i\^λZA0q~cW*HSD.oCWκ3qvx]jYRPC`SRU$-(U|8︗$Rsh{AE_]k.x1']m,T{$~qKA{;oi̾Յ@:pYGWk>Ktyf!\TSeDpMIU)KTὌn<걉3K9]n$8ep;&$StT --%盕v_Ds4UyTP --*k3B `W>*!4p :^t|P"[S;^fp}i&fU#G'N&ljVQ37Sjw8Fグ:0| --vǕJBo"WD%RIh&C --o's& --;77~+ttQ!,Op+C/21h:J+<S6x )A_ E4auAo䑴lR -SȦ`]br,BYa2T̂"E|q4BlM3Gf}k`(9X%6Ր!C,"p_#ri1~m5o}f}?N,69=ՆZ>!qxQ\gK>iι_? ~ް# --Xf=T! ȣEW%W$S!w!=aVȷ1 3 `V --P0-BH<7F'2J(Dr蹚i[iN3,umLx`J4U#fUj| QFiz`˱I8u ŪqNֻ.88"<#6IE핏l-%gf[KQ%oDx'KR8c1WڸB?͠b&,0hO)؅O@s,%㣧B:fq L3W;a!hxc5W*9>}hڇv bA"r+BpQ*LʻA *s"#~ws~Qvd]X$ 6=ݍdNì --uE,,#!6spǃao`}d --nmO4|"C6/mJEE[ҍkiȋ?_*ʊPɍ. R'%`X&JƼlD5(01+毢;NjnƭT(}P74*\'q {3@!c=L .t0˖ob-ym8-d xr*odkIE4u6K1rnԑҪ';8|\:H~ w򫅸fEi巤]ԈX5wrV.9w0P qkD5`PĆyT/_:HMi2 --Xݟƙ-KoX.pS$`zy&deVfHԢ(LnBb$MHC-o4BZA 5ne& v֫U> "-3g4z>\C --xź0@xuԀZ> --pa N?&.ų?\vǃ84Z}?w(T>A!%^E>= lA3m,zwb%aZ]zzNA9=Dc e7~@dF=a1cLE)`7N*18e/(hOFa:``և3)35nfUGoPT&nLޥ3/9ȑ Ep([Lk!!؃/. X?^[υEd*)q*L43at&dWRC)PQDZ' @!(R{ޑ)i --(_ ^$ fws dV/?jZZpDgH@]t-⒧/h5ڏwLĶ2ʬd]٦gEAWYV bhS8k8-%T+s2 tLq=>Nm0Vhsk.ҥ --xBm?Cq{'FBh%)Lh`ZQKrgƉ-z:C1a(+h+iWmf --HhgeN κͱԢ!XN'Xq%Ώh@{KT$z>rt롧fX龞;,van,9ѭ`%sVB%n:Pvx[ϤՆ0D;+ \u7 --L蛺Nro::R?_} --L-|Jg~{F3$v闅Sށ, &4oИ[s351Qg,0rEѥNA|Ϩ;YlWx l# =pr Ǵ_y|.шdaq?9s*|?'Ѿ;] v=n< =' tD7S!-Civ Hnc1V%6,Υ^ \'jT#tKQNVo d5B Qꖦl.-~'@ء]zfW\6a --V\B v@{c.2߄n >^90sYԔ&fŻm ee --*V6pqy|Ibvt)k'X%ޒ XC!_{PC6Uʻ{^=2/iF7"iaV#bZlbF:wLD5 --7' 37X}c+{W 쾺;S'_`&A}K CH'f١}6JE0@ 6G@@I_ra5FA;3TN43!sqOK --$ފG$Qpyئ'u8nM5݃pB.NMJ9 --lG!h'Xz +RH2j'SϦW7,)VĬs)1 --b'q99ّ1L漕sseb^ -->*Rn;APȝ --+W-RXL M曎?F4D`nd*(Uqtrrk --4Xt1pdQeV f.TH*׺+8(MG6smr /vz!rEuґkTLEZ>hZ hyoISDi|\QtN.6+#[ h&[:n$57!37 %.3$fbOцY|f]~Bg8w;"}8ɰ,YyuqۊCJ娭:tzRm"c3m܃>gO\^Q#sג+G K=Zm[ůY --qGd@e]c}"0yBU-v hj.9ixޖ(/{.+f_͓R --97X|+D9]{2Ճog!XS&紁5D+}޷0V+*U}>t%*kjLe1"OӚ;%3_${Ԯ;qB@]c'5*Hn>yK`uO_S8ZLx3ϲ oe\Yk" --*{s8=KR03_X9э_34Q'Rf7Ϛx%MPg/Iػd%Yz%*UL jG^jTKD#utH_ Ee#锔ԪNe+S^obdb[DV"FdQNfId23%Sz --ө]UWT4@9x=HB <`!vs0'Q9д1λ(Y;YI^,"H jDmW~z6Q8x?3<t`3ޖCyJ, AƘId43wrQySQ0>6anAݱvgSMHJh'}x 4J(*[!pTȳO5ˍGJ<zj$a5@i h,hK;4ze1*^U[g`b4lﳔu7-} &EPSI/̆ЋV! Zsޯv,Bd%ʤ߬Kg6UZ=fp|05YnCl`{^CkmN궰ǎl&S 7>?csU065Vi᭎aN4FO-t(VP@R-./! 8`^(rڥg{Efe 1^iBU.Zj1;\u ݳyUi_;UȻj%YY`/\)qgflwgD؀Lq(r ڂw$.5Z]?ZlqE;3Uit ir|\r{N2`S"V"TGR --YP/A AnWm4t@~ --92_uvC-*Sdv5wToG`7NzK O8U.Oe:o5ë^V@G^1M`!!}IL3 --P|~z DK2H==azXuDSaRȩn]^lq@OQCj G]|L_Y2m} --b L"C0AQt]  #Q 8]ъ;Τ&uC:YO9J?ꪚVHE(P@1ɉԐ}B$3E!L{#*$*C ɏ( Aycl]!{ONΆ(",Ks3[Jͥ借VnFbS@1 +ܱIr\aֲ@5ֶbnX:&k6&]~G0fRnJu>1 - $`q%,l](̷3"J0a(|#,?X%m͘ğ Rp9rpH rmW@@L#8@֥Eች\nRƇUbO& .Bq5 5$ %e$ƍĢ@'͌42oTzU0Hn[0bnݵlUMRgޠ䏦4Z-<60k<<<<<.C0!MvKE,s=nXKUOx0TFx:><7Ɂ --\lհ:'z&g|k3~m!G?ר˛PKڋP[O~bxr8ɋ@/l1mB_GC)Z vo HKtsa&g@~}6_PT_bU[g*3~BA.{-uz(R=F{x FUCxo --y||NqpȀ9%-H)'Sv<(8I b6B9t@bJl D $ؚW40TR7nH`@4MARe_r44%bx+{lz"pyoV;/CTe/0 --%B$OZXKg氹0fϬmt;gʉq[r/2EOGe8׭=/ʆX wp%B"s --r53y9 pp]v-h oh5a~TTC/|ߌpā)L!zv4|j$"z M41I#$8LQmٓ1@Q_!vo-zӻ9y娱 0i,\7 y,~/Bh%X\ --R4-ƭ0Ѭ[Yfjr##j%U --w]7nq)0*:paXN@j@ꢂ!1K8 E%DA34B)^͑޳ --6ga  s_ 0 ` .kLHnՖv&v3[a,j(Bq* -- k0u~Ꙛ=Z|Ҙ5j/F'm_RKT5Y #Ë#~ ,_7Yt2Fd (99z<98ܰyu|V;\y`3|\!թDKF~.?C6);Xv^;CӓF --_xΆ/C/=T'ۑ50GɑU/D_TZ$^vT xgk@+ --zy/5X jtu4ќq |OHk02!Q5YP17 N1xw qO qo9HKJ (*M(b^"y tsLtsSm>?MiV)1Y)&B:գ q؂ՐYya?,떆+,IY!>}bM}1N`m䩓@PY3iN@`켘f va<}PZgw>|8[N^܊ !J --:gAQ!XlnA'@`ɸ<_>P$椌;NWV]ϲ1r a*F7*x_C@pw!V #=7 --hh޼83J^}#BE ,A38|# !9഍EJX1JB~ ώ/Ayu["RL+nH|w&2 yрpwȉ~JX5$M{87;/C8K-f^ZЯKwm1<`5ҜDȒ4d'ךZcYi[F[G^ ]3Bv+阼9 3R<5Fve*W]H YX72 9D|Qu18$)A7 m#yuʍ qABF5,ቛ)<X9AI4hx=8S: --vNeʸDV9ίKX㢘ۼ'*}d})(:SP$=ˠW*/Xd P}qc>Em`6'u_0+(vP^y@<p#q$@+nF#YKwOz|Ҙ:PZ,Eֶ --`qŷ)rAl y4^aCY#mbCT<`Mx̮13=LHhO0F+yDQs7ܿT`C2kq^MI !/i̥z6F --$lO*`Cٌ6 B^URoNaن󘉢AD@D   &cQeʤTb(Ad 1 A M }/hj/dO[O,/#:3{iuM<:et%ŀX z dniLt3t-(v X㒺5H i_,UZi<c#u?tJl4 Hw7 ,RA9 AR]pj2t^$FY>m{Xnp3fOaIߖIC罼ċvC^jb>K}ȫ!kNֲq$rހ^Qe@!Wuy舩{ j˒o;a!]R(:YTgyot* goir^'1fc8 sfb$ --ó@iATA[ *r弦~'7)% #s>^h)⛮'}*ۿ/8#" --ab\7 h@- --A:Uߌ#*@7pf"`h6r72O>$''c.WmߛCu}I Ɨ](?p,""q(4 A/#D3{|…^.a/6xU)x;~= Yc^7wgE)eծӴ\[Ϳ|BX3RAǿkFo5>D5128K H86ˑn\w --*?Ϩ}=SL˲Xᚰp%NbȢi4GU\6GFG.aԷ 3*ئ]x$I70ЧoC֝2-tAucAs MwlֆqY[Co&/yF#;3bg=v7^ֿſ Wpx|u{fYD&T Hx9}'mI勪0AgI%] I҇ R|OҰi1la}b|3$~U:ٜL6e:S jD4.s akQbd@fdA|{+Ar.m{o Li6dNW[0H+!"d=$<јL]M+έ@,.k)ة]>|.@-Ez09Q !qBv+[8D5^ܱ . S=h}|W2ټ4LF[25cB"S6!|p --Z_m]rpXLcMO3]DJQDr[N,(! 9Ԝ}k"i  X)#0cS{CfGk~.壖Q5= 1[bD-)A;;lk/u[DH TZ --$>XxGqteh蝻"&]2+ uFr3.X-S@E,ꆴrqۭD2z;2c:GrkL0ܾ yGn+𪼩HJǬ/\AO?zӱ3XLו2NbhSÕiq;Hs5~=w)ĥX{E`$նhi㇢ʪ[`][z.G"E3a`9{J7}3%B 0E<%1}5H'L`<@o&Zc{ֱ{4yםW`}RIbA+"NZY)\UNB KIټA)M*A? NO-J)MN2͓>eLj4dU$`fUgf>b\-]+ RSwO ) (ο= J@1($җ'`׊[cN\cZh4׹{~F-Yycjc#y Oɀ!1t_t)'1{-h.Ǫ-Ֆs>=Br --&0\1 'Q_yB'R-<Ə?W9`[Տ0>1̰%faoy3721UDChm 5FOKi硛$$7:}Kiݭů4t&a(4BޢI\1%}6?Bi5E`pVKoyA[K1W:s9k,\iƪ"\~"_ WB/T%7F('^%pR5ا'kɄ&0]}~[^J,+:,iN8+A( /2%80"kɧAϫqZ&k6{l[]5 E<^peC^*wZX\2832 -)HkߦEpi`(" aoQ÷O蒅piޅnL;h0p2G{VTtv%y8~H$9pnNI"ҜTnPֻo Q6'xd F>BTtB- ( QG~' -- --X@z׌Q}I --4`(ɗq6ޚL2Gw]/)U;#GӗB,t>YKQJ~:*G皿NT ʤ4rK~Ikn~O|3ʬXqZmd 4j0%XUE --] --<@=">mflhψ$d hr9/ljHt$uĥW想bex$b;3ME#RnTr&u@^\i ó5N ̸/;kl5oI,aqYhԝw88Pb۬@k,UfnKJ@ B=Tna !8)9Fwap%Xp?)_,Pw4#Qud5XO¾՝Խ(vb|M~'!8O&8U+&U!<-ZYQIJJFkUŤTjLLKI!ǕSKc0 -- }61)ҏ2ebD"ӤJ]6T-Jd [mSx-\?3LV9}g+Ԓ957K2P?'?y}MLlIoPcˌr*} --??o&7}'@ڐB6UmcH/Di\8 --\=I5'cS4N`3vP,pDO=.(ZM<:=lȔ2vd馧Ɣ$z4&:| @As62  C>j(T"0@E>("@>LSM{h$>W{ jO0G>гOaӇՇ+5Z* pt%@(`= --A'b²} kt7@(ڇ#G B>Fp(= --PC>Xp(؇#3@|z(}= --'_} Cxt@(݇`= --pA'`} 4C ut@(݇ = --1A'a} s K --5`*ԿJz!h'P;@SgS$=?H;@H75L3 Ѓ --Ѓ?8@*@=8P=􀠂8C?8@g --X@=H)Lz0R =z!Fp -WD3Bp  --?8@*@i= =B  --?8@h*@=| =d` Ѓ --ê?,@D*@= =WT4zX@}?8@*@=ȫP=  --C?,@*@=P =B Ѓ --Ѓ?,@*@<=P=d4 -- --~XTP=\'@=$z`HCm?,@:*|azQA@ -- --~XDTP=L聻@=(Wl4f=zWCO?,@*(az`UA Ѓ -- --~X@U =`pH@d= zhAP\?,@|*(azS  C --_d4b8?,@+(azHXA -- --y~XUP=@!w@=zhA\D?,@*(2azV  C -- --~XUP=+|5*ZA --M~XVP=ം@=zgC.? @9+(xazYA  C -- --d~XNVP=8聚@0T3a@V=dzarЃ?,@+(az8\  -- --8~XVP=􀷂衏@=z0!m#?,@c+($|5@ -- ~XWP=tP@&=$z`ax ?,@+(jz]A -- --~XbWP=@M= Nu\4`za{ ?@+@"z _Ѓ --~@W=C0Ѓ --@+XW=`z_APC -- --~XWP=8Wd4xC --&~(PW=聈 -- @AP=Ю`zAw C ? @+@jz^Ѓ --~@W=Ca --,@P=dd4-+(V=P衏 --,@w=`z!pC?@+Xz8\C --2~( W=|0聋 -- @YP=p`zsd4Ah C+? @E+@Zz@ZpЃ --P~@V=C@a @P=h`zl #? @c+@z0[C --C~(V=HW|5*Tzc 5?@+XzY --e~@NV=,C衘 @P=`zaf /?@9+@rzY0 --Y~PT3T!x @P=Ы`z^>?@*XzWP --w~@V=C`! @P=0`za8?@+Xa|5+@AY CI? @*@JzVô --~(U=d! --n,@=|zA\ CC? @*@z@Wpú --~(U0\4 @*@z`U0ë --~(dU= 衧Z @=P=`zaWM?@*XbzV --~@U=C=Wd4tE @gP=8`z!RCX?@*XzTå --~(4U=TЩ衪 --P,@O=zxaTS?@*Xjd4=* @=z(N _? @s*@zSЃ --~@T=Ca? @s=zAP C[? @*@z@Tpd4* @=TzK e? @[*@.zRpЃ --~@T=D! --2,@=zXLb?@j*X --z`Qd4|=zHЃl? @@*X^zRÐ --~(T=!$ @P=0z0I h? @O*@FzxR0Ѓ --d4E q? @+*@zXQpЃ --~@\T=! @P=ШzF n? @7*@vzQЃ --~@zT=|5-`!  @=dz!CCv?@*@zP0Ç --~@>T=LC ,@=zhDCs?@(*@AeuT3a @P=(z@AAz? @ --*XzhPPC --~( T=A,@=LzaBw?@*@zt5pþ --}? @* @=쫀=pЃ --}? @*,@=z!@C|? @*@z P --~@T=p7\4#*@U@zxWz]a --y@U@zWzA^衿z~@U@zWz_A|~@Up\4{\s@U@z0WazH!]!t@U@zHWzH!]! --v@U@ z`Waz]{ul5H --U@$zWz\Ap @U@$zWz\q@U@zWzxa\q(U@! --L3m @U@0zVzA[n --@U@*zVz[n --@U@*zVz[r_l5G*lpõ --Æ? @* @=\=lpõ --Æ?@* @=h=`Ѓ --? @* @=h=`D3Zak @U@6zVzZak @U@6zVzZak @U@6zVzZ^Wl5põ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpJL33ak @U@6zVzZak @U@6zVzZak @U@6zVzZa_l5}õ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Q --\4+@U@6zVzZak @U@6zVzZak @U@6zVzZak @U8\4:Zak @U@6zVzZak @U@6zVzZak @U@6zVzZAFul5*VzZak @U@6zVzZak @U@6zVzZak @U@6zVze+L3ak @U@6zVzZak @U@6zVzZak @U@6zVzZa_l5*Zak @U@6zVzZak @U@6zVzZak @U@6zVzZ(+T4%Zak @U@6zVzZak @U@6zVzZak @U@6zVzZW\4põ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lp \4^ -- @U@6zVzZak @U@6zVzZak @U@6zVzZak P\43ak @U@6zVzZak @U@6zVzZak @U@6zVzZa:u\4=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\T4Zak @U@6zVzZak @U@6zVzZak @U@6zVzZ聧Wl5:põ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lp+L3iak @U@6zVzZak @U@6zVzZak @U@6zVzZa_l5õ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --+\4*@U@6zVzZak @U@6zVzZak @U@6zVzZak @U\4pZak @U@6zVzZak @U@6zVzZak @U@6zVzZul5: --U@6zVzZak @U@6zVzZak @U@6zVzZak @U@6 --L3ak @U@6zVzZak @U@6zVzZak @U@6zVzZa_l53*lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lp†D3Zak @U@6zVzZak @U@6zVzZak @U@6zVzZhWl5põ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lp^L3ak @U@6zVzZak @U@6zVzZak @U@6zVzZa(_l5iõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --e --\4+@U@6zVzZak @U@6zVzZak @U@6zVzZak @U،\4&Zak @U@6zVzZak @U@6zVzZak @U@6zVzZHul5p*VzZak @U@6zVzZak @U@6zVzZak @U@6zVzo+L3ak @U@6zVzZak @U@6zVzZak @U@6zVzZa(_l5*Zak @U@6zVzZak @U@6zVzZak @U@6zVzZ2+T41põ --Æ? @* @=\=lpõ --Æ? @* @=\=lpõ --Æ? @* @=\=lpF+<3`}v0vKa/cGCďƎ~;:?vt;%~`/cG_ǎcGď:?vnc?5@ --`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXv^3a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`"+59*,vt;zXva ?`G%~0`GK`;:=,vt;zXva ?`G3va ?`G%~0`GK`;:=,vt;zXva ?`G%~0lB5};zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~@Y]3%a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`{5oa ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`xU]4*0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXC+4,va ?`G%~0`GK`;:=,vt;zXva ?`G%~0`G@+5v*l=,vt;zXva ?`G%~0`GK`;:=,vt;zXva ?_3a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`5*Xva ?`G%~0`GK`;:=,vt;zXva ?`G%~0_3ba ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`(5;zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~S3?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,+5%a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`;:4+0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXk+4va ?`G%~0`GK`;:=,vt;zXva ?`G%~0`G -- --5,|;zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~3[a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`5a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`4;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXva /4bva ?`G%~0`GK`;:=,vt;zXva ?`G%~0`G --W5, --`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXvr3a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`%+5%*,vt;zXva ?`G%~0`GK`;:=,vt;zXva ?`G3va ?`G%~0`GK`;:=,vt;zXva ?`G%~0B5};zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~Y]3a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`A~5[a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`V]4*`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt!o4va ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GT+5b*l=,vt;zXva ?`G%~0`GK`;:=,vt;zXva ?_3a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`A5*Xva ?`G%~0`GK`;:=,vt;zXva ?`G%~0 _3Na ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`ȷ5;zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~0T3?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,+5a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`;:Р^4+0`GK`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXp+4va ?`G%~0`GK`;:=,vt;zXva ?`G%~0`G --5|;zXva ?`G%~0`GK`;:=,vt;zXva ?`G%~03Ga ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`5a ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GK`h4`;:=,vt;zXva ?`G%~0`GK`;:=,vt;zXvW4Nva ?`G%~0`GK`;:=,vt;zXva ?`G%~0`GW5 --;z8;z@$~;z8;z@$~a;:=,vt;zXva _3A!~؎;z@;z(衈"~;z@;z(衈$~;z8;z@~5*vv?lG --`G?=(=vvу?`G --`G?=(P=vv Cу?`G `GB=$=v+3xa~l;zh;z~؎r;z`;z!~x;zX;za^5 у --?`G=v у --?`G=v у --?lGKZ;zXv~<=v`G0=8=vv0\+3a=lv~xvOLu#MVեau5 R@TX~A'@&Tpl!Ca&X2Tp`CAQ@JTXDP@VTp,0 H4=ܨ4=AG+ 3!JizR4=H(@,M --0NCaL`izHS4=(@,M=ANpSX8M4aOR@TXV --KC --NJiz8PA<5 izR4=l(p M! --$HÉHizQ4=(px M3 --HCaFizhQ4=(pT ME --HÒ!DizP 3"Ä --HO4=44=@Rp M1OpSX M:MizHS4= (p M --0HÃAKP`izRpC -- 5KKAJINӃ --HC&8M@* MG4=4=F8M1* MizXQiz CizQizhizPiz J+% q*PMz4xꡛh_H,d\S4C4AgzX&=Mԃ\Ā؃T!KhPN6f* MFa* fp4=?>$Qp <H }'`C xJ8?0B

zGy=` 衝@z8'ɀWdn=$< <4Lp{N.H=,@@z)Ѓ6 --/= 聡@z0(CRO(+<zЃSb --CP w@<()L4(FPTc=Y@6zLڃ}pxPsʡ5P PVN=ʩ=%a@a@<`6CP t@@<ThUJ= --聙\=> &= A@z,ЃbMPW< n@zxp*CPd! w؃?BC[znAx͐5 <|!M --e=p PpA!x=VS*<@l6Q --\> ~@2Az 2,?x0>a\J<\ ~ eC+)f?tW|li0=?4/xpC"< ~ʝ1?x@ j™zH= pg@Pֆ>$@= CJ>~W!`j?"o د{v҇C | =`߃x 8ЧrW* a񒇾!C>tч"`=Zd`ه$0R:=z3zwa>l=|-Ћzdz8=XXQ:WD t6. I9 4C"bFɀ ''FV>'[d+ʷrʕRJ{XXp8 A0a!Bcpfe6C?ӲT̰6W'M kW$co'^oL --'QI^_(`Aa7 --[+R`PB _`CGv9ČqW@'8 cVf =DTۆïO$trjER=V:eq?zt{0IϵN{ovF9iV:eq?V:eq?夕N{ovF9f`* --{ov4Qu )>"i*VFwEDU%=t{3QNZ}Hʪf`V{(&j"蹶)#|͎('>P$MR=V:es"L(Z%*ʩH&b(+"PVMk Ʉ޻H&Hb `X.p< ,˲ʱPd Fp\e#H(*H(cwl8`"S --Pp /R׀P00f,+l8U4NG`]"ѕn͆hmfln;z-p:KqS̖l8sܳJ fh6oBdpl B(:9$* f\*LX.evb `.ZfyDž7#`0@f3\$IRd@0@"= ol`˰&{ 93>EMM&o!}tlX-he'Xw AVoVAY]ZZ% Swn{犂a XU>XAXw:<'@qj#[*hQՓmS/c5V'*8VKFVDunFc mJYfkhc %B6Y0)=SjVM.@ZM*O xj "q5D4&QS9uUG=Ukz:ThZTަd5wVVPXA_F7Y>BjP=V2KAYu0B ( --VU¿:nAƅXMԱrm,]G5RXUViպUG --Uo`zMj+E%jLVZ>(BM]87UMRZ{:\һW@m+֚XNjG$Ui?L:[V@q/HVz>R`vzݗrYoz$?\sAt52bV@^ÚC --5>Z6c*gX)9p(AJODub@"2b#_I\2YC:GWO 7VSqԎ9EК<\N.2zV]XS]ij@ƀxJJ[hRŎQ ;25Qa^JP6K0[[ [n~{9<㩬ԠkRzy<[g|z1ݍ@-[nzjR޸WgBg\z`N82M=eE?*ł.E5$Yv&OWJ]onon4w<kfvʃl/G؃O!|Yd$* MOВa[`f^,[eq/shE3b4SƩ1q[4FZ`Xٷ`P" H}m ~HBJփPm ^J@9Hg"T"T0_mi,H^_ԉ tpi$h‘7|]n lm% G*({('a^4q]UU}eӔ냢(D:Kͷ.K{iB<`YnD0 GYj\PG>:!z,TZ'(D*5"\/6cU=o**xq'"L|a/砓V5 --xla-FVvYUIReԨ7.Hd$aBc 1Al5>d@:Z@;pDdtY@tF_uWӤ՗=[Ŝ "5޼`@8[G߁cZ=n5 X؉w<Z(lvyڦݪ(`'YUuU9 --kY:d\a^fU4?}~+g5#m=V/K> --"6V8Ӝ֒x cW_U]I» g9D[5K} ]W8[\9-6 t!q)2fW-]%rwu`WV*Ĺ"]Jn4ޫc!+W !4;jlʏRc@czcURWy; Q,UJb JC\C[:RIyOa2 zZw(f[W[68__ NZ4S+XS2WbNY D^ s6uJ@{x'XŴsvۭNWPa@VFՄD;k&˯jwh5! --n0W[w?pZ7mn3{ЧYHՃZ7\*WZ h^4y*0t@|+ԇd'NUs!X 1NBzjծ .TW+XE+#Ꜭ rY龎ebȠ*IM6n-4&Zm}hBa*UNƒ&3OF(wwBVϾji骍*ZhaW --]H]jU!"pm%U0c5|O*aZOWM)P㮶aO^rv5\+s4fJ --h6C}8ճpgc֍u6XJ@_ȪtfiN@fjwx>Ո@urGGvU= $NW:H`e̫ ƵC/ GO#2 W@eY^.jkU@x_U hrP<y 52D4g Է --ok]0# R|x5N [" \L^_@Ǝ,7ЪFUQl Hw:fc .ުbh5~2 --Wt9Zs6¨ `= zyX̪ʒէuAZt﷕RDї@ĉpd ӾzB +=ω˯"Ae}~u)@[!ZF^UD>2RޫªCpA --[.X# N)hp]u\e5VɄ&[]pa^YHWMw.ŕ --ce[ ~:f0u): Pa!hߗAWG؊*( k%`fTyatp8Zn-Ԫ#$|E7Wac@K *HD>7P-z="CItvZݵB~ --XmV7{Z4OW*v^UuaMRuo#aYW:!@(wUBYşuƶzVjHW|J1jV/9]J] *^e1u'!U&-gUVqP@{W*b䮊T|W~aQ|SHn +{OPЭ]e!h[VRj'(wߔ̯2/WyH Zf$>ľ*r8luU1}5/*]`#6_EtO*deߋP2Au=;tz6W-xX]!L ) Pd6z$E˽D_u@;uU]V:a!V3QBO#v2rՉVUsY%-UŻ^F[BfF4ݳLXM>)5%3FaVd5, ՘Ջj{h?a +D7X O"?#:=\V41QVu|uW5Uj hX@m@h # --&984UN 7fR( LD !QdwiHQ>>,mBIlh ҖaHﱨFxPDaUi UU"RaΛo@Ҟ1sTSVvo(P$л}_P`"_ULץrǻg-M{91L9^y`"l)ceSea' `( HQ2C @D|dЀ?\[gmO WWs2 Y`q0*zڑXĀq]wp%8*WG>t̂+Φ@^@W@ --#j1^ pZGY@L'=+*"xѨaF L B@Iv>ATOҫ4nd>Jꟗ~ޖwFm@V@S -$Wngv@x@h;]@꓇: *Dm.Ad -1cuh \Nz@Vmp1  P.Z)nj@j` [)`cU,(MI {VgW,~kђ*׻^>@ギY+!ŀ;մ]A݀Pa si -->TTbݑWS`FW --pP --}:!-y7*B;Rqb0d9xEs(k1 @0^A|X.n iaګ40իUVNWh*d.6Aj-Cz ٜf'ծܛiWhdJHs -- --k^!^eCP J)+a-ˬ&\mp\\'cSi=Ѐke\xoY`uu|@U8JdE"6>=gIhI'ز!3KW +$!3 --(qܲ0]UK --E+\3 }}1$֯jRz7WȲ\DN" ȥ̄6V3&X b_cOPіn AZmtY@F^૩v^%j>(x]^)u"P^2@r_CE*ܐU Yv<'hـ'8Nni,s!3+^J _IiuWlj ϩTR[Y@i#juW:jk}oU=fNqg,|xpUCJ*:@WOώ[c-|ЬJ[G$P5TZ=`7m`kruӰ朗"xuZc'&P50?yGn8苾../o"$ ahi5ňn6=,5Z,ϼ=M w؇~QuvM;ZK6eV-+Qᚽ;)l RP?&GntXrx]!\Ouc1RQip{rYEBr V<弼@ &I( --! 1b>^mMa|hnkvq|lX:u_W --)1L!YV3W@V&.<]\!=W}֥cAo):j"䪛XHtIX)MayJw;i +W/r3[BLh5Hi ְEmٿ!!L]aI_Uc" yzWC7Ȩ GPj5Z --C2}j9Wo/_hŇ]jU^%UDhhUHN:XNf%hJ-Wp?پ ~o^!0Ĵ`Vs. pZ3ޚv[`fFܫr9T1^HZ=%ϊOj7 qcB Ph:{2\NU^J =mk:ib=N~|¬wUq\>jYuH=] Es9du+ G-f&:x:AQ`ǃUAά€< --SgA-*6b-$`*Uάj-ajWSU [>$㪧,&Pgؼw DWIQrO&rա25fV`@5<*xB`W V m*}4I\H}hϭF`'&ՠQjV7{sĮ۽>N^%˂ -UB[~-ee Ha]l]H\RW5l+ `@'r;!̱s,KfWg. dFm3^Wo --'? ݲKAݪ>+\\[-=뇵I8?vA -- [ `/KRMN`ԸWPLW}W\iNP4#]Iȕe!j"VRIQ\@FUx*qب 4tM[_M[|+i:aZ\\j\{T#;_ Uӱ˱D-(`P ;oB`{YXU”%$d ={,%МC};AOY%t:*wdbCUp7ă9mE uӷѵCAv>ZE 9.^;\4nRtUUo- qxCں/kw*32RX5RVUH[ZT -- kI(5Lg,t$V,dz>4'.Czz;:ln`lIh2> Hqu26붞\ n & e7W}h4Xp![Cs ЦHQ[@UÇN! rջ --IqCtixu R:lPaZl!hU4:L[%B>9j.JЪ P~b-rU2"O%bۂ]\:4"Ю[}[Kx (j@ԃ+$6 Wr>0z^d bUY?%YU \匡U~ (5[≭^1vbHBīkYt_`YdZ)e*F,* )|&UWcGoHX±I7I f|ր+lbV#P5j"J^3s~ 8|Vwq]AVG"ЋWk;syф*,y@!jGJPt@l^u,|&`cp-Yj[ꃤ%5t^Dd@]]B'PD!zuN" y*sՂZeVeI 5x --ps-QΌ밂vW#[-\~^*)UG&4.lu>.j\qdnB0([*BWۓuE@L%t\4L8ح --:j <c:v.\D!׵U\W77늭pu'ٛ (ӽF^ݣ XRn-ߺUĎ,jʏ)1z{4*UUTƂ.:4E]7mɦFc# t2,PXP뺃*ݗ<jf%)dssـf7 )0Ÿy[2l's-WWLm ?l0L da  --W6qa͋o`tWlGda%>ͫu܀}`; ʾM8\UIX[ͦ:GtV)g]@rVf&!,jˆRO4Y?j ]}WyVo}Uyx*YNXZڊ,Dv",P ':[]EY;Е{UJ+7JW}6GSGʬh @jOn@TD:(,,71֬!C6Y4SHAcմdrx@U+2cʸbp48w 47o@[iKB3Upn}&kUMG"zMQ؜ՄUbM5$` --i"h`ё0 AڿV8\tr©0'P!J --kI̪2XPXh3SYW稸 ԑ?QC(h HަpaU& 0VjI T#qX$mrV϶ --y!R90u֔(s/k5i.*;$(n@+ !߮ܪDqJY=DKW6ӭFۄ1ޯ3JÎlVAb:=m@MjBRv#EUMDZUbPIqQn߀܊ 8|5D1Q --sPzd^:^UaݪD$جv\$`\wujf%d@h6WC_L JV :q~s4܀DV}U%"ת+| %`P fZ>stream --'0w[C7H#1>d78_oh$Oh^_- Jiv`B~kC솘[C!;-g%XMr\]o"OG R_?ڈI;Ie43oq8`ޝ?KYgZ@Ԃ~4[գ=^"&-lA --% Qsua}>jo0ҋQ --Э2ziK4%6+%oЖnug)@T ^;X TbU1Vp_cq8u?N3{]KN7k@[{gR?q#%JʶK^m:U>0A֛ǻzwȟŝj9cI7/Hb{GfL!i$4m"1Q,gqHݙ,<32Vw(~r-eVPxE|뇏Gk7 㜯ȱZ&6jc0T." rdxX2&NbZN,a=: NOj&(˱hw'K0$W% =ʹ3WRt@tL}u7[ܟ_hSxY&笖ت{~C2)a80%Spb<ɈT2Y.%81jGSlلn\P;#|Amt(\K.KEވ0tA.UEiźt*Lh>X31浹wFnm] |醶L̷^ kekK-W[ph羒P`IjrnrV X}m߭+ 1)` +ﰏ1c`Myu"x5)L7rH{X@L-~A+|i> Ki˦||xVh`~6!Hh/v|Ikǚ%Uڢ?r;c,~h{<3IZr%DI;,)8!ZEsSJ*_vi7*d0 _k'׼SG(\YǡsYTh<_R&(2/mbgG$ZCЋ[$YsPe*Hc'n,_E?cnQ>@H=do!:a'Lvհ3Yq|EޥcxDMj@WVdx$T-ɬWajU-w#>~?[WW6Ȗ~pH?&VrIyI3MEwЪ.OO$ +Ć߬C;S[`#-/M6e]h` %1>GaC*}M ~Ԩ~ǚRD --g [,oBh {Zjln:l:&eXwu0㸝·G5sg9m"4 |v5hI" " !{JrYܵugA*f\52cl?xVcZT%!dDSzhM?~kǺdz~GHf-?;L^ΒcCa)tӇw+ ]@[A*dw\-Yl <O;z@B|m;(H9h}7ZG/wFNl0x)߸;pnq[ --Sz@+"}AX*W"j'&ywp'LcԻYd?"!qT~]_pqH?vzq --Tb]PG;cF&΃m=#|X-Ϙ뎴~YKE-ԆZKB<«{%4{[" xН?xY ^(kg&t_O}OYqm21ec4%بdG&[|ͯzI<[PzzI65> Ѯv k)p6Pgg#sg=gtd=6p!c)~Dzn8Sftb!#US}?<.Ỳ --`g~e+sǽ4RUـV5/7=bu>>;2tvG)5c0} g<{:nE#XcOhOcz{\7Dpl{M'}pNmZ_Pˆ*]wOOrA0umC}Svu@- O>-gl}9^VWG8 --]_.V%IÚf-{_ja`|)+V7j$޷o٭ ߖ$x+▴[lJuYЊ2wGnwЍtrcܖqݖ0?u f_ --[Mi19 T&lJla;mrą!RV0.P}%Ӎ\(N5|c;\;֒Iߔzi~H_<*_D\_T˫[(%P%Yڟ瞿ĮZ/8d7ܪǹ/4/[ҏݪ0GȦz cl]0XD&R+MPIrz?Sa+@ֳP(qRAU0-€&/R'˪{prx 6;i?jM@_0hiaVjՔYvFU*?2]l+|w뷻ϝ5^io~i%.͸R9[=jg_ ?)RV(cI7N;|;ߐM/e `~ujVg=`:ʇ4`KƾC+(>mݡ;Mc>e@EXܒO]_ì̥6cS_EX>PaARU8S[z~75OUdi "u:Qi1?]43=$W nIƏ"`/h1۽IK#=naKsZqTx8 d~g ED8Wp9"Ր a2Z$YYJzKI<6]bxz{PLXĬšAJR.RIp^^2ɺ*:M/{"UV/yEb"+!זV)$-UFשP8Yy-Hݍ_UK%ItD$\cpuU'ߜH --ְ+8n+vOW0*a!! :5m$Tl ZL?DN0oTcn0K-xv1|&  --RL --! --&ܪi9ªGo N0X8hf~~mO`.aW.3z &v65 CJlcW TUZ%&N0/y¡y]kBٶ? $TQqG \,];ӕClq --j)&,&j /SΖN݀c0!рUp0E[O@5cVCL?\co.cs?Z:tne5r5[7KsV?߼dz;c|,27=?><42sygzF7wcz`(+}=4@2x%PddT+?(rbʱ^!"$ͿsBrcyTSҏo1Å SQNGm7X 4H ɿHi" --[\]^\O1پLX {+ K((!*5F6bTJ,!ƀ! 0 C71Eɇ{LLֹaJJ`D3ཿaڵ-wς/ --u>ԫ{oY?gZQ$+\^e#"Q=QwR~{>2n v`X.p]BSm.J94glt@]JȊ`.c=vx|߿ьtڇg*×f}ezol[F7ʶ眹K V --6@8fSƝQêFPq;eC|'ǻE,>v5+>R?n>H}vkW+B|21/h׳ϫon[ ~ [) ꐥTcM@6;\X+ԓ|p)ɋbK -->f+&dm?hn7~ уԐ4 --qHiG#!;XOo`Pےt/_%zn^M=EZ5YA{ ~zP:Cu7 *=Spv/Bhf]O^<,.^UL!j!/B #~x,Iqaߺg>­c j@i3΁ƞͩ82an UtZufe*$ }G?8F*꣗mt7q| `u_M{cp;Au*tZ'r 4 С{x go=?u!7;SgoIl+oEB|AoCH̥Ut!9jYMܸ:ٻ= --cccҕ>F?.7v\Kzg/7t?Q]7:e7wO"0=uGq{=|ݣ?qh5sL>mطE/"v.r&魊jqC<wE^@NsK %ͳ3&~?}De@+0qcfIN=b ps#ԿQ ?7Lj8GY)v+yST/`D2cx{N_Y?A{~Gaj --Sk˕{{K~>9[1z873Mx-kZK뿚Xi3o>jrGGS=[x4qH҃>R)_o'чic5șcw_Qg4jDjɣ#+%!:*q5lmPsd~P/>1Q緩@F?Da|I8w./6 -N{i4 ZɡSUeKZCR,lN}-B*~k:?0졧[`pߛ-gxDǙ r~ߧٞvz,yTcN/P%[OZzW688{=V+Gdh?Eľ?-웃[^Zϯ@G&(oi/Ee9BTC;hB<g:`5 --' 5.A:c((F{LEM ---~}{\ȜM oUn6W8UmYN-ň66F|K>&\o4ȃPtz˺W@Zܚ$> {Qpm reA݅#q|Qܓµ!_39>pܵ0MX%?)*MZJAI㉉o8Ӛ@y4A֢p} 4`O{VS+!s --8$<}C( *kS\VORʨzh/M%|R47R&]>?y6q`\JhV>dcE_xtGި:f~Yж|D%r$&dTJpf9uIĦ6?]hgp (:T?S:#_i%9DWR`p=Q L7Dc/KF4MLRƍPή bƳ&5dnL^n4Ů=sIj-ۅQEO;;82fݿ7h>^>N_^˖]㥴\;\4 u:`b$p%yWߣS3>1:h: --4lgteN?' :e:_&G55Z$VSyƦdž3 HF?s3__ r|@ㅵDڑG:6&}aY [)L^k؇vY=IzLiᦖk'!pD>6p:3_NP zjo*Lښ#3h ۏH^ajGZi_g --h8}݋jvݼ೜}/_r[7SK~+K ds'Q --AhU̎ߏIkI%&1?D@=4huV0ueS|~jN/SiH H']6;gqZ tl X"ڝ6ZMpt'Ub`D܇ĸ&[&G]><$q%3~e Դ+}N-p8_ðaFƕD\E}jiHi+Ԓyҭ_\,yEz"7M.UVq@$-`örG՝QwQ_;Uݎ7wGYD귄I~7}+Fgq:Ss ~m[=2Ur9=iDg<$/ϣQXHJn(2+G]w&_l7+!©b[LkhǩVPK<%jN Xrd`+Tutb%Bp'5ak*1K+Mai7ғ: $6}ͻ_r}P/6 .=2UߑɷZ!KF|{(_:(/hk|0=:ebCYQ膉X(X,TXY6/3E?4t] xwN׵(k~?2/u/M֭@ --4 v; 0\pPK ŧ#$45nq>5)敦ZrPQ%g`ѫ5YM`۠2UikQ_8PG%(ʇq7NW w칀k'=Vǐ#huFuU{Rc՜h)} --6+hO<-9 @' 9[iIѯ.?}ľBB c}{h{ ݀nĈ{ --ܷ/|Mi --EcڗVevtɗ>6dţۚ`7 :< xC䏣~\Z,هy'?,7(7KD%Rɵ I6=H?$"&Mm}k㮖 :~|H7_6 Aؖ`{'2jt-T=\B`ct9alfcE'<[h1pR --_O --T6fd+BrVl BR)# Nf~ --(?>r~pZL3cid#]pf02 --2$AJ!9=l5f --IC,9踌 [z"WtA4Hlj2-#[LyO&xXK]!3Rz --Wމ`_oizVE;F4ۿafhO,HP :ExQ><(r`1 mj*K{|wT ls/5CMAWYA>m=}d! S\~e+3}e/ $X_ljˑ1|ސnf Ϧ,'ZŦsЩl\p`y\mt ()QaShk~#B5G.c5AJc}ޢZ׮|X;tc%f2G՗V~p4Y?9Vb=6,oL&)T?1ˆ};/ۘqý*ՃJgKn ,D. 1+d.5gְ%nأL{w /)b2}Ob]o0)g>YvA] Jbi=.2X~ߛRZ|ypKsPC+< --.Ǡ --Xr81< ?hB7qf /5"Rմ}3x MmZ1^ O>>u?oS˄[A@/o'u ~-:iC$-ʗ w2"7 ](5kr 7]^IHV24"@q2>NP֤?:M~7֦ Xwb qU]nߴ+ҕ/9>u9H[˥Lwتa Q/r-t8a$ --n?>So~5ܙj`ɭ%H mg8{ r |2s8|X o߆YPl ;KGw{w펾=<Ub=&ڱ:^ڻ:!QELu} 0Ç --r"L~wO"^nI`CAXo) ܁UBS2|~2X͞p+".?ג~jb 8NHW|ߜ5vxETA7x{b˷eVk;v6؁'ODFGBcE(QɐpiI%'J* ܅qBXz@V4wP% V^ǧ?F6jcX' pϟ? hK^<Fvnߛw --G=Vߊ --ő+rIptG軥^iSr8zWJ\Mq:K755DF/dEZ_r)uH8.v`C~Ti|IEZ1-ѤL̻w"C?~ZWR^}P-[fb>m|:_c3Ӿ A0 --G5;ݳ+Ԓs]Zx}b:%_+S --81>?qAty --:YH"o20&N/&jb" {kץoΌJz;Gf";{bS$F|~npO۸w6K|֡:9X]ZA(6<(0sG*U}zL<2 --~,8ڋdVT2u@qa-t񇆤DR?)k_ --'˼ y"::Q7٪EF6O:`|/>|p) iDb*O!KO^`C >Fq]?߼&#o=|$$0Պx~#GZH*䭺mWR3CBVM9r=CSu.nD͏*9^ӌ>Cg,|#㟠&R,4|}Џ2Z?3I nvtd7G;dn;ZPmF?u{%tR'3p>KE}R՟&}̶߰HSgˀX> ^SF&jt4.Xxl.d[U7?p@o$(JD%@josB#nAlsf vǤ %QD9f#CJ >e?IO׃LPURz@^ԛok/hҽC>@tmj϶ НOi|Jí|[d}4s[e'_t ~0$K,p5k@<oԍ4uS --[%?-nS6ߤTZ-!zvG`Ymg} uMFzW>*HG6 ʎ --^}b`>ο ބ+ 8/<f QɪUG?>W>oWj9RnG 7b{1rx7"GWM='b7#P)xH_U^k-wɧ2 +bpP>5m_JVvaqwQ3QlaM$#T3 0!<= *b}7]G>%JsSZig͍+w cR6u&Nnd%搯n!_kGgx=;Axec-Oݍz|k/սc;5UĴ"CjY\0nQmNT Q7@֢Hod;H(^,Nð=I1Vy\9e /1.wEނÿ dʨue?ԒۗP},eAw3  0P쬓WA|ݫ}p10a2CIx.&=\;eU",r, JvtDYotFw@(Q%?< m!"'Ѫ5 HԫvG{m%~|ς(nӃ8r-?ckBzi;ACLm 1փ[=L5'Ns-N^ yA |S}T[OA=_g9rhynA!^) ء)~ܷi --1{2K~ai?NtuGwoo;T6`<0r52e4⺆)ʷmfC~'~V=|{"UKWH;Z*4tٚ'%d MQo`P+V:M/Hcqvُodj= --ƻO.{Y Ȉ;ҔU@_.$a~;0{̝!) 6|M]:p#(L\Zl\W`0LQNc\t{Y5{W?pmx~վہP0yHBOG|BDET6eM-~z:K߼ " Rd."jg0joEv(5_?MuyU|fWm^ (D|5LP Zxi럂>G8Do׏ţXi~V[1 {;崛98?ܩއqKwVֱ|Ax'pK_̀iII U'v>!ZYc~"H.lEHߑǹfY$z Kw --GM?Zs:i/CLXџ"}?en—IeLJCWS3=SHVY ʘi:!nzű-'Uo;AXCr?KDV_Y6i"3[$JXHQ ' ĝ@$!0xF0|#>?M&Y(Xn8x[-\i&7 dWQ$4a&;Y2oLmNCOo~`ynG40P7A6u͆Npd=|M|AkQ WUGf.WzۣCڵh --8T08;QDi ;[YV'k{ݯGR --煫X{ي?\^#*fuQsrs7PDvR7ehC+t r{uKl,#e=aZC+}|<,lq[/Ja-S=3H+@,ɋo2 !K[Wկ)@{_x\>a̧ 7C .!PXi¸~ށ_' f$d F+jT+]ҟoT2 --0l:3/b~͎BE'[BjiBlf/|0~I4HfúPL?Z)7j?y:DcKWsjlz+v?'MbW8⿠˔`4e^} Z_~Ciw{3MJ$w ցyc9$?z/㨿ūOܹމggIx vmC$a`&2#7~ߟOSK}kkn>y6OۇQ{[lv%&`BYz:ꌠi͆(XIT w6SBOg+eX4P}'-y֟ohsu@4-W|@ׯw\G߱иx~@AU&F^}㟞2Oh}24VDDuuO>6Xﱃuq6?ܦ s? --tuTϯmLw_\8p/H |`è!.X~],f^e~ 9Y7ܷTja)nWO%j|H P(pG;N­mg/E諢 D"ކ;SwWJ? --3?墟ή8lÂ9Rl~Zs73oܸu+Q߮bZg.0B+=O`p'!p/ӡd:kdA}OfS{ƩB4b|@}`Lr=ФKpЫ% --i:[lT >_ZR{A>7]iW;Դ&e L?!]DP|zJoCZ I_6.db4ͶYwā P%̙/Dw=dUXsjr֗r;Vߖ>`n?[ߟiV_,F A$=Ήy;0]HK/u?2quwZW ),RCYן7*w(hafv| NiUQ Z:c-s5und1ӖjnB&c]9. (;~ ( W2JaR]Pb-߀[tt•Ћ0 'i)$j# --v^}Щ;[K<^[5ɐ_ԴTh Mk4!>{ --2yOs,8,3smڂl=<^+JJ+V%Ȑɏ!c8r+G(\"$ČʊxR7>p@[_M̎UP褁}e;` UCOM3C7Gǟw;/>'GV 9J:>VWG\_7m9]퀀>ξdj"?+x=vsMJ=fqx --]|5jo.3RQim%UgTApۖްw^}˖ }P >{; --tb!yfCtAwTN{ۇ>DkTԲ-~qINnbI]LHD\-^sj[#)O܋\mq8܆D{ì+;7pz>P9e[Yq?#gH'Cez?6m?~@c/"W1%#G@8~kVNqIIO01$ K*ʢTBj[}5t~Q-AuXN!Da$' N "aDqp8(spS9^fӦԃU牪h2i3vs|^XeP/6+#5;*Dp>uyubfɰTH<0($򰰐^;v׻W\[w_UيE}퇜CtjTj۰, 9Q"ڰP --fiY+7[+q\Kb2#1ǰZת؛m͈\TAn=wzYdž*Ljec*̶ce5=nj<Q-w7M-Q"( pxnp4K4KHKdO۷ȵUt=W^U̹J==Eg5թfeѴ~|*`/=Wow)8r8P)届tO/ki7d[6%seguSϱ )ZtWwzk\Em?}ԝ(Di*ײgJl?e_osޚvً?%u/1]\UϽ0)F̉03[fd>nvqr0ϼ&Ԛ( N)  --N(&q*QX8 -- -- --N eԩ<{2Ţ0   0 &L2Baip@*Pq.204  _YYYYYY,,,,hȸhp@r,.,X4Yfy$JYY,(20AM G qݺ}漟Jg?kxKdʪpQϬeR첺LV!c[W}7+͵j|\Y_x|^$(C~_#j/07lϚ=4E5=\f]kxVx|Y\[0bmsUS#1?O,kTUZڴh[+eR8hktO.̱*s{hTT*3̦Ms?jLݐIss>5ٙmlަGSϔ[M'JWj)a( D3(PTT@Q@c"uֶٗSimFgǷ>3jiLL\Bcàݥsm>_1UVVYĊH\e̋DieS4Ԗ( kļ祥m^X1J՚;pKcU+!17iwZφFҰzVfu656Z&s٪啲V3R5=DA#,) --N@^z_pey qbµ.?sIPye@{/ --7pJ;\?:I Ol= W>{Ӊjbn7 --|,aacXZ⋶2R%7XVe=XPҋBm΁¡!C!' f& UIb.dcRtj.ՙka ؂'wލDi؝[@5 ܉!7Pe=nS-$;Ef&@u0DCqӉ%C4\d! fP?]x%:8 YRX]~$] Φmit3LGIk9xփ-uo_tf --+ׇF ';@ h>24NZ#ڱ3[E5 dB$g܌ cFb($/%5/npĬZf&anC\sNτJWTL3@ R(wB+Š"!a:g6m ): vN+%"&/ i/$"V/8ݡ"呼(`0Ooȩ`IH'й˧Dc4$sED~ TCy3R(D3ˇPpZ*C> --LŽ ՁW&2+)}~@C+E@Ǧ[Oo_¥ eMQ cx_l%GqF]̀'1 aaISS0h-qPݽhQءl+l}ci<.+ֈYyOL5^X;Xя%n#-}B̔Ū07&5tg%B < GKV6ߐ ǚosQl)9ё-t&Q= )ײNp$"!@}γc45R*2Cq,\eԵbJQ0=ņJrrq =x3()!yPpsc7|Tu4xQ@b0\/Pfe.- gS/P/As@ҋGدtoZ(/ *?Vfc {H!r,no3\V14;E *"9 --OY6Ap Ƅ :3qXe/ "H?'2B·6 Wxx3-Ĉ#@ 3RRt>b ` --P&4s^8`@,-АZS:t; Mr5aiX> D/YMתt%ρpln"ͱ p`#!`ãS@יXESyLj"0E5 2WК#" R"R5*rdvd^e(J}\rh|'IvifM<%_ >6" --jMiQ0d۹M~Dj`t!ADb,4Wd˗яPm @ XjŵoXŗE_-MCRhRww:RIvfLЄ8B,X%~YWd>ǛTZ%R]v#LRbOEO7{^^J0IED2#]s3md:"Q'qHUP*&I,}dL;*Jq9!+v/ 9B --`IhnRӗg[Pt1=՞9qLZE?g(Ҷ0UL$Yw$)c+ #lMD)SgIY*|O_[GOEjD.'̊Ҋ 10 ;&wו vW"7?`3!ЫŬp"/.QzԼ&}Աۺ)&xz 7Q%4~S^ &ڦeDgxwMP9)]p. MtV?&vh's-8҄_}Α8粛.kF/qfO ZY>9Ec\vHƂ- <koiB$'Hf~KAm$,5;/?g --r@Gv4OUfP%\0`WcU.L|<2kHҼ\\d1sd,\a?blW]J|DRս+ʭ%!-e y  n˅LJ-|7= --Kd'$ҁX2 WVQ[ ;Ks'D x@3 --IjT>@PO8J#\-PwjRT!L;)0Qig)՘j:VB B@ zrDRԐ*xa/VW-YxTUU $t7PΫE=gPv?~b_I(+TJB~_lWJ P{D}BOJEEuZTajFEFarTTG|,9P*yRyS>zS~zzOӊ~zOSzuF{l{`~{SV|.{P+(57PR(9P)H3iO$/E --_K/K_K --_KݏQ܏QۏWڏWٿRWzؿ&]Z׿/]: --8Pt965ϽM6soN 4SE9]}N9tSN䴷?P<=oP{KU>Bj(c@I9POO?7{Hp'g?L$'yɟ4*$xOZRIOoI?{K+' hoID%-eȷ$ < 9PD!ˇ$=od-RXCRұ|HpC?.{H!e?U>$!ʟ=$P(t)RgO2IO?+~9P9{:͇Ď==뱇3>r$Ⱦ'|H --T "{H!!Ydic~Ϗ!İ}O\40MC|HCCr`~9P1{}O=+):&=9$žl{bo>$^{Y}O=6g4ƾg)~9P,{.Y}:w?_g=<¾|Ml --{{ra{~O1ubN=ݰ<'=þg~9P*:_:T^}lzD{_Ӈ~Ou׹N:#B_:M^'}#Ԡ3{u9P+G ?4yVG<yPGܤzJG|t{DG4|>G뼣|8G\}9P,GB?BhD􏢮?tu;]N(#mGoQ)w3}x!wQ1#~mM9P8[TD 'J>D:$'q=K#P\$RD-e'h>QG t7Pd'Ok=Qd}][OXz"G?ȮѴGs?jOmY}r[OUz"G9PN'ʮO4g=u}<뉠YO\HzD'Zȷ>QD.'Oi=k}NRZOdZ(z"DQ9P3c'ڰODc}&}$XO`?szDFg'J>ѓD'Oe=Q|}-YO^zDj59PDgj'~~DQ3tOD`}&}뉊g6XOcLD'ʰh~D-DTOTb=} ch B;A@EQDA@!!$0+װE{k_: ]NrF.vtUzyj/a]7RQ|{؛9e'NSn/ / k˙Ky~} ;KvGQF4<F>(ǻZmnm"&}nEq;gn 8tsLߍ_}@ """"&BgE"NXyu.ե|4/x7B|;ػN]MiMF\N=i2R0:}T9_x^Nws:r --\Jo#;P/ Y7I6˥dU`#8"`~(]tՃ7t1:-u :띆/`BX;=ƺ:mάN gsN7J[t[vrӮipiWdTpgx&)Pӟ&@'';]uSNVT~V4H4hRA]s tnwuX)ni*i._U: VPS+Tp"`~:`[G US*ޠ~лT܀z.ʭ~ --&\5545N\NJvC9un:U`DZ@Z0NWНd!s;yOՂA aӽ5zNm;r: 2괎A}c@MX鐄Lq= j"jʧNU`+@Ƞ)1 @}tn k @_fEjK@P~$BA LfZ jrA {P>Ӵ0Pba+A-b;T`s`~68DPoG@-nfԛiP>&;zj6A;-CPo/@-.fԛi --P&fIU` 1jsehuٍQ3-&Rhk?4Am@]cd b65j Ԭ\n7E $@M= M(rU`#4|j-̎sPP3H>L5Β:@Q!Qg2 --jFCGͱF"Y 52,PktFG}F_oPu6=U`?MYg QaQss̫mGjaԛ`YQOҨ[uZ[Q¨yTꥤF=W'%z6j]uW3U`WCY֕zF[7iF ~h;?uQGҨ](mC5~tG2J:7jQcQ1ըȍ:ʔF* RAnQ4jpGm --ąU`[5X?Q-jԜgFoԙ2>G}QSQDڨF #R/4{FԨ9%ި3.eOsR77jKgܣ4U`ϲ~:QӨ34uԾep>4^ F-O}HjAu)Q|4ꮂG SH9i]F#Qs YFU`ϲ~::^wcSЍFhS;;hԝ.zҜFͱbSKF_Ѩl_"S#~;hԝ"zRFaSKRhr1Sp*GŦXE^?K9 a:L1M'F~dQiI0enjI23qQ?Ds8,5FGQ{Ԭ^{h)mgT` g >%S٨{Ty}j0jNU L͹GwFmѨx\afYuTLm%FjQxɨlqj5䖍3MhKQCT\~᨝ӓU`"g|j~p,25J5ğLMFYIS Ө0Ydj4j<:&QӓQy⨱ԭ<9?iFNJh3;ڨ0,GU`~IѨc`jN}pԏKcL RF ȣvĨaԓH0A^9QQeԮL#eQL/Ҩy~5?#Z^hVH`CU`(Ϻ~,, j:h|\bj5d*LMjv]j:n|\bj8(LM6jvj:t|\bj;d'LqMivwj:z|\ --)U`(Ϻ~]&Nƒ5j+>j]15qFMr¦~۵Qfw5j.>j.\5?F-Vkf%SSԁk1j/jZG(ã~xSۖ_1j2nWdU`.ϲ~Dae#>jf2uM L;jƨ92%uWcU`>Mmq --zpfI6Ө34)t2u G\L£UnCejjC :XN¦&Skh!: `j{ :[v>|FSp:OgU?_힣Lp쀩q|; 4u^MEM-`Sl 0?hu~ZLoS/\Skj `jG?:15e?6zLQùlij2j0u:=ڦL]~γT`|zTs G=U`DJ tL>Ԣ`ÚL} /ijK0a&LQR@IS;bJL-@vfoШ?&Ԣ0{ o p,1U`@K'.?+njYqSSԊLS;*:j1bnS*v?ejcţ&S$uu!&#6J --`zjKdԝ3uuX8U`@K?721S35?v` 251ScjF/S3u?v`5EL-ߨ*gojF]_qScfEMmcU`HH?1un6T~ܨ1u&M=䟩7>7n!Ll3qSggG'6n|DcGM/Lmo|gjG=/? yU`4Q? 7nj@FcmML-ߨ{7jGqSk75!޸MʏQw7bjaLXSFL=/S36jD#U`2S --6単_foԩcoԹ75"FݸEMʟQc7bQ~FqS+o:oԊu#רo*?FݸG5jF?IU`LE3?^G]9?LnʏZ1M΍?S[720?~oԴ3FM-䟩ݍ4?&7jj Ll6Sp@K --ŘQ߬'ΊMoVԓF}gŦ^W?S?1fjM}ň!#S'ƘZ௩_125nd7ƣ>S_72#U`FHC jL=FMXSGSgԖDZ(1S6Ul2cjPEF=M}ب㊍V1SkjqLS_ejV7L}w,/wT`BKgY? .O$O pbS0LB>1 `MmPY@S>Ԩ4aL(xO hjڱ:L]_0SQ"U`@KڋAS 3u}MSa75u `L]IAS lEN1U`?BY!HԀ05 >5ݕjhLUbj:o6e{z3zFOւ`+&a4ݽLMASԮ>j| FU`AUk]?Ceh@q)M]'S ePq0QM]TS_r2ᅚZU0!C]X't3MD7SYE0= M^SR`} --:SkJU`TCgY?b:LSfMf-S}Kbj`m>ke:-6@S c:[n@SB05L}aS|0u[Lm|/FU`TCgY?SuPhj -- --PԒc9MԶc3P M R0Q M-n6S%25M- S?mf!-S3-GU`LE#qZW3u[ K.E6s}jaj/Z~BS\4L梦.쒩YhjѮG ]؊&0L ,S7NMƃSpRCgU?`&Sc@5k:ZԦ>1SFi825mu#SLmV74MvS2&k`TL͈NhVLFeԃWU`Z`Q?M-BtS08HSS25ꨦ"S#15 S)ej 2$S/ejp0RM-Cjbj=2[SMM^w T`NFU?nNijP0MmIOfj L}΃!hy乩[>M= vUIԀJ6j|IdjMDnuBM=vCMU`HH0CnqH撩۷lj2[2S;q"S_ajYahj,3 "S7ԔV`MV%nI6zS0cZrJFs#SFX3U`JGwY? --ij0j0G-h2u;SgfkG]296XQdSLn 23QdS[ 00ڥ>%S[Vaa^2 M}U`HHwY? ɖ0jޑ%j;0uSW|ԷW059Յ1S_0jƑ1j80uSo|Էto056US_0jĮ=j5kU`DJg]?D0 a7`jMRf7Ka17`!05#MmE#a'7`jsG]tڙS9h >0uGCSʓDhj"yU`8P{ŧ2uGoF{:S;?j%5ߙzPLA~S;S50#tߨgS?kj4jL hLRGa"L- L Mz2U`,ASuwMMVlIey5Q0yQ*SkFCiћ:QQ^oAbj&LۨGԨsij$bjF-1\GU` --~PG-k!}~miSG-mk9ZԒ߶Y^C8b=!i'9r9jVuk.SJ먽¨zXU_f<RU`!x;j0j_M݈2}QG֨o4jvã&]LIt5^FF=_}_mԬGMLQ?Q{+7uAdj͎/Fݿ풩zԿbR`UCUo:jQ;vYy7j:WFmQg6kکQ_kQڑGXۨϩ[Q2jh:CQ?;sNwYeԎ( U`~,E4j>jZYAq$VCF=@QuOF^_P`~} u=}: QQԭq{Ǵ%apU`ࡆ --)EG yԢ@nAMeglԠɁF̨بAu5Q=Qv j8bm4y@}aP --u8U`ూ̦ R@}gޡ=: --f;W@Q/-0 mj9AtAAm ԥT50PQ)mI32jq1*:ܨ+Q!%MFU`[ P܄E rvJP ӠԠ.j: --B@]TPu[QڦjP~'tPMjAho~ --j @=P>]΂Z!*ЯFU`4ADq AjPNU;)~g֠hiPހaAm'C` --;RנԆ@}5P5UPB9\N4LT jBCT]PD*ADTAB D@B"^봽3[N|jj];͂t t@M_ABy/P PlN7iNEUr,n1\tZeP7P#b?T(@RJeY;D@- Nj`%؜Un scbkJGк@^ಾ+sBK v6ܸ85j|QRHV0,.}i]qUZ"M9榱tvM#,ȴ *TWhqF 8F1 C@1 ADQAC0 GbD01.V醙hL X?_lF,Q-=fbȺ$ )c!_/wz.*`.<M%w|e kuXq3WMΖ92ZYKe<.?{Ȍ@+V静~E?ZRq8A " `" (8' -i3N_I[iAo~{EEA;w80# ݗKpz3 ~t1~\Fp(߭pfpA4@;k2[2^2);8}A2>62"n0 {=2% # ;\2+?Y+(?6 qFO R6=v` ۨN@^]"lmxM]Ab>P77aU%쁺d>TCwQ\>X@-h E`783e {@ @&a{{Aa}H/`a5$ `T8k}8{جBK|P8]A@+>HKd^} ozȭr;y냼[>]r=84a|m*qmẺ --& Qwy%u=LXCV}Wu }s,ك&ՇZ}C큮>\p׀ x0U0ʵJLJ"E>hc}*U 6 !H܄48_6_4rerQ9u --p@^Yr:xMهw|X<>H|({p> {g>0b4ZLԇ||CUD%>An L;Wh/ %^Cwa;]{E0}>^GLVQdӇ(Cwa|ϒQ_t`rG|ȥ |= Uw0' E0=E}AAd|AZ2=1Uv GZB'HKz+q~-0 --ߢQt҇Q҇(R郩 --J1N0gGaA##$X$!h́ }/4ɥ۝xX=)Kz -- MX --7\D nC [@{K"b06,ߚp6î NT~W,_ݾɤ0kSVhyL0u0!Z!"ьN.R!_1R|8D!@ B?0#N&%s؍o|x06p ڑ= U>&ڇEA>D|P;PT7A Q\Z`@(߂q!P]%3Zq%|*gDkۯ *c0-(hͲoClQ@X,Zq csڷ!Kͤ%-)O+6.Dr7i*@=q?[-K@qkBEP\܅"0 ÐL$A ؉6`@i(j!ɀDUHRbŻQG[}>:,HirڙyB]\jIaҊ뫰@֣P%6:%Ѵ|p'd(zX6IKx6itk7P\,*{i3xR`}yAh܍ASx4B4OsnEai/a#T=W.ӄXo;27gcf@g@@U!PN Z~L;V 0uA4 PQ@ޤlhs!^U13^y)2GJYJ7Yk会K]8{ :E@ 0 --'^tS,̄SM9![yhj1P2xr"Gzq3QT& .CQ*Jf.S@ mb --5u/!@AL#R h/0 X;aT E!O SLp!(zCt 8Ŀ#xVDdDwߑX42#7F"wcVJrIc~q3!P4.Ou?G-X() Q^}̭ x3<0@sljd^\9A8= CA} 0wy| eP --nDG`qy <٘(41[Ԅ! [Aj&B%6?Tm3m<6C?>a =?[eq C擢9 m3@SC>/ך --|GEYko㿽ї$8[ϴ|ßdw'JY^=;  tto8E9_qs YOlj GHGT- qK,)6uf?\E-]3kmzu }0j z%YJ'x+5`d5pzcⅱo[0/ c`a^ZF --]mA{ȕqsw HdгR:۶jfx}F!"VEǵ{'‽4Te)b:B{4 sn@ c$Dr~.B!:+6lFtQ~b .WsE Xόiet8:-DSqs"@$B&X8xqV bC0AUgڊ]oL|s1NWSaF3m˛љ|Fp - 6pzd"P4 N`C*3S'ʞpr(/uRzK40P-i#Hbv RzH1(" ȍpDqsEl qBDR{VI_c --~qHT۴m~߭"]vS3;ͅ:>TN+ǐ }o ɈHbK*\-(|-QߚN/ /m`O bAfpohs i6bh_Dep2%' (bDAX uʒo|b~y, }V71,l!CX^HinA~"P)timyPd?U@yTޛ 6(H]1 ؍CmjH3MxQY /a]!aB9cQSs% 4.XnH Vt" L!gbT<(H,T<)PРaIT@i!J --* )@@T?D t?.@9::\H$  :Aud] )l6'GIKx<-V(3i hItYBpI#)hņnWr0GdRԝN t}Zfy;ZkN}ߣЧl.1  --J7@##w&$Z --vMHjb͆YdBv%'=χ cq&F|> Ӂtn5 --C4(PkDhM j~|_nVgy 0->FsA,LwM --Ht}R  1Ky*H8QU5erkuߥ;ՊܬucӤ1Y|D8.l3aPkzO*†BR %xi>q+ er|9dj:{΍^,[~&;\MPMUU4<8IqݫW~}\.gr<Z4c+(ƍ&xXH!wM>}NV &.6>DH --x"PpT.T,z{1l>ernrS'MdaArhj#'+BRJuXz&[l"YJZXyޒ"B멸Dcrjn{jYsJB6pei҈Tߦ%iXD$&ZnsX4٬Q"ġ0\z<EޒMTp\"D ٙIFw5~uK P'âk9J6=}lj_2FǎDy^|6~n,VgKЧSכˤ 0bKiCD"JN.Z3\]Eֺ8ƙJDaQ!xP@!at^d&ZryY``,^j!0>J=l>_ --՗a JHG&hݡPQ.6@FNTbi3j=X]BT-MCg$*u)[w'SipYoVKbfC@Ipoz.#1]z# M@즡+gr_.oFo6"X +U ok4HNBDMPT~-d¨AB -- D@ --B\=(i!@@oCBd-"~D+Wɀp0dcÓ99%bLF$NzU뮎ErhoL߅!;)ObS4(1&Pb8Iԧ+oH"!Ri r'crD!Zq8|9̼"6"KQd N*[NYAg08պk}Y!1 W*`7Hن}fLhZB%&%^e̠f-hjt G&̕+|F#( --l a w ;ݿ7[}2E8 *>Ozet>wJL --7{P$RMNj^&h6o6ehN"ȤrȒ&u6wݿu2x;C*X$z9;d6abDY#>|fjR*$GnBB p[Q?Dc^㚬u --e1IvdTv --Gpy'dT;9J("=u@ --}8A v#kj$mμ^?廽lyR@S!b8Hs5o":G(m5ݿ0, l$QTל[[B  T ƸpTx8Y+( % --35c]ͷw{G4&@.Umً>y;\3󲂀c0#^7 % --)Q!ѐMܻ.Z*#Bej9Hbu,mc> {v,sJBM׾?7OkTh$" /XpZi --2%˃JgL}W  iRZca D%ˁEfKփR0c viw]v n.S(0+}OV҃j^m^&GZ#Bp9 F}ߍq*7&v4V 9 ;׬.X]N@@1R"E`.S>w@Vm7l.V[\T1BPW ya" D`g* Ѡ&OirWYbл!D%v5R-TmJUE lUHHn@dbMwܕ.=*|an4X8VB$.5CnYtwȳ{^3w1q)#j="-m2wrX` -9mU ;F;F-"h=vWW ^'P"{Vk* gvH9UlOZ,4efj6jPr%4;MD|¸|Ɋgͷ4[k5 ?R籔^Wu --q)n>"r%Jz H.%-F=^O*[+YEe-NJk"*}ɊX ,Fs --&u}1.:N --b>dŢ;D*a --҄ Pc/CtJvdCٜ!$Jk\ --@L2)$* CXT;UJ9{<7!uZd!vW!U%{)^!M.#lw"!;3TBN --10䧫ۡ+"zDe''Z&ҊCv8UnKH^b̨qWWxJ##C!*FM!_~k "]#k{KyR8\P CIDU5?y Rwt×zG6[+8y`S"Et@Nu-HrR.!X~PU#[FsLmj;B'r!:|"(bb)ua.xGd͆-0/_65—C!2R zsPٱ33 'r^/c"Uc uZ*"M2^8kCNqvӤ톃u9H /#ʴ0;q%)1C0}6,-3`}g:|Y&mwזh`VS#Є@5m@ݬx@AͧX _M%E(j4ђ|n7`'AWҴvkaNH{^nwWҥɳ+8rnZo~BNqDg#͡H )82}6o$r3DZcVn,f;J 4L]g&a`&l񌂐 %AeKV@yvc""u#@4n$+x (6{}ƤVK|@H M;A[N6K7b5T1s>߻yj6jy*X$6R%YK0}6PLݒ|zF>Xd絕cBUl)Wl1{cT<(T5(VVK. y8G  `l~G,Ak)ր[V*D&PE+tAX@LsNq21?*[&k]hH8}6Иaa`8@;cZhh;=وD+FɥhΈar@ybks6h^u ^t&FC| --Pk6flod5ڨA TYY.ء=c3Y8'=ƶm͗)УI.oIUG1}Wa}ܕsרC)H'Cl0e R,".۲zZ#>{[S @NwH L׬>qe+ivH@aPXAiyͳ==:A&Bo4P_}󻚜}&X"hR<;*2\p:xM֕H=Xb4LG vb/hspAv!1H1h@@wP(!0!@@!\S!rx^̵]aU#a2K\bSW M7Nu >;T]I*.N)j:(V\R2>j!\UCk [Soє AtRI7YCA[XPp! |AF0]I$ÑO=p;n j7Sqw$:p.j n\/A4CH7{&6 "Z * ܧS~ [l+uDpY s:ēHm062AE~S[5odqU21,n~ --A=43q2GX :!gCQU18Uet֝;έ&c? Y X` "Zog;2 ,TKL|6A<Ԙ;oB˄ȿKZ:aԡ$#3LÒMQ !X~Ƞ/QKRf\ --Ki|u8:> --; ^Kj3uZ2&,u| n \Yp’+K<ofe|o0d*C߉*1M*YY1i0I 4 _>V9Bt([=r$W-H  C+7t3 Dt b0~C(ptJlGRLǏl+'H旑UhlASKALV9IYyg)T k%;[1z5Z{a --PkV&k3\,`}kxFeE]D&^*dkF}ߡ KN`DOu(u/5AnK|m~C_B#'21M13y_A"9АiqlҌO2;UZ,Bp0*Z"?ͬ)u\#E0Ԙju읒 s*YhhZ= ^㬂PZ6w_D(P `h8sS --\"߈Z" %d" --kuu N4 ԒZ_U6` -kY_-X5Se*16ihz&g[<~2SC`z&kY^iN|Қz^a×@WO#F5Zm?薌V$ YPP}V95-w]Rfnc6?H hrvmB%&g9?iV --\w5lЈ:}VK:,V Ʋ0jSBTX6?ԒR Ā2'-H;yp G;F[Q2xC\崚di"Br69|;pЌ4+`$ ŨQ B!Ɗ!l'@`@PiPt:2;4JaV\0*myج@hGtC'7CFdN:j:{xf^x7蒼tIah|/s ]0K?tUqDy3#rV]?k1LWvELCx #]KDz~HAw-Q7=F>ke rӍZeɛ --rӍV% >􍗜%a "-uHDsՁlJ^R*W6YuDt"o5!\I;$@[uH] }%u{G.;<ɒ>K0ٵ{W'`dOnbӱUHNAG%ߔS2[idV(Oٌp%{LN K$>tn}-I ai+HCCb9yq쒱fEힴjfK+$zz=Zc|YemIJ'²Jg$/W6 A|Nh (VuL'l=!Ky2#I@J_@0saFC+c6`@7ʃ,ְdP_ˆK]3%b_FNς:kfXt4ze1Cm>QA 0+u 8rĒ,sr:; `#7*43Z7L '(cEI׬cm --m>,u^v,:Z7p> --@I F6t*NKvgqi4 `[*LdgtZ"F|5|FuCmDH[Fѹ>z=t8d=>LtZgH^3:6{#4S'95gR^(26|ĈƬn;[2XfiCu~FcS~s[URHϜ 3 ԼD_P*W<ѡc&HE#W}p | &Pn_Q,pW6YnA86粗JB1+q~6zK JY1g259l}=|@d]?- .ԔuymnV`bd5YL;|c˖m~רaA̩AaF<@Qd ` ^  @VtA\(A jiRU cJ>|yV>>j߲Qa1cCKbA|?T'HNbuY0vZ"ѮZ٠#=+[D&xd&SШ'sV~؇yz3&͒d иJ Y7Q\gxC ifKCת>JmcYl%VA#cSAVgHp%L4듁vIó DLql .<,o#6o ϕۘ-0AݍLL$R2: --XwY|ؽ" --B0TwO~ϡP:^Xz'4"[Fuga[ Y]_7?¦}fp~bcZ1RE7_U#cëm;dT$$n/b=I}η#R݈z5IFlue|9G\*/H +`P}><1#q>Æ|6+Ee̲v|(wl>0q@vl>4*EԐ7&= --|6S`l'|&w !B5g,Қ-+x,YPHyp0'D'7ne1Ec B`y܅9 m~Q&|;ut;.^*I\[O*n&h,+n&l&ci$_(0M --l&{#`΄f8`P}pl6/H^ M[hC WȀf ph}I[>ݗKXb!@jVջp#S/N7 --ίp'yypp h+qV|`l\URHr8ⲙ쭒D_6k"`!܂9FuW/ߦF| -Á)UE&ec F^<満< --Y )70 6 e;&'6?zTbne}B$%`![%Bx  --`\/h(ȆDČb0Т mD+\&eLVV\./ ^.e2|Er]>XoƆ*ces5ƨqb)@`!aD $`a!@  !` &ݝیTlY(RQy"AƼSR"{PFU8 `! (rQV%4.`~9ȯ}xhH@@5xVh8h~۲gHGgp -- 5Z=n*D^ --^ kUCaUE??MB^ Bz]vKP5lӗ@ --fzf~H 2~ --%8~|zE`}\\2Aa=dg+V‰]}3a)^&rKlp#@d3- ߊd|3`/Y!?CdɫSDww<~Oʀ<YekL%{R78`FfPYC"K0u74v ]jt>JG]-="i98Xwh6,$sHkKW-h j݊)A(d۲AGPbeTOfIý!`߼d":+J\L5}z(mG(gssqr%2[W<k[4^8}qXy>1e+J<<e:s}I'@8@M,x<c`!<5ⱸ@&A—b"6¿WzRQ#m 6 z26 +gi?-Sibf@A#Sb0Y@g07 --1$C1fTt>> ]<R"ـkoV16`i_]?i7,Wo8Q8  8 --7~D"7ChQ5x@ N51 ,odp_<\`qpȴOnX F?ROY p\F5" 8$@l'pIB>#@&W̙b ((m ‚ b&JdjbpV‰_PkbiQ!b@Dx;@ c a_  2MBJ/PW hW ~kVicR;5 |Wݞ[١2hӕ.: 6&Xд<9; \(eDDžD`jÂDP;#- WFByV U(QVv&UIV❗ bQ'LPp --pU'$y %^eߤo!6a$gDd,)2vg1a0ۈe o\+]%B"~h|-f<(Cu El --y(Edh/0TB]|H1?Jm'r`o+")~^l3@i3 \nnoiO?Dր!<7B_0xSu --7 VI?hyFK{Be$@Co=UW\apʇ_-p25w&FڌP7۲p| Ib VfM7|Do KF$PtnL zk-x |QVP] --r --iC -- --LHϬB; --4^w [y>k ۥ"p}~njV~]a,; __KR~5Wf_v^mw0^ `[4t*IhUŢ6 p/i .VfNH6E3`hLz1 yz5W ilg"2Yﷆ&RH>ͺt08BZj_ݯw+M><_ry(Ù~.'2ܚ,9(6?mMv*]4[6|D5^̉nkjU%K9owY6&2\o&Ak[P2S>9Nz<cZ0>5ޚ icnޮ  H'.Yff6 PZO4` --BA;f`Ab( h p 8 y*jx|XEPD£,laSr)YQKŭb WRsFw`6-kR/@wZ2#{.A%Szړ]z"y)mJds1s0C=Y4ӿ("5LDŽN` O[cf:cPCv,h){Dn8LgU9M^H# N*m4 )s) Y=ZFϯVb/. xQb܎Cndb(:[=;}*JtWӣQȸp#xVn^"d=X7fsidV[ Qb@7 )yatT!=$N358mM7>9LO#r:_,xCrac~Cʕ[Ýa6BmM{`p]4vk1K QRv4Nmvrv ɮ:s;\>[9 վ 8FAi3dZ5]@vQ6Zh5\+0=nͶ Wm'a-MFj&wp)U {)n --YδhJ P-&4#8:_Ä؀m{mf"R-u8_e,0ЧvT,A\hڙ1?m,Vjge5DiZhG~|@3@\DQ,(AIvpvK`8m~ -7;E (vq8?FZYn2Ĺak&XA@A@  K&_: u\g%4ܲT6sIZ o`t̔Ppms}vvpTM+ :'*\8o;? c&{J[Jg hoKߊV# a\ [^ ;IHa#'@~CH|U;7gB=7O#pzֈISks暏ȓ׊标.|7N{)Ƣ)5LzP3I)[ gE+Y+Udz4 ¤FcM --R%oI۝!3i1>,#4-"Qtqzxîc©=CLzhtC~;u5Ha`g:J{&-)vJkoP'_1-<UD2 --f`:ۡҶ)%Cu=KC֑^ p({UF v"wc#,6^D|sFF (W0>gZjh٪ ;)v\DA^pE I}9|hB6D@+S^ J +ĪQ J 'i#XuAS (DAx7fgFf¤bYa y.4Uji`DTB^[6r0+dV@3Z 6-!ψ)2m |OZ --XLCD8p>t&ab(S.mXӸ`h(f3ώܴ.,tDJf,EP 8 , _BjO $ 6+rQ 1Y-6e;3ȰdDxJ pPi+ --`g^R^ Z`f4Ԓ ϟXe#G±6&T,o/32 --XiT(mh4"03Yld@H`$ ;@a hh~a@D- -- y%.p R,ԐWB --M&f&i&cm1#M8nΏifDx %ffJsPq~)33cR鴀J3TS,dOcz<4 O d@SghP' Q33֙j --YGXif-`yHq?ZgS --ϿXf ufFŨ#m8233TfE Lghѐ'FdrH8΀ D4Wi`%HWK!Tbffdh[ FM?DUz.VUّpjQ[o@A= ֫ rU z2^eZ :cx\K7-23):#M' G DHdf ` @x@`Q!@ u?R^\L%R!@5)r+([zr||&gRCCYrA8jon3 --<GB7  --q4|w8ǡ_b^|)YM%sΝItu򨌆DOuo˷ -- WuMSRcln2EnjkC#Y\LO6yE" =c@<ȸɲ!/yUGZv r(:FNmEgBL`f 3&6fIQ>/Jtjeg Nڅq.CלVzPD{RWiũ,w㽪&8c K LZ;õYIpiZ1%pIx F ^B'`yӐ=*gL!q7 ㄂'P(L2V*KBHM(<3t$\"c$:5FJmnFAŨ@-U IVo4V .ɋ5yK8^;1VeVo4VD|RjV2֘A %jqI>8SRO226<3 pbOdNed(DCc1PdB\b1O$10@LfOPHO o`Ƹ$})NA%MZ/8c2%0110a{81'HjP[:r&&Fʴ~4&`T@BG!#CU#/11ӕM`ļ(:*PY4hL@*XļPLU6.Sm1ԆǠ --@qx&sR3 4RB1gH%՘i@nj41(UkLc.#U3Uɰpj̔e7ui iL%A%/Uj c!0@xF`(")١k#.vߊ.~Uj`Z@P+T앂f̸wɴEn5@ag.jֆD!uZD-dK$fP*;7ֲFɺB*|^\߇r<,jZB>ɒʧ,h}Sb:S WKhO(igMҮ#n,ZjjYRoLZD J짬z4x --WǛ'x @E|H|.]B.υY>Wڄ%<pCmo5*z8L|v䐧) G /4B ᴪYPADuM'\H+qa%WUTSv:Vz1X_}*i"QUwgQAuBX2ZkU;T!W+ .* b'*e0§թcw,_h R"T0N[<LiTFUb /0U UgEZrV#PjUR~JJW --DJ}860UjT luNjTq 0VaN7i"N|Hq8b!C:T7"Jx0LT2 KTK ǀ)J[m=*О --fu@MvZ;)/=a"뿙b8} -(+@/nQ+jնswt^ꎲ-J'|zz{yQ #\TN:%P &Z2,/0' T98(Q)d4_y JPX&.R灇%*izb*"*NGnڜX@FE! }/ϒ 1L KoI|*DYyIAY", //ΑΉ KG^Y^`\p*VQ~JO*@8Xz@W0. [Da(Z+p :C|NdK4ŅaRA@|KtP)іdSdlF8CKiR!Q/.*:$qD[@8$Η) eCG?#N --4 --=K˳|F]T:Nui"{MKE 4 --Mps%,&|> --4 --e🈂$tF] 3bT(ȦKI2@(4d 2%aE @ ==3HS[F56lC1Sؙ>tXX;!Gp遙RTdMYjN2u%cphqz<Ój52qucm5ERJ>J j; y$jDg&n+A,b2mGA'D -- 5- --'4. }3.@M[RjI@T`c@jbH%]X{j1EΞ%6w"q="lHg(.7{#i m0-pB[%Og%{_J?g̃Iؚ`Kw9֡{8km3/J?atj2fq(.E':ifDf @0..4װlǎNAg125 ,[,՝;kx9Kdz J;4pq-!J{Z ]popo_styB]ZBdgR(HF8ge嘛pO}>g¡AZ. --B|'Kԩ"xKiRL'3`x\V:rn --$ m&#V'4 mI0y:TPdj&ɂ6 --PԦL1 ,PV4!@tq. @ M'aXt"hq|Nh,H_t8+H_|6P xٲD")H<)OgK 'Q}H/d yPqP  U? --HtB(?Є>YB|)S'h>S8 T`*'KRIra ,Oay:S W*x:|PqNZ-%2`: --H)gs$ꔴ<[4gq:W@6#:tGhw1w=`p80@@@  X@Wf8M;sSpr(CVfR;ő,Ckvq~qR/nAR*L\z*qNKszqj\\tr&z|TUT:;YBKV(#ʽ{L ̒rqU9:CoK o!zo(9/X)qC1a|@8IS#7iRVDAȄM-,ʊg*hQAB8$,-e-CTZ0 M(hY :L@}~* '+- --ƅҒұ;mMc$Xb+aw0 --R>stream --0YVJ7n`,y, (pd --J OVVHTXp&F --K`HJkxR恠 N -- --HĪKR6LTVN:8;28@YQ1AYQIQ }DEeɑ0WRT>_e夣w!IYaF8%*,̐Nr7+,(* -- --0Z裰qD%%-;*)%!(*L ه$%ńeGs`)*' ?Vtu~IS)"e%B ] /B?eE$&;NVTL6r$s%EI`K!HLw@(p@ ,@ACmj0ajcVU<0AvL\ xi ULK\k=/wP{tiGѝy{Мxoyy)kYlf 䆔 --o!EVݛ_NpKc8*+0y --x+Җ.*R`qgiDO׆HwڍME4ѡS/<]+;P]>MF|#+.r~fg<Z;!a;D9#P 7%u8܊H8HNgvRNF,<;k'Mr8Ԓ p[zH ة%IP:UrPtZDI[=eYvK4ul՘dK2bULuǮizR]MiM#)LE(| W~~I --hL`{,SJ [,SʋZMR --H80$((a2K M%EbbDLA9D)*KGT %X)*'*B؀P$QT#>@nAK& --M(&L% XDIP7‘K&HE7L';fJ --ʁ g,;Rf 2@\()3 lu~Ff!AIAIR<_ 8IAa2K4J&2}> --J: Y2OD qyr@ sty 3#Aax@8#(%Dc``PT0O'! PPJ8v́IR(( 6L%dd|&>''JDYL x2'' 6N% -- JPCApR␜t<8HNPJ>g꜠{) s<9riR)0DΎ` zv. z- AtIK- .rAZ9`e52xFo!{ --X#%A\y;zG3s+N/#yc}=;8Ny1 2m1>[c,8#&KJxX˥@jbrb$˥rᴙ(@ "x~ʥQ Y pK0S "{$Xa ])D"L8HɲL$; d @e#u(KL<( H1W$& B$))@$&%Ɋ#0)!P8HLJDP.MF@g f!0 o1 <=fHfC1@y8}# !>" I6AIWQ*E.p$$@$ H<:"JA5 х@)TVLϲe?dO?gw?0-Hrɔ t㢽gy`qY~TBqR{Rэz߫(`͗?j﷥{?xo^|F" eOWc ? -- 5аկi~JÿUy@ǽeU --#NHmCp "xFm$xP< 48`d@,`D@QFC! !D?8B2|ym:FHF?W.t%<1B"|bŅ 2"2Ɓ$6H$η@ -"#I"Rd$Bg<:ȑb~8d  #d08##B0NI ] A bhp"F" D:""ȕp1+@DF Cd@#  p@=#"O߃x@G --`#)R0x$E#)ѐ ?"ȋ x`u@,r%IWa c+"Ebo`P D$1)Bac'""Bq$FBu@xH (CAbhiȖ&F 0iy(= t6=奕< --(VP}Wͣ4wd3/"4L;)-spmW=q/z;!{ eF;䢇x3%!ߕ=@(@7-Q%I}e4v6yy6ӽ84Iƾ <%kϯw֫W=ҍ02u92<#kҰ#{h{ro;xAq4SvՃa*9伮^(šA~1a;ʖڹގL{2ףUz Hw1S¸$yC(i I&?5!"8~'$ D 700ǁ~i@8!@ ! 8!`LpH xG&83  (@I@g Hp*n$bc- 4d BȤǰf $b>BƉ_| 1w(|GHH ;BB<ƈ<Sq:B|;B|`08Ɛ C>,t 2H`= Ϸ@4CWAz{ 8@GA̕6AGB>BF ! ic`QlHq(ȐdFb@xFG8b\/Zt㣙]:r6f;%zךz@k]sWKÓAţ$cT$x+^Tt#UxYP<)VH0M=j#嵏Zǥ3{iHyf9'_)/-W+jiki6 --Mnm#x AПe| A6 x< --m ? --<:G$3m H ^CaAz\08" --M GoթHC bA 8P!ZL7`x|`x||i(p ZFcҁKq&8>@:  Gѡrp#oq00!  *jCq$.6U6Y"\8~xlc_!x!6EUGa$*6>>9jN0a$.6GܐÀF0~F ` -.ap0q$*6Vox|/x)ǨBgT?>8 `BhFW9F`8 #h!4˷.D\g619W.]eN6x#KKnn&S.GuTitp*]:X j'\t!$ χL߶?O W[yd $$?V嶫Bf;1V thH圬4Щc0c}'+ He.cA[tS|-׉;D}I'gX%#ɨ:1<3a*]f"~'ſ$hgնZbcMx[v3$qF(F%V<$qVv!mc wzgO*[G6|F ^LvTǜpz~w hA9͚D6[ñf:pcBt\[w-;\rD9BpDžj‰n`k`.3)YmrN+C{ dКī= r΢]L$,#7ܦ\>J혃rP|pA*1.G58$ --7)/BJLKDG9HLKF8-A 8FKKH='4DJKIA,JKIA. !9GKKGIKJ(>HKKE6;GKKG:#BJKJC0 5EJKI?* --6EKKH?/BIKJC1" '=HKKF7,@IKJD43-FKKH<&)0CJKJBH?+ --7EJKH>(AIJIC2%GJJ#: .&.@HIHA0%;FIIE&*0AIIE9(=,?GIHC37DIIF=' 3CHIG?,/#:EIIE:#GIID7EIIF;&1BHIH@.*>GIIC5 !8d1FAjHa  ? 0 %iP FKhQ%8&Ч-i-yRQKDmh]o --%mibPU {)ĶH>,v5*ms:qh^ۼ[?d'Ls+.b'^V~.qf!Q $/yFP L^]+^ے&vLڭgi%t߼d]Kjhtm>rLfVnK,HԪfiVLv, @YZAyJdIi/h Q(#iĕxpfp. oxT&C_fnG='X"`~ --`LNbFaCk@@O --AXX4B --iA "!54.F8 Cs!@aQ` h : hh60462䩎A Q>7X @FF D0(A|xF[i3 P@Q@", --(ح<B.Hb !"@F --`LLB`Q""& |6`0221NqA@Fd``Xy~…T 7qA P(V`!7,f+^ ,A7&۱-M*&(u͒ ҃.fBדΪx:-K(. :-':hNOtTp 4Q[b Ì^3@o7%A%EAF6tod3ba\|~{| k'FCŀ Z``Xq'Boŀ@E[G @ -- C6B> 0p(-NEs1"F $Ņp|گbbAE 0%\\Ѐ9[ŅE0w|9B1%UpG}Y#nE@xgi!e0H.8ZZIJТ;ZVroohZNVvJ\+puu4zA^ovfkwpdkJZjDzf.WI+ jdPXoGv%_WӘk"-1^ --Gg\ zpey*1]ژʺRa6[4ƬRW+kl/d,96]:Ģً5L2 nf= =;ż+{o7lIm_1]L[A+jB ;P0؛8_ `'B\G @aP!pm@P`;u>~{1NA1`pE0^P)7iہ#0HP)N.bB(< @!6J^BH! |A --!BaЁf|߄P|t""XP(F1!@IPN*n:z$I(wjTf/](dwnMSX}  --X7.Ur@gzih3!%6vdRka/ͧ2'>ZQXl3!Ȱ9+KNKS%_!9.9?]iƣcj:NnT4;QM+飝UfPX:J"մϏK4ĂjCT.l#fbKZ:zTO"g!61T6E8&J#G=h?9{3uUEAt_r::)x0 A,HJx'P;c+fӝd&Fbh1Bݭ hf K)9!` 8 x~֓Ňꞥ^hS* ѫE3T҂|ї7Vۍ9MPs"*UY#l (F#vj.yψ9F3P!zLl vs"eh\40py8jYjxl$MfA5{% R --D mf˔ɯY$r8n) }S6(%C|>f;wC7u-sL~oWyY}t%m/k,4t-):\%甸Z”Nk/.=ג!:`<>_W-)XɤӴNvekg.fZ_/[YY\ҟyEG噑`!ܩiӉ g"=Ainb1ewb|1$g*QGBZUPU|ꠚVS#z-+S⠜&qj+ꩊϴB{- 9DK4h10}5?E`4]_2K3)qʍ$0]Cb--jOkQkcZNNQ+<բVA0 ck.`!9&ȘL F91(JMT{`r xFӃԉړ=ŭSMԢewWi&jQ3(!W=EzjGr(¨ld@xHl@P a@ ~. H`IC!x>D ɀi^\3:nߗ2KH؝G*D 6B5gPs8XF5԰bˑ'h_ AOA:PA[thf$ff: _ky}LΘnL7e`K*˰6wyXRX9Wt E^M fBtcMo.?,U%ZJc?@Et(&n6 --ju!%C&ŕɔYbB6i!nx(*Hy};T@@kxXC+VbJϥ"i+CWn% {kG_꿦K/eAqW_Rv 8B(|pG}FNQT=aCF0C]!܋=3S --0E<^OhktfxhLU, d~ sna}yh.הfl"W[[ZZ<ѳ4Qt --ӅB+@ME'"gEKy) Pm@"29Q!'z`:4Q,T԰&P<͉ǘV=Ph1sN<G d/!g3j]j|H4kB+1 KēBSU 'b-Zlb 2EST7Kj22LCT [¥eX7,oP-RۙTe 1@dB,hb 40E\GӋ~ᖟ Bt*7р#/ ]&*3 "pt+S_ cD? -"uAafIfL9BXZza5{VIN9φz8J-Uzh崡WkOs4cwtGB{i:-? ܋Z 6|nB+1wV{l#OܡI^`+h bGq]5H~"w4C{! ݒ)6oˈ$-,~'IHII4s|$'0M`Dkj8!bDv0M-Hr2 @LHr´D-M=ꩊ1'N&Sq2`:>ɩT9%h!*L&.A 9A.!h:*4:Ʉa ASpG'i@8M_:VQFl0H#'Qa 'Q$,g X58: 79,(hi'>qGI0'{o,%T/>  ]cUl1I a4?r --f9!j_|HN@a,q|yM G@\* ---g --LBXE&I@ z@ w p1`8@B@ڂ/(aר$5O"īX'!@KK --H!THa@ HX4U Zj驽 DL )(hiօ$k, /H(DLo^N%,_(Hf4M`<fQ"1m9!@haݦ"CIzܢ 1+@S Y @LOOmx4"\4f4uȀAmYz, --ӋV!‚S! --RTXlqJjjY$`hPMn!bk!=@SYb<<0 /!/ C`VM][A"74`0HA~w%!oET!a]2?$<ϵ%t(~|sD~,+ -- kI? --wwD=MKKB<6U\}g %D.#=;1|Βi.M7+epg=j..kc[}?? -~Ϝ8q_4G= [UwYZbuPt`pLw(=n}w g|(P;ӷ|Jww-pbbcLF?wEoÒX^i`ë b0 --_ڳ4;|P |ܰ1!`Q!RvBJao >tx/ފ --.ăvD!٥Ӗ&mڤoͷ}jp9D@jV&n[3qJƝ"@/W`c2\//ވ&Y;^CP;n0x2v2}TV~ --TG6hG;c]l8 K8r*QfS@ذ͎ --Iغr2fC̞C016`Ϫf2h[@7"ccbcЄ}_'H0gʶ)Cf b+TϺ̘<\hHm +:EՈP9ꇻN6\ifloǀm`٨6ձ]"aZLS%M^l!"J5Gyz7lW~3[mrQgүkG 74v,Qz伞yf޴;6 --MAg:V oxtoYPt:O5'$u!ZպWakQjENsG\#WXXWULA<6U 6580 D" D"-#D".*-ajzdZh,Ope\sj/ -A1A%ȸFYA=po~ --|; .Y(uD`VӠgu8HRfE]-,Q/ :NIi%:,~8wVW$4kui1 ¬ԡܢQs*%zoFhx%/*d"",a;D^jdVFpG= --Z6*`,§*Bveq5hBI?=_2ydepivDz7ǟ#[us!7SZ&dk7qKib؎H֦kqYYq9)&Ϲ2o&β0f+DW \'@=9V9VR<]5 hb;Eqzqvm`(b8}n81%[>D*xH]Dcӑ_yV+$ۑбZ$,jw1w L(Lám0 N$(``H0lh8E*˴m˰`, --B,lۺi#QMԦFXd6qq&i5*xp5K+0ms,j'*A,UjV#6D5\&XE#eV СHOT ǡ @(ׁ2$C! AY Ђu1LS4H*h,p0B@Hh82-2m6: TE#6PKwmm\CS,BP0,0Yq!,*,*.ێ5$CLW7ĿgCh,vgbL)"y}YPN -- 8Uᡏ;3*JP'a⊢APoY\ަÌ'av=]Dߋ9,aD% RJ=G}Y.T>i!ĔLn4yh. D --Rtb U&VCi Pyj:V_R`( np4b [k؝-+wWb_^ܦ}- 勯@#30p_2^7J{TH>>V ,\rTk\o7` ӗy>v9f04@/i{^!UpD3DFpX퐛VbTحZρ%>C vf&zW"KseEQ --/0b8|6ӛԡՕhxĤ1pa ,)/~Q$5 ӅMB l1#sqssp AOGR`QQ,Ke!&@KP$ a*p)@ O @R` --4C00WPU8TR --=MG,ĥp Ņ L E(T`4=h` %EPW*T 0@T"P Z0 u@$ P(Ua --L2ˁ8XI0p\+CXUR=NP0T`XX,˪BI $I"$ ӀD"q] --łh4 1 ŕ@  --T9M0R:됸5qqH --R!@Zj?I)T*ԍLՠ --U ,AOXŕH u]F&@Z 0J ,CU( --j0 )LEQBUYu8 *A.@B`@qAL1B   *y?WIs^ [ƣ`q \AzY>u<\-gLCsEqKP}lhLx`nPHܨlRCcuUtJ"\d:/d%q)/ X >GSUw`46u9M"%m8TpQYqC'yd^~KQPyjm5eL2G`JDX:#IdP1'=E;TKas*4AH;#u(8%JݸǙ0-D񠧿xS Ex0)x2h8=xh,p cHbnir6A9'M<&Jܩi$~Č @N46 ٰf\;5,8Wa`EfD;n@_kuT]pr6x%0Z!*3.[NLWb~χ5)"`18tTFJпO:V c֪'bk7:o^)Eto+uL8hq98rC5ܮ.yEN"UĤ\4@?)T?pWU!J @T4#|D҈Ts6 --CwAu0jP3xٰ!D Qgn<=N"*UO @F"fVD47؎(DEz& 2<=q?P*ʴ2vr~Z:LDNL"EDpUd]> .z!,rX bU/b! CLDY,W{K}aHxt e"eEV;೴ٔðÐÆÄBDݶoˬ~BeIt~9a9_ Cl-$s^[ѹE4\~2 --+iӏ昳 04ڡygCTtX T"Ćzb1RQܡ3 U!@8!2+@`6Ut8E w(C@P1gCC6Gr%I[1CIbD8-ق_s r bi$f|o%M3 ohYm};_%SWXc`WR湒ti OE1J՝VD.u_?:h+.rOj tG*IR'˷XJ 9yb --le%Fh hz.Y[UO A(kP֠hɤ`Tbc)"c$Mt{)y<|'uyq{Ѥ7R*$:E˧O+ןByQ~V))ѡEScuOq{kBjeP[L#jݧ%< bWEoR_bVƶH務lhm1  P1c!4`wwp3.{Q(tk|0 `Mh-a8Bޠ BvF%.gw0JgP.Ӂwdq_LRpp"@Jɳ5)ą=> F/al --h*B --endstream endobj 23 0 obj <>stream --1rG I{ΓֈϲDw.,WзYZ=ԉHd%Y@8<^_@ --56s^gbl I-8S --`A(Ӽ &HQr@xIbG 0A0! `@ D xRhbn` Q:Npw:2M;R5*4OO(f; J+1XϢnI 8]'@7.Mf x --ofzxhꅸE- U]5-n("g(]\K׬` 5@~uV%pYB34-߰iƧK D^ --ydWyKQ%l522ߙNQ\WK\VQ?bҪG$) ZJmj -- C{o~R.3s\CflxW#yqq5q$֐WOSc8 h^ WUT;P\OoH -вհի-:يFyKbr 3H;'mRrm` Bm2Lb,URc --yV5 6WVT*v0«浝UvTڰ[-8ٲ]m5W2MDU]EoWM^oKTVqWqf8<*㮂Բv"qaG(2fj"W2q\r NEtjS KVClWY$?]uVCqK{qvI}`&P?)d4칤Aq0.}4> --Ձ0?@!& Yhs<=,ݏ̅38_`{z J'y13(Dzje0c><\PFG]^hFj&qE,C]տAރa«}YB1%@\UPeav@H1x@ Fa8(c0@ PEl 4w "1g (Bȱ P2)(p[(v"w'PZu#).۾2lS>5  PCW --0tq>HMSBV --7|(UNx-(1{w --^quNݬObc!%QFL}9\:,ڋ "j1k5y,؍1B(}ՕOHBemDF3D*NծN; pKA [=ڱ\"er,\R0i\kzSmU` mWycF|@ |ݗW LaaO[=Z9:6(ǫ`^UF9vu],29,@n.|ƐKWu6 Ej@h"_#T­"AQčǂ7}[{U-ΰZ}U4 D)_'!R>MXCeժXhwj4lAu5"x!$pUEAP(V-參M|v --{Nm쏄t\l 쎀eY_-|eZ1Ô!rhU4ɳQCh}dQ8 --Ab%; &üΔfsq@ ; 8%q 1@" P7Π@!# \ d杗XnjB&܂X(t5SXXقg &gÈ̻'ժbaflzcE,`gUXwhX@, tuZPڀ!MKYtK,=f"tr0 QjUXa#TeB ;$[i#ܒ$]M۹?]`t NښVrsXk?CH%78ZA}VV]<.h]eu"6 9]=v86-%Q^MTDI9D,-g"q,`@4ֈ*\;HR%GjMM --*I"[5J$"Yq7tW!rdK *j_TO&[jU`m5=d ECJrX6|l,|'.a佥ΉAWiz|҅Tx5rMV2DSVt͆S熃"*!49@;Z;NCNXĢ RP0h@0(ab!"4@E1M=N1YW^ߒDA9t5#6&SWυ }j#*VO|K}U}H18m > u 2,\"VnWׁ[ UJȡZu --9IP7q#*Knuu <ꀞqN$qZE"]ͷ --FWf3wUiFQap *"Џă@-1nS4 Aq.xwW$@2k H.HMru@  .*.hOdpv 0wѪ/D5ʙí~8R!eZפ9Q, ͮAUW`|7d --SXtqY:xȜ\q<0@"' [ maGTAz6TZ|pL9L9L@9L9L9L@9L9L@9L@9L9L@9L@9L9L@9L@9L9L@9L@9L9lzrL9L9L@9L9L9FPvϬQr#Z<IUS,..7[H o0c*A:\.2ՐSEmHQhnYaf_y0KN^t뇞P(@ --E @B !GT"p*SX*V --]E'8‰n9n WD+_8Æ"<I b>PZ܏nl9U%[pLO߫ڿ5(nE߭Y]+Ip䧶SCXx}:0U7Ȫ0VUc+BHpz#s#.D v"0ƅ41M9~*qRf!s[/3"gu8m ȆQժ7/=-j! 0V!O IEKn  ܕ8X#  u. J2םx>uvUZ-)jv9UAe>BNfٻ.Zm[ : l&A3o*ba+@WqVj,) UhU4jư&brw3*O^Ȋ*^YWjD}1j:s]SFd)hWqUq}cWAvu.ۮ<-Y%V GjXp ^,X" ƴuw+hM0"t#oFJ30\\ uXDa!E,D +m y@ʫxUp,6B}Ko"‚V/r --u@5]qIdo#4nt#Qt --'Gn;b6磌!e1 .9[M2k0)VV#ԚۍW [+1HAB.l)DK ȅB 1tmѪz$s_L/z 1~qaA:2|KZڢs ˘39a71D\ٰ>l.l*875UfG;4aVc>"c"8 --<vt픋)"#p.ѓv*+B*~|@sDID!tU%bU]UnCVF[W/3[mV_' D6DRaŬ衑9l0QMw'Jb9(%%P6nN:n@^l@:[=$wՕ$ڡՃ82 䀫gt --_d0$K P YȺ{mӽdXJ'dUnԲ٪uQ>SJ2{WÇ@nm0{?8`E֚NED_( H]@ujBX$@ ZZ]2n\{]tzqX HHJL{]d]' --_aJ(uӟqVa]5Tɶ}kmUfG0#7:4բ0t+2N-PikaOb j;C3FF"23C(NĥᲇA´lv,vI c --(0ejn%"} --]q ě ن3e@Ay,Lj]K+azNG --)~.7x'np1pA( "`0 $I 2!D X躤|!eiոI,T# V7S``!UnFY4h\Xr4x|B 3øWť%٬uC3b'ѐ91/*wNjihj9W aH:Yu<[ID1 --alr4&3B{MnUw=[ V8;ϸWi[u_w*;U7Xfk@0& ObsD@5HV7mBZ3q KgUʯ[}ůK $\tx,wDW{xRt%|AZl >lp >UCkVM@rU"1[M*ܭf>< @{iu"D˜cArkb8A:b,\j''fgc ƹZu]7qYUbd`gw, --c@庍0fX.B:HjЫH;]W<[x@jój%l*"T}ڃЋq՞hL B  #j.2 --gXpz5O<'8 WǏWrx2ҭ|AgJA1OpˉҖ,KpqJouQ4 --FQ.QutȯZWKWS!''mـ,L)Nԁ@\($$9gHcK($H*ZOaN HЗCj,tXy@{pM բ-g`ACbaNZpIKs`" Kj8VFT 0fDt;LWlaUIA[&BgԖ@?jL"&! uߩKWi9/ V/٪RxA^= * ͺ7 hKk)BrVFwҐ"q5$o#FY! RN[*,|#Q=bQ(drD{iO cMRco,$UGGJ2>(6@Z;\i84쳵UM/00: ڊ:ry&Y5;;,b_bStx#22i4UxdJҕ9(B8ˡL׋,yfb- C!jBR 2-Wgu[]q[ |`+D=;+鄦:;; --.SIq58vV o䣺W[1Gaܑ@5xu=jI>C 0+$*ѩg Mڲ} =*s-?\8ق[;^y9L.~`,D[͸칪xY;ίͣOH%'{{ .YeC*B`^`Z :eu@*)m54h Zīe54B\}8׽hzBK#[V/䪜^@3_ɹT d} "Ԁx_wo"5#rSm5&8Iթ@O"{`nW9\ExbdwqhDLe,x0)j$ d --j@x*_#Iz~LWV47Uapi@tZK^=V& aU2yZᲺ U`fK4u --d!]Xja{ m\gh̔,aa --Pi1&7@J; --Я Ptb3//m wRpdܶNɣ=,Z$*YpVd8piXn>[b*@b։&sv("m5 "gM` --3f{KoMdYZ@ z}3 --r@s ?EBI6:}U!ߜ `070f9( --!d 0 !|m] %#@:\5GO5| KT,h?mGALWCル;oU}ϬRVO*7,~ CWAZU-& ikViVXUs:7u`V3WkY9J=iU";_$Uגּ޲@dg!0\<:V[\ou2X>N]§*MmUƠa BЪ^X\V5 e,pV2PWjBU7u˓9xm --: --[+n$,8mtٯj@Xz5xVJ$DYnH@J\RJqq2H*%'W+h@UeUYe7LW@@-^]u{*$Nt 茷n%\/@Y`@"Z=n⣺yu#b 6z-8zuu51;j/^U>U; M܀aU2'v --yP,Q MG dv5aי۬6BJ *hVy U@- v d^gse aU]=&7x*YZPYdLW -- D)H,bt+ --;1PV-X˶Y?Uモ\XY^m@}U녬4m1L@78 \}uZU_AG%ђ KQ@*phO0 dYa$Nf%N+NgYHR;ѫh-/03̪ro ȥH pU2V{!1W)#[ H$ٻgY$fjIa --~FUf.9Vs3ϫh9AZף* --sNꢆj0U#`7*c\毀/\Օށt?юxQ@4xqWw VtYH+xjbWKb(Vk7xU_wẫJkU;Q4\U˫ᨕY p޺ ՍZ`G&WvH;!Ws)jƳ=\j) Iޔ,U֪Q>ߺ:ïpVry[Փ+ FW*5KVm:[zMc\u}[3CeCIB-ٻck&UCz^Zvhζ.W\h --WswehP ^MհXն:a*ooYE0ոKQ:w+1bp7rNJJw:?e>Z ӡZdA`ł`xC@79:nPH}v[F`!D `/[ --FCVjNX-70;aX.˭s2]'ɶwOl rDn4Zfyro; l5DdM%O'cHICRq9벹wEl_"Gώ &Nw*;.#CQpN=G!Sz:2* }^o?Ng7JTu!S`GA-w  --Gy2 @@9(1P0Y}\&zd5*^Y]'A$ݴJEɺ%#=8D --7wK0ڞ0 UdJVp.UTU!Ľ --+ _]T.j`ʳ_[AI[MQ$EĺW4^.} QꝮjqN#Wfws?饕_{x %U yf ʺi\$y;J[rzF50*`_%%:ʪV}BrnHr(\e<䪋{Zj D%ef --6Ռ N*VIP-[%$rԦVd p*"ViXE1tգg~QOUW"gYp4ZVI{1jb%%ʑ ӠڪUgfW94*1o@UCKt'6BF&˼m9k-b:-\,फE;I~).~[&Val;Ö.zMմP꘮U4#szUY(h"HǫWUan2*&J YUb[D+cpwX ff$ƻ׭#Bl-) Z-duWՈa< i-)W[YpdVՊYM{FNVM$|e6)j $"`'WfZB'lS밹 8L#pyyM@ (YRh jB٫w“oR ;Z=f\{uy<8"Gꪊ aUMmV{MpՀ -- VU}jqe9]V3Hu06YjVγ .dd.Kq>ealZո3 --:#3Lm\7_M EWrf TZhh5Z+PouzVK't$_%Y ?uu(-bmVQ߇eK0Mq[ݤ]AϦǻ_a W* t*%{0czF %)c HB[gn[jt tUG3kK\XU {۹4B kJW]:gY}unA]DYU&lApi --ҧV:tLZ_f,P~32UeauDH >e˭Ͳ:Y"@ڛhu\}NjрJP64L@Y}#e "Gn|9\XER&ǹZߣV9/ZU]vr|ie–[B --)׽$8#\Uh3v8'Py˂ HRiVxkv:udUhue@RxD*v"^u --U_sԏ%4 --v`:̟E:Tǭ)vtaL[#< lXoր2@pWhns+i^_X`A6qbeX]Zpr*&2g!a#]1-nÆD]dʪ]=٫ھܕFjܔcoIas<56#y|O!gC{Ig)d`ɐH=TWZh@ "u-љ Ɇ<-.Tל)]T]-8Kt- ʴM$@n 9bPmv",$;.f6J1#lh1Y,oEbѽ:UUUUBuia~/,C ^햸mKpNENeA !i(}5qc/C }^FB@FABb c5za --zA!W5UXbjC)JQ%gAWTfZ+h]5d%j@uS-y~Ps"#vT+`jNWêXuBUU`[0p> --MUWY*7dmUyQXU^ 4ǖVc:6@:B覯zڧ:QU%}70ZBJKZ,Vk2NK`7X <UjaIJUנR%ᰊ40Ye*iVE9jT2%aIF㏓lJG@ --2POV-xyUF~kY+^ ]kmUu{X}&O `UuL*.b2XUjVJ R2v yeϬfV:CV=VW˅Ry  <6"\oUk*?TOu"lJskX̚JraAʉg`u~00O[1U,̳*ª;PD#;(훰[N3Va=+#XMkVn/W^pFAwjtZoU[7oփ kjb-x+Q*1ܺߵj --maRXU%F*W/r:B*b}@BX߲FGqV#w^onULDVLYX!.V:ͫIxw/ـ.|<~jUV}(6xU1=ҫҭb'3 dr^ذZU:t.*%:6P:qfߪNЕ!Rh5VU}HVJaɪfUQt --! 0ɉV)tOv --Um"k(ɮ]U@x T9wvG@W --h6Z+W}uY{ --PUV]u`UDԬ @28YӲDXl {Xd(KtKt --@dUV --Yª$USjLUYVkC61XC{ +4y|5\rn -- --#cxpVY V" --C  ^ŪUlqnL4_Y:6rJ@5괫JrU --X^5*NL݃pIy!V1Yu <*[)U U gE4Y(V`@-Ul7 ϓVuW@ ;VY=UwIfuqzk}dy5-xbU4dȾ ti\޴n\4k5ĕuYw\DOy5R%V_m --( dWsOW?m -- L輂Xׂt +uE*I(ZB!T~ +ubuf*:@×ܟ6Uq [m/VuY%X_¬IAmAeK6zkbgW!UR_]8lV*@VraH@Xb+B PT)3"˛e,ui[7X`C xlg_ PWQڊz[ HkGS QV&𭿁KLQN@" DYԉ`UDx{0< ?B8o`Ñe6P!{J}+\qi H$ !Å3 --T<1#'TU|(4t(.Yٖm;OkC$c.Edrk2)K)U!DkO…e=Ua&UZTyo$C ^wUi*G'U!Y lyy7qIle/8LgdtPV:|zqz.)> HC@VA@P0@ ZUÔ)^Dz>뤬mb}šUg멑|(?YXAX8&l"$[bY @m+d,&Xqߊ]lughFsW5VICl~[؊Y3.*VV:>i2O^7$D ]3Unȫ8@1)|U[/TUnxP(5* Z+V導Zh)A t^5PZR^5\V }UcWXTa|0vVYyVYӖ55qUtU`)8!K5^jXĹ?cݏ@<>i]/# '&j*1<UCF0sdQOrQ#QI>B,?2JQyAwkr5+ B.j~ypXGGY --ձalSS* -- $s8a"l2ӄ5sd --1F˗ƃv.˕.W$ӴȰkqVJIc76 6ms C4m&&p6fò91ꥷ&VNH.ci& --e2ik2&m#+OGei:iɷKODea437g HɜO}Pe9xS##!Zv2Ӗ6~|E-_eQקe#Nn!J5y05$==g?CmR=Mizݥ8<-[ZNmߒNB]Qq`r<;ak~q͆s --;BCV;jWKu/az]׽nU6..r>Ux_h8K1jlP<#$}큍%rP:NSrƹ --;NơǞ+;ȩ:֋}:f MSMkn4QU& ']ח%i =ͷk"c8P4/;V-k!i\_6 p!" 0FJ --FCn6! y,9Uͷ$ӌMr[z<#`^ EQfwo..Wz`0hlhڋs}[fQRayda7)ћ530000T uݖU --4Ӏ+۸>GT*_C.$SX8AeC.&ڛ5iPo˰ʸDo֛kͻiZol,G0kY<$B/9_@P@|-zyW;kOR$SxAmL6<X_!PJo7>0(PC7I =nӴ̢$4:ϳp`}f[;[狖bauYj!r,iz`qC0:oBY(~uܖ]x< #$e]eYV9q:(au Qޛ/"FbL'Ww(h$CrQ<$QQ__ jHԅyO\4<ºIiR0 --b$$m%9DmPi3 *Qu]FIEXH,Clh^}Z1)߆URa1J$.N$QOI,MMxèXFDa]ZNMLGX88q,0yeaZ&z?00T:㋖N˰z0{I xb2+15Kt՜k۔ (gtM --2sw(Bhbf d>WEj%w"g('0śsoW[@ WAM%jTY$Oߖ,%5ܧ琳@&-4/YS H%AKj$HhI ga"&94K%޷ ,`igI ˆ'slN(-ܸl(X d}#3M41xc3wO%-uPZ12aG("2]żA;GD>y|ْaFϛ7[90.$QyBݽ\si\{\QF|G~nE bg^+D>``XF;&X!8 --xf.55 --:l~7f2̜gtEMw J ֫SwqUh(R4 &'BQR}%\QBq{S >M{. --&3J&@h(p? /Y5ݜsIM%`%? jk;v-%f`ߵ ZPSb(K$g0呸oT"gIs%=j\ ̛K~![, 9,X2p<' f}˄ $OkR(S-iIQTƦU>i=P̨Qb@1A Z(@`@X! 0,Ze5=NgƿUV먖V4C؉D\iXpCq"JÍLEb,s{.ʰ"ArHl![K4+(OKR|jWAUf谔 "m1\zo=Ѳ3DO 4m2^Ȝ=TPǵ -->UL2e1i[ov$x3\a9P.JRWB_]O5j]؃vlW!;U[ZԌRlR }gYE74XFc*fݐeLØVϕCCd+:K4ɕKj[iEp2FAߵND+A 5ztM'/^7EF `p-tkr`:xe"Oq魶-|cv97Yy]|6u,Q~3eO)q7?VU8errh/łMlC5P61ϑQ\y>3 Azz=(:DJkbuanɾQMz'U16z)h h ҽ%ba&?9&>=0;Jd4џ:&̘؅ --Ytnܳ ?E-pҁZ]%+ Qƞ3 ~96 P+:Q |@Uqa%,Zck`OKEǾݳG쑟(~NN@ОH$ h A5Hm. .?Cl篟kKd 틨Vap|'Ec`t+N}up41ٟb凟 GyҢ%FpbDO\%Q.c04I7R|lE1sxj$GG.`[רt=m1@afkhT["J"M^fkE.ٙuF<+9yPs5Js --T.@|Z8.s2Ċ[$@4Y]2԰xVZ]ȴ+b.cgdh e2{{2:d]R$^j5́QӜ"MQҫARֽΝ%2c<(k}uyY($*i *i 028y2XQn,m$4O_;4[ 2.zvxfs$b/w1{ U,ۨHJMfAik+)3WȂ {TmӌMA6)ff\2IT.o$b \-#iu!hݿQ3<[l04jYy4OsiӔSvqA}i}b Wq1g1<ľF~O0Z C" =8= 94SoPP#NBg/P*W}%31کJ\<D/ȱBI}0s(rCEB&R4]aH`0Q.: ^D0FDh| ,Jd@و"0[@|g+VT}}CZ% һ Ǖ)u'DT&M-*wr?&w \Oڞ\D#r]rkh:|~A +p1qa>pCe *lCBpY<󕮾WX\(Jb`.pq1[@+ʬ&r>50f׻ixn3u)W]Х[:[guR KgR9q -.Yߪv.s: --s<*C$v*hMu]#>$b?DOVt ȑ}+wwl&7c mWn --uJȵč> T85.J#34j$75{&B$q,1G>_W9nrQ 9w5serدP뻲-kcy) 0QAu{L(ٟjmy$AC --꯬(в"t#PaP߱ЀuhGzYItN7K',D z+R1|X!UhEG)bZ˄WHgRhlJJd؟&z?,\L(# Au=O߼*Z۩)TbKg,S-DLce'jeԭ)p+rPmBc,f-\1#cklt}^iYx *6/2ʢ% --t&vn̥=( q:C(`ǭ#в]]ƜʳU^bț+% --$l,|`$2jH+zׅgR8uG#!@ҡ:ݷGu4c{fȩ =k/'~7M+d t)Dpw3;8ۃ4;Xf=7QDńn~gb;sj\uᑕՐ2LM^ ݺI}ֳ^jIg?MBxnScYL<ٚcBnރtܴ0AU_ǸiG9g1ÜERt<9iअ*Z,&?ƠߔJO18{֢FvN#N7!X㌲bmQo$c& ){B֢w`2q Zkv݃; ~r;E)rpH --xHY{$}nC?IF@(&p0 -- @@ hrI^\}xD.Z^?t&4}/S t ݷn{nqUrBˀ#K^^Ӳg(PZWB"Mnn4q萝ef7%ef&" 5+Hj W~c=6Խ5"D>%^ڔɈD"&:Q؈p)yX[#%5'£He1.iL@QR'2a[gbh 0VW)A 3&?ȫfѓ\G$ OlA;y_f erڷSDUHO.$}YU --է[1pfז&ЧNl=7LPR+<8W$q+# 񟒏)k2vJJi0Nc.xXqn&b?hd IcT --dKљ:&RhYCC&9u_1_㻕o:E|}POSWbTھԡS<0 lH1wI `@ X!$snW9o?6W[+G9'~Ltgvy~@-69 --$Շc>&%Hd7;CdE_6upE%7WwP/\;Pl ˩NU! kl^B{s0 Q\N$(![^LthH9:j @1bFw+7Z/_+ބ!mĈ+"{M_SaM*"=lP-H_ܪwX2ğGtl --VCh7s چE_o?O.8 1"CGԊ GКB{W8yz --ڈf8>ɻ>&`8V$#zbmBcvsw8ڌS*x{3tr |md-(}ը]]ENWu/Xc$tou5‡kF6R\2ḬS,^l_a jWL9L9L9L9L9L9L9L9L9L9L9L9l^`/2W&CШ40n"QFQUޓE0sx:::?gNhZB¾!)d L% /tTm.蔀.6@"R ٫U -- -PrPYwM G-*>e}$|\Gx+\}J hɮ~@xl`_R+d_qv[!A bf~7(!Kl&FQ_a[ z7_îoB=q n*)v?#D$I kђ;+aʾB }5 v.,IRNgJWʁLw*)Ik"waE`EuO"DDgk-5p{aw췔عR'/a,.,8)1?E!9 Me(41e60d *p]5 I2Z* --ކ&Y8ڌ($ŷ 3ukAVq0"Sj_,BkAz7PQ"D/zDgC<\W%'$(9oSMMz hWyZA $`8` ` @)$B') غ28Ɠ.+ --9gRҷ_'#TkKb׽BXJ/j ;]v LD@lTP~EݕΒÝQs,IoC2 _뻟[4d.y-~FJ 7FnfX54fh;P ?LbH'}U --\5`@F.Z;B?n kPYjydgWhZj#B73 /%YF --yH\0C;8M-\/C<#.oõ\"q' <%Ȅ˨uNJOAxrieUױ֡t\w&5,E[KvyK}ѣOHĒ4Jj_p͠PnD%VqNcmJdb "qg!?L-jfg90ud9) LL`un JWږ2 Z~~>p{I#f˳[Pb J`;58 SdtRd8Ca\dq_Q¹ sl=s[V΃δ7[HW/iiMe׳<碫Bޗ;P`tj%- --J5ʬWR7@!Y4JqBDչc%LG@`!Q4 #1^KeKFFt@o+1% FYS NAmUE"ʃ rY被܍`M+X}([HYNcE&WT2& 5 --DRP~FÉfA, ,c>(EUHm Eys#\n6AgleMCc꿷*YYhTYn=\xh UB Z< BZ/~_.|)#q}TXvD;NazgDD<XKs +V+NUJ}mDm#s)i#2\#KH$B+MmP"sEۦZL\F-zhQ`\HoeW\%"揸eQ2?p x < --x5BHwEK%j"֑X0Kx6&f8;?.(58( [0rajPvw鏓j ,*Nwq$ D,6055;@ A;!|[Q a%@٧f-#itsA?NܻzDycQ-pϵEA --͙RrZx ybQC\lVϲUdQvM1X'1ظ;I[+eQ~0XSFI(,4A]>hAʹdĢ9SJ,sg[9@|w,E(a&I ڼ/N΁iwo? j --N CvoKG@6Y --$) [Jc0HJ `ʫw 0ף&m^`Qw Rټw b0wՋ 0,Nt[Њ 3sM' gP|CLtw-jDԌIpt^Pxt5=?gz&rWdDzRF\[pEL7/JM2A *Tukz s`Prfa?&9sBg%;!1q5]9,W߂$̳Qβ,Rз 6 lr0ѿSp871q{콍` { --$!WAճ"QoKYg6*a69T&b%H 2f60b"@!!(C?gA=v-1Еr<̿CC!kaTzN0ȳ&С$YtvUzvi˦̸8`D?z/U -6?8-/zmw<Иʊq@Qx!oC) ˵oi0T<C(ڛY Dwv 3M5•jӉ1K:+mMy' xq $ --Ы$މ9OToWCAf4Eh6*<4 DZh|3kŞM@om~ЭF IPMYE4ʉ0pH0 Ͳ1;SN OTn4fnBGjRIOg<ǰ}桘<ޤTAqكO>2犋spP H6WITdi.b]UL`pcdT =*pE$h --0kss 1 .Iph --UV^ qY(gQe&Ѱ鐅'60(9xb/ɰW>cWEUm8y( d7('} --b # F ` -lH$+m8y t29DUW<?, XAw I-X*#)Mpө)~c+uό϶ %!?(8! --pJyQzlCK% efxq=˂:qz,:_ n"F1`f?r ^).4<4ls%<{`&DػjC~,x}J?JƛXԂ7ҔWz%`Pq$ma&cFqܙ=?$2x|lgERy+*jSQc)Q%)Ix{T^K#aQ Vs/,1Dbl룣KY tĻw(&7kl1 --&? jԫ F3 --_#iB6Q"anc@y~G)@}`R(KԍVs/>z]0uԫY`@ --Z?Ǥ7%@{}ɯj, &۟_&1J+Ib(p\ --Z{oL?JݽK=*a9P}$$WЂ --uZe --n;cP}dcM xds+bВ ,p;5%WXB4QF)0 hޘ($ D:eXb{VYhfM8֛M-!_6A --8.N2 ,"!JG'@S%׻{y6)M"ě!w6iQ wylRX$ fZHQF3wZy})hI<5EY!]ߖ~"B7!|p(KcF3=Y"X ڟFCmj0&︂W(QQ]'$wz1 Z,+}|ܖ]pY 8 --i2DZKR,h --qXͫ\ck14& A4!i9+:qw -T'}g[R0-Y?jI8`ʸ2쪞Y4,D$`M(i.,@Zy'  ,`,X --$ o,Eɴđܟ{~FN曡c4#Z.Y9s}ͲV}` ~y>(Yk$Iy3'CCCC{j!bWg2t*gkkpӪ{Ք$evJz*ζzVY Xogcq!L<$* %i]?4QKJGr/xYnpyB ț4?),jz~81\O㓗hɬt%kw0у<\lvZ:@\+l3ZocJ%PʑKRKY5jnkEהwtk ͂tȟyڒ9-sX4 k}VfQD@ukm#<龍A:w&:8ǟCХũDg@`wzy|,f&AUG0cw됳4Lr&KbjӯC"ht>E1nSϢe{m$gѰEt yw[zL!}wU\@ sh R "ŷuD~aD=*.Fu"Ipz<."ԟ)YU}vk&>vt1JSQGPGXLi,4a%Bb$]$AVT$ppd'Gb2#wBhQӚśfaP4k,q" --D"ĆH0-&xqe*Be,$9E?6/RL-xA2SF,DEEOcOc1*." m{6פokk {p7 s9;Z_bIb>gQHܲsev-7V-Ν?s6_MQAh@D(d`,Iq@A @@I4$bFyPrirօ$#4ݣZl&VYVK3+3ƴqǤ4X>fE :Vy 'hc>6;tIy r:LV3bPy [ --.y hPN#oGP7 --~bh*,P&aDe=ҢI4Mr5j8 LzρLJMH"_G.>J@KUtKG \y{Gل8ɡVV% --:ht7r7kigXn]vܮ5[Ťz㮓B`%V gOނX T8T(1)ɱR)7Wscɏi US k5?d7}(uH] x,?_.Qg}fD_-1ū>vuu؇?HbYvV7},C`W,۪>bVu؇OW\.W}CQb50Q?_.}C?b}؇d?X_.qg}+bp؇y?_.mg}LCb(#lx+׃ --?//} bWG?_.Nj}Cxb*?_.Nj}$gbG;?_.iI=T.ak Nj} x_.!s>WG --H]b+?^xNj}Lr/;>x~?^cO,,*ZUG --^(Vb*?^[Nj}xz/>V --@Yb4+?^h(Nj}0Jg<x-@cP>:Tx?^CF6QA >Tx)T?^K @S>T@ --`Tb*_#TW,,‹=~@/Ѩ6>,Uǧ --XUb*¿_WUNj}$ xi,/ᭂ">U --xW g4x-M^>?^@}$x /BS>HT G --;QA&b?*?^I}Dpx./a@>TpS]$- ؏L>b<}(؇}\(GNj}(NjNj}(GNj}()ǔNj}p)`G +K.ɿ_/}(P%x/#}lB>x>$>Nj}0 -- ,/4?^샤@ ~A<`Ъ5/-^MI_SeIL>51`M>e'L~5)&ߧ|n5ԏ&_Y&QL>52Fwe,5=3v>:Ba>)e!>&bA>ɇ!e>ɇe>e>e>ea>b>ɇ eA>ɇ e>e!>e>|kP&$_<&jT(&aM>P&XÚ|HQL>ԇ50B|nAC2T --e>CS}X*ɇ&T\aM>)(baM>)(haM>)(naM>)(tM>x)(}aM>`)P];S*ɇd&U(aM>P&Ú|TL>lӇ5B|kN2pN䃛 --e>4<}Xb*ɇ|&T(aM>XP& --Ú|RL>,ԇ5B|kH1QÎ --ea --;NaM>P&Ú|WL>ч5B|kZ2pH䃳 --e>d$}X*ɇL&xU(aM>تP&JÚ|UL>҇5B|kT2pK䃧 --e>L0}X<*QA| k!FeA>ɇ&JT&fÚ|QA|ȡkCe> ɇ"& TP&|hPA|pk@e>ɇ-&U(`aM>ԫP&Ú|xWL>ч5|:aM>L>pχ54=䃝 --C|Xp*(M>L>χ5p2@?C --|X[*(aM>TM> Ї5 2@ --}XF*(M> L>`Ї5У2A<Z29ñ --|X*(aM>쪠L>·5P40:䃬 --C|X*(M>L>·502;C --|X*@aM>PL>χ5ਂ2<â --|X*(6 --;*Hkaei>ɇ&VP&Ú|W|ؚkA_e!l>zɇ&UP&Ú|XWA|k\han>qɇ&UP&Ú|VA|kaZeq>ɇfɇ;1!jeAa>ɇ&V&&Ú|ZA|Șhgec>ɇ&fV&JÚ|YA|Xheee>ɇ&BV&nÚ|XA|haceh>ɇ&V;, --C|@+(aM>M>\ˇ5ෂ2- --|Xu+(aM>M>42.C --䃼|Xc+@aM>L>4е2/ --|XQ+@aFu<& --C --䃤|X+(aM>M>l4л2) --|X+@M>ĮL>ʇ52+C --ì|@+(aM>|L>ʇ54+C --䃰|X+(aM>4@ --:W!K>ɇ/&WP&Ú|_|(ha~eM>ɇ7&W&|8_A|k!|hN>ɇ>&WP&Ú|^|hzeP>ɇF&W&_ <+@5P&LÚ|x4" ?ɇ&RL>ȇ50hF>ɇ~(8aM>t|ؑkAC|@P&Ú|4p$C?%&L>@ɇ5PhaJ>ɇ~(VaM>A;;*@M>C|kC~|@_P&Ú|2 ?ɇ&L> ȇ5haA>ɇ&~(aM>|h|XAP&4Ú|4!?&jM>L_;x&*L>LJ5h!9>ɇG~(aM>$|xh!t|X&|2C?ɇ&L>xLJ5pe<>ɇ8~@M>C|PkaC{|@kP&Ú|0Q] <B --~M>d4e3>ɇ\~@M>C|kaCi|@P&PÚ|h4C+?&NM>4pe6>ɇP~@M>C|ЍkaCo|@P&Ú|4p:gaM>|xh!\|X&|2C7?ɇ&L>Ň5ph!0>ɇk~(aM>D|8h!b|X&|X2C1?ɇ&L>XƇW<+4PD?ɇ&&L> Ň5ha)>ɇ~(NaM>|hU|X&|2>?ɇ&L>Ň5Pha,>ɇz~(faM>|Hh^;>+؈hG|X7&B|2@CL?ɇ&bL>4hA%>ɇ~@-M>C|kL|@%P&lÚ|4G?&2M>4eA(>_;eA>ɇ~@M>l|ha@|XU&|2`S?ɇ&M>$4e!>ɇ~@M>$C|kaCE|@CP&0|4CO?_;{` _?ɇl&M>d4e>ɇ~@M>C|kaC9|@s&|2C[?ɇu&L>Ç5ph!>ɇ~@M>C|k!=|]];a.|@&pÚ|4 Cg?_&.M>4ph!>ɇ~(aM>D|8h!1|@P&Ú|X4 b?h&M>@Ç5Pha>ɇ~0_];A>~@aM>|ha(|@&@Ú|40 --Cm?S&dM>‡5h!>ɇ~(M>|`k!+|@P&d|04 h?ɇZ <7*@&Ú|4Cv?A&M>‡50h>ɇ~(M>@|@k"|@P&|P4q?ɇH&L>P4@h>ɇ~@M>;*(dM>| k!|@&|2z?ɇ6&M>4e>~@paM>|h|@P&Ú|4w?ɇ<&L>_;;&M>05h >ɇ@OM>$C|h|X&|4PÀ?,&M>`5ha >ɇ~@[M>C|kC|@&|x[];&hÚ|4pC?ɇ&BL>4hA>ɇ @=M>l|ha|@&Ú|40C?ɇ!&*L>5h! >ɇ@IM>@"aM>|(haC |@3P&P|4C?ɇ&ZM>4e>@.aM>|hC |@'&b|82@J;*X2?&M>L4Pha>ɇ"@M>C|hA|X?&2|4Ï?ɇ &~L>p4h>ɇ@M>|h!_;K+5ph!>ɇ+@M>\|h|@T&|4@C?ɇ&M>4h>ɇ(( --M>8|PkaC|@K&|X4;eA䃙?@f&aM>|40hØ?ɇ@c&M>C|4hC?ɇ@]&M>t|4haC?@Z;v0h?ɇ:(&M>|4`kC?ɇ7@&M>|x4h?6@&M>Ú|H4h!?ɇ4@;!??@&M>h|4kaC?ɇ=@&M>t|4ha?<@&M>|4k?ɇ:@&}u;á?ɇ@&M>|4ph!á?ɇ@P&M>|4@h?X&M>|4hC?ɇ@&U<]*H@& M> |4k?ɇF@&M>,|h4h?ɇF@&M>,|h2hA?E@&M>8|P$u;R*@&,M>|4 kaC?ɇI@&&M>|4PhaC?ɇI@&&M>|4PhaC?ɇI(& M> |4p;v&2M>|4h!?ɇL@&2M>|4h!?K@&,M>|4 h?K@&,M>|4 h --;q&xM>p|4h?X&~M>d|4hC?ɇ@&~M>d|4hC?ɇ@&~M>d|4hhu;&8M>|4h?N@&8M>|4h?N@&8M>|4h?N@&8M>|4hD<*d|4hC?ɇ@&~M>d|4h?@&xM>p|4h?@&xM>p|4h?ɇ+;*4`hA䃥?@&M>XÚ|4hC?ɇ@&~M>d|4hC?ɇ@&~M>d|4hC?ɇ;0hä?ɇ@&M>L|(40hä?ɇ@&L>X|4`hA䃥?@&M>X|4`hA䃥?@;hA?ɇF@&M>,|h4h?ɇF@P& M> |4h?H@& M> |4h?HX@;2?B@&M>P| 4@h?BX&M>D|84hC?ɇC@P&M>8|P4hA?E@& --;?@x&M>|4hÞ?ɇ(~&M>|4hA䃟?@~&M>Ú|4hC?ɇ@&Eu<o --?@l&M>Ú|H4h!Û?ɇ(r&M>|04 h䃜?@r&M>|4Pha?@x&M>z;*ɇ(`&M>|4h?ɇ@c&M>|2`hA䃙?@f&M>Ú|x4hC?ɇ(l&M>|;&M>(4k>ɇ(@M>D|8e|@T&|5Õ?ɇ&M>2h䃖?@Z&M>hÚ|4ha(;&8|5Ï?ɇ P&M>X4 h>!@M>Ú|h|(H& |@4?&aM>44h>'@ --M>8|`_];H&TM>4ka>ɇ@+L>|@h --|@0&P|5PÌ?ɇP&lM>4`hA>XM>|e|@<&8|S <*HÚ|h|(&|4?ɇ&6M>2hA>@:M>xÚ|h! |($&h| 4@?ɇ&NM>2hAL];*؂h|(&|4?ɇ*P& M>H4`hA -->XOM>$|xe|@ &|`5Ã?ɇ$P&$M>4 h>¿; ka>ɇ~@sL>|hC|@&C|p4{?5&aM>4h >~@dM>Ú|hC|(&|4~?$; r?G&aM>,4ha>~@M>@Ú|(haC!|(&|5Cv?ɇ?P&M>4h>~XyL>|hA|;+|@&R|x4 --l?S&daM>4Pha>~@M>Ú|haC'|(&4|5p Cp?ɇKP&M>P4@k!>ɇ~(;>~@M>8Ú|8e1|@&|5 f?_&4M>4ka>~@M>Ú|haC-|(&d|05 --Cj?ɇW0 <p --Z?ɇu&M>Ç2h>~XL>|h7|@y&C|4 _?ɇlP&M>X4 h>~XL> |hC3|@p;* --C|@I&C|`4S?ɇP&M>4 ka >ɇ~@L>`|hC?|(^&|5pCX?ɇ{P&M>4@k!>~@W;0&DM>4 ka&>~@0M>Ú|heJ|@.&NC|4@M?ɇ&nM>ć2h#>~XL>|hCE|(F&$|;+X]L>|ЊhU|@&C| 4@A?ɇP&M>84ka)>~@HM>@Ú|(eP|@&~C|4G?ɇP&DM>_;v&aM>Ƈ2@h0>j~XL>h|hA^|(&|5P9?&aM>Ň2h->v~XiL>|0hAX|(&|R <*|hCl|(&\|P5,?&`aM>Ƈ2`hA4>[~XL>|hCf|(&,|502?&aM>4Ƈ2hBu;X --|5?&aM>lLJ2h;>@~XL>|hs|(&C|4`$?ɇP&0M>4k7>O~@M>xÚ|w\%`poq3|>ϣk]huF`(`>]?h~>>`c;Cf时cj߱K;!1}>YgT^ hC* --f0L h(]2@ iQ}$åz|$Czti|p$èuFa@>!A=G~pi>!ɥ)A@OՇo=HM*k=l0M- f2 |8&ÙKS1ڬ3z3a@sv3z3@y.M --cC}&Fa* Q=|>$T%zXC}b>pcO=wa>Stu@ --@]U>P衻:T --`^CQ |*{?z/!@>a=RT --p`I |]+Tz,!@>Xa=X pZaZ |+l{z-@f  --[Q}`+Cqiz@.a@-MӃ+dӀ3z*@Y>T聫=|\ Vp --|-C\z+@}>= ZD XCWl@= 0b: QA@ --=t` `RCX --|/Kz)@;>!=p^N у+7>Yaz0e3}CPMme=%>Y!z;<}郌OXW|Ā~ GCh}5zΨ>R=4iI6 `IC8 |x4Ѓ(z@%a@>!==RgTr+T>lqpBZ|7 z!A@?v=`n% E|6Ѓz#a@f>\v=y>x]zȞR|`>s=>\zH"}*+4+ q[X-!$`IzH~(i?C?@I --AzH0C[=\q<@zCx=!u>^|໘у`w=끆<XvP --= -- --z0%+@F!WC?X^A?AI a}=$C -- -- zH+(-! `PQ;*\DF`i=C --z0 C>`d+@yVPЃ?̭¡[?lCIq =C -- --!z0 C/+@[!FWC<*j,``*XaUt?`ТW?EC`0= --A)z0,Q0+@aDV5у?`XY?DChW:/= × -->z5,{q*paT? `HT?,G@PaS= C --a6zV,j0*XaxU?`$XV?ڿ<i*D*D*DÙ*D*p*TLC?PPA?H@0E"=C --Cz8CG*pT?dku:0= --0=C --p/=C --.= -- .=Þ ---=á ---=C --@,=C --+=C -- +=ê --*=í --*= --@)=C --(= --PA --<jhpA --4rz&8=CnAL?M7̦Sp]? pQӃ?0pH?`@??@3Ӄ?p'Ӄ?ب@!?@Ӄ?,`< --`&! !!6R A=àC?< --P@=NC?:}zB?O4StC@ --4xz@;=H: Sp~HUa_{TXU`4UTNUgS~HUAX{TRU4UTNNC --C --MЩW?=t*i*C --eC --BiUx,2~q;+`U{{T!XU4UV|MZ!US~`Ut{TaXUp4UTNUAS=~HU!l{TXU4UTNJUAS[~HUd{TaXU4UT*_;҃ --*xU{TAa*KUU{T]WһK --T s@ˆ --^U.UQ --å --S*U{TM*u*UASL=\WLKUCp --XU 2  --F$* S<G*Q *=*OU{XTAX *|*)U!{TaMA --C --*ԪzTaFZ:JTUw{wD lܸ\T%P,$)4Ilxw?!||y2hiD3ߦLwjd4uf  @2jBB8Ӊ("!,3YoʺL#l-|/zDUօeA˰˪η7OTe]X]VEMwugy**j38ͻUQoYo|/z|/z;:㋳|oh6ΦYmJd0$I[k x1J&BR0 Â5>H(FFD2>ij8Pd4u]J-@F*:˻[| --8yCt /qk+ !;8+2 %ԑL}_;t(j\gdN4Uq҉jN1D#Y:5Er2ATř$E#Y:E}@4"%3TzǹhD0m|@!WWX@ qtri$HwƻZҲ;pi~%<~u ٰCxG's1HumIP|9tBinY@*Sy_ # :$  --3ixtӁ-{cи&XtI --0wCƔ2W1kTIZAV~սw>gVQ xrD~94g"U8 .fkX~. fxFWn$=ȝNԸ#>6u!q]GwJFHFڊРOyx(⹒)G*ފ^0,Y5$B,H$|&4;|jBN=d}WtW&wqV4˘Jww;~5oE#̈Ӌ$iD QD3|}pvq=w>w&; ۽I;>;MW,kh`$ ϾxO\PC lkqP"RǭYmWvAu[2'cw:mQ.%tթ!}G0&Jێv fwд1'ݝ_=kQʘ)$=(2y<-ǻ'OS^μ|o >:Nc]ķ~vi;Q}Owُ;MF6w- mDCsm]x:x2ۙ}8D:h]g;vsbE]v~41w.zp} ѠE] үųƋ>'y7/+ J5a#f;`25HQ_ݨ:muerHDzXƽYpqxGf%ORGEb ;벳lG"P C9gdK|5 YZ dO4$&oyG5[Ig[uhl*EOK wi('wДT -- x|,D\•.ź(vi_g.vvfhg;qxL循F)xV4ĊW1ރws Y4ȘXF@[<+BG6 --YIȶt m1$q'Iw#!ԟGYxVƻasz>et N?4h7%$Uɷ;4Y> "vp'qvGҳB˸tСӏEVAdb[u$K'QkaRŁ݉h Y#\7'+O鶪*$؄{@DU{ d䬩ʪ$腘U}ED o50I_ё帄mp dƯt$͉RDHuZ/0== --K+2cVg]a___m˙{+~> -˪5{P4U盷B@`P0b!@ٕDm6r\{-!z<%5(:a_ 阧AA[uokPЦʄAtz6AA+ՠeEb=mAAM=^galkPl[ l6A!SY{&ǡcC(^d#=$jPК{S)Iy|] --u,.Ķ`U!HlҼ FW:ukdhVPqM\_ #2lܩ --,g2]ɵ-0(x!dFAA{>Ȣ=0$z&3AA/Ft /Rl(9Lɥ`j --Z2 ΁A$p3Zs**E@EA ( d @@dDԀhu(ŒuYEΒg TP#"z8$3Vwsbp`az B=L1xHZsΞZZzPΦARϸ&`zNmwҕauϦi3T"I0 q/ ]i&`Q.o!]i{z׷!$wNUW컋]} utwLIjw9)ACvth`<6] ^jړZO:$=Ϫ;w n~l0xEexK --]QQ d>d$8R,w Z0Q-NNSb #<wŤyiت6^FCI\w>C%5zp҆2 %˰#Sq=]\UJ:o#}cjF%MR(=:,x9-3݅G:TvS td^wX}ɝ![,] wE;w=y]2RAǹ +az@J܅g`yF35v --ؔw --axcawn+t%_LK&Gj|ةW z Kb85PS:;6w_c]L[WÓ3pUiJo~`?7C>)A;ؑ]jk6t#3LWxGx#ʾc Y6W.xj85;Fw>2zz7*}'Gx?C>ȫo1]|<8ELxvϾmjg:",#(Ĩ0]J+>w5}g8Abwx&^]a+}|eH;QHzmgjq_US)-(8As7ݡ(d0 ,.'g:9 WĪ}R jlTxzj ͽȕEgI G --Kh@kN;.2p{HC]yp W#icQɤ3t Gp1hh ^ZB6dh" )ˈrl_yw13U^*GGGEf>8D)(`G^-*Y諈aCpgģM=sT --endstream endobj 24 0 obj <>stream --P --X$6Jg1"ozo&4 :D☸bk>&\CgH%AFGc1t`xl[Vi%hߙzTFgyLT]ͣq\-^0!h%g-zr |<Vs}BTlr P$VOk='\.H;g/ք+ -- F`@PG9B!C1 !se~$#j<#tzx8$%5N"wUk'#Iڊx 'ъ'̘An(Ak*2g:CؐBK^9dK0 A --ZyF --~- 3dөcOeǷp_ 5տM/dtdؐwBsv5xhwXP\X=TrH$tSPʆdރif0 9 YwH.w4pxNxUe$KB@ާ3; C$ Յ,w 0̘`Nx pwe$9% a]gL1Z憝!G]ɐ(*N52 n D2<ݭkd3}軎I4)30||gD7gVHyW k0xb& s> qaS (1վ yƑ9#IBbu];Rv[(3RigP5e_F.3"]#1 vM;;glZ11}&٦:n[w0z!fXf{dLjwpws'뻺'2aQw7rɌG;\<<:=%0 .'~'w162c<4/)`ǔMw e/x)P1< 'ݽM 8gf ^jf3-%{ f`h:WUmߙ+w׈RiH#vW%3xwϨO߁U)[pG525 amHf$hpu64߻_!2 P;o3栞cQP[ǧwGp)y3AxdO|6޽ Յ`{db=^S\4&r.m.8ݕ t`^Tf>!w˸CUR<م9`;e]Aq4Tk\O8; O{w::J{`wЦ}Uj>f!ތ}hSM;x5Fa.4< /9N̡v'*F(i6.x?pF/ O`bgLq3!wމ:RݸZz)wqWϑ~wBr!X!@ػ;CEAz-'j5 / #b.Qp@ڨm" D --@XGI Dc!@03C _y(H#:3(]%F 'H_ꋜʙVUtowНBz㻪`vcZ(XE;8MC%$ ]n #lM w R%@b8CYul鲌3Cd{<{H~+H]D;@jgʹz8k;ECTgfxS_d #iKxwfHL7j-8cwdglS(Cnf3V.pU(Z=&KVsYӜ|P_hf. fwlXUB!GN!0CbnĻ| PcH55}uxWN!̌b3C1@OU{x@)wdC{gf'^D>QtH 3){Yf Yb;-rxD0\(;=%agKJtηw#;ѴU'83n:x]b4|wj]twRTXD|Aa*m:`0RT+R̙[ :$n`vHsSnucegy\ZΠF3.ûJJ23a~G.aΐNJͺA2} 6+"j8]֔_VetJh8S<([;7[&醺#0g<. ~G<[9w σjSM„% OS$+8UZ --6 + q|Nr87ӬsJfY29{Kx<ϬEia~8nɺK):*C㿀2Mp%6M (HYUO5.0ÏpC --fyw-; K5p1\{3,leGdwlȃ~"+>f?|(|k x --ivT_ PIߵ_5zGf S]X*Ԫ8i}WtV3Twݵ=5U7󇤛r gRΰ`1^_Ogw}p~xH,Uj#kxr9\Z{Y4U׿vt7[OgL$ @_MÉ'fBS5 м0{"C3̠kwR+I`]K&$f쑪׿vR3I8C쌥ӝ1$I*dUZ]1ލ'Lu[bƔ2=?Ճ gX=sN ѭ]DBn ~;ht+w-x|۔vwM0T@ڻ?8#S*wq|V iF+A59fH=`l+,x>xF`.$+[2I#h*QA9RYc8"dIh=H"M&<̆S: ƨ {YR;PښhYI3b[EzB"SSqr!Q@A(!b!q";)1n3=pw!1#%zQzeENS}-+ӫR3UbG{@VQ=Ӻz;Mc<t;OC->x+HU^HC;M kܦ1 dޕ;Md5.Mrn' e --!DzҪ^ix4[x@wC"|w[3=Mn!0ޑ,5MC$񈭨mNY==i&1tۨHmf|mGY ƛ܌Z'6 pPfU[FV'~EdF;wsl$*6=^cl&u:^F*NSA :jdSCLޭy0H5*f[~!}3/ӍH>M`6I\^!#j_3̌6UOV멀mb8ygBC,3Td --.J)kPtηf#+|'ڮ --j.'r̐; fbhoXGw%3+xs(Lp/c^a>!gBSU!U4qP]wڶ:|ٰftXA;3K߃[{=u㻏x;åwkP XFnv#aFq% <('YK1nsnTJ0i5MOkr&]<Iªﲚ!1Majsu {#ûid)"ŬK%9 ((vCv!lԬHt)@CSٗ#pV/o |a»^4=5H9g6cT=1+la --1[A@|2UWB F@V߀ie1U? C}љ9Cn^F1S+.37#gjH{ǽutSu9|*"c\^{$j{wBYTnYߐ@Pj*<]@p3ʟjv86/p --ޞU sX]WKlZ)g{W5Vc@88#1 Vuw? WZ%fF;V( Y{HTLD}gȓl*Rx&03$3~a YPiq>djN`f$:fb˄3ڤj%5Ϫ6w4B $8e)i0`n _1QC$`=͌&>8þ"]ջ9)>ĄYնh- 5ջ"sב  Ĉ{}GxYAZBa`wk8#~Ej*XAEPRYߍH?YÖ",w*13d gH]@{c ]|HfeWu>FҵH4JϼB~? -- ݎNc^ͨHwݝY迆SC=I3.$99h}>Sb GΠMՂUǨz[[YGfI^&5~ N~y&b;bQIxՀwkvfH(k2ݽufw_!gR3\ --&bձtѻٌko)f@蝵МA9jD=d1T]RT.KQA28 bAUn\Pt ;lI5L iYNWF !,Xȧ e%a5MwlʅNW2$TF:w*yt'X$ڃjd빽cJ <\RCC@Q { a!E6»-:Cf|owһ]=tw^*aB ' --#+Iu]/$aB(b&$U@$!GkPп,j 6+DڃQ@gADjrA]2Q RDŞXMfh^{~,/vC9 T,RP$V --D6-CYLsݨnq0 qPQ 0d1@@q{]=Ҕת cZ= ]Zb7KT4G_kvnX4"廲Yb"S7wNӊ1w*@"SknzCST^` Ú)MD@},UӬfJFtw_@01"՟ /F] $5JO&#R Yz[4,5twijV|}JY5])K$Myhlfx@8#aQN5rfr5juQw$"#0"K+fEAcQ3_w͘I<;y;EB D^zsfsdm903#I!&Ab<⁙!{_4StzJŠf]BH0"ٽ:tJH]DmFT$UD]ʑw[@ľ4")%zϺB<5 --3wwf*jn(RjRê)mW˯"ߥ黓@qwGmq|!auv* --L"U\:`:,Lv `p u OլGN8zsլW&ԎHNkWP@hywPEB+PYçx*!J.^9d5#Z'~@U8" w5j%w9~#ZoջV[ {}djV1Ymiyכs,@VU=UG֌@Ä/1;4|aSXf\:Ҟ|W\bww#!ʊ#nLQ> T#Q+|vt#Ym.!gXw9HUՓ5#r]Y͘YU[bbk0zGDywL#,N=@E23&)3h˸3ϓTA V);"߼Cvh?eu+B"72 --;{Ǣ"r6'ub-e "o Qs\,dԒp&S$jؕ l$tz:7K,`Aģ_^yI$ah|_mG\D I#{܁EnA@-ipHʁ8A!F‚FSJ^Mk%[th/w4l>S ٝrX5WeEC;a>T-w'%Z$\DU%43]BQ>wq81ieXU{wP6c9Z]w$Uc1̲^ՌMv:w^*bz6`qCC_uLxj~슙GG3mldPQ9O`;6`_UѻI:ZJ&[5HZ^? f֑6^FXt:Jn~7hn#]1jUv6BHO6)"0)jvw7" kP:;b$5)o@/ON$y^EM BZ͈3w]I\dfjNnг05HXlTz .S^Vn1FB/TEbh 2HȤ-śisWSzQͅᦄ>KLR |hI58١$(wQ=H섣\х.Ps`zrpWZ1%UCPPx --VA i VvF3 8 --9(A`" |Pxվl*mhcVvw)R@A 3BCZだ)+X ȢG]dp|0N$6t$,/;^`0pJEfe ;;.U !k&#*mF"͈W;b8ڵE Rf$`B< "T6#g;^#вHqx.pDfDTy)L،UugDvV5e̠jyMFY' Rf^?D6b^I{)!hp/ --3b3˜pi(]mݝ^|zgj!:pflΊLkݦibs\U&g)6cHcPL$@EgS7OdgJG5@46E`K(BvfqLS !!툴1#(L "%K$l#"$Ew)R@eH[L6w)ҴW=NčZ X^WH)HCoҏHJa"10)߽DQD,P>ވ8 󡗦T>6J$Ip,*N'[Dz_"lFށW=ߎ,AFi̊K$G{7wfwvİ>HB{{T:';L8rY9=y͐E,-N0ϐvTL@pYqQQ!JP{U@8 BACBf,Z]Q'>URI$y_Rޔ}28u jFk"һ,5$R+rjvP3rYk6C~䰙=Zz2#w#J6yGyE a&݌5U?wbaSL5Cxq lR#3WJ!O6ή'􊋫h" 3~;Jg`Ȋ@ 4f^~SN%GV$*]u[N)({uQczG֮#Hm}: ).UAJhS{^h;%Jejj8J**`3$CUU:UOj$}^KeՀ* --2Zںj$A]u6&*w!։DPZzꬼUO{K(aUڞzrN +Y3uZ`:̉GSjԏ:DAfG3.u(^BPHrywdoX:lHG'Reh;L 4:{$1i8YZ[]5Pi\=3iwDVx!&w E`pZKXZDp)Xi~{ש*xH XQ?Јw0OWĻẸf c3$rVĻ"yDF˔x'wQDni6#ߥĻ1)YgBT*i@ --WHbH]{-ڒq ٗxLQYK]DjPE)$`b VEHiLbDC(Խx/,g>%0oRg;t݇4udET|haq.FRU --C&&1;.G%~F|EgXoȪ]"d^l{OJL73^H#UFz89gZWw'5d6CHYD9OrLE(}PiFyFՈD2!tMKuE=b$ T:9]p>3ljMť4c --C'51䪎VAfȍw땔ձsqO4d`5T4EhJq7ۓ𽈣dwlyğLF&p0B=3C7<;K6,/ --"2%(E+:9*D'$ !1C.5JJ%K;"B62EqGA3P -- b(B!N>WEu-]BWZnq!@:,NVXQND5^_V25K]][s2; X汼:'F9!+-tx0bǘVY쑿-9R --8 o"`v Ofn9n٬,G8i;Cel ZQ8dÆTq; ---]݅=^GD4rg;4" Q03H$PYL$:ތ9:9;74HFDށ~Dc7Q81#!`@#c_r+@1(KblH4CZwD$fʈsc3hgˆ (U --43s,T#"PdDZ)02:TopZdi+H]!Z:CA;Ze:,؇_@<`"watm3xdCx׊LqE$ Q@)e#<3UB;FȓXL)'7L+Tșvռ=}nn9Sd,$=z{f슐88 (6 P#w+2ȬJF8&f`O49Ga@K". --*WCa4aSzvX@C@+\7":N1D]Ҡn$>xԢv>@|bXAIir&.)Fփ;DEEe"!"m*'feo%tXA@"2&i;X-vU0^~;]<>0-T@ʊzaH@C9B!!B 'F "v2xNQ!M$-:6!Db)kH"h"T~ 0F̟H~7{dy#"QOlR^H5dɻ qVsa"V.[_qu-|D\uuy6Ȇsjwg),xh wѿ"JX5i:9+5Ú*VPoe.bjy&{GN,ݏRrwI >Bfl5ɚ@!w7Pሑ9 nݡ8 GN!f f@sl.DDIuq?zDx'(8މ: 4:'IL/H19)7D9, 6//I 16% -- 8I9O1?@x@ `( EY0  @| `˻ԭUӻԸUsj --/lsDO)!Ju!@bjQ%UWQT]5!j.k --v0Up{UoPmUW0~:JV͔wq+X6X*V:Y Wk: .#k]zGQw Wl --V7ᣌjjD*Df8?ENt~^\;!]uzZʻq`u[t߹jMNn1UvdR!qiUshTٌ㢫.2<1$ --{uȊgpO-.4Cw$F%(5$*6LHUͳ?ͨX:gJP&+cPg3qt(wQ꼚x~wƅ&GQ+kV+F#bta3F:Z93ĸ<h5$O^Vqyj_,H`HHN{c^/ yqFU3z~,gwޅ&P3~W䔙\эG+5E%7 eNjiw*bED2Du]. --UCs@<kQ\͘J'd+<AHgۦ5HL$UםNDp0gbc7^^g;Cj*x "^ --xJ,j"Tf' G<06PT 7=5Hmkvra_a>7q~O --=(Q(CD@HC̪ީDDbLaȠo yER.9yY%Rf0$H`L77HvRK(C{ytU/"uHsj.H: --N+Jw3{*һFd\cDfff%ElzԌϧ'F˜ z$wn3VQ=ɠwsNw1,]IW(H|]B[G0GA vAӚJZ7 --X㮛uqJIzp4(/^IfGl --yipտ.LccL` r%'HX*9ҿdC2ߓwfI O&ʥ%\;n)0E_>k*IL^t"onw8L~O )]to$FGy ח9 w =)︥ 0ez3.g{@!ud_rQT)4K^ȢwoX3==,-uXXh%ZIl\.ii` ӒL'pm%gZ --w;T:SL'^DW&lJŏT &6Xaey߉hUN;Y&zGg MD~cg+x8Ul3IqP3cw6`{P*ghH6 "Ebtȿ#o)_ 1D6\*.F 6^Ѡ-wGdžTA+ =O$P (Gdm3$s&vUSWp9d*R 4@9T{e'8` `q*zZ;-Q+&ӓz^.q01a 9 P(,bF!0@AqHE8P)c<1e3OZS^njqnxsSá%R9]RQY5UҪf4uR|c&Im߱L ,"|z+NĬ~1> +^Y皊.1DF[aj?STFŢHR=Lj*-:X;Tw͸k --NO{8MyH>jrwd##|-/ջxA|­w_l*;o ͧw8pWbHkBPVCv{$%ӈۇ,%3S>@}WYV&^ޅmVN"fE"@;Q|gsD%2EBE/FXdklGh0Ѵ_>03miwiMq/%C$l>b$DJSuDCefQvb߭V( WNtVa 8ݢԦ(#CwxB4,7mwt35mΑF!2rfv@ IW4E;i wJ((^IHw aʻU5 )`ߕ;O$kopFv41DU)ZN8lx !U(d zHTC&KrU11RMNkU$wJQ "@U =$BWNG) wDGHVtw7^97xLErwⓒH; *${]1 2 --'AӅU(SW$o!-54*3 $b3RYHUZ3Z4 Π !8&6N4̢J:I =ҚjR[x#@#dG]5ZVm3@+UUx* tUwXeǑW --^kHHR s2VdE$&z⨱rQFbLPZ r0@@ADAYPsݦj:J Xs --Wv;i[3? Tb@{vrF=1U;D߁w:f]B"t f]b#e5d|7:[q)Ի|UŤ@YnwXr]%zk3]}4U T3+Rqv8zV#!6"r!T \ѥKKy[Yu?MQՖ2Vw뚡 ٮP[.N{*ICJJtw<9 TU!|GjNQ%|A@be"uנ<6vDHCCE+jEr^n#1\6cBon"YQaݒл A.>KVfݭLKa$g&*R[CKੱPǑh-83"d@vB02 V˜UG:`H:@gǠ+F:ӹ1@"!H[w2M~d̵4@(٘Z@!mE+`-eհi-@-ͨa!!0I("@|xObQjB$/V7cZifm3|fE-A$xY970l7CL(nB:AUSD OI$Vٳ xp1 ̞'." `5X-laZQfbTiZ׌pD$K LaLzdPZzc թdeI^f3we --ehU8%]p@* UB{ crdF*Խ xW{Eb#0gMJ9þ |gpT 1 ҽm`uCx8f̨NͨZ_V6FbPV[3%ٙ0s N>kF /4A.MH )VwHRʇH=ԅT/S\;6&>{sߌY ^\](ݬKU)f@b){}f]ZeDxP#dɃg;Q`ݜlca5C<# 沧 xfYB3d)5#Ǜqy < m5HHw\V(fx䌹$x$pA$5kFMG#pM |y;' 5t --rF,6Rwf`s FS4|=v͠ی^BV5¼;E5I[fC^3-]L[ --n=Dzw &(]݇TUN;~}0CJ&ipwJuO%L5#1'm;"AywPDV =rYu1ϜC4^aM.&YwwK B3K[fqa1AX[jamBl ڵQHVrFjWmjY ;5c#o93C\w<$A]D.W݀[@~gS+ *OJb -- 0PIX Z %(u:Lŀ=(NE)0C*VD]N_8-PRjɬW.~:i%(G c% --Vcb:k0-imlI D,XMgv85e@9fJlkb1ILg݂B  ( XePiR%|[$.gV+<~̪&^0UyrϬֳw>nf 嬖|jZ8DBԯgI}2C&Ϙ)ڡ]!@!wZ$i01ڰ:m޵6spd'"*̯&ƪj!C+C\RyGnQ |w.zg:,4Vpx$pr%' 1-ӃZtK@Yݙ8Y~g qUaS.?wkF};Nn[f54C{;e_.΀ʬ7MR@;Uwppfu{Ӕ --wqV2Ӆ-xӴ6*7*?؇y`b`(L%o#6=yPk+CkEx0)C}0C%!~ I!fkUs5:aV־B(TfD;sα`ɖL̔ڌ9m$Uӏ&]qY=,CiVػHC;!V +pwxhݞ2 -!iwx̽Cf| w. ۻ HHPnQL {7B,ULM0Sf 0L;'j|'"KvvTmu {wT%Ň򺼻#nlYqw1"I.8!iLU [ːɇߠ$`u,RPE$<2ŝczK8Cs'繧.8_x"9 X .S --f`EZGPxw87 nڻ+"]Ԍe0G`XxwD$ݬ,R7YDbݽfg"b57u"6iNG4VBͳTq̽fE;(N V/M[s,"e|nA M g#j$  m!`tqnqii΃r<iLS!μLgRYW{WFЕ<zԧ_*)z_<;3ν`_ZN>]4wժ X_w+RI]K!@D9ԻilY}HsLܝĬ8߯@{GBt^#M011݀""՘Ӟ"¬o; --%aO;w|AoZe"=~Hdek!񿦀4r{Ǽ`yZ˔G~PTL1Nf`ȇD>63]S@cgķf;@dC%9]MlC:v3%C@Y5ER+Qn|H"e;EJS8cxuK@nb]oE"{}Z3w:gYh xg 'GY |ȟ#wfH YM;GՕ^vg23D4rZwUw/`3B)qͦ)S.=K$u.dF-0][7UAJt'7/Ld T! KIrAH]kknUti@PIN"XGs#*T,"CE:+}`$PvT@.y%VT --)e`Ikl݁r0i6H%9( c =^ӽ aOݝ]̳3tI --jLr:=q_kH/T7b\ASPZ-8!lfCrgwXw03̔;juޡ]89zIWv;LyRSW;XvȬN1fw2qB$ 7ErMMo^"H9dtwT9]镄\\;C}e0Dt Ō}w'wP;k9mkGo}㧎j . T pTBO{2#眪]ꖜA{p5Wzc|!` _fҙQUxR~Q5T3Z --!=PC -- T;C3/v.)yz(Yv+݁ --ۿ[N>wYgxjMCTILmUyH/Rz;O;$Ҹ'UΌ]9֟⯀"Yߡ!O4 {1 }2=8کEAozv2uvl;m 41poFM!q!!'3}Êq}ϓo)yyD= ƌڙQo<±Z޽ƽkQ(!w/URӗ XhAl}7b7#_$(=]i18%US}>48`:Mwq{ 4_CxIyyHP7NE@yc;}v L3H`mm KߕN0C>{L+F%<<0W2wqm}G{N(HU(bff])1\Mwޝrwi]o: '/HQG;nf)` "eJҧC1ٝ!F"\? UVvw!C*3k --}9k!"ڧ4[o#2ݰyHXM$a8$|~E+B̰afNrgsp"@sg[>¤jݕbQ ߽juUjgeT}Xvw'; --g}Wxl8x2Sfw13$zP&ĬEªV7#gH\wDHDd6JU3h1V<ZCj2M 6-!;x|( d;K%:1MZ]dQ̯!3L *7]*ߡ ަErVw< CZ\ّTCBCA3 --<$Ayc([d4MM=P_X0i'?Kibe^D 0`ͮ0G$[`P@T j6ͯQk1`phWHc|(d0 l':";RS vX)&e.axHΔ 䔚OcjO(m8?wOqB xwcim Pg/|;ՠ]Eh`05}D&Wpӝy ]Xw#R=Kxj z1]!e杚A;#!Hwg0~ sj 3%x@&Nj#[-J. C2VFwY3|k_u\ShF-2b3jyS.D+%xW\w+youax T;+)AΪg2W] --*E W*MV>yyXǺsjkǴ{gJL:$GYӏgӚr|e]БCy.ɎFvW~.O3Œth!ܜCI3ˌKLDgwSӻ%3R9UgV,QwAhU 4Vyޑ ^I.W Vx_R`{dTۓj17wb<#mdB? }@[*#"~dy7(p`m%.~o6Q{_+2y/?!hy:y !XQ R -- @UTvٽI"QSư` *;%@&*,h*4jBrfh6b&:xBDV6ct߹tEQ8Bȹ82[Uj٢^ s?7#uX$I Y j --cz gP΁ Q1 U.ޅa˝\ee;_@|e6HQ o:уFb~Fփx.ި --!20ޑe\:8E~?rN, a;Xl\`aʮ8L|> -ݙ2殙x@ɟ^gv$oWk8t-qwslS+9qWRvpKCcTH(-×n --Cd e:{!x=R0Hx=6%wa;BeD?Qh*_ --]*5,m --vOQԝW>wHHq/wsSX֟O he`x  oݭ8MO)-%h$!7L]\zbݥ"3w:Xxs:Bjn$T x!*,N}1ά)w.~*-њGq˫4)KO>b{54_.C5eQwXǵ$ަW}s|};s [_ex!ftBrGtaG==sw~'@{t2bvMO}W;=;CȒi0uÌD[FsWf/9kVcfM.Ox7?c Bquf)OBvKw 4]/2b!;{w:j~Ϙ),z; >;hajQ볉`a g b&~gӕHe]BٽBfF*FRTsDwi.C(won-bL,3~GJMiP/w5eb/cy\3 --gƑZڴW:ݤUas$ 8G{i)ɽJv&aН PM?Cn O|[ K --.G. hwWs/yg]QGAr$y$WWtFRNCr `);;|(-kDg 3ٔ]_wvT@u(w4]fpDN.2]NS(wQ)ëAO]z>;ۮw @z0Rw3 #YwYIx^g26Pg$ZUA0iĖQ]R^Hiwա;Z:sS#ǫ|ߑ=MݻmS$7xػ:^ $%2NnyGչ3-v: .0W#Z!CVW w_.CGuBr^'{[gf^~> QǗIEtC-oFuwúKEg}P%c歊 lMzuٮt.f {REp3,Igw;%Qw8g֯|exF@ {Hwd+ ;MwKK>Q31& \Xԥ0C7 ۘʂ=3@ ޫV2+ވ+z#Fͱzd̉;6.@kdO!,\28nݝS5% n f@@HOdT.gC1\) $Ϻv*fSe?͢$)uuhM[_Z爴vGPC٬'5$!mAz d,6pbZX>0)uSI;9(d;%lta!lhô7: i8v ֶH bI#QoNaDyR* & %yu YPtH|yLQn0蜽4ys&)3@֛w#iR%4Q5 \XvYRe eQ:w --€58Yw/Hhy7~߼m\}`(~[o޽BQM\sDEը:W#@! --@ Ǻ@D2B @NpVӪi(?ۡ?3y?Y* --zy,@x^$;]hK֔֒(=&Qc71=ϸU/0F[I w\ 3;MbMl^czz:gyD"yHxEwmxވA&o}*x#o-bH &&%l2MܞkygwkWgI#JV.9^Jۥܥ]]ek%.c8'{yC0͛*$snga VQk/N$uN.c]npל$xݼU pS2/Zy2XXyO@x:C2XӨ7@s4$ 7%tWI: Nd1"vCuү_*}^<5S^Cxa#A&^Lxug[54<Y‹ˇw e9 W3ҫrfĝ lg+Xo=C/=m<9:h~v;?0c=' 5<X --0{xB:t_泌C~+ݩ.vUݯ1v35Γ]@Z W@hOa^4S483<)Iቚw~ x0wە5=ey"^zÓ;ʺBBʯ --zDy-kAsq^4$X?rx I:{ wxTХ`|eܷSX| 7; ]F,sIl\Oy鄥I6j"ޣpZv Ah S审?u*MݿAN@:.R&bێ0;m?^u(LW,N2< #y+ <ޢqxԸ!%QRqc2 kU3TDF!rh xC+<oh`\xG#<Ғ|wrRoEHv"ţeyik7!xjw!«൐@e- --~ Cegk]yguhN7DC8?MRh|^6h,H }rWo9[e;Z+eCu/wBzj^2 v7qgmQ4҆ M43T3jY&Yc[r7;{-N^ز-Ni9exj~rаKxvu O]d --@ @`@PDHcfc`` dwPAbQe@Zp8~&E89 _!_!!kT5E_E7K: M~! YIU?|81ZLdX|vh'Kqȁz.)Uvy^-gN_N>8NiLIɂm0VIYe9&c lc'* EeA۰#dRTjL,2R%ge;J'SI]ċdۀD$$U! --Q-TB8[&느 --(g2ԒRgkAv\7)ɂ*UM4A.L5`͒L(I8%V --(@#})7;{QU%fX^zNJMRsHtn/Jλ8Hko*|H))u|燎5hCOR?c(?!}%udoSf-S {7[ayl$ˬ9|R!-ѨQ-Q`* @0(K`c H0@B9s6%GL[e+J2Az Y#ٚd3˰q`@ _9nWS`xٸD|~"G2<3V8lЋ}l7ikIA(!ȰMXú(BJFs'(U@#_$Yb`_sohDP` *O8^ --245(?p,h4<_ӈ" @rRP`Pd2)K4O %1[]X#(H ڋ_dt6Vӥ gPWG`ЇCLA2. X~#O#p7qvI>IkF V哠H-fO!KKqC6ܻF(컠v(rK*]H+H%=3J |`MʨT0̻h"Kzp,-3@ؼD @+@M?艂*AoTAOTT@ Tu@5 T!@T]&u9TA=Pz/="soS{o ?|obyu{U}+aUPiu/d?gݿw/R?y9ݟ#x_ѯ=@Dg[y̿d?PW_r?ʽ-ksOs}:2܏3tѽK9ݓ/u/}4P*gߞ{3'o>z~?_6a'P l}S7smO=?ۃ3nO=?nOo}DP !ϩ=!|Tj_W{3w> -->Hɵ= |~Ola{ P@كg"~ =}>|h_H{oNK>>ٴ_*|?EQDPLI#f1{'0>kwe=Z|+go:G~'{2Oϣl,P~+U~-~QG~u$~o3~"?P(7ʾ;>S_}q|ye?.{/]T.أ V/RKb//៟:PS"?Q9{_ȯZ'EUȯ~ Jz>~y05~Au?~D~G~J5~Mu?~P~SU_~V~Yզ~\~_U_z`zcգs҅BVUU5_~@ $D !H" ! `AQG-G{Xh z]h;`hPjcM@i)/+ci͜Y3i̦Mn3ZiH(RHs,ijkRjü%k|{{*VOÆUUUUUUUUUUUUUlX- --DzCC>#A;Gl(Cf P~ <0'CH'{B lQcQe Ā$P{=EM%Э-HmҲ%+W(URb<ۅCM/XXߌ4qʆ\6rc`56`i v x9rPr̡˧Û˹(~`?ah}!/1zyh!E,"]^)qoUUUUUUUUUUUXXX+k>D!)Wf S'Dy?'[U;xR-9(oKK Z -W0VE0*]pUui## --ơ.?ƻ<'/3r`^c8{iXXZj>w[uCj Z< fo1Wl0a`XO:vq yC*##,UUUUUUUUUUUXX#W5.  ߗ  S1ȀAUB< vT%4µ@J, TW…ST$ܪJPjx%V(KP --qW!eC쳸BXZX_AyEp%J wOH_A1$9wLp4pvO"j7#42`=[Qh57 )hNp2A-M ^]KJrdcUUUUUUUUUUUVX -->q#/K&|>aK_5kWM@m~nmֳ/6;g]~紟j?_;CaOn)`m'\ZUUUUUUUUUUU [X -->j.z&+LZj_IY4uT%jOTƃQ/x< ]$^Rwv,ſL՚܏({n }d["K}lѯdcjVX@|uhwW&.1*Fqoqtkǜ]|oT޺1[/O;f媣ͻ87kVAW͔HщrҺ`{FC됮hlu : UUUUUUUUUUUZX -->qONB̐o<`J}4ˡLI;?r c@n70>Oqs/cEӏc"q\QqX^ulxtKN]\9%GXXU5LE&&i<6?L隣5hv6OfwuD0zwAeSzo --B%|8;!;;!оh!ch7icUUUUUUUUUUUXXX+k>2 Zм1|-M~fihffׇi`Rlc4+~@et4Z\.6?LhZcz*?qEa\ #bM 'ӊZXXZj>iD5qOKTQ;D8SL? --'[RXz,ܤV:ArS м6c55TVVh㧇t**kz4 --Gs{l?*=@ǣVSY:TUUUUUUUUUUUXXVj>،XAKsJpY`uĘ1K --n8Ƙ_`FbZ&kt<eqG1\^:U7ѕX[ӭ:КXIĒb\EڡL)JeaUUUUUUUUUUUYXX+,Dû-lL.] C5o --#._?gиwt|Nkg\lMjb;qEf+s\f_,}^/2lI.a/nϔpG6|WG'H;k;{Sݵ )ٽm "UUUUUUUUUUU [X+|@ůTK{ \^tg5nw-zF\k9֢g]lCcek14҈CW_-jKq͚ke]UfHBmVӈkz ZE6]d5'!2lgX0 :HgAV. R//ZaVzU >^`Hp + ^"XAp`JhW|R/" .z:UUUUUUUUUUUYXXIN>!(%#|'GO-ė$STikz!5"Lq-$ST|lhn`GwKp@8LuHFPi%Vd6.b 0U25` YKU`*szԤKD|XXZ:SLhiiZX6 цQѠy8J` *5õ´f^k3,>&qS樖ic0͗, q v9*g,F-Lcв)тiS:S*Z s%SUUUUUUUUUUUUXXZ:k7@F*GFqo6njV &PϊѸ8ʬ0-qC Զ´lFk6+&hrhmku-j -- ڬ *^a5D{F+FfN(iHUUUUUUUUUUUYXV|, ::)ZeShPr>T.P --Pֱ,U8 --U$cY)Rq:,KAy*AGDzT"(tX8T^e'NQ尬oMPaYV98因B --sUUUUUUUUUUWXX:=;:(A'c'{.VwtJR~rNWNII3ܱӕz:v)b]G0Lu%ľl --XѩMz< A)@qc'6ZXTX|}Wɠ@|垝:Ӂ=5o(H_ݓf Uzv>Q &N| }EOMWyFt?4(@GƳh}$VQCz?5'vJ\fN l)!p];Sb'u}jPdOA@=;;(* <UUUUUUUUUUUUUUUxX/Ӭ".6'kVTPM5K* &ɚU%Bd* --jqfqI8Y@\"CtRA 4N!:H'wTPM;{N*&ɚ=D'Bd --jwfI5;3褂Z?3UUUUUUUUUUUUUU sX  _M##JB^Mhޣ Bՠ5&\ёTfZ5HH(S1(ͬIn$өd0ҒT Zku45Qܚ)F_b uhvM #/A^Mh,Bՠ/&hїTfr;HK(S(͸IV%ө $sUUUUUUUUUUUUUUwX/Ld^D^B%C/L^P@![&/QTΐ-(N*PO{%'Dsˤ= -- --eRI 2yhnԼGARzB4Ljޣ @=![&5QTE(H*POI{$'rѤ= -- --rhRI||$cjvX/Ld _$%j /RwuܗpyPu5U Y+Pɚ*TsdMH -- znk\7YµujZA5wMp@ݠ&_@VnP]/m Y+P7ɗ6TsKH -- hj\4YSbu$ h @8@\Pzy>(3;hQW6mqra${U-\69(z 6*T)]C&Ѕ"]EnqӪZ~Ai׳Lt4XX[ iWTthZ,DuTO3h)sn73#V8Qi:O&CDd'|AcOwiѽ"XĉꨅO3h).71X$8Q p˄@Ç"NTM-jA~t "YĉZh_&4n;qjjAT mˇM@N"NTM5ՂF]1v3؀%0UOA(^\ --00O u*8+3& --9b7YA&Qvڶln"V547 ;`_ӗtlP :t`B.N/鸉BGbtqC/NnP`Zd8 IxNA}֒7EHn6 --j?HmS诤f蔁YpQq*BOYj34|"ZqSw 辀"_aS_1B{VA-pAי,ɴ<"]^UP~u&n6M+* --QA`;asy¾KIo:+=P zqn[5ɈBGة^OJCQ3)P6'Y:wyh0W(丽KIi4=JY zqR֑[^&S"6i/<߬$ ani EzdlϚQC#lV5=~t!FtYf(tUM%K]"+=D9 Z,x,m\ --)ONMg,6Aj --]m*n^Lg{桘[gRff>eΦ)ҮS1t ADpo c(܅9 3}g@q;P(,| H{ը"أڏtE=H.<^"uT[,;s3ACGT#]ƠM!"lКo+AAGFڌC[!үE|7V`i(5梀kAaGGF4 --D-(s\8*fށdW={ Ji --V@ߕOjCBGRBC)tZZR| 0c)C̅qA;W%bo2]R9ȍ"J'ds>*hs --"wwG Elh*ʝmК[pA.TZEyPtUc)ꢤ,P)ĝ"WPF/6e EypGlQюLšL+Yp.:7)~f PYIE{Cp4ܞIO52l9qdO5"".b#r,Z?t;fk͉3Ԥ֠612 Oƴw葑߿6_t Yb"ڔ"2S5OQBe^keKE6jfEb]XH)idǸ_<""/$*Tsc/Z"F$:4A D7 qf,r4ÓygKO 1Uch9 jf8/Ο ]`!3/[A `~bFLs1'uϥS ͠\OnapG1f>1ɓ#!ۨG#& UOqnUK=XigO82?  1\%}^ --kՃ=?&U䙩Iņ'w*qUi̴vfjRmݫNVA.3MU+jQ1i0]Y5jWm/vJIı~@Ԥj4)XUEܹԀ/{&xN).]U!^@4Qm.Hz^$ӉYP *eNilO'f1%NT ˩# ˞ߵčL;y*l.p㻟v,}/5 --g" --#)MA&VꜤ3SD> ӉIMwx9V:H1c=YcCsj/Y#`1'}6q_Z8,p? Z`\T>K׭1ZǦzԲup6FrU/CZRRrr].{([eJZQ^KV}1S"aF/W}%`Q>w:\5PK|׭ n ---[ tOWK~n tI3U uJYdt:ntj,j̨$ z\;(nTMTM-U%v TBN փtUSKU iJՉwn if9U2C`Rxr0].{([zf:(O taKgg V --h1A<1.T-$,WU3df'8_~ --@c)E:i6lȡb(LV;9Mt]DN*&T' ln`IDٰ*%IhB<ۛڥ;vQrD1bijCY?ʴrK|:1%&VlDL)go{w/NLj( Yn` dP1NMkZ9 X2$&L)߻/Y$:`cK5xn%N0߻,h0YŲNe01Mk|}9bfVd 9ԗ.J2jgOW̸V_Z0+l(s~ -WR}ݴ&4':`CuKꕻdZt Z`%-2p:.qP')m/s7'v5 ܻGԣ:dxzĥYp:a`ET;N\jt5.*)FqIȀD3{ƥ(,rKpb86%I&D4$\;ԣdrzܽYvRI}TYNҫ pbnpWRU[*QT`Bj.aJQ\Re27=H'M,q --KL|6wbWL%U&HrSUtl.]ڍJj]dblCSMڽٻqbԗV/iMOeu o*’j$<  c)C%61+jznrY& )8ScEն,]mN(%-LVlҭmVSz --To,PUJwkm8,2Ѭꍅ*an |:ZdjmaS-ZK" M|cFdX½;[q`fUu,hPiKtemX,lzU>clE&U#@%?,͖al9TR-ZLҨ+i!Ӻ \ ;"@T{w[ͪY2gp6KKXfsbuH@wqw$ ƞ,\asY< --W5~mjsGU]{! &TKD ѦrĊ^+_5Xep3E'J^YȂUIY\ٻEVbY8"05J׼J 0@fNpJM~+5/ NTbٻEV\S8"‰'5ݭ K׹@fN"IyG+5/$ UT hڻΥVV@S8"!5۝@sNƈ\,{d1ox!1Q --t/p*0b w,]"+( )g? qƞ.t fvy Av;+RgjֻՃ81n2[0 XSҍ0ďqت! nj@\7ZP/SFT͸@s1Zp)_27hfY5çBrpO²N+U3L**'*tuz5ndaSOTaøkx&.KPVʺ;72d"U?ܓ_TcrttxmPaQȭׯ13V+z׍P㇪^p뵽nLUČ??Tz_{} /TExSh~l Pd(A wX @Pq|Er24/\4tbZװʌ66(SbւָUU5ד#ֈz --%3[pX7y?ZRCEgݝ{pVFw* `ᘾR1ݭF -- TfA :Ie3:e%ڔ$źc$[ $jݖTN`[2*FGYY6XL2땩JWSV֫V ղzZ*Rx*&һ8*f5T$<ݝkآ:!/?LKVm5XP#@Gp}hW WEH \4 fzYCC]ZY!\ӇWE;LrpUU.αHZP"=/BA*V9,g qb Cy --WALD[ BGEUĢ eݿ!B/ǰUιR7y8+;}՜vA}5$^YnjTm H' մhΑ/Z l& BtA1V _8QM!W.l0P,0[P>|±ѯXVeCЕ P(8@?@ šu]?^L94( UN%;4E_thPU./||8d_+N#ӝ>DӇ9R Ӛ,VE@7%p1„R7uEU --K,-%^0=է'`4N6@!8J,3Yz~54W9b&H[2^b2Pձt'ܹN7Z "]f" , RՓbrHfեBc:VBz0[/YPEIH KLCYŪ\xGH ~ èP 8@ `hb+ǡr-򥒇?0c -- UFI`K(/oV!y"␓)ކoVy/b = yyѐ4OV3zıo ҍ$+D@vdu'4@80GNV{j{b. XB K8OV1ޔ&{XMy0Ѵ\ +G| !m7# չ6G(.=6+lQ&mU}xJ0Uw$Uj߈xM3(t(xخ'"5 1M-HuiIǜT"\`>dl#4Ԟsd=z@G| y}; --Ѹ;P)f%%v"lĢO$KG7{ [LH,JJ@'&)zh$lzXWtٻR5 --wytPq1ZpIP=Z9>yt$R{>'=cp-U|V P,$`24K#-U;)d!IRF#lSof4u}'Y <[mvnZ:4X$Z3 ՛}(XLH kPi;]U5J}ݻbب| 0PALcd z ^|Fn)BV_}"(.Hmgh_Uފ QJ<HHvjU K2H --T& z_\ŃR@Q#cF (YP%c!UpT3)h,!ّl3V4@;6dz] --8n?̾$eF뺵X'{"* ]ZDO~F4x5Ѧ,,X٠ysy4 RP/+,i`]X禙Y㻿&ey^12ǶعD-#̚H0'5[^C6=9-3OwjЍ]lE\F(}dkOcqi`3/;ѪcZѪ93z:דy{F52Y96x{jAX[]{ݻ^Ɩf52Heq?< 0A .pns --ZMBn&ܦ6ԎlǿqsƩWhI..8/=g8^%hp>N{Nr3N*K6 vᬼ6\hzUTP%3o --gseX2HKf+y![s}jVAUTk2|ܼP?|Y0_ +t<3SX?9)=Qi>H feB|R#{Qix2kfy\DɢJ.>z,3EVKEG]*W --*U1ئ+O e'ZMUUrq OIjOU.*:Idh5Tr%^~^'j sMNp{O ~79!8U-'8x6 qVS98[L'8qosMYL7#W?| 0_{u7Mhi O$1'8)d&g --٦Kd\zpL%qc`3-^f2;y1 mDf 'T +PmIj=893ydYzp2Nea]&ՃJVSdH 3Yd'TS I^89Y2u+m=Nf8P0p-jLv\S DKގS^W}>?ueզq|gt/\,4N --` @?< 0?@Nd0 BAk.NBOХ衐'C{&{1*ilPg^Yҳh5dI`$ }srG(oHvRnFCߜ gH6m fCۘT!T7 $T9FCaX0 --зfYJɞ*&2ѷfYʙɛ*&[3,E%dhL|-dBere4 "Lc L2(*'ӘI)OF?JyY-#tƤRg? 0dcz\ȽD^R --ר{r(Y67j.p܊BFW8j[7=7=X}zy/ `"ĮKC %?O4*BR? cl48 v-5R еQm  --)G6d&dt%u? .q@9.GEIuմXCkF֮z~]uS*U*cRû*ӌa5,a H --&Aٚ?#J --`0[`( 0n@ --az%$"fH#7E*Ѣ) 렎s4Ez౔6ȟH8 * ź$J0yi !P\i cO00z|*E-y^&6ŵhx0;<# kUL< Ũ#L1hgƚv.Y{p _,i*UڡTpՇ Xa}B/gA6m#Z;h k/5k-g٢XEH?[ꭕ; --lm1V jA8,8h+\ I gg<:fN?\dN>+TDK]"]tfkGOFWmP粘M4SG~\LJ (W1Ԛ@fT+XY vaVh=Z!v>7P`2mLEluQWЩeZAMzn?K+OD"{C[k׫kɲ>Ua QPe8_҂s5Jk?Þkl 9֮:Z1Zި_%ST=oG!z(uޜf<@TYO5Cw|Ra[nXw;wRLT561:p}_=J+,kRI$B 76T?:*=T --^p)=` --a(=T --^P(=` --a'=T --^0'=` --a&=T --!Lz*)@TI? Q?HXpH^Z --<TTTTTT{TuUq Ul,UhDUcPU_hUYUTUV<8 --FP/ --vza:=TJ?dNU SC?)xP* *P*P$*xC**P6*+|:-z!zz%CP9!jaB=TCC?aA=TCH! --P)P6A@A?OU PC; CwB B B {`!zX~p!z~p!zP$>G=XȣÏ\ȣ,QQ.QB y|P]d<* yԃy|@ yu| yo|x yCk| yf| yԃa|@ y]| yԃX|` yT| yԃO| yK| yԃF|쁅WD:ni><f>AP12Wp@/hW z+lG=ˇ6ȣ^ --Q0Q0Qg0QR.Q=!0Q%!0Q.Q_WL:'!zȮU --6!zȫ5*x zp*0G=^ȣx郼 -- --QAD QbI Q8NQSQ!XQ\Q`QdQihĿD lElq 4C"!"#3C NffH1f --) --bCrP.եR@i;p"2`9.KR(rL8;17  /c\^Ѽ LUg4Nr]Bj] ˆ4̋f\윊pYS*T.MDxx#R4%*vC#cM  !!!!"""""#""""!!!!  !!""#$$%%&''(())**+++,,,---.../....---,,,++**)))(''&&%%$##"!!    !&'())*+,-../00122344566778899::;;<<<===>===<<<;;;::9988776554432110/..-,++*)('&&%$#"  !"/0123456789:;<=>>?@ABBCDEEFGGHIIJJKKLLLMMNNNONNNMMMLLKKJJIIHHGFFEDDCBAA@ --endstream endobj 25 0 obj <>stream --?>=<;:99876543210/-, -- --  *+,-/01345689:;=>?@ACDEFGHIJKLMNOPQRSTUUVWXXYZZ[\\]]^^__```aaaaba``__^^]]\\[[ZYYXWWVUTSRQQPONMLKJIGFEDCBA98764321/.-()*,-/0235679:<=?@BCEFHIJLMOPQSTUVXYZ[\]_`abcdeefghijkklmmnooppqqrssstttuuuuuvutttssrrqqpponnmllkjiihgfedcba`_^]\ZYXWVTSRPONLKJHGEDBA@><;:875421/.,+*('%$#! !"$%'(*+-.023578:<=?ABDFGIKLNPQSUVXY[\^_abdefhijlmnpqrstuvwxyz{|}~~~}|{zzyxwvusrqponlkjhgfdca`^]\ZXWUTRPOMKJHFEC976421/-,*)'&$#!  &')+-.024579;=?ACDFHJLNPRSUWY[]^`bdegiklnpqstvwyz{}~}|{yxvusrpomkjhfeca_]\ZXVTRQOMKIGECB@><:86431/-+*(&% "$%')+-/1246EGIKMPRTVXZ\^`bdfhjlnprtuwy{|~}|zxvtsqomkig[YWUSQNLJHFDB@>;975320.,!"$&(*,.0BDFHKMORTVY[]kmoqsuxz|~}{ywtrpnljgeca^\ZWUSPNLIGEC5)'%#" /1368:=?ADFIKNPSUXZ]_bdgilnpsuwz|~}{yvtromjhec`^[YVTQOLJGE420.,)' ;=@BEHJMPRUXZ]`behkmpruxz}~{yvtqnlifda^\YVSQNKIFDA><97520!!#%'),.1358;=@CEHKNPSVY\_behjmpsvy{~}zwtqolifc`]ZXUROLJG42/-+(&$" &(*-/247:;8630.+)'%&(+-0258;>ADGJMPSVYpsvy|~{xuqnkhTQNKHEB?<9641!#%(*HKNQUX[_beilosvy}ʷ~{xtqnjgd`]ZVSPLIFC@=:7$"   "%'*,/EHKORVY]`dgknruy|~zwsplieb^[WTPMJ+(&#!!$&),.147:>ADZ]adhlosw{~|yuqnjfc_\XTQMJFC?<9630-* -0369=@CGJNRUY]aeilptx{}zvrnkgc_[WTPLIEB>;841.+)&#!  #&(+.148;>BEIMQTX\`dhlptx|~zvrnjfb^ZVROKGD@=$"!#&),/269<@CGKOSW[_cgkosw{}yuqmiea]YUQM741-*(% 36:=AEIMPTX]aeimrvz~¿|xtpVRNJGC?;851.+ ),037:RVZ^bgkotx|¿zvrmie`\XTPKHD@<   36:>BFJNRW[_dhmqvz~ε|xsojfb]YUPL41.*'$!"%(+/2SW[`dinrw{ѻ~yupkgb^0-*&#!!$'*.159=AEINRW[`einsw|zuplgb^YTPKGC?;730,)&"  -048<@DIMRVsx|Ƭ]XTOKFB>:62.+($! ?CGLPUZ_dimrw|kfa\WSNJEA=851-*&#  FJOTX]bglq~ytoje`[VQMH/ --!$'+/37;?DHMRW\afkpuz¤}xsmhc^YTOKFA=951-)&""%),048=AFKOTY_dinsy~ͱ{vqlfa\WRMHD?;62.+'$*.26:?C׹ytoid_YTOJFA<840,(%! --  @EJOTY^dioty|wVQLGB>%"!$(PV[`fkqv|ytnic^XSNID?:62-*&!%(,059>]bhmsy~ÿ{vpje_ZTOJE@;72.*&#)-15:>CINSu{}xrlfa[VPKFA<73/ 6:?DIOTZ_eϦysnhb\WQLFA<83/+'# ;?EJOUZ`flrx~伷{uoic]WRLGB= -- !%)-16:?EJPU[agmsy¾|voic]X -- !$(,15:?DJOĿ|vpjd^XRM.*&"   $(,0tz}LGA<7 #'+049?DItz½}wLFA<72-)%! "&*/38>CINTZ`gms)# M 0`dT0,rBd@@%pGw; q;fRwlYC34u?~v؈pӤ>*wl_q*K;5&cŇPnWK,hֻ)M _ݭr eGcLFv;ݸ)";j*=#rW|rH pz9:8 [ɶM'#snN?wpi_F+WlX2^8k&!zչg7gCeCㅓM3.uՃ^fA1wkm'݁k灇ݿg0 --N:,ӹs<SM/R|Հ7c\x_?j;&ۙLFp'y2NCw wJ$<“ZA<_UUdܵ :R3z|GNmsd`w~o!N>hl<$ԴNK&;'];d HדQ2ud} H/%3M_ =lws \n2Z0LA*4"3y;8e|i} ^;Ty\ L'Dþz5IC~WቅhoHkJzC1#Dvź$kH !xn`o#fӘ]1>2Fp;sj2bwTWCo ϋ i QG[Eȱ]nNkǏiHQtD2Uy3ݴv\vݎlWƸLt9Ԛ_`cދ O xxgzq vvAyOڝn}E0 Ց<+/ACG&/yEgC8#u@;<SM)cA;ubkxg(*}<3y>%сd 묲qvv츐1g_>O QQ2⦒I3 i.kw]gX-T#ìIs}n1 \f3n^qxzy<@p:Gv&HF1 --#skϑOb_ uj;ZNu 1&yYx"3rwgg*'bxGD!D-oIc>!#攪^~^J79`Zz`En度=Egx28iWvk3] xr6~;RJ)N<ߜyw@#9#YfC x,i;b]6v\0n;.{ u½vpjc]WQKF@;61-($  .27=BHMSZ`flsyþ\VPJE?:50+'# --  $(-16;AFLRX_elryȏ|uohb[UOIC>94/*&"5:?EKQW]djqx~ѭ{tmg`ZTNHB!%*.OU\bipv}鸳ysle_XRLF@;50, $(,16CJPW]dkszľaZSMGA;"&+05;AGMTZahpw~½zsle^8-28>DJPW^elt{յ~wpib[TMG@! !&*/5:@GMT[bipxĿ{tmC=72-(# -- #',17=Cmt{¼xpibZSMF@:4/*% ).49?FLSZale^VPIB<61+'" +06ELS[cks{Οwog_WPHA;4.)$-29?FMUľyqh`YQIB<@GOV^fnv𿹲rjbZRKC=60#(.4:AHPW_gpx|tkc[SL!$)/5;BIQX`iqyü}umd\TME>81,&!70*$ !'-3:AIQZclu~ypg^UME=6/)$  &,29@HQYbkt}yof]ULD<5/(#  %+18?GPXajs}xne\TKC<4.("`$@H!qQ2ca"H5p?~ :b:$S?(껃 5fHF{wfN P)wr2@Hجyf߹uBSg;gw@V4Cfax~6kJ(ݹJ߁Nʜ>-GpH~l0xG}jJ߁S*35`Ȁоت3X],HNAF;wFɠ2%4NZ3]Tc:Sf-HQ8FdNQ5eAV)%TS`wNe} ?xfwjwwx.HIDGTaReF}lM& z y+;y{<Ƙ(+]d3^ V w=*lЄ2(8)q]GX]ꏔqJ((^#4ņ*nH9V 50,wT/w"RFtfMA] --n2S܉v QHwRռN X(V\ʝ?CWq'S+:zݜ1l)r'pF*޻, rqxfHd,m7@ȝ8UL-;Tw?Ut~).trPzeNl,]8Ew_3:_Rɘs˝$v'AV8:k3!,"#t^. KuqVS 续{ xƺ E:I̖Buwp]ī Ep'Kfy3gHD }߀*)s@䎫2*vƅށqȬvI HI"*CTap&wyu --i1vUαzrz*dBF>e2 Aq&Vc:te5)=Vw2 --5iWѴ#tDcEڣVsa`ڨ&wRDNoQJ CwR1r72|w@Y 9<xBXRSaD3|dY-59c59z --H --ugbjtL36{e·OƪRONw.ipx2JSxi5gL[r ^/O涛evqWPpcry4HXL7[?ぃTP_wm 宧_'ɿvFk\"oԑ_w]!Ow3ϬZϰlqT7>FNW`ir|Ľwmd[RJB:3-'#)/6=EMV_hq{ļvlcZQIA92,"(.56/(#@HQZcmwļ|rh^ULD< "(/6>FOXakt~»yof\SJB:2+% !&-4;DLU_hr|wmcZQH?80*$%+29AJS\foyǒE=5.("#)07?GPYcmwŽKC;3!'.5FOYcmx}rh^TKB92*$ %+2:CLU_it~ۢyodZPG>  --HQ[epz䔊uj`VLC;3+NWalv{q70)" -- 8r|Žw<4-&   -5=ºJA81*19BKT_is~ǿyndYOF '.5>GPZdoz翾Ļti_UKB91*#$*2:BLU`juͻ㮥zoe'!!'.6>GQ[ep{оŽuk`VLC:2*$ $V`kvù~~}}||{{zzyyyxxwwwvvrqrrrssttuv[QH?HQ[fq|Խ~|{zyxvutonmlkkjjihhhggffeeeddcccbbb_^___``ablmnoqrtuwxz|}vlaVMC:2+ MWalwⱮwutrqi[[ZYXXWWVVUUTTTSSRRRQQPPPLLLOOP^_`bcefhjwy{}ú|qf\RH? R\ub`_^\[YXWVUTRQPIHGGFFEEDDCCCBBBAAA@@@???<;<>>?MNOQRTUWY}ȿwlaWM #*ʵ|zxvQONMKJIHG@7665554443332221111000001GHJLMOQ^`qsv|qf\   &\fq|ÿurpnkigdb`^CA@?((('''&&&&%%%%$$$$5678:;=?@B|VLC:1*#1:BLV|gdb_][XVTRP=;:8765.-,'&%$$##"""#+,-.01346Nnqtwz}Ļ[QG>5-& -5>GºnkRA?=<-,! #*+-/PSUX[^adgjmpsk`VLB91)" )19BKV`kvȿ|wtA?=;975420( GILOgjmquy}뼲|qf[PF=4-% -- %,4=FPZep|ɾzsnida]ZW-+ 3579<>ACF^bfkpv}сvk`UKA80("!(08AKU_jvypha\WROKHFC@ &()+-/@CFILPTY^elu{peZOE<3,$ -- $+3;864$ +-/1469.ҮWF;/sTiÃ]2]~]f0ᕕlad;?6}2"ze!'7CWQnրGg+JY ;*CfO?"S瀞xxԜ --]eJm[!뎈K߂ /#*`)CCV]Q\5Ў%˥7mYnі;I$%7#ǻ^:WbKoyxhh'o,|q6uwj[\5wi@tpȈ b63(QhWkxe3YCR-[ E K49-|gETbmSށݝV5Ż9lգҊ8ލhsfDQ-y.tt(c-W h --kYnN+'Va]SSA2`橝0bD;'9n:`s0t)~-\ ⊛˴[f8)CYn2.œVI($igw&:];Jwۇx[y [j`aqy5CHg|1]+DgH>+-U -- N QZBL3jcL{aɻS|KV &6.'B\"VoBHhKmv0h<\eB/ # ߧ. Y_Nt1>wI@"9 --kf=uN۶!k=DMX$6ny!1˟Œ<5gLZdN*$ȇMA3bRYҩgx&X6wq}Ͳ}vW OM%'0LgAچn~&3LZwK GZ --jggUE(ʹ a[yߞxAFǫ̇̄ --XpT3`%z cOނ$bC@bfOݎnxg<ʰzV]ªHfɜ"^;!UW"ߒXU@-UQrf#"1^ X/G vtjz[fw, 龙 @C*cuJf"(b*J(ۣ$"0uxcU" --ݳVe&m.*Rr7N"8``iMHdHu>āY_w `v&aPA",c}nYA"%m.{lyZnG &0ɥE lz4`e8YFoo§ݼ Sڧ;DSAž[mF{,l2ٹowCמ<7D!@rpJ℉'Nֱ |a ^Tܵ`QYVWV sg#4:RCXqڠ9'Sd)+K5@ R⌻GީE)x'B6igMf/}w --}+ҭE-EqbEsK;,k,>NtrQofY 2IMMYF2NU6ö"P-GKNBXʸKfPDz yV3n:@=T8"wJUi H+n"01Ha&>26CS?W]D~$-5a)z ˰B4#hF+Ԡg g2f@2[B̊f\&R@6>tsj83wsM6uK!qjh>\5\\gxG^SF:>\5]6LN<5ݭ N}5C w=$ ̝a2Kph):t'.6?IS^it˽tg\QIB<73 .159>EMVan{ĻzocXND;2Xcnyŷwh[OD<4/*&$! --  "%(,18@IUbpȿsh] -- \gs~~n^PD90)$  "&-5>JWfvúxmbW "ValwɻveUG:0'  $+5@N]mǾ}r,% Zeq|ƶo]M?3(  -- $-9FVfx¹vk`UJA8/(! '.6@IT_ju²{iWG9,"  '2@O`rƽ{pdYO  :CMXcnzͿvdRB4(  --"-;J[mti]SH>5-&%,4=GQ\gs˼r_N>0$  *7FWi|͐y0!(/8AKU`lxɹn\J:,!  &3BSex<3+$#*2;DOYep|ƶ~kXG7* -- $0?Obuùvj_TI?6.&%-5>HS^iuĴ{hUD5(  "./#  )6FXk~Ⱦ{od --BLWbnz̽r_M<." '5DVi|¸sh~˻p]K;,  --&3CTgzż%,jvʺn[I9+  %2ASeyȿ '/8AKV䧔mZH8*  %1@Qdw¹g\P#)1:DOZeq~ȸlYG7* $0?PcvƼ-%$,4=GR]iuǷkXF7)#0>ObucWLB8/' &.7@JUamy~jWF6)/>Oatrf[OE;2*"9CMYdp}ƶ~jWE6(  "/>Natżvj^SH>4,$35,%]iuǷkXG?Pbv{ocWLA?IT`lȸlYG8*$1@PcwĺrfZND:0(! ALWco|RdxƼui]QF<!(0o\JBSeyਫ਼$"*24跬|ocWK$,4>HT`lxL<.!hĺrf' -6@KVbo{ۇt`)6FWjƽuh\PE;2)" '/8CMYer~݉vbP?0$Ylґxk_SH=4+!)1:EP\ht±xeRA2%  -- ,:J[oɠ{nbUJ?6-%3IUamzŵ}i#/>N`t伱sg[OD90(Wcp} $1@QcvȾvi]QF BMYfrɺo &3BSfyyl_SH=3+#1:DP[hu̼M=."(6Eø{nbVJ? -- ")2i!jL]a5#ћRp[!+#i $w[1ËTT8Zh2vU=əhAoqD⏈$[3"ALO $AB'"Ejͻb)GW@Be $x!fMFQ ݰeʐ@H!s "IP05 c*P<@Q˰]!5C --*ʰTS;S6`rzf33Q@ ػrɩe/Bj$Hۨ5Cx#Rd $c:^ s&AeI2RA@7Ui ƐƢw/"J,9+C~@H#P̀.'k1]S޵ SUZFoA;[Y4X3Y3ZH4zjoͯ2Vu]b2--6۶7vP`PV(3V] --+A텶Ie HAZ2V83F0)p#Ҿǻ}Ãx2V8/@kkTo1-@3ehf^L( --s@y/sK|"Zugbի;"58w,މc &b:ao4 (0:EQ]jw;wdRA3&!-:cWK@5,$!)1;FR_lyó|jW1?O`sȾreXLA6-$GS`mzǸo]L<.# (5DTfy厁tfZMB7. "*3>IUao|̽vcQ ,:IZluh[OC8/ -- Vcp}|iWG8* --·wi\P#,5Ǹp^L=/# )6DUøx0' -- LXes' ĺyl_RF;1( ftó}kYH9&2@PbtƻS%.8BNZhuȹr`N?1% +8FWi{Ǽ|naTH=2)!&/8CO[ivͿygUE6$0=M^p}obUI --/9DP\jwŵn\K< --)5DTewȾ~pcVJ>4 'kxʼ( #.;J[mqdWJ?4+#  '0:FR^ly²}kZI:-"'4BQcureXK@5, (mzȹsaPA3'"-:IYk}seXL@6,${{iX'3APastfYM )2IVcq~PA3' "-:źwj"*3>JVcq¿˾{iXI:.# (4APar஡xj]PD9/&4>JWdrľŶraQB4) $.;IYj{ƻxk"*4?Ľ̾|kZJ2' ",8FUevǼіzl^QE՘|yy{ǹwfVG9-# 3@O^oĸ~KXes~wqmklpvq`PB5) $/;IXiyztqpsw}Ƚvngb_^`fnxɼ{jZK=1&!+7DSbs{qjecdhmu}Ƚޙyof^XTRSV]frĶueUF -- ?M]m~Ϳuja[XWY^emvW}si_VOJGFINVan}̿o_PA5)  $/;IWgxͿqdZRMLMPV]f !mbYPHB><=@GQ]k|Ǻz ",7DSbr`TKEBACHNV_itD 3>g\SJB;6335:BMZj{õueUG:.$ )4@N]m~}m]PF>978;AHPYcnyPD9. dlaWMD<50,*+/5>JY˾p`QC6+"&1=JYhy~l\NB93//15;BJT^hs~k^PD8)r?70*&$#%*2( [n~Ǯޥlx+$8 07&eeИbp6S{^ --8AߊHNI~w|1nTGs/B3x|#YY?B yi1v ĔY`ЗQ1J3i)7m9w%"wt ,H)Ev'!|fJ/$b^-/e"nSurLiҖg2/E3c dދQ@Hv:S^W|Gj(Wn~8rcp2vҩCbYCZ_Qn!^!2gw --Г]SF!C!l}%tFS<afXN6珢cm-Rg --ٝ" UL`p*.nmn*%pty'2Q7ءweY()nkN)0sH%+Ǝ[t{B fz_ ]qYni(ng!ëeDr4(wqB --'. --ZP@2̻;hDH@TTW])VtYH,ČRM9s|.#T]J`l(ҘN{k#%qSu7̻|@};=vvHLcDEK0vƚU --z;S]r2z-3o#ܥ;#]O5(4k;. c`c1ʌ!-i+Jay"x}ޥeNnR:nnLHJͦd}v7L!d4CURj"2<5ە!޵}7"U+*{)@ݹ1b[,Cw.^vw׊mF~muh )2L0(cr!\)˅Ϯ5]vg!]CBtUzo͋{?QTS{T}l¡wv>soZ#e{CasYAQ ~5;:C|3,AW_u)\K;w&-+ty}'ޮfޙ^!wB Lk[2XRM٩6*nheò3V~c\#3-DjMz>c\ P@NðҗÈ\Lq)wGf4HULpjn(32BjT#gtY#;TzE!w#! 3p`ʯ)  @Oժr\<5 J}^膉 f4z~/R 0c77K?L!z.^Bfu"RCCv|8у X=`2HDN_fb fhڮ)386.;a*\!0*Dr%8Xy3 f]s<ie_{_w(ƒ}i}@`d?E%d\Xi_CD|mHv׌@^x1.;!S}uP6֦J]C]wKE`X#$r;.DjFwdtGLn+€=ΧVt9GzvB$Ť Su+k`MxfB}z8GUeb^\i:!;`j0;=cOm=,.0`cfvUsOF RFTg}6 IݼSP>tdFfƫTs՝zŅ2(@Χ~ΰ " 8cM#x)>uz)r ഩn;|jz2hDH4 DjZ͌ud"K4)2jknays a~K׽ td!~7 f>f?5>Txm/Cv0ead )2=IVdr߂vk2+&!!'0;IYk~wgXJ=1'  --",7CQ`pǷn\L>3*$! "%*08@IS^hsݣC8 --crżQ"%/;JZsdUG:/%!*4@N\l|܃p^M>2(!!&,4KYhx`N?1'"(07@JS^itؼxj\OB (1Oatµyj[M@4*!%/:FTbr'JT_juǼwi[MA6,# 0;GTao~Ǿ~rg -- %vgYK>3) %.9ER`o~òz %,43)$-8CP]lzЈ|q!,:K]pµ}n`SF: #+5@LYgv;DNXco{ĸsdV#,7BO\kyĻxlaV|n`RLYguοuaO>0!'/7@JT_ĸ(N[jh\0>Oau|n`S$,6AcQ@1% ,4JWet鳦?iw{l^(1ο=/ ǻtfWJ>2( 7CO]lz봩7sg[PF<4,myubƺsdVI"+6AN\jyƼvi^RHvkZep|qcU!*4~rf'4CUg{᪞{odYNE<3,%)08@JT^iudDOpaSF:/ )3?KYgv{nbWLA8(5E@80)# &-45-)6FXj~ŻncXOE=5.T0GPYdŴ|hUD\htzk\qø}p繯zod[Q  DMV`jt}iVE5NYeq}ʿxiZ$zmaU +ukaX% T]fp{KVanzɽȾvj^RG=4;K]p|rh_VME>70+%!BJR[>HS^kwȼ --"+5ANƻƽzpf^UME>7).4;BIQZblȸlY")2;ƺ !)4?LZixùs٨xof!&*06JXgv --DKRZbjs| &n{-$ HVdtܩwk^SG=4/͒xoC<72-($! -- /kt|$+4>HS_Žt1$ļyqiaZSLF@:51 38=CIOV^emu} 8DŻ~qeYûskd]VPJD?:51-)&# !how (09sʾ(",6B֕|obVK@~voha[UOI/+(%# $'*-GLRʻXdp}< !*5@N\jzܟyl`T%2ARdx𘐉zsmf`ZUOJEA=952/, "47;]cjpw~˻p 5?JUaǻTG:/hwjysmga\VQMIDA/," !"#%&()+.0258;?B^djpv#+3=GS_鬝o`RE=IWfuȾtg[O_ZU@=;86+*))(('(()**DHKOSX\afkqw|;EQ]|m^PC6,";GUcrƼr&fyܘ|vqmhc_9867>@RVY]afjot;ڧzj\M@5$-8ERappcWz{wrnjWKIHGFEEDEEFGHJKMOQSVhlpty} wh,6CP^m}ṭzmaTI>4+Tf~zvsolj[VVUUVVVWXYZ\]_acfhknqtx{ǣʾuӘZbH! * b) "8R  @@wluyϽYɝ,p;xZݻSLSMtH&+\5FSf]({wO#u!]R ?6q _DX;6H{ 'e7rVQhS1 h[K`!(\޻ӌ}ĺ+yE{W`hr'Yl2ITnCIC32탚*9Pr)tHä.8w5縸 ^WVFpݿ[L"i+[LNb:moxg!XŬS ܗ7fv.b]<5Lem\CG.bP_;HS_dc_ױ(zvdf qz4Ȍ-Czt6»IDa. $E1Sli-Htw/6vV.%}-_/3e\BHeQ" Y⑦2BOo-X.ɪnEZ39&;l)iy6*nTDal82<8HFeJBܻcܑ0vw*76kYXĩoS=JT"@x4N+o E>&v!=.f tp!Yd=Xu/r;H2hȗ5<;D1<'Kv-6 ~B *^Nvi4zE)7^f~a결[w4eYNh_r++ѝsI4 Q]ۃɅdܻUNh3i C8iMLtP\Gy+71z|p[U}_* @Kx&,J;:PqNVP2{7VІPٵOݩ s=!N&mL̨վ/cD$gZC;Nm-< 3`f`5Rlii-};HW:q@fĺu`D?k+;`NlwmX0xH;-/n2CQ{cwfLCxbtAkCԹ il:mYqwEk*ɉ(DAwQkro|yo5aϫHV^뙻f`ϻ_0=1!x͋g؝>َucoLU]3Z漂]WR;~0z6q dt3:۩qKJjƒH~t01l"d|R&_{#zJ,Tc@򁷷U]sIm}I!᭣Hɇqq0*GVޙETYa]0M.#O.vGB}u꙱ 8ޥ{_, --q,m5!k\'PH%܊dٞqeC鉁8OsNEQS: %u2Os{h{@S.7jU5X۱xṭ=K"(d\Hpz1z~AK-(ᙋ8~ 42~"r.uTܣ XruIܚs7nvfO=w_MEASE f4e2/IL>5[s{䟝^Y$N:=vh@we,Ҋw7ܳ2yHղ;<U;lAbʜOj;sf"F3nPܗ*nw3PO me-C.eucL $^Ӷ]UYh6Uf/ȝԖ1ۊ{!$eDXC --]V7׌"VsjQ@-εVGq}#ӣkɌL 0>i<5aF"-C㵋kQԋ2gX@Ե5E0R3Pa(Ml;qnnZ~Yěc ݱ g7ZSc+#Lixqi#!]X5۫gx)"!MDͻʺEfѓdZȇ.;vEFp;>Iybط^]_t&Ýw_'ELIUcD* m;X+iܭKCww؏C#{wO/![%[F tbW:jPb!p=¨3!QBإcn(V?'{ޕ?&Q+_Cr绥™!A1٥P#¦9^t訂0)8.rq@[FTA&!YZs>$] K1]P ǼCK7}1̚<6`3>$e29gd;)񉰔sK};! Z IAs}7)Z\[‡y )( v2>wUDx*@NY&ZhLSMPDwk{wÒK/-Đҩ! --Y:l\R/X &3'tEa WO؍7,/r;Pc1;S sF!^C}0 HOU)J>˂zWth̹0KAJz a> ݭn)}"$fFgk>IƋa`jwBO͈LL9Ϧ!>Ѻ⾋j1Z^sWk ;`VR5q$"XCRQS^Ig7yst A!9aoEZ |+TlfD"HAj;ֳʿS*zjf%$;NfzjQHwXƳkif ֠@ݖ,朾 :q ,Uv䅗Vdxh6I2΄jNvx=/妼SCAk>u ]c&WX:!t3πAk b6j̠T@C5a` Siu^>呿/橞3syfdwP!c %NɁ8a0CѩcĘjM\kzG<3ֳ}zxusqpnmhhhiijklmoprtw>ȼi\PE:1޻}}|}~R^kxD8-$&01rvgXI<1& )4@N\k{n`TH?scTF:.'2=zm_ 랏o`QC7,/;GVetՕyl^}jWbp~Ÿ|l\N@4*#-8DRaqӢE:=M_s|hVD5'!)3=µxhYK>2!*5AO^m}rĴ{gUC ˿te (2>LZiyK]qҼqa%0;H̒vi[yS`m{ƹ}m^OA5*!#-8ESbr7+9I[nwdQ;FR_yiZL>2(BP^nøuvfWH;0?L[jz鐃ug)7GYl/'0:ER_lrbSEIWfvtfYLAWs`N=." &0:EQǺ~n^OBr^L<-!&/zķzjXL@5+ /%Нs+#%/;H?%1AȹǻA5*#,?4+" øƵu'1>KZiy㞐*rqaRD.:GVeut!²坍}m]N"+7񹬟$ꨙyhYJ)3@N]l}8H0mtdUF9 --JXhx⺭ufYK?5ͽsRɽ#-9FTdtӊƹ{k\M?3_oɺ0õwgWI2>L[j{%̿ --/:HVfvΆwh '0;ȼ4 Ƚ 򳡎{ŸyiY3@N]m}Ӿxj\N ,:K\p1;GTb081!ʪBȫ24YT̝*ΌX!^bL9}8`h2.q>)y;u9܄@=/,[Щ4*)݄>ӝ:;>3 --@anBe[A4O "4QV1FN$B\_K3|~gJvm.Ʒ܃zZ X[HxK >h)yiab%P8)P`ޔxkW2]_]:0'xŸ:$fE>w0RuxwN-*S3iwCNf('K"9ܥs jY1=p;6ݞm]8DY ɛlD=)$V1U gpX(_gw ---6F]lu7xݰl}1R[yȉ:(KB=uJ]bOWw 4FXY+RN%3.oݎhv$:wn\Ump`)# SOէ"L Q[١R]ߩ6P2,3~0[ӝ?It8HSK7x~gQW/H wO8`\/ErmB:r\Av iV]Gwp1lxUP/<]E_LkzիTs᩟2BPk7`m8,2`(u𘳨z^H --(lx-{yqys([ҭҞɾZz0hГ-ʝCO>jn!SlCAo dc΅+۴w0p Ee"]uj*լ(DEENw]1mɍG`2)e=׎b#3XD$l!eJjN{`-ʑ^o͊n&Yd;~hei!:|)bh0û+%foE;o׎wldʅ zt?,C+\;@995 \Woߴ2X-v⾃3i]rлdEH^Kʝ-c\e(mnc&L8:a܋?n|z'x.}0 5*m #k0TT4Oc;FOoT5 i.\ ]+d[ևDM&g! i{x~j˰Ѕ⒚X'$Ё ;Cu@AJfğ\n DB7&Ű^; opAQlĵ@~ZYr8w4o --,ʼy4<7d?vwN =:wwxɈ'(ѦxAI.ݺOzH}-ۤO}_`ob0ս3Gj0UT $YHʾPB6*",8ETcsץzl` ([L>2' )4AO^nɦ{m^Q{)svfWH:/$&1=KZjzRE9/ey݁mZI9+XftǿUeu?PcKYguȻ}m]M@ `ppaS"*5@LZhwxgXk{qbUG;"+5sc$.謟rBO~n^N@4)!+6CQǻteWJWj} ]l{yiYJ<0?M\l|ufXɺ$.tcT$/;HWgwvhYL?4ʽn^OA7DRbr[MA5VƹziYJ=(3}B6'1KXǹ]m}ŸT!*4@udU P/=M_sl'2?M\vgXο`n~TF.:˿*7GX=/":FSbqO  *6CRar5Uh0;HUds%'2>L\l}ö%2Afutd#.:GVfwŸ~o`R3?LYhwN *5BQaqǻqbT5AM[jyǹyiXI;/$[k|ɽtdVH<0'~´s"-9Ф([I9ʽ~m]N?)4AP_pxiZL?4|iWcƹxgWH0>Kʽ}l\L>(3@N^nˀqbEVi|[jŸhydVH;0&RexkXG8*p` *6DRbs#0>pɻ2>M\-;:GUcs! #-9GVfwĸFXj}pWfv̿)4BP`qǺSexƶlYH8+yhXI; -- $0?OatD5AO]l´sb!+7ETduvf; ʽ'2?yiZL?]ŸwfUF9-"#.:HW] '3BSv_OA4 *5CQarp`RD7,>󬜌&0!,:J[n˼0]m|ŦtcSD6+)6єn\J:DRap̾~m]M>2÷AR%/:GUdt$.;IXhy Ϳ'1=JXgwL)"  `AW` a 91   ҈~jrӺ0V21UG0 I sivEiرwBwcwIzQ]TO --v7Vw1&E@QX'x?w.1yvN:527݋D$b!0_@>>6j)vXO?lK& 3bW= 9U+F' z%n7a#V|t5o-vG8bkqcp7` !_lv5 --V7.8r/}3w8v#թ*QۻGNBmGF 䣺 8[y(OF 2Zj>]*4TOgGwnʰLIuQ!{z:w.u)9Js׵a4<3(T}v\1XDC=RvXo4Pd8ܽۺB޶",!(oKhEYG/RW,Ơ"8+Ԣ'1S_n\<3Lϒ8(9L:DO ? رy:Jn <Yf53>Xם;p+N`u}5N{Ly2>rP΄tS/vgE@Q9iDK! Hc!ogJP$Keh]dv!o)?gŵ(-'6.v[8gC$Iv%v u|b՗qۦ;h,mg&3M-箒n1Dqb!R' T!sAr"KS}\2ӘЃϷpCJ H׿cawmFu`֕8ʡj!xn| ݅ --i2.yZ|*$@t'k-sQnJnS --ys(R t4ÝPª:5f?&ZDN<,zGeqm =\6k0<3.dz/P,^{21~@IR]ӝ*:IҹZ^Fh*3(D2_ѳ5AK(WT;WW#:XtUfe]l --Ah5g$%)U ȱ%R!W  --'͑ePuRܽ%J3:/>6̣.1a L`WvJa˳d :&O --W2.B ֹz}&T/OGS)'ujuM#ןFP --'lr@1 R Ia@5ZЗQ5}hft2տSW^ꊓ 2&݁˘]o45kǍk掩3.LĢWe&2@H<3Pĩ6F06߿:n&TD?0cuK730<ɝB~-3)~SM,@q.\2͊fhmbNyN1ؾ 1[FP<3.f{fdOT܀:?`^}$_'P MT%Q&ZB +˰K;Ts?)2f쥈n'xSpH+aT"*>T7w@ݱ:TY t+Iٴ׏Nv63RK I=9EXĸ|5$bO}S2Z+1P}ˈ0]ql9.j佇 --&? [H*n4А=oz=y'KHTO ^F oUq>!CDŝ^r1&ox䦝D{KaX --T7 cfP=:oW'rxbhk dE҂þE!;_`'⽡D\QHcPBlNcC.WQ|tmLێgQStags_> --BG!lbpl!s; U}G%x.C6JN^EN L$B --XT)Xw<3?.8SOT0GѐFCÒjfhZ --S_ --)LS-ԼBWCv[DMs!}+h;LWTa2P(8jcSˇu] $!ھ]_D7hQS1uYD9~uǘ>qt*!𐐄Y8$vωG߯t~d_R+9IZl_ )4@M\k{z9+"+6CP_oĶ7!1@Pb5(̿'3@N^o|l]NAIxg.:HXhyƷ; )5BQar̿tdh --!+6YJ;/$%^q̽ucQA2&\ +8H؏~m\L=1%&2?M]n7ܐ}jƹF8,!"-9GWgx $0>NB3_n~o^N@3'(4AĶ9=/#cryhXHYi{|l(5H8+ Ϳm\M>1&N^nȆ&0=JY",9GVgx̿Ǹp_N OXG,WH:-" #.:IXiz?õr s9IZl~{jYI;.$/N_qʼubQA2̿}l[K=0%L\m~OA9HXj}Ŷn[J;-0&2?<0 #/N_qɺtaP@|raQ vf8GXj|lZJ:-"  !*6CQ`q|#}1'3AQbu˽weTC5sbRB5) CRctp`QB .;K[m0$'1K[lٗve6{hWF5BucSTdv&s#.9~ %0=L\m&ǹvdTD 7ETew -- &3APatSCm\L%1>M]nȻ|;JZl~ĵn\LȺweTE7 fw(5CSdvʾyfŷ $/=L]oq_N>EFUfxɼ|l *7EUgyͿ{iWG:GWgo ^oaQ %1?Ǹ'2>ɻxfUF8FƸw# !,9G}kYI:-"!*6CRbro^&1?N~m\MtcQB4(;HXhxɼxgVF8N  hJ=@P$r0p IR e33.초{ǂ;v,LpHNϽ H{* S )S+6_"3c CB Lfؠtu/ÿSrp YA,޵7 . 3F)^uI +^8eThSv'2sIk --aEB*#%J)x iXfw KHXb?vZ m dGٟZ6e0K j&=\W*ƖPV>L1~BNZBzeP0F5!8aMvDYq x-bV S<7 J6u>tf ---4a";w7oP"SUlB"c/K]ܶ8EK d |} sX> R { |ہw1fƸSgtGAwWH pbZmTzn 0^d"*|mo1!M5d7N)<ȼ*CTg˲:2NOarvP8cIćhDaj YbVWFaT=0֝1 xrBzPd)M.EhHj$mY\ +<XP]Ҩvn_Q k9+ --cPㄘ:^zOy*4(϶8[TćGEi.?b9LvIx|j;9^4"=x94~/{<%ܲ#ȶXL`Aon!)a_AЮk#j/֝Eu;0]w֐ȺCߐ p-Vð$88qYT b lS=ؿ b#=։;Y6'L(mHujI?0 EⴗaN~l7ї1u#_lNd11} --3¼o ^d* _a !C!%nZŁjpq' --4dp'ܵc Az!ޖˇe9a 0s+f* ?! FLMi%jty|B-QV5p2CayICِ*G<3+(;pygh!ZbT8{?g(ozTUk`X7H2Bjaޠ;Z{tHjC2sLa|e돰nÑ^0L To/+G:!b>'=< ?eY@FLn;=t)q4.RH[ΞZm:/5`n=έ_w@`FT`Œ=k.̨v@|@B!j<|掿v#&܆:ώ M+2. ABu3us.i --l;$,ljKO[;K --etl; TW+jqOVHI {f—j --nSރAYHQt5K yӃ=Aw#Ŭ -- id/+%E.0-Ei` --3K~nb bR.x_qrDQq&"PE+( 4K~cÌjyHbGau>kBۯ1I,'p_q+ ƒՄVq~s ~z)d=/j -cX!2nj)aJTJY"4`FlBpǀ6Bw((LsC1_bUHo1,+dZ(S-X!MA0#sID?儭d;}\j'E+$F홾D#T!h@T4Cu.5n~5:[X!QjDg!%U?+ew?<WHO&2E1()#eFѱJtw w\%ے;gƎi(HQCB'aDfH97?!Lô=iè(nE --UqPN^9bO?_=ؘ:w!Bx;#=WEmQ5#gjGF܊S(i@ąTK/ސ,1~UfAw S{-WsHT#ܩVvg WL*$R57kR~ѥ9P>5NrwQu4 n! --/Tm3 ^H0c! @4Sb6B_-Uk --P*RlW=) XggRIew ca>s3[(6]TmJvg'o0 i8{!\OȷnkCJRdPO@T&4=Ts9!D6+!~l[J;.#3?N]n~N?ph(4BRcuɻvdSC57DSctʼ!yl³m\K1e >"-=0%n5)&2>M]m~WM^o´+6䣒n\ɻ$/uy { c*~fET7;ۊn69M4~^Nw~e]) e&^KT} k8LglZl(;0E+o方P–BBuxvsCL;[@/̂XeG_AvJX --Zy --Dڍ`1R}'^jzT? qt`S\o|,DT?3S0sRږq }ILYz4I`e A`//+TC_I Zke1& --ÖKLk.s+_Xyz%Zͯ)Y25%5fx!x|j| Uخ1 - ,u>1zP#S4/XHaL~ ˸d؉U k?(kAӋSޑbY0iSjd8 snoKǿ+^iXwu1)zs&|tU/Z=4 = =^뾌Zw5PfA)" u7&E"$427YG!TO܎ߌI --w2zJJEKAsLKMsT1HL]6R :8YP]!QYi|4"#`}w8!᎘nTn܍tCu쁍Ybq{ --et+Du_%"jFdA$a2Sv?C%.y,K૪Jq;7PuC;n,\"V$SЬ>+({{h{7'ISVL-Tr&_=yJ=.e$z"чOƓ f$؆$c]Aw㷔 .,h"/)0f`lpJϫM --&snjIF㖲MB@ʟ ed#AngDC8puns%JUA z] ;(QCIaeD,CnȈ =GģEp`soEW/F}6qwzY} --4W`RF_4EG/ zΟ>"da]cJ~Cё)Y4 4ڝE7Ls+ QpȹHCupͿ;/uE7+8҅sbQBZjhJZl~̿ )m]NɻucQAPas鷧s --#bS%0 0>N_pŷra)5AnygVE7ឍ{8evߓo]#'hyvfV$cu@Ndvk o_PB5*!L\mTF*6DSzhW)6(2?X$/=K/$M^Ĵ!}  --  (2=JWft螏q&ɺ0=M^qxfYgvź(4CSew^M>0MZh>2( K;YͿugXtbQ@2&҅vhZL@".{hW(Hȼ!-:6%1?Oasô\O --רR& 0 @8EHgIbR  qW8/ͿZfN`H:\<\;ww^q1/dp|[$,޹ j+?r2o\*XAzA0PUqv-7])e"&dh VGsw]wj:F&ܚQ}h.ךX2"k9fe[3Bo`fZ+WyU <6v;HQ}oАZNu`F6xU#EamP 6ui~l%= sUhyA4F5C=lJ 'P]ARVD͌h@K|B.6Բ ׸W7L@u&Fukt? &hY]TGiE)G( " .;٦h-&8JeQg3A}X*Ж!Eja^V* hZ@qp02c~|7x/G]AmumOb 2V!lj.Pj4'9pHėAN+@t7ȖDŽFjfF].'+ cȭx8u~99r ,0isJ2~Y-cׄbTgU#QC%& nTJ11Q+S a; --Fw ;G52@F5yuf)3!m"B3݁Zg[kAvLVw;m.5"u-CuهaKʢ@T]&1Ma*`^a_OҾa@@XՐ,;\m -BwELGfs)kռ333?Z dֶOsXrH]pUtJakA2\L]ߪ@ :gk/"h~A8$i_Mb۲(FÊA -SdV!z b㕲u3.`Nhw4I!1KZo!y0dy0Z:Y wHQ 8WpFeqAvs]eL}=l=-u̇Ca$󢕪dfzΌևmwY8(R/dS`e4;wKѓm i  9j4Dw}2)Gժdrn ûQ/gs:d-eNJ' JLVkTgzRH%ͨ+bH™92nc^Lï&rR ,EUgz &/:FR`n}ɾyk]PC8-$p^L=n$ -- '0;FSao}zl^PD8.%̾vd2@PbtͿ8+'0;Gɾzl^QD9.% G8Vhzȹ1;GT{l^QE9/&lq^MK\n³ (1/#'0;FR^lyøwi\OC8+'0:EQ]kxvh[NC8.%u8)6Eu'/9DP\jwtgZNB7.%.ȹ !ŵ --&/8CO[hvɿsfYMA7-$;w1?UE%.7BNZgtȽrdXK@6,$*(5D%-7ALYerƼ}pcVJ?5+# 9ȹp^!,:I[mkYI9,! $,6@KWdq~ĺ{naUI>4*" (4̾$0?O`sS #+4?JUbo|¸yl_SG<2)" #ó|i5C "*3=HT`mzwj^QF;1)!Ǹo +9HYl !)2N_rʻtb (0:DP\huƼsfZNC8/&{hVE6'4BSex '/8BNYfrĺ}pdWLA7-%Ʒn[J;+8GXj}ċy%-6@KWcp}{naUJ?5,$ --q˼ta#.Ĵ˼ubQA3&+4=HR^jvĺth\QF<3* --ރp]L<.",9IZln ")2;EO[fr~}q( --D̾2&z LWbnzymaVK@7.& O`r²λtaP@5?IT_úui^RH>4,$!:-m#+359Hŵ8+ ŵ: EOZeq|ƽ|peYOD;2*#Sdw(8AKValw¹wl`UKA8/'!#/=Mɺr`N?0 %-5>GQ\gr~Ǿ~rg\QG=4,%|i #*2:CMWbmyºynbWMC:1)"xfTC  '.6?IS]htǾti^SI?6.'  ]>$+3;DNYcny¹zodYND;3+$ NbN)33  `Ę&  Y1@@7 6$Z$2cf{<&+re YHtwPfjw~fl{ HsCģ逝S皚YƦDzVfVG fƅmS%ԕw'&ֺâ@S2NhI3k=yu`Ʋl.=.L2|#v|7c\Kyw̲Brǝ1[{T@~J0}͹SKjig)׌_wi+5͆_)$Xs:Q-{20EMI\85O<EH>u;#Ū#V5-um(W\-ܜJ #%=:0!adfY)w?QzY|Jʨ0483Eݥ;H˺wGU=vIbTP#P,{ [uF+ <0;8#, n5V"p4x4Vz*V -- tμZŢi鈰{>rVp00;^5afԇHjpYغuy2&M np;Z3SG\uVAfB$LMD! D2, !eYR(e``!}e؜aΛr7{swjV, Ji)|~ --?$?C"Q hCaJ 1- a ;Sw"7t=&^~K0xx$Oq|wf~\%ݢvL+8Ls}-cx23e.ED --^"͡sK@M tJ?3d/F꓎ QL(z˘՟>UU)SG#=9A`-3&0{%aūz wTέ,0 >e+LͽZɎ!:Ȅ-E K BLv+uAکzxŸUSc'1ئf@턵LUaˌAZT(S;}3ݪ>fF+0NG9Yѭe[S:sz_=̀{٥TCH4+v} 㘡סϬMo[_0# M2Cjy׵>Kx͞Q뻺:IŴ#&1aFʓ2d@fTh:r4Jϻ޻E;t̅fK]zÀk^7 ?>h`F :%a:z_T_g<)I20s I'L_:tl.?~]  s/ћȨfh5uqX^Y=ĕ;PaݼB[tZ$E --fSL*3wR, 5ޑ;oP&A̐SfƎQVא#w\;;2q?‚tf82XЬ4K&( 23 Ęi΍X --f]K[ޡ5" k.n jTLJ"{Œ' ̀cSBm|{c^8%@λQˮ]o]aG5dhf+mJ}ҘsTJKEw!$N=HI tmns!kSfܱ#DC,$"{kc օ %1@Pb9,! !(/7@JT^itƽui_TJ@7/(! &3AQcvG8+ -- %,4FOYcmwļxndZPG>6/("Ǹ$*19AJS\fpzƾ|rg]TKB92+$3BRdv`O>!gU &-4FOXbkuwndZQH?70)# --8GXk7'4$*19@IR[dnxºzpf]SJB:2+% eȹk~ --  &,3;CKT]fpzû|ri_VMD<4-'!#/>M_̽-;K"(.5=EMV_hr{Ľ~tkaXOF>7/ $#)07>FOXajs}ǿvlcZQH@81+$%+18@HPYbkt~ڧwne\SJB:3,& ɹp]K;-"Ϳ &,3:AIQZclvȾyof]TKC<4.'" ,:Jq_ "'-4;BJS[enxƆ|rh^UME=5/(#)6EUh70)$27 5( #)/6=ENXbmyɽ}qf[%o! $*08@IS_kx|obWLC --0n\J --  %,40\n #-9GWh{|jYI;.$RB3/Rd:J\nĴ|iWE3%0%)6Ǹm[Vi|v +9I[m7 ,:JǷlYH8 .=M+9IZmƶ}jš{h%1@*8HZmŴ{hUD(5DT+DUgzlZI9+ *7GYlózfTC3&p]L]vbP?0$οuaO>/#ȹ;s`N=." ˼ͽr_M<.!wcQ.KœL)4  @=`q9"!@XUJ;CiE[Dwd>/i۝2`Z-DYzUC.).dhn* --@t_џ2RX0 .4.{ XLapT%c{? {K NE~ϵG8q wl]PTQwQ G77'b#e2?C򆶔F} b*Mjc:0 H#'?ޅveBt,Lb:v:aXA lITBSWbqجcJ{l1 ?xްcb3*O --3P~R{2#D5Иո i>w]R]Rlt;斜D,>sΠZ-M$~<+^^Z*79ϝjE~2bGjWjksQ 0e ̶hGNjYޅ;Iu+ ZeõW`w%BF .VSX9l]2>$=.}T&Kgfe:82Y8|COڜ)L(\D4CeTREd9_!C YFe%$kmE͖*:!>mFНC kc\ťbw6C3 Q/{/L>gI HlF!!Cn_dw Dk'0x\dw;A 6eӕ>|h ]⚺Lߩedaw%G'eS:0&3x@dCS(|Ta3D]RpirVؗ0%L --/HU `29bL,8H'ː"7q7$U5#Ӫw;>UB ER"QJGh[aӨggV!n*;JgӯfLƑm3g՘zŖ͡IN\7LY =MV53W1c J&ѝVG3 --$Ұn+x1dw3MVT7A)99Ę@e.x.k dIչ㐓pN --3WiFfl;/ԧ$򘚡Oƣ]j-ca9m֤Dv!JR --Kxk)#@'vrN~.wgL>80W"ZfJSwLs͉:f4̘zd,2wvw#bodNMS;6\)}Jv甒kٙԛi ZF$P[;3]5zV^:ukVxOHƒSCQb!3<R~k-Z<{: --,nf)3P#|]2ww͈n!ߙh0co(w --'9Ry`698A --0Ude"1"k --ZmA/hABT݉ʢِYf|d-#Q,CCH-e -- tAփ #ZPV$,ɹnZI9+ sa\ȸdR}jXF7*ǷkXq|hVEv~jWE6(ǷlZDUgz?ŵ|iVUʒȹgUtaO>0$\oBퟍòyeSĴwubP±xdQ@1%(mɺp]Lvc*ubOM_r#²οt`N=/I[ο;s_M<."6EWhVDq̽r3BR'4CTgz˼p]K; #7FWiVE6ʻo\J:,  --s`N[nn[wd` mZH8*ó{g?PbuɺȸG1~kXG7*ӥ~kXF6)(5 +9HZlοh!,={gTC4&±yN`sȸózfS²&3yf ,6EWi}s^Lcȸ+²yfT --endstream endobj 26 0 obj <>stream -- --}0,cvYlvcP,:K\=M_T| ?PbvgzVh|*7GYkubOɳ5R!-wUh{>Oat; %2ARd~dwʻ-0 بBJ H --1Y FA B XpJsEPH}AzGs;o1;)"+})G'=!(}c*Sz-8arvKo;52z=vZ]O^6 /țD| I2!iYƴGrk@Ltoyrg7@`.o~2;WrR]k asa;PMOqK^<@y˨濫4Dd/ʾ N(Ry(%ب[{jLBgcR}~w2 +:< %P!qԘ! fL2]Ѐ8`1n'u'Dy?" &1{ҡVU/$U0r|M N z7Eڬ z#h:SfE8<}ؙ-ZE9ːcfHGg?J etǔ-l)"ur qcI-bRШgɭj/nA^HVÏSyT}*X mwXRjV2ЗЂhO}s!H{h2}3\wG9qαBgIu[L!NIJ:3PAA5 ^!1;ek$x\u~n1դA/x8PjkO &OHL^y,/G(nB)=VͬAd&IBcv9C<˔K b+0+ zճh x?J"J"2${weMm| --VO8*RfIpwWTP83qw#;̫2U1XR'3`@P<dFhН2Z&2R&${/|1$9Jv9P:,r%S$'5H?lxL 0DwQ2:P 'H'Tb?(Pd(j!쓭 --TSeAwn̮)Ĵ7@Ծ Haي!}^'FYНBtl$ k^ QcRHdN9U,Q~R#4]NDFP-52!n ?,bHd|ɇSȇk 3OY͓pRp6 w4iJJRhTt's z%uF5毹jA>S2 --WC1 --o}r Pl Jj3pR:4gz --ofgDW| --CF4& Dbk;JEwvkpL~,l^wKZ^\1C򾤋tg}*ӛARYRaOUݙՋ[a b --ɰF2MTtw\/0a);TlK[@26kgñBR@ l m\ ǵ1.l89XU;0ӠU|7 I }S}=2\\*2PBT.OYT͈'iq^:N;?~Rn'f0HB"MyoGzZ&($uIۀTibr kb۳.vVQtGzaɵ^+4/ê Is]^Q,;*j-P>&Sd2`W!!;E;:w(Fa)GF&')CmA%-L2Ph6.r_^v3ΡoyuW7S'TE %Ru|n ?k Uл,/L;dOt{/7@@?4Т#XhtՅ4A$4egRw@܂/^D#7eOu9 鞬$gB6oh=뻪EVIZm8Dzzgj}wdQ@2±tw殿-½*HEVi|ƽ̽)7GXǽ~{ywvwy{~}vpkhfdcbcdfhkpv}2Ÿxnf_ZVSRQPPOPPQRSVZ_fnx#/>Nat=Mn[̿wk`WPJFCA@???>???@ACFJPW`kw;L^q(ǷkY|m`TJB<8521000/0001258,ŨNj1Mӿ z%Z+t}!,^H`ԥ0/e).~o/`%&j&?k B@kF_0x_0u/q\EU{!ikdP;uw3=^*nwLhPcE..JwU 0| --ޕ 2["Wo4/}{'ҍ:%lS Za Z.^&uMΘvկ6MpEԞL]aC =Oy"" N,~ Y&Iu Ttinu,HlZHRYO,vX*5q m{lz''aH[唄w@/Ս<dWНb0Bٕ?wL+=ttzGhiLE>.sn_ڻ[ !\tG)sQc'|p -[qD/WF߂Jw(7I lo>A(0`^}A~Kȭ:#~rW8rA@L7t'n0ҝ!wD'Lڸg$I\֊oGUvt=i^.i?g V!m͸ACj$ --!T!}l!$ȳ9r]t*RPMS&)%!1Q sHl=N'{v_6qYbEtPb(1B($-yn S|6v_0I ZcTgwf? )aO_Cu;^ˈFcuD6Ɏ j\GKH5qbO2 v@Nջze)i^aݠXTKfy8L --)6 қta*)É$1$ +9J±wdR0?ObupB:Wp\cex8G -!'4DUh < n[I jdYc+9IZnu#YI +9J[ot):ziYJ<0&BôE9ټ#*)Ķyj9̿vhYL@ۺufXK?0>Oate7Źscvĸdw÷ey÷Wbϖ&J?p{>3'4Cy --<rdWJ>3)!irdVߎrdVI=3)! --6c·rcVI=2) M --61ިHC --(!a! --KHf) !@ `raNOOԻUExF|,3xWjS߉Mz*(b$U"2:ƺx24QkȼA\Ɔ, --H{zgUKWzH<]Kdi8dk'v>|RR߭Xw[^}@Uq*nå!ި4E6]jD "DZ=J(Fss-3}.hgHPM5gbLqT@ŕ޹T,;;͠wjR5E4n'cIPr[ƳH- --cF)w$H\nm?@Y4B;B|-v,c}#օZ3X 8&}6pwPAqiQN]dT Ud=V/ Lr<|)|tZ2lAU/Um]aY.%%TYɽWn]lFi«0Kv6O5mGr{fkaf +IpHm^eUaYw\K63b.5H<;'.6e --A 7t0n k煠wnGL%a-7B7*_etQ/hPPqk_3>PS[AG*o0D]T 96jKÖ[am0҄>vhP]Sr\ NQX:Qȟ( G #E^Gs9ݑ,Mky1 hztkX=jJb~`-mjk]S;#\H*t:8*4l]?񱧑%%L $@ȹG⭊| --OTl* --~ --q<_s( ~, --jY. В b A*C>Vr;LOtq0.Y UmµA4jD ,V3dK quty`~)BTpzkٖnfcԵ?<2rcOF1F.a:\\WF`:1HYD\;ò:/ԱLJ&!6Fxy!cE[L_mɲqd;ĘC;?!Co.&@?7] tUdLZy --|л* --*v$>U.87͇:zՄE-xAd9wm b qt3 N_#6jz@&93DfE.$C *0k`7-Hk8\]r)A]IPg!{C;t̻H3QװwE V:}Ye a!Ͳb,kSHWfR(ըVf(CА}rGZ҅ۻT:_ .X3牳} nQt , qcUξtc¶qcUH=2( [n=/v¶pbUHz'C* 1a a5r<&K4c.P_cav$v/cXۤ3 ,-JXsJ@hOepqݩ}.S6\P؆N;JSm5(JAc1B0Tլe:Nc}|!{VRCir )~۰h82N]t'*pL*i] |Фw *AP5Ř܃RS"KylhYEjH)+<4:8MHм[ CwF(Yk2YC BHg_enf4C>5 וkDn烵 P٨BF}[LWN9ă;;)`P_d_OڃmT~bЃ) 햩2B"%d aJ6N.(#E42"ac`QTNn-D --V'3R)U.#; ^? --L[V2&h-ZD`Ig5*M1wy7cL\~55)e/%SFڝIYCqBi*4p^]z7ӔFTl:qTP1f!KA0l:%culwݭ&&# --Ɲ|Xz:Riu+p1M#\wIjECᅟN7c:@{o0;Ū|!j/lB_y_٤dT+IH59ыsd2֧\h!pFטz7lnX~oE\rP͜qjFu\D:;2ȒRVca`E$hJkSFWb/sKz! * --MU0ߟOxRNkļrKD!12ZWF@eDSɛ1 ia5dx+:rӘU^++gJs --bzFcCDB&7vkjG+e*Euwc9[n}+;0tM@ uaՊ0%54[}F؅U"+5Nph컆!w_F*׈ Tq1Z|kLkrVNn_`DМ!{f@ўWgwm5רjBp(4CQP,.)y  >ҥױqC|H; RSNj| CZf}B:*G|B+ q6Ќ.ޝ}BP_bފ:{S2Od@d#P;3Ly^扴׈;%dTcL"2 hax=9QZMP(~a8 LfGQ &ݝstTڎ7LH KAy]gv;- --a oQtYxW9/ה\G2>߉tMj^|V9ۀsVUPAtw(÷*&蝿 ޖzxnJ}=Q@XM푅#"O.屎M;w*8fX _j --57 O7@:wWEÜJJwOzւk_#Ј7;uثEAPo|i7''?]`N y vW/)\?`zxe= ,|7 --9yu,,%y .b)(yC*Ƙ Y ^tRU.jҽ4z7w.x`OaoKf%v M0P;Aǹǒ@Dp:FN4F.akcJ\~tG:1J9s7 Ğr/rLd;4<&s;'?|G]GYT6mFXouUU;A%T0S4LsQC'W,o[^f~fPg+ ocȻff_ 9>˵c'&.8;)3W qb=+!C%aC= t}^_@])һPjd [R|#5jwFPAB{FΓjkÞ.]|elN>($p)K֩KZG˔(Fһ5ь #F`i$FDqVEQ~ --מ*Ғ410=h8OcH$$yDVC+{֑p_&hBY"Ⱥ.A[{5dוC%bO#';4,2x\tG8Kջpz*$@{G IdjL{`M]Q] --BӍ+${V2g .һ4՘KðTzXp 9 fYh15jq3;;ufP db Xm --Rѽuw.H(ww+!6j؎ER@\}Jo AHL޹`BCl.)cjr?-ȼ ?ejM/[ia؆}H'n#`p3"fFՁur)#@k@Qh/Ì@?o%ȻmwY\ )rp슩3AE0&חkպJ2&toUMNӧ7U1e Ȼӻ {DV^% i<55OSowۧwKfD6U@ǔ>*XJwIPvP Lh7u/`u!AEE;wEvB0M>'P`8Ȣ2xwG1UXxݘVND}VU`Kҍ"s Y5?Tu4chʘo)TlE:*=!h>ɺ2"/=N_;ƺ6:)9I[r1疎vta-;L? n*7FXw-;m=r_7Fw2ó+höŸqcȼsdgXK 囋{k\NA5+UDr|(ˆVG:.$JsudSȺ˽!?1scTF9.ǺOB6_q{2$ @ p`R( --Ia@@$2Ǣ:546vDqhc3 /.2y(b$/CB%&DY!d}g'uhzo*zW|.Mm~bU*6؄tő)S --[FTwi΁tnwrpGG6+3)yRS=b J WG]Yάj|ރ,B#ĶGz]=N?i\A FWK3 --Ru1D:<{Lxކ׊w <B$!66/# -'^P!hBV%ECov[:uwS壯؝:2%(ChkJxy/J4pvŠ3*0+J$cL GuCnA3nzL쯥UpZ :&#ˆqR\{jw uO$35&! `QwdUwID*Mnj,df~b(+unJtb l;F~vg"͚J80qR)䚾z ncDWew& ;NYzQjpt#K˯"8ѭPm[ewam)9չ-flYz2ddsTP؂_ --FuD.' --cmr5rƦA X/wsӰib7&+7Sg=ެw)Ô]C!C4Rmg:t#brg]cG]"i/ 稞l&B\ry7zǥNlrcs5Be2g-U쎎$ZGq˻wV)ls%q2t?LL'[- k;)s,0W]հw$՟hLS;=˥]\W;BX lbT$p$ %M˻nwl*]괃>&3]N l{PS\c S;;P52'2zyLdZ`ȩ0r.A%k~,YT-=<:):Ǹ֑$UmYYNxL7re=6 %B Y$E4Zo*K,*D ŋlgj@quu6x;7D|YޝX]#jɔђܩ.ٖp? 2l?"屃^"F^x.֏[8y;(A2{qne#2PW XwҤ~ƣ'ay9L(LXF*4蝣\ oV@c禊QdeR+jHo]EJo;վ,CMSW ?d!Lv|TOo;];TeoV0!'h0Cx )W=)%|^O C;ElU --eʁEL2GJ8;wZ#Q5շwf+q'UV誼31z5ulU_&Mx2RYsQL{Q4T\*Q<3lJesL0q%$97Y#=)Gh(dE4ZHwhYLɺqɽteWJƺ(<18HYk~vo-;K7a%7̽,zJ+ --*c_".,Ϙx^Kߕ]^2:5G&↾NzT<Ùz:Ca~!Hd"=OD8&*;w8qĔcG XqLJfffWwVfǭ!+}5 Jz`$[`8C1Iu/2Ug[X4N.$ctl-CI#E[%(q1lH}q IBMGF;2FB/1z(qYdF"E(ߨk:NZS))wHĔSk%#+ȵ+{'yްN2#08Nһ=ſ6Au+E@r/6 &gٷGq &_]&{$3hŖBR}ǫe|0HaգwN~^ --a;*WP}=r(!dPeG --3I}Ibft@a憁oC vI^d6˜(*̀*}9z7*3V:KDeu"|ZZ1@m@wxg2#ry-qsdufK9FebBH"鼖X3{= Ϸ`點ѻM|t9?Qj~adt7lޡz!$^LTXӑ:/#Ӵr9ܡ!BE-,iJV©j#L}3uGlPfN_ !qJԿ!kK&XYM0Zѻ2GϽ{tRjcA3j޽@ȅ28DNe`)s"A pae * KꅐP%"5%B|k뼸ʠ߄J*: ZwlމAP/X --ǗF\S.ΝE¨҈ޝf^ @43]`L7Bp?eo0'RUkʌaUeC --l@%;ʊ"5 +JjwwL j>;0$KJ@gmx@TSU5Ŏ&D8 --w ],ght-VNnXHZ2`p!; 6J쎫rY֑A2ZUu}Íc.ae ~i|e9[oXjwBҜc0ZFGaD:dwۈ̱&[;;Ch!CfՆ1R,6x3OήBxn퀺1Ȩuwz'DϐM^ I{> )=C5犅 ).˟DLZл P6 --2u~Sng^LEWo.fʃU7$0ҴiƠj>P+TF$ !t31x;n;&:ts<*6EVgz]M>#p_Ocv NygV NŶvcʾrbRµyiZK=~o_Q7rcUG;/%rn]źtfźug/9!vhZdv)O6,#:M=Nz5 $0=M^)5CTJtb".;J[m ˽$kKDP-E{i!,ƺaĵ)ԨC G()d`0 9@ HjGagK!JFY~np;0o. _-FZ!x(vzr4ln0ᚺZ0:WoR X5|E bHAlC/v 5}cҁx Ra3eUkYvciJBKKӽ;GVT׏J>[.OT^? gmx]Q$ |ϊpR:PТoEJᬹ'AQ 0o0KXǻw*a bwƒz! C3M --qطKxb!{NNJ=OWI_Ga[o,h)ȓh!]x'Nұr`r&+1-R7xB?f x70l9$Z{%Of>J7Q!jy-:ﬓUNxKs][Qd"̰u3bwlfAp|(* &ͫqjG >Ӽ絃̊ Rz'!.vKs H)_C`Bx4(f8!NIeuKsݖjS{7,,s^G --ZL3m: $Cvݼ;Vz7_;kJdeӏ˄Aec "T$S*`J ;Kā#/;Ͷ<Յ5a\k2%3ڭDjW~aKj靷-bOHGL 52n 0>5N Irj[\ztHir/y~fpL[Ȳm`Fu 1 OR ^zgd2)dx񑖙&;36U-ӒZ0 ,@w4L5ZFғ@L#(J @7ŻYH8.$cI;d^r,3쇥An!{l[dzEgķ8/`!M;o+Q4A0c(m3$Nڷhgΐ0;Tӿ@Lspw^FmaN+:Q 5ʒd7"4*Ɨ!jBB$Ƒv/fE dT*%=kGpBjZr8X;CJ`<\ө |cmTAמлp{TsG0pavu Rbd뎢BBXNs  j^Y Xl:H Z<+-һ rLbTfCAQE֐PwO&7Yc~s$;K\'1 T(Q`?R*;\H+!IbN G#.םywbbf|+:-KDT^_jm_@R.C 9n& ^`t-c* -- _]qJTP`Uy$Yh6\RM"#'j0HW >}V]M_qŶO?zk^+8GXi˽l^P'ĶQ,9魜 --&2@O_qDUfyhz]M>+8cw_1)6E^1+1,_G%l&2?O2 --Q"% ʼygVF8,/'3@O`q2&ķ}n`-9HX𭜋y枏paS(3AP`rKq`O@H6*7EzhXHƸxhY O`Ķrn^OA #.;IYj|hVF8{jYI:.#ɺveUF8-#)5BRbto$/M]n%yȺw'2@N_pq³?| G{~k4$  09@II @xVpxr@BH}Yf5v.ӎn{= --wk#GA(:rÈ3gzWk5^ڒV5b=nzQC:G5\ReL,hכ:n%X1Q{^lzWfXmߊ:V=of$nSi,̄kM ;:RDBLz\.G']fj ?~#qtKE%Rtt>CAdaC2I䎥A@{p({QT[oZYHdRrS+E6[˾6|F?f!ᳵٿH#lt#d|Ud zAٙN,4Ĭ727{#sMTN!5!<뽿 --hE.wWлYtQ"w/V4<.Fdja`cwR`y+w)QQ*tlڬc;~T&tAΧ& tPH. 圏5ޯ@K~Mv79 |#*:͈ Ww0G --^B.Dr] < --At˨QpG/h@B'j 2ruN%8msWD=TiF --Q{f0զ'< `ƟR5#LR De׷-%{c{pQ n@ h+K!c/ --XOĕ"гe\,iβbkayKXܷJ5tb^i5p]"\ |@߽=c`wDcw;9@Bq{סE@$%A*qԛvw wi"p3cN@&yB3!IE -- $aܣ*-@!Q8VW c@w<S9ȴUo$Xť4)U} -- 5 z0Ö]7?'*)Bbwz>ʳ5u^wsvӪ@tjPXt[)tC#p+;hHSZ.=m=NrT9lAwsTmP̀c9S+5WY`$TݤdsQs&SQ=1Jà].8 1'X݆v7$(tFKuZl-+[b5!XSWG];WjQa| 'BwV}xQ*ZoُfQ>H 3FjĻYuyr2cOvu=;N x'лR*2#zْqIb6M/LmGҨ6l>b/ duT?6v>;oRu ʐwLA{ "0SXeOa|CEҷu̿"_O-P<]л# Yh2zP~aEti2RKQUYÁx'D zPy'v]8&暴Fe:(Hc.pjder.NHw>)*}DI3!IXЙ1l޿ s7o --}Yski&1\ ;ipxpBacAGN?$&]j@4]eN8d"zWN(XJmV];rL&G.>7Qr2zj(Te+;Sw:j19L4C],q|Ѱ8?)\ A37 SAM{ #}nsJFCn׆n\@hxGRҲ)AwBޕ|s7Н K;4F\ uڝY\"W΀1-0rBlGhgUWЂycxAl s3[7;ߢw:e2"A2k :*mnajRzYPsv Vtшx']!Ad:ܶ&]_|09 -- 8UiHA@ʝ;]s,&Al --X0 p,.9ֆ'+tmnF|k.`L:v7`NtO$[T <[ߎ-W4j;iޅnpf9]$CRbsŶl 0=L]n̿}l[K< --;7ETdv udTD"&1?M^&, xgV3AO`q㕃p´p_OAiʼzi *ĶL+bveUE8+?"}j-t #ʽ|kZmZI¨udTE7n^NǺq [v$'2?N^^/e*5C&1=L[l}M>",9墲!6jz&ɼ{jSct3̿o^O@$.;HXhy!݋ziYIM\l} ~n] --#.:GVfwxq&1>L[k|³}m\M#-9GeŸw BQ`qraRC6+!{wɼevmŷP`p duՌ0o/ +/NkzUR8\7`(o/#wkw~1$93^F+T/A6?]"ׁnm>V9&F݊;IFF}T˭1^!R}!\TYFb ]t6O &y}]eEg†0wQgmt-"z#0W ՝ ILq5: q0 --{^F=U+]A>>@]&-6*391m[cg-P} q^˸0뎘-NU`!'܇yj0ت[>?$ R13/BمU(m{IE,noluKl=-JF]eH~IQwB)}]9wbYt_B<&@e>\w[ꈙ?c-5Ô1{U#F,S2fѩ__[ ̱'CY$Nk977$\C2dە/EpulawbmQy{7?v]o;g@ESwn_̩c"fؿ5aMjDM [lk$.NY[ S?BVzf z~8جB(ȉj Jl*#r.C*PH --BjXz --M`-ޱcair:л(-hn}'UkYQ r4Ĩݥ *Z8]T --zg Se=FN@xmJ'k$NkJG2,T RG zkUWjl0M54XPv|fG&"6o+ zR]hWsבYn*k<)P[=);!'gi_YoY0jqv%R 9iu+_~=b[Cp'FyECrл$ p%^4+2@ňG])E5zb1RT9H1yyJulJx_vn9eh2=1޹!?LgZ|\B4\z+Au_ozGjb'iF1;gDYHWXܪK!S {E~ZSY?"-[@*L0R~b*kt+َfq(ͭEhn"*wCsNpćtdki[`*뭭mIo0zg6!]2Ec1֪#S//N YUUH9K=]k>.muȱ!uoϣw@6ӞR7,/mw%e['&'䃤&S j15Bz{SлCOjMaeEBh+H@=? }ZϕBjk2OCBF@LSLhk22=H1F_FռRM"+i4V] 8#S鉫E#~ 7Jd*r!zL6~QadRbzbADtc>7u>+S --)ȗ>A)faLZUhQōē0O<*cm_V_u:Uk:6t|=X(i˷qd9$f:!+6CQaqL\l|ʽziXH:-$w'3+7DRbr׊ygtcTE8-(3&o_OA5%0nueV*5BP^n~qa̿띍|l]N%/;HVfvŷĶxhYJ=1",7DRaq$)4AN]m}raQB4p`'1=KYiy\M@:GVeu3,du̿|̾~l\'2>ϦNiYXYJ=6#,8³p'3/%!*5AO^!,8ɼD7,(2>LZ̿~m%0}m]OWf+öyiZ$-9E.;IXhyufWI"+6CP_n~(3rbƹ"䝎~n_QC'2=JXgw]&0ķ{k %/;GUdtõQarhYK>2'#-8ERap˿BqbSE?M[jzŸvfĹ}n^PC =JXgvzk\sr)4BP` XH<0&&2>M\m}TF9.!*, *6DRbsƹ~o_QD7-#k}53$ @Q7PGA aA6çZrdDM:U'p8|Z`%(SFNc:X#:e~$u;7x_Tu"3H3 |h1㒲ZSO]4$0 ի]h{`zWBfR/]Su,L>}HK3,Ì$k½2☁ΝI=t 맦Gwd;zHAԵDNܠj V ^'s &[zTT 5&` ejjA>̡)|A=̑Z{iƹ6LA\; NUw@L.Jye9y;Bc_|K(io 4Z@jATђ39 2E@4d^ևn9?]-R>z_|jv S'QIaD#_ D^o߾K_A -! --mp̵\#'^ij WWT;Iꙑz纤@n}WA F[ѭRϨ3|Ӗ"foCuk@iaajAP٬%y2;z*YRG#,].8f PjisnEXdW!?(CC --űC*\󼧦;ITcDw#Z!,*"C#b:"Ѧki]yvHUk4=rY@X d -OXeZME;m'п.s!ӭ8Uq --+M~˦TH*X)W }0hLcQqnCҰJI>%5 -g}BQHaN3¯ _jO$9{H!S97T5!bxߎk0 --)+ЁM(.CfîpaV8Z$Su,fX --l=fN? V.V[C-!'uS2TV,],1ȍRB18,JÕ<{Px[s_Cʉ 'ҺFA2-:CP%m5G_ --7cT>+I7lj{?H>inABB4*b(egʱE]f(iA ;Bƌa9l5<>Lr@>8(GS֣TߢT)Rm $l4 b!p /:Ɋ[ v2(e_G"xw:LTt"Yk:2Vy{G$O,8T.Y-a>+qRӠE#e24qw?:ҩ`EtQ9=16R)XsܽVO+?.Kd1,|7K sm$#vf;ЬRva>]Q^0feXP-M!ѽY`kRco U+`njU/jTI1SQm)N[b9 zT --mXćY׫Uйc'%sm8T0u!iA(c;yA 8G6b]ؙTb ;g 2m]XƆi564wJ~C!LoP!\,'&5=8*^FR34PˠeHaz=ilл!yKN[" --H&mVdǷʰc9B --t-Fڗa#wWԺ. e%$&{+SLi%2X(z;T͛.c2љі8(jWz}|I(ȻZJ$/l]OKYhw~m]1ö'1L\l}teWI=z#-7CP_m}  *6CRaH 3BO]k{y$.:HWgw/ix˾'2?}n`Q !+6CRbr(2=JWetz --$.;HWgxzk\NA6'1JXftVfvzk1>KYhxĸ(2=IVʿ*5AN]kŹrcT(1L[j{~p#,6AN[iw˿r --!*5BP_o~MZhwwfWHTct+5@MZhvƹ?hxLYgu)3@N]"ftŨ=eu܉4?KXft}ym n~0&#+5襕LF  F1Q``EIa@? ^86q--\#6wzIg;3I_ ƨ~C^tZnOH';6.XC hWQb<$Y'`/i5 I -x\amw}׽h% :u%SH`N5=;RN7NwDHX7OCr.qKm?Wwh D:Inmûau"jEMm6U}.bMBjR*BB$\!ĻǾ" v63Zu݊jx~#NjEďARw WkLG~xWwfp +I_=cjHӸ+c8TGK! xiF|B&L R4}1K 4ЪjGն?~ypeIû#1 ;Smp3Ҽ[Ô@u=t@X'&2֫`+}2a8&5Z\ --{ Z?ٳ VVm~%c !GshT^"gTW DxǶJj9bW|1'/`O3ɩֵRExE~ 1b:B>'VG-ŻY,-y^n0EPZsrcra;±TƓҕ֎^Іc9rL](7n%N=4Ug,'NpN$w8Yچ!:#m^ m1؍6 H[if~k`n>s3R˜~Ԙ {n&s\w~5|mŌ?SZ"Y?yT?/~6ryj(a-IL,jjTY=GFW;|/;3n#d/Wyr̈cNFwټ nޣ,ՠXٲ}=;h^+2Շ0iNSX%0#ٖFp̝~S+ %/$[=#'X;CDZA&#C{wI; ž@&ShK2,Z͏:I`:F̱ vs-~A,9̓9Tb f =/S+ͱ`-<].b --29  3nGXEXm!N0*#_]?X͌0~Y;3)= 0ܽwr0S17O<:T%*SM$,) --f Sh* --ĵ]+m^ ;ƯkY`]N7KmaTM2 _0XOm3M3C @5Vp] cB:0e}N40 GA/-7ALI &5Xf+f@ 'R03Ըoeh/ǻf~?j 'ıaBj"$JpeOFY8".*n &dL\v26#-߁fc]΅\HF --j8v --32gcүaXe2W2j_ y$F{ԅ [TBK:v/ [>z@ %/[=6J0?jsiE[ X;$eF;yAբevf 3c=E-H`c6Ą )N0!ᡫa~1@1%Wt$Jܦ;35m_}m/#f --, .GHG6&K8e ڄ/YdU+ gNbغk;jvsl2;J>鞺gˎNr*+)0CFov --%bݽHo[ --199%0Xb3.jm'NIP`R1cai8n/ԉ S\Sq/C&9m5 I%ޡ$5?_& Rd U+&LLigF<>Bc<7Za_ --1π=!Qǖ4_jCEqj樏̀c$^h pAV;N39ǃhbviî(3 BZfckgvZ}lPN{&<NQy_mc-cq; L?crvBAJU-uRԯO(buPRkj̍!x~d#Rd(vl XS?0%fZ[S;]$L2mzgDkF+Qeow8אAoWp箸aNއԑB_ːw}& *Y;81V*}=kl6vz6ifJe 4AZlzTPƞpi]"U/SRq%z+ EuN^kB~2̂td8@ Lǻ}m{m_R #,5@LYr!*5B 6v-޲`SG$,6AMYgzj%0;I|n`S$-6AMZguB5*(2?L[jz򦘊|n)-7BNZh-}oaTH= [hvqʿ~pbUI=3*!8CO[iw HcVI>3*"\iw>KqcVJ>4+" &/9DP]jx篠qaRD]m}rdWK^ky˿reXK@5,$ (K>2%/:sfYLA6-$ (1;FR_lzŸ|l\N@4Yh¶tgZMB7-% !)2IUbo}vgWI<1&$.9FTbrwj]PEb5?JVcq~yj[L?3) [huƼ}pcWK@6-JWdrƹo`4@M\jzeYMB8.*s"*3IUanWI3(FTbqøK@6-_")1;EP\htyiHVdsźeYMC9+4=GS^kw{(2>JXgvߎth\P}n_Q)4wk^SH= ͫpaS+5AN\znaVJP[gsrcUG eҴJ!  %!XAa 5q+;MwM0cSc63t|G ]/C#̌۟^Pzi*>nFo-~"}1"H WqU+Q&2`[˘ Vwh2ePa] .U~(Ω!]b9Xl w @ ѻ»Uʼn]q ;w}.ۑ8W5f,]lI_Lo_5ڐwBz6\Gd̛w ;L&ifB$ɫ'w}Cft6>vdr!pWˠ.y^@-ffT"@'H"eQB@ęcRwZR!:G~jO0 1E . '`Y --,2H+pMynSV:[ûjBߍ=sϕKg&xYʰpdW}3Ie+xVFH&t;+^.Hy);.%J(r7pFBՍ2_AϬ2!YmK$w0cNdPϹ\Ur@bIE@>Il.M _neLK2 ޅ^bU3ugƘkG\.4ErDHxb:r B:85<.>$޵ |s/bUբGQiF*BfoNiVҭ-bRjS'VwV`6Lu; F-OֆvjrDu`-;dn0ۘ>uwAʻ8DPhp;ZRRu% !^)f<&2nxD>yWJ}NʼHXxfj --j:6XV3Q+5!! --$ђw!56ff$A_"dw'jmJkϰxFT`wA4MbFm⻼~\Sx)^rC ߅0)S^&:Tsh:̺!U2 m`\eT); ]d_3.GH0TfLvN1Tc3Z43da.Ȅy;{w[%ݏqSVcjk[-T3kN\GO 5W\K RwT&gL)xjkx9)Z+++<ɻeN'xdχ桟'VpwM|Fl;veцYr5T+ "UiE.tȿMkۍM8׉E4e* ق+vƍ'l.vwNT ۴+h-reqUsI .!wy`Έ%ϸ@44'&x;PD$i)w!ezDJ޸;Q}t;Ji+&|w"Ķu Nw3¾o*S*o-Ї m 3;M[G]-I$4R8mb6ּ;Admx7]>{EL ꘡w-KpRӀ5-wBKs`W3)  %/:FSbpȾwk_SH>!(09CLA7/' #*2IS_kwXg䦚ui]RGALWbn{ҶLZhwﴩylaUJ@6.&"*2;DOZfr~ĸ[|pdXMC9,5>HR^iv ĺth\QF<37AKVamysd^m|xk`T2:DNYeq}>2(n}{o4>GR]iuԋsg\QFhZLUcqƼwk`UJ@7.' #ꤖxj[IVdsɿ{odXNC:1&-5>H˿ )2>¹G=5!(08BLVb!)3?KXfużxlaUKA8$+3GQ\gr}vhZM1;GT~rg\RH1:BLValwwh[MAbq¹xla &-5>GQ[fq|ƽ}9BLV`kvxj\Nrw'.p|=ż/'!+2:yk]OC8-$VmC*ż7 --$+2:Czmb\h]SI@8#|;DMWalwQD9/%xmcXOE=4-& # --X峩~si^TKB91*,6A =EOyo.};$*29BKŽLC6>GPZdoyW{p#DMV`jurƾwlbXNE=5. #R\fq{ykJWº}sh^TKN!'.5=FOXblwƻPDǿyod[N %,3:CKU^is}ƻ -->JVdrĻ=5.'!J` `DX'AB @ R ].ψ>۝겂2`.~e  --QnhZ0hL @JlM@=V;_I}Xzi;DiF2Acqu)1;TwT`w y@+Q\-^;U+$#w)2ܝY -->w{4#b7ȩН=g~hS?.ȒyiX;_ɿ1۶e)Y`w#u 3;NT1>R,j 杈%; alRwCV0CY+",tǩW`wnzߑUc_Ի@t J;zIj.ƹ]IT02\Z/b@rDw.LVw^n~^Ӓne\,ם%+0EA --rwΫ޹S{B]+xľ|Tto3vk&;J1J3uZ}[x@QeAntWک9ɻB<0;GӇ3MB%e]k=hq< "ҝ_trve3؍%KyBYcS2"_P;Ƕ%y7n{J^Iw:$·:=MwzjT4=c<"Qr ]a I|k}]#J+"ޜA#B֛K;|Iyk 1/g8:hy5Դ~6#J3KLy=rw1=ߞFǸ^w^ߵ/ -- JE --jd;O/#S5/Ih2+?{B;2nf`٭Myys8a&/Hˉ*cߘ};R6j5C;}_@2Ϊɳ}v9)2BȝzSKx|G i"Rb޾ 8Di_}WjT/؉Y#Twd8z<Ơ-CSd?"u̐|wT}rCwůQ֮?s%b,Cj%Z:DNW| As*IyHdz8.\D+L\L.Yn-2>HA uS~==v.F4MmaoM[_Wx"qr;S]f$EQ4:Jv)TgCpJlv]'QZgw-G Q3΍SL3dO'3w}hc(͚{@|`VUS5)dԌh;ZR͊;pl_Q=&`~Z»1 ---~jƣww`]Wo82mB`,1{\sI\<_А;{2SөНew wBDp6D ͌(4)%Ѡz6ZвtBJ3ebit4s --4w --ʌ]չfWqy VbF --($HQ[eoyؔxj3>JVcq|rgoa"(.5=ENXakv񮡓xj\PD8.!*3>IƽyndZQH?80*# CKU^hr}i\OC8.%=IUbpú(" $*18@IR[eoy撄wi[)2=Hh^UKC;3,& #)/6>vh|Žyoe[RIA91+% !'-470) :BJS\fpz·;}si`VM %+18@HQZcmwtfYLӢ{qg]TKC;4-'!#)07>FOXakt~seXL@5,#lyûxnd270)$  &,2:AIR[dnwȾ*&/8CO[hvļ{qh^UMD=5/(#Ⱦ PYbluǽ"Zguºyof]TKC<4.("ż -- $*W`js}Ǽ2)tհwnd[RJB;4-'"M$)/6=EMV_hr{Ż$,6@LXerƿvlcZQIA:3,gu|naTG#)/581 P嗉|obUI>4BŽ, $)/379::851,#(-4zm`THLXerĽ2,&! $(+-.-,)&".Q{򸬠yk_RF<5@KWcp_VNG?92,'"  "#"! -- $).4;BE:1( n|WOG@93-'"  --  /5;BJ|폂uh[OCS`mzļh_WOH@:3-(# %*06ELT\dlt}𺮢|5,8CNZ敌{rjbZRJC=60+28?FMU]emu~%.7ALXƶ|skc[SLE>82,:@GNV^fnw^ݶ}uld\UMF?93-(# %*/5;BIPW_gox\P#+4=Hž~vnf^VOHA"&+17=CJRYaiqyǼC8")ſxph`XQJC<61+&"#(-28?ELS[cks{ź}pdWLA7-zrjbZ)/}aU|tld\UNG@:4/)% "'+16EKRZaiqyE;>IýxpiaYRKE>83.)$ !&+05;AGNU\sgZNC90'R^jwž{skc\UNGA;50+&"7=CJQW_fnvĹ}p1:EP[}unf_XQJD>82-( !&*/4:@FMSZbiqxz q~»yqib[TMG@  $IPV^elt{ɿ=Vbn{Ľ|tme^WPJC -- "LSZahpwƼ4>HT_lx˖xpA;60+'#  $)OV]dksz~reY̨r !dH@@dr 8 @2' 0Y1 --B ! @R-`m9W?΃KkM 2e e<9-T%w=8Β+pTyx?$:'_$ jje;u|IΨԻ_c3ӻ xwZ }Rv L]s .rCX.| +jߵ ڊlWDSV/az=zo0h+|}|.;FV?RZ.8-0hvTeJ[^E܁IfΏ1&z;`bPP fJ ֩՚܁ŴR'`q#jq;5wܝ3]/gH7%6r V9n2|GfeW~W6=OD2TiױfXd*:WQY`w.XM*ws~''&JAv}媎 FE[k]CSw(P:;mCcvbwN8cPw.#ZfF_"ᅣ>5;cpWe4$P#3rxQP@ ~[nl(q^vS2ȩT14~+F/`M:suC8Pm*yXS(F_DaZ 1+AG>WEHSc%RF2" ;uDgqP#={qb ~"q黎I›Va vj'P 1]wwW=g;f4w 0.Ť --w'ƛ[ f +v7k(x,<sY;9]PG26C|Mcz>uШ](Hjvٓ$FJL D0Dݲ=&rk! `%uzDe0~ p!R|WһB$&߱ӚzD(>4V8MD~#(YJȌڝMjLNT]vu>ÍT A'y1Ύ];K u*#;MM"R].5;לj<&ip9F Zy%B5(gK2m`é8 g;[Hc[ӌ޽ck[(@~3E(N1y\"U#l8t2NTF7rܩc --h\jY")N[@NjVtM~NqD:vf0(W]W38;v:M4tYO-EޕE uJqW2&c= {ʻiƧd36"? WJB=`TDSvy7[UU:pw,54DBc{6w9z>,y0qS>UϴS廳yw NqE uoxB}h[bwtma)t --䮻Nށ#&lŦ!5Z6g#jׅ]Ol= Ni*NU;mItw.zݕQ@):mq fW@}Q'#&Vb;ǎ΋<8+Dn~!t1Rvǩy!"> 6 M$6*PeAxBP]0Y.,脝C€qKUNM`TA4æ|=Եm~8Js$@8 --oyJthҒЧp*c]f܁|'? ӌ!qZq`?d!;d5ӷjCY $ %#mw՞wL --)6,U+w2ϻ]GbţS+,);U;H_" Vޣxy%j:׾ dOQ{Or*,=1_w#V<}U6CVpnߒoq3Yķwen{qv[ wq`yD:=2dw'#rPw]MKOH$^(> `𺸫iߊx$[`'|Bz .ßS/]oN, owfrA[Q c^!MgGߩ;VA*.y,B}W{wKywl,Nw q,KL0?N]$UF}ɝ8.B|VI]{mUKw[N'&ŔwJ`[f?caqw^r&e+6} =K%}7I)?+ݢeT/"qKi*M?*w㺼[JNq.)mn ev6̳d ݑMr%wt>׫:lyN3-{m0wĿJ4`zQPqj3= 3mǒwZpU"`d293.*%!#'+05;ov~{obVK@7 NZfrľNHB<71-($ &*.39>DJPW]dlsz7ALWco|{tmf_XRKE@:594/*&" #',05:@FLRX_fmt{C#*3}vohaZ2.)%! #'+/4V]cjqx{obWKNþzsle_XRLFA;61-)%!8=Cv}xk_TI>5,$K޻xqjd]WQ1,($!27ITܸib\VPJD?:50%)-279 -- "&EKPV\biov|żvj^Slľyslf:51,*.Jhou{¸rf[O½yr?:51-)%"  #'*.27ahnt{cWLB8xOID?;62.*&#  !$'+/38HS^jvysmga[VQKFB=840, 6:>CHMRX]ciou{XM*2;Eztnhb]WRMHC?:62.* "%(,/37<@EJOTY_djpv|Ż`TJ?68BLWbnĿ{uojd^YTOJE@< -- !#'*-159>BGKPU[`fkqw}Q%-u쫥|wqkf`[VQLGB>:62.  37;@DINRX]bhmsy~Ǿ{oc --q}~ysnhc]XSNI-*&# "%(+.26:Z_djouzĻ/8{upjeHC?;730,)&#   !$'*.158<@EINSX]bglrw}sg[½~xsmhc^YTOKFB>:63/-048<@DHLQV[`ejouzƽzncWMC90DOYÿ{vpkfa\WSNJEA=!"$'*-047;?CGKPUY^chmrx}ùvjAKU~ytoje`[WRNIEA>:630,)'$! "%(*.148OTqv{ȿ}qf[PE,4¾}xsnid_[VRNJFB>:730-*(%" #&(+afkpuz䱧ymaVLB8"|wrnidJFB?;851.,)& -- "%'*-/369PTX]afjoty~th]RH>5 .6@I¾e`\WSOKHD@=9630-+(%#! --"$&),.147;>AEIMQUY]bfkoty~{odYND;2*#qxsnjfa]YUQMI2/-*'%#!  (+.0369=@CGKNRVZ_cglpuy~k_Ualw}ytpkgc_[A>:752/,* $&);8631.,* !"$&(*-/247ILOSVZ^beinrvz~סsS^it{wsokgd`\YUROKHEB?=:7520!#$&(*,/1368;>@CFIMPSWZ^aeimquy}Ļzn2*#Ydo{hda]ZVSPMJGDA?<:753%#!  -- "$%')+-:=@BEHKNQTX[_bfimqtx|䶬ui^TI@7/'AJÿ{xtpmifb_MJGDB?=:8641/-"  --  ,.02479;=@CEHKNPSWZ]`dgjnruy}{odYO%,4=FPZe|yurokheb_[XUSPMJHEC@>20.,+)! --  -- (*+-/02468:=?ADFIKNQTVY\`cfilpswz~vj_ ")09BKU`kv{xurn\YWTQOLJGECA><:875310.,+*('%$#"!  -- &')*,579;HKMPRUXZ]vy}Ļ&oligda^[YVTQOMKHFDB@><;975421/.-+*)('& !"#$%&'(*+3568:;=?ACEGIKNPRUWZ]_behjmvk`VK }zwtqnlifda_\ZXUSQOMKIGECB@>=;98754310/.-,$#""! !"##$%&&'()*+,-./1234679:<=?ABDFHJLNPRTVY[]`rux{~qf[QG>5-& &.6>GQ\fq|¿}zwurpmkhfca_][YWJHFECB@?><;:976543210//.-,,+**)((''&&%%%$""""!!!!! !""""###$$$%%&&&''())*++,--./0123456789:<=>@ABDEGISUWY\^`bdgilnqsvx{~VLB:12:C¿~|ywurpnligeZXVUSQPNMKJIGFEDBA@?>=<;;:988765544322111....-----,,,,,-....12233445667889:;<=>?@ABCDEGHIKLMOPRTUWYZfhjloqsuxz}|qf\QG>6. ˽}{ywusqomkigfdba_^\[YXVUTRQPONMLKJIHGGFEDDCBBA===<<<<;<<<<==>>>??@@AABBCDDEFGHIIJKLMNPQRSTVWXZ[]^`acefhjlm|~ݢVLC:vtrqonlkihfedca`_^]\[ZYXWWVUTTSRNNMMMLLLLKLMMMNNOOPPQQRRSTTUVWXXYZ[\]^`abcdfghjkmnpqsuvxz|}ú[QH>6.' !'.6>H~}{zywvutrqponmlkjiihgffeddcbbaa```___^^^^]]]]]^^^^^___``aabbccddeffghijklmnopqrstuwxy{|}Ǿvk`$*Ʒ~}|{{zyxxwwvuuttsssrrrqrrrssttuuvvwwxyyz{||}~¹{pepŽuk`VLB ֨sJ(1!)s-ΪJ%n@ Ȳ(3{Q%=>^xHFcӉw cĺ3cEUƇC _^И ɞ|N rP׮ ۙ.юzuKV)xF-ސ --Ɓ7 Dn} a٧\ӟ6LȠEh[ex%O\4W@=uڂpghk7;q!yưxQ7x7~DML`nte-ıh2Y$H%+}cv2p"wvN !O4xy%._}q;Vw{7ǦcDWHJdW!0K lԈB\vsw[nMjw{x8vΨqhnDj]3uZ8 };2b|dCw`pgxo0iXϿ#gWZ/^U=+uh%| --|jM_ Q)l#)L!u7ɵw5vqs ^,%.a*׀ـ5PD"~I⺄{j}gd9]yGF;y'51x4agw.ZmG۫K-a[P-\彲Ze{w# (#ȸHwvYb,3ߙrnΘ/; 0^|.!05is~IH^` 뫺c+iNLXZ}kf+R߮fDHEӴILx|C:n-0pOwźdж3z ߁y}p3x0Y !se5#d.gi'B:زe<SPg@ --q'vFbG*W#h\ڤ f(㙑92l-)jqE26 ܉+Ĉ NK܁Ndb --m;hxt*V&3wQw`$y`'K2^2)c&;ɰtv_UkgPfq,G͈BR^*8ntswUسv --Ӊt p㋢S?$Џwo||R\0`1ǮY8WJ]}Юӧe+ɝ[PFp' a 4wJ_0l0EZ3(wH1Nx [ JeDf6UT"9CFx:_bu;J@& --\Q%Йl|))!ts*KV rk]C=ק|B*s!|6(xGmU(5]BrP8@HOMe P829(кkzEӂ3;]𒬬^>-SQe_m G 󔑃lkQ,gV|f < 6 :S '<:S]!t{Χd;@JSTt4dVKr;5wQ~c><|#: -- q^TAHmw`J1ΓNf7gftI83Ϊ<-yaLS8T3TGt5FPZdoz锊ti_U9A正yncYOF=5  &-4=EOYcmxrh^TJA81)|ꌂ<4,kvȐ{q70)" Q[eoz+%$+2:CLU_it~ƾ !'.5=FOYcm|#*18AIS˕vkaWNE< 4tŽzoe -- nx}si_ULC:29AJS]g౨lbXOF !&W`jt@81*#")/7?GPZcmxǿ}L+29B("V`jt~ûxnd[QH@8 )/7>GPYcmvϙ{qg^TKC:3,R\eoyƿ~tj`W-4;CLU^hr|wmcYPG?(/6=ENWajt~e\SJA9$*08?HPZcmvL %+2:AJS޵=6/LU^gqzƾ0`is|xI $*07?GP䟖ypf9AIQϗ_V&-enx»`WOLü8#^gqzļNW_ir{ݽwm:3 ?GOX`js|Žxne\SKC;&+29akt}xof]ULD< &,Yypg^UME=6/"'RZclu~>70*$ 4;BJR[dmv%SCKS\˕`XO`2F>ezi CbCݾOӽ%"h|RXۑ'+~H*| --} --DAM@ H mn/#> N vSʳk,]A '5U7n0$J*s? 23hM@Ango&.wc"]:tȻ*9P+"!\kv&zL\О"?w-cƴis*oy7 .c;@-MO6ǻ#=L z2w<P'{uwH --F .r6~=4w.`]a~"1: 1.Hqf 6@+K;"ٻgFO)rp)>ѫHW2 --)cw>wE)?ޤ4+z%h(e8NR|zW%.ٌmDi8Bqi;Ohdn0щ_kf6cN`kE>?Ξ$-psݱ6rӨ22E:*D9].Uw{'ی5H#+]8[LL]]FyI%FWl4lbtw.hfEY9@rОNۚK/I7K>T憫(o˘XDyI ojf *coDNJϩ2О2@-pwyf?]]9kMy4m/wøXww;":֓U]w #bqaMޡ6|LE diuN]d/K;8uᙄq"(nZte3 ^FZԙO79@H|Aڢ #@Dzڪo  EKcgwmd% όῙ 5_LOE^A R7rd؈/@g̓\U6t7 --:6P8 /9*^)XE";0qdۣ>7CP"ab7b6dAADQ>Oz)_4ZzE5]㾾 -- --KvmpԢhT4 wCZ -- qO2*Ygh {m#94ZÛEV.0Uݐ>R3W ӂQ>N- 2w#vVmś (<ݡ1@]ix%Tޙms <O;gΎNv]"x<3`kK'C4.4:AHOD=739vƿz'\dluމy$  S[🗏wog_WOHA:6me]UN己[TLE?82ͧyq ELT[cjrzſg_50+17=DKRY`hpwý{tld%*05;BHOV^emu|xqia$).49@FMyWPJC=',28>gov~էzr!&+06CJPW]dkrҦSM&+SY`gnu|kd]VPIC=82-OU\ԶYRLF*/4:?EKQX^elsy¼[ #(,16CIOU[agmszd^ $(,05:?DJG.!$(,1yؠMGB<83.*&"!%(-16:?EJOU[`flrxǯic]XRLGB=83/*& --!%)DJOTZ`flԝoic]W+' 5:?DINTY_ekþhb\WQLFA<,15SX^z}wrlfa[VPKFA<7$(,049>BGLRW\bgmsx~Ѱ_ZTOJE@;7 +/4v|Ŀ1-)&"+/3JNTY^cintyᯪ|v=950#&*-16QW\aflqv|ic3/+%),048=AFJOsx򾹵VQ# R!43A ()0~h'Ab A2 d+ӖE;a=]x%?Gr Ĩn6[~Ď cb3<[JJt) wvtݔ)±0f%h7}wF; --WEKwb[Cq `wk --o= 0&8CjUpETF󳦂 --K2^҉t-((A@ۍ$~c޻/x=n'պ* vsr*QRBSkI*ILIpfyGFfGL衄tND PeE$c8+2TbWnj7_xr>u>mӌŃmQHca8{m;*B -TNO\^5/g(Q: 8`au)b<5ď<#XbyO~As3,=eW$}A(djQLbt9?;B+~E(FC&%w+_2Pv+;G?Dca)as:#{a .gCM)Cܩꄥ\,*C6K3%0 cZCwN>3ɘA=|yYpjS׶hc --b`Ze2j;(F!`#1eYH94h 1aMlH.{'N#ޯ5Of[m 9a#|760E+ rӭ; >-qVN^r0s,~l|@=ܙAt2$9m{Zg3[v1uw4+<|ב G2zjN]x>^~aa5E]w9H[tp])U|2Ö!6I;¨ A[zb`EG3,3\:POyq3AՓ4 --Ui/t8:1Q "ꮧxЛ=Q&>amXqFHtZTHBAPEC4DĬ03 J 3!mZrJone --F"Hu fCnx,9@X3CPc% --BƂx p7 uw;GCSeIqJ1_|8/"Ro ܍TdQ=V$ pN+/U]#.DK@`D<;_yw%=BMH4|x?@,ΓO;+V)/Ygbpry﮺YT^T/6P4,w[DjP:KK8w-w#[(#&d(U`@Pvw5R^71dDIZwx\Wn7wqlʃ,Qy)n&dp>,̻ӤR2HΥK-yrg4Uv3f 7?6 :;Ξ43Q aNi|Vc$GrzRe --_#wAzca'wXCһp$rdJ!~u`dG%a2 ;+ ZRv3qB碊.YD]@ --f_-et2 --endstream endobj 27 0 obj <>stream --Gz*D$,kaTeIj韆KMI4Wx+\P*-H <­`BW 1so-xj֪gJwyѾhF9p op-wi'S "xTեS-1_ɖ8XqYANޠ>LJr67:萫m /v@\wV8$L]Kvg]|)VH=;1+xZ34T -- !$'+/26;?CHMɱwrJFA#&)-149=AEJOSȱid_Z:62$(+/GLPUZw|jfa\-)& #&<@DHMQVZ_din¿upkfa]XSOJFB>95 -- 9=AEIMRV[~ytpkfb]XTOKG/,( +.26Nmrv{¾oP "%),/26:chlquz~пea841-*/3MQUZ^bgkotx|ȹ~dGC?;841.*'$" \vz~Ǥ|xtokgc_Z?;759<@CGKOSVw{ű}yuqQM %(+Bhlptx|~zvrnjfb^ZVROKG/0CGJNRUY]aehlptw{ʼ}yPLIEB>+!147:>ADHKORVY]adhlo|xuqmjfb_[WTPMIFC?<*'%" ,/258;>AEHKORUY\`cgjnqux|в~zwsplieb^@=:741.+(&#! !#%(*-0DG^beilo~{xtqmjgc`]YVSPL,)'$" !#&(+:=vy|~{wtqnkWTQN<96%(*,/247:KNPSVYo±|yvspmjXURO;8530.+ '),.0358;PSVY\_begx{~|c`]ZWGDA>/- JM`ruwz|~{yvsqnkifSQNKIFCA><97420-+),/1358:;9642.0246OQ_bdfhjwvt`^\ZWUSPNLI<97531/- 8:<>MOQSUXnprtuwy{zxvtYWTRPNLJHFDB?=;*(&$#!,.023@QSUWY[]^`bdegiklnpqstvwxz{}~}|zyxvusrpnmkjhfdca_]\ZXVTRA?><:86421/-+ "#%&()+-.01GIKLNPQSUVXY[\^_abdefhijstuvwxyz{|}}~zzyxwutsrqpomlkjhg^][ZXWUSRPA6420/-,*)'%$"!!"#35@BCEFHIJLMOPQRTUVW_ejklmmnooppqqtuvutqppoonnmledcbUTSRPONLKIHGEDBA8"!  1345689:;OZ[[\aaabaa^^]]\\[ZZYYXWVVUTSRQHGFED=<;98764320#%;EFGGHHIJJKKKNONKKJJIA@:98776542 --$))*+,,-.//012278899::;;;<<====>;;::996554332110/. !""#'(())***++,,,+++**)$##"!!  "  --   --N1Ff@ 2 0 h:`4OC "doV ʹMRѻQwnoezdQ <]GIMٜt Ji_$5 ]F]Fo:1hU-af̌v#f!t[a;2DDg#R=@)^(9%lj'e՝N2qqEonQv[бrrǠx=,Gge_+Dec[ԋkCt<)ך٦ß6VNZ5U+QgcyOfKD0mq;c,!-XaTsȐ<)~ؒ@^~p!Ux-^T;N2\팷tG{a-. M5L"{F0yfI#ؙ:/mº@ M;i61zRÝ "cIbj30PQAg/F#Rb, ih׆ ?'Α}p --JV4(e8(7*8g2eNn_oes=*}WTpʃNfvi: gX+M`A8%DFd9Jb2@69;/HŒW,[х9x?lƤ!@2 --_ $9U=p 9 --A%'ևo}( hD8ePuKxuF0Nr(VDU' -- %sb"{ --Z{9xRym ]8;v<{P --\"7`fG]Lh%ʎC?!Abi (V@]ruv hVb"e26.-Hz*6X]-mg<"qG)JnjB&#9󼑑'g6e/ X~t327,SjQ DHm'2`e(]Eq(|bH'cU-l;MM, --biLT<-Pyv3 FBHc;ҕ:ZM>kX(8;o {@bs/d1~Taw;i>{M㫷c]T!%d@v={Ǩv=Si!o-ap@ĪY'Ԡӆxo.n.ĥ#_)riB|,T(#TChe81V?O^ IaB\۪lEQ C_p?7w]El2\xTgL̄u-O 4]ɾs(ʅ">F ΢Ce[x\<3r0x~7ɱ'0ͣpu5sAer,XA @h˃Lh:2P%0T&.$,MADA" !#,#kƑ8gEcB B2 BZ{'?9a6MJ?]@ -- If0TȠP\ EQ\62 --!AndOx~E6'<q&ᒡ\ 8 gÒ0`Hhƙd& -- ֆȝonez\ou~lղyzY,^b>}^[YrU>|T>ĵ,e2N;C7WH25ML28FFJGGInd"dG{$nsswT --! BXX(D$QBR`¢qApetPTz !=GG.U4j.;Cܯ --. --] Jz_&gbZ`r>5i8L[X9T%K ㈄ԠVU --%aE>" 3v=-ܑ1 Sc!Y@M-(ySXQJ3*6Ol)r&`x9Dk,p֏1;@h2X "8cc"[zwZj=f |t+󍥤p+mDvg,DڥM5kY:K&YOfi=]2?iX]9f:B i.%?1lb Bd.ܘ`t{ $rs"n.ɫGxq/ςzDm+-MذS;D((((((((((((((((((((((((((6qR^?,~X_ϴ>Cϲ3YX1u:LW%5Rž3?K/}@@UT -->ug(((((((((((((((((((((((((((((:PhZͷW9u| ϗ?B?_g?~+{hS?'oKA?8}wz --?俆(((((((((((((((((((((((((((((:PW׎o_>|qQO$K>|;^wʧg+X¿|qS?o2ԟg>*(((((((((((((((((((((((((((((;P!qgO $~/|K >9|x/_C|c{ħ>N|ND!7WoX|9n -->c|$yƇ>o| j(((((((((((((((((((((((((((((:PS+4S]O!_AwOr| ='i|K_ -->`.z>W|BP+_(((((((((((((((((((((((((((((:P+%/3̏70ܟ^~wtCoWo+W~ɿ|T4{5;G_/(N?|2y^#3ɏ(((((((((((((((((((((((((((((:PǞ_/=y~ GiΗ9?r?&S_go6l>?DH+o'2Yd(((((((((((((((((((((((((((((((((((((L~א?4\AO3hRzDUz{unX{m0I 7z+ՕƊSMęßҐ!J!aohpts Pu v/XAO8A --PL?P;!Bt=edkNA~JhCr->Ф]@$ A. F iǬ ˢf 4qWX9fA^7#YX0 ^g.0 |a@۳<|^P'CKvvU).;=)ss-M@Hn) (((((((((((((((((((((((((((((:P 'g[_ --?k~4oAk⧬X?b*~[|ooƯV~W?~RG'Տ7 --((((((((((((((((((((((((((((((;Pj --ɾ --~J~*~ --~J~ --þ --~J~j --~J~ʽ>ʽ --~J~u}~(((((((((((((((((((((((((((((9P/V5V;VGVMVSV_VeVkVwV}VVVVVVVV~VxVuVrVlVfVfV`VZWWW,T((((((((((((((((((((((((((((((Y>hAp!h!xv~hg@ DѠΫwQ --αQLd'Z&LW[0mL#J@0)._5n>Vnno>oF^pҾpf!f+kXD((((((((((((((((((((((((((((((?A!TPDhcD"g @K|KV3N+PQmz⏖Of-:Υ+*t'ێw:,vLc,@z 7`RCi}!PH+R5M]Ìmr9"lǟg׹6 H3|ϲ78~Ek/؀,W@MgYB2#>CJ}F7 --PҐ6uc<(8Wurk$S-=J&225Nȓ&Cc T --oiSğad(((((((((((((((((((((((((((((((((((((((((((((((((((Θ>ph A@ A@@ Fhz}0o_V \o]h/xjlkQ ԀE (RC҂H@y!\?9?vT;p1Ds恐 W6s vf- ܙqi BIL«h muN@V "w?IdZ 쉄a :Bؐhu --H.EFSRI*) ÇK^ w>-D --((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((X@n 9FFoD8$ InsCə^rXQܣԥo G6ub$>ϭ?9q[.}V[%^ χ'bl'qx8"~9^Ovw <>B<{98Ovx$hlt$`nΟ@&_a )?!ZY --((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((X~6OҌ^pZQ --?ʳaI @yL5[|'Ϟ,P>rQH(OmU6Ӽ#G\tF/Hyaˇ6yK=ϋus6d?mF7gý.W"ސ}wdq<\/|yEؖR8X#^ǯ%H]yUќ'/Eı¼ --((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((XzSyWMЌ% 'ثHHcW2[bX}`Psfa3zìh;4KXtf l=`iS^d=4lwFoXp3#l?-{$3-[7dSLsX.!(skcX0,O&ifs0nj .'%+Z HHH/Xp:^mQy;1[j;)m^TBl~tR VcHO)iaiD~b3{'!j2S:Ъa+5$tyǽJy[-TDZVL V&BEUʮPUX*TZU*Y^ --\}ʗEAE*WRfNWU9*r5)q\A --'XrgHՕY*B(>`J"X,?@8 OJz+“J[# ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ʘ>_A @A4` pz 1b'b %rE0H+ ڒ?N T --ԝ ʜ4XbԄ0OAF --1~Ssm͟ LQl|:ϟɾ Χ,JJl|ПϘ̎*t$fdvTa5ˣJ$E)EE:8IeppzR:W[BYj /)f<{C8Λm.U]٧]bs_u9M C  ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ʘ>8p7i&c܈58KFYzx<: q=SfzlO [l 6r<`Fn'?*T~BPy,$+GaBHp P --cJR? ,,pH'@)܏dA*J|@6㇈'=?J0(SH )ďj"BbKq}@#a@&$[BMIgoˏ A'* --NU,?.d}X~\(:bPԒb!;I كV8dWR9D ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((˘>(CP/Vn?Uh_DFي| --+ȟU4[`b <@\`,@$8]`,@$8]`,@$8]`,@$8]`b@$8]`b@$8 `b@$8 `b@$8 `b@ ] `b@Wt0R zT*AL8ԍZ` --X?}- ѣ z`ntS=O N #F  ((NF!?`oD QxnB7 ifaD!h8@@A@@ H@`[c-DFqR57^T --fj0n@exh5h܄*kGPqCP!nD[VA]85M2 op47b^$ --Yi0n@y1h5h܄j*kGq,@PmECVAAMVjGnN4p6^ t&g @{8U8sK4iȆR;"K9[L D4G6YM6!^M*mgl,7;jowVi;dcѕE)Ma vVEX~S5Jۙ&l/BQk(Jk ºJ靧mΔ@thaT=DspдjPS`~*EmдNOtY)uB~(Q8,tڊwDr\Yr6{VTd[cn: --Xq ڊ ֳ(ޕ+^sTϊuK+׭\z+D֫\[:8#_j3BVYOr9yXc5)^3j1}Ѝi֧|Eft7!JzJ 7#zϹj --,7#zs2щާoF^t2ѹݧoFtm2ݧoFuU2IAܧoF~u=2yۧoFu%2˩ڧoF>v )dOߌ=*(dM.Rf9{Tj(kɰQkWlq#ڊ%ETFe+^B#/Iwq J]sU9\;-DO6jY*?(D' j~4UVp'!Ł(Qu_ WqD>s݊8Iٜf w)Pm\Y;l~re[D<{2׭~ND_ςu+^%@$Qh7暕/!*Cq r,Zse d]> \;B.D6a[;}GDN+0׭xNp~ĨkVpŁȑj˕/wq pr݊dO8%un wD*\[-D[Y="DZ-WVNŁJu+^L@($Q; A}_G2rJb< D9geJ蔸xr]ʔ/)q7 --%kYu&.nfwM>S}gm,gu/훅Yu>+nfx>S} --m,@gu/Y훅N:}ýޞթ\Voz۳:՗JBz{V:ozչʊ X8Uu:?8-"~%~ΛNH`=*_ RXϹ|8s:r8UD --9WYbg3JUVX_ As/yiq)$,\e wpZD -- k8WY!UVpeAa*_u RX<8*n;8-"u~!<( Qp($HS6c61&DA)ighp%[đ5G6i|%T734~ DA434 DCԚ#4MDj)4~ DA4Y:f!oqoPFiD-[=T5q7eVRonMDjUXݍqouk~wøK\ͷ:T5q7mVUoo DjՠT 4r*EqvoPm@][ J2˙q7 +W --Eh|C-8FrP(GcqPjoud/Q]T2HW Cv --Pq7kY --X7kYrꛈOEF9Fb|MDp|֧"#1f D(Q(BְgX$mSY 2.fq3t3˺#GѣHo< $]An6]g!3Юtƫ}j41Eg{QxLXNF>CGCgr2`3::FJ9sGjXp$;!Hn'T n2pzPB$$wG.=U'ţ"߾3p$t~HuI --h(#$r`󝁣;PF!ml;C!LDurCEhL:G1crTtˑKQFkC8q`⌎M݊2JNzg(hjP-{8BC1.b&I$!l+.θӳe ]*[9+aF ; $c:AmK-]w֞ѡK+Fش|!.@ @ @ a ?v>I5u8K;^OڇExBtr^{uYR_`S_xIN[휌i6XX<9M6 59L?25 ̻kX y6gdA879Z&q1 LyfJq5 LyJ] 59`LylR8Kpp#КoUFU[_z2|o0g'HjR}ăaqĖ/T.@$܇b)R.X[VJ*R}\bipDT¦l?m:vɪM}"QW<+i-E%'~Tp[>rBTg: U=ajL&2>ln:/t Wud(ϟk@# ,谄2Rj6Ux/вyR҈2OSڣ.EJN*踽F}%atz)USX^WAZ(  3] cQK׀I| eB07_[6!Qobgu0Ê~cgC {C`؈X aA@<@ 1n(`gvUח,>=)yr@L\:'o \>+{4&ɴmϷ~Ht]=Ya'8Zq-B%KG& hpZH --jeD?8\'I)چIq-YpK^ yQD p \)G%?jiʮFAbkT,^`€ H ߟ{|8ɕ K}J;5u֯xمgTEGB0aY1 --@F +'%ۛ7BZ^5#aX ]._--hB۶޷ux%Fzz>H`%+YV?t a x 8 X `c3b!$ @P0'WU>_ >1ױO׼ >V%Z --/}0xAq F},_#Z$Z",5-.BcDc)XZ,8;IdaY1 k=yɰSS>g=0H*,1WDI: 1xIog 􃭧{$[I3L$'%BtCFX pWV ,;i »p`R%g`n `o OL01b#8@ --#U}^?h h@#,h-4Jc^6!c!2D\ne;X7+djJ;Z --6 2fȨnkUξʋu3^)/=׊Qa&evvHߎe #/]Fu$/mz^]G4î%0wt}޳(,q${   xRL{*t);X ્$֤ T(=Z`3'B_ `(C'Aa `hP8IPP6G --jj6llJqV --<.\v]Aٸ -- dpm:+d؟lj(JJQkctkV Y I+M(;=M` J0t5{x16pf*;q! '.i⎇[z*)"Cȏ<ӣۮ3Ey1s$i<_fC4&A( -a7VF.=mR`m(c09? Z֣Z,O&fhC/4SЋE*JB#Jg lȥUBc$/G0=0%&ysK5{5$2?5+$&έCL.r,Uv|{{V9j-*D Od \TbIDd )5O --+;ʡo.YI8S5QR }t]$!8"$ДXۣ%= --]ońScJRM:Z$=BX]*oÌQdJU&:L $Q (YC3G~ 3͹?$N0ش%UY-̦J(̔6bRdFfsIWz=aa}eLU&udn*T%›0wH>@Sa --#$%f훪6eJ>A,SKG(T --6bfFe)̔V%l>lQzMR %[m!)TVsGY*KV6IajT}tFȪ,ds( ITJMl¤JfN%,Y sK*Ve3=1#H"}jUcsfAIGTJ~6obxD(d᪔&%>:&Y*U 3yC,\BĄdG* WV6+af.ѷrn (Y_@@(9ɦgM I2M[1Kg$( )15z(#9~$GrSx\{ôȞ#س&,I$$IƦn$3=c>6g.Ym0OxD*$|fhIfbOԘ<3");6{FĔk,R#ŒftLڌKrm2Jf^҅T9QI- 2fԏ(*&ƛ6KF?V"E0=nF'ѫ.۳cьH+Q%6J.?&H0}l --nj+I ɦpLˏ. J6nBG_o7fYId-KPyT S&.zlB,(JfyP  ` @1Z"jQ.@E5E]/-2xήdF8tfZ}=QbiVS><-w\=q.{ --Ccކ =< P,2:G>exDvduG 1$.W/c.삣\[aYn~c|' ,dlxo<9`sJ --#d --lx@Œ!@S1XS׳%QqcboSd`?NO0Jl&GĘ'9<4_$>qyL͛17=o]rulv{~$~vIu12x#1crR=0cNvnm/͛i;{ǒ{^c@ --H'1;QbN8d3I=i*YMz zF]xӫ>XfRZK.ewS.?fZK&~{Iiml{391 &ce 2=љE^jHLFNaQ׹4mz&]iW ab]1S6{Gp}qϘ --Y@={dF-QJZdr 7ׁ6r1apo S`aP@T¼E{FV=~ې z OX(@nNJ4GsI F --|dzh'E#;>_Uҋ\hZ&Qol)LeM,HgNvm!6`l+ͷO6^\(3*VʘN㔍rL,Y0>eN)^F= --| .TecS` (%Hp @ @,@0 Egt0:T(͑\PdFY!Ϛ(. --[d؟V `õa3PwtQǚ':څ@"5e۠ i*C*ܙK-&XQF1 K;btEe$s. X6.b,6~rdH2{p 6{r'`4L2b<xrQ'`ԵzʜQo@/ϋйc NG΄<Zh M /{!'q$ҌMCO ۇcfx~|&Wt0QkF6[-U6 --IN's} $}w.xn?C39f'7M&GpzI09)6}-tLy yB sٔ/u2Cɰ3:[+e,aWoNxke(*WNe)}VF, (`a x?@ @ApCqI} ot0:+F%wICp4.: G+"bYthhXҔG"bX4Gk"bX"%i/DGFŨ"i8hD)lHD>Xд !KHtws s8JᒚX•ǫvEu$ --,MN] ]G6h} Ѷ- ԡQ5~ ,I$SJ --'*p |1oOȗA?l(s PBYgaAzJoP c6Z6.naަ*H/{NO#]]T]x7d΋׸p --PMo6$tMU2#niãA|3S*Znh)lu-J(8Aw[ȊgCh JǔƎ 0t --~ P T ošy --on3> V!"` # %# sLX0"QS \XoW4?s!S+d? o(/ /&rcfLdJϒ*"Giw~%C~|Nsvy5he w , *>//\[nް薁ϔ⃘b(s?AK\S0\OS=TPMP5AEaSSRm*ziC&t=mڇ0_.Z5#M(V/nY&Lhy. -3/KȅR֝dQbn՝fUVc<uOHhDJ%AGp3 --7 --s:,w6sr\ЎX:KүTZoG۫&b"gJbmH(x 7}ŘZId0x,y\(|I16' -- 0 0̈E-h-Rnݤ%RJ?{k~޼܃QJsJ>ޛWu{0=c޼o޼o7rU]no^U]no^U]n^U]^U]U]UUML֥X`c$#|7r7`Ҝʺ l$#|7r7`ҜʺWEMS>ޛWu{0JiNTeUӔdϵU]nRUUUEMIF\{o^o(9Mh 6YD\.AǺY.BymP\0D"y P*s̏= Ʉ@W? s< D$ͺt)x@" --Ƣ>DU֥X`y8˚dϵU]nRU_]$D`4""`0 D' --D" 4`й(*.K!QHp8drxl6S 00I)@ P 0@@Ri8{OT*N},P(9+),˲,t873`73FƢ4e9 !0̈ ,gd~D.>g?^w388a&D,HO{Ay 舞|C:O|Ƚ|y`;lB|~ --͇ÿEyJ`eS6ufo}sTOgo˾z.!J_v|:v9z[i#%#xXܩ9}oKCq@hz Nz0yoUvݩy<BQ8={߽|#AGscn>)|` XuLC_yߵˀ': F-' yt9;{מ|#TkKFߧ́Ph&qoƄ --x?=_[Xa(%@р$ --M)HH+3{Bg빶7{/8 ݛR\P|Z{/2 }I ~H`^ -7\y^O 7ˍ==;i/o_׮7ֶ33vdGm5߽,ba3_'Q[ -- --Z\9ntd s T#8H$EsK=o/4>X-s_c]_k/ " {g_, --myQ'iq̬;gz'|㑣s?|)G>oSžS.!2#5]3CM~ HjE`o`| Jވh^3Ѵ0_NFaT_C_,џrI{?&Gl۟Qr *#7wM0!Nqkq`{a3iJ\~:7#|7jxLoT)E @@I@`ˆ;ׯ=|F#kR6aHVB? / P9+xcL[|haD*a lv"6&َ0>&@R[><^7/G)IbiGoo„})=:\4%?7q)6rVQOk$q-_1/ --4HPdY$0LHI I&&toJt+itJ:[x9~w`-Q7(0k {a*J֧eEX9Y-]N}yIUj^@g M,iTK.7 TS2F/ћ=!Ogo/Q@˹ ty|ɝh^ `/P!ByA,Џk9v.sF B@JE#shϺD"T,jHQDauhłse --4<<''&??PPPPPQRSRQPDD))SSSSTTTTUVWXWVUTTTTMMMLL)))**2IIJJYYYYZ[\]\[ZYYYYJJII!+.1123399NNRRRUU^^^^^_____`a`_^PP==<<;::9944,, 44;;CCSS[[[bbbbcccccdddddefedcbbbb[[[SSCC5(%%%55==DDIIZZfffggggghhhhijkjihhhhgZZUUDDCBB ::@@GJJKLLMNN]]llllmmmmmnnnnnoponmllllkkkk]]QNNMLLKJJIHH--,++%--8ABBQQRSS[[\\]]ccffggppppqqqqrrrrrstutsrqqqqppppooohhggVVUUTSSRQQ/ -- ',,-445>>?DDRRWW\\jjkkuuuuvvvvwwwwwxyzyxwvvvvuuuutttssskkjj__^^]\\WWVUTTNNF443))**334::FFGHHZ[[bbffnnooppzzzz{{{{|||||}~~}|{{{{zzzzyyyxxxppoonncbba``[ZZHHGFEED66** 112QQRSTT__`aabccssttww~~~}}}ttsshhgffaa`SSMMLFF988110 .2JKKLMWWX]]^_``gghiijkklmmnn||kkjiihggfee@!! &&38AOVV^^ddlluuvvwwzzyyssrqqlldd433&&%$## )?Feerrsttuvvwxx~~xxwvvuttsrrhhUE>=<)%%$$%&DEiijuu{{|}}}}|{{uummJ:-(';IJTUhijjqqww||}~~zztt_^]\[[ZYL; --;rrsyyyy  --{{qlkjicb\:  IxhgJlmzg  !I !%IabcJ,!! -- --"<=>?JKhK! LMTHG "eUkïe]QPON87 !3UVWXZ[\]^kǧwvutsrd^]\[Nwʯedcb`_^][ZYX: 2@ABCNcdewkjihfedcNML?3?@AB`abdefgijkƷqponlkji^]\HGFE ^_`jklmopqκ|mlk`_^\[Z22TUVpqrtuvwwvusrqpfedKJI2OPQvwx·xwvlkjhgf93Z[wxy{|}Ȼ~}|{yxwutYXW>4. 12346789VWYZ[]^ƻ~}baO/789:\]_onmkjhgWV:98+ !""89:;DEFRS\]_`yz|}~ľts\;:9 $%&CJThituvxy˚srpomljiG@?>)*BCDFGQwxz{}~ȼ~GFDCA@?* #$CDFGHJKMNgh /9DE·XWUTRQONLK>?@KLNOQRTUWXrsƫm[M+,-.[]^f¹mXVUSR#RSUVXYefhi}~ҹld\[YXBA' [\^_acdqg_^CB@?# YZ\^_abdfgiklײonljigedba- --QZ[]_`bdegijlnoqstګwvtrqomljhgQPNM345`aceghjlmoqrtvwy{|쩡zywutrpomkjhfeWV GOPRSoprtuwyz|~յxwusrdcSR76"4;<>?STklwxz|}ފvugedb`^]B$/YZz{}􅄂}{zfeUT %&'(<=GIJLNOabop}~􍌊~}podEHIKMN[\yzjigZYIHGHJLMZ[]suvژkjhfMLJHG2FGIKLNmn쾛utrLK10 ./023@AQRι~YX0/12NPQ§yxv_^\,+*('& -쪩@?% )*+HIZ\]_a۫j -- $,qsܸxFE$ Ijlx뵴(:;=?@缻|zxGED ?@BS^GF4SBAY[wyWU?=<Eü><:9 --@AƽVGE --I B鱰 --ܺ' --$򩧦nlj$ ᴳ3 !23󳲣.- %8^ʷsq`8% --'()56Am⏍`^A()+,?kxыzk?43)(+,./134v伻xv=;' 124689t껺986421 67DFH󱰉97645JLNз]%$-7PR_RP310 --TV}FD/.,+)*,-GXX-,*) 8Z]_acs+ --ߨrthF `ym,LfvZ<$qBbDNsXX;T<9=jwdV_Ǒ'3A֣/ǀ;@ l"J&#kH+!BpMNsn*=t?u~|kpG>_ܻ)ř?0N$j, --, --B Z8$?2QzG"wZS`[G>oz%RDxsL/OFzxnrCɩhsH+=9Mww=HV % --W h\ʵ70fMeCFتT59#}Jw,!wx --}[4&E}USb~(~YJh)ު!?SW/9 XAw|,rh#G)ۇ ] njȶ6Aw{{_p< Oaҍzέʩ=Я~#Μͩ=vw q {GA,<'uq^hVp} d6ubUC o6SG}!Z]5=Ŀ@:>'A@ `O]LYZb*f"Osp7 +9:tѯ1?1NYܦV(-^gM/s>aEJZv:;nRw[D8%0+#_H"x .UFdLyMػX_5?q=Ǯ~ͫ 1zJ:)r --^-y*e숀S}b> Y`qy<1>"xp:>3A(}HPVL09s{??cȼ!260j?}A~a&\Ý)wwQ;,nK&D&&*H_8J< --QNzl UΩD)FXRS;S&9 omսm&Nڱt|7k2}q+}Q2i~ܔJ"ĬZ`>Z@vZt#dn[yCnVy5v_DIgsQGHyǫwXM5ȈM)IajĿF=A |gq x$ :}G˿^TDzs{TL%)Noh.vu;[XdKÐUmN}W&],%O++9Ag+[~Gaw[~x=/ފDŽ$Q _d>ԧz>fTj盪t+5%5[?T 5nsSh!̦hٛ}}͉b&f]Q too%ܳMq7~bm{TU2O4ޏ%EdT5wYY@OgJXݎ~m;0ŝvo'~ --9ǹLMOH?Hܝ.~ fY~b6CRC --1?`-#|05h|>%zwvVWw|}KO&'>;,}}_G|sOfiѢO)88YLJ)w7): 3z`=k7se;IDn#kb?l=Oh&32%Au}"vn)0q+GNZ`B}3i:uqk\[уz:f(5?b_4M#ރoXe {< _΃CJ --[4 |Ŏ\hzFb#*6v>}k莺 Hl'~}HʣXё@$*>cAӆ\gX\'YfX;XmAH@hPڎWÁuS|f:vig?pǎE?~=f;ޭouUmȍeb bTW%>|i†FnG#|wsÒij()3FO55 W2g=z>nC\{џ)2O+Lj&~ÊdGKS>#}aUqljf%YCù&zG[Y]H_r9=4=鳙+{Wn: %z -- sx{NBy}%*${er?u>0pwgE(]t;s_>_G{[I?}{H+V~{XkӽGj?-vzi)P܄:EQ.G&%f׶`~ BavfFvI5=٫Ϥw$)k &lɺ#v~p֜cwyFU3a_gZxy ؋|=$>}ꃴ#W٧}"胻.ϸ (}*/ò,k꒾ = GToG1G`)~,{+Sw}{{jL=|c < GJc --4h7j kGߎ2v2v8W}зz;lO8n; --вIøt__Q$Ջew zz`6ޝ~ʳc=µG}>OnQW&?lZiqֱ>C(/oS̥IV Z>q# ɂn;l.X^@-d}P\hAlp)){|t3HO~{mޯC1sR\Ae@߁ۭDķ}h;B՗ea=}"'CcN`]fIwG_N=$_I\Pa~F9W(D'ݪR8ņ>{7bD5pk --jwԷp|q;H;ud3 T[sR)D88ޝ {P<{-\2fV ׄ(7 Pȯ[>%vs}x{v$Cp;%}>w;\_);Tg_b?lw<;=z|?3G?%G cK+W&dIutX>4W1_qIhBI;"fG Վp*t>v5} tF"E9A1'gw#̘_,2&@2JaX̚}w:wPߢ2 kl҄['>>aU_} zGVlWq}? #~j=nG/{_G{(_5r5=@@{}տfg`|FpE"+S4Q]MM9TgtiԗI4 --b:6GS;}ȚQ"}^ݱ(;ϯ&DgܰGHlNankM?im*>`m_1C|z*e:+54ێ u}`;:nT}i䎇Eݔ1IQ7gmn܄kB1}_ɽ]?:@Ơi c!IbatA`:U&ܨnp>|}ˇ,&}:SMΛ (>{?w$Frgz9űǩ --iA!=]ѓwRӕ3`8ќ!Zb> kqLv}{|;ByCMAaLVQk{0;z4hz/ \;cg7?xEスĿ2>s^̈_*/У3B|%_m*0v=SuGY_ 9Ww45hEcݥ<=tşes([~'L<-vez]:nך0F3_ЖϖDevH¾U'%TQR}'p>zh`,yw )c~ .@~ |㯘VJ8/$UK{MڡA`@#>t|dXߩuՎz>XmG>;nGW}+F_u(H]+F@e;%?HwOF{e~f凭c!c!ԏ~#6#௄=E+}l؈^+x(DGE|X*W;,ͧoG]6 rh ;5u;,c?!l{<;4i>;}@[oo}r$C|<;šDh W+>| XܦZ3)'l殶}F_ڀt2(>8G!?/»3ͯJ?~b>h-/KV.d52&=9@vd3>:F_u=j&o --mnjpäGX#^03~m`Ǵ5Tf6W'NӟhOz~>S1+c_">kQe7iQ{̇#*;kմ 7R} --~/=T+TNkC|~1#B(7s꣠' 4PM"/dh6{#, :"u̇Ǟv,l;/1cT9$& L[tӑ͙_: ֌귦ݻ3G~irﱲCmχ_y?b pM{QR/q^?1>~{ l?_Gf{;߀&P;v|#;RM(/(7p1nA/h/V\ ~=N 7Vۏh].>{|?F% ?:Ðۂq,^*&%aӚc{Zo._zеVYo;ؗݺA4WW{s, $*@A<~^?ә%b(>ο4 --hh33ģ^7 8B|euuCk}4#µ};$xPVUA/,ONbC Io`{ah/"1}~}W¿ueYD吊}e}e7ȧG p --HG|~|te#ڇ>ݡ| y>F`&ܝ(Pn4?`E :Qm8 --ܑOe͍v|H۪Ȓϡc~H5Aê&WQ1qkn"~T{TễTW{?Uo'V?7.SH@Hozģ|^x; lQt 8`Lײ: e/PuXJ7ڑoێǷY.x"%&͒\_{ƏU6?r۬Mt*?cgV' ӄ|0rQ}V ( <Cd$b<"7^_|w47v]Ȏq&84V}GbM*>ޟQ}%BVWbV{4& 9#K\U:>BOMB_i D6`F/E8G݆7oK=C:fIO;Cq@v.(}1)ϗpPJ_'sU{_ӻo;='Y>  @ 9nfqI).1;7zJ /jěOu@0UoSFodߥ }nA}c>mCodV#>N%z~'o!;`џ8p$@PBT q> --`KꞅOo")o|qM.QVI1_ { pW=XneUQ/8Xoe(o={' S=:ޒyoGG<_@pCp Ywo@o!z_أ#2ν -- --9}4yH;!۱־r#@G},?P]N~.O] Y`u󗨏#AQITĀy!LY[JzW3Ro( O@+KG*|֡ҶYИϷ:p|v49 --Ef@}bP{_ի ZuY~F9 ==o{Oz o --ÿ H+A g}yH\<۱Ɓmd>߃\ -- u|LA}ߋ }n$wgpQQ_1|+ ~zR{X>uE ϟK/ --p.t+ , IJDN,Oeﴧ [k/o:K61J2RgÆsgѕ?tA4!Rp{ :8KO^)[ޟ˿[et0GJp:B?$7v8<^{j{|Bb&||須OD_j%CՇ{vy;=pG01YM}>}ֵ3?=(<>>J_ *}ijA%`fp|wMyPz;{ |>8)PQ^>~ء>Si]w!}5)̤ϪWۢ_GiUʧ~{Ti{p!=~a5RO@=ſ $ThH!j |]N٫{z{]MU=+ڳNV1"};BGއ]ݲwf~zމ|d?|3?!n@@΁/(-߅T OQj/0=Rc9-:|Б):O7L<|wek5pO'S_Kc+i˵_̕ncof?|G?;v![ HNͥ:pKɮkT1#O"glrM$B_d9r1:߭pgE~aGh7'uOB"_9b;{}6>xy~zp^ߋ --˗/6t6BiCZoRQ D_}Yƴ[&MM1_#}lӏY\@Eځ6AD Im#ȣmcpz)ߍƗE[ҷRGg}Ks/ Hc9G~(?{]B?Gso鏩 ! --.a dЗTojW@`llʧ/c|0}&ǫg?ݳaNZǾx|z=NNWJ?8/iE)c f;B$!Doe߽>k|bl">#5"5]? 8f{_oߌ?=0G:{L_OQf@Kҟf?b_ ߀ @Apvhe"yͳ,zy,_Oh|mCd|KGDM>i l|r;@هcm5IxQ ٛӾ{< $!\lґ s޶z{| +ȧHbSP>i1EvyLwd},M/o8?[k? >8uJ,Gx. --4 .Xo9`NߖP~namOH_.+~|?5` `UNpAEM'Re]P,cqA8| 0qK\L<>BӎS1Ҿ`>7Aҭ9 GÀUG탎 --? ?C2= >@@ \4ۑ_/<NoټڻY||/A&NvyIJ>}˷>W/?ņ?TOPꊿ|"k/\  $$ qMhVeC])ϧGvޝL{> {7Ti+pH>@>|n3Wm Wxү{T'}{\L@UЖ /?^DORh>,>+QlL MhGwQ>'ܿ{[_u P!B)8+1=BQܛ q@Oβ-WGu]UP_fH$ѷWO_Jk=lbo(ۏ~w\X'|o:ͿN !y*:=^BOQ*{#!&&⋌1|}u(pg驯 OaL`+8O>py>$ gr_v0 nЁH8Qǫam[ֻG|]f:7K]4ggȫoF>UJGxy-G3gaE? --nt3r4z /obDuo.`Tۚu}(;ƽ 7gN梋!ُzٟPP(c --L j _ɓC7絵,={qs{᫋/i!_)_:hT0I2N7{|rᯊO?^~O@@3Aw 'p)9̓ӛ4|f|t(s,&G}{C_j_Y|~[exTV 8P`́ADy --Is$/Cϲv*v0p>\ݩo_xEkw=nDd?}Tg M[@70'h1h T^j= |7G{UY۲a}ܞ@Z XAU~r??O}>#NiWpzP+P!)r0gXϸB)\EJϧ{[s9Z:}uppۻnLEg --@փȾǭ --@Tb|$Gp?Ra$=0$hnP<#=מpzS$}q۪|pǸ^|i]W׽FtI?T( $ .BSߎې] --@Qtoy|sԽ׉#/mUؚo,O|^*1< W> E3 @5AAB6=ZZJDի߃|X|^P qz1۷D;nfqͼmsߙO7f^]  !H/!1ɻA6=ހ{Y=]|wjO5|&ar&lI . --VXZ\_acehjl||zxueca 79Z\^acegjlnqsuҚ`^\ZM7 \^`psuwz|~Ʌpnligeb`^\YWUS-,* UWY[^`begirpnkigJ0/-+* "#$iknpruwy춫~|ywtrpmkifdbGIprtŷ{ywtrQ 1Jrtvy{}}{y^\ZXUSQO-6tvx{}¦}{ NPRT:91giknpҨ  -- --𪃁 --moɡ~e񣡟n) --&MOQS}_]3񩧥mk8#+|~omjhecTȽC}뻨fd42$%\^acϬH;0FHJLIJljgE!CEGIikRPNKIGB˶VTwZXΊvHFDB &'TVY[˽֝o  >@BDGIKƼ‹vt, --=?ACnpǺȳus<,<>@BXZmoܴtr %;=?A\^adfilnqtvحд{yvsqJHF* !hjmprux{}ϯ̂}zxurom˷˵fd=$JkmԺϤecIGE)  --68:bdgjlortٱqo#Yy{ͶӶ ٽ􇅂}zwu<('%I壡fKMOmoruxzѾ굂bTR -.0=Xtvв~髩q?MORT~yz{󘖓db_E$#9;=?BDFwy|ytuv]PNKIF&Yo~topqwda@><9UX[]±ljklr򧥄USOQTWY\_a{}qhefghjns  `ce՟l`abcߚsec`]ZXURP(&$"!ιh{|~zNL&$UWhǮlkjjXY_eﶪpb_]ZWU,-«yd[UVi !s¿pnWNOPYprp&z~TLKLhjkfHFTVJGFGHNcվ~jgVTQNL0cHCBRceuwnkheb`ruxϰ`RLD?=>?@EPWɗf  -- be|бn\PGC?;:׽? PRcfݼH>7NV`bdgf$ DQSVYܷdF933;Ny|ư[Y!&JZؼ}zveWU?30017FT}\ZWTQO:8641/-+[¬}zwPE7/-/1ACFH\vsokhe/.""$6^adhkorvz}PGI]ӷplieb_[EGJLORUX[^beilȳ<:8531/  --Mx{~}yuqnjfc_\YV5!#UX\_cfjmquy}اZGE7KMPݘ{wsokhd`]YVS. %*J]`dgkosw{XVSPMK6 0LNÿ}yuqmieb^[WTQMJHEJMPTWZ^beiũKI" BDWx{|xsokgc`\XURNK*EHKNQUX\`cgkosx|׷WTR&HJɡzvrnieb^ZVSOLIFC'=@CFILOSVnrvz~G}ytplhd`\XUQNJGDA>;9;>ADGJMdhlpty}- --~|wsojfb^ZWSOLHEB?<9742"+-/1469BEHLPTW[_dhlpuy~j3 $T߮xtokgb^ZVRNKGD@=: /14GKNRVZ^bgkotx}㟝/<>njMIF0. $&)+-0358:741/,* !#%'>AX\`einrw{ў0 ---E~zvqmSO $&(+-0369=@DGKOSmqv{$8;=@CiȨzuqlgc_ZVRNJFC?<852 "258;741.,"$&),.147;>VZ^cglpuz~HF ~ytpkfb^YU0.+(&#!!#%(+-047:>AE^bgkpuy~ܜM{}ytokfb]YTPLHDA-*'%" ADHLPUY]bfkpty~ROLJ hkjfa]X@<962/,)'$" "$'),/269<@DHLPTY]afkoty}q:8&(=@BxOKGC@<95&$!$&),/259<@DGLPTX]afj޲u\.+)&#!!#&)+.258<@CGK|C1#&(+.1GKO~ξ --?A󭇂~OKGC?;841.+(%#   #%PkwtRO>:}۠tɊd2%q~bԧhS?bwQivyɤ?߮Vwv>m%Dft}Jdt6_D?|a ?x̗Ngzpq"i{seДf?U_u( 5gw_H-7XD+k`gIࡎӇW}XƋB5ur"Nrg#rBn?# ݃*Mixwߤ}!_?'¤$PLGxtitex~g8.%K@;b~턁:p\r֗Y;]Uq}up9o1xO-JhOen'qKGiP:7$TBswVWH`+ J%Z IǤBhgkSgTprQIv}U7]+8;=@[X[xzJ@;N4Eزw~gп5 -- nɝ&ࣵTސ}F7B[`0T5\}TF%vCh&ұw|m}R|G-/VET_:! 'uRw<'mjJzvӁ&u~ϱQx6<87a-a+ |sG6?)7wk>> --0Z؜Si}4rշ([8]^^3! ЭvECT6×Me'3{,>6`PtWؖ@HyclA] $ @.ϦI{)2vѦ]alFX|ʀ²O6UY{>8H[k{cںP|Y'vrPxP` |_P7qn,+s@nXZVO" ]Ѓ/2\:6L,㾧mBxS͘jWof. w o%#ñ>Rp6N7#Lڊ7X[Kz_K ?`crgW*49&T-lNikP':q~ӕǍ[>_~VOaeNvp:W{ٴ%dt&dSɵbi[0vNe=Аެ@jZee0*ݹ --h2>MP ߀= --O;0eOv8NשMo4_xy?D?ϲlr'£@-/weR ?䯕΃u݉fRANm; --+y4ȣN8fRDsCun%ә.P;־{ZñӤ[_`}+(Xf >Yi'Ԛè`bNe/wlXMy<%[б}NJwv H~ f9'}B"Ȥ[ ,нyIHA[,*#sie{xg6]i}_J}V --*#G_jDŽg`} O_@8>AuG >DO6g['^wkYܢ~"sMy@sk&{>oIvM --䯏3a~f1:}JOkc<қ30vfYEGu1κгUoW*-?t4?> ^ˎ>B̯*>II@3C1F;fŢH^_P#XCBA"y c5r" mo}ɖ{AڴF E~9Ĕ l-v~KU=DAh@sO1Q;ܷ8G~J3rPt鋭PH_Bx =tAza9?5ՙ8LX<i-M.U!ϯyV͓g8]GcIB[+rsiLU{` --]wF 2u%zc|~H!U=ҹDuxE"ݛܗ?'$6 w'!c_){?GA]tr Tc<2;G|Zq'#XE\io֩zVr'XÃY;fOVXnѫACn!9=Q)v ~`:~v`uV C83y('$b?C1ݓD^)C tWtC{ͭ?sQ hKAL|䊞CZ˴96uU^*Ǹ#e<7}q&2f\e(ʆ~;h䵲aD_".%Koi`mKƗ+$ԈX?t<M LXɣ_fEEү1-kn =Ԡp95|孵q׽n^١hKi9]BM$vȭUѬ)T//7uRBp<fb"N٘vX!Z|b"7՗<ɫ{#CJdYș9^_n%oP|r4&35o: --\ fޛMad&PMZ_gݔ_jF~ͣ&=8Mkz?| S0BRҝ;QuQzJrAl 'lozǛށ/t]pp(̯6 --4NydRv~\'eE:`:P7);~yh7p։r+wweKn|r+уm݅8E1NӃrؽ, Oz? zAd$DRJydЛx&F1;6y,lT| jKCZ[N[ M!+gѯd4؁%FЀmj_]+ FE`Pj5ޕg;7kbHQBͿs}ni-f)?]FG4+ƾV!Bn f69_Pxr}!BT;ʺ? -vdX܃ '(ۂ<~M!H~ --8'9 $TMv-xJ !<\=k"I-=~H^ה+5]4 C%w6B(ͣN`_η=>'ahl8!w  _V=tY Y*6ٷd#4DW\J`a[O'JʽEVx~G$&a}h/:-9}?X+IfسOh9f- VbC?eN4ZT bU[st<(Gyoup1|mqZnОN=BڏFn5|IyRʢL.98k})]/ BG>--+wmefekxxQZVơ gI]|ߍq 7oZFwrUڜ~WAw%l.TZ)]tr fi!PvZz,]H݈{WA6 }]@: x!7fRbՑ{6<~ЍއK2Ҡ'StP[*?r{a_.;ZB|hhYpWeuAv*'9LVzJ}󄁜gZc$Ȯo }cfyEp@.zcs!~X9mfZ6UHȑA@~~w6c"K_;AZg%tf}qkjGuz |nzV~=!Gdc(<%WHa#z৩K7sސ:hC_,-3}R}{umtiΦlދGE2~zpfDp [hRK~x'yU5}$xiǾͪA/'!+-L~= o8TK5d~_q JG@OnZ~q'%99{c;&x{;~gf*؄*M䗧↱z{BAU 8xA2 ;w}G}i+BsH` ]aM ({fElrƦA䎡>ߑYKb\5paoB8J\vb+y%ǒ~MY"cͦfU_uZ~ Eȵ`𯆰DaL'a#ңFzH(UwWC[46Lt_lzþ5!>9śumլh}B>q:3NKbzxU}(uRXRvuDS_tǻv}Y_Ⱥ_a il"_S/tt6XIL2$ eZ`5>vKqPSb#-0MRlP9ݦ{_r}еF@p ܽ>#VҬpj㭁Ms`Enĕ=v* L~+}[=U`H#ؽ_b)qx7lu ~ 9~ڛ6enTbm#Mv }땃.AZlQݕcf:6ф ܧIT --?aZѣY9Od1侧Y+@2)V;$ --1N=n.r"T֧쮙LS$Vlyq;Ҳ<]X?6Gu~ ĽOemHJGV>6wL#N~GxXZ_ zI3 vDmu,WrjOt! ۃ_5r".`;#ugO 0rtwW^;ia~V,IQJ&qJH~/>(~&/*$rߍKuJYYgSTw&7l/-ΏĐ)G5l>OH \zx --2nGuj1Yw]?1xU?S:t^c-G-WQs쭕 f[n-kc./)}юyX D5<ZOCf&ƠRn6bbM#ɩdS-}[o+Fd`tWséok)ΌX$䎂7>W7OeӼV̤J\ wwbMnp k.ܜ --n`nJs@iM7]m x _-Wb_TFxh$!ܺm[U#%0e$yHïNIRQGO1hxy8Ew\% e0$/$r9,N`߻c e_[I-=bw_nͨ29UU&5J>']}2~qDIZ sMFR~f;+>6RfZlBif|jq'tVg_xSP(a>k>Qgօ#֬*C}oؤo6C}Ɖ|{4$}۪b ~`qrySNپP $@* ٫۹9;U*F GpWp"+fBfaNUJ`uGRI[8;6EMt^3﹫!:$c;O}Q^k\YFrg6+̦ؔTxC/~?ID YGFg=9?w`kޮxG/4GO32~"# 77xhxrz+ ޛrںMm=*="=uC+DbVZ%'$hھmƃpџ羹yԷ ǡehw&5p&=jbw --h5afe{Aܱe=Bynz% x%ԯU~2(+dP_?ᦝxؐI8[o%>*>|Kd%ɾŹ}|FhGvN:_K~ʂv_-:a/çu܌Q6AOsVOT)X'+W:BJ]^~Dn"A Ϡu;~0\̊w#\st t{!\2ZuҲO~b?Y`ϲ:X; BXˬb4ɦ @円aCB6N+rfz߶na^V'L;&쵭V3%B1Z vH-` < |z*5U,eȘMzSSA+%cV}` y`ZaR<"Q&&+٤h Ė}r^ --{[<m7"1W~4}|ٜ4Vu`"_#@yʑ"P4bX,?E冐62h~Cm>1rCƽ P;ܚljG>_K$C)&Pc!I~I!gߜQwk7;W ΋+ݑ4+8TmiHuLWb}Az1 aQCB+AkTD -$ (#ZT@Rgׯ ~_G(6s) $eԈSr`Q#Ir ˦aw ]R5MultCe,StR?H ώV|㧃zDy*+'q퇧c}- =VieR˃'pwHp,op8[-0-fWIVB$1-|`&6}^ dS(A5䮣Y54ʯ9Q=Xσj+ݵl --o<^Ig}o&2aH* --ܻk&(Qxљb ;T4$+9D|7|k \!>HW --q4pۨ t7@ԗ/:5CM#<`UuV6<Ɔ9-7c'9a --CkW6,6->F7R׸d~Q`DxH`}ЉCYc5 --l_ĕc?߶IDMЩx1>0kQ-צϲZȈƜo0î򻑓 ^~J=^hw'k~Z޺dGz25r+tm\=AJCFغ?ͨoծq}x=n1ۗxA`tኳc(nf#`tPI)DEGMnlR+?}W^S'@N|XROn9혭~jn87G|J~ [p~٣S+A{niѯ&~XU+Hr?t4i0_Fŷ%E.>6=Bv,'#o$-nض ?Vf&S_0xH.ج}a(VTS-Ϊ f.~F̏؇z4_a9"yHىSPďH<6?fK% --. --;blmkʃ֗E#7 t]w0`ށQߐ/}ghBjUn`h]7Or=[3|b͉L(?,寿xzd?O?tk_wAH4Axkn]NCjpȕ E,wæ۬펚ޱ4jmw-D)bCICYnV/l|X~Qok#~t4HD1r2xn'z˱ƌPͧK_p`mCVN[ƣ? Z:(WT --7}f 0&?;>LVn׺a.wɝXY}'J~y)lNcwyW=͏6w+aKeu'1E9.G!e@srQv[<q?QX")j_ --:ZM). -->O/euGQ4xf#aOu!"@I# CONu0zZ݊Unn'oyTGxG?;g4Lp9{ :nމwGW\kvAeF߰Y#Yq&&"ѕL(uMTRhQR<&VbߜQn*[o~i#bki=&#v!=/ry15Bhuԁ7 $;>/.+) ~,Dh/E sapRpQQ>Y#y9;HFrO}Oɏc.z?`!=nd1#< q j52y tRFTNB1*)s9T%!l!}|f/Eal6h0xi]aQnOfQPt.w<4FƐ{N}WE9akSW7:&qIڝNJ!qwн=l c2`< g:^HȉDY=rM;~{]|ڷlloUO$Q1n G}=S;@cw\>f%~_'oq[[oz39i5W 1K9_zP=./ n/Xf ș `!(v۠-IVS1-p=Ò}ס," 8k}8Fqa.E)r --K/[UWiwVztb6 ~t ~n3hd|"n/jSRV 3,w.M5w.hVjDVZ,Mb4*v(q;U'˚¦(rt<*WC}ƉU=8oRN+0)@~]s]jZEѭbrqlƫRAGiWem3QQKSDˁXg6w }*x߀B$Gflڗޯ4ԣHN+*U;%.ߎ:~nD_(>N`"S$Re|="<.ϪcCuWrփ>!hVut9LVZý}BWA?nS|Y|k`=5N}ҷHnj[<.L%~JڽJ.z/՜ApwcI}C)}Gvǟx?!gG 5;S@);9Y~}wv#"S_(}{k}ھsLIE}ZsD-MMDV"xJzdbݼ4 ¹4'gO?om% --ى<иs 54š?zhYwuky!PTd. uB_T%w?C75Av"^p Ys_$_ٝD )A~5Xqy[=5ك'G k,ڃ؈D]}@'$e ;K53Exw|;/4nuה0&{_0 UK~}aԃ ~gu\-fVm#ӸpQ#vXgC&::630,)&$!$'*-037:>BFJNSW[`einsx|>'.cfilxsoje`\WSOJFB>;730-*'$47;?CGKOSX\aejotx ;841  "14㺪ifc`"$%'*8:{~ʠ"  Qqat_!rHEC0/EARW[`diϢ{xu-̰a\XSOKFB?;74" '*-148;C@>/4̶k[*+SVY\`q~zuqlhB)ɚj*gx{旒D 37:=sx|tqmjcз[Ђ>ACFIMuxn]aeΐqnYVSP>DG狆}ytpk) "$'*Mkܧ{a!aejǑd`]Z_62/ #k¾]XTP  58;urWĠlgc-(:lq˕J)aŀ{wrnjfMJFB!UYh`[WS.;>BEIdhmquzaJ¾C(+:sxգrnkhผ~zuqmid`\XT8520-*( --ɶ}yvro0ן|;#! -- --%(*-ptx}+{vr% -- =A{I --WZ]y󻛗}M @CFJNI+@C8630&F[_cgkpt=»~zvrnVROKHDnrv{̾ŧ VŹ]YURNJGDA2AD}ŁLǹᔐgc_JFC-/GJNƶ`L`Ļ[WT?<( --2IMPTWL=::gɭmiea4 4FILPz~nO((On|xa]Y1HLORVZ̬nYY߰دwsokgd`\YEY]x|񽱪uu¿KNRˇR4R곰}yur[XT<+A¿ 9z~꓍Ŋ|UQNK;6imqҦ}z+Xv݉i;85JpvsЭŘ2mptxb'hŸ --=@Pl~ݵ³i !F^aeiyy™VSQc{|Ժh4~ݏ|]ad{rsspmFǽtϬYsvݗovn --endstream endobj 28 0 obj <>stream --rL?BEHKorvouD'ru{mno֯}zvrn630'>vyֱ#3lặoml֞ghiw@%!%8IK²NQUX[sadnp"=ѵmj&볰vc`a$*+6wur``bc|PMJGieA'%'AìZW=aey,2ikzZ]t^\WܥXVT70>`WRVYdSTa}/tqVwzUTPQn;4vdfroN3KgD448xu_\ZPRj&KLOFdgiwULfi2_b\GqҬrA@<<O0#5>@BWRRprzIGDCօ2/,z~KIIsqoUg}yv CEb{_D5:JGA˜d.U&? UdFpN dQ(!d0Ȁ iԌX_zuLtPϡM_ܑklޕ2#YGR[ۇiiom7T\,.t?F;uM.eiz$ŪEMmAMoNy/(UmJþs3*<2GZ#t)eG.3\!qYkYOʹ= @1g¢ϟ I az -x5 --©\VN$\s>>72/3*2h}&SÐ>[wrj=5_*%UaB7%3 `ZKG)oXB&T²w X,~92cn Zwۮ7u?dS•fE3~~oC,xPjH qV)}9|:Ҡ<:?}( rcr]x(%!}i?e-F=;=]+7x(3չnKi7qo4"igyiG --㷪&"Yi/EҼ덋 --oc0p r)%њ* (P~ڠeP --&*ܦi)dY\.r?L[}RajpXz9`?oZzQfZDP\{zz4_bA S乓;q0ry6e?^aD6)^4@^9,8wu,72"H|,c@O`z 2Q,Y --1[k$BlwyVᰔJY;/jr0xBzvR=8 3nyHjJ{FRTZӬo6ٳ⾙͝yi#Z8g -q'I|]g+ڍ8EiNTE^+p^IڗGϖH$?Y;f18v0KoZLZjQ:rI3r~ ju2X!Nuo,PhE|"s6Cx --ax@M --so}PzJ~U3`] --x:BynbBB onJUy[v59Z"y!Ψ;Y*t_JtVPGx=qBùt¢Ϭ8zi&^Ǜ 9 Y|K@>uo!8imї(Aɸ --$[: +5yfu[B ȾP˰WeX 6ݩv7I$^1_7a )hA^(緤}ȒHGO]a\G --)-@JOnN*Ģ1'Z-DgEiq%_&:pӯ[V,NN{?>VnkV Lͨ0Խ.q\DuQ½prY.0sU$.@uNDC{W;IلH:˭(n ƒ~s\72H;]uۢ˾~J?buFĜ Os 93(4ls=z~n{OJ2CA$s|ք##i OiӦ{ & [;R(N(XMt9Ն+Iǘ9~ϣW1(G#x&8tt(OHq$SG^֚A*px(~R.jq-5-V;nSH3x5K1j,V  lXS1N4h3B ь2D6E!a:-?_ko(6 q-.T&8PQ8YWr9 --8BO.SOJTң1iah]J#-?_+"Iy ҋ%~g6fd{ۇPnWr{zC-&9uZY --C0V7_5C)v: 3.8{ҀL׬ƛ,fKX:/p聋*hϠۖ)þW5ZVϾJ(ܷ4Լ&L;mjԳw0ـM!^g&9`6?7Q%oU.~2U8uZa͛uFyX"Zah183 GxPQoV߱jhM-˽чܦ& Z|cq87G=pkgvW8V6)p --Us'U-BI yo/$?.ć ,\,M.KT O㳛%B9^ --7;r?==olIT$x̪/^iiј4~I3%ՅS~Ls*1NpXAҗ:M(qd%6Ng)PP}-}0{Ju^ߘQsR[ --m  'ȺoemI54@\yYŏk>8jBxl3|kJZ)?Bj] 8)Pt <ԴZ{9m?܌z)$'1\S!l --!+GhyoNT9! -O5["C 7xPa --8"TvfGqUW27M-ևx)]wNZL/ѧ69J37)VmS{Zek]j[=5IqeS` cY!2"&sۤdq,z`Dy}}|'ɼPXsX,g^3"FżCPjG'd\?]\(=^$`j-Ey_<Ew6s۶.ݧm&q8vEǼ,&>؞-;9?f<٥4dkj< E}IvlCl"[wb  kA(HCDJlx"L9uÿ≇#s`{:}zSKLP-:ODGr ɧqXɑCH>_0pRai}~ׅ0:0;phnљӵa2[t`_ --$j`*"к6YMY6an}nboHuYeDzBI%|m{ --MDzbTK@ɕ{̕>oCNke}zI(,H֟Z8^>|b$1(:1Ve9*#drHpn@9y9<~ " G6̾Yxe 'dĵ{C3Q9,teŔv*]yTB~oy@4֩76y!fdwab*j Lv9R.ݵR"ֺ??Y/ΟgKΠbk(,:2S1 a[7EQ#(D=IJڟH9N{ZটR54DS u%^oblēyoyF&8k jb=$xJMLF>|eV[hYj!V$ 2!0MoLj5Jzt$wʶIVwLbxBjrD+ nupS\_ǀL'rP1S}l_d9"u 3u$yUC- OBS'Ce}5J|VLW11\-^=ّ!-h]0LJbI(Ժ noLlPmf}~UA!5$#aLB v{*18;G4$璐,FJq_]u2>!s^Ψev G8ncc O‚3 2b)^ba18w IND\L{\$axEA5}/twIw6=Est">T>!`VnS,w:x_r UDXWTe輏cӚ#Jp --k+[T<$5`pc1$vXH"ZЌ}hrnvJ1(Z< --/@}gD+ڤt|gCHz3Abc?8ѓGmz03x"K>խ *:ꨊ?O*'<˃r%}c}U Yh]|5yεZ)pʵF[sX3LG-ntnz8a9ylOG%U&@adjC3+,N75}Y8I~W>KC?(,ka2wx6l澓D# ^ҹU?a'jz| ?`q2an 32!?J%}=|fi/`.xt F@2b^Ɋc*~.L`AKL%lPw} 'JIeM0~A ]v4~ ߫[r+lȢXRyT\Evi~_$! NvI0p ! 0M|Д5te^:;C5:hVC̟/1݉8oߓh{ld?KGXp8yX#R+[ABo@@{2ށcFxQ[5kO4 NE+3{N#=bX %bٳ 4$~DEgp~y{We< xC$HC!kH2.PAul&Q|{!~߃r`& cʭ&#]'6f%(6rtQ{`pSLnYE. U"A%@fq5[(!bX1պlERS FǹX,#$`fc2zHIsnPj9Y~gL^Q| &H~=vS)7рx2UN̿c8CUU{:Nn8ZR߰"Z+ Q!EtYPX Ej W&6a-iLB8)0|e(}Z,#ZM` F-Dy^ kwkXZZO~gA%Rm-cGنLeTؠD --v`@u^|]ud 4L0^£> NTb~?f #vWЃT ~x[,D^D5>zp:8S3s2;eǪVL.7C]`Q --ހ;9O58UwkkPoH¡wa7! hSI7ؿC/X=>c -- !jF]@9hpgy[->h\/wTGJ,Merq}p&f3>rm&_uJ1s00. $ ~+lAKgӭ3+w\ !]%2׉,X,;;$Z@B8moSc=Q.08DI '%0D3NG"8#s]\2eɨ*@*?bc`N ~F;*}Xru(grD9H --U=Ԩ+F|-.wY摈ݷUm9^PdRpadA#<^ʍ?;A8Y8 a+1u\">$ǒA37W V e'җ,X\=D$kJx_r/V"Ȇ"#d>f[Uς4#/p^Y]X ߽Kz-h7&ABi0,*\muS~ e#)Rn {dg4V*` ڜL%ae l?>30BD]ӄŇ_Cc+֞?Ԭd8ETe` --ÖZlX@ĠD>L54l%8BrsUzQcE;cR0Sx|ԷXÒW3l/ש<GwZT{bSq_5ԑ!PҾ9`QZApr5$& %qȅ%y\p)@W=odo]\V\z³1:[iy[R}DUAN25dj߹ p9QzΨY[6rh,|bjo3cb6 וBdHDz~L.B <).>8$c#0 --]u]lq7Қįϩ5Lcتd,C=ݢe%Cn#ȣd|Atcsh&4/4҄#5& Sal-לOt >}ʺqS掦ǝ%.o[Gڼ>XuvB X?k.K|0XGQfup_V)<PSM(A"̆_mҍ ٹ(V J\<5ݔJewK --ctq3T䄦. ?AMPBQ5w߹od94PFnrX0v`C-~}i%w --pٽƏo:;iR"ze+N,VH'9imK,)ċU;eM ÷w]2׽sim"TuMILn:1bmsݛo:;rH~̎YU}}IA4tai---u!hlS IR(+4vYsxjd zWJ@ ~1r٭TQc{&&k( <~z'[(b҂ -]T9ozb8Hҕ$d u@<1Ծ$M>ОFk+ˤMuqWn˜  fo~a{?ID*/VJQw; --1[ --{jbSf;due}BUo_/.9Zdٿ~6f+d+1 --X\?.}Q6<<*p%OPEpдGCM)Psj< s1HEɺf&DTpPv1X;z =ZOxLofCHLsl Em(1h *Mh YirZ&T,Spړ47뷢vl}F%$T) KǚRh]@} m:> --ܤB,ԥo3h;;;^MoKgz6m_oe!#,3&Iͬצ0o\&ધm[e% -8.0'`9ROȫ{̞k~y) Mkօ9 g%*h=0{lf83Q7QR R,/b7A s$lחa~-sK< hr v,}\4p*_3{qLq'n0Qz]BE8LߓQB}xOKReqlvcmy/.N}q%+Ύ $NEo@'A^ܚ%=VDcd~< 'hsFU !5ꨐMh>l=#2x>h&3\PT@Ka[g6ccG&Z{k_E060&>YfYŤ(65]y:￐g]ò~F_Q-utz52ͭߌF( L?')Ѻ/C04Ŗ9|$/T*HB e__+v&w*7vIJRS$Lfc*d~근f8GiIpV+0L@FYu#QTIڔXMШ&]|%žM%6-a:d(F~bNYǯPh}abV RG$ǿ=6nIn --t<$Z,R7 ͜1,sGAgXOߝ --ebwdU+,X1T<:LXgqa=fDžy;7. --#B'sXHjJY>2EVxdx0; f(,: }['w(}G>mV_l߱ ^̩va F/آBef~j"S\*%Q#ϔv#%Y7RMU*}T3.Ϭ߃+ h @u8^*~0#3BYnvSazN>&qk3>8]|}=9=@% ~<'&W}v/clЫ~OKN /~x#jB`v+ynr6KpxI\y_ 'տCQ :3Mrl-% 9`)7T y " Pm xSnGl_T*V}Ivk"˔(xlω~1j8M)D~r0 <,WppHgOB(P@a>n0x|o__^sk`@[e~&A_"nuCp5Ʉd&BяS] 6 MJ"G]`!N*Hplpӎi-*(S 2gUYMG%$5&Ql8UC:}&[:ϧgS q _4AӬ6h>~=O,~_6znv, Yk^£1pinIGOh{̯u0uG --薇]Bf`?~_%.`O!nd5,6LܟMtH/s2^y).1 xMsyPŵ+5doݓrn6ɬ6FL0 @,} [?Ǹ%_sYwRV$P ǂX(}Ger4@MpJIn --lva%WףDfol~\Mx$G4?7@9a7.DuR}qGjǝX\'HVįx@ÉWf66Ju2!2d}V|W4zC|i3?XFL)aQs,:ḧL;qtp' I,?eݵݤ4n=~xo*S(Q/K<WA"8jd;Mo^_T>6#.4[o(N#oc2Q/!Iw0x,0WDe$ J+V(V;6׼6ܰhhr -8U4DjzUL`\IܖbL#'!_. ~@x^ҟ =ɾw >k*\OgW_hM'qܰ#%#AL (B>ur# f*I]ڗ+HA8)5yG |Qd ^GoZn 'z^EL>%ow}7$?R3Qw,x50!Y*KUEUw9*"pbv$Qfu.ipN-pw" yPE 'WԆHew2Lx J1HÏ;QK3XO^NL;^?Cŏ ecV:;+~ll]<9hMUši7^+6o^ 4`!XOQӊ|*C71/(*?Zls2.D~Htߢ :M®{L*GWg --?CCݷx<+gWkUss`r~ ;MRmsQLKԲF?]޳O%_Z-hi>3ֻV\"dr~دJdg҇P"4<?-{&q"yc9&5`҃5`G E8LܡN@L_XؾMj]J6Uuu6k;wi'Jkuޕw2R\31vJ.{W73-~uP͜3>uc?5"n?Zr y„!r=, n,=`ãZ}uP02d0L@=qm<āӔ%e`?2` "CA䂫#'%N  >!ϚҢ߱2?<=b --jP"S+-; >R*867/,t?O1IGq|Od?(ѢgZY5das=斚x &1GD6:I3t>[Za57G}'~` @˓#KZmj}Xr!Cn[}XS-N4&8~& ^*n?QT \ih!'zLitE3dyx 5={ׇFv --ơnU>p%7O-癇q_|QzwϞ b[ЂE/FRjRi3F ꆶ[[9\+S.95s^wX1Lz6vΎ --97wQ,?9HMKY"<Z5^((0+o250oDwf[G_ߵjKV i,V 'p@rj\r4Y9?L^2z}ȦK> --Vwyȫ}~bQ\*B!CTSx_bo+mCwNy=GآIRGCPg6$vA tVzO>H* ) dwOlnA4zFx>r?G~o$SN>q2_ɉ\w=r7Mgb^j!Lmς9W5vWF$z --HB'&9}O_}٠)Ŵ5 gsg@X+dPqs u3ZPdL?tS6-HqN,raAs }Ϥ_O~]nx? U}G<ay^~dcG~VeH]IC.iCbqԷtw[ܖ{i$ijF ]}Yk m}qCe9,m{HF+[8a->b-M4ˍOnڮx|Vr;N ^1η~v]udz/ds[{7{?ɼiI5M@Jy7XSV{?M+YUb!nqxu dIHcp*Nn\&bI1d,)vw Gʘq r]/? TZngޘC enq4&49o5~=u/cpck]]> `<@v=Ь --a1+ HнZUG@S*|!8'fgRc߾FǖZw?MVI j OJ(wxkU,L|/q ?6y`q#OD --q5j|K舜{eݰNd2P&|;Z:Lz --sn1$5:F]joܷrcR̖ʈ,7" a7/qVP[w,N2B4lr"G7r?|%ӽm1!)]۰bOZ͛dhu>QG >==N% O[x!/;֜-E+^9ݱbce'/DS<Wr+K1SϒqΘZ,pqC cő ЍBDjf՛XdM1x|{y|l% ?[hgg[ YIlf}I6Gڤ1N c>M<(AcvIjqC/l38Ku*C --$ʼa(_^1&ݙV!s=(_­` v@jXkAF9Hx8;bD,/Pm4?k~ RX{]Z?OQ 3@{b< 4ۂ䴿Obr= hԀKȫ1~#oXkmWνRmj$ D2uPiD BצWe®M$ƯnS5[4ov4&f/ح?2! |2_+xPj9~z3mպ׈VίfTMwNZc<R7<ԗ܈00ZfrܣTK%6 v:N9[ g/ۮnfHCeyHQN}Ϙ<.BY --۹iCT߾8K~=u_cn@2ek 4rd~GAa{&%,;-x42ɄA"^b5v:X&uQnafU --쎈&b]\dǓs+ewMR~q}6$>i!$Yy!usV(yn_nD7}M;԰Xz>u+tPieMӓze}.[fw~辞}{@wLP~KZ PpUdi}k`lV M]n$awت -Y`G y$<8i݇qʗ#'niZ_Aq2~4 ?6@_@|~1ulit=pvZ޷>Rnbu~'(b]]kxXN?m7]_r1xI \қ4~dPMTq \L#8v gx闕@vNOOcp0-f㑜_Ͷ/Z2򡐖2L'fV~b@t7Q ř6.6V('@wXGM㇁%&ř͵0ҝG "o8Oˉ@NBic@KP VaVԑ}x6>ᰭBfv_akgb9>@RSiA1iefA64h|75431.:imqvzhzn9X岝5Y\xH,vmoU:76.ps\_G*xyzM4210'Ƀj+Z_yїyy[/.N}c1)(CGJpO-+H(*EHKC07:^R313O9)bDFk$&AB?;,$F&469<@῞31&PTsڡ赱x]osf`Q/SX\`ejnsx}Ͽ\A-#(8# mquߧ42/x˟¾nje`#!a5789BZ_dhŲ.+)'Z+.37DY\Î̏!ٷXC6969=ADHhlϸ*'%#ġ[X0gc^YUQL'ƍE3AVi{va]Z,㽺C1#Y]˳!W ;Ofb;$S BWS*'TX]apSK3kIG/):)`( -M 36~ytN:/lV!36:>A\`äRNJEA=: ̝~zb"AEnieCݫ&[=. --NRV͚d`[52/ "%^+.25nQMIE7ﻸWhB 1-7vsT wrmhc_Z4JM&(FW .14mc9Tcؾr-DHLPUY^gb^YTPLA" -- --?CGLPTqlg1nRU!$&;g#I] 4B?<9S>1 #VS6NSW963V+;?BE\;,h W3h'$" S".5Ql#-?# /M!30-OLDwT8-⻸Y#Y{}/*9 --T74t[ Q2`Iw*IiϬ 'bfG!KGC?;N_ Fߵ*?gp*Q4pݠF*Qf<:=/RuUQNp 95=K9P(7oWsI&P&-:)EFC$& q( .dI+إu%'+kV@n)))Mu&)K:wFA>ԡjR9,/2h2B; --: fI7g*'nh&k`˴XulGn[MH;J%g:}p&WJ xcE=2˅5 iF:9򵏍_ \\Xsq{5L m+C{Gx?a/dʎBteρZ8KV~A.Gؠ5:`(}n洎AsE!m/_Jo+jWe{ܣ_hdydhR ZɻpBW2*G%y!cr=(yYnnѸ.S#4Bu@`*ﵾG^WA/@PZ"xK-7&zt@# ȏンI2$VHod*tO*Fx]Z\ErO=̾LB* ..(CC1/X qܦ#(8@s!Z؜4u#I]pLKx&=ib~(nGHV<L& }% =GjF˔ ݄=_SGŏ;}O'MfM'H7Y} [V: O>V7Dps;~!KnQa(/J΍+: 08:+&q=!^lr\eIQwX`lß&`5PUo,PɎVxГ4@Ǹ;4 --~p;Z^-trW}) .wĕ{ND ;xnu%,0I{BfXl"‚&G_J )?q@]tK J?n'Q=}x0?s]?Eo酭K9;~ITS!e)Q{tn󫺧C͢s1О'Ěda_(yx8qH$Sq}܏ٹ;dU'8a <>a)_۰lMiБ(TTCBAT#6k.Wqi.=i)A<5%:!ݱ]Hl\!nٓ} s˶iUa>|WW'束EomgF0f%|T678&o7Exܧa --1`)8B\ 27(ŗ}\deDk՝W9(|gKqGp*d $&}2'lUzGƩZ%U}BVH ѡ[\׿;j<[^z@NL1z!;?Îacދƣ>F3xkl+v}0'eN%&/EeąU --!SVeVz97[KSԁs)`LLyx0N])g=q~ \@pR& --*8;AFqtZźo*t+> 8L l@'6ۆ5fJn_!7^ù0&N]r_>-K"`pcC roWX >-!p8BdOb tct魋I_m 7t ?1Gȏ?ޘ ggyvO`y ~܅A=< s? --xTlk4Ve>R`"JK=3UXM8G|n<1nT̵Ѿ'Xn-P.YTCـS_5E  bF8Ÿ6q{)bH"΂K'xauA&*?}u$7^._#-\ D DSȈA)jc#Mw> &gA --ϾL#EVM'9D6. Cy< hMA$-.q q_S*IЌa9:w,Ps;(pha{v8u/XV4g0bDiֻ qΗJ? g1ݔNoU#˞N N=L,\88Ttp>:EXcd --$ Wok >OiÐ+HnA1$s^L]kFACT}C΄TOWM[|A=s99"Q M/6#n_p<_^\4E>< Hx&.`S#QG'2[D9E]LJO05w=oCǏ遣}? 7tyd<}ЍPyxh9}1 --~ևX6j$3dń6aJpm+ e;oU$AC̏~zy򑇂zSeuH s8.b+/zo`o;hZ& 5 9NeYC.jR3GNmȣo.,#Op >CI7w_1s3B"]a0U> 1V/M<SjLи/~rB7*%+P3;>*^;Q/X4AA.:zƾbqޜw&?}}Qt2ڍ>L'Ox?0t|B,|!StpaWAi:j --* a)(dD׵ k˨7g:-n(p!N},m]T>K6Uq"KxS,Dpwyx[tH·н}oPe`WGeY]yӜWqA<*;n~ $ =#!s8nr6t?Me=`4.?m]VyXe%eM佯an\C737j`bR?db:FPiA)?[0r6w[VU) ҝGfxpN+̞,0(V!7&u=eQa<2Iy ~-.AKQP)y=v~B/_RR&D^#WhPxtE/cW~X^Hϱ&i2yS;ڙ+J;𓼙?3GIO&JlԆ՘Ch , --: ƳpxY sv)̃ v=l#G)QEQE_n橛]ZP0t'"Bax$}y\y"9Y0Qp9(Dnjm2c e>Ir@iHA1 380tL߱FA --(X~)U~_HgLIq{A]2XEp&g!VE7נB!0wF}!btjŒ(ڏQ.M<[xw0V%{<5 CDgBD{_<n8I]4&yS͖ ؟ =b}ga,oZF6<Xzqob7?P(O-M:\$J3(9yJmSP(J6^0b&z @ǡΔ4g<SξP8BTB~?YbmQd-P --Q%Sem*Z#ʫixC~̼/nҝ@ݬ4 xa%fu2rЈYrMYvш':Ӛ }IJ"4r/FteQӍQaõRF d% --3DEc+$E&Hț~If%VĪ㦝_-J --/னFJGGPJJuq}i*8+)_rGKޅݣO`i'<Y7clܢ; 7M1>[9kӍ.>>U ѦRs%EQ*S ͑rjgk"$7 --7[XQq$doHTo~dI&yOkVdg$$i:JnEtr ;t|MGp"Zo/bi{Yϔ ɢD}$'Sp-ĩZ #[?Ȧ ~ghl+eLOƾ&$*i}mx>T.M:AMdV\K6jxѴ#COHE/(dyҶE-\s*]:k$}3r h.U֡!tTw'rM)3I?3-ȥ+B#~(S?s{L,1(eg |kn "]osy;p-/7#R,m<}vm|̴' ʏ̤Kva-(bzZZ ˰gqSg޹,{hwN^>#| -uMlaa!n+ͦJ --;GE{Jɏ5M~@^])9jxZ.2_{4QoTG"9zpIˀ#soU+"u@ąF;og FïY3鶕 kmCNBPzOim /Ѩ hgOq+ צB EthEkhs!& 8I-Tht 2znVpDH8n7TNӫs$-""~!*W3Z':c@_sSg vOب`.;@ Q)09HXmTʦGXq*H4_?f^N|2ޔ1TzF=X3"Gω-M}*<*2)|+s>PjPHtĔTFFp>, Nmƹa5H6_d#&$Zn10a32&1&&o)OLq߾9ܗawްV2! h8zR5Q.Nφd?0<qO%1/r\RGv^~P*pqI ,~dN}M~BGƯo%yI!gc5r(>e/>ֈzh>GoLLwbh1$yk/7]*a+,<Xdmh_ep/tDyd{_ ULս {!>yRiY^RdR!'Įe`uU^$QIR*MaV%\Jgu8_."|p_Kp.}Mxgl|Xr/f,gh u?.E7eLۻmO!0-;i!b ߧySC|I& mf_~U?S֨!y<v%%DI~5zُ:@άf_}҉e*ҮfR"c'0/z4f0"'h!2=Kwytъめ@[Px·)75ԃi~G }H@^VEkP --( "݇ ^} --l5(6`O>dw#KdM,ls+b{YYBQmR<LD5ӊ)Xhyt(GGQi%AMDY\4ĂOIÐxm' =jGmw8S>)[;чS7Ж>Pm{~PAh+uCBKzmOƉb򓒡షU#)5~<ёa‡A)Q q$ XY7>Yo>YA}/׺T(:X2JK/h~CV6i5z<)r~}7tnRQ]5`%Ɇ,Y"iMp*P8<^2 --ˉ\RaMdx:JhBtf wAr/F4kB @gI2I#v%3uW }a_TmCbtsUKyB ISk!فRV3L75nAkV,9͇G~ Vދ(ɬt໇#?l&.џ+Q,/QN{k>26`FC*ϱBMɩO|>uMFH~DpЧQ-sډYS% JD^ZG "77G}M:UUUf;5;~VRGb/r_qƠZru8-2vF5~&_F^Ţgd#ŵB.h7sCj~[F$DEsusQ;y0g)R V8 @~zvf}4†BI Nv/u{DɄ _sa(&kӼs2 `´O,m[ln_V]7H,.j tFQ_FWz?]'E]/s‰d% +dr8kH'c.(SGx0Ntx+{`5s#◧MǀgjRb ԫ%ͪDsBS#8B>y_ J{)x >j]qbn7= sHQ +RMlKr FZg0dVG3p@df=eP>~Ez]?>wNmsϰ-yo9j9;UX!4|"ƴ=XG~Lhͱk --rF|cGɮ$<űkHw5UsWGw 4\fՆDa'3y ?NCNO& ?[cԺ_bJi.E!rZP| .X1 <ݶ9K.@Wxc\DOc;婧eGwiJc/}}N>P$dg. @mB&Ua}\r\x-NV,k0Quk"!/ --DN?}2:$_yHui'6:'.}5=+7[ݚv-XtV+JޟyFյHȎ~],ʏmãa>uU5(뙲iW~AWbڒ`=E;Sx@VAܠjIdsN>ArߍX2y N =ЋLT )N P`ȩsgy~n$ȥSP{ V]}!#a༈FoWR W[~K4|/l&AX [|~(Mco{I#?<.2 $8g!eW Ӟ~Y.z # 6XrZt aT}˄I>.NX6XOa;0 ~}&GoIud)':pk h]6~dߧ<˯!MiUJzqi͸/dyF:\3WFÁw}^`E2(kni,ytx6!vvt#YBZYx 0h'.E ;Z3,S Ԩ>!;ZYgiʝ.՛N++ RIA',#XDg}Rʡ,c4 [φRB,b=xO.k7 ~^˼K4: --LAB0( kgF A}}֧s .oRdm5b(D[Ct`c%B1c$蟚arֽ>OLi˰\ٚFJ D~ ,mKd(jwYBJ7sONꟌ_ACPy‰L.9'd(>EuEV a<]Nw&^ɞDִ]R*YL --~Š89?/˃ 93 -!dbMe˝kO5QP<2Jn4xŊ\xgYJE盂HBUjU*qwCGb[Ա)̰]z25.:{P$ hd.Bc^7 :3!\"N\$<6굔 Up^SP BL&mi/l^ػ:g̾1>7^F27rqQ^5YnGϜMO!Qp sa9`LM^8ZǘǘlnWSp׏  Р5;p]!#cză\t>`ʏڲ6*ѐ?g'"79Rӆ'6Rv~QS)^,S Ɠ{ --*"34O%ͮ +0z2Ɓ~y>A\WLOo_zz1P3Xj@4'\}XQ=,gI{#UDLV՝DrBQK/!~t_vf0|/fYWݸy9daDm!16+C7v +ugnjQ."gB8hRL\o ,}z)^:S37t`7ǽVM?Bx%Y~,;|0\+mFi"{*U5 _ToeY_$/bs܅7'sS"3U[EQ=I+r56C'dۂ_p㿣X!ḅG.@/b; mF~J(gI%ȝS[a)wˬ>N(fu4ub_@&#;TS# 2y6t謭B$&XݞKU&eKGr&n;͡ѺqCtWLH/{+N==yӒ@Tdo" Zs*枱:QaDVy>kɡ;{pMdȩ`bd8v5OF\ 8elK_DPu?? cѹ`);wB)?ߏå8,1 g]"٧F-S!}TBFoWW%c4!Q+i7---#m8@Hyv/R]~xiA5^.'2m^Y'/rVKB3UjC/+2V-Ę&phDuѐ Soh~n-66y8d <>'U px,.CN(P*Ѐ>9@uhlA:KjxyFo@٠z@e¾K::U4P#V ZO*^֬1BJ)@kU;; /B?T^oX --j`imAQ]_xg) --Bò{aGQw}I nP5'$ --wԶ&jǑbX]ց<&pl<4HkVNCInCLyͱJ?m2E@*yn|X'u h --sBGQr.q&r0Фd2[J ZDVnS8 `PEE JD(E:6X= .8qՄ;.'LL,nL=UR #^*Ϛ٦԰O:)?+mZTO}<æYP y?W, mTy, --|ɩlϳB}W" --Ƭ<-'t>nF:Yl1Rס2TʦTGH]>Uv @ҡ!;KF{G3:;\`x- --fDv\"drTx袹3@i'9]=d<31a8!gMe'dP)Z$N2Vdȑv ]'dԅNQ{(_6%Ym4&IxM --I5DȬ 4U~@_y&ZĈAɮN$*uS'$]wФ z+DQ ^>Rä<>A.Nc#(/am!kXOɾTYR1z5%!Ol --J֢%>ŸG_;=QLsPĹlpZpnL?:(;!OקǕIzmȃpC̖;teќ!<]x!6q3 q;9fT*g 0p?|t2%]XƋV#Rt!r%}Kf|E --/3~j:>#%tnfިǂxf3=x?F+".cc^b󤼬狋Q̤Aցɟgj[_B-,y 2&p --' ILEbE5>LrmuW6KRYrԭfe?oTK,NTŚ1 V4i --LՐ)tw-Es.[t'}~`Zc}9,t$gy׾%ѯ;A@Xz wbTgcLݞ'?[r#U|Du!J~3Spa}#i C(1ggW^GB?/$P*`K1H漹V'QCel^>ۆBX\yսoD] lډ۰kʆrݟ][Z|!d qc5>I!mUGm0}z0(Ә'cW⿽RZ Z xvrʮV}EwyoIXJ$WY6rD#<1Umʫj_4V8xl,7]$J~~ѹUX^;N Tj?K]fG)} --a$)܇{9ˑ nIˑQǬ ŎSErʩan=m.7ԍa\s`!]dr&ܬ< Gܝ][Y]_ --8ӹ):1LAkPR8KLK-1U?vԖcNQ%ä'xI^1tZӌcS׼hѺB0)qm"%1 }``[GpB}5ɫ5)_ /Y!w[ --# љ6MɌu6N --JJ̣ꣳݒ ~<*f 6NާzpL7;AJۼ9KI4yG?{ooRާssr?N)DS[r|!Դd:Lzje^85wηF_Rle5PP lUild@ W@gnޱs?q5|Z$a)8!:RD*"i`ERz@,pb[;+%<?&ƚEe[P 2aVoX{`n^ Q\, M \յBcPKⱓjSyǍx+Wtuz{둩&F՛un!mvTG>WhFl`U>i1غ{-fQ g0~!<#6OBa)^d= kJ tB7Fr]HKI̙_#|d! sbxae׍C >N)]AK-vIS/aVZ0Ҥ*p+6)%mqmP%TnθPܮ-SB|4e5 --4Zl=3?ynRc=+ȇ|^ 3C LO`Xԕܽegvz,XV(a&?N.00 򝵻]WOawR,,N#oDKot6eMLzb`rx]_Z"/jmi؋xF&?\!CgHbX7ke^I>g0y0U-<.` --}2:.lI# --\Q_,~X;aUAIӼ':X7#O-({8Qؓo/u)E|81I-7Xˊ|3', 3`e9\f=l2$ol̃n`5+;}x:>ژFmo~{D --.V˃ZѪƲlzG];uΌ.WY}AO{PWdHxW8|٪6e% 0 F+Nj<)U럑r֠6pv?V_aM$꫍OkcRKꎮ d5ϮqmBqчsO$>|\;8\R=p`J* --i ĭfUsFw :?@!fSWS>곜n) 2!ڭtr'9w;M_ WR FW#R.0h20$6~Wdrjf~? ⳦f_3KMWS {QE,Hn,/R-_X=)vRJQ<͓M'F -->X0CD` --ErXU+80zTHġ aE1A@!CQ㮆s(!Jr層KzBRZc^ j0g埇!Gv}xh{4?ފ2֞mEIR --PV͠V$W6aW(^sy -8ԝ~K{S2J tQޗj]HB~q w14 --= x$ %lͲRhha tSn~`g_%p,tݷ,JV}''"O(4륃panm^$zM[Uwx?P&B)i} {jv͠HN Ȟz0#%Iؠgm 5 N5ޠ[:7zfE<8kE<&Oޖ5%VyvpA_k& ,?/?'Ys|@{HVZX7}3]˧wn-if(kna{ --rW͌E*a\ā4 R'?OS --R{opȾ --کXGg's~%?pw`k{GC9Wf_ov MPDidԯЃ --rqky| ҧBg2ȶH&0-/y|Cl"G --޿Ŧz_рU,<6^ "PQct!X;>su lI0Ͳ6O}\Z-n2x#.K?òh`LԶӥĖj獱 99u& ! r6iW= G 9S Aw6ĨG ~SOw55h'LKZxj{eB99P$Y3ˈ(.ciZ-s-EC|@M b21{Ny?HN|!Ďwa --g<02Ih~[xg8w*enS)}p2sOW"ڈs;C-zD63)/;U --,X;~C.X --6<K~v8-T!e3"qybQ@O渻Σ4L -->kBM9.?!a!g@-b,chrf搧 V̲rćb.W)JUTD#]Ԟo}1V%PD"Og%g=Z:p39}m4IPF0gzEx"!Z1Qe_`ۏRj4ћkY `(䈃m,uJhl[Iٔ5ax]pqė-` (:dtCHk~^\Giдg"5~S peI^{#Bex'0uc0KP}CMNwwo/:$aUJ`72ƴ<ߝ,#oZxsS-Rp3sZ N|]zqCp:߲GxiF_^v (BB=-`寞7[:. Aܣ9.~>zךթߩ|J8̣oV5}eț --ys_٬q<,_@% */3`x!|%}ݔ*==T@F+pKp8B4;#Nlw(t2mb1J%AMs"~']WyX'ULנN]q+enh7 P2&Gxd1tR 7 fp*JJx<ycFPIhd[3*~FQTʹVq;7=j﹀ˉEV fW&@(K[Z KOesDDFt!2G9H}Ht)sSraO>8_n0Cb?rOnZK?7L,t>5&Ps+* M1&Mfz#5TIGxfP䈊EIf网_ȉ!bs4pt^R5 --v]Zk#fBqnRިhȺOwڐ_F)ƒE5IYwagȵu<i %]pPݼPLxx)f?*PC2B }';2eGlAU襛䕆o;Iu!twk|d4i_mfbkHT8mtWT0 ̞+y5 _>}L<ޘ3Z87"%hpȔ}ҽ淊U[y̾J'F_XϝL|蚊4} 3rJ| [eU# --exTbi%f8UQ+K { 2 Gu7p+?j><&o h#?GOGuԊUd.zy`A㾢F/}|;?lazf>o"~Nv@q77edkuL7X=)'`#OTs/tO\\l ٧c")㭖O#;O`PkAg:Y`PlZHWsC+@~}d-Do)>V5?6[ حv}nbnL- SK[QpPRf --C7Wԭ2ø5+6HN5l.7 --Akk镧2ᶸ(~ڶQ]90Mؤ x+ ~ʞPɶjD+}. flQKaTKyO1[Bmx2i ,Ÿ{ע$ ;{* EBFrL^߇%*)o*}Ss7`4Ѕ}-1kCho5"eRV7Z!>yl'ttH??kFVôwT$wY?مCx<S%;YuT&x¯0:^ N j%P*BV<ĕWGtNY6B= ]=%+_dhc41©y_[@4b#&Pس* yxFC_HyX j5wIc?#d CW~>o)7?=d7:J4e&Z|w1ݺ1B$8kT,(X}3h=?7A --)=sICt'#O sfN_(hr" ~rЃEȏ9 --!:xw<2eN?Q;rN9@$Մaʂ.ZWp=%&UB1'?'7^~P{K4UcOhC --boS&! ?U$oz6#wTEk` v7Ţmbc.3}57uV --xhgK/yQrŝ2)dK#@>kZoi~m<@l̬E`Z1(e2-h3Gc<Ä~H'Q.~Ba!J4~]~}o+_ezeec6%v R8Lپطk>cA/%1= s} --Dk[pWÏ5v:6j |55.Oا5'<pP@jf>Tg"RPAhԪ-jUQ},b6BC`?޴A~3=le6`<)8jA~Wp1NZ{p\9?3WD,y$>S kx4shÅ --P*& 5+2 uh'$pb*nAycy86m$v5${C枒~W=a^.tu;e$EpK+KpUI{|nwAte9k:̼/ +N<5:VklJnɮ&Nv0'yb_Y]3Xm>&yΡX+è}R֒h;۴ }C˹ÉtRi>NI,7]J"3'ৎ*^mpի˫$4:-?dB7`]XopJkc`k<ٗtA,ԞyKEBxWߖHS{:rnb{/YmRsByb7Pك[sih"iZzy˾1ܵpTy(]ȃ y :z YQpagڑ둊K>Tu닢1wd &N'qvO1k@9ͣdԥu}GUà 2$v. ˰zY 04755AYqE=Xw!XVC%8l0cX@=αo9y)R Ğwr鐴/>/Tϝ+ئ2Z_+ER`f@׺ y,T `(?@|>MpC-GuE&T pWԄD~S๯M{m,aFCMZc낽985{3Y4 --T#x<.=ԐAP*;-|583Z?IdbA㦊$6&pZ)Aq] L[ddJTZklo)G }8[7ݭ~9յhpOϡ --E9 $ͭ07v['EO&D˶OA"hͲݺ5V7m}a'O ִ'cBzJ􅊨 --Zm$V~pie?| --+vX''e:4=:eCbb7ウk}$١(#?1ͧVK%wY󰯹e5@jTq_^[[z*W$bQGtu\[jwmg5X˃-~qy)NZ)! --*˜dϼV?8y!?a97`GEyJ*ʷW 1qNU ar:es<Vyv^u".y9~K<֊ŸϸD9u首 f9HMIo ݼH^yܩS!>A~3(M?hBn%:wLTnX6 }8|%˫C_o@Y|GFGQsi38="y˂Ż]jϳ` QHӯEqENDޗYp,[c;zaפ}NnWC@DFUy<Ye f|0 Qd( --:$T5 Ny?!yRlA\Ħk}MeM6yߐ/ўNYLd-J=}y@8LbȣZK:b֚+Q)'7!!뇭YvvDY*?kC )i:*<~ "^4j ^)`>9n|s'1{8#T|㇈oRAxTYM?qRcd%ԔmՈd_I$/G9v_r = >y l~M/)׎i&78ߺV9i>xnؐD %(.Rب_͠£Yx --B˹$x5wn#i u ;8..'b%}R$jL-Z~r!/꺺_$G/~GyVS f^LUb( xD>a{A1JԜzg`%{m:Cp[q~2.{2=4=]<~ݖ#gi3nL7PJR6X7wisdsDoJNZh42s'^y03>Ҫ:2 ^nY}HsY ce{ϽJ  A#e)\=W"<|)ܣHWͭ(y~e %fykd"ȯlI d[0vX&ԭx#wDq Wר74pęG6Ƒt܃RYi87ȣ; XD"Y4ZXQk --cRr<*֞:s߶)A]?&ˍ,p.7Md~Xr< 10eKs<֚wʇyIUAXM6b=B/GC-nsϻi`s - -kXٞ<&yīF y$\U*u}G23n6-+h.&X9Pʀ&3rlPQ?&?;c%n ܀:pJdKӿuY}geÉUlxd@wJ"-wǣaCA9 o'C --cTA qx9f`ztw@ψG#,2>Yn*!}А%~1 +cJ) WVܗ|{8u ZҘǙIz&.@Ғ m&$:{KaM߬XMn|Rʍ3w<6? --3-Nװ.M+coI+ R◉RĶT/x$v~'<<|,5UBEY-_Wrt澿622{GZr !MwŸ|4UһV7OӪ*مǛ@+"'#ZgY?yk:q]O{XISyW<'C|}O_ FvdY<^e7RaهorA@ H`UW7jC5zX vpXmjTDӸ+_2MN+_1Ry3g6y 4[/蠭 ӾKlв݄:7uNӋq --å@s<α,8ͽH!$Y~Ill s a9E,(c&gsH-&?as}J¯ڦQ0[DHwqQXː;skww ;8?~}?"Ƹ;ͽõL"huN~ʓ^* ʕZ?`9 Y/M ~WPDH ~EsK#šM$׼F'rnEd&MLi|*uPF-XVڌ nva+öSǺ[lj --a$Ǘw]g@˺-XeZ fzDܧBBk D ˍFJq݇G„I_x1sXsBm?.8x5iPΠ q(| 7`;`ly9/͏b_WScJalQV:ddHìizn*= 6OhBWe~sdȯZCQ!!k;IMruX "u: Iy3Q|Q%Jc=Tǝ<dzI2ű6._a Kz --*-abi/ҸF~}(2V G(weV:[16YH[>3Q@!S mG96-Ɍi8p@C578u<Zn_R/"KA=ohS5]VĎn(NVi' YPcdȹs<)V\BuvgEhz+"ԣxT/"73.< MtQћp_d)){OVó<»X&B9䂿&Wy,cg=;<+svnm7lJ~AwF}Md3oYG6E,aדL7T9 1FسgG(;:h^o%Պ+Edz͔E{Zm^yk:N? _"UQ}wBTcطT/9Ӭ|CiaX2'ؼwЃe1+@.cQǺ&%/('b6sF;MS7>@@ $ukCӽcw<4Ui촲Q X2HusO}@)+#8Yje.8oXKZN_$i70xI~ǽ6*YԓՆ1X ao( --n0:YR_i s-<#Ն p;Cy'cg}`ܴSզb,Yzu綑3d*_6tW@,Jw~W+re4&xd}XWZ\){?ZvC $)RcgoQ؋H͏ --U;2]*=;Z{lXm9{jm&,X -- چw\oڟ> /[{9Rt%&0% oG# s|Y)=Π:}0w(/:e>|@U!Y5ws;D]=z Gk,';Z츾=cHWD>!E5Z`0_fJ֝r?YQ|{C-\˸6}!H1`=B}vZ;Pv,<ow< P?žoiVvK-#|L 4;# --rk3^~n9V'Ps#RîPj55(6ӷ ձC)G}Z --(;CObXa;,:RO۩Dh"?V wwcU#?#=e2!9/ax9'vyV_EG`x= --_6"|0KGO*u=)1X#ڥ;I迣7_RtFPFkLlr~%*Wr>Š1 --cKbb%ˆ#Q&-W̴}H=@1䙥}\xp#죒 ,+I-c913uWBaL,Rd} (6 ~`B6$aDA1c w+g1+˿~HzV,G0N_vQ~ۖ%O$M3߅)fR"㿳4g΋15*xnmwYum%b.,Ah[`R+Y>u $|G̓GsMMz7JbQ70H¹iW ibaBjgXY./Vy^~T]]hi0*UrtڶT͙0 ;<|]βQnBIW`c5c㲛#fӅ˥FBojr)$iN7;oдm=*$mo V GNxZ{0@҆041Υ%lܚ1tF㴫hN,(( 13.h]hlы~(@b0EM)qC"M5ޢf]|}nfX/..=X\E3p4wMV|0.TNm1!e_f){sLlHeM#2m^nN}%ɜLAik]yZ --tta=V E&mT[{I㏡ jӠAYM}MRvSpC&kJx]Ibuij'C ( nK'j~n9[De zsMLS׈W(dW,,PV^^է-`\;~0p5y-PO`3ڭ,X|^ --YY6v+,\ >JpҘIͩ'gJ^2 ){7(C6Scc UZy|هhj[D)H3[Sr9$Gk}#lC_Ӄ; pb)NoeOPy،Ю9I3,=)5k --c8\H6Ť> ].KJ; ݤVOjZ$UKa&SAkWWm _quF9ey뻭}8b^lF.Ke wX2Z?pݒ7QE25AV!vl2Av]('MPsnqNrCH'~wX299#ZE`ȡ^e ]o* $iDq6 % ط"?>14TQu0ly;v1ԏҫ[ OFj@wOY6 1~r7NۙzhJ՞mM~+uN|s,@gou1$6ϠD@"&(?0K}J,bv2 --SD}N2(n<֡kǛSpI*lZk7%8w Wjno~ ;xzy- /ڂ/\5VRM1$A9uE y@d~$FwуRkÉ.4<[J}LkYjM.fy;dR(7Mʁ: ml3WUi3p+)=B)<2zv$hVÉCy!I [:Ӏ)YZwBS@V{".#5x<惮;>zffa#5H(vtz68A$b8Q:tLr%rO$ZTZ_}Iuw`ؗT[35Ly,~tb!ODz7QܪɜO@:O<[~=?QD#%bHnLldb;d l̋=fX --[)Ⱥ[:ǹK䛶3s/ --xI --¾`@B~繎06o ̃tkƎA=pF(vѥxO5q >w3 ZLgA~8}0(#*_{/.#=c7?]ò|HǮq1nQm^K9Bp8zYK]d#Ycdd[0' :"lf};&:5ARjA/1%c -- --yZ ܀Fa gP1q)1kFf}DMƴMf{bi!*ؗ _0dLjxWW-[+Buʐ_q?u{lF2CH;Tk'y̘JjyX --{ <!ò*`sA\_3xW9&zAwmZp誙3h˪ə p1G=?םrH 2).:'~e,F6>2+<,J --I*)\, --tz6RհX*$ f'-6:A1ͣή<$Y! --P"8V݇ j>[ 4OX]:CfPU5,sx\&=GfJ pi#"nnBcL;c}v «FBtsKXsȃUnMsde7IVNέʃdҹ{s3**X a`) mYï0B08&TTGExp!žnS8qFXzF<W@3XWpzX4$nD:&Fn#kUm(1H25ֱ5a;Rr.v"l.$iq9"Ge3JeH v+AJ)5:ӽHhN ԎL0ƁF0 ORQ#XA0 Br:8̙+e&mp$?Ё;SoqŊe=½U/0˚e2|V M) eM$6<#߇,HǨ(xXfp Yh\ν~sGGne*2u/oFf]BsN_)g)>jMy-rq<Ċ[|a 52#6<02ps P"@$6hU"ӞJ1 --y2E՛53 gs2aeof@+9沪lt=ap|c%9/fμsD ?3W#P|>6j,bbuSNT1vLoLs.!ϣ<FlMg Ca<3Y|vCҧСrR&Bu3?Cr}nQ@+ta>کyOO8ܬJylSz?iflu+nfYdjz8DօN8'n.3HuT"' XKk̕L,޸7bTu}fF󻗔?(0}C7&^4l˺Y(C *(d\mGHO| Sd(ݢd/هwdVW@õ+Uf+bBFJ'm>9GGpF,"AkA,3WM --u^%@ UC qp"cjS[FV-Vy|Hz="[c_?z$:0W>Ή5OxgZ_>R:AugkxŎ }cC>c>ЇMK7NI8;=oIt --Ѧ6 >qCIJ;!c=i@UDfBDZBiJ>4!Ok:3>lGr@!3>tRK Q MZ3F Rcg 9k 1G܊Z~,k8rc=2gMT~h8zuξ1isR6MBjծ,=r(4Eĕu= L/GHL^: Re}y@gt'm_=Gq9ݝ#|@N,e+(0 }14"H6- xp5=ZsJI? /t0ca|-x(Z^5u I~~dDEdTJ[h#IȰỊΓe{[6+BE~F~M#2EE>0-f ]9皥4ЊP5HHKn~Q-Nbg75:|+y+!@U}op".8|9B'>WaH$ oe7[5 =b%6Z:3CeSl;.0J^T:6 s!^^^?gHT O u2r}0-Q-<}-l.PNJ>W3Q#hgz)i2c*q08ֱHVy 'SqլzM䯐M:q_$.{,0OHnڰ *A5AV3 \> ^U `s;)zHER`~w/sʜ #E.%{<zA־6 5{ u3q? m6<@gDlRBBr lhf0gmlNӝDr1"&.s=qdžlCάIoZ7)D]CK:`ˏTiM~eOG16fTf[#vLw'Qp%8VNVƌn :˵|۞Gَ 'jo1gfcnn7lkCBPmKyؗ+"Tl Ex>in㉸!zb8Yw[tʩ3HϮ)SB&tEsWspx --o8(iN8ʳ+DO#['CB? G|(& C6ȫ^5y|z@?f5l&5&An8F7ƅ?enR --y&T߀NΉ|ROM[.OxlI~ (ڛ~F|+xb#閒C~΃B3Ը(Mv|XIQ$ϲ`]&jGa=tcIS/5e3LJ~9~DLH@7]? N7r@DQS^ţqi@p8y@ [R~l謹Ҕ'*sځ{$!tH{q{4 CV[G̲XU GMvіG7PbBD,Y(j*aIhXJV 'A:dQ/{~ !>u=L9T^&M7`<`լ8}ߪfGCߍs!}O+'cm>~tz*l>hσ_K)o&1>Ec>wہ8F3ؤWX)=S_%Ѿ$IqR7GUi1tI_|X?*P?h꫙>A嵶MI@:+eppC& Q%e?7ժ.HWs^힋y&mvEFp[Τs3tEmHj_SjO;P&"A">q#Q-}CZ+?֯5=ve]W))E<b0D 0JP$g#3yឹ7}zJ`PR改l~DnL7 -- --54v mt, %Mf8|=ꙙaZH:恦ìUdS҄W?gr~I[V+:x|XTt#Yf,LJߺ7fOתe ?rZf =T|38'j --X\n:5Of{ b)T$"(Rj*Ŏש~ƏP桀2v.C =^>i3ĕ%c}>s?D0k9M}'JcuQlʯ1)bA:C@Mpͨopj&j!g>8[xeݍ --Cjn˘F^!'5҆fgyn$XnjUݷOCRW2'&<qC\_r%o^K -ptyNxDA "_-+vQ} ICCmZxǦ>|4&gabm=LyEU_*Z6*!}1[">GMuS镔;\#sQe}UL>^EaSEJ./6+KK0MM ̹{7ц~觘*'CKZO>#=@ЙIzVn\auІ:b ¿DcԬ>Lp`sJ3uV0`,W?j]-~| --@iT=nrno Wo-M+ݫ%J=zrMj 1f",;U~:Q|@n:TYlxd_!NOGTx8FEw%Q]ЁHc! X`oF@2ß˝Ms떶\`r~8X'ι5cD}I/ 령ɲnWM3&O~vWے&/>ZMB/~UErMwR --3]`yop<햵^$%E^ŨJ:cg:bǻA8}zT1dթHpH6\+}fYpA48%p־R}4Y)pFcd?e6_+5/y@](; Gp* 2_ÒVA6bZ 2Sƚ5/.c4dZ0JhPqK:Z7//qUfKLG#uK&pς J҃0)h73BJ[5,ΛIWvaX89Clf]~~d_ȸk%F,T|DmMŹet))U']r A<)|J G2 Q17ҔGNR^7O+{z>v[=p[$T^Խz_-%b0N R*Ϳ8ͭgV>㗌 .xpP:0H9p,b --endstream endobj 29 0 obj <>stream -- YA;쪅L7)]{݇f1!܃u'eDs7\kYUs6@ :Ddu bx7<_sM9>`\)vbIZUl)ֳ ;rW`Vir}I~ :&5;K&K+z 6QWÏ%?]+8 >r&QLA6byGmc]1X!~Z Yɳיv~oLIƢOUJ.kGR@D Ue --Lb6ܫ<727ޫXp^!U$qžZ)'_{ T I8C9C!}[wGOXXy1RJ7pj̣?c 2=s\.P< UimY[MXc)[5T[RTˮVP#yYTPUSy5֌ b?z'0TV/cy -- --^ (CT\ҵRt_u$AZX݈ jjT*AF&D T$Sma2ژ)*Jt=`N1 ӡ?HJb-a# Us@Ɣ3>$6@M у,T0Y#~Jppp>]GE5eDE*C?jV_x:YZHq'֊D$'g --g,q@D.ыsS{yۯ^3>4D0VC8;N M.MW>oÓ bg(_'JZzz=w<13͞vH/ꮕt<5}`UB`O>22w@~t̀tU.9S0h'Kګ. --u@Ƶz jp='XFyICyL{i O?#}ap ?:l޽FTC gل7IC5׊(,bdѾ_?z#@I(Q6Ky= 6v$ ]j= .ꂡ2b?>M@nn"Y50_qlp/uDSZB)z!n;s5%(T&ot5ۑ&m:NFpjS$%V|vւF*x ? ^18şxQaZ>#֫/^/Ⱥ/m,j --n ӜҪq;wQŹ_'pVL ?_h ҡ6磪@4<B 㾅T#t\I@ ,Kt<`DNʓGÆY YMePy(-yxί:BJ?ʛlJ'>gJ7z<`/|\͈_ --o PŐ@4dU {vOB$q6bi.@y8iuVI['2`5yGR ],W})Qe 1IFenߢs˼s>c6՜1*} --ge!vuWY ;fɃ&k. --Ex\DK V:% !{9M=?@:bž O/=^UA睢  lB4%ၿ{Pp6w(fQe}<͆%Qitu, xDGǓ*TEw0:`kz --\/Ut!qXgR|x o}ӊ܉8c7.:#V aяHIR#/izjFOOȣg(PQǃ2]…Ḧ*ɺ)j5lr3#[C_n)IdvzJHOrEdh'>YG#|bkg$AO O@()FI;;,$\gtG:1|~߇4̱<׀swe\BF=Q+ --qO;5*5JK&Dŗ,lXt --9ۯ!&rnl>Bk%twBH(Q#. tVH:Ƀ Q0cc0{Gղ3}=5)/OAE& t3ȴ5_Lt4Vѡv~GIz h]r~%1gBcF2qpz#Iay)|ŖQN?1o0# mY.^x7ar\A+0Y//wU9r*l01kxn`SkXI --kҌR% 1CǪ7b,[U2,3t --0EBܘNa=ՠt'i).YkIc;wJ^R74`fǶ&*J[҉}o墐n2Y8:J&aȍ@;tn5vP<v'U^-[ NĐ+'otɃIbT2ߨa)ׁo`:A괎K~*AeflR03QZ%@PjU=?v3WyT>?V'`"*-VZ:O]a渫ǰd_8H51-SFbWwfWcr&>),Z7c0C7]1g61v1 --"_I$'F@n[DZy\fAAU^jMAx z?D݈dTV]$ ZvsV4ԛ6FUz>ԔViٰq(7 c --+@!$K:^,6r::SbCkk Okx*Eki8oasw&ϱni~\9дUJ2o6d PP/t!;O\~Cģ$,UPՕ' /Q9%ٹ i摤{b{^voEʘENkWtw\1iy'q~0އɑh&B., --́HvYH9R/8iVD"R&kh$u4T/xHRe#۬#n2hPzA6*yny, ET|QF|OZd?mܓԯbvӅbV@^tyg(e@`>kNS37D~{ДiP`rb$87 rFw;*rhbFkRi/7q<^V<]]ncR-cd,j --Xd#h,!v5ձ`cǒ*qQ2#`m혼0ެg&>ǸNJ~h#Ec4R_5X(:Zs.d✷jZzբӼkq@Rvnp`E/߸\߻-9.3B<\C1gpE#Q<H86U奏jgkz[Zx h/2}xrpN@HGoFfխW(AɏA3ִ+ V'7M4VHKA^ *vePGO Re+hs#$Qn*G& --1Ê(vCLx熗S"4t9}ʍkb3&wl%sCqBE-@7~ ō>CAx)gy:a --[tќLXTKE6M\UNsKq@$On,2FXQKUm ,9dC氊n_߱<&"ԭs5H0̪hAEPDj:`}57"4Ȍϥ;ZH8'3/b`WyLImg GtW&꟤_ŽdJaL(OJ `EYbaϙlӀ1p>ߜমYŬlU --BDX&bA^ ~S؃&bSH"^yx2a6x_$AVBw(s*  6S܉ #~)G~gs25Ua 8 ?zAn˟xs 삨3EZc8uzKcs[y>P [fsPLӗϞ+u j͎ LnQHT0kar --H ;Nb))TP>QHbqps 4\&;Dצ'Щ --tyzyFc4W`V'U>A =U/"gi{J}T (LIYIFmɏILL*=tJ#)e4ֳ.]>>+ݨ: qj=*^"5}\?nRlp_agZ? صu$8W=,' Ry&2`䧡n --t<U-8 M --`m}0EFęˣeg}Dme'HɛO7QsR?uNC~zV BPs ~ר{ --}2s|3X^ϷB玦n12>H}?Itu`9Af7w|]jZYڂnp8>-40}\zgѯ{ٮ~\8t+%1AMW8ߤkI<|oʚ 1NiDs?Z'tl2~GPOay৙f脼ĹP1#i_U#Q --zv/9DGS[H "ئOR(vc8P~D%yL[~l% NMLIXn^OI>_>"mG Lՠۥ=]@N#˛XO$+K0]"2.{gyC;[u09Vt0R)JD;-Q&DEU?~xg c\~ --(,9b!8m#`iA\:ֲܡHpD~:0RƳ8j\jYD0@Vb#ldݏ T5Sd~!lޠ{5+j>&hWY --֋:Bl3q6،zZ+c%J*+4qj}HMwHevM1gW 9!a=Gg5g)0MwCp̯x, h{S{+w[hKA?(D_iϚyh2 Nu$ UPܒVX,)-m5# &G 해uGV#6 e&mimV^H}Jw$#y^*QI9"{]Q͑Lc51gC=o~\ ,ԊӶb(IW3zn&X/*ƃADҸwtW'9v;7k/;(:yr"-'~~*1p?]/H䚴y34u|*`zB9SM<@K@T:3Q" {oz N$VC1%[]2F --ǹiƤPx  hن >B --FR _Zt!MxsL\4fdMN:p`~FZ&,֮ګX-῿-`QdU:|)_*Df)U 3t&!ݨ< _/)KF $pOl#z~ %l@g"ܾ.4-sֺ*3U֒k\@YiP/gȟڪG#⽨p}9mM_ Mxa~ wN7?RR`*Y\6{3cQaM4PP(6#|Z#R{&FxZ[ Ia;` ]o(yZΡRBo2VBܒ:PL];jgf}7$^]L; .Ha/K:x2"l}+ G;)>!Tetlu\Vz.ܒe?%ЦyJ6mV_nSQHiiTaoU]eUжrs2 --%EٳΚ0}gĭ;/mev ÆT[>3h)og]]JNX"/+=+4(*{Mf4ޑ^s4}})T3M.UeHZrss !㱀ߤLt_A=5)@)ǀ X& ̷R{ Ud"=QMwJ.d1Qd#~X)Cr9]u&s,uxA --| jc3O "JvMÀ.>C` Gz 2:C?ޘzi>w0įQ+`!ȴzmC08K=z "¾&ehMH;:ӏ`slpM!\t;uQAGIkXVsN!)&rPx$tl^H9oQ3ȄGu0 h6ϳɫ@U*5أK{<9Qrm>h_?ШiNT^I֏TztFd<sK!%Zzq޾?SJ-&͜;1a-dmn\Qd\o3o[plLA#n7l1gSs} #Τq c6D4!-_0*Z)<ހ#1Pv,)t__M%oڹq**V^ܶ.HZ[Bȷn<%\^ldnbOxWT__澷k>< --= lz{ q( ' rE]Tʖ`{-,UL1(?S4E+w Oy4W3٧ފJՇ*"S)V#LQ`Ӿq}9bt~OE}_TyCH 2藨HYåCziPv5sP}Ʀs2*f|3=/Y1EX،us1}A&G͘V젥uuK8DKsxb"KCWsg,LEȐ"'QuSP YS~'_+!vB (hy91aG;W2so2Ajs$ 5A* C(@]ےq`϶LKHe#l֙\m9ψ`h,SӂʢF92)Sg%O )_V ЫCh 1 ARKPCXrn{MO/y R`|- )vЦFt ^+ ߴݿ --#4ȘcrЦ-,1FZdax;~ Gp֊(+Y0b*,u6`V Cۅxҏ >5v/T?<ĐHg&ڦ RjNpw|Ad䦎E\-ʯg䪀 VBTJ[1O;#J(ߎx9? -ӦoJތV6v;x]qؗBt (Cת!8CeX1TJh+s'˽L}֌qC99 1 GMѾ --6 .6 --t0)\@wpmC`H atiV76zfK~>5' H r&œk$ZZ;rx.ѨyDulޞ㬙оcHM CBu'Nd'i`l?(hSqcİ('j^!h#h5yL>b\VeJ%V=D*ѫa}Xrx.+l Bu3j.gh0'R"l6/$OZkVBn M!AHՙ|(C)ϤU[whu)m}\_&$s&S{ --jy鶂n#%N"<>ߕE54P{lV9_ToޒY=z c#7lQS/A<z:j;x8S!Wuk/y4584bKt+Җ!eMR<@G~,w )YVf4)BF^!ٳ$+m im)V 졳c+nwn2k w_p֧Y9 [O_wЭ6~p*/Eyp-m$GnSLLVpO0Ze>T:gρbL40} v]ڬ }8 q^ --flitB,dvjsr' +lx-Я|wz@%Od ެмӜۯY$jMiQGx>qZ8KWX~1+ "1æb:Rfcer7V&O<>*M{1-/!i1䔃2O`w=N[!=jnCD +[e6=56˾좠/ ,树Z%1xd*|b$Mx&!ȅU,ɃhX鳚ISNr2dv4J۬i,axLd%anEpwDT$=8)L9 Vs --b\W) --2iYط6Fй`3. ]#MqۘsR'$2]43 rbS' >ƯG+YP^*ӟ0+"̦}(;+:af`h5NqmGCHZg2!X0/P$e%8HZGi#(TO}p.ŋ]6zgҢ9f!wȑN@ۚjv+Z+t7#x ׷,?P({?@ -KM!XDWBO18رWg3[D⛸}JGaeo<+ ^zzW kt鐆(R~Q ^[ k, MېfhϮg $ 2ˬ\ۉlɈ"ݒfu=O ?[>#5V6Bd`BCOAp;Ѳ'n( --RGԖS@ڛ^I$u+ 2S1nؼBfT]"wE[9$U{є a@Qf&9 :|f$y6?&`;@G.if4fxi`T}uӚJw< {yJ7^훛״Isݐb+K. g u8nȚSOqڸ-d/ FVӅo$4i$葐l@BWʫ KGO|UbK cNN2;"B'&@l4"C6Ѐ&$}9fpG*-ǸZf$g &<˷n׾wO%IjpfSo&þ "/U^dA#q>晔BcS9LۓSR6WJf9^.hn I_r3/wͣWl8bƷ03Y=DoG /]$֌"nMG0f7g)eSm&WVr' Wb>Nfd>6%v};4bi!:aHWfOe<~DIzS --RAyXw =`Bf]ق'01S3G($Fs\p+DcJǑN3$NNMy~ea7_iWLe~SQ-.Cvpo9F猧0+I,Ow]< oDYY(ߖȚVɦBgyT2}F۽fR0q[Z"ͪ=}v0$Ha0'h9ݎѤy?9(ɄI$wPwWΛ◿~6BlaibጠSG"_6 b\J'>nh U}#6ʾFs.^M%f; ~!Hך?:kc .xK:Ƕ8hKo_G TM@1//rBMﰛ P<}Տ~N`q*D!TR~[/W$oJ?M>`?eq'8db̩ȍkLz!}E~P B0TXH2 g4lj 7 :Go.^ BSԶ̾q1~w6S\~0΃Q.!ǚJSGKHЏr5|_<N %SQic=1m}N;')F13~h40]h [mQ#*D32ĈyU9G%NF:mi[=z-pooSpoj䷖NϸL4[˜ Va63ʃf<~@h 3* `֑M " @46af7?<d#|HId .gcQwa8ZO7HۿF/Ѯy﮺sg'mԸ̧@m,8ȴn4h8 h. --6 ԲIѰÿ1 [[b 4͟ʞ˦31.Κ388˘6/ͦ7&A̝KL/˶/ Ьʒ!ɀʒ~(Ϙh¨^ x --5"MdǤ1Úzz/7a{tu-g  ኟČyvll\GĽ~jjNaji -- 4¾fp_7&^)cp͚D!._  Qdlo4A¦roljh\`b1 f[bdmಛe !xecXai FvlX[]Qa &veb`^lGCevXWWs21H3HRRQV71QN,* gdaWdO[ )He8UNRSc3 @4oYMW rMX%D 7Lf]ZOJK{  acPcb_[YJ!k^_b洙g8hIIJ'ZmH{XKJI͵7&_cu --+`0HHHhQOMLZ1Md&ʌ2eM( -- SHHƤ3ImfB>GGK4L,~HPFg21ٗ%l+[51\P_[Pl]HG5 '8;7&-1_c!Gd@^X@*Y6B.VB6,bHQP0 @ se :~;)RGG"j>x})~3I{=o&r --nUVB=Q^јD,[q3&jGS}J~#6Ns1┗x}B("\4΃ --q]y,uſ/NVqe]&W|[ý[i9Xי@i8{q -l}grVU4ރ:^}Vdyuz>HZ8e:NFMD~^[_9fBjD\ZZqiaŽiJ * %NC[,iX9,G+6$+/⶛D x+rhIj284o`:zThQԆsg^~HɟOae(ooN9Z>n\ee\ 6S@ti#w6=D"4~%Haw~$R=Fs*ndLӸe%}dG凙7?`KTbl#E eNW\dn'[!H2o$QcMr5]:Mv'ڐDnhF1vA~k'0uӖ}ۆ T恾@eUtMGݥx --# _gCyؑ R!y9,3:QSga˸}!q~`8C4X|$81nZD@q(4Ж,ؒQvgϣe2=i>75h፾R5EѪbe"?i>ro --YFxMTyX\W%(w!4vlǔs#E\0 P KtK9 ȏ~ɑO#=W~hHuak7)e9U+ @y~LFyّžM_'xW~Ȝ҈ƨ}}]kP}H< fB~쪈VMtAr *(Dc$f2i|'£9-Dy2LڂOY`~/dmJ\i nK_2K`uz0Kp6DHo>V׾P sxx e1|N [*SPT:IfWyMJVRgfw --;DpA%>)މ2|2@a얕wtCM 0,YnroUZUI  OeHllR~ Niz7qE=~1G R5)ov~Cm8E<;X~%͋W% R.+HAPpc%eپ=eC׳3µ<ԅeZf4tcU+yȩq ~wJ39g$a?gJ 7 !as5 ^5}BGP>?8Ue7k ZHY+Tފ|trZ^6=*O~V^b~` 19أ9rxwMl+؈Yj2II"_UB<7^&KSi R!wxݔwh0TV(8UFq/H:8FߞEpPȎQDgal[=yph7K7i,9dԘ͹Sgzʾ֌, 'T<..7p3?5KLJ"8_v=P0,%7k ~Np_PDh8u@ezn4@|nF#c!|6hC|-?u$(ZEyx}vm \WsPF5_M%x:m~%7,Xj8U/<uJ3$Pp>.w8lX%~S8a1rf{ ;:qvNt+ --L}.u^)[2&;CBI41Q --Qe/ŁQwؒW7 ?-^I4e[뺋Vfz#C9홅ae}N SI*>*{UP(`ŘA&-.6iRG-z@" 4C7 --E6QCws};{|k.$ 4{mrݾ;yEM}T; J84 WgV50]\6452eEГ%~]ZF_P@f~8%"HaVAdx&l'?a^^h~?Kn/WnӓMGޏ-UozQ!tl'1 (*E߬xIИw ܨ5 r QsgZlj/ }("9#*x;IR"iժG(8 ---g)l)niU.a<\" y~,0-vRs]{9 XN2cYk\ahY$Y|hJ-A(bZxU-9q<#&D'gͨnOY;#k>lpk _ #.Dxl<0Y >9*\ⅥuS4KM+5~<) -- ZevrS٢F .KiwM'Q{#]*2:,bY\'^eOE{777e&0Raܱ_ĆxA0=@3J<+e7s_kvs#ko@gKIt{_v}NH]@"=3Io:9d;!(Y,f[t>MA?]8i,W5䓔~2.'߿,)PN+k?#T"̃p[Ζ-ٱ3V ج(|dl7 pfO#ס-7clr z,QgQ|e.Q'"巣6t}Gw$EATTϛBFMS װ ]Tyh4 --}SL.ރ:ʏ>0, rmNe+f?=Z1PͭKp#݁AY7]摔$c u{`>\Kt)jIjA ;'}(, ,_dZ,Oi=?8`ybݢ;X+ב51x>2rD#0%Sہ<.07ʇn6vBTXt>~PR)3I(w/3!L5з!X EcۨUE>?R:h5׀`YMWxk7 =Diqq2$k׸)$|=Ԓ&rbGJ`"; --fMC)䯄$@Qh$W\) wQC"g@NG1.(,,=؀k-`X%~_cTRlC 9*RY+8KclhMO'",69X#{egpu55^}/s_*p^Mr/C2tFXc>_簈} Zloo͚5~o,!Ddl1f[,Cp';7 '.G}6רPO{/Td O22uiM#Zwזnڷ֧nxOc7i_$ uG|՜n) h#9Z*z%IZ5-JC_{j 1= ;Yoc. r`Zk{v^-E(vo|ypծm SY%+?omK[[p,$e4yO:uPd/ --) 3m e5!ڷċbL_e} --ɗ7?ؖQLIx9=H"N{wNq})q5RC߸ٷyN|k #өX-#ETT::,̯+JXeD^TJr>+}=CO)Uؘ29w.Ȋ;x θa^zޤӺ 7vr%IQW8S NH2y }ӵĐRVIXekJ[8b~RX6SKy&nͪ@H(n"}_8͛t+Ǥy/o2nf =(8Tť}޼XxO5^jYFnʅO a>_ bI+p__#i!u*gtGXu0S?k!#!@'$o,* --.( 1Mi_qs H$ JwM rnUݪܙim͂ksw%>؇+M( --2tj;]? ---*f#ؠ* 3 Gd}:_G&F`ך >''/V;FA17 p]({yU2r qdfM G*k\ vqݠ8HۃFƾ斏uAE6IF7r'5Q'Sgժ/nĜ PQY)EauL[ͩfxQqyF_K_/]wx摮LOa --Gs^d3GSd]HuppB!buTBM=AxUoRSp(V`\efL|>jKl5~1¹8ՕܧpB 51Qҧ:NX#K%Ldf׭h#ǩ{RzP/Ocǻ͵a{H:JehN>(\E; `:gȨ}U:0l)l5v5ͅt<JH6Ѕ,7&<0t*_x"GmڬHiapT‹/jjČĈa]|o7#c);`Sݔ --8;8L.9ߣwqg6(ɛ!o@ 8KI{rvpΛPҭ<0P _e)r3Y((kE;٨YcbRi:Ѓ#<1\VD!֟$irU{ThgmVqK~OI"$D幮0&2t7lVZ'uItϙuGxׁٙ7gf sAԥ?{aqА‘Ccu8kx6b^B4!?4􊥨sw0 --nntlbnpZ --e#.{' W/CÚɑnX(ɯ<)vD@,]׹wRtC~b?2xq/kjmz\BdFLɊ C<(MͫP c[ /(I>]8fsdKU+! `#Q"~Jv,TeЭ]..JY+K#z.TN3归Tk._gn 5(*irDxHp00 --P@Drʫ9U}WQ΋l ~P~Y_ZLHqV*f͗lldM^Ow:3N]1u:H,$EpIR&{ pUd76Hbcj --zv|!ds1 YgQ=(yA$ݫ7nk2WyId-NYg_0XKZ{5Gٲ4y:e UO^ϵY*+j ufii`6c%dB-YnoOYGp?9sٔzMZbz fx>SG6UZG#ޡf\ --^J -- eNTd\ --\`Eo ]Sb>a[:lI:=k >X,Od23_G3W=]"NHR+O,6k\s'F3 Ee --< `cTRbIgalp)̔T8)^0 }!$'k+]yV]L׋`& -- F; --ـnO:߷YS fdI |Sj/SgBfyLa K1FkdŊmQ6'>XF2jO+NiT=WGEemKʹP aF5jeo]2Ǭ71K  bfidMF'ce0^dKGH~dDZjGlGgѭțZ Ȥ --]΂Gҡke(%@R  ,fĮQ"&]#(gK OƤ[kGڸ d1I(D*cLz'5ZdM0r 1Zbe[:ѴI\˯jc $H4R0*F>B$(B0 B`(  --0H9EtfSH>r[Cx(F )$b!?<ɯ#n J\Z}<V Zb)-!2۫Q?A܋CW --_~=%smHWx|-`"bb܍%+ޏtU>yA}@1ClŸDȵˏѵ(0HPV#h?S'K.[fRjZOyx` Mް//kQ~SXz^w.:)| ̥BDz_cucqVPa0Gg8׭؞w --v[CPkp V'-yH7Rgn-Gn쒙aBR@ 7 u !ê8:+NjY@] 8FV#GyC-xL& NP5Jf3CY`ph6-%_p [zSfs*z?5C6Z$Kua?aASZ}Lǚ"r?z*0ei+:RR!^"„#  nEs:MkϓOE>7T+̪( zoӽ,'d$_䊱-+;S@Y /?زj[Rrl賠3ݗM d3p:xϑ^yxvH~Wy~ӸL/Cpd- &- riav"e%y@oMwjc%ΙfJڡ~e11# 7=oc ߈j?N.j!FQt懱l --ѹeQ +oMt0 U qg(&-ӿe%B{_TQ -- |THW.BW --ی5ƌhtڶ6«vet|O}Ώv}tƍ (!)yq'peOM~?VZf4+?rتL~*rG\!13P7巁eSoF4R4jJӐj$aNdKxq8P(y_PW%pNGe~##V~|o>N(CBljyB]k&ZɁJv=?٩޲GE.8(~ݬߤxh5iJU ]DN-/UW\fR73by$VT;ʰUg55q1FLCte2aW<%>OA*DߜN+֐Uq0y5`[wq lWoղHo&%!ѣ:'AOh;,͗T}(d0;~g 6~Pmuh5zd҂TqHV9RT1 --~lmDTj}iٲ\2SFRtĕ$MiYhZJ#$|Y#xVCUaQ3A 7W}#t̋v湶7((>/e{AmM0&m6?lo1fvOg a(4vo3d'ˉYt;]oA4̣ߓ^CrM&j8l5^VL5qe^'8~]t<^}1 s咖F =oX8P1Y:_D!Gfp(fc&kэu? YsVP]gYDք>4Gȟ;4V?@B~ vFV ŻiVxߤ,mqx0gLBzգ/J~|! rSCۇ_k'P)Ocx~1mP ք5i^{YaŇ?ŴJEuioZ'[rjI^\9ӏ@FVeƗ1ѭAt|s *׫a47jLcI&Iܗ5#DjW H79FWP aW|ܰʰpV.{7mK&8ú4}\yfJn}F!,;x*yP,%DĻ3+/Z_2+Y.Gx$E68by`խGZhڱ&F~׵[pؓKԺ {Vyw5O#QGL4B0Oӿ13nho$iCč@rtN$ t0Kv{lߧqMwAu#tnjyO!JI֦Gl"%1Z7>OgVԵr\[GuI6 ɒ-Sa\tC:7ث`Blޢyyo;u(KLYABcوR~.}+fBX(D*8}v2@t>"߾{yo Xh<8=&bP 3fb2xV=?@QW(j&X6q"Li~dtx sٍj!/,]ՒcmM7 ?< ;[mz<~MbR g篆96ML>$q<}<X&ıy{wI r')%9RiT?L --'R5,zj1C">'<ᑛK jO  --z3'L --:D2pCI`lW lXδ8MZuuΧpa~!< ^)V4Tas'=@>Wr·g(n$XL>\KLʇ(=&6u%.7P --*p,l`DJ~:+jMr3i`n8`RL!_es]0%Fs%}[^~/= ? _ 2%=A~{ J9,}&:(x%r[[iI%)@hyDP4qr5:'L\7vFN ^ --)Y*0Q.E3ͤVyMD[!Dۈ4'g8-5zDVh~ :|Dv]|!JE~JM~V+ 'B9DPu ۇ mBb),gvNb[*[4 snP-p@V5-#Oخ*m8I>e.p :EC@"r""F(BV3F9_ˬO]H#5\ mׅ*$2AM5FTJ=4rT J#%: \ezyNړ:k*uGmrgɱ K.Q - --;9U-oQf|P0ѢY R5@jhX3AƏHg̕p@[fϝ:`kg]N}iNibmF}~lTYS(OJ3$A' (L3Lv u v5xmARa/+?a3/PVa|DnHxxkf'!ZU33 -- |6a --mW>hځ'Vt}UXCoww@=ˏr.xj]1QDW[{+BiUDA.$߳ לC}8>glٜR)Yii BHPuyqp/@3{6>z؁6N(G$tclI+f[t㢲OUtS =/-<#2l+`taEF *"{AIy@(᨜^ \ A --Ը2!|&PW愍[E}jXN} n i i2~b|C0#p ǭwhm9H®'iEè#]8.?Mx`^gR\秥2X/BcnA>'Ȥ&s܈R4$^` ya0-_v{-S?%4Bm j+3Z;6 w :q Ͳ 56^ $O bU PGL<{r1I\{ Ny9ѻM\GaDE$o4Iն4S+a8|{@NG B rZ< KЫ]ݗ4"Bd|Tysa*M 9K2}ǟRmXx7U\OrhUҗ1K7-SgF V&FztlA~YbV(Ox},m6&!8w˄rq2r77r3rͅzZeLyZ*ޙAP ͜ts}kO0ЊA«:XÈЃZS]C~c@[tP/-qj+fF`?ԒS]w6T4gNwT@V,ak_@fp䂢fF= Oȯ@ h換Sa٩|Gڄ'Eyz\ڕ'uF֩1.x fG^YaśV]GS bW. --έ_p0-Djuu4(f1Co\8T`72s*A6(>sE0)KvdL,!(!'yqS#}s ׿_ #[|b3XcSD\Ҹ z&/ْMndr >6j::*ɹ}V!u"&q~̙Ds I --U)렐Za.fm@ԻVAB1V  닊]6*KH rp>3'KA'1qW\nu#WaMX9gY=ո-A7WbT/ѮF@jAeX~,1Fi;:$d *֗+'_r쾕OˀkޘǠ#aEszTt7V"cFb#tdt6gurv`8:"طk%o KAٍjq9F --|xc`Y:BP:x&?qb-& @9 G*~mgow'%wT>G#`xNdez-`m&qaQM8ƌǘUD\CEԫwp$c`qv$𓍘}Mʌ{n Dp7J&|(_E~yӚ aT~ji2d[*}:w*~ S׏WOPN*-VQ$?|ok~?йf7{;tR&Hh 2';L+$HdN+P-cAn4_R>h l I] IvMEM#kF%&܆oqU iɥ_9n}!8WN&C07 aEF~<;{9[=LːBu4 (Ot`Db8с4N.,:t]_(I}$`XD̾[B .i>^jΠ@./-1<osPys+iݤ 4Z#j},}㇇c >3v;Ä́)rjL0,t&QF#?ʔ6 ׵# p2x0M/oBL70wP8JD",0 wh#&>Ѭe/}.ɔtXR,nayP6R8)KL@@nѬK;pg5<&Jyfi竤oK^4f.C65'vA?힞z0(|2ՔH},I< }cf<=ʁM[;FȘ]Uo1|1<0'{oɀ) naM$}T)14{#Æw>(=Qt*f°ُw[] 浟*(@xHZx4<;DS~]5k;?6'e,4'rP`X>Q/L1jGQsPEQ0o'#ø5t --`Hq8 >ܦSs-㦷&#_K%Ҵ/qZƏ̲/8Dޢ̀U7PhK^<4c<#S8OQA}2\M_h<|RDe)q*k/%PAZn[XEa5xdD#.|UCl_F%soJEjM VڵApMfct20 ms1aR[<_YJ~1ڴd#%uC\ex5+J8QW%;U)X6,R:?JfBHX:4L*z}"߸B[\0.sԚyU aW-s&@XoA} Im~uoHV̑84?/\oKtKDľ[ܶ^Djk* $W\EnW> 2*" pRk2*;wD #qaq0,\I~o^";F9[]n?fNqI{Ti2 z4{;XkKfT4X#9Dby䜍sY+>]0f~1io}v1:{F%U[PJ@Ҭ}~Us9+MӖ*?)'6a;Mz ݴ݋3J<Ҿ訢AYbӅ®hoNōAtR --1LpؤܴU1(٧sM7[Υ --hR_h_jJ܄NkDHw1s C1ˉM5Y ~B9 D'DyN3;^\kAO"lp_߇ &q~ςPPV0U${ $h^O7ŨZ(oզCKT8-KĪ(Ԫ3jrmi2jP (/Lmusl]ބ<5 !\,6"N@PH7%rnb3&?%s4!ޜΩe'qV/l#epyhQ Fq}mϯ:{ĪUul0+ް>B6jBK-\V;m"b --z1P 2BN --|W% _3YR5(rFF.,4c[D8ܨ)C>(VPyoP9NM;pԪM,[ԴvqЃΠRAAuIoG/? nʣNįcmdoPi =t"G,Bl'NQr>Ly4e *M+qCjpV%r!b@c._ W5T --cx> --F~W1> KV!/M`k{M+珷y=@;eMl gqsb}NR=H4tGJRB4@i(36"tŴ=ܤZ ,Z)p*jGDl.dTx~omօ_^j>Zi %0X ȑ]<e*xcU `UNjY:7 ߽$p+mWDjE-Rć@Oؼ4()BF_}~521=BD8`0STИy;7Y{}>9VGṈң;luɯz8ߕ m `hzkƒi\0җfE4*|q~0}7k2*J]3:wkWH8&mvNf46U|y'fwfYKd>{Fh++]3Z/f1"!;Cܧ~CG'ߐYQ<}$4P&vUcOaQGCscuy ,9:if8F›'f\K߹mߙ&֔9ݱzMQzD[K갎  25RoU<0-J)0P`C pA!S HzSd3@+I%P˒nh>pmtw*e'όf>(eO n5;@8[պ)ߝ}*RӜo`OʇqW8 I~./2㑣 J,A[E<7c+~'/:m=׶ i]"@&mH ?"Pqb}x L [2Y {CַNr-b"FڻtIb7K@OOk"lp8V~Fm=ac8N$#S+ܣ۪X=ElM&#<'KPox"0g7Vw49ӇJv=|#"U/9^mo_ aϤV҃ljnay=²p$[FoJ:_(YtT֢XO?PҼ[NBj'>$uʄ&Nrj --$> l\_ Ї_TgJz& PVO3Z fbY^[7=CsPf hZ@&QQ' PROTLFxAP޿G/%=>K tnZ>Juj7 Wb!A[$'btծTa~*l_a]Kxm!;J?$:j C0ӆb ؤ']ƄO۟HhZ26! qnr\g ~>,ŚXV>%xs҉v[Qv񡯠:2&07v,c&d^1U kw&BU˚;0yPF&\^qjjU9-S/Ufz/ dcvO\ΐ4}?)]2(&Lk}'D?RF۝/Ql uSli}Jñm?E]z@U kE?r|S:| tϽT93Saǫk%}6o 񠳹JEA曽<%vmiF(59F40.#إêr`s2:IlZ&^XO\z&2kT!}~_3f\Ts8@QA 0 0SF50~R7߃q_V,z`wIʹ'*WTpL:yt8L=5>%C3׷"܁ --Q*V΢}N73$&N<MD7Z55n~Ҭ6<P) .B6{RR#kK~c#6銯YE|B[jdy,O --Tx_~n$q,(9Z.6A#PpuMO~4&o] 렢VБ=&yO';?GSr$"u2n|.Wdct_{W+0$}=iU2e0OEC2;0OyPF@P-ij<")zF i6@L --vWI#"ݗ٨ š^?LG1PGdJp'3WP*4ݶcZ֭pÆčwW0JC1| --D/mAlasGP wx1=XΦYHm$%&*D$;e.FsϿ/U+ a6lo$`xpţ-mr?Y,s;&I_oZ !, I2 f*!;$n0capa-T ne\zxxJ Jjj --iP1Xy@--ku?9CߛO> 3:B{siߟs}'QO&%oK_14J" }g@Zco1$ |$U= ۗ*;}0mۧ &R n櫌yx^},6ive)qyoʀ!D!~Bd92y#PNMdSs?ppO$GIxYYu8%n<0H1q9-e2C4d2㾡w+lf --@ǐK4 Zp2Oڋ/mk:߆MO+$:\6a@F}2WZCVO, 7 *+!Ϲ39S;CUEG]#(z+?A$uF4M~ǓfͿC[- >x؜溅 5@b6_7]v~H|7nzBaBgzʴ >q2_3 g7ϹҲsig`v1YPN#ھkTID&ͬ/l8ïATNfĸE'09,Qǫ{s!gUz= --а/y+(5E"ݑS=󃕤 --KܽȲ"U&(,Ԉ --.GFbKY"Z5M/ٷ;wnN(qcvt)|.kCuXiO[+bֳ-ARi_eD&m|@@+-laT$?EbXM4gK}CeG37 k<_*-oʸ/! Vל{S; X2p6أN6{oYIJvHme#EV ,6 t .Y&D@Ň#C1 Jmbxyno W G2˥Piw}Zg*7EKDRNInC>qh!,)cZ"?{~#. EEgJcE,(+S_S1bw;n"$::MmR[E(43A`gYg8{,{ {_q \)Pd&E?lCXCoD~~IhtsFGcxC1WMHKo:uJVE ZA&1[jO4UtDfތ#0V;܈>~߶`Ib\_ӯD~*<\a;'ZfF>s[/'MބVܷCxUZMu.DF3U lTEQ*m,BRM`Zʩ*e2`Dh]9ٲrhEQx9vojXC?yK1ώrdSQ!csFYcW~,RI +%_Boawi5+m=*3]&5O~? DtcP Gdrc`s%%Z;;cw --yʡ>Vp Cgv!SG\# --'_&ӾjKP^fU`%!h_#˵@ț%JtF i8I~nZ/m p=FI:{51P)z!VQ7IT(c-`PPu̅0NS --D}EBQnAɉ~Gik|h̃MXfI $\"6nK4oWx[<+~(U)rkxap*N":S#ruA2(nju`"dQz$u'^(C8B>ShxbFD2x5֚nLk --G7%mNr&Z:1{NfN --woM213:FtN~)?(v5mxZ-'$E+g.wwG6};#haC~`y&f d[1QTmEn\' [9ɭț/ز6[H(hȊ͚"AʐmEQ*9ƒ7ײ'1(W{eIn'~7mqen>c$44Ut p9ItF8:ž~G2XK MU --{Ńd'6'Y*P/P6TA!B~m%XǠJ g>C2g9WY27CgTb4jdarؓؼ KJ%l80{*A>8w䪠$ Z>MmZ:4\p&[Q --X)X@a? b1f%Iq- S( gP*i#{o9,CN]>!|cBq~CEVA --_K,qb1|gڵB\G9.5H 0lXRGZ:=`^#8=;˴sYی0-_scŶI|j_;lkh_y 2lzCS#=45"(EŤ#pV,Ta K rT(#\ BXVBQ\KZMޚd'J5 $"!+{< ow_BXG]C{؉*Uij=Ke!n=VWK5m2& --2I#7!'w GH?As`;/v5`ŌȫXnJ W5ѱМݒsEu8hYu ZpDQ(FJ$^''P̰E]R2(Zd<tNwsF֧ GVGvo8†N,t>25?^OrpPҾ^K9G(lIg'CgԖ:CGL$>pAbr8螨]úU6V{G物*-Kik2fW핕7>~_tnB:*-y…tF݄8nh7X!Rw3[|5JhǶl5o'%1D˴D6J°ܬ@bgVXEbiyD --q)c0FƊPIdRҎ̗0ƌ䇳`E]kxV2ݏAW*VPS79ZVX7K{4DpCv"b1im[2$MTA;!|,烔S3۵k@"G/dzrޒpJI Omj:&ͽa^Pd}40~,1Kr\'u --Rl*! lSQc@=T?6Ex5i=\rlB7C7Q0>a_AA9L~Σgꖺ|70k7Ng3) lOcQ5u/ί IQ+˴|Ӷ;Wj-q+6Tht˜B^!E8̹kXј P KDQ/ w,Հ2'2Pl @ --@Q>΂˔{$AwZ,";2Ry>٬i}<Әr2HCW|Vۛs8戢_~W^QᾷwR؞r=pIwe_`1-'vF8vf:ǃX{&{[w,6@4(\X3+΂х oᥦ#f-$~# 8 -- --rHՅ |<AJZd| --!z36ʹ;:v_#(F7cTSŎX׾]Y HK)t-8a3 kyx|)u;]otٔCc+|}0oX> NBzzG* --Kڀ.}lg~oȏ> en Ztq8ӊv,Pd:KegJ#?'H^mƫr= "(k}R;DFAKLо5pCÉ5sH2Bh_-NC4hF=0_rl%## Vc痣㰱C3 28ꩇ2KLyȏb9vAJ_Ka0xgΒ>pG=fW|bC<"?gh *'iqۦ?+XV x zY7͈)O//mvU? Ujuݾ$XxxĢƯHe8OZueA7i)J;cR2^@ \_('k|B6 l$^0rݐ^,K --ǎP >.˚Y#Ah,H"[w0L=;Ux^B_2P]z^R4Τ%NW;6ss#j; i^:-V-8eA7fCkay r -- ՙۺJS#m4CDxVw#9~ʅj!ԉ;JmӾۺ 5[=8.ZFC"mRe={V>]\ϋ]3}7N-bjG1:L+ --ɩ!.rŘu@1NӲӑQ@ԇd Y --^F*#U߇rq --$S {:(O '8CfWu$h-|vgbmD$KzT,=rv{3o*7*VۆKBfA `:2'~ї\I%ή$j1Ϙ(IvN7M=\|B۷XsUo޳8 Y/F9UA YӇR If#:[ҷ6qơ͞H.sɢQGȹYe9Ҵؚg&֨.&]Bs7au =X[87Dk=eq -- Է`'9&" pL>8@(a aAc&?h?h$(e=v8ZCۢXOtkq(1ܧ] ?:O\!/ <20a[U,hi@T"Dm_HMI7@$VZUƅ_#q4SD ea6l9dMwNn 1Iktw?y}&s_/QFNf dlBijȚ?2%m&`Mȩ" 0I --{h-#эVX-v_^i\a&͉x ^nXT}o֛-l#?ū׎ӛw)ɠ;g[p(UC=#]~>+&/ZV5_a#ju{\[+L[4)o%7}t8 j=sh)ؤmL sA~O;hT4s%c{mpQ @ k|%\O9-~?vqwe\G XQ101M@`МkJ]r-Sui!Ԁ2^@aNDJ}:SK) ---a423fpqh+:A3W۽%W,5(3u (ZAx5Ƨ$Ґ#{҇0=+j d_>W^x}bG%_#B!`l՛rW2 rփb>{&Z n&"J~֏q>miׯt\)Vǣս;?}A?{^Q*xϲ`7z-GU8^Dwe}2 >*0|/YM:U 4^>?jldS &AM|})S8h1iņ|6y+[ڜ}uO0~<ojo*f@IZ]ś+-08pA5:71ѡ,AGѿ_);吮>ySm]|.YCr8跓@jƋ-8-k$309gH5}'Ȉq;NRJ:e_{I"A7]O,oKJ3XtlFZ. QHQ-̽[&~qn3tloDvCt\,s*jWqz_][F}o!싁1dcog`Z++pO7M&t --jx:,}rD4E1c2x;7U,!! --s[ kN?10hIH [_"|lenߠn.ap>tN --? jیZEr9W-TِnGd ClՍJ`_H~ŃQam|emuUmRe~MT/_8sD|wxnh!twlv~ --XŵMmF@< --G%\ߠ{eQQA] ??+NQca+)WvkU>3r]DkMJ0 81By]]W L[dA"Vǚv)ךkb("3:Dk_4@Er۴s4~W1[Fv.Qt wZa(wtkeDs;-UesxKz &`·#$`}rtnӁ^cTxj[@ebgfQoukVτ'F_E6B'F]~c#@779Xa9p <|]4VaXfi([ \d$jEV0 hh@~lQgE\ӄ?: --V"'*)8wl}J0,30QE̥j@!$iI([/:£Eg>JSI9\AZ|΅1DH;zWYB~8h+*m*^zfVK96rU))^Yui>Lytu~vS'#0,LN=cnaRL$nuJ:mq_Ls\EabaDH՛ Z _H6P3hOZ૘fm(\#6c47¾+fBhڄnj h`~M޿[i-j} w͔;Mr$$mah=<gA5>u8SQ&˦@); S%OvzP?q% K`QO!6lp}F\Vx(M#r?uҵ{,_RmoZBSgYX^]hhr}K ~H͏s#)њ1twJHg[2M@wv~&.mJ`@;o*,jV趖_kq>ӝ> --7䴼y(>9_iS(-NT<:Ps=+4sv --Ȧ ?ղ{=E\@S,k"bθ --,6Xk^(s=j8҃*l[TdO ,FCwBmz .7XG;[zW䈡q2A ƑjPmgk47O! --6LK!]Dΐ鶾Ѹiz}潾heQ}{;D N j藟aCiRoSb޴6aKklCA1(+ иz })lg --'P>#\w$q+洙MCvKZ"lrߐp,[A?DJt7p,{2t31m3;b,$}GSB%>o3g)IWYhW0(n -- -/v@2<]c&15!jD@CHfXtc &LymSEaYT܌Q[̵ Kv!0H!GG!՛̚7C:Fsi%>d}D zb.~hժ/jCf@C`yU|uGW㓮A[>pHD%Nl R m5D^b3`,1ǾMu4¸?jMXvE!&?T<ꛒm\:jbڧ:pA!y pAG4r_΂D7Y?)]~$m f_g,;܏7Q&?WsKk޻ZEuYm=?~gR{оy|4՜d/Kw Ag!1 {WaشF5AS`}4Y&G!7ak$ÏړSKNn M%ͷܻs 4!rDN  ٞS)Wb {ꠑx_[m άHk]~:iy`@&`a K1zOTR囼>I-?s!(BmbsDuRܘ --N N?w|VB>k 7r4о*q3I4Nw忈<5="V…:/ `+5N_,+9&I.anK#9aZ;A~C;xwkUؗI.F+M\0Py xO3cxʺ>K;ss;xt#6*vuruiI;GCຏ MsiM+z 8ieZ,nNOܬP-Fk.G {c]HbvqbD+0@ǖؔ'|PNkZ.`4Z~H $/>0>+BĭYVjVvh1ך;>62k/K5V1 |SY.)7E'ju_VqR;ǚTvp1"Y8͸-ȣMhNIk:0iN8ړEJl 6eU>7itsW}vɐ4G{3yȹBG_N%aXPzFpNs0 ~R&rN --eӍ_ b^^{ n?_A5i$7lgݡ(2P`<}}ġJ* O5M/Up뇛9T-n4@i;I5#zmtÊ#̹3QlL[ƔH[-ɫp4E3Q ha ͸~Uj}0 6I" ?A?cpOuH80MgAh>-X2L(|7=Ua --<4tuQ;=[~ІO=w7[6;m۪>޿٪LYnU$mBNw6 ~Ynwp]T9Z܉wI[0ȃ'nn3njEw ,8?nQMTu5IgQT؆TM }%&Cq\$sz#`}e3OVGZ8ףhDm}ˋ #K{y RXZ;])pSZTNCO \Xi6'5i/ 1K7$ ȹ\5YofZ%& ӣ}UhbfDeT#B --|[~<(9a]z&B‘+>qsտn]3DQy vaݎK͵"!DZq:˥o!=xIw=B-oѶ~CQ;@r%lЉ~] 5a UUKk}b}T(x`Jl7UR)+ўphQV [+ӳ#5UgP;>NnR<(f-pE;:%':pZl_K_:~\OeßLQO\$_p[;hݫ7wmPjrߵn"̐vxdBMcf (D"*7q'BtŸ?:=l{4VT^D3»㌠Lf<\&e+gB}KR[*+J$dv[~1gyP֯@3`sL俾G`=>˸k _@GeV36WW:l!J?hGq_ep]4+mu>stream --n):TMOHB J,QzܢS(&4c/=#kAzUX43ŧnOζz>tY{}; "U+l~.(B >c=3tr OR3X}i0K]Fq 5 eWL3JqȱdU멋kM5ս~~l,P0Ln[g,%:;~ [?ux} 0Lg̪ Y [E1p"۾7wt=O'yNG/Aeڤ];9 D̢[pk*Si0x9M5YܭG1`󈅶Kv /˹L7`6Օ7R9Z2P~?b tߵͣS̝+es댹72h=Et 5.~_m4F/}{>87\ `&g¢,U.M~n[, --c0?^R#5J: b%Ю]Q-/扟qcp<Z Z\(c}G[L<.@@|~d^om/)>)L/zVm藗&Q1;0jKz%Zr4&!Q}Ke#v[qDɅR8JڿJTJZ()}_FD>=&"Oc ] --&D$0*s+>Am<<هz[@ZVe}6FD;@RUxvJΕI^$rhpV@y>~j+ IV}9 b^=|SH5`ۙ.yH>jmFUNOtYa)U$i>7qS --lTZ6 u9%_4 --p".<'~&oA ] Zy䱞D}`:k!;(80hY$|(M(J P>>YO mW#iԿܶ=M'>rO)}uxi S0whAOK|#f=Cyܳ@f?NA`PIvǽ2.rzZH^^21rۚL~B k,<ȯ2Q,LK --t wF(8t< A~ށ# KZ*E40Yp:%G9Ǧ,?F,`t}a5X4^q+ibiZXҸ7+Ok]Bkt; --4 --[,ep:xr:ov5j0NQOÈb?Wr0 K WņϰyΠdXCNWptͭsЋ>{XED,%PjuIOk! --+ @/}`ZYn4:砻;46B\E#jΌ_0+su Aj*qi\'kb3($ --(gϟDf;f449*vW \}sG` 2+ ՃJ<~r7K9[q`+,  Dm+Q"OMk66Dj=w*9/4J17= --dA8٢R`Ry-ާ=Ggcm<6h˨cP --My@paijs'T#, --I4SIf*W>0N駔R]$`'\*XD --bL…\ҫ@z --Nl\QM?89 + gTZ閭_FdvspGZxs]+ya b$q7b呏bIÞא/A>.P+y[>vFupWN];Mb8z%^9٨Iт{ل5!1q$c%-؋9lF 3{ A329!וg`5lC23ÚM|-qbUR6sx^(Y=[|2=][aco[\ttѓs.G҅mzr[n' zv&A[oHѣW07 -->1B Է+Ma7}.\|+~p˻9rGp,`[cc1`6wis3==Tqos'4@|57?f6 --^bzô̱ڱgɿ;}쎌l6hdCSJ|TjFgV>3<-iD޸Nis*\G;qK ]#qZY.ɾRaf2waZ6*#Y5}aTC6-Ѡ hs&UHy(^~䢥O*j^$ F].}HGѫWX{{lD꒐fƢOY-7=(rFgFKKf(^ >QFZc7+w G>|~;7oХn5ϻ xv^>=th^T5΢4K6[=Vİ~u:@AVDCFLnOQtlp5M=M{9Fw%o3a3%cЦN.ءUlsUWݲd쟏kb;n~/A>*\:)˂lʐFX45[˖Wo{~ `A) "\jJqbD2!D>s6&D_oHWb>lC X_*^G lj!]7];Hg(IzeG^eQGqd$ ?,wJlݭzjPFG:;ar1@Zn}Az --;G:۶4derpַujx ~\󌴺8ۦUH<3%/w1Kv,V"Nb궜?]9϶cY!bcnI䙸0~pvt{'?ZL>4Y47;}CeC --c"$3&KGv,1g4jwI ܰJ,N(n s8Ekk]bX+ l&DMT-A 1hwI~?m\Kv<  k~y"YHcd@=5 W#gus?7eMD<)€WA;p@ӍɄ D˥[%p;$lTI[NAHO.np4\H.7,)Q{uoV~0һA(3]GΆ7t[+v,_wQN8 8nNt8*Gк%6ǂ_[UO0hW ;׋W0w( 8Q*V[_6 )Qcp1Me2whFod $ dr@h{tokI1sGc_x.c겣(nG|1ne_( .L-DޤX~zY) FVMGg@|jZv( fh&\V)M}"I;x, --;bnܽfRN&4>نv5wK2 \jQ傡8뤡[݃OrAWG/Hq$ WVO7˺g[VÁu,H|QSսj --'/$IMXGr*օ{{_` a --]fDNx5wԞvMY lqߎHznxgn`nL?(^zUak/cueȴ*Tq/[c29؈um>ʫx5b3iZZBˣ#\P/@8Jl~MܫЧPbӝ]#:~\;EBiHy}^} lŷO(:}3؂|FA?Pjv " e_@(1XM7 --ܥ5mjs_Y-~UQ5cȣyGl5|Ra=#^utNbͯx 7u@;D6Zn^s_Fi(܂W/-oa_@ᘼòɗa꫰Q^f;9dT|giE։,N9䵪R<:>貈\hofʁꅬC3 kO~e:ndh&LfCW m`lc8OzAwǜc'ةp>eMs=@?p/VX<6+s'oʛ_:.pRFO򐮘,s"M .c!oSlc_w3?mPv 6&/=DXu iAI!oU]24cK:F][N@{~ nXBhe))Рf mo:&<@*ښuJѨ-nnbDAϒWb_zUSI2U>SOXC}mx3t@|/-4t _y/CYՅ}F-<,EL_Kn<7SuB'FNuA(m7+yÔ8>&򾿀r]SmċKjt,uϳ. ٚFw0ys__Mc@81.vcVZ,<'p92s}wݒw3ݏn}FaƙU-ɽb/u̟d^\4}zKA&nb%ܾI;#%S͇sKZljy2~*hn̺s˸!ύ"ʧ!]8bz;?hOK< )poKo3PT@ ]UnetpR\o K4݇:1c6XK7~'n3TEseYJ6sx ràa_'{Pp3xJJecj1Y)m@I_)@<MCM&Ss=9,@[*I=ƀ{ 4"04Ֆ1V\/U-~i Gzƞ[gHw(N VW6[sn┹UOfi`ߦ)Sc,m-lvҗ"}viLt3ծv=eܫrr5MC"b$ΐcȣ<uuK|v^@`7D9sF9H;ߤo;MhQo6A! ESHZcQV~sϭblPz:XB&+ TvpYL7;KfA=BF镶MYFAYCZ<TWnh !} --Cʌ<|>%Ƥ‡ԛo L;iN|]}~įXIš꾴<\8iΒ }]GG!~w4e@6à.?oKq8.rTqrztW>X5E#3vѸb+ --m)ƼlDy&"X 'O'JjG0Y|^ nʾ! w3>@LxdMGk-2EzqqpݗTAMOn·ބUUцKK\pb*ZdQ{SV!-gS W, cj?=n)ܗpgAbQnixZX1:{P _]D**s' A:[l$u_;ak$`sB&Kej3VJ+M&z fJ7&=1iuxe --rc)^E5+ԦyצcTU_ gu¹m@ gh ʴ. '$ +明͘$WvAWo"SAԆyq8߯I)|( L~'āO1evAFkyĻWU)+ [Q 'N'8ʂA\&ܷhۍ"5:3آ<@+86qzH/4Z:ꅔ%o4]Ĝf. ahk~q[.QY}I`[.$bQh9sS-7m}Eond"1ǩ?g \Cr~~, Ld?'UKUt]ɻcs_>Vyl)<֭WX?@^f9:XF3Af%Qx0ѧV(kyaXzRX"݅z2-Τ /dgr_JEh"px^UēvYmG N)& Ѭc/ 62jA`B ?>g[E.)ڶ --+T`/`Rp}:"=%̾q`Ն؀k="d^>2b27{-ᗳn1`#u,p_W"uBRr^zn޶~fXVE) ?p w>x00k)/ޒN"L^*%-j=spUDO~!w}LF4&e|nLwٚBb#8% --/ypQ5k*OhokOz"[2пteoZ*Zl/xMu ' +`~y< --UA^\6tҚn>1ڹ7CY \ K8Z_ś9%A7 --v1nBK FgT~l&;k42VHh'WjOUmW)vfۗp.bNS{9z }[WupUX"䨺݁R8w<1`χq`c`ℒTgQ"IV1.nE U)lWI --24k8Xu| Fl\([BtkO'FnM@4$'̠t&'2jUnYrh --To`Dk ?f?-pɉX!o(~̚kɾkcx*J݃)$fsAIo(7\ kՠW:8wf %Y+$DPŵ@0)m}"~ MxPunxdSf&,a7 --~Nu2 },u$P^}>qWW9cAGHN+!dLAsB\!yp(c7+1zKMpR.;.IzߵM 28iL~)8ed^en2 8$8dv`YZfToMhL9E[PQZPe(GQAZel+˯+bm01F#WV'eOߵ'̍G6"JY|W".,O\p+}_)iYANن fKho;_=] --p3 V':`#=pͪG֭w@ӮD #%g/^cHP[cнq(9:bHꦊ[&F5htSA7^>2aj@8BAw, KwH⌯׃aK&wO B~1⬤.=!jf4O00߿#ӅX6^S7@cJů-ǥ.AxkWXRL5R Ck9A9"P^>>[ ɺ{gjheMG-2hyK?xn{[wJT;αj%}-4weD7tFp[tQѱln }nR70ط*ٚL`?7 ՙ&C~L؎#(, v";jn-[_%^d"Ufy\ ]aĜ7/W@ uh܇%tMgYAo ux&w_WGfOR^?/m`7%+_.-lA<Ȝˈ2Woo3mk!W17C0#sk/E@;n hWNsӈlp—@a hL --UCD[FV:.{& -- >Xy9 %l~.&QrVXў, hjx/^&v$ P_S]{}կIJ/O%Zx4q,@~>CfvImÆ0Pg&oSȪ>5i8*՜G[p:=&}ޢA --Q,uEl7d߅:xʋV5DVukXb נxL/>s'nZoZܲ+qA>Ѫ틖3s8Tm j)IQHZ;ϙ2n5:}чYEKQCQM'l]Cwxo֑$} ~OZ6Q 6-gH5 r3>ln3γ޷)Q80_58>"󩚳7DѨ[0zJ fZ2uF"D@㦍l iʬ(V]֩ZO\>hI>QKfv;;9? --l;($6}xߜ݊ff^OD8q UQfxn9XOxkŋ28ljlޫٹFŗmԘ}S2Tc3{ҿ靂-O>3̻/_@qQTy£~Fj#ºoVjn%]ZV]@]Ƈ:7\y }ss;aB9*eb(Ũ觛Q?JykVlf8JMm^>jF/5i݁.g\6KWKV^:ي2 %$HZ5J4zҙY߂bɯY۲2@eZeFZxףQy6*yI(jV01Qf#{Gcc%]K5 --p0㽪wXY< ~~}yEHHQo)_\6~9?0'V<~w KۃFj&ӷG19v/?8D~e2Zwۚg@-&m&ibAgCϝrt[!EK{E' ;jfxMX"p=Q`ӵ.8l`QV>Tw _L>20d6X8 (mq_hMyA~nK~l< )0˚,kQ9 A'~ҕ"?)ԣ-j`Gu;N\ycYJS:MJ~kxMDULdȥmO}8ytBCS2Sjw??[&Y /p-RF5vbgpk`GH ]+` }%ѰVDi?_:* ,p)Nlϕm3 /HtHKܷo&_)?P:11aD! "(ٛ[X6 I )kFi`+zp=Zm0#8^AlZ%DNmT ; cNS2ln-Vtf L6&o_B7LPaw>lM pG)ӓ8CsZB%a.CNt+@4M5#`+l DgrN9Kip٣p 8O >O;( J{2\<*4=JwK.253hw N&Lo;mbѥ8뻠3C8(#!-O_S{ō }ąb~j4O{DV~9)/2֚wʼnXr>V>h]Yh,NI@};\e1/foC z IzElI}5vj P*x02P a7nɒtU0CcZ0fߢ -cpREuk4od?HN~ibm )Pj[KQ#NJi |kBKam Ve~p;D:;*zY $=@1)raK̼ĭbl" *j紤L}٧MR>@ޠa,p8ӪYB8Bܷ7تK}v^*dȷ(dՓ4dxa:[^~GEszR'*GV+ݜou --'{ 6?Tt_^ ҈wJkbg*#i4%>\_lbKGP@Q m}4n[Uom#D1Ex}?^ yƆjRt --Ju3nǣ|*́-.Kuq 4XbuJ~dˈ4?hmfS/]c߫ƀrxԖ#½cuBSnA<ڀ> ?Rwp04^~s 4f'('cII|aq-.p51t1 35^Nz܈ C$ժ &CV_$FR ?X1Fk^l<ҙ'h skʹeL'5x(46>8abЦnx.Y Nk#lJ ĽCm~ @l ,TI1)E D4BL ؞q05_E!TLM8 _;2xT*֗o -@mJ٪s4AV&/W{9wmm,%񛛧f<_GyUAZJ؉JOfxly@W3叺ig!觀mxHD6mXfnRJ; acZJd>֝ --Z˘L6nCmkg?2lq7fJQv9vћ(&P@!d#Ǎ zȍt|^[ֵ$vPBH tCM+45ꟼםy!a 8 --U8^,ݷR L'C^#2y;nh"?yGz`l7V-X;= W¡$z[W\ֵk 4ʽtS"}m]Dۅ']K]bƂAU;"CJzk׾% t 8MjvӕW+-7BtCkjNInt yr6|ݢsoŔ. 3-FP5ՈIb) 8u?cu:?u{"C{4ȇOZAe/n DGnLg:!SyXuÇrҧOPQJ ]zYfXՁD_#`D9 ,&zZB8$Q@ b1 --1 2Lf;E.X~ljr+]f!^G2{Q埾)2JԄ <)Ga$Ɏtf=f4gqH}9h% |8Ԯ>MZϞJf4*F+̖/˰v'EYlð~ 2bD[=2bVW~MxA?ATsYδQ?>Q'Ev5 sg.n_ 'M~kSV3TaP-r׾ꅳI,fcC?)J.܀sO/럎+S --W|nM%ǯfP4PYPvu(tSidy`z j-F.~ --ae:U~BXTYKx@֕4N))"cGME!TnU Ɣ+Jwr˙*Uw98kW󄃳|^7t3~t?pY 4JEIj#ՈP&\NAƏgwX)U{) --T䥠Yhќv͟ u-c1~ LNט;g(H;rN6'~3IсRg:Qy ڪGяcHvGVthhUuM?=Y?f|NO~Xd{U^D/E=Q (V(gasƒhr, R -⬫ݓ8b, wp|MdQ5JF$})"-bk0\i[ zlH2r@x݇J6已pl u%_k8ĉ>ØrL2Jy~m!5h%v -J{֋:~_ͻ5DskWIrww2^/7yxZn/[lT7ۨ$n G y:O!}8ymݥ s1&{h \*8<k%\(骐7K>TX%/z(NW@؞DP&Dsht}ǓgHr-:_HJ͒K#9!0Ȓz},dȚ͠VT1_/ qeejFv@~uFU/|dmcI:~Ya3_*,&"LE9(kn.*#*ԫT(w,7+Ĵ.Sn>qWTgUX5t --5~r]6b'zTWD݄cށPQ~'&GEb7]{x>P*cZKӼŁw[ --NJ@ؚdavC8 +%IDGv-wـrǰlZ,ۿwy4<33 da%g)[?zT~{RE1z0N~]rh:ZkXޛ*O --G(&D9Snv]pzjܱ0N\nj$ --2D%m --z~3Ϻ9vL2WyN4<87I?G}C/fln: )ï%&M8'xm~8+sRjrQ}S%MQrb=ejaMK@yLb; >H_PYqe!˹j8ߓ%׍-*m*yz ,*4aZR!8zL ? G,6 T@sOO3I`_ [ 6CJB'{E:~ l\U'Zv'#z.|?o-IAT;- Ի\pR\/'uc~0c.[RZPz~<ƀ_6HyeP^WC&};ĪԋVy f8Ӂ%QnNМ&J6},} --9[&$Fk`@ R\k/V}uϺ=yjM8/KҼ976 o4(t26v@q 8 CѵQeG --I 'L}wó1c;_B;njK0B7hrUDw|Wd'Ѿ^'W꯸c-N+r --Ѓ[e --B9BSMuOoKҔh@ƝW&) WƞMʆM+K 3ed?暨~V[ξ --8Ӆֿ E! @>^2ߪ"\~_!͈ݎt7}nTS/ ` r4b$PlmR1-84逦NjqjMp p^;Xt,g=Q|2g&aݶH[!] 9B;YpX$`$JC^w>` ;RusD\VlcXJπ"pl~ )b9cAN ܔt('zۣbGήdj&MI<~r*1Uisx ߩXllZCl4{I -KS0aU#;@cQ}v#w8/{!~GLXoC$8d;㤡6*h 3g͌Sd'DV@&]0JrOF}'y^#pgR-ϟC X'> LVbgͿk6m --k~ǤN0+؊~GRirC=U~6: <&M"/6?(84ٷ5 ~NyuV##`IVہ).ꟊAٷSÏ7Sg% z i _g!|_e)ɮr{dxEXE0o<^7x}9iĻm7=!-^*^M.O+6YR>xZ}SCzxvh`}jJKi*l 糤٦:Zz^<\ qBT\݋f8MquqT.Sᷝ,ر%a --CŲ'fs8H4h?^&4Vn/@12BpN_$9_; n}]mTރE.[pP7;PT,m3hR܏pO-PtU2Z" ^g7z$b@Dz⢆]x=g} C-hШT0Cc𛣎Mt8ƾ -->Gh;0)@B r͠e!qV\` --NdX~,U\*כv'O$In v^*+1P·ɥ^}dr찘` g\ݭ)VuuwUZ>JHA77 w âGIcq,f0OOYͭ\U61`-wtdU,7\q%YZU_]|~h;Nn]YSLx͚}n.gɉ~[\#7rCyҨzN;RRk5f= <];>]90<2fHOJYmbc%B`?/c9ÙEzh%YNny9$ 5Z(sx4—W1ƺ?J~m.0u;Vՙo3ro:aL}E޴+8An\/\^{Q --cVOqMMb 5퐅9>;Dךh峜d ~y3T\fGt=ϚG"Xmr5\]t"2a2ѻwf[Nz+<),ms g&ZZfS**In|ywЪ --[p̾葴F;=8P悍p~vzȩ{]Şrp╗́9}`ưSz,k^3u&ҳFwhIqSRzb%3N 5Sne9n@uu37^rЯL0sl|]L)6yTR0P{KO:nX+Zl>髂XLFlb71XXx)A+pM΅69i$?yf^\vZ%3e]Azߞd>?Yߑ}YRR;[_e?q_j^!@qCU^/!d2r”!m '+q4ަdʶ&(JT#ĀTǿM$Xyv[фɨG p**ÕbC ܷL.A29#Xe0Ԙ| Vt Fu\jsBuc#9v@ʌ-\jӒʭ ?D'OFQ:s ض=[!U=<풬J)n$KǝB|X8r}?&+H=pm@10fmDֵ&(W'Oݐ&_xd&oAqrDJF*O+7>Œ3LzG1~srHH( ]Vҋ̦ЄGab2t=v'Z}gR4`)J!ht 0`" n Cr8@`2؊Dx8KC}F0=}S/gVqR2nfpr|QjOu5%qEnd6%&տ1D澲l .ZŬoRao>?&u8sro>Nr$ --.cf੼RtHTul{Ѡ Vw8@5QIX:2}<c&U74Q[bmYg O@Aic6k9ϻyγ&ΓŚUkhgvhq6sx?W.)zY|v@s@E[hw)+IYQz{2y7x,ޟZ\X>5f$DJHv/]#O;X<#]8*kbA1oT2!d#bdXDDgƮD7/n)=0e!7ifZR?1g08G[+_-(,O <ؗE XMs^O l JbbĺdCHߵ7[7=@dO1u[ӝ/j{4KwQt*R?=8+ }6^8M+<,ԍn-i L_n\+g --Iᇳ:EOE3>HwJ --:\nN8H0]YXV#(kj),R}x(#?+' 4G38ǼM1_s"=)S?ɹV{Vo]>_iWLxĿ{ʼBx^H T ZKډ㬊N*z2/aۄ*~0TyEe5nEM%bSF/PJBxp1Vm~;%):\ԧӷ&!ES=XIXÓsNݗ׈y={o,_Q1L0vZ^(@GHl`Xz6&o[*edbu[؉wMbqD>MBl]ħ.2"D5s[Z_42A?pD3 --?3 sFgRD~m}Tpau`b֍QU& 從h91Qtȏ7dRkZoE?-7GFYš}\~`Pv|GqR3ԧmO[OiPW:vo<Ȋ7  --8>mIHZǐ7ﶩtFDjo.sgxyE~ cl:֧XmWL(⢏󄟼>ȓRvzE6oL0i:U)ÿ9HhUfmҳ{|Ve=jP{yS6z`~g{k*+CE|Tꈱm6-bc;[|-mJ-$ ť€cntwbY! 1`WB |jkU^jIܢSb --Z( 5./q"Tsp*RD[ljJ`+bU&xh9L,Ġ~S {i] \tx"bBot!9%Gi4d.L\jGg:J<$k.pOԮ5b_VS?'-;Ch / DU{W'qmċ$uO]ؗH/*TZ0|}@ÂV7e ̀|1!>sm<4YeT1T/X,C5o0}n@+n!EQX/!; QV}&OVFIT~o@mҪ/PVT| x1f'oyF5?yT˞u-Chm|OFO! $FǕio1X7zE[Ye^u<w1_Ey(`'V1N<5ۺѧ? =^/gWU u9H#0o߇R>F"/BK2Pv"kq1^1VSNg@1z9k"7o(~QdgڃNSۃ8,O W rgYwMnN?g=T@˟0ˡxn> hO%33}e /^(oX:f늘GABy13G@={|d?u֋iolKEi$nUۗsHÇ7Yb.x9jY_ k5Ab9\L+k)t@\]ž$^å_Ņ!ڰ(u ~au[ё --&?ovamTk\MX uu:~ \.d=xI-8m;'U1Nz&(6'byZQ"tz9eVܩطM|W5Rل6~֪& --fȟM1C=~? w&%[K 2I8h0A~'[Y;6c-~1SU5I_Hsz_eh6COj vz9XÂ<& _r 3:*ZŬDh3 /Əq'y7 :!U G4_ՏVv͓~tL-~b UK ݱaG6P --2 !?q]{.&ehJӆ*oV~Ku^6D]+Nyn+-yDc)`!^ӃCQ Qh%fp]2]o%ϞLԔV4_4' ZB5/=pĴi8;,6k@h}LavXO+6H<#96_2uqNڍm xK!,:15_ cV>Iy0qyS6P/E#жttt bM&4{f(:4p9w0,-{"VQE`digl98J?AQP龞Q[c1Is|1z= W[/Ə_d};٣HO 3-CQ3Y#8O&.I1_c[Ɗv!l*GiuiO4)n¡(0~ggGz!0.Kd3(~SRzoW^Viy1Cm0 %T s[* --14 >_haήa_85*fxf\;Y ̫}4#ƹ'2Yi2y(>Zݩ<.Cp+NLlzH -"~v&:Xv X_8= C+d#a?i'yGpB< ~Alo_iu~yp'/c[ lT%3Oj vxKy|%Y=6=ZŇ@+}~^$%%u}bROv$S/Tf]$yo?3_ A\fx9xڋ[qf-C_Vg"QGA#VfD6WBܯ' ;+3>e6$ΘRNVNF}ރ}TU  r):.{rs*{1!O ;KN9`I8Jp[[sUE`=Ԇ"ԇ582i-sH,W?;?-ؤ)> Y^7%.@LKA k/)tzeĔ(Fil]*lOw0t9> RvCyɦNzfL#}+p>4N[|1o LؔR金^a 8zcAƇZ{MhM&P&ۦIBװMtaJR:R $vHV4 u --rHZ8%޸2uX}OJpI}ĦY(OŰ )aټ3Ε@B]Q0^@,L=nJ_Bo3ۗJPHP.fۤ!%k%Ԕn*f[k!ɑҰΎT vP;\ --(qGɈY 4LPޜ8C6 R@Pb_ 3&ԓweH\ s5fr4s[k]2;9F8zp']oII,%< pz[]@ɝzb(|ZQ(Qh+a?`ȷ_(7:X? jX --_?z`b9"ھF͜8A#85mՉsGDi#Cg%-IՖ (.;'YBTtL~h\pr̊?taɎ-mV2jή2_wbFl߯}*)WZ0ډQiE}r!; [^ވKu& --tpMYmK[ oRTI70" l8A{ZX ---Jݲy1Nn!rh)FÊwMprBT}} wg$!L7+,K/#hI ւ}^V«v&-(T G}2H׃ApHtxbb?bX 7A6$jp1"J --Zϴޭv7I1asqm m 33٭_߅c 4nR] w0ndPN[3|8Ӏ/}gZ[@}ˤ 9| Æs?(Ȭlٛ,/cxjjE6*   \l'o[{(œ*l"%I!NwE,v2>W$aܝ՛A.-h;94d@JoM`}lKA0Mo3irx\F?Ҝ0ͫR@=x}rblAhhX [H"ТrA2vst {{^pJ8N0{a@|]غN-ֻ#%IN+B"AŠ^p>cUqgQ^(5(Tu[la~꧃l@hJPNn-QLm!"z]IZ>+qAGE]fP@y.;!Ϥ> \ 7{,DbڿaMn F;㻗5)͙`x|vw3)0V=6 --˾Ϻa<$EwPR3PwNFaLa}Z͗|@pSDmncy'3_لzPu۪6oWehJ^dLXhH ޺o`A_)K|¦XY lh7%<Rn%7"0 )HH%liFi%w?ūƒRP%WkkWC, iXo|JhYD j9+t 5N 4|ZNBa6^ --2ZONgev`"Zױ(<9+ --8\e*b9IU;To.,"0wf{PiSTlߩP|^ 9ie\/C33*3i|Ju3DxAB"G}|rÔ\"tCbhD Wd[#>_.Eǀ --KǀYc嚝O*i̩#vX?k*gϊS˸ D ArnF!@,̹/fȀ~aRX•$ZFaeAIbdi/ci Kexw`Ҿc5q>86Gߩ -- \yZ*Hnw,q:~>ba>{[ujL_KNƁ!ZċĶOu =_u)?ʶ^2}+GIFSӪ?q9U%cΩRa< q3M֤Q puVt}:'VszR1` --Ys:o}s1骎Q?L%pv엓`U8h]>FY) =VMn2x} --,fČh֨ײgt|NoG"vW}v5%œE[r 'mJ*gϷ2X46{ޓ>)s1̡.tnKW<nHQ,_v$j>F?q~w1<- .u#sQx%1~ʼnZD˜SϪltcNY{T%Cşw0WQm 7-Z6w)`V|!Dk|g*Я?"ҿިNEq3'g1`-MmIŰQP+$ vQ{v &pw! --(ԧI4*]mzBd{7Fߑ#CKKX@߿ፏP>b~/ --E@84xX!@錶Z4e3*:I8Y,ydtg|Ĺ|ZZn+(T#LzpU)Nתm^L&Jc9[GvJ#u87,s*Su)fSD<Ӎ,XϦGqֵV.9*mW;'T( OGY 8|z׫?Cw&bo~VM篶d --&GG%f7}p2.> ;#Ci77O.;ϴu8tWtY5gπV*&Ux>b+AJV&54,va),෸<7DƖa%m&.۱xmlQ4:rPe\lX ,>.}ԯkF\1Ag^,{S?;P޽Uס+q9udX rZ1&Dc# aMLwq[)!weɝV*NUz轗"C[,ɵUIpwR@H S1{|ơ~dHL A٤0p --x+!g}o-Gk 7X%ԟ=Fó ay;a+³C5#H־.i!Z?eq%CH6woqa?A4#zR_ R>@CvӃ&ym4qA˟"ʋG+ރG#:k-4Dnd1ƓFcqIyzQXTAJGwG G9w(^f}/T׷!>}yT޿yیГdIn%w, \ڧ쳻.o?O#>bATJd5~8 n7Nv$x58l̈8xrb; x$a[r{o&w_5ƒĮ --?-2MF8HRv',%9&9+gh$\qvxvYNFwZyY[>_DЭ+Ӎl'tK{LyU[X1#@Gޮ|`Pr_I`#_'VIh8K3Ni --:gOHKD C]xKpKZѿ3'mϾX{M^13 E'G; =nm6*d + 0[x9Pd:ϯ{S$Gr#y=<|a&P+x:r&*pXIw>.hUd{X;1K|UQ;77ւiE0A>)KApȤI@7oXfeGVfǙ}:7wY2A{c7Usr "KHb?r~&_Fw($ $)=VT/% XBj:>1m-7|m}+I9P]a͘m[:\[n󝜆xq,NEaa߭5?0>?A}'@۰6>߻G2^@^X~ә --C!uRzE'׷ق%An'(!U:ۭ͂9M{ܐb_h4LAxأM6P*FcHWr0z3nox玮+Y3⚿ǣ:7grK>xnTןܜ1$Q y+jN pE?7o>Wc@7B'z --m]_F'GxN1k·v[h &Szx7NYɃ)`y8Dq[?*Niakt$ -~"l3 7*r] L'_hA펥c?ܕ[@Ȗfin&*ܳ7ceV'?[Nݿ^tOB>a --V#22zk:Bgڿ0g;ow^X'~/1mb/h,QAZE`(\?=3hl.7L.Ec(cσM)G |;A~96L}&*ˉ\>%!d^؊qK[Tԧw|E' r]o>lrtkq aۏG}p/GJ+_|E{Πw nz|ӭi}:Vyn~@m`s%},Q8R1ӻN;'ݑY91>5X7a+$?K --,jeCUx&C:-m --$k.lfPqZ|-bp`Lj^K!ޘP$&fg -- CT VFMa@w3&U';"Z~Sa-ȇvsX2/?˒UCxx`ۓr׳PDajP "TĖc7  4v١ O~݋ޅǦ>j-c5 --RWg~=6) );>j7HO?\#_37ļea25lsRřJ?o=5;4"fxK?^wȪU~1hL%)iY5֩O0OQcˏdݭQ>.(ڰzqoۛ?u==H 6 d3V< 6ڙ$q5WAɐ9J;,gZiR  J}'8qw!l}{ub͈ESӾc-8}) Wo0yͷ'õ --AcƶdN^N477w*mj$rP6ҌiJ --5lN9Q"Y~̽2uꍲ#TbcM(FUXb;Vsdt.ՎWS\_RpCޖĬl2q'5;7&ARH߽x`s&}rqͷ_W*· crIh ܧ޿˦~aq>dH_ #{''Y78 Ttz % R>o2R6+Ax^?/UpΜO@D櫒3pE)M~+$M|!|Ciu>Y,r pp --kE1xִk+N2kP}Gu^@Z3nv N22Gƃ_"qSIz?׮`U\ߩy˿ --FOdžڃJtLy6[~Ee1Pt .lrDɭ>Dnc=trB*dCȐBկp+2&$qKDi3ca><ԷF;v[Si.֐l<1Wx --.}=[Իﱴ}h\4][}\>r3هOrY9/B~dQ%d\uأNS-^%Z!}ks*zk51qb6 1]/!anrՀ}ɮsr)KIUkz*1Qz@SkʹmsVsx=[0Eø?>Udo庖 jղi mG*qG\cɶkgo_Gn٩XB>P;%`^FA.iVlx] WD@q[ JT|HN8 bw}tm4nC_HVBVWFd\ Uݯ%H|aݐaǒyRRMx<7X#~#Ψ;x}})-=[+g!c4 7}YbW#JEHP(URCkoK,ص-Y纷ksiD뾥'QmqN7 t$=wWkrQ[_!unjȖ#<MtAbԥQд!A|vq@NׯNDҮl~N-{O w@xH ^U-% @}R_BWf+$k| 3LgZZ^ Z 2X&dx 8Lr`$cϾ 򎔷TUnJ_kZ!c5#fj̻n7_'/~DgMA1R w$ER.`b4^rGVwV? yM%|" TxcdTLG ܷ=q~.&X{u~гE~zD+D\ojul/+O4 --:EMӵ.I=O5@0ZIbQ_k9Z[}"t' !XJ֜ٗg ڴTIq ?8< --sG 0yzդ1HOoh9ͷMH,>{C"xWྕ+vK3kMR[(__ƫ@nۻKlbiz~S>Dg~)NOEvrȾ]/`QA^8O'.?}S·قkF|wwX|=>c$LbZZC@9Qs/ŒG4Nsv --kۧػlXN|# +B]|dBxhvGT-JQ}ag!6)R?۪A\ _it[p#;A{0("Lov#CW}~0npVс8Zsz(YA‚ ]wXe +ra#÷I8za+%m¸ h Z] z`~Wŋ3d7jb]kj~nlܠ ۡA1>`ZmPn7(I|k_sC --yVWPMo-P%8؛`H]YW OCJyJ>@Tu}V;HѧN!QU@~z{4;ˆ2ϽR?s6LNyi$-COTU e7h@V+J8)ܘ? 3lDѵ)O}$ @nPz% EYZʛtr%^{ Rֻm] 50-7s"퓱Hk]CMm[֥Wˁ,'Х'zRJGȷ?<{}~ǡIzsHל㾅^a(p4Og|:~O 'V¿y;\2[HGW`E ǿLJ*;/TP?1wvEEN;R3`2=ؒV[p,b!(.)pW3[~nǗ~]zJ_k Kv#lhm?ƻFb]%IA7c(BQ Z籊4~- -->of"A_G>|gOefMBTw՜Vϭk|5q[L]>\}h· 3!^ --foT4HOЫhE4LG@h~Eu*z3=z$/ݐP!~Gy]u5lR!;O*~x◁ WOc7(@Mj)h --Go(e{ --Nf1}WϾN. pe+UgQSSBq --k'îo]ݠs}65aՈG&7C]_pa8mXPgq6ҦO5`M:yl/?{2bWm1 mTJy^ =TS0{2D -pc4G 9Cf-$ǰr5Tγ# ZkPIp+ͳs/swB7ZhQA} iw>]]&Q֤~Oלd䵥 Ez5&+ /)Sϧd8 H7CԆadգwB,ΚĽ*դv9(]7.rҺ;OF NGߕ,NJ}Q1-Ӎ+gRZ*")Nu}jaX_ǘ}3 --OY &*P\]Wo"8w[27j({lC1=r&~FӛԗK'hZ|ob $5GA. Tskچuky K/ *=:u[vԯGvo 66jM4߽!2M5 K6!.63 3 1 --d9=UjZBtÿYb岾 --Ͼ?hT3jڒ?uǯ0@l_WX;s-ۡuuCMqo# ВENծ)V2Cۄ·6C u%?Xs&43Zß5=?IFoMCa,KSC7o)SO|N"`r --%FZAa6%(Sh֐9*q3Gc#Py\C16!T]v @|du0ڊMndèmV --֌1xKVZ?\Qt;rR_Z`*u\Qx) --S>}{U7ʕ6蝚ް~ 5Aa*5 #bc縔;r[?\g --?uby;)C q:Z"B 4RUjͤBq1D,[HP_zZ+8%\MzF|VS`IC {w0lG3Xnì@$~½*)O^<~MRVzH)or WoE' --r7hop7,du꫚{Z*%8[N;sTSkǪC>XKMBWUW0Vf$1?WJkb+nޔqÁ3I' ۄB #u5TR\RbV[`Q;W\370ҳ2.ÎO~OAJygWt_ӳۄzUN_pXDAY75ssօV? `X!r]ۯs%)LbS4xhᲀ/=*£/&?'gvžƏAA?`F ,Ax;Vrw?naQh --j)u}խ?RU؇P s+C2 CDăUY 0j!j?=5ۏ(ʀ N3 l{lD([3*֭__!VpW%>]5yY1} L0mivp𴏮nV;GiѰ`YٱIiQlz44 ù3RGBC T}2`+;={\ջ6Ổ g/q_15:wL2~jpGLLZ[ù"8q@B&dyjyb:gC;+^al5p8)]Fh:n+mŏT.B_EpwHa9C ]8~U]_f${'Ov[׸(B?L{BFLs)ymwS7H}͜b6ÖNqބ:3)o۝Nƒ3'mű3k)ka8$SNDcEz1$5s'NX"eryq8YAH*iLZUL廪Nk֏qXݲBnSi>9~..~rS.5RȈ --,MJL[E5)NyC0wK55#jnb:c7ɴ򃯈X~݋3MC{T8{~?ӹ*Ƽ7PO9ClE7+0|rWn?dY#{O_\LJLs k_WdhO7$HYܬH#\s^7(eq*ci nJg7pM,,Q?Cx=b/ЃXeMu$F#'|k`W ¿b2HER)vGDncėE=GI>H T VѰY4 l ~ Xxg8g-t --PxFYؙw)xNɘ z訳-}S ]B"~A@0˧\0`;Σ+`$tS!R4Voz.fk[k6K9頪XP=#p:Ia٭Yzf]7ÊlUd]?MSv>*ŝBOaZNnR*'">8ˍc>08rYy" 'ϬC,n]6e;䋫 !#sjո>c7"aM'JE v0..S-feD1Ӯ]kyG)'>bӰ4@P>Hqe'`dUӂU<͖թ_%ɺl_=ϙe!S$S:Nå؝EN*%4b7FySAEti2`屮MLGů`ǦcƔi! 𐘔 ɟtMa1:,WK R!p;޺ jUMɶj6Cбd< x:{\b+W}f4w7Ha\) wHdy@c:'jmpAeގ7H;&;pJgS`,W˙ --peIГ?uTs$J%O [xYHD5kRSom&D}p$`Iĸ[6,ɨ --Er5$j!J54]2{V[aW*m(H?@:iF~ӑ˩Me|a5Iê"#pg=^iYPr.Kjx}މiP --H3*c({Xǵn[٦-u\JikmE鮼rTa p +sN_-?ijDʳf%C|+7h1g=w?\ƿ37^us FlnH!R tF RM_[VZg9*c\Ђh$8lEKq}gԍqDŽ=S- ;OO&oo!ՠ!gpFYd"=I.1';}i ~lڜC Z?[s;iQ(!%Wlbڒ0QR't&6}ŋ>";qk4I1#g(-R2k`KVHV/W&ky^ _K%=N;S6ѴA 1,P.Sr̓]ǦmI?O VD` ܠʩMo/vAŻ3*]ZS A;.k]E)aen93Rɦض-խ֮u}#>)Icģ WBBv.ɜxDH!߇ăأr)AV?P mMkb9e2c=|Ul|zLDԓʤe"&*b%X7c!v,MIMMydU+&ׁ|hT` 0O="jˆIiKR쪺\YExr 64xxټ`y4fZw[0҆@_P%5B/E )8@rKg=S w VpώeXce3ynY>փ # TҦ --4ؕ}Ȃ=!)<X+pžNέ3 --mc62F7I7NubF@pOndolMs!vJK:7[O>E)Yؽf-@'[.4!%Hk'#dh\-_'\NIFdȑ{Tk~2Z劉6v84gіmSõ$Oe.ga3EhZBpPq0|x۪>8%\AVІ٩;7W@R,]wr5!l=69Q ԭ=5&~\Mv:-4*r6}Ɓ#VHA)Akѱ@cm9Ax0^+qOnRYk{AZc} eLLfQ#MH5c>qH557&M5/@TtcVb S]r6YםUcbd!\8gvSs5i]j0Ig:$v)$?WvO}zzłԅA~B7-79ydV h_H%(blXwVc}rfz[{fEM@qagN*^w_ 3~ --2̃HCp0ߛ]Bp5FK4 EWJ6MT"YJ,H*Ȁ1L2A<"(;P_)nh8yU}:ВGkF-KªTd͏^R$ 7 --皠a W)ebsC#'JF$ڼl`@,mJ̸,1 --~Mpg@"ϧM\ʉGDLߦpb{}Nɯ^ޝŤ]ĄG~sruv[ ^); ү#>[=Ā7 e2!EoS밂/6y՚~te\+}zArpf3M!pЫ1x;s5+Ynj!@31k 󈟳i4w-}/* 2hB0HsgDK9鵃 1Iɮd63D(q>Ra-dH --I uƧQ2;9+}h >{H-*;|Z\~H^$/ XrklI*Xmi:OG ,3드!~ޮd|Z}Hg}8qY}m*:h_Kqy)p^T>;miW7`TC#5`P~ZE(Hk0Nt{ O# #">"(Rѯշg} ؜S)sm<ϯN&@=tboW07o9sכWr*H_C*a# Fhr@~~Ԙ) o-ۘ)/w;:jaM@'uC>_`5+w0?kFӹఐɐa6=ۮˈ e+,Ae9 --Wzv6#u-1JNAkոE+4] O+?/~XK%VN'rhY̥i(t6>s"(fqkr,4P2AYTl@fˤshВV+NU --Y_;E801]y.)7~R\ID63wfo1eï*B+[>GdίL?GI]^9gzĝ@Ҫ/N)Z7vlfXXFNnWPj($]Ƃap --Z=_?]x((67Jw }gXlcue]̹])B>НD>_*Nn҇d ,h --]_mRwJФ)!tOgxebkb-7`."jT3r#3,dGMN836m$vf+ ԯhԶb~ -- G`B "U --< -#MfHpdcYAŀ(:~Bh7}봸k[e.ˑ# --u6޽wWH7U+Љ 'hĝUiveů(CI˸^^_Zʔ1[`޺63ćL/%M_k! P~xyt:&wl::dM7\3!K 3Z7|'!,:zPwTG9!Z --F;:ZY 'cCGW@._Hf!##1A|,Ŏ߿sz|uxŋr.N])tpJXr)Gg$H]9B7DKU/8gt@"BPbgߞoI J/jZ=}Jtఁk'qE5 embeFz됏IܘǓZ !pxqֆRB:oQY .иd7l@Iw7bn*hQ+8evؚeҵ!SÂć \.n5l2 A~wVb:F%сr~PU";:)nһ?~ ԘtMAX#L}kW --Ho J\//鑣Epq]lla0+v'H%MwP6Owujp +AfCmkjjz>fܑ-"+>Ȕ룆lJ@$e=JL[vsS-.Qs A;;w 8ϷکSgLHQ2qmFO --RH`Ŷ snj?wֵ9Sƛm*&`I>}k [ڝ0iI?Kwd ?nU Xؙ6bhQ7O,Eoj-hևiYlP`b --246oh(PPQ.W2[4Q 5b|Zucݯ|k0G7p6!zh}.Li`D z@tuںϑFe!_RӪ5tNQ*MTuN!1E*;ï{h(Z]Rh_Y$ĒAu|T}X<+똉׵MABhq~+M6`Dwo ?뷌41sKQWwϿ2QY~WPuߜ(afɲ|0 }ndG3kSrn]NCuiw[4H: --?_jB=Dg0djϥ'ND >}ekld WhSL.aJ5zɆȃL/)_\;,%Rp^ER0lkkԫ~*ߤ4[l@sk a:~( ln9՛oR\[NU&jyj>c["4 nηB "\eX_y:ș5 --hi=~!ķ倲B'߄ݱAY.靰 cb>dPVZO0.dSP-ՑRcǴWՃrzynpj0!mj?ӐvOYW򝛮If6s 9sN w7'Bgc;Bs:L]ñ|.fs}SB .b{ :ɢb 9im4^Z\6D &!iw+߷KG%I ` -->a Hn!bhn*"cQG^9h-яwo'Wp.㷕F#yq չIjWOmiW˜.J6mV݂.zh?2?m!c.O3<&(Tnj+уx.qWet9vy|UUɾ6nB_i#C!|oy9(?6S,3`ZE_i7{۫F\_aC9ClgCs q͒cgfdl_͏vTzỹ$aF0EEse% Oȫmb{^z߆G||gLCZ#1(Qv0C/ݯ?Ôɿqa4=#̮e<6v2sLT.:j*E4ݨ>߅cor:vX͚;FSY9 }\bu|?͒ --׽;roa=9LҮ?aT('(54;^#;|M`ljo&ūޑN\Ę8!i dDX{ס >xW>x'lPA'=0mJy˸wP{mW.C87&\ [=lj2NC@,ft&Bwy i `H(aKcz_@`?ZM K;H[r0bonZW2/q:Y(\-Kǀ'.mA x?rzDUρGEe4}/ݜŢ9w|>B>W].>Oq-piv"VX;Ȩ|OLٺ_Hu o1+Y$} tnݪ,vBգY=#-F5o[mܳVI.R_,,w̽]7 JѺU߰Ê,XN\4lW#q(1l|ZX@Q&*a7;  ylJqsi 4! h0X+pyGoN3Ľ۷˷ãd +7얈F;]ױ~-Rzz_4ko9E:u AnmRȽC[[Xi+0Kja<% --׃,,B5P1`3PiOQ_mabZ{pzcݪ `Rm» -- rnm`Y+b?w.@>e۝aJh GiMaw:\:یڔ~~R.gCyJC0q lVGƮ: <ωU VŰ'fǟ0{UQgo>\@# sT*H+G@h?w̐`Fńgtuofl1NV?G떋E,hrjT;dqouw볛AZ}Sʤ{/Dk5[ߋ^Z\"ʊLI){1{"L1v/̒@@kQ\WbAh5bnW?l,tfGAxv'HO 7^َՂ`{"uzX{vynzƉIּz0H]'yLoPA=RZD߯CzU?8?(N6> ϖJaTqdȵZa.xT;'gr,qC^(<;7ce؇РGgW?oS=v_b$ e$`1H23r --q֊[T\Q`q# d;Ռ --/Ksj*ܭ "+d,O:b 'F[Q?9cD: 7Y"n8_szP^]6)]G&Fg=p*7Jno,h9r6^gƶEH\<>vo,7)kn}~ذL_`M<l_K?1 Sʛ)U0Y2Se$q+ t]i% <;`&/uGe5];xw)vxcԧ^`dpɓ[a1\ȶ\n֣tZSF2? ) b:Ч:>*``[%ѝal2A춲k/>z*>7-M}W:&s}bz}v_qF{eiC9H#}xi}}Z*ɭjd/0}+2MDrS]uk40S~ff~}aR:Y̩'o1%r1+\NyQA5`HeT{q --ӬrJJQ7 _ir&2lrbd@m2`;iR1阦*,Ez.:b?Mbҵ߀ `' գB0H>WM{ē{/ѬbS7,ԹV wOTuP}pr}1O08sI5mA3É; PkZT/g ?ucij%]VL?)4?lq%Kt #C>IT|,Y M> Nc0W7ͣmۮfd9>"A=1QCH<)6"F&%aU( q _?:n۹מg?)4oOGVJʕ&X۲exYx͂$7=5؇(gugOʰeVl-{4ljw#-2$ wܸX#Bl4 P ƀ,߇G im1 ?db&S=~TvwIYJ!~|k%+i4)qRd3:hS~G->JnOhi -->TNF3u="1w4,e27\ ET7R>Y@ ۻtn.z%ve ,pQo}?)5#)^D~~or)Guh)\hPK>ɦW;M.a[eg})/wuESDm.}?NX{`=R([>r"^O|ؐ ^6V@ރX[YXHk$"Lҍq*Ma],ߏN!BNڼN=j(?^ĨB>~<1 V?x+ 㤉o"0)/ Vw Ru| sa`ԹF4LY;  Пv]FAa\w`)X 'jP*;Z$0V fZzw~5V qx p}HW76DCb2\p?XDEr:}Ϫ%]3HoK --AGgNyIdcvaP$›D$P1p:{V.%w/}⌏SY| Z===Т!jkq l+Doy>?寮0 PYqJU6%e7ӾLJrÒOVPM+BtYZGI4KNL;8,-d5osMeou#J5_#`7mKf$/|wu38p@z' 2VM-] )]ETg쯕8x4ܾbI!ܽzM%&SћQA٭E`;_ʓ|yNak4F t+*=a*.\}< --ɤ֮Q>ү>& 5{7 ^H)' N0Ti][`5!;>5a#sd$2) g<1GP --䜼lq?a3#'F>1(o毖{xj8ڞ:n@nd8,ct,&r>(HLr"f>/V&Ha;Op례c*!҈@n\|uԱ'"Ѓ$y|_h6+|,.yL(V,?`=̻Y"4*:?-('WiBWuCr}r"_ejOXZ 4香fBuۻmx/E',t(pOUmQ7H_&Щ8}:{Pf b~֓m{y729”bh]EPji[ʆTJuHg 89m}Iٖ;.NdgsluT@evda퉏Yfo|fu+nOhzÞ0fl3չfXl>P<4{Y٥'`c=״@x1ȩ --J3/5fflOF~|1UX.=Y  _qCԇ|F_V] u;W|Y} MתBN'揓6D 9P[3/r --({^ C';| R?#WR`wGn9-CG%vm.έs1־_-?GBrߋ*om wnb(} h![#Ь)R/:狷3"~zehpoP'Nˉ~5Hf򌐄]z/?"+]C?Fw=47kO^Ȳ8 W8G4~h>pjF2,CzGU\ wpV b]帩kbWOc<툖|8ƛcEfJBq?[mSypehܘr-3'BtkQ<L"Ȉ2/2`7INđbH,C6Hd֓!"r|*gLCoEb XC3&0/kHSL|}/L2<+ ώx>ʣ"-Oed'QP9ӿ;^{ Z-(/Ѡ{Bsg{[c|0zs_=&ESMl=\$PR&h Bj"Ĥi du0B! 0rCkǗ)5A:twi :`>8EBʷ}O%ȓ`E#D[8O| }7XrȜp#;85e{mL<L65LBB8㍢֗P*ÌǑ~.pZǙUWB}Eퟷ,| 1 ~׫j_ O&+°NԝT>˸,QzPL > {2Y$X-@>zk_KhV;S; ahL.7 --EuKBŭQ]cem٤۲z --$ QpV%jl@;;|>ӹ4ըWo|̗t>i*qIHgָ֒SȶKΖq'lF"F՛S!x0  _q8g+%_" /}A"'|9 /1_ 0>X\O;mÉ --I;@^vUk,qcLķ$0[+^\ f1.;xT]G=N1`KGFWPi%%[sl }$Gg7Wf*>1&"kKX6 8A,0y@@JychoE_<l^-,| --`=:zIEzR*OYQ!^ TڪMo1@GҏF%c{w> {V2Xa-(|Z0jCk B= ̩X;|,:"1/K" 7G`9`0x. > :%w?f6 }@Z-?8*F-{E=C. XLdX` zqR9bmR?\.Z~G{v죳 4Z8 \?wH76q.4%]tLwH`xl>`([=N[K~~yML]_CvOt?nfWN4cJL|'e#u4R|Y#ј`npң]kT$j t5ɔJ6<$BfIkSW}g#E&pL;c38uW'"p&?q N/s-9d%K" %'TBB1pk1?G`-N &g_^1"H~- qjRj$G}]jvs3+&k@LE^Kw]Ue  ڵpEǾG-s)[qʗ%mX`tW&yji?s^IpKaş}6OLX.!"p}'8E[HƵq?9|yw)_';8+פ6E9AF qR?o V{*IQ!$T##~pT3hsȗӅے pW5>VDkŋ OmQDl-]꾈{w9Hu7?0U3nr]ӃSw|q --!H>6CP[+r*ג_}5$aɋ8 --Vxi .) ?=aBR-/1|1X.|SVy^z:ӑuY~ZH*7闯9Y3@0ؗ'eC_)_LIPzM1UGLa"5גӁ%ebK巻.Ax0M+|7f?A[ --yk O`d{6{@$JN@Ɗ,VI*c --vOC`!PuV+Ths{ԬG45 --Ӹ]7OvPk؀W3 ]at1Rڃ 䳅S,\[].=(Ø?^kɷF}um@\8̺ J zЊ݉y[Gv`h-lze[0ݻ@ѓif vprªKJaJ2Z/1IP;cI[q)Nl ZzL?ļӏ7ہU"D}sD#7} !T0P' x2t|OMwP6Վd1cw8 u]0\{ e:2S,|O u +rג>>C>+}.}%SWN/Xx/8d?ޤi|o9ԯ/83+~;L<#v/v@KCN8Nh~p1iWK?z'Ϛ[{J+NVff2*[G|Υ֡9Ќ溉5Iп<Z"]8| --)Ҋ'~-o=w=y}Wϣ{p~T s󼝷.;0E_B[Me_PVwى%X{EZ;lq#G~d\K>!!" {H%'\8b]Ʃt޻yH2YncM>6ob-ԑ+x{70?ޫh) --!#mYX\mbLKX@߀X9!>P~?FܬOX3P֙MŅGai#6vz YkSD=k;9em< ؎@#R}1*3}7&\୛;E .\r+Aq%CD>O>n\qt --endstream endobj 78 0 obj [/ICCBased 120 0 R] endobj 37 0 obj [36 0 R 35 0 R 34 0 R 33 0 R 32 0 R] endobj 262 0 obj <> endobj xref --0 263 --0000000004 65535 f --0000000016 00000 n --0000000203 00000 n --0000019585 00000 n --0000000000 00000 f --0000019636 00000 n --0000000000 00000 f --0000000000 00000 f --0001240583 00000 n --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0000000000 00000 f --0001240656 00000 n --0001241031 00000 n --0001242638 00000 n --0001308227 00000 n --0001373816 00000 n --0001395773 00000 n --0001461362 00000 n --0001526951 00000 n --0001592540 00000 n --0001658129 00000 n --0001723718 00000 n --0001789307 00000 n --0001854896 00000 n --0000000000 00000 f --0001235820 00000 n --0001235896 00000 n --0001235971 00000 n --0001236040 00000 n --0001236117 00000 n --0001920521 00000 n --0000020534 00000 n --0000021901 00000 n --0000090522 00000 n --0000152083 00000 n --0001204796 00000 n --0000334688 00000 n --0001236790 00000 n --0001236915 00000 n --0001237031 00000 n --0001237154 00000 n --0001237281 00000 n --0001237395 00000 n --0001237511 00000 n --0001237627 00000 n --0001237751 00000 n --0001237874 00000 n --0001237987 00000 n --0001238112 00000 n --0001232942 00000 n --0001233086 00000 n --0001233230 00000 n --0001233382 00000 n --0001233534 00000 n --0001233678 00000 n --0001233822 00000 n --0000023166 00000 n --0000023425 00000 n --0000023760 00000 n --0000024508 00000 n --0000024892 00000 n --0000026053 00000 n --0000026791 00000 n --0000027530 00000 n --0000028287 00000 n --0000029431 00000 n --0000029834 00000 n --0000030583 00000 n --0000053744 00000 n --0000072433 00000 n --0000021963 00000 n --0001920485 00000 n --0000022604 00000 n --0000022652 00000 n --0001204908 00000 n --0001205588 00000 n --0001204971 00000 n --0000347457 00000 n --0000366995 00000 n --0000785650 00000 n --0000347520 00000 n --0000346603 00000 n --0000346907 00000 n --0000346666 00000 n --0000342309 00000 n --0000346488 00000 n --0000342372 00000 n --0000343012 00000 n --0000343523 00000 n --0000341698 00000 n --0000341761 00000 n --0000337855 00000 n --0000340266 00000 n --0000340799 00000 n --0000340329 00000 n --0000339115 00000 n --0000339445 00000 n --0000339179 00000 n --0000337791 00000 n --0000338215 00000 n --0000336066 00000 n --0000336794 00000 n --0000336130 00000 n --0000334801 00000 n --0000335198 00000 n --0000334865 00000 n --0000332941 00000 n --0000333609 00000 n --0000333005 00000 n --0000259673 00000 n --0000154825 00000 n --0000090566 00000 n --0000152119 00000 n --0000152175 00000 n --0000333158 00000 n --0000333306 00000 n --0000333397 00000 n --0000333503 00000 n --0000333726 00000 n --0000333781 00000 n --0000334080 00000 n --0000334158 00000 n --0000334315 00000 n --0000334463 00000 n --0000334538 00000 n --0000334613 00000 n --0000335010 00000 n --0000335107 00000 n --0000335315 00000 n --0000335370 00000 n --0000335667 00000 n --0000335745 00000 n --0000335894 00000 n --0000335991 00000 n --0000336275 00000 n --0000336422 00000 n --0000336543 00000 n --0000336667 00000 n --0000336911 00000 n --0000336966 00000 n --0000337267 00000 n --0000337345 00000 n --0000337494 00000 n --0000337641 00000 n --0000337716 00000 n --0000337999 00000 n --0000338120 00000 n --0000338332 00000 n --0000338387 00000 n --0000338688 00000 n --0000338766 00000 n --0000338915 00000 n --0000339036 00000 n --0000339324 00000 n --0000339562 00000 n --0000339617 00000 n --0000339918 00000 n --0000339996 00000 n --0000340145 00000 n --0000340474 00000 n --0000340595 00000 n --0000340698 00000 n --0000340916 00000 n --0000340971 00000 n --0000341271 00000 n --0000341349 00000 n --0000341498 00000 n --0000341619 00000 n --0000341877 00000 n --0000341932 00000 n --0000342231 00000 n --0000345876 00000 n --0000345940 00000 n --0000343988 00000 n --0000345263 00000 n --0000345327 00000 n --0000343924 00000 n --0000344357 00000 n --0000344141 00000 n --0000344262 00000 n --0000344474 00000 n --0000344529 00000 n --0000344828 00000 n --0000344906 00000 n --0000345063 00000 n --0000345184 00000 n --0000345444 00000 n --0000345499 00000 n --0000345798 00000 n --0000346057 00000 n --0000346112 00000 n --0000346410 00000 n --0000346810 00000 n --0000347023 00000 n --0000347078 00000 n --0000347379 00000 n --0000367039 00000 n --0000785594 00000 n --0000785765 00000 n --0000785831 00000 n --0000785862 00000 n --0000786167 00000 n --0000786241 00000 n --0001205524 00000 n --0001205703 00000 n --0001205769 00000 n --0001205792 00000 n --0001206054 00000 n --0001206132 00000 n --0001206437 00000 n --0001206510 00000 n --0001235617 00000 n --0001235251 00000 n --0001234884 00000 n --0001234671 00000 n --0001234454 00000 n --0001234087 00000 n --0001233966 00000 n --0001234208 00000 n --0001234329 00000 n --0001234551 00000 n --0001234789 00000 n --0001235005 00000 n --0001235126 00000 n --0001235372 00000 n --0001235496 00000 n --0001235714 00000 n --0001236672 00000 n --0001236704 00000 n --0001236554 00000 n --0001236586 00000 n --0001236436 00000 n --0001236468 00000 n --0001236318 00000 n --0001236350 00000 n --0001236200 00000 n --0001236232 00000 n --0001239883 00000 n --0001239021 00000 n --0001238235 00000 n --0001238290 00000 n --0001238589 00000 n --0001238667 00000 n --0001238824 00000 n --0001238942 00000 n --0001239076 00000 n --0001239370 00000 n --0001239448 00000 n --0001239605 00000 n --0001239726 00000 n --0001239803 00000 n --0001239938 00000 n --0001240235 00000 n --0001240313 00000 n --0001240462 00000 n --0001920574 00000 n --trailer --<<50D55593E899F2408A07A2263CE1780D>]>> --startxref --1920762 --%%EOF -diff -urNr keepassxc-2.6.4-orig/share/macosx/keepassxc.entitlements keepassxc-2.6.4-patched/share/macosx/keepassxc.entitlements ---- keepassxc-2.6.4-orig/share/macosx/keepassxc.entitlements 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/macosx/keepassxc.entitlements 1970-01-01 01:00:00.000000000 +0100 -@@ -1,12 +0,0 @@ -- -- -- -- -- com.apple.application-identifier -- G2S7P7J672.org.keepassxc.keepassxc -- keychain-access-groups -- -- G2S7P7J672.org.keepassxc.keepassxc -- -- -- -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.icns e keepassxc-2.6.4-patched/share/macosx/keepassxc.icns sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_128x128@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_128x128@2x.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_128x128.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_128x128.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_16x16@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_16x16@2x.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_16x16.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_16x16.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_256x256@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_256x256@2x.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_256x256.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_256x256.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_32x32@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_32x32@2x.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_32x32.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_32x32.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_512x512@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_512x512@2x.png sono diversi -I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_512x512.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_512x512.png sono diversi -diff -urNr keepassxc-2.6.4-orig/share/translations/CMakeLists.txt keepassxc-2.6.4-patched/share/translations/CMakeLists.txt ---- keepassxc-2.6.4-orig/share/translations/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --# Copyright (C) 2017 KeePassXC Team --# Copyright (C) 2014 Felix Geyer --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --file(GLOB TRANSLATION_FILES *.ts) --get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE) --list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts) --list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS}) --message(STATUS "Including translations...\n") -- --qt5_add_translation(QM_FILES ${TRANSLATION_FILES}) -- --if(MINGW) -- file(GLOB QTBASE_TRANSLATIONS ${Qt5_PREFIX}/share/qt5/translations/qtbase_*.qm) --elseif(APPLE OR KEEPASSXC_DIST_APPIMAGE) -- file(GLOB QTBASE_TRANSLATIONS -- /usr/share/qt/translations/qtbase_*.qm -- /usr/share/qt5/translations/qtbase_*.qm -- ${Qt5_PREFIX}/translations/qtbase_*.qm) --endif() --set(QM_FILES ${QM_FILES} ${QTBASE_TRANSLATIONS}) -- --install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations) -- --# Add keepassx_en.qm as a fallback for uncommon english locales --install(FILES ${CMAKE_CURRENT_BINARY_DIR}/keepassx_en_US.qm DESTINATION ${DATA_INSTALL_DIR}/translations RENAME keepassx_en.qm) -- --add_custom_target(translations DEPENDS ${QM_FILES}) --add_dependencies(${PROGNAME} translations) -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ar.ts keepassxc-2.6.4-patched/share/translations/keepassx_ar.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ar.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ar.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7847 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- حول KeePassXC -- -- -- About -- حول -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- للإبلاغ عن العلل: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC موزع وفقًا لشروط رخصة غنو العمومية (GPL) إصدار 2 أو (حسب خيارك) إصدار 3. -- -- -- Contributors -- المساهمون -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">إستكشاف المساهمين عبر GitHub</a> -- -- -- Debug Info -- معلومات تتبع الأخطاء -- -- -- Include the following information whenever you report a bug: -- قم بتضمين المعلومات التالية عند الإبلاغ عن علة: -- -- -- Copy to clipboard -- نسخ إلى الحافظة -- -- -- Project Maintainers: -- مشرفي المشروع: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- شكر خاص من فريق KeePassXC يذهب إلى debfx لإنشاء KeePassX الأصلي. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- إعدادات التطبيق -- -- -- General -- العام -- -- -- Security -- الأمان -- -- -- Access error for config file %1 -- خطأ في الوصول لملف التكوين %1 -- -- -- Icon only -- الأيقونة فقط -- -- -- Text only -- الوصف بالكلمات فقط -- -- -- Text beside icon -- وصف حرفي بجانب الأيقونة -- -- -- Text under icon -- الوصف أسفل الأيقونة -- -- -- Follow style -- تابع النمط -- -- -- Reset Settings? -- -- -- -- Are you sure you want to reset all general and security settings to default? -- هل أنت متأكد من رغبتك في إعادة جميع الإعدادات العامة وإعدادات الأمن الى وضعها النمطي الأولي ؟ -- -- -- Monochrome (light) -- -- -- -- Monochrome (dark) -- -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- الإعدادات الأساسية -- -- -- Startup -- بدأ التشغيل -- -- -- Start only a single instance of KeePassXC -- شغل تطبيق واحد فقط من KeePassXC -- -- -- Minimize window at application startup -- تصغير النافذة عند بدء تشغيل التطبيق -- -- -- File Management -- إدارة الملفات -- -- -- Backup database file before saving -- إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ -- -- -- Automatically save after every change -- الحفظ تلقائيًا بعد كل تعديل -- -- -- Automatically reload the database when modified externally -- إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا -- -- -- Entry Management -- إدارة الإدخالات -- -- -- Use group icon on entry creation -- استخدم رمز المجموعة عند إنشاء الإدخال -- -- -- Minimize instead of app exit -- تصغيرالتطبيق بدل الخروج منه -- -- -- Show a system tray icon -- اظهر أيقونة البرنامج في صينية النظام -- -- -- Hide window to system tray when minimized -- إخفاء النافذة إلى شريط المهام عند تصغيرها -- -- -- Auto-Type -- الطباعة التلقائية -- -- -- Use entry title to match windows for global Auto-Type -- استخدم عنوان الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام -- -- -- Use entry URL to match windows for global Auto-Type -- استخدم رابط الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام -- -- -- Always ask before performing Auto-Type -- اسأل دائما قبل تنفيذ الطباعة التلقائية -- -- -- ms -- Milliseconds -- مل.ثانية -- -- -- Movable toolbar -- شريط عُدد قابل للتحريك -- -- -- Remember previously used databases -- تذكُر قاعدة البيانات المستخدمة أخيراً -- -- -- Load previously open databases on startup -- عند بدء التشغيل إعادة فتح قواعد البيانات التي مفتوحة سابقاً -- -- -- Remember database key files and security dongles -- -- -- -- Check for updates at application startup once per week -- فحص وجود تحديثات للبرامج عند بدء تشغيل التطبيق مرة واحدة في الأسبوع -- -- -- Include beta releases when checking for updates -- -- -- -- Language: -- اللغة -- -- -- (restart program to activate) -- ( للتفعيل يرجى إعادة التشغيل ) -- -- -- Minimize window after unlocking database -- تصغيرنافذة التطبيق بعد فتح قاعدة البيانات -- -- -- Minimize when opening a URL -- تصغير البرنامج عند فتح رابط URL من النت -- -- -- Hide window when copying to clipboard -- إخفاء نافذة البرنامج عند النسخ الى الحافظة -- -- -- Minimize -- تصغير -- -- -- Drop to background -- الإرجاع الى الخلفية -- -- -- Favicon download timeout: -- فوت الوقت لتنزيل أيقونة الشعارالمفضل -- -- -- Website icon download timeout in seconds -- الزمن بالثانية لفوت الإتصال لتنزيل أيقونة الموقع -- -- -- sec -- Seconds -- ثانية -- -- -- Toolbar button style -- نمط مفاتيح شريط العُدد -- -- -- Language selection -- إختيار اللغة -- -- -- Global auto-type shortcut -- المختصر الى النمط-التلقائي العمومي -- -- -- Auto-type character typing delay milliseconds -- تأخيرالطباعة لأحرف النمط-التلقائي -- بأجزاء الثانية -- -- -- Auto-type start delay milliseconds -- تأخير بدء النمط-التلقائي بأجزاء الثانية -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- مهلة نفاد الوقت -- -- -- Clear clipboard after -- امسح الذاكرة بعد -- -- -- sec -- Seconds -- ثانية -- -- -- Lock databases after inactivity of -- أغلق قواعد البيانات بعد حالة عدم النشاط ل -- -- -- min -- دقيقة -- -- -- Forget TouchID after inactivity of -- -- -- -- Convenience -- السهولة -- -- -- Lock databases when session is locked or lid is closed -- اقفل قواعد البيانات عندما تنقفل الجلسة أو يتم إغلاق اللابتوب -- -- -- Forget TouchID when session is locked or lid is closed -- إنسى هوية البصمة عند قفل حصة التفاعل أو عند إغلاق الشاشة -- -- -- Lock databases after minimizing the window -- قفل قواعد البيانات عند تصغير النافذة -- -- -- Re-lock previously locked database after performing Auto-Type -- أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعد تنفيذ الطباعة التلقائية -- -- -- Hide passwords in the entry preview panel -- اخفي كلمات السر في لوحة إستعراض المدخلات -- -- -- Hide entry notes by default -- إخفاء مُدخل الملاحظات إفتراضيًا -- -- -- Privacy -- الخصوصية -- -- -- Use DuckDuckGo service to download website icons -- استعمل خدمة DuckDuckGo لتنزيل أيقونات مواقع الإنترنت -- -- -- Clipboard clear seconds -- مسح لوحة الحفظ بالثواني -- -- -- Touch ID inactivity reset -- المهلة الزمنية لعدم التفاعل لنسيان هوية البصمة -- -- -- Database lock timeout seconds -- المهلة الزنسة لقفل قواعد البيانات -- -- -- min -- Minutes -- دقيقة -- -- -- Clear search query after -- مسح محددات البحث بعد مضي -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- تعذر العثور على إدخال يطابق عنوان النافذة: -- -- -- Auto-Type - KeePassXC -- الطباعة التلقائية - KeePassXC -- -- -- Auto-Type -- الطباعة التلقائية -- -- -- The Syntax of your Auto-Type statement is incorrect! -- صياغة التعبير للطباعة التلقائية غير صحيح! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- الوقت المعطى لأمر الطباعة التلقائية طويل للغاية، هل تريد المتابعة؟ -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- هذا الأمر للطباعة التلقائية يحتوي على مفاتيح مضغوطة بشكل بطيء للغاية، هل انت متأكد من المتابعة؟ -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- هذا الأمر للطباعة التلقائية يحتوي على عبارات مكررة، هل تريد المتابعة؟ -- -- -- Permission Required -- إذن السماح مطلوب -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC يطلب إذن السماح بالدخول لإنجاز التغييرات المبدئية وفق النمط-التلقائي . إذا كنت قد أعطيت الإذن بالسماح -- فقد يستوجب منك ذلك إعادة تشغيل KeePassXC -- -- -- -- AutoTypeAssociationsModel -- -- Window -- النافذة -- -- -- Sequence -- التسلسل -- -- -- Default sequence -- التسلسل الإفتراضي -- -- -- -- AutoTypeMatchModel -- -- Group -- المجموعة -- -- -- Title -- العنوان -- -- -- Username -- اسم المستخدم -- -- -- Sequence -- التسلسل -- -- -- -- AutoTypeMatchView -- -- Copy &username -- نسخ و اسم المستخدم -- -- -- Copy &password -- نسخ و كلمة السر -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- إذن السماح مطلوب -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- الطباعة التلقائية - KeePassXC -- -- -- Select entry to Auto-Type: -- حدد مدخل للطباعة التلقائية: -- -- -- Search... -- البحث... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- متصفح KeePassXC إحفظ المدخلات -- -- -- Ok -- تمام -- -- -- Cancel -- ألغ -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- لديك العديد من قواعد البيانات مفتوحة --الرجاء إختيار قاعدة البيانات الصحيحة لحفظ المسوغات -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: طلب مصادقة مفتاح جديد -- -- -- Save and allow access -- حفظ والسماح بالوصول -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: الكتابة على المفتاح الحالي؟ -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- مفتاح التشفير المشترك مع إسم "%1" موجود بالفعل. --هل تريد الكتابة عليه؟ -- -- -- KeePassXC: Update Entry -- KeePassXC: تحديث المُدخل -- -- -- Do you want to update the information in %1 - %2? -- هل تريد تحديث المعلومات في %1 - %2؟ -- -- -- Abort -- إجهاض -- -- -- Converting attributes to custom data… -- -- -- -- KeePassXC: Converted KeePassHTTP attributes -- -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- -- -- -- KeePassXC: Legacy browser integration settings detected -- -- -- -- KeePassXC: Create a new group -- -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- لا تُظهر هذا التحذير مرة أخرى -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- الحوار -- -- -- This is required for accessing your databases with KeePassXC-Browser -- هذا مطلوب للوصول إلى قواعد بياناتك مع KeePassXC-Browser -- -- -- Enable browser integration -- -- -- -- General -- العام -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- تفعيل التكامل لهذه المتصفحات: -- -- -- Vivaldi -- -- -- -- &Edge -- -- -- -- Firefox -- -- -- -- Tor Browser -- -- -- -- Brave -- -- -- -- Google Chrome -- -- -- -- Chromium -- -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- السماح فقط بالمدخلات التي تعود بنفس الصيغة (http://, https://, ...) -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- متقدم -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- تحديثات مسارات KeePassXC أو keepassxc-proxy تلقائيًا لبرامج المراسلات الأصلية عند بدء التشغيل. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- إستخدام موقع وكيل مخصص في حالة تثبيت خادم وكيل يدويًا. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- إستعراض... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- نمط مفاتيح شريط العُدد -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! -- -- -- Executable Files -- ملفات برامج -- -- -- All Files -- جميع الملفات -- -- -- Select custom proxy location -- حدد موقع خادم الوكيل المخصص -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- إعدادات الإستنساخ -- -- -- Append ' - Clone' to title -- أضف ' - Clone' إلى العنوان -- -- -- Replace username and password with references -- إستبدل اسم المستخدم وكلمة المرور بالتوصيات -- -- -- Copy history -- نسخ التاريخ -- -- -- -- CsvImportWidget -- -- Import CSV fields -- إستيراد مُدخلات CSV -- -- -- filename -- اسم الملف -- -- -- size, rows, columns -- الحجم، الصفوف، الأعمدة -- -- -- Encoding -- ترميز -- -- -- Codec -- الترميز -- -- -- Text is qualified by -- النص مؤهل من قبل -- -- -- Fields are separated by -- تُفصل الحقول بواسطة -- -- -- Comments start with -- تبدأ التعليقات عند -- -- -- Consider '\' an escape character -- يعتبر '\' حرف هروب -- -- -- Preview -- معاينة -- -- -- Imported from CSV file -- مُستورد من ملف CSV -- -- -- Original data: -- البيانات الأصلية: -- -- -- Error -- خطأ -- -- -- Error(s) detected in CSV file! -- -- -- -- [%n more message(s) skipped] -- -- -- -- CSV import: writer has errors: --%1 -- -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- آخر تعديل -- -- -- Password -- كلمه السر -- -- -- Created -- أُنشئت -- -- -- Notes -- ملاحظات -- -- -- Title -- العنوان -- -- -- Group -- المجموعة -- -- -- URL -- رابط -- -- -- Username -- اسم المستخدم -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- -- -- -- Icon -- أيقونة -- -- -- -- CsvParserModel -- -- %n column(s) -- %n عمود%n عمود%n عمود%n عمود%n عمود%n عمود -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- -- -- -- %n byte(s) -- -- -- -- %n row(s) -- -- -- -- -- Database -- -- File %1 does not exist. -- -- -- -- Unable to open file %1. -- -- -- -- Error while reading the database: %1 -- -- -- -- File cannot be written as it is opened in read-only mode. -- -- -- -- Key not transformed. This is a bug, please report it to the developers! -- -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- سلة المهملات -- -- -- Passwords -- Root group name -- كلمه السر -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- -- -- -- -- DatabaseOpenWidget -- -- Key File: -- ملف المفتاح: -- -- -- Refresh -- تحديث -- -- -- Don't show this warning again -- لا تُظهر هذا التحذير مرة أخرى -- -- -- All files -- كل الملفات -- -- -- Key files -- ملفات المفتاح -- -- -- Select key file -- إختر ملف المفتاح -- -- -- Failed to open key file: %1 -- -- -- -- Unlock KeePassXC Database -- -- -- -- Enter Password: -- -- -- -- Password field -- -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- إستعراض... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- يرجى لمس الزر المتواجد على YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- كلمه السر -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- -- -- -- General -- العام -- -- -- Security -- الأمان -- -- -- Encryption Settings -- -- -- -- Browser Integration -- تكامل المتصفح -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- -- -- -- Stored keys -- -- -- -- Remove -- إزالة -- -- -- Delete the selected key? -- -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- -- Key -- المفتاح -- -- -- Value -- القيمة -- -- -- Enable Browser Integration to access these settings. -- -- -- -- Disconnect all browsers -- -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- -- KeePassXC: No keys found -- KeePassXC: لم يُعثر على أية مفاتيح -- -- -- No shared encryption keys found in KeePassXC settings. -- -- -- -- KeePassXC: Removed keys from database -- KeePassXC: حُذِفت المفاتيح من قاعدة البيانات -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- -- Removing stored permissions… -- إزالة الصلاحيات المخزنة... -- -- -- Abort -- إجهاض -- -- -- KeePassXC: Removed permissions -- KeePassXC: حُذفت الصلاحيات -- -- -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: لا يوجد مُدخل مع الصلاحيات الموجودة! -- -- -- The active database does not contain an entry with permissions. -- لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. -- -- -- Move KeePassHTTP attributes to custom data -- -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- أُنشئت -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- -- -- -- No password set -- -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- -- Continue without password -- -- -- -- No encryption key added -- -- -- -- You must add at least one encryption key to secure your database! -- -- -- -- Unknown error -- خطأ مجهول -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- خورزامية التعمية: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (الإفتراضي) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- وظيفة مفتاح الإشتقاق: -- -- -- Transform rounds: -- جولات التحول: -- -- -- Memory Usage: -- إستخدام الذاكرة: -- -- -- Parallelism: -- التماثل: -- -- -- Decryption Time: -- -- -- -- ?? s -- -- -- -- Change -- -- -- -- Higher values offer more protection, but opening the database will take longer. -- -- -- -- Database format: -- -- -- -- This is only important if you need to use your database with other programs. -- -- -- -- KDBX 4.0 (recommended) -- -- -- -- KDBX 3.1 -- -- -- -- unchanged -- Database decryption time is unchanged -- -- -- -- Number of rounds too high -- Key transformation rounds -- عدد الجولات عالي جدًا -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- أنت تستخدم عدد كبير جدًا من جولات تحول المفتاح مع Argon2. -- --إذا احتفظت بهذا الرقم، فقد تستغرق قاعدة البيانات ساعات أو أيام (أو حتى أطول) لفتحها! -- -- -- Understood, keep number -- مفهوم، حافظ على العدد -- -- -- Cancel -- ألغ -- -- -- Number of rounds too low -- Key transformation rounds -- عدد الجولات منخفض جدًا -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- أنت تستخدم عدد قليل جدًا من جولات تحول المفتاح مع AES-KDF. -- --إذا احتفزت بهذا الرقم، قد تكون قاعدة البيانات الخاصة بك من السهل جدًا كسرها! -- -- -- KDF unchanged -- KDF دون تغيير -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- أخفق تحويل المفتاح مع معطيات KDF الجديدة; KDF دون تغيير. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- -- -- -- Database format -- -- -- -- Encryption algorithm -- -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- -- -- -- Parallelism -- -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- البيانات الوصفية لقاعدة البيانات -- -- -- Database name: -- إسم قاعدة البيانات: -- -- -- Database description: -- وصف قاعدة البيانات: -- -- -- Default username: -- اسم المستخدم الافتراضي: -- -- -- History Settings -- إعدادات السجل -- -- -- Max. history items: -- أقصى عدد للسجلات: -- -- -- Max. history size: -- أقصى حجم للسجلات: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- إستخدام سلة المهملات -- -- -- Additional Database Settings -- إعدادات قاعدة البيانات الإضافية -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- -- -- -- Breadcrumb -- -- -- -- Type -- -- -- -- Path -- -- -- -- Last Signer -- -- -- -- Certificates -- -- -- -- > -- Breadcrumb separator -- -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- -- -- -- Description: -- -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- قاعدة بيانات KeePass 2 -- -- -- All files -- كل الملفات -- -- -- Open database -- فتح قاعدة بيانات -- -- -- CSV file -- ملف CSV -- -- -- Merge database -- دمج قاعدة بيانات -- -- -- Open KeePass 1 database -- فتح قاعدة بيانات KeePass 1 -- -- -- KeePass 1 database -- قاعدة بيانات KeePass 1 -- -- -- Export database to CSV file -- تصدير قاعدة البيانات إلى ملف CSV -- -- -- Writing the CSV file failed. -- تعذر كتابة ملف CSV. -- -- -- Database creation error -- -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- -- Select CSV file -- -- -- -- New Database -- -- -- -- %1 [New Database] -- Database tab name modifier -- -- -- -- %1 [Locked] -- Database tab name modifier -- -- -- -- %1 [Read-only] -- Database tab name modifier -- -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- يبْحَث... -- -- -- Do you really want to delete the entry "%1" for good? -- هل تريد حقًا حذف الإدخال "%1" بشكل دائم؟ -- -- -- Do you really want to move entry "%1" to the recycle bin? -- هل تريد حقًا نقل الإدخال "%1" إلى سلة المهملات؟ -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟ -- -- -- Execute command? -- تنفيذ الأمر؟ -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- هل تريد حقًا تنفيذ الأمر التالي؟<br><br>%1<br> -- -- -- Remember my choice -- تذكر ما اخترته -- -- -- Do you really want to delete the group "%1" for good? -- هل تريد حقًا حذف المجموعة "%1" بشكل دائم؟ -- -- -- No current database. -- لا يوجد قاعدة بيانات حالية. -- -- -- No source database, nothing to do. -- لا يوجد قاعدة بيانات مصدرية, لا يوجد شيء لفعله. -- -- -- Search Results (%1) -- نتائج البحث (%1) -- -- -- No Results -- لا يوجد نتائج -- -- -- File has changed -- الملف تغير -- -- -- The database file has changed. Do you want to load the changes? -- قاعدة البيانات تغيرت. هل تريد تحميل التغييرات؟ -- -- -- Merge Request -- دمج الطلب -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- تم تغيير ملف قاعدة البيانات ولديك تغييرات لم يتم حفظها. --هل تريد دمج التغييرات؟ -- -- -- Empty recycle bin? -- إفراغ سلة المهملات؟ -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- هل أنت متأكد من حذف كل شيء من سلة المهملات نهائيًا؟ -- -- -- Do you really want to delete %n entry(s) for good? -- -- -- -- Delete entry(s)? -- -- -- -- Move entry(s) to recycle bin? -- -- -- -- Lock Database? -- -- -- -- You are editing an entry. Discard changes and lock anyway? -- -- -- -- "%1" was modified. --Save changes? -- "%1" مُعدل. --هل تريد حفظ التغييرات؟ -- -- -- Database was modified. --Save changes? -- -- -- -- Save changes? -- حفظ التغييرات؟ -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- -- Disable safe saves? -- هل تريد تعطيل الحفظ الآمن؟ -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC قد فشل في حفظ قاعدة البيانات عدة مرات. هذا غالبا ما يحدث بسبب خدمات مزامنة الملف حيث تقوم بمنع الكتابة على الملف. --أتريد إلغاء خيار الحفظ الامن ثم المحاولة مرة أخرى؟ -- -- -- Passwords -- كلمه السر -- -- -- Save database as -- حفظ قاعدة البيانات باسم -- -- -- KeePass 2 Database -- قاعدة بيانات KeePass 2 -- -- -- Replace references to entry? -- -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- -- -- -- Move group to recycle bin? -- -- -- -- Do you really want to move the group "%1" to the recycle bin? -- -- -- -- Successfully merged the database files. -- -- -- -- Database was not modified by merge operation. -- -- -- -- Shared group... -- -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- مُدخلة -- -- -- Advanced -- متقدم -- -- -- Icon -- أيقونة -- -- -- Auto-Type -- الطباعة التلقائية -- -- -- Properties -- خصائص -- -- -- History -- التاريخ -- -- -- SSH Agent -- وكيل SSH -- -- -- n/a -- n/a -- -- -- (encrypted) -- (مُعمّى) -- -- -- Select private key -- إختر المفتاح السري -- -- -- Entry history -- تاريخ دخول -- -- -- Add entry -- إضافة مُدخل -- -- -- Edit entry -- تعديل مُدخل -- -- -- New attribute -- خاصية جديدة -- -- -- Are you sure you want to remove this attribute? -- هل أنت متاكد من إزالة هذه الخاصية؟ -- -- -- Tomorrow -- غدا -- -- -- %n week(s) -- %n أسبوعأسبوعأسبوعين%n أسابيع%n أسبوع%n أسابيع -- -- -- %n month(s) -- %n شهرشهرشهرين%n شهور%n شهور%n شهور -- -- -- Entry updated successfully. -- حُدث المُدخل بنجاح. -- -- -- New attribute %1 -- -- -- -- %n year(s) -- -- -- -- Confirm Removal -- -- -- -- Browser Integration -- تكامل المتصفح -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- إستكشاف -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- الخصائص الإضافية -- -- -- Add -- إضافة -- -- -- Remove -- إزالة -- -- -- Edit Name -- تعديل الإسم -- -- -- Protect -- حماية -- -- -- Reveal -- إستكشاف -- -- -- Attachments -- المرفقات -- -- -- Foreground Color: -- لون المقدمة: -- -- -- Background Color: -- لون الخلفية: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- تفعيل الطباعة التلقائية لهذا المدخل -- -- -- Window Associations -- مصادقات النافذة -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- عنوان النافذة: -- -- -- Use a specific sequence for this association: -- إستخدم تسلسل محدد لهذا الإرتباط: -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- العام -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- إضافة -- -- -- Remove -- إزالة -- -- -- Edit -- -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- إظهار -- -- -- Restore -- إستعادة -- -- -- Delete -- حذف -- -- -- Delete all -- حذف الكل -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- رابط: -- -- -- Password: -- كلمه السر: -- -- -- Title: -- العنوان: -- -- -- Presets -- المسبقة -- -- -- Toggle the checkbox to reveal the notes section. -- إختر مربع الإختيار لإستكشاف قسم الملاحظات. -- -- -- Username: -- اسم المستخدم: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- -- -- -- Toggle notes visible -- -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- -- -- -- Notes: -- ملاحظات: -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- النموذج -- -- -- Remove key from agent after -- حذف المفتاح من الوكيل عند -- -- -- seconds -- ثواني -- -- -- Fingerprint -- البصمة -- -- -- Remove key from agent when database is closed/locked -- امسح المفتاح من العميل عندما يتم قفل أو إغلاق قاعدة البيانات. -- -- -- Public key -- المفتاح العام -- -- -- Add key to agent when database is opened/unlocked -- أضف مفتاح للعميل عندما يتم فتح قاعدة البيانات أو إلغاء القفل -- -- -- Comment -- تعليق -- -- -- Decrypt -- فك التعمية -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- نسخ إلى الحافظة -- -- -- Private key -- المفتاح السري -- -- -- External file -- ملف خارجي -- -- -- Browse... -- Button for opening file dialog -- إستعراض... -- -- -- Attachment -- إرفاق -- -- -- Add to agent -- إضافة إلى الوكيل -- -- -- Remove from agent -- حذف من الوكيل -- -- -- Require user confirmation when this key is used -- يتطلب تأكيد المستخدم عندما يتم إستخدام هذا المفتاح -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- المجموعة -- -- -- Icon -- أيقونة -- -- -- Properties -- خصائص -- -- -- Add group -- إضافة مجموعة -- -- -- Edit group -- تعديل مجموعة -- -- -- Enable -- تفعيل -- -- -- Disable -- تعطيل -- -- -- Inherit from parent group (%1) -- ورث من المجموعة الرئيسية (%1) -- -- -- Entry has unsaved changes -- -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- -- -- -- Path: -- -- -- -- Password: -- كلمه السر: -- -- -- Inactive -- -- -- -- KeeShare unsigned container -- -- -- -- KeeShare signed container -- -- -- -- Select import source -- -- -- -- Select export target -- -- -- -- Select import/export file -- -- -- -- Clear -- مسح -- -- -- Import -- إستيراد -- -- -- Export -- -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- إستعراض... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- ملاحظات: -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- أضف أيقونة مخصصة -- -- -- Delete custom icon -- احذف أيقونة مخصصة -- -- -- Download favicon -- تحميل رمز المفضلة -- -- -- Unable to fetch favicon. -- تعذر جلب رمز المفضلة. -- -- -- Images -- الصور -- -- -- All files -- كل الملفات -- -- -- Confirm Delete -- تأكيد الحذف -- -- -- Select Image(s) -- -- -- -- Successfully loaded %1 of %n icon(s) -- -- -- -- No icons were loaded -- -- -- -- %n icon(s) already exist in the database -- -- -- -- The following icon(s) failed: -- -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- إنشاء: -- -- -- Modified: -- تعديل: -- -- -- Accessed: -- الوصول: -- -- -- Uuid: -- المعرف الفريد: -- -- -- Plugin Data -- بيانات الإضافة -- -- -- Remove -- إزالة -- -- -- Delete plugin data? -- حذف بيانات الإضافة؟ -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- هل تريد حقًا حذف بيانات الإضافة المحددة؟ --قد يؤدي إلى حدوث خلل في الإضافات المتأثرة. -- -- -- Key -- المفتاح -- -- -- Value -- القيمة -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- -- -- -- -- EntryAttachmentsModel -- -- Name -- الاسم -- -- -- Size -- الحجم -- -- -- -- EntryAttachmentsWidget -- -- Form -- النموذج -- -- -- Add -- إضافة -- -- -- Remove -- إزالة -- -- -- Open -- افتح -- -- -- Save -- احفظ -- -- -- Select files -- اختر الملفات -- -- -- Are you sure you want to remove %n attachment(s)? -- هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفقات؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفقات؟ -- -- -- Save attachments -- حفظ المرفقات -- -- -- Unable to create directory: --%1 -- غير قادر على إنشاء مجلد: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- هل أنت متاكد من إستبدال الملف الحالي "%1" بالمرفق؟ -- -- -- Confirm overwrite -- تأكيد الإستبدال -- -- -- Unable to save attachments: --%1 -- تعذر حفظ المرفقات: --%1 -- -- -- Unable to open attachment: --%1 -- تعذر فتح المرفق: --%1 -- -- -- Unable to open attachments: --%1 -- تعذر فتح المرفقات: --%1 -- -- -- Confirm remove -- -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- المرفقات -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- الاسم -- -- -- -- EntryHistoryModel -- -- Last modified -- آخر تعديل -- -- -- Title -- العنوان -- -- -- Username -- اسم المستخدم -- -- -- URL -- رابط -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- المرجع: -- -- -- Group -- المجموعة -- -- -- Title -- العنوان -- -- -- Username -- اسم المستخدم -- -- -- URL -- رابط -- -- -- Never -- أبدًا -- -- -- Password -- كلمه السر -- -- -- Notes -- ملاحظات -- -- -- Expires -- انتهاء -- -- -- Created -- أُنشئت -- -- -- Modified -- التعديل -- -- -- Accessed -- الوصول -- -- -- Attachments -- المرفقات -- -- -- Size -- الحجم -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- إغلاق -- -- -- General -- العام -- -- -- Username -- اسم المستخدم -- -- -- Password -- كلمه السر -- -- -- Expiration -- الإنتهاء -- -- -- URL -- رابط -- -- -- Attributes -- الخصائص -- -- -- Attachments -- المرفقات -- -- -- Notes -- ملاحظات -- -- -- Autotype -- Auto-Type -- -- -- Window -- النافذة -- -- -- Sequence -- التسلسل -- -- -- Searching -- جاري البحث -- -- -- Search -- بحث -- -- -- Clear -- مسح -- -- -- Never -- أبدًا -- -- -- [PROTECTED] -- [محمي] -- -- -- Enabled -- مُفعل -- -- -- Disabled -- مُعطل -- -- -- Share -- -- -- -- Display current TOTP value -- -- -- -- Advanced -- متقدم -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- ﻻئم النافذة -- -- -- Fit to contents -- ﻻئم المحتوى -- -- -- Reset to defaults -- إعادة التعيين إلى الإعدادات الافتراضية -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- المجموعة -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- -- -- -- Unknown -- Unknown executable path -- -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- ألغاء -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- إغلاق -- -- -- URL -- رابط -- -- -- Status -- -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- -- -- -- Ok -- تمام -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &إغلاق -- -- -- Close message -- إغلاق الرسالة -- -- -- -- Kdbx3Reader -- -- missing database headers -- رؤوس قاعدة البيانات مفقودة -- -- -- Header doesn't match hash -- -- -- -- Invalid header id size -- حجم معرف الرأس غير صحيح -- -- -- Invalid header field length -- رأس حقل الطول غير صحيح -- -- -- Invalid header data length -- طول بيانات الرأس غير صحيح -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- رؤوس قاعدة البيانات مفقودة -- -- -- Invalid header checksum size -- حجم رأس تدقيق المجموع غير صحيح -- -- -- Header SHA256 mismatch -- رأس SHA256 غير متطابق -- -- -- Unknown cipher -- تشفير غير معروف -- -- -- Invalid header id size -- حجم معرف الرأس غير صحيح -- -- -- Invalid header field length -- رأس حقل الطول غير صحيح -- -- -- Invalid header data length -- طول بيانات الرأس غير صحيح -- -- -- Failed to open buffer for KDF parameters in header -- أخفق فتح مخزن بيانات مؤقت لمعطيات KDF في الرأس -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- وظيفة إشتقاق المفاتيح غير مدعومة (KDF) أو المعطيات غير صحيحة -- -- -- Legacy header fields found in KDBX4 file. -- عُثر على حقول رأس قديمة في ملف KDBX4. -- -- -- Invalid inner header id size -- حجم معرف الرأس الداخلي غير صحيح -- -- -- Invalid inner header field length -- رأس حقل الطول الداخلي غير صحيح -- -- -- Invalid inner header binary size -- حجم ثنائي الرأس الداخلي غير صحيح -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- نسخة خريطة KeePass المتنوعة غير مدعومة. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- طول ادخال الاسم للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- بيانات ادخال الاسم الخريطة المتنوعة غير صحيحة -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال الخريطة المتنوعة غير صحيح -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- بيانات قيمة إدخال الخريطة المتنوعة غير صحيحة -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال Bool للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال Int32 للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال UInt32 للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال Int64 للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- طول قيمة إدخال UInt64 للخريطة المتنوعة غير صحيح -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- إدخال نوع الخريطة المتنوعة غير صحيح -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- حقل حجم النوع للخريطة المتنوعة غير صحيح -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- خورزامية تشفير بالمفتاح المتناظر غير صحيحة -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- خطأ في الحجم الرابع بخورزامية تشفير بالمفتاح المتناظر -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- أخفق تسلسل معطيات KDF للخريطة المتنوعة -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- تشفير غير مدعوم -- -- -- Invalid compression flags length -- طول علامات الضغط غير صحيح -- -- -- Unsupported compression algorithm -- خورزامية الضغط غير مدعومة -- -- -- Invalid master seed size -- حجم seed الرئيسي غير صحيح -- -- -- Invalid transform seed size -- حجم seed للتحول غير صحيح -- -- -- Invalid transform rounds size -- حجم جولات التحول غير صحيح -- -- -- Invalid start bytes size -- حجم بتات البداية غير صحيح -- -- -- Invalid random stream id size -- حجم معرف random stream غير صحيح -- -- -- Invalid inner random stream cipher -- خطأ داخلي بخورزامية random stream -- -- -- Not a KeePass database. -- ليس قاعدة بيانات KeePass -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- الملف المحدد هو قاعدة بيانات KeePass 1 القديمة (.kdb). -- --يمكنك إستيراده عن طريق النقر على قاعدة البيانات > 'إستيراد قاعدة بيانات KeePass 1...'. --هذه الطريقة الوحيدة للترحيل. لن تتمكن من فتح قاعدة البيانات المستوردة من القديم في إصدار KeePassXC 0.4. -- -- -- Unsupported KeePass 2 database version. -- إصدار قاعدة بيانات 2 KeePass غير مدعوم. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- -- -- -- Failed to read database file. -- -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- فشل تحليل XML: %1 -- -- -- No root group -- لا يوجد مجموعة رئيسية -- -- -- Missing icon uuid or data -- uuid او بيانات الرمز مفقودة -- -- -- Missing custom data key or value -- مفتاح البيانات المخصص او قيمته مفقودة -- -- -- Multiple group elements -- عناصر المجموعة المتعددة -- -- -- Null group uuid -- uuid المجموعة غير معروف -- -- -- Invalid group icon number -- رقم رمز المجموعة غير صحيح -- -- -- Invalid EnableAutoType value -- قيمة EnableAutoType غير صحيحة -- -- -- Invalid EnableSearching value -- قيمة EnableSearching غير صحيحة -- -- -- No group uuid found -- لم يُعثر على مُعرف المجموعة الفريد -- -- -- Null DeleteObject uuid -- Null DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- uuid او وقت DeletedObject مفقود -- -- -- Null entry uuid -- uuid الإدخال غير معروف -- -- -- Invalid entry icon number -- رقم الرمز المُدخل غير صحيح -- -- -- History element in history entry -- سجل العنصر في سجل الإدخال -- -- -- No entry uuid found -- لم يُعثر على مُعرف المُدخل الفريد -- -- -- History element with different uuid -- أرِخ العنصر مسخدمًا معرف فريد مختلف -- -- -- Duplicate custom attribute found -- عُثر على خاصية مخصصة مكررة -- -- -- Entry string key or value missing -- مفتاح سلسلة الإدخال أو القيمة مفقودة -- -- -- Entry binary key or value missing -- مُدخل المفتاح الثنائي او القيمة مفقودة -- -- -- Auto-type association window or sequence missing -- نافذة الطباعة التلقائية المرتبطة او تسلسل الإرتباط مفقود -- -- -- Invalid bool value -- مُدخل القيمة المنطقية غير صحيح -- -- -- Invalid date time value -- قيمة وقت التاريخ غير صحيحة -- -- -- Invalid color value -- قيمة اللون غير صحيحة -- -- -- Invalid color rgb part -- جزء من لون rgb غير صحيح -- -- -- Invalid number value -- قيمة الرقم غير صحيحة -- -- -- Invalid uuid value -- قيمة المُعرف الفريد غير صحيحة -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- تعذر فك ضغط القيمة الثنائية -- -- -- XML error: --%1 --Line %2, column %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- ملف كبير جدًا ليكون مفتاح سري -- -- -- Failed to open private key -- تعذر فتح المفتاح السري -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- فتح قاعدة البيانات غير ممكن. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- يتعذر قراءة ملف المفتاح. -- -- -- Not a KeePass database. -- ليس قاعدة بيانات KeePass -- -- -- Unsupported encryption algorithm. -- خورزامية التشفير غير مدعومة. -- -- -- Unsupported KeePass database version. -- إصدار قاعدة بيانات KeePass غير مدعوم. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- غير قادر على قراءة قيمة التشفير الرابع -- -- -- Invalid number of groups -- عدد غير صالح من المجموعات -- -- -- Invalid number of entries -- عدد الإدخالات غير صالح -- -- -- Invalid content hash size -- حجم محتوى الهاش غير صحيح -- -- -- Invalid transform seed size -- حجم seed للتحول غير صحيح -- -- -- Invalid number of transform rounds -- عدد جولات التحول غير صحيح -- -- -- Unable to construct group tree -- تعذر إنشاء شجرة المجموعة -- -- -- Root -- الجذر -- -- -- Key transformation failed -- تعذر تحويل المفتاح -- -- -- Invalid group field type number -- حقل رقم نوع المجموعة غير صحيح -- -- -- Invalid group field size -- حقل حجم المجموعة غير صحيح -- -- -- Read group field data doesn't match size -- قراءة بيانات الحقل للمجموعة لا تتطابق مع الحجم -- -- -- Incorrect group id field size -- حجم حقل معرف المجموعة غير صحيح -- -- -- Incorrect group creation time field size -- حجم حقل وقت إنشاء المجموعة غير صحيح -- -- -- Incorrect group modification time field size -- حجم حقل وقت تعديل المجموعة غير صحيح -- -- -- Incorrect group access time field size -- حجم حقل وقت الوصول للمجموعة غير صحيح -- -- -- Incorrect group expiry time field size -- حجم حقل وقت انتهاء صلاحية المجموعة غير صحيح -- -- -- Incorrect group icon field size -- حجم حقل رمز المجموعة غير صحيح -- -- -- Incorrect group level field size -- حجم حقل مستوى المجموعة غير صحيح -- -- -- Invalid group field type -- نوع حقل المجموعة غير صحيح -- -- -- Missing group id or level -- معرف المجموعة أو المستوى مفقود -- -- -- Missing entry field type number -- رقم نوع حقل إلمُدخل مفقود -- -- -- Invalid entry field size -- إدخال حقل الحجم غير صحيح -- -- -- Read entry field data doesn't match size -- قراءة بيانات الحقل الإدخال لا تتطابق مع الحجم -- -- -- Invalid entry uuid field size -- حجم حقل المُدخل uuid غير صحيح -- -- -- Invalid entry group id field size -- إدخال حجم حقل معرف مجموعة غير صحيح -- -- -- Invalid entry icon field size -- حجم حقل رمز الإدخال غير صحيح -- -- -- Invalid entry creation time field size -- حجم حقل وقت إنشاء الإدخال غير صحيح -- -- -- Invalid entry modification time field size -- حجم حقل وقت تعديل الإدخال غير صحيح -- -- -- Invalid entry expiry time field size -- حجم حقل وقت انتهاء صلاحية الإدخال غير صحيح -- -- -- Invalid entry field type -- نوع حقل الإدخال غير صحيح -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- -- -- -- Key Component Description -- -- -- -- Cancel -- ألغ -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- -- -- -- Change %1 -- Change a key component -- -- -- -- Remove %1 -- Remove a key component -- -- -- -- %1 set, click to change or remove -- Change or remove a key component -- -- -- -- -- KeyFileEditWidget -- -- Generate -- توليد -- -- -- Key File -- -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- ملفات المفتاح -- -- -- All files -- كل الملفات -- -- -- Create Key File... -- إنشاء ملف مفتاح... -- -- -- Error creating key file -- -- -- -- Unable to create key file: %1 -- -- -- -- Select a key file -- حدد ملف المفتاح -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- إستعراض... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &قاعدة البيانات -- -- -- &Help -- &مساعدة -- -- -- &Groups -- &المجموعات -- -- -- &Tools -- &الأدوات -- -- -- &Quit -- &إغلاق -- -- -- &About -- &حول -- -- -- Database settings -- إعدادات قاعدة البيانات -- -- -- Copy username to clipboard -- نسخ اسم المستخدم إلى الحافظة -- -- -- Copy password to clipboard -- نسخ كلمة المرور إلى الحافظة -- -- -- &Settings -- &الإعدادات -- -- -- &Title -- &العنوان -- -- -- Copy title to clipboard -- نسخ العنوان إلى الحافظة -- -- -- &URL -- &رابط -- -- -- Copy URL to clipboard -- نسخ الرابط إلى الحافظة -- -- -- &Notes -- &الملاحظات -- -- -- Copy notes to clipboard -- نسخ الملاحظات إلى الحافظة -- -- -- Copy &TOTP -- نسخ &TOTP -- -- -- E&mpty recycle bin -- إفراغ سلة المهملات -- -- -- Clear history -- مسح السجل -- -- -- Access error for config file %1 -- خطأ في الوصول لملف التكوين %1 -- -- -- Settings -- الإعدادات -- -- -- Toggle window -- تبديل النافذة -- -- -- Quit KeePassXC -- إغلاق KeePassXC -- -- -- Please touch the button on your YubiKey! -- يرجى لمس الزر المتواجد على YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- تحذير: أنت تستخدم بناء غير مستقر من KeePassXC! --هناك خطر كبير للعطب، حافظ على أخذ نسخة إحتياطية لقاعدة البيانات. --ليس المقصود من هذا الإصدار للإستخدام الأساسي. -- -- -- &Donate -- -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- -- -- -- Create a new database -- -- -- -- Merge from another KDBX database -- -- -- -- Add a new entry -- -- -- -- View or edit entry -- -- -- -- Add a new group -- -- -- -- Perform &Auto-Type -- -- -- -- Open &URL -- -- -- -- Import a KeePass 1 database -- -- -- -- Import a CSV file -- -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- -- -- -- Would you like KeePassXC to check for updates on startup? -- -- -- -- You can always check for updates manually from the application menu. -- -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- إظهار TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- اخفي أسماء المستخدمين -- -- -- Hide Passwords -- اخفي كلمات السر -- -- -- -- ManageDatabase -- -- Database settings -- إعدادات قاعدة البيانات -- -- -- Edit database settings -- -- -- -- Unlock database -- إلغاء قفل قاعدة البيانات -- -- -- Unlock database to show more information -- -- -- -- Lock database -- قفل قاعدة بيانات -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- -- -- -- Root -- Root group -- الجذر -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- Advanced Settings -- -- -- -- Simple Settings -- -- -- -- Encryption Settings -- -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- ملف المفتاح غير صحيح، متوقع أنه مفتاح OpenSSH -- -- -- PEM boundary mismatch -- عدم تطابق حدود PEM -- -- -- Base64 decoding failed -- تعذر فك تشفير Base64 -- -- -- Key file way too small. -- طريق ملف المفتاح صغير جدًا. -- -- -- Key file magic header id invalid -- معرف رأس magic لملف المفتاح غير صحيح -- -- -- Found zero keys -- لم يُعثر على أية مفاتيح -- -- -- Failed to read public key. -- تعذر قراءة المفتاح العام. -- -- -- Corrupted key file, reading private key failed -- ملف المفتاح معطوب، فشل قراءة المفتاح الخاص. -- -- -- No private key payload to decrypt -- لا يوجد حمولة المفتاح الخاص لفك التشفير -- -- -- Trying to run KDF without cipher -- محاولة تشغيل KDF بدون تشفير -- -- -- Passphrase is required to decrypt this key -- عبارة المرور مطلوبة لفك تشفير المفتاح -- -- -- Key derivation failed, key file corrupted? -- فشل إشتقاق المفتاح، ربما ملف المفتاح معطوب؟ -- -- -- Decryption failed, wrong passphrase? -- فشل فك التشفير، ربما عبارة المرور خاطئة؟ -- -- -- Unexpected EOF while reading public key -- نهاية الملف غير معروفة عند قراءة المفتاح العام -- -- -- Unexpected EOF while reading private key -- نهاية الملف غير معروفة عند قراءة المفتاح الخاص -- -- -- Can't write public key as it is empty -- لا يمكن كتابة المفتاح العام لأنه فارغ -- -- -- Unexpected EOF when writing public key -- نهاية الملف غير معروفة عند كتابة المفتاح العام -- -- -- Can't write private key as it is empty -- لا يمكن كتابة المفتاح الخاص لأنه فارغ -- -- -- Unexpected EOF when writing private key -- نهاية الملف غير معروفة عند قراءة المفتاح الخاص -- -- -- Unsupported key type: %1 -- نوع مفتاح غير مدعوم: %1 -- -- -- Unknown cipher: %1 -- تشفير غير معروف: %1 -- -- -- Cipher IV is too short for MD5 kdf -- التشفير الرابع قصير جدًا ل MD5 kdf -- -- -- Unknown KDF: %1 -- KDF غير معروف: %1 -- -- -- Unknown key type: %1 -- نوع مفتاح غير معروف: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- أدخل كلمة السر: -- -- -- Confirm password: -- -- -- -- Password -- كلمه السر -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- -- -- -- Password field -- -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- القوة -- -- -- entropy -- entropy -- -- -- Password -- كلمه السر -- -- -- Character Types -- أنواع الرموز -- -- -- Numbers -- أرقام -- -- -- Extended ASCII -- تمديد ASCII -- -- -- Exclude look-alike characters -- استبعاد الرموز التي تبدو على حد سواء -- -- -- Pick characters from every group -- إختيار أحرف من كل مجموعة -- -- -- &Length: -- &الطول: -- -- -- Passphrase -- عبارة سر -- -- -- Wordlist: -- قائمة الكلمات: -- -- -- Word Separator: -- فاصل الكلمة: -- -- -- Close -- إغلاق -- -- -- Entropy: %1 bit -- Entropy: %1 bit -- -- -- Password Quality: %1 -- جودة كلمة المرور: %1 -- -- -- Poor -- Password quality -- ضعيف جدا -- -- -- Weak -- Password quality -- ضعيفة -- -- -- Good -- Password quality -- جيدة -- -- -- Excellent -- Password quality -- ممتازة -- -- -- Switch to advanced mode -- -- -- -- Advanced -- متقدم -- -- -- Braces -- -- -- -- Punctuation -- -- -- -- Quotes -- -- -- -- Logograms -- -- -- -- Character set to exclude from generated password -- -- -- -- Do not include: -- -- -- -- Add non-hex letters to "do not include" list -- -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- عدد الكلمات: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- محارف خاصة -- -- -- -- QApplication -- -- KeeShare -- -- -- -- Statistics -- -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- -- -- -- Delete -- حذف -- -- -- Move -- -- -- -- Empty -- -- -- -- Remove -- إزالة -- -- -- Skip -- -- -- -- Disable -- تعطيل -- -- -- Merge -- -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- لم يتم فتح قاعدة البيانات -- -- -- Database hash not available -- لا يتوفر هاش قاعدة البيانات -- -- -- Client public key not received -- لم يتم تلقي المفتاح العام للعميل -- -- -- Cannot decrypt message -- لا يمكن فك تشفير الرسالة -- -- -- Action cancelled or denied -- أُلغي الإجراء أو رُفض -- -- -- KeePassXC association failed, try again -- تعذر إرتباط KeePassXC، حاول مرة أخرى -- -- -- Encryption key is not recognized -- لم يتم التعرف على مفتاح التشفير -- -- -- Incorrect action -- إجراء غير صحيح -- -- -- Empty message received -- أُستلمت رسالة فارغة -- -- -- No URL provided -- لم يتم تقديم رابط -- -- -- No logins found -- لم يتم العثور على عمليات تسجيل دخول -- -- -- Unknown error -- خطأ مجهول -- -- -- Add a new entry to a database. -- إضافة مُدخل إلى قاعدة البيانات. -- -- -- Path of the database. -- مسار قاعدة البيانات. -- -- -- Key file of the database. -- ملف المفتاح لقاعدة البيانات. -- -- -- path -- المسار -- -- -- Username for the entry. -- إسم المستخدم للمُدخل. -- -- -- username -- إسم المستخدم -- -- -- URL for the entry. -- الرابط للمُدخل. -- -- -- URL -- رابط -- -- -- Prompt for the entry's password. -- المطالبة بكلمة مرور المُدخل. -- -- -- Generate a password for the entry. -- إنشاء كلمة المرور للمُدخل. -- -- -- length -- الطول -- -- -- Path of the entry to add. -- مسار المُدخل للإضافة. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- مسار المُدخل للقص. -- -- -- Timeout in seconds before clearing the clipboard. -- مهلة بالثوان قبل مسح الحافظة. -- -- -- Edit an entry. -- تعديل مُدخل. -- -- -- Title for the entry. -- عنوان المُدخل -- -- -- title -- العنوان -- -- -- Path of the entry to edit. -- مسار المُدخل للتعديل. -- -- -- Estimate the entropy of a password. -- تقدير الإنتروبيا لكلمة مرور. -- -- -- Password for which to estimate the entropy. -- كلمة السر التي لتقدير الانتروبيا. -- -- -- Perform advanced analysis on the password. -- إجراء تحليل متقدم على كلمة المرور. -- -- -- -- --Available commands: -- -- -- --الأوامر المتاحة: -- -- -- -- Name of the command to execute. -- اسم الأمر للتنفيذ. -- -- -- List database entries. -- إدراج مُدخلات قاعدة البيانات. -- -- -- Path of the group to list. Default is / -- مسار المجموعة للجدولة. الإفتراضي هو / -- -- -- Find entries quickly. -- البحث عن المُدخلات بسرعة. -- -- -- Search term. -- مصطلح البحث. -- -- -- Merge two databases. -- دمج قاعدتي بيانات. -- -- -- Path of the database to merge from. -- مسار قاعدة البيانات المُراد الدمج منها. -- -- -- Use the same credentials for both database files. -- استخدام نفس بيانات الاعتماد لكل من ملفات قاعدة البيانات. -- -- -- Key file of the database to merge from. -- ملف المفتاح لقاعدة البيانات للدمج منه. -- -- -- Show an entry's information. -- إظهار معلومات الإدخال. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- أسماء الخصائص المراد عرضها. يمكن تحديد هذا الخيار أكثر من مرة، مع عرض كل خاصية لكل سطر بالترتيب المحدد. إذا لم يتم تحديد خاصية، يتم إعطاء ملخص للخصائص الإفتراضية. -- -- -- attribute -- خاصية -- -- -- Name of the entry to show. -- اسم الإدخال للعرض. -- -- -- NULL device -- جهاز غير معروف -- -- -- error reading from device -- خطأ القراءة من الجهاز -- -- -- malformed string -- سلسلة غير صحيحة -- -- -- missing closing quote -- إغلاق الإقتباس مفقود -- -- -- Group -- المجموعة -- -- -- Title -- العنوان -- -- -- Username -- اسم المستخدم -- -- -- Password -- كلمه السر -- -- -- Notes -- ملاحظات -- -- -- Last Modified -- آخر تعديل -- -- -- Created -- أُنشئت -- -- -- Browser Integration -- تكامل المتصفح -- -- -- SSH Agent -- وكيل SSH -- -- -- Generate a new random diceware passphrase. -- إنشاء عبارة مرور diceware عشوائية جديدة. -- -- -- Word count for the diceware passphrase. -- عدد الكلمات لعبارة مرور diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- قائمة الكلمات لمولد diceware. --[الإفتراضية: EFF English] -- -- -- Generate a new random password. -- إنشاء كلمة مرور عشوائية جديدة. -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- العدد -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- -- -- -- Use lowercase characters -- -- -- -- Use uppercase characters -- -- -- -- Use special characters -- -- -- -- Use extended ASCII -- -- -- -- Exclude character set -- -- -- -- chars -- -- -- -- Exclude similar looking characters -- -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- -- -- -- %1: (row, col) %2,%3 -- -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- -- -- -- Invalid Key -- TOTP -- -- -- -- Message encryption failed. -- -- -- -- No groups found -- -- -- -- Create a new database. -- -- -- -- File %1 already exists. -- -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- مسار المُدخل التي ستحذف. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- ملف القفل الحالي المثيل غير صحيح. سيُطلق مثيل جديد. -- -- -- The lock file could not be created. Single-instance mode disabled. -- تعذر إنشاء ملف القفل. وضع المثيل الأحادي مُعطل. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - مدير كلمات المرور لعدة أنظمة -- -- -- filenames of the password databases to open (*.kdbx) -- أسماء ملفات قواعد بيانات كلمات المرور للفتح (*.kdbx) -- -- -- path to a custom config file -- مسار ملف الاعدادات المخصص -- -- -- key file of the database -- ملف مفتاح قاعدة البيانات -- -- -- read password of the database from stdin -- قراءة كلمة سر قاعدة البيانات من الدخل القياسي "stdin" -- -- -- Another instance of KeePassXC is already running. -- نسخة أخرى من KeePassXC قيد التشغيل. -- -- -- Fatal error while testing the cryptographic functions. -- خطأ فادح أثناء اختبار وظائف التشفير. -- -- -- KeePassXC - Error -- KeePassXC - خطأ -- -- -- Database password: -- -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- -- -- -- Build Type: %1 -- -- -- -- Revision: %1 -- مراجعة: %1 -- -- -- Distribution: %1 -- مراجعة: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- نظام التشغيل: %1 --معمارية المعالج: %2 --النواة: %3 %4 -- -- -- Auto-Type -- نمط تلقائي -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- -- -- -- TouchID -- -- -- -- None -- -- -- -- Enabled extensions: -- الإضافات المُفعلة: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- -- -- -- Icon -- أيقونة -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- خطأ zlib داخلي عند الضغط: -- -- -- Error writing to underlying device: -- حدث خطأ أثناء الكتابة إلى الجهاز الأساسي: -- -- -- Error opening underlying device: -- حدث خطأ أثناء فتح الجهاز الأساسي: -- -- -- Error reading data from underlying device: -- حدث خطأ أثناء قراءة البيانات من الجهاز الأساسي: -- -- -- Internal zlib error when decompressing: -- خطأ zlib داخلي عند فك الضغط: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- تنسيق gzip غير مدعوم في هذا الإصدار من zlib. -- -- -- Internal zlib error: -- خطأ zlib داخلي: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- ضعيف جدا -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- ضعيفة -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- العنوان -- -- -- Path -- -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- العنوان -- -- -- Path -- -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- الاسم -- -- -- Value -- القيمة -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- -- -- -- Description -- -- -- -- Location -- -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- -- -- -- exclude term from results -- -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- -- -- -- -- SearchWidget -- -- Search -- بحث -- -- -- Limit search to selected group -- حدد البحث في المجموعة المحددة -- -- -- Search Help -- -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- -- -- -- Case sensitive -- -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- العام -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- -- -- -- Allow export -- -- -- -- Allow import -- -- -- -- Own certificate -- -- -- -- Fingerprint: -- -- -- -- Certificate: -- -- -- -- Signer -- -- -- -- Key: -- المفتاح: -- -- -- Generate -- توليد -- -- -- Import -- إستيراد -- -- -- Export -- -- -- -- Imported certificates -- -- -- -- Trust -- -- -- -- Ask -- -- -- -- Untrust -- -- -- -- Remove -- إزالة -- -- -- Path -- -- -- -- Status -- -- -- -- Fingerprint -- البصمة -- -- -- Certificate -- -- -- -- Trusted -- -- -- -- Untrusted -- -- -- -- Unknown -- -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- -- -- -- All files -- كل الملفات -- -- -- Select path -- -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- المفتاح -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- -- -- -- Never -- أبدًا -- -- -- Always -- -- -- -- Just this time -- -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- -- -- -- Import from %1 successful (%2) -- -- -- -- Imported from %1 -- -- -- -- Export to %1 failed (%2) -- -- -- -- Export to %1 successful (%2) -- -- -- -- Export to %1 -- -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- كلمة مرور موقوته -- -- -- 000000 -- 000000 -- -- -- Copy -- نسخ -- -- -- Expires in <b>%n</b> second(s) -- -- -- -- -- TotpExportSettingsDialog -- -- Copy -- نسخ -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- -- -- -- There was an error creating the QR code. -- -- -- -- Closing in %1 seconds. -- -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- إعداد TOTP -- -- -- Default RFC 6238 token settings -- الإعدادات الإفتراضية لرمز RFC 6238 -- -- -- Steam token settings -- اعدادات رمز Steam -- -- -- Use custom settings -- إستخدم أعدادات مخصصة -- -- -- Custom Settings -- -- -- -- Time step: -- الخطوة الزمنية: -- -- -- sec -- Seconds -- ثانية -- -- -- Code size: -- حجم الكود: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- -- -- -- Checking for updates... -- -- -- -- Close -- إغلاق -- -- -- Update Error! -- -- -- -- An error occurred in retrieving update information. -- -- -- -- Please try again later. -- -- -- -- Software Update -- -- -- -- A new version of KeePassXC is available! -- -- -- -- KeePassXC %1 is now available — you have %2. -- -- -- -- Download it at keepassxc.org -- -- -- -- You're up-to-date! -- -- -- -- KeePassXC %1 is currently the newest version available -- -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- إبدأ بتخزين كلمات مرورك بأمان في قاعدة بيانات KeePassXC -- -- -- Create new database -- أنشىء قاعدة بيانات جديدة -- -- -- Open existing database -- فتح قاعدة بيانات حالية -- -- -- Import from KeePass 1 -- استيراد من KeePass 1 -- -- -- Import from CSV -- استيراد من CSV -- -- -- Recent databases -- المفتوحة مؤخرًا -- -- -- Welcome to KeePassXC %1 -- مرحبا بك في KeePassXC %1 -- -- -- Import from 1Password -- -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- اضغط -- -- -- Passive -- سلبي -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- تحديث -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_bg.ts keepassxc-2.6.4-patched/share/translations/keepassx_bg.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_bg.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_bg.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7892 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Относно KeePassXC -- -- -- About -- Относно -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Съобщаване за грешки: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC се разпространява съгласно условията на GNU General Public License (GPL) версия 2 или (по ваш избор) версия 3. -- -- -- Contributors -- Контрибутури -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Вижте контрибутурите в GitHub</a> -- -- -- Debug Info -- Информация за отстраняване на грешки -- -- -- Include the following information whenever you report a bug: -- Включвайте следната информация, когато съобщавате за грешка: -- -- -- Copy to clipboard -- Копиране в клипборда -- -- -- Project Maintainers: -- Екип: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Специални благодарности от екипа на KeePassXC отидете на debfx за създаването на оригиналния KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Използвайте OpenSSH за Windows вместо Pageant -- -- -- Enable SSH Agent integration -- Включване на интеграция на SSH Agent -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK стойност -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK презаписване -- -- -- (empty) -- (празно) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Няма SSH Agent сокет. Уверете, че съществува променлива на средата SSH_AUTH_SOCK или я презапишете. -- -- -- SSH Agent connection is working! -- SSH Agent връзката работи! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Настройки на приложението -- -- -- General -- Основни -- -- -- Security -- Сигурност -- -- -- Access error for config file %1 -- Грешка при достъп на конфигурационния файл %1 -- -- -- Icon only -- Само икона -- -- -- Text only -- Само текст -- -- -- Text beside icon -- Текст до иконата -- -- -- Text under icon -- Текст под икона -- -- -- Follow style -- Следване на стила -- -- -- Reset Settings? -- Да се нулират настройките? -- -- -- Are you sure you want to reset all general and security settings to default? -- Наистина ли искате да нулирате стойностите по подразбиране на всички общи настройки и настройки за защита? -- -- -- Monochrome (light) -- Монохромен(светлъл) -- -- -- Monochrome (dark) -- Монохромен(тъмен) -- -- -- Colorful -- Цветни -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Трябва да рестартирате приложението, за да настроите нов език. Желаете ли да рестартирате сега? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Основни настройки -- -- -- Startup -- Стартиране -- -- -- Start only a single instance of KeePassXC -- Започнете само една инстанция на KeePassXC -- -- -- Minimize window at application startup -- Минимизиране на прозореца при стартиране на приложението -- -- -- File Management -- Управление на файлове -- -- -- Backup database file before saving -- Архивиране на файла с базата данни преди записване -- -- -- Automatically save after every change -- Автоматично записване след всяка промяна -- -- -- Automatically reload the database when modified externally -- Автоматично презареждане на базата данни при външно модифициране -- -- -- Entry Management -- Управление на записи -- -- -- Use group icon on entry creation -- Използване на груповата икона при създаване на запис -- -- -- Minimize instead of app exit -- Минимизиране вместо излизане от приложение -- -- -- Show a system tray icon -- Показване на икона в системния панел -- -- -- Hide window to system tray when minimized -- Скриване на прозореца в системния панел при минимизиране -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- Използвайте заглавието на записа, за да съответствате на прозорците за глобалния Auto-Type -- -- -- Use entry URL to match windows for global Auto-Type -- Използвайте URL на записа, за да съответствате на прозорците за глобалния Auto-Type -- -- -- Always ask before performing Auto-Type -- Винаги питай преди да извършиш Auto-Type -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Преместваща се лента с инструменти -- -- -- Remember previously used databases -- Запаметяване на предишни използвани бази данни -- -- -- Load previously open databases on startup -- Зареждане на последно отворената бази данни при стартиране -- -- -- Remember database key files and security dongles -- Запомни файл-ключовете и защитните устройства -- -- -- Check for updates at application startup once per week -- Проверка за актуализации при стартиране на приложението веднъж седмично -- -- -- Include beta releases when checking for updates -- Включване на бета версии при проверка за актуализации -- -- -- Language: -- Език: -- -- -- (restart program to activate) -- (рестартиране програма за активиране) -- -- -- Minimize window after unlocking database -- Намаляване на прозореца след отключване на базата данни -- -- -- Minimize when opening a URL -- Минимизиране при отваряне на URL -- -- -- Hide window when copying to clipboard -- Скриване на прозореца при копиране в клипборда -- -- -- Minimize -- Минимизиране -- -- -- Drop to background -- Пускане на заден фон -- -- -- Favicon download timeout: -- Таймаут за изтегляне на фавикон: -- -- -- Website icon download timeout in seconds -- Таймаут на изтеглянето на иконата на уеб сайта в секунди -- -- -- sec -- Seconds -- сек -- -- -- Toolbar button style -- Стил на бутоните от лентата с инструменти -- -- -- Language selection -- Избор на език -- -- -- Global auto-type shortcut -- Глобален пряк път за auto-type -- -- -- Auto-type character typing delay milliseconds -- Забавяне на auto-type въвеждане на знаци милисекунди -- -- -- Auto-type start delay milliseconds -- Забавяне на auto-type старта милисекунди -- -- -- Automatically launch KeePassXC at system startup -- Автоматично стартиране на KeePassXC при стартиране на системата -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Безопасно записване на файловете с бази данни (деактивирайте, ако имате проблеми с Dropbox и т.н.) -- -- -- User Interface -- Потребителски интерфейс -- -- -- Toolbar button style: -- Стил на бутоните от лентата с инструменти: -- -- -- Use monospaced font for notes -- Използване на еднопространствен шрифт за бележките -- -- -- Tray icon type: -- Тип иконата в системната лента: -- -- -- Reset settings to default… -- Нулиране на настройките по подразбиране... -- -- -- Auto-Type typing delay: -- Забавяне на auto-type въвеждането: -- -- -- Global Auto-Type shortcut: -- Глобален Auto-Type пряк път: -- -- -- Auto-Type start delay: -- Забавяне на Auto-Type включването: -- -- -- Automatically save when locking database -- Запази автоматично при заключване на базата данни -- -- -- Automatically save non-data changes when locking database -- При заключване на базата данни, запази автоматично промените, които не засягат данните. -- -- -- Tray icon type -- Тип иконата в системната лента -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Таймаути -- -- -- Clear clipboard after -- Изчистване на клипборда след -- -- -- sec -- Seconds -- сек -- -- -- Lock databases after inactivity of -- Заключване на бази данни след бездействие от -- -- -- min -- мин -- -- -- Forget TouchID after inactivity of -- Забравяне на TouchID след бездействие -- -- -- Convenience -- Удобство -- -- -- Lock databases when session is locked or lid is closed -- Заключване на базите данни при заключена сесия или затваряне на капака -- -- -- Forget TouchID when session is locked or lid is closed -- Забравете TouchID, когато сесията е заключена или капакът е затворен -- -- -- Lock databases after minimizing the window -- Заключи базите данни след минимизиране на прозореца -- -- -- Re-lock previously locked database after performing Auto-Type -- Повторно заключване на предварително заключена база данни след извършване на Auto-Type -- -- -- Hide passwords in the entry preview panel -- Скриване на паролите в панела за преглед на записи -- -- -- Hide entry notes by default -- Скриване на бележките по подразбиране -- -- -- Privacy -- Поверителност -- -- -- Use DuckDuckGo service to download website icons -- Използвайте DuckDuckGo за изтегляне на иконите на уебсайта -- -- -- Clipboard clear seconds -- Изчистване на клипборда секунди -- -- -- Touch ID inactivity reset -- Нулиране при неактивността на Touch ID -- -- -- Database lock timeout seconds -- Секунди за заключване на базата данни -- -- -- min -- Minutes -- мин -- -- -- Clear search query after -- Изчистване на заявката за търсене след -- -- -- Require password repeat when it is visible -- Изискване на парола, когато е видима -- -- -- Hide passwords when editing them -- Скриване на пароли при редактирането им -- -- -- Use placeholder for empty password fields -- Използване на контейнер за празни полета за парола -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Не може да се намери запис, който отговаря на заглавието на прозореца: -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Синтаксисът на вашия Auto-type е неправилен! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Тази Auto-Type команда съдържа много голямо забавяне. Наистина ли искате да продължите? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Тази Auto-Type команда съдържа много бавни натискания на клавиши. Наистина ли искате да продължите? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Тази Auto-Type команда съдържа аргументи, които се повтарят много често. Наистина ли искате да продължите? -- -- -- Permission Required -- Нужно е разрешение -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC изисква разрешение за достъпност, за да се извърши базово ниво на Auto-Type. Ако вече сте дали разрешение, може да се наложи да рестартирате KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Прозорец -- -- -- Sequence -- Последователност -- -- -- Default sequence -- Последователност по подразбиране -- -- -- -- AutoTypeMatchModel -- -- Group -- Група -- -- -- Title -- Заглавие -- -- -- Username -- Портебител -- -- -- Sequence -- Последователност -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Копиране на &username -- -- -- Copy &password -- Копиране на &password -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Изисква се разрешение -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC изисква разрешението Accessibility and Screen Recorder, за да се извърши глобален Auto-Type. За да намерите записи, е необходимо да използвате заглавието на прозореца. Ако вече сте дали разрешение, може да се наложи да рестартирате KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- Изберете запис за Auto-Type: -- -- -- Search... -- Търсене... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - заявка за достъп до браузъра -- -- -- %1 is requesting access to the following entries: -- %1 иска достъп до следните записи: -- -- -- Remember access to checked entries -- Запомни достъпа до избраните записи -- -- -- Remember -- Запомни -- -- -- Allow access to entries -- Разреши достъп до записите -- -- -- Allow Selected -- Разреши избраните -- -- -- Deny All -- Забрани всички -- -- -- Disable for this site -- Изключи за този сайт -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser запази запис -- -- -- Ok -- OK -- -- -- Cancel -- Отказ -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Имате отворени няколко бази данни. --Изберете правилната база данни за записване на идентификационни данни. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Искане за нова асоциация на ключове -- -- -- Save and allow access -- Записване и разрешаване на достъп -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Презаписване на съществуващ ключ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Вече съществува споделен шифроващ ключ с име "%1". --Искате ли да го презапишете? -- -- -- KeePassXC: Update Entry -- KeePassXC: Актуализация на записа -- -- -- Do you want to update the information in %1 - %2? -- Желаете ли да актуализирате информацията в %1 -%2? -- -- -- Abort -- Отказ -- -- -- Converting attributes to custom data… -- Конвертиране на атрибути към потребителски данни... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Конвертиране на KeePassHTTP атрибути -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Успешно преобразувани атрибути от %1 запис(и). --Преместени са %2 ключа в персонализираните данни. -- -- -- Successfully moved %n keys to custom data. -- Успешно преместени %n ключове в потребителски данни.Успешно преместени %n ключове в персонализираните данни. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Няма записи с намерени KeePassHTTP атрибути! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Активната база данни не съдържа запис с KeePassHTTP атрибути. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Открити са остарели интеграционни настройки на браузъра -- -- -- KeePassXC: Create a new group -- KeePassXC: Създаване на нова група -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Заявка за създаване на нова група "%1" е получена. --Желаете ли да създадете тази група? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Вашите настройки за KeePassXC-Browser трябва да бъдат преместени в настройките на базата данни. --Това е необходимо, за да се поддържа текущите връзки на браузъра. --Искате ли да мигрирате съществуващите настройки сега? -- -- -- Don't show this warning again -- Не показвай това предупреждение отново -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Получили сте заявка за асоцииране за следната база данни: --%1 -- --Дайте на връзката уникално име или ID, например: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Диалог -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Това е необходимо за достъп до вашите бази данни с KeePassXC-Browser -- -- -- Enable browser integration -- Разрешаване на интеграцията на браузъра -- -- -- General -- Основни -- -- -- Browsers installed as snaps are currently not supported. -- Браузъри инсталирани като snap пакети не са поддържани -- -- -- Enable integration for these browsers: -- Включване на интегрирането на тези браузъри: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Показвай известие при поискване на идентификационни данни -- -- -- Request to unlock the database if it is locked -- Искане за отключване на базата данни, ако е заключена -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Връщат се само записи със същата схема (http://, https://, ...). -- -- -- Match URL scheme (e.g., https://...) -- Съвпадение на схемата за URL (напр. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Връща само най-добрите съвпадения за конкретен URL адрес вместо всички записи за целия домейн. -- -- -- Return only best-matching credentials -- Връща само идентификационните данни с най-добро съвпадение -- -- -- Returns expired credentials. String [expired] is added to the title. -- Връща невалидни идентификационни данни. Низ [изтекъл] се добавя към заглавието. -- -- -- Allow returning expired credentials -- Позволяване на връщане на изтекли идентификационни данни -- -- -- All databases connected to the extension will return matching credentials. -- Всички бази данни, свързани с разширението, ще върнат съвпадащи идентификационни данни. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Търсене във всички отворени бази данни за съвпадащи идентификационни данни -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Сортиране на съвпадащи идентификационни данни по заглавие -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Сортиране на съвпадащи идентификационни данни по потребителско име -- -- -- Advanced -- Допълнителни -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Никога не питай преди достъпване на идентификационни данни -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Никога не питай преди актуализиране на идентификационни данни -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Не искай разрешение за HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Автоматично създаване или актуализиране на низови полета не се поддържа. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Не показвайте изскачащ прозорец, който предполага миграция на остарели настройки на KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Не питай за миграция на KeePassHTTP настройки. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Използвайте на персоналзирана локация на проксито, ако сте инсталирали проксито ръчно. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Използване на друго прокси местоположение: -- -- -- Custom proxy location field -- Поле за персонализирано прокси местоположение -- -- -- Browser for custom proxy file -- Избор на файл с персонализиран прокси -- -- -- Browse... -- Button for opening file dialog -- Преглед... -- -- -- Use a custom browser configuration location: -- Използване на персонализирано местоположение за конфигуриране на браузъра: -- -- -- Browser type: -- Тип на браузъра: -- -- -- Toolbar button style -- Стил на бутоните от лентата с инструменти -- -- -- Config Location: -- Местоположение на конфигурацията: -- -- -- Custom browser location field -- Поле за персонализирано местоположение на браузъра -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Избор на персонализиран път към браузъра -- -- -- Custom extension ID: -- Персонализирано ID номер на разширение: -- -- -- Custom extension ID -- Персонализирано ID номер на разширение: -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Поради изолирането при snap пакетите, трябва да изпълните скрипт, за да разрешите интеграцията на браузъра.<br />Можете да получите този скрипт от %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser е необходим, за да работи интеграцията с браузъра.<br />Изтеглете го тук за %1 и %2 и %3. %4 -- -- -- Please see special instructions for browser extension use below -- Моля, вижте специалните инструкции за използване на разширението на браузъра по-долу -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Грешка:</b> Не може да бъде намерено потребителското местоположението на прокси сървъра!<br/>Интеграцията с браузъра НЯМА ДА РАБОТИ без прокси приложението. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Предупреждение:</b> Следните опции могат да бъдат опасни! -- -- -- Executable Files -- Изпълними файлове -- -- -- All Files -- Всички файлове -- -- -- Select custom proxy location -- Избор на потребитерско местоположение на прокси сървър -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Клонирай опциите -- -- -- Append ' - Clone' to title -- Добавяне на ' - Clone' към заглавието -- -- -- Replace username and password with references -- Замяна на потребителско име и парола с референции -- -- -- Copy history -- Копиране на хронологията -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Импортиране на полета в CSV -- -- -- filename -- име -- -- -- size, rows, columns -- размер, редове, колони -- -- -- Encoding -- Кодиране -- -- -- Codec -- Кодек -- -- -- Text is qualified by -- -- -- -- Fields are separated by -- Полетата са разделени с -- -- -- Comments start with -- Коментарите започват с -- -- -- Consider '\' an escape character -- Приеми за '\' символ за край -- -- -- Preview -- Преглед -- -- -- Imported from CSV file -- Импортиран от CSV файл -- -- -- Original data: -- Оригинални данни: -- -- -- Error -- Грешка -- -- -- Error(s) detected in CSV file! -- Грешки, открити в CSV файл! -- -- -- [%n more message(s) skipped] -- [%n повече съобщения пропуснати][още %n съобщения са пропуснати] -- -- -- CSV import: writer has errors: --%1 -- CSV импортиране: при писане изникна грешка грешки: --%1 -- -- -- Text qualification -- -- -- -- Field separation -- Разделител на полета -- -- -- Number of header lines to discard -- Брой на редовете с хедъри за отхвърляне -- -- -- CSV import preview -- Визуализация на импортирането от CSV -- -- -- Column Association -- Асоциация на колоната -- -- -- Last Modified -- Последно променена -- -- -- Password -- Парола -- -- -- Created -- Създаден -- -- -- Notes -- Бележки -- -- -- Title -- Заглавие -- -- -- Group -- Група -- -- -- URL -- Url -- -- -- Username -- Портебител -- -- -- Header lines skipped -- Прескочени хедър редове -- -- -- First line has field names -- Първият ред съдържа имената на полета -- -- -- Not Present -- Не е налично -- -- -- Column %1 -- Колона %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Икона -- -- -- -- CsvParserModel -- -- %n column(s) -- %n колона(и)%n колона(и) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n байта(ите)%n байт(а) -- -- -- %n row(s) -- %n ред(а)%n ред(а) -- -- -- -- Database -- -- File %1 does not exist. -- Файлът %1 не съществува. -- -- -- Unable to open file %1. -- Файлът %1 не може да бъде отворен. -- -- -- Error while reading the database: %1 -- Грешка при четене на базата данни: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Файлът не може да бъде записан докато е отворен в режим само за четене. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Ключът не е трансформиран. Това е бъг, моля докладвайте за това на разработчиците! -- -- -- %1 --Backup database located at %2 -- %1 --Резервана база данни се намира на %2 -- -- -- Could not save, database does not point to a valid file. -- Не може да се запише, базата данни не сочи към валиден файл. -- -- -- Could not save, database file is read-only. -- Не може да се запише, файлът с базата данни е само за четене. -- -- -- Database file has unmerged changes. -- Файлът с базата данни има неслети промени -- -- -- Recycle Bin -- Кошче -- -- -- Passwords -- Root group name -- Пароли -- -- -- Database save is already in progress. -- Записването на базата данни вече е в ход. -- -- -- Could not save, database has not been initialized! -- Не може да се запише, базата данни не е инициализирана! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Отключване на база данни - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Файл-ключ: -- -- -- Refresh -- Обновяване -- -- -- Don't show this warning again -- Не показвай това предупреждение отново -- -- -- All files -- Всички файлове -- -- -- Key files -- Файл-ключове -- -- -- Select key file -- Избор на файл-ключ -- -- -- Failed to open key file: %1 -- Грешка при отваряне на файл-ключ: %1 -- -- -- Unlock KeePassXC Database -- Отключване на KeePassXC базата данни -- -- -- Enter Password: -- Въведете парола: -- -- -- Password field -- Поле за парола -- -- -- Hardware key slot selection -- Избор на слот на хардуерен ключ -- -- -- Browse for key file -- Избор на файл-ключ -- -- -- Browse... -- Преглед... -- -- -- Refresh hardware tokens -- Обновяване на хардуерни токени -- -- -- Hardware Key: -- Хардуерен ключ: -- -- -- Hardware key help -- Помощ за хардуерен ключ -- -- -- TouchID for Quick Unlock -- TouchID за бързо отключване -- -- -- Unlock failed and no password given -- Грешка при отключване и не е върната парола -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Отключването на базата данни е неуспешно и не сте въвели парола. --Искате ли вместо това да опитате отново с "празна" парола? -- --За да предотвратите появата на тази грешка, трябва да отидете на "Настройки на базата данни / сигурност" и да нулирате паролата си. -- -- -- Retry with empty password -- Опитай отново с празна парола -- -- -- Enter Additional Credentials (if any): -- Въведете допълнителни идентификационни данни (ако има такива): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Можете да използвате хардуерен ключ за защита, като например <strong>YubiKey</strong> или <strong>OnlyKey</strong> със слотове, конфигурирани за HMAC-SHA1.</p> --<p>Щракнете за повече информация...</p> -- -- -- Key file help -- Помощ за файл-ключове -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Не може да се използва файлът с базата данни като файл-ключ -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Не можете да използвате файла с базата данни като файл-ключ. --Ако нямате файл-ключ, оставете полето празно. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>В допълнение към парола, можете да използвате таен файл за подобряване на защитата на вашата база данни. Този файл може да бъде генериран в настройките за защита на вашата база данни.</p><p>Това <strong>не</strong> е вашият *.kdbx файл с база данни!<br>Ако нямате файл-ключ, оставете това поле празно.</p><p>Щракнете за повече информация...</p> -- -- -- Key file to unlock the database -- Файл-ключ за отключване на базата данни -- -- -- Please touch the button on your YubiKey! -- Моля, докоснете бутона на yubiKey! -- -- -- Detecting hardware keys… -- Откриване на хардуерни ключове... -- -- -- No hardware keys detected -- Не са открити хардуерни ключове -- -- -- Select hardware key… -- Избор на хардуерен ключ... -- -- -- Old key file format -- Стар файлов формат на ключа -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Използвате стар ключ файлов формат, който KeePassXC може <br>да спре да поддържва в бъдеще.<br><br>Моля, създайте нов ключ, като:<br><strong>База данни / Защита на базата данни / Промяна на ключ.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Пароли -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Разширени настройки -- -- -- General -- Основни -- -- -- Security -- Сигурност -- -- -- Encryption Settings -- Настройки на шифроване -- -- -- Browser Integration -- Интеграция на браузъра -- -- -- Database Credentials -- Идентификационни данни на база данни -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser настройки -- -- -- Stored keys -- Съхранени ключове -- -- -- Remove -- Премахване -- -- -- Delete the selected key? -- Изтриване на избрания ключ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Наистина ли искате да изтриете избрания ключ? --Това може да попречи на свързването с приставката на браузъра. -- -- -- Key -- Ключ -- -- -- Value -- Стойност -- -- -- Enable Browser Integration to access these settings. -- Разрешаване на интеграция с браузъри за достъп до тези настройки. -- -- -- Disconnect all browsers -- Разедини всички браузъри -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Наистина ли искате да разедините всички браузъри? --Това може да попречи на свързването с приставката в браузъра. -- -- -- KeePassXC: No keys found -- KeePassXC: Не са намерени ключове -- -- -- No shared encryption keys found in KeePassXC settings. -- Не са намерени споделени ключове за криптиране в настройките на KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Премахнати ключове от базата данни -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Успешно отстранен %n шифроващ ключ от настройките на KeePassXC.Успешно отстранен %n ключ(а) за шифроване от настройките на KeePassXC. -- -- -- Forget all site-specific settings on entries -- Забравете всички настройки за конкретни сайтове на записите -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Наистина ли искате да се забравят всички настройки за конкретния сайт за всеки запис? --Разрешенията за достъп до записите ще бъдат отменени. -- -- -- Removing stored permissions… -- Премахване на съхранените разрешения... -- -- -- Abort -- Отказ -- -- -- KeePassXC: Removed permissions -- KeePassXC: Премахнати разрешения -- -- -- Successfully removed permissions from %n entry(s). -- Успешно премахнали разрешения от %n записа.Успешно премахнали разрешения от %n записа. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Няма намерени записи с разрешения! -- -- -- The active database does not contain an entry with permissions. -- Активната база данни не съдържа запис с разрешения. -- -- -- Move KeePassHTTP attributes to custom data -- Преместване на KeePassHTTP атрибутите към персонализирани данни -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Наистина ли искате да преместите всички данни за интегриране на остарели браузъри към най-новия стандарт? --Това е необходимо, за да се поддържа съвместимост с приставката на браузъра. -- -- -- Stored browser keys -- Съхранените ключове на браузъра -- -- -- Remove selected key -- Премахване на избрания ключ -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Преместване на KeePassHTTP атрибутите към KeePassXC-Browser персонализирани данни -- -- -- Refresh database root group ID -- Обновяване на IDна главната група на базата данни -- -- -- Created -- Създаден -- -- -- Refresh database ID -- Обновяване на ID на база данни -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Наистина ли искате да обновите ID-то на базата данни? --Това е необходимо само, ако вашата база данни е копие на друга и разширението на браузъра не може да се свърже. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Добавяне на допълнителна защита... -- -- -- No password set -- Няма зададена парола -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- Предупреждение! Не сте задали парола. Използването на база данни без парола е силно обезсърчено! -- --Наистина ли искате да продължите без парола? -- -- -- Continue without password -- Продължи без парола -- -- -- No encryption key added -- Не е добавен шифроващ ключ -- -- -- You must add at least one encryption key to secure your database! -- Трябва да добавите поне един шифроващ ключ, за да защитите вашата база данни! -- -- -- Unknown error -- Неизвестна грешка -- -- -- Failed to change database credentials -- Неуспешна промяна на идентификационните данни на базата данни -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Алгоритъм за шифроване: -- -- -- AES: 256 Bit (default) -- AES: 256 бита (по подразбиране) -- -- -- Twofish: 256 Bit -- Twofish: 256 бита -- -- -- Key Derivation Function: -- Функция за формиране на ключа -- -- -- Transform rounds: -- Рунда за трансформиране: -- -- -- Memory Usage: -- Използване на паметта: -- -- -- Parallelism: -- Паралелизъм: -- -- -- Decryption Time: -- Време за дешифриране: -- -- -- ?? s -- ?? с -- -- -- Change -- Промяна -- -- -- Higher values offer more protection, but opening the database will take longer. -- По-високите стойности предлагат по-голяма защита, но отварянето на базата данни ще отнеме повече време. -- -- -- Database format: -- Формат на базата данни: -- -- -- This is only important if you need to use your database with other programs. -- Това е важно само, ако трябва да използвате вашата база данни с други програми. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (препоръчително) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- Непроменени -- -- -- Number of rounds too high -- Key transformation rounds -- Броят на рудновете е твърде висок -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Използвате много голям брой рундове за преобразуване на ключа с Argon2. -- --Ако запазите този номер, вашата база данни може да отнеме часове или дни (или дори по-дълго) да се отвори! -- -- -- Understood, keep number -- Разбирам, остави стойнстта -- -- -- Cancel -- Отказ -- -- -- Number of rounds too low -- Key transformation rounds -- Твърде нисък брой рундове -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Използвате много нисък брой ключови трансформационни рундове с AES-KDF. -- --Ако запазите тази стойност, вашата база данни може да бъде твърде лесна за разбиване! -- -- -- KDF unchanged -- KDF непромен -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Неуспешно преобразуване на ключа с новите параметри на KDF; KDF непроменен. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- МбМб -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- резба(и)нишка(и) -- -- -- Change existing decryption time -- Промяна на времето за дешифриране -- -- -- Decryption time in seconds -- Време за дешифриране в секунди -- -- -- Database format -- Формат на базата данни -- -- -- Encryption algorithm -- Алгоритъм за шифроване -- -- -- Key derivation function -- Функция за формиране на ключа -- -- -- Transform rounds -- Трансформиционни рунда -- -- -- Memory usage -- Използване на паметта -- -- -- Parallelism -- Паралелизъм -- -- -- ?? ms -- ?? мс -- -- -- ? s -- ? с -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Разкрити записи -- -- -- Don't expose this database -- Не разкривай тази база данни -- -- -- Expose entries under this group: -- Разкрий записите в тази група: -- -- -- Enable Secret Service to access these settings. -- За получаване достъп до тези настройки включвете Secret Service. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Метаданни на база данни -- -- -- Database name: -- Име на базата данни: -- -- -- Database description: -- Описание на базата данни: -- -- -- Default username: -- Потребителско име по подразбиране: -- -- -- History Settings -- Настройки на хронологията -- -- -- Max. history items: -- Макс. елементи от хронологията: -- -- -- Max. history size: -- Макс. размер на хронологията: -- -- -- MiB -- Мб -- -- -- Use recycle bin -- Използване на кошче -- -- -- Additional Database Settings -- Допълнителни настройки на базата данни -- -- -- Database name field -- Поле за име на база данни -- -- -- Database description field -- Поле за описание на базата данни -- -- -- Default username field -- Поле за потребителско име по подразбиране -- -- -- Maximum number of history items per entry -- Максимален брой елементи от историята за запис -- -- -- Maximum size of history per entry -- Максимален размер на историята за запис -- -- -- Delete Recycle Bin -- Изтриване на кошчето -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Искате ли да изтриете текущото кошче и цялото му съдържание? --Това действие е необратимо. -- -- -- (old) -- (стар) -- -- -- Enable compression (recommended) -- Разрешаване на компресирането (препоръчително) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Споделяне -- -- -- Breadcrumb -- -- -- -- Type -- Тип -- -- -- Path -- Път -- -- -- Last Signer -- Последно подписал -- -- -- Certificates -- Сертификати -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Име на базата данни: -- -- -- Description: -- Описание: -- -- -- Database name field -- Поле за име на база данни -- -- -- Database description field -- Поле за описание на базата данни -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 база данни -- -- -- All files -- Всички файлове -- -- -- Open database -- Отваряне на база данни -- -- -- CSV file -- CSV файл -- -- -- Merge database -- Сливане на база данни -- -- -- Open KeePass 1 database -- Отвораряне на KeePass 1 база данни -- -- -- KeePass 1 database -- KeePass 1 база данни -- -- -- Export database to CSV file -- Експортиране на база данни в CSV файл -- -- -- Writing the CSV file failed. -- Записът на CSV файла е неуспешен. -- -- -- Database creation error -- Грешка при създаване на база данни -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- -- Select CSV file -- Изберете CSV файл -- -- -- New Database -- Нова база данни -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Нова база данни] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Заключен] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Само за четене] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Грешка при отваряне на %1. Или не съществува, или не е достъпно. -- -- -- Export database to HTML file -- Експортиране на база данни в HTML файл -- -- -- HTML file -- HTML файл -- -- -- Writing the HTML file failed. -- Записът на HTML файл е неуспешен. -- -- -- Export Confirmation -- Потвърждение на експортирането -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Ще експортирате вашата база данни в нешифрован файл. Това ще направи вашите пароли и чувствителна информация уязвими! Наистина ли искате да продължите? -- -- -- Open OPVault -- Отвори OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Търсене... -- -- -- Do you really want to delete the entry "%1" for good? -- Наистина ли искате да изтриете записа "%1" за добро? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Наистина ли искате да преместите запис "%1" в кошчето? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Наистина ли искате да преместите %n записа(тата) в кошчето?Наистина ли искате да преместите %n запис(а) в кошчето? -- -- -- Execute command? -- Да се изпълни командата? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Наистина ли искате да изпълните следната команда?<br><br>%1<br> -- -- -- Remember my choice -- Запомни моя избор -- -- -- Do you really want to delete the group "%1" for good? -- Наистина ли искате да изтриете групата "%1" за добро? -- -- -- No current database. -- Няма текуща база данни. -- -- -- No source database, nothing to do. -- Няма база данни източник, нищо за правене. -- -- -- Search Results (%1) -- Резултати от търсенето (%1) -- -- -- No Results -- Няма резултати -- -- -- File has changed -- Файлът е променен -- -- -- The database file has changed. Do you want to load the changes? -- Файлът с базата данни е променен. Искате ли да заредите промените? -- -- -- Merge Request -- Заявка за сливане -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Файлът с базата данни е променен и имате незаписани промени. --Искате ли да обедините вашите промени? -- -- -- Empty recycle bin? -- Изпразване на кошчето? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Наистина ли искате да изтриете завинаги всичко от кошчето? -- -- -- Do you really want to delete %n entry(s) for good? -- Наистина ли искате да изтриете %n записа(тата) за добро?Наистина ли искате да изтриете %n запис(а) за добро? -- -- -- Delete entry(s)? -- Да се изтрие ли запис(и)?Да се изтрие ли запис(и)? -- -- -- Move entry(s) to recycle bin? -- Преместване на записи в кошчето?Преместване на записи в кошчето? -- -- -- Lock Database? -- Заключване на базата данни? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Редактирате запис. Отхвърляне на промените и заключване въпреки това? -- -- -- "%1" was modified. --Save changes? -- "%1" е променен. --Да се запишат ли промените? -- -- -- Database was modified. --Save changes? -- Базата данни е променена. --Да се запишат ли промените? -- -- -- Save changes? -- Да се запишат ли промените? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Не можа да се отвори новия файл с базата данни при опит за автоматично презареждане. --Грешка: %1 -- -- -- Disable safe saves? -- Забраняване на безопасно запазване? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC не успя да запази базата данни няколко пъти. Това вероятно се дължи на услугите за синхронизация на файлове, които заключват записа на файла. --Забраняване на безопасното запазване и опитайте отново? -- -- -- Passwords -- Пароли -- -- -- Save database as -- Записване на база данни като -- -- -- KeePass 2 Database -- KeePass 2 база данни -- -- -- Replace references to entry? -- Да се заменят ли препратките към записа? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Изтриване на група -- -- -- Move group to recycle bin? -- Преместване на група в кошчето? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Наистина ли искате да преместите групата "%1" в кошчето? -- -- -- Successfully merged the database files. -- Успешно слети файловете на базата данни. -- -- -- Database was not modified by merge operation. -- Базата данни не е модифицирана от операция по сливане. -- -- -- Shared group... -- Споделена група... -- -- -- Writing the database failed: %1 -- Грешка при запис на базата данни: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Тази база данни е отворена в режим само за четене. Автоматичното записване е изключено. -- -- -- Save database backup -- Записване на резервно копие на базата данни -- -- -- Could not find database file: %1 -- Файлът с базата данни не може да бъде намерен: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Запис -- -- -- Advanced -- Допълнителни -- -- -- Icon -- Икона -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- Свойства -- -- -- History -- История -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- n/a -- -- -- (encrypted) -- (шифровано) -- -- -- Select private key -- Избор на частен ключ -- -- -- Entry history -- История на записа -- -- -- Add entry -- Добавяне на запис -- -- -- Edit entry -- Редактиране на запис -- -- -- New attribute -- Нов атрибут -- -- -- Are you sure you want to remove this attribute? -- Наистина ли искате да премахнете този атрибут? -- -- -- Tomorrow -- Утре -- -- -- %n week(s) -- %n седмица(а)%n седмица(и) -- -- -- %n month(s) -- %n месец(а)%n месец(а) -- -- -- Entry updated successfully. -- Записът е актуализиран успешно. -- -- -- New attribute %1 -- Нов атрибут %1 -- -- -- %n year(s) -- %n година(а)%n година(е) -- -- -- Confirm Removal -- Потвърждаване на премахването -- -- -- Browser Integration -- Интеграция на браузъра -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Наистина ли искате да премахнете този URL? -- -- -- Reveal -- Показване -- -- -- Hide -- Скриване -- -- -- Unsaved Changes -- Незаписани промени -- -- -- Would you like to save changes to this entry? -- Желаете ли да запишете промените в този запис? -- -- -- [PROTECTED] Press Reveal to view or edit -- [ЗАЩИТЕНО] Натиснете "Показане", за да видите или редактирате -- -- -- Invalid Entry -- Невалиден запис -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Външна операция за обединяване е анулирала този запис. --За съжаление, всички направени промени са загубени. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Допълнителни атрибути -- -- -- Add -- Добавите -- -- -- Remove -- Премахване -- -- -- Edit Name -- Редактиране на името -- -- -- Protect -- Защити -- -- -- Reveal -- Показване -- -- -- Attachments -- Приложения -- -- -- Foreground Color: -- Цвят преден план: -- -- -- Background Color: -- Цвят заден план: -- -- -- Attribute selection -- Избор на атрибут -- -- -- Attribute value -- Стойност на атрибута -- -- -- Add a new attribute -- Добавяне на нов атрибут -- -- -- Remove selected attribute -- Премахни избрания атрибут -- -- -- Edit attribute name -- Редактиране на име на атрибут -- -- -- Toggle attribute protection -- Превключване на защита на атрибути -- -- -- Show a protected attribute -- Показване на защитен атрибут -- -- -- Foreground color selection -- Избор на цвят за преден план -- -- -- Background color selection -- Избор на цвят на фона -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Ако е отметнато, записът няма да се появи в отчети като "Проверка на състоянието" и "HIBP", дори ако не отговаря на изискванията за качество (напр. ентропия на паролата или преизползване). Можете да поставите отметка, ако паролата не е под ваш контрола (например, ако трябва да е четирицифрен ПИН), за да не може да се претрупва отчетите.</p></body></html> -- -- -- Exclude from database reports -- Изключване от отчетите на базата данни -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Разреши Auto-Type за този запис -- -- -- Window Associations -- Асоциация на прозореца -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Заглавие на прозорец: -- -- -- Use a specific sequence for this association: -- Използвайте конкретна последователност за тази асоциация: -- -- -- Custom Auto-Type sequence -- Персонализирана Auto-Type последователност -- -- -- Open Auto-Type help webpage -- Отваряне на уеб страницата за помощ за Auto-Type -- -- -- Existing window associations -- Съществуващи асоциации с прозорци -- -- -- Add new window association -- Добавяне на нова асоциация с прозорец -- -- -- Remove selected window association -- Премахване на избраната асоциация с прозорец -- -- -- You can use an asterisk (*) to match everything -- Можете да използвате звездичка (*), за да съответства на всичко -- -- -- Set the window association title -- Задаване на заглавието на асоциацията с прозорец -- -- -- You can use an asterisk to match everything -- Можете да използвате звездичка, за да съответства на всичко -- -- -- Custom Auto-Type sequence for this window -- Персонализирана Auto-Type последователност -- -- -- Inherit default Auto-Type sequence from the group -- Наследена последователност Auto-Type по подразбиране от групата -- -- -- Use custom Auto-Type sequence: -- Използвана персонализирана Auto-Type последователност -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Тези настройки порменят поведението на записа с разширението за браузър. -- -- -- General -- Основни -- -- -- Skip Auto-Submit for this entry -- Пропускане на автоматично подаване за този запис -- -- -- Hide this entry from the browser extension -- Скриване на този елемент от разширението на браузъра -- -- -- Additional URL's -- Допълнителни URL-и -- -- -- Add -- Добавите -- -- -- Remove -- Премахване -- -- -- Edit -- Редактиране -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Изпращане само на тази настройка към браузъра за HTTP Auth диалози. Ако е включено, нормалните форми за влизане няма да покажат този запис за селекция. -- -- -- Use this entry only with HTTP Basic Auth -- Използвай този запис само с HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Показване -- -- -- Restore -- Възстановяване -- -- -- Delete -- Триене -- -- -- Delete all -- Триене на всичко -- -- -- Entry history selection -- Избор на записи от хронологията -- -- -- Show entry at selected history state -- Показване на запис в избраното състояние от хронологията -- -- -- Restore entry to selected history state -- Възстановяване на записа в избраното състояние от хронологията -- -- -- Delete selected history state -- Изтриване на избраното състояние от хронологията -- -- -- Delete all history -- Изтриване на цялата хронология -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Парола: -- -- -- Title: -- Заглавие: -- -- -- Presets -- Предваритерни настройки -- -- -- Toggle the checkbox to reveal the notes section. -- Поставете отметка в квадратчето, за да разкриете раздела за бележки. -- -- -- Username: -- Потребителско име: -- -- -- Url field -- Поле за URL -- -- -- Download favicon for URL -- Изтегляне на favicon за URL -- -- -- Password field -- Поле за парола -- -- -- Toggle notes visible -- Превключване на видимостта на бележките -- -- -- Expiration field -- Поле за изтичане на срока -- -- -- Expiration Presets -- Предварителни настройки за изтичане на срока -- -- -- Expiration presets -- Предварителни настройки за изтичане на срока -- -- -- Notes field -- Поле за бележки -- -- -- Title field -- Поле за заглавие -- -- -- Username field -- Поле за потребителско име -- -- -- Toggle expiration -- Превключване на изтичането на срока -- -- -- Notes: -- Бележки: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Изтича: -- -- -- Edit Entry -- Редактиране на запис -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Форма -- -- -- Remove key from agent after -- Премахване на ключ след -- -- -- seconds -- секунди -- -- -- Fingerprint -- Отпечатък -- -- -- Remove key from agent when database is closed/locked -- Премахване на ключа от агента при затваряне/заключване на базата данни -- -- -- Public key -- Публичен ключ -- -- -- Add key to agent when database is opened/unlocked -- Добавяне на ключ към агента при отваряне/отключване на базата данни -- -- -- Comment -- Коментар -- -- -- Decrypt -- Заклеймявам -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Копиране в клипборда -- -- -- Private key -- Частен ключ -- -- -- External file -- Външен файл -- -- -- Browse... -- Button for opening file dialog -- Преглед... -- -- -- Attachment -- Приложение -- -- -- Add to agent -- Добавяне към агента -- -- -- Remove from agent -- Премахване от агента -- -- -- Require user confirmation when this key is used -- Изискване на потвърждение от потребителя при използване на този ключ -- -- -- Remove key from agent after specified seconds -- Премахване на ключа от агента след указани секунди -- -- -- Browser for key file -- Избор на файл-ключ -- -- -- -- External key file -- Външен файл-ключ -- -- -- Select attachment file -- Избор на прикачен файл -- -- -- -- EditGroupWidget -- -- Group -- Група -- -- -- Icon -- Икона -- -- -- Properties -- Свойства -- -- -- Add group -- Добавяне на група -- -- -- Edit group -- Редактиране на група -- -- -- Enable -- Включване -- -- -- Disable -- Изключване -- -- -- Inherit from parent group (%1) -- Наследяване от родителската група (% 1) -- -- -- Entry has unsaved changes -- Записът има незаписани промени -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Тип: -- -- -- Path: -- Път: -- -- -- Password: -- Парола: -- -- -- Inactive -- Неактивен -- -- -- KeeShare unsigned container -- KeeShare неподписан контейнер -- -- -- KeeShare signed container -- KeeShare подписан контейнер -- -- -- Select import source -- Избор на източник за импортиране -- -- -- Select export target -- Изберете целта за експортиране -- -- -- Select import/export file -- Изберете файл за импортиране/експортиране -- -- -- Clear -- Почисти -- -- -- Import -- Импортиране -- -- -- Export -- Експортиране -- -- -- Synchronize -- Синхронизиране -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Вашата KeePassXC версия не поддържа споделянето на този тип контейнер. --Поддържаните разширения са: %1. -- -- -- %1 is already being exported by this database. -- %1 вече се експортира от тази база данни. -- -- -- %1 is already being imported by this database. -- %1 вече е импортиран от тази база данни. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 се импортира и експортира от различни групи в тази база данни. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare е изключено в момента. Можете да разрешите импортиране/експортиране в настройките на приложението. -- -- -- Database export is currently disabled by application settings. -- Експортирането на база данни в момента е изключено от настройките на приложението. -- -- -- Database import is currently disabled by application settings. -- Импортирането на база данни в момента е изключено от настройките на приложението. -- -- -- Sharing mode field -- Споделне на поле за режим -- -- -- Path to share file field -- Път до споделяне на общи ресурси -- -- -- Password field -- Поле за парола -- -- -- Clear fields -- Изчисти полетата -- -- -- Browse for share file -- Избор на споделен файл -- -- -- Browse... -- Преглед... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Поле за име -- -- -- Notes field -- Поле бележки -- -- -- Toggle expiration -- Превключване на изтичането на срока -- -- -- Auto-Type toggle for this and sub groups -- Превключване на Auto-Type за тази и подгрупите ѝ -- -- -- Expiration field -- Поле за изтичане на срока -- -- -- Search toggle for this and sub groups -- Превключване на търсенето за тази група и подгрупите ѝ -- -- -- Default auto-type sequence field -- Поле за auto-type последователност по подразбиране -- -- -- Expires: -- Изтича: -- -- -- Use default Auto-Type sequence of parent group -- Използвай Auto-Type последователността по подразбиране на родителската група -- -- -- Auto-Type: -- Auto-Type: -- -- -- Search: -- Търсене: -- -- -- Notes: -- Бележки: -- -- -- Name: -- Име: -- -- -- Set default Auto-Type sequence -- Задаване на Auto-Type последователност по подразбиране -- -- -- Edit Group -- Редактиране на група -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Добавяне на икона по избор -- -- -- Delete custom icon -- Изтриване на икона по избор -- -- -- Download favicon -- Изтегляне на favicon -- -- -- Unable to fetch favicon. -- Не може да се изтегли favicon. -- -- -- Images -- Изображения -- -- -- All files -- Всички файлове -- -- -- Confirm Delete -- Потвърждаване на изтриването -- -- -- Select Image(s) -- Избор на изображение(я) -- -- -- Successfully loaded %1 of %n icon(s) -- %1 от %n иконата(ите) е успешно заредена%1 от %n иконата(ите) е успешно заредена -- -- -- No icons were loaded -- Не са заредени икони -- -- -- %n icon(s) already exist in the database -- %n иконата(ите) вече съществува в базата данни%n иконата(и) вече съществува в базата данни -- -- -- The following icon(s) failed: -- -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Тази икона се използва от %n запис(а) и ще бъде заменена от иконата по подразбиране. Наистина ли искате да го изтриете?Тази икона се използва от %n запис(а) и ще бъде заменена от иконата по подразбиране. Наистина ли искате да го изтриете? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Можете да активирате услугата за икона на DuckDuckGo в Инструменти -> Настройки -> Сигурност -- -- -- Download favicon for URL -- Изтегляне на фавикон за URL -- -- -- Apply selected icon to subgroups and entries -- Прилагане на избраната икона към подгрупи и записи -- -- -- Also apply to child groups -- Прилага се и за подгрупи -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- Прилага се и за всички деца -- -- -- Existing icon selected. -- Избрана е съществуваща икона. -- -- -- Use default icon -- Използване на иконата по подразбиране -- -- -- Use custom icon -- Използване на икона по избор -- -- -- Apply icon to... -- Икона за прилагане към... -- -- -- Apply to this group only -- Приложи само към тази група -- -- -- -- EditWidgetProperties -- -- Created: -- Създаден: -- -- -- Modified: -- Модифициран: -- -- -- Accessed: -- Достъпeн: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Данни за приставката -- -- -- Remove -- Премахване -- -- -- Delete plugin data? -- Изтриване на данни от приставката? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Наистина ли искате да изтриете избраните данни за приставката? --Това може да доведе до неизправност на засегнатите приставки. -- -- -- Key -- Ключ -- -- -- Value -- Стойност -- -- -- Datetime created -- Дата и час на създаване -- -- -- Datetime modified -- Дата и час на промяна -- -- -- Datetime accessed -- Дата и час на достъп -- -- -- Unique ID -- Уникален ID -- -- -- Plugin data -- Данни за приставката -- -- -- Remove selected plugin data -- Премахване на избраните данни за приставката -- -- -- -- Entry -- -- %1 - Clone -- %1 - Клониране -- -- -- -- EntryAttachmentsModel -- -- Name -- Име -- -- -- Size -- Размер -- -- -- -- EntryAttachmentsWidget -- -- Form -- Форма -- -- -- Add -- Добавите -- -- -- Remove -- Премахване -- -- -- Open -- Отвори -- -- -- Save -- Запази -- -- -- Select files -- Избор на файлове -- -- -- Are you sure you want to remove %n attachment(s)? -- Наистина ли искате да премахнете %n прикачени файлове?Наистина ли искате да премахнете %n прикачени файлове? -- -- -- Save attachments -- Запис на прикачени файлове -- -- -- Unable to create directory: --%1 -- Директорията не може да бъде създадена: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Наистина ли искате да заместите съществуващия файл "%1" с прикачения? -- -- -- Confirm overwrite -- Потвърждаване на презаписването -- -- -- Unable to save attachments: --%1 -- Не може да се запишат прикачените файлове: --%1 -- -- -- Unable to open attachment: --%1 -- Не може да се отворят прикаченте файл: --%1 -- -- -- Unable to open attachments: --%1 -- Не може да се отворят прикачените файлове: --%1 -- -- -- Confirm remove -- Потвърдете премахването -- -- -- Unable to open file(s): --%1 -- Не може да се отворят файлове: --%1Не може да се отворят файлове: --%1 -- -- -- Attachments -- Приложения -- -- -- Add new attachment -- Добавяне на нов прикачен файл -- -- -- Remove selected attachment -- Премахване на избрания прикачен файл -- -- -- Open selected attachment -- Отваряне на избрания прикачен файл -- -- -- Save selected attachment to disk -- Записване на избрания прикачен файл на диска -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 е голям файл (%2 МБ). --Вашата база данни може да стане много голяма и да се намали производителността. -- --Наистина ли искате да добавите файла? -- -- -- Confirm Attachment -- Потвърждаване на прикачения файл -- -- -- -- EntryAttributesModel -- -- Name -- Име -- -- -- -- EntryHistoryModel -- -- Last modified -- Последна промяна -- -- -- Title -- Заглавие -- -- -- Username -- Портебител -- -- -- URL -- Url -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Референция: -- -- -- Group -- Група -- -- -- Title -- Заглавие -- -- -- Username -- Портебител -- -- -- URL -- Url -- -- -- Never -- Никога -- -- -- Password -- Парола -- -- -- Notes -- Бележки -- -- -- Expires -- Изтича -- -- -- Created -- Създаден -- -- -- Modified -- Променен -- -- -- Accessed -- Достъпен -- -- -- Attachments -- Приложения -- -- -- Size -- Размер -- -- -- Group name -- Име на група -- -- -- Entry title -- Заглавие на записа -- -- -- Entry notes -- Бележки на записа -- -- -- Entry expires at -- Записа изтича на -- -- -- Creation date -- Дата на създаване -- -- -- Last modification date -- Последна дата на промяна -- -- -- Last access date -- Последна дата на достъп -- -- -- Attached files -- Прикачени файлове -- -- -- Entry size -- Размер на записа -- -- -- Has attachments -- Има прикачени файлове -- -- -- Has TOTP one-time password -- Има еднократна TOTP парола -- -- -- -- EntryPreviewWidget -- -- Close -- Затваряне -- -- -- General -- Основни -- -- -- Username -- Портебител -- -- -- Password -- Парола -- -- -- Expiration -- Изтичане -- -- -- URL -- Url -- -- -- Attributes -- Атрибути -- -- -- Attachments -- Приложения -- -- -- Notes -- Бележки -- -- -- Autotype -- Автоматично въвеждане -- -- -- Window -- Прозорец -- -- -- Sequence -- Последователност -- -- -- Searching -- Търсене -- -- -- Search -- Търси -- -- -- Clear -- Почисти -- -- -- Never -- Никога -- -- -- [PROTECTED] -- [ЗАЩИТЕНО] -- -- -- Enabled -- Включено -- -- -- Disabled -- Изключено -- -- -- Share -- Сподели -- -- -- Display current TOTP value -- Показване на текущата стойност на TOTP -- -- -- Advanced -- Допълнителни -- -- -- Default Sequence -- Последователност по подразбиране -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Невалиден URL -- -- -- -- EntryView -- -- Fit to window -- Побиране в прозореца -- -- -- Fit to contents -- Напасване спрямо съдържанието -- -- -- Reset to defaults -- Нулиране на настройките към подразбиращите се -- -- -- Has attachments -- Entry attachment icon toggle -- Има прикачени файлове -- -- -- Has TOTP -- Entry TOTP icon toggle -- Има TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Запис "%1" от база данни "%2" е използван от %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Неуспешно регистриране на услугата DBus на % 1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Запис(и) е(са) използван(и) от %1%n Запис(а) е(са) използван(и) от %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Име на файл -- -- -- Group -- Група -- -- -- Manage -- Управление -- -- -- Unlock to show -- Отключване за показване -- -- -- None -- Няма -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Приложение -- -- -- Manage -- Управление -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Неизвестен -- -- -- Unknown -- Unknown executable path -- Неизвестен -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Изпълним файл: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Изпълнява се друг Secret Service (%1).<br/>Спрете или премахнете, преди да активирате повторно интегрирането на Secret Service. -- -- -- -- Group -- -- [empty] -- group has no children -- [празно] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Неуспешна онлайн проверка паролата -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Изтегляне на Favicons -- -- -- Cancel -- Отказ -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Имате проблеми с изтеглянето на икони? --Можете да активирате услугата за икони на duckDuckGo в раздела за защита на настройките на приложението. -- -- -- Close -- Затваряне -- -- -- URL -- Url -- -- -- Status -- Статут -- -- -- Please wait, processing entry list... -- Моля, изчакайте, обработка на списъка с записи... -- -- -- Downloading... -- Изтегляне... -- -- -- Ok -- OK -- -- -- Already Exists -- Вече съществува -- -- -- Download Failed -- Неуспешно изтегляне -- -- -- Downloading favicons (%1/%2)... -- Изтегляне на favicons (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Затваряне -- -- -- Close message -- Съобщение при затаряне -- -- -- -- Kdbx3Reader -- -- missing database headers -- липсващи хедъри на базата данни -- -- -- Header doesn't match hash -- Хедърът не съвпада с хеша -- -- -- Invalid header id size -- Невалиден размер на id хедъра -- -- -- Invalid header field length -- Невалидна дължина на полето на хедъра -- -- -- Invalid header data length -- Невалидна дължина на данните на хедъра -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Предоставени са невалидни идентификационни данни, опитайте отново. --Ако това се повтори вероятно базата данни е повредена. -- -- -- Unable to calculate database key -- Не може да се изчисли ключът на базата данни -- -- -- Unable to issue challenge-response: %1 -- Грешка при издаването на challenge-response: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Грешка при издаването на challenge-response: %1 -- -- -- Unable to calculate database key -- Не може да се изчисли ключът на базата данни -- -- -- -- Kdbx4Reader -- -- missing database headers -- липсващи хедъри на базата данни -- -- -- Invalid header checksum size -- Невалиден размер на контролната сума на хедъра -- -- -- Header SHA256 mismatch -- Sha256 несъответствие на хедъра -- -- -- Unknown cipher -- Неизвестно шифър -- -- -- Invalid header id size -- Невалиден размер на id хедъра -- -- -- Invalid header field length -- Невалидна дължина на полето на хедъра -- -- -- Invalid header data length -- Невалидна дължина на данните на хедъра -- -- -- Failed to open buffer for KDF parameters in header -- Неуспешно отваряне на буфер за KDF параметрите в хедъра -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Неподдържана функция за извличане на ключове (KDF) или невалидни параметри -- -- -- Legacy header fields found in KDBX4 file. -- Остарели полета на хедъри намерени в KDBX4 файл. -- -- -- Invalid inner header id size -- Невалиден размер на вътрешния id хедъра -- -- -- Invalid inner header field length -- Невалидна дължина на полето на вътрешния хедъра -- -- -- Invalid inner header binary size -- Невалиден размер на binary хедъра -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Неподдържана версия на KeePass структурата с метаданни. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на името в структурата с метаданни -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Невалидна стойност на името в структурата с метаданни -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на стойността в структурата с метаданни -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Невалидна стойност на стойността в структурата с метаданни -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на Bool стойността в структурата с метаданни -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на Int32 в структурата с метаданни -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на UInt32 в структурата с метаданни -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на Int64 в структурата с метаданни -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Невалидна дължина на UInt64 в структурата с метаданни -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Невалиден типа запис в структурата с метаданни -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Невалиден размер на типа запис в структурата с метаданни -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Предоставени са невалидни идентификационни данни, опитайте отново. --Ако това се повтори вероятно базата данни е повредена. -- -- -- (HMAC mismatch) -- (HMAC несъответствие) -- -- -- Unable to calculate database key: %1 -- Грешка при изчисляване на ключа на базата данни: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Невалиден алгоритъм за симетричено шифриране. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Невалиден размер на IV за симетричния шифър. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Неуспешно сериализиране на KDF параметърите в структурата с метаданни -- -- -- Unable to calculate database key: %1 -- Грешка при изчисляване на ключа на базата данни: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Неподдържан шифър -- -- -- Invalid compression flags length -- Невалидна дължина на флаговете за компресиране -- -- -- Unsupported compression algorithm -- Неподдържан алгоритъм за компресиране -- -- -- Invalid master seed size -- Невалиден размер на главния seed -- -- -- Invalid transform seed size -- Невалиден размер на seed за трансформиране -- -- -- Invalid transform rounds size -- Невалиден размер на рундовете за преобразуване -- -- -- Invalid start bytes size -- Невалиден размер на стартовите байтове -- -- -- Invalid random stream id size -- Невалиден произволен размер на идентификатора на случайния поток -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- Не е KeePass база данни. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Избраният файл е стара база данни KeePass 1 (.kdb). -- --Можете да го импортирате, като кликнете върху Database -> "Импортиране keePass 1 база данни...". --Това е еднопосочна миграция. Няма да можете да отворите импортираната база данни със старата версия на KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Неподдържана версия на KeePass 2 базата данни. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Невалидна дължина на uuid не шифъра: %1 (дължина=%2) -- -- -- Unable to parse UUID: %1 -- Грешка при анализ на UUID: %1 -- -- -- Failed to read database file. -- Грешка при четене на файл с база данни. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Грешка при xml анализ: %1 -- -- -- No root group -- Без коренова група -- -- -- Missing icon uuid or data -- Липса на uuid или данни за иконата -- -- -- Missing custom data key or value -- Липсващ персонализиран ключ за данни или стойност -- -- -- Multiple group elements -- Множество елементи на група -- -- -- Null group uuid -- -- -- -- Invalid group icon number -- -- -- -- Invalid EnableAutoType value -- Невалидна EnableAutoType стойност -- -- -- Invalid EnableSearching value -- Невалидна EnableSearching стойност -- -- -- No group uuid found -- Не е намерен uuid на групата -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- Липсва DeletedObject uuid или време -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- -- -- -- History element in history entry -- Елемент от хронологията в хронологически запис -- -- -- No entry uuid found -- Не е намерен uuid на записа -- -- -- History element with different uuid -- Хронологически елемент с различен uuid -- -- -- Duplicate custom attribute found -- Намерени повтарящи се персонализирани атрибути -- -- -- Entry string key or value missing -- Липсващ низов ключ или стойност на записа -- -- -- Entry binary key or value missing -- Липсващ двоичен ключ или стойност на запис -- -- -- Auto-type association window or sequence missing -- Липсва асоциазия с прозорец или последователност за Auto-Type -- -- -- Invalid bool value -- Невалидна бинарна стойност -- -- -- Invalid date time value -- Невалидна стойност за дата и час -- -- -- Invalid color value -- Невалидна стойност за цвета -- -- -- Invalid color rgb part -- Невалидна rgb част за цвят -- -- -- Invalid number value -- Невалидна числова стойност -- -- -- Invalid uuid value -- Невалидна uuid стойност -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Не може да се декомпресира двоичените данни -- -- -- XML error: --%1 --Line %2, column %3 -- XML грешка: --%1 --Ред %2, колона %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Невалидна структура на файла с KeeAgent настройки. -- -- -- Private key is an attachment but no attachments provided. -- Личният ключ е прикачен, но няма прикачени файлове. -- -- -- Private key is empty -- Личният ключ е празен -- -- -- File too large to be a private key -- Файлът е твърде голям, за да бъде частен ключ -- -- -- Failed to open private key -- Неуспешно отваряне на частния ключ -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Базата данни не може да се отвори. -- -- -- Import KeePass1 Database -- Импортиране на KeePass1 база данни -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Файл-ключа не може да бъде прочетен. -- -- -- Not a KeePass database. -- Не е KeePass база данни. -- -- -- Unsupported encryption algorithm. -- Неподдържан алгоритъм за шифроване. -- -- -- Unsupported KeePass database version. -- Неподдържана версия на KeePass базата данни. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Не може да бъде прочетено шифровъчното IV -- -- -- Invalid number of groups -- Невалиден брой групи -- -- -- Invalid number of entries -- Невалиден брой записи -- -- -- Invalid content hash size -- Невалиден размер на хеш на съдържанието -- -- -- Invalid transform seed size -- Невалиден размер на seed за трансформиране -- -- -- Invalid number of transform rounds -- Невалиден брой преобразуващи рундове -- -- -- Unable to construct group tree -- Не може да се изгради дърво на групите -- -- -- Root -- Корен -- -- -- Key transformation failed -- Неуспешно преобразуване на ключа -- -- -- Invalid group field type number -- Невалиден брой на поле за групата -- -- -- Invalid group field size -- Невалиден размер на поле за групата -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- Неправилен размер на полето за изтичане на времето на група -- -- -- Incorrect group icon field size -- Неправилен размер на поле за икона на група -- -- -- Incorrect group level field size -- -- -- -- Invalid group field type -- -- -- -- Missing group id or level -- -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- Невалиден размер на поле за въвеждане -- -- -- Read entry field data doesn't match size -- -- -- -- Invalid entry uuid field size -- -- -- -- Invalid entry group id field size -- -- -- -- Invalid entry icon field size -- -- -- -- Invalid entry creation time field size -- -- -- -- Invalid entry modification time field size -- -- -- -- Invalid entry expiry time field size -- -- -- -- Invalid entry field type -- -- -- -- unable to seek to content position -- не може да се намери позиция за съдържанието -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Предоставени са невалидни идентификационни данни, опитайте отново. --Ако това се повтори вероятно базата данни е повредена. -- -- -- Unable to calculate database key -- Не може да се изчисли ключът на базата данни -- -- -- -- KeeShare -- -- Invalid sharing reference -- Невалидна препратка за споделяне -- -- -- Inactive share %1 -- Неактивено споделяне %1 -- -- -- Imported from %1 -- Импортиран от %1 -- -- -- Exported to %1 -- Експортиран в %1 -- -- -- Synchronized with %1 -- Синхронизирано с %1 -- -- -- Import is disabled in settings -- Импортирането е забранено в настройките -- -- -- Export is disabled in settings -- Експортирането е забранено в настройките -- -- -- Inactive share -- Неактивено споделяне -- -- -- Imported from -- Импортирани от -- -- -- Exported to -- Експортирани в -- -- -- Synchronized with -- Синхронизирани с -- -- -- -- KeyComponentWidget -- -- Key Component -- Компонент на ключа -- -- -- Key Component Description -- Описание на компонента към ключа -- -- -- Cancel -- Отказ -- -- -- Key Component set, click to change or remove -- Компонент към ключа е запазен, щракнете, за да го промените или премахнете -- -- -- Add %1 -- Add a key component -- Добави %1 -- -- -- Change %1 -- Change a key component -- Промени %1 -- -- -- Remove %1 -- Remove a key component -- Премахни %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 е зададен, щракнете, за да промените или премахнете -- -- -- -- KeyFileEditWidget -- -- Generate -- Генериране -- -- -- Key File -- Файл-ключ -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Можете да добавите ключ-файл, съдържащ случайни байтове за допълнителна сигурност.</p><p>Трябва да го пазите в тайна и никога да не го губите или ще бъдете заключени!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Грешка при зареждане на файл-ключа "%1" --Съобщение: %2 -- -- -- Key files -- Файл-ключове -- -- -- All files -- Всички файлове -- -- -- Create Key File... -- Създаване на ключ-файл... -- -- -- Error creating key file -- Грешка при създаване на файл-ключ -- -- -- Unable to create key file: %1 -- Не може да се създаде ключ-файл: %1 -- -- -- Select a key file -- Избор на файл-ключ -- -- -- Key file selection -- Избор на файл-ключ -- -- -- Browse for key file -- Избор на файл-ключ -- -- -- Browse... -- Преглед... -- -- -- Generate a new key file -- Генериране на нов файл-ключ -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Забележка: Не използвайте файл, който може да се промени, понеже това ще Ви попречи да отключите вашата база данни! -- -- -- Invalid Key File -- Невалиден файл-ключ -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Не можете да използвате текущата база данни като собствен файл-ключ. Изберете друг файл или създайте нов файл-ключ. -- -- -- Suspicious Key File -- Подозрителен файл-ключ -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Избраният файл-ключ изглежда като файл с база данни. Файл-ключът трябва да е статичен файл, който никога не се променя или ще загубите достъпа до вашата база данни завинаги. --Наистина ли искате да продължите с този файл? -- -- -- Old key file format -- Стар файлов формат на ключа -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Използвате остарял файлов формат на ключа, който KeePass XC може да спре да поддържа в бъдеще. -- --Помислете за генериране на нов ключ файл. -- -- -- -- MainWindow -- -- &Database -- & База данни -- -- -- &Help -- &Помощ -- -- -- &Groups -- &Групи -- -- -- &Tools -- &Инструменти -- -- -- &Quit -- &Изход -- -- -- &About -- &Относно -- -- -- Database settings -- Настройки на базата данни -- -- -- Copy username to clipboard -- Копиране на потребителско име в клипборда -- -- -- Copy password to clipboard -- Копиране на парола в клипборда -- -- -- &Settings -- &Настройки -- -- -- &Title -- &Заглавие -- -- -- Copy title to clipboard -- Копиране на заглавие в клипборда -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Копиране на URL в клипборда -- -- -- &Notes -- &Бележки -- -- -- Copy notes to clipboard -- Копиране на бележки в клипборда -- -- -- Copy &TOTP -- Копиране на &TOTP -- -- -- E&mpty recycle bin -- Изпразване на кошчето -- -- -- Clear history -- Изчистване на историята -- -- -- Access error for config file %1 -- Грешка при достъп на конфигурационния файл %1 -- -- -- Settings -- Настройки -- -- -- Toggle window -- Превключване на прозореца -- -- -- Quit KeePassXC -- Изход от KeePassXC -- -- -- Please touch the button on your YubiKey! -- Моля, докоснете бутона на yubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ВНИМАНИЕ: Използвате нестабилна компилация на KeePassXC! --Съществува висок риск от повреда, поддържайте резервно копие на вашите бази данни. --Тази версия не е предназначена за производствена употреба. -- -- -- &Donate -- &Дарете -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- ВНИМАНИЕ: Вашата версия на Qt може да доведе до това keePassXC да се срине с екранна клавиатура! --Препоръчваме да използвате AppImage варианта от страницата ни за изтегляне. -- -- -- &Import -- &Импортиране -- -- -- Create a new database -- Създаване на нова база данни -- -- -- Merge from another KDBX database -- Сливане от друга KDBX база данни -- -- -- Add a new entry -- Добавяне на нов запис -- -- -- View or edit entry -- Преглед или редактиране на запис -- -- -- Add a new group -- Добавяне на нова група -- -- -- Perform &Auto-Type -- Изпълнение на &Auto-Type -- -- -- Open &URL -- Отваряне на &URL -- -- -- Import a KeePass 1 database -- Импортиране на KeePass 1 база данни -- -- -- Import a CSV file -- Импортиране на CSV файл -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- ЗАБЕЛЕЖКА: Използвате предварителна версия на KeePassXC! --Очаквайте някои грешки и незначителни проблеми, тази версия не е предназначена за производство. -- -- -- Check for updates on startup? -- Проверка за актуализации при стартиране? -- -- -- Would you like KeePassXC to check for updates on startup? -- Искате ли KeePassXC да проверите за актуализации при стартиране? -- -- -- You can always check for updates manually from the application menu. -- Винаги можете да проверите за актуализации ръчно от менюто на приложението. -- -- -- &Export -- &Експортиране -- -- -- Sort &A-Z -- Сортиране &А-Я -- -- -- Sort &Z-A -- Сортиране &Я-А -- -- -- &Password Generator -- &Генератор на парола -- -- -- Import a 1Password Vault -- Импортиране на 1Password Vault -- -- -- &Getting Started -- &Първи стъпки -- -- -- &User Guide -- &Ръководство за потребителя -- -- -- &Keyboard Shortcuts -- &Клавишни комбинации -- -- -- &Recent Databases -- &Скорошни бази данни -- -- -- &Entries -- &Записи -- -- -- Copy Att&ribute -- Копиране на атрибута -- -- -- TOTP -- TOTP -- -- -- View -- Изглед -- -- -- Theme -- Тема -- -- -- &Check for Updates -- &Проверка за актуализации -- -- -- &Open Database… -- &Отваряне на база данни -- -- -- &Save Database -- &Записване на базата данни -- -- -- &Close Database -- &Затвори базата данни -- -- -- &New Database… -- &Нова база данни... -- -- -- &Merge From Database… -- &Сливане от база данни... -- -- -- &New Entry… -- &Нов запис... -- -- -- &Edit Entry… -- &Редактиране на запис... -- -- -- &Delete Entry… -- &Изтриване на запис... -- -- -- &New Group… -- &Нова група... -- -- -- &Edit Group… -- &Редактиране на група... -- -- -- &Delete Group… -- &Изтриване на група... -- -- -- Download All &Favicons… -- Изтегляне на всички &favicons... -- -- -- Sa&ve Database As… -- Запазване на база данни като... -- -- -- Database &Security… -- База данни &Защита... -- -- -- Database &Reports... -- База данни &Справки... -- -- -- Statistics, health check, etc. -- Статистика, проверка на здравето и др. -- -- -- &Database Settings… -- &Настройки на базата данни... -- -- -- &Clone Entry… -- &Клониране на запис... -- -- -- Move u&p -- Преместване нагоре -- -- -- Move entry one step up -- Преместване на записа една стъпка нагоре -- -- -- Move do&wn -- Преместване надолу -- -- -- Move entry one step down -- Преместване на запис с една стъпка надолу -- -- -- Copy &Username -- Копиране на &Username -- -- -- Copy &Password -- Копиране на &Паролата -- -- -- Download &Favicon -- Изтегляне &Фавикон -- -- -- &Lock Databases -- &Заключи базата данни -- -- -- &CSV File… -- &CSV файл... -- -- -- &HTML File… -- &HTML файл... -- -- -- KeePass 1 Database… -- KeePass 1 база данни... -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- CSV файл... -- -- -- Show TOTP -- Показване на TOTP -- -- -- Show QR Code -- Показване на QR код -- -- -- Set up TOTP… -- Настройване на TOTP... -- -- -- Report a &Bug -- Съобщаване на грешка -- -- -- Open Getting Started Guide -- Отваряне на ръководството "Първи стъпки" -- -- -- &Online Help -- &Онлайн помощ -- -- -- Go to online documentation -- Към онлайн документацията -- -- -- Open User Guide -- Отваряне на ръководството за потребителя -- -- -- Save Database Backup... -- Записване на резервно копие на базата данни... -- -- -- Add key to SSH Agent -- Добавяне на ключ към SSH Agent -- -- -- Remove key from SSH Agent -- Премахване на ключ от SSH Agent -- -- -- Compact Mode -- Компактен режим -- -- -- Automatic -- Автоматично -- -- -- Light -- Светла -- -- -- Dark -- Тъмна -- -- -- Classic (Platform-native) -- Класически (от платформата) -- -- -- Show Toolbar -- Покажи лентата с инструменти -- -- -- Show Preview Panel -- Показване на панела за визуализация -- -- -- Don't show again for this version -- Не показвай повече за тази версия -- -- -- Restart Application? -- Рестартиране на приложението? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Трябва да рестартирате приложението, за да приложите тази настройка. Желаете ли да рестартирате сега? -- -- -- Perform Auto-Type Sequence -- Изпълнение на Auto-Type -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- Винаги отгоре -- -- -- Hide Usernames -- Скриване на потребителските имена -- -- -- Hide Passwords -- Скриване на паролите -- -- -- -- ManageDatabase -- -- Database settings -- Настройки на базата данни -- -- -- Edit database settings -- Редактиране на настройките на базата данни -- -- -- Unlock database -- Отключване на базата данни -- -- -- Unlock database to show more information -- Отключване на базата данни за показване на повече информация -- -- -- Lock database -- Заключване на базата данни -- -- -- -- ManageSession -- -- Disconnect -- Разедини -- -- -- Disconnect this application -- Разедини това приложение -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Създаване на липсващите %1 [%2] -- -- -- Relocating %1 [%2] -- Преместване на % 1 [%2] -- -- -- Overwriting %1 [%2] -- Презаписване %1 [%2] -- -- -- older entry merged from database "%1" -- по-стари записи, обединени от база данни "%1" -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- Синхронизиране от по-новия източник %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Синхронизиране от по-стария източник %1 [% 2] -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- Добавяне на липсваща икона %1 -- -- -- Removed custom data %1 [%2] -- Премахнати потребителски данни %1 [%2] -- -- -- Adding custom data %1 [%2] -- Добавяне на потребителски данни %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Създаване на нова keePassXC база данни... -- -- -- Root -- Root group -- Корен -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Тук можете да коригирате настройките за шифроване на база данни. Не се притеснявайте, можете да ги промените по-късно в настройките на базата данни. -- -- -- Advanced Settings -- Разширени настройки -- -- -- Simple Settings -- Опростени настройки -- -- -- Encryption Settings -- Настройки на шифроване -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Идентификационни данни на база данни -- -- -- A set of credentials known only to you that protects your database. -- Набор от идентификационни данни, известни само за вас, които защитават вашата база данни. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Настройки на шифроване -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Тук можете да коригирате настройките за шифроване на база данни. Не се притеснявайте, можете да ги промените по-късно в настройките на базата данни. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Обща информация за база данни -- -- -- Please fill in the display name and an optional description for your new database: -- Моля, попълнете име и незадължително описание за новата си база данни: -- -- -- -- NixUtils -- -- Password Manager -- Мениджър на пароли -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Невалиден OpData01, не съдържа хедър -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Не може да се прочетат всички IV байта, нужни са 16, но имам %1 -- -- -- Unable to init cipher for opdata01: %1 -- Не може да се инициализира шифъра за opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Не може да се прочетат всички байтове на HMAC подписа -- -- -- Malformed OpData01 due to a failed HMAC -- Неправилно оформен OpData01 поради грешен HMAC -- -- -- Unable to process clearText in place -- Не може да се извърши обработката на текста на място -- -- -- Expected %1 bytes of clear-text, found %2 -- Очаквано %1 байта текст, намерени %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Четене на база данни не е генерирана инстанция --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Директорията .opvault трябва да съществува -- -- -- Directory .opvault must be readable -- Директорията .opvault трябва да бъде четима -- -- -- Directory .opvault/default must exist -- Директория .opvault/default трябва да съществува -- -- -- Directory .opvault/default must be readable -- Директория .opvault/default трябва да е четима -- -- -- Unable to decode masterKey: %1 -- Грешка при декодиране на masterKey: %1 -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Невалиден файл с ключа, очаква се openSSH ключ -- -- -- PEM boundary mismatch -- Несъответствие на границите на PEM -- -- -- Base64 decoding failed -- Base64 декодирането е неуспешно -- -- -- Key file way too small. -- Файлът с ключа е твърде малък. -- -- -- Key file magic header id invalid -- ID-то на магическия хедър на файла-ключ е невалиден -- -- -- Found zero keys -- Намерени нула ключа -- -- -- Failed to read public key. -- Не може да се прочете публичения ключ. -- -- -- Corrupted key file, reading private key failed -- Повреден файл с ключа, четенето на частен ключ е неуспешно -- -- -- No private key payload to decrypt -- -- -- -- Trying to run KDF without cipher -- -- -- -- Passphrase is required to decrypt this key -- Необходима е фраза за достъп за дешифриране на този ключ -- -- -- Key derivation failed, key file corrupted? -- -- -- -- Decryption failed, wrong passphrase? -- Неуспешено дешифриране, грешна фраза за достъп? -- -- -- Unexpected EOF while reading public key -- Неочакван EOF при четене на публичения ключ -- -- -- Unexpected EOF while reading private key -- Неочакван EOF при четене на частен ключ -- -- -- Can't write public key as it is empty -- Не може да се запише публичения ключ, тъй като е празен -- -- -- Unexpected EOF when writing public key -- Неочаквано EOF при писане на публичения ключ -- -- -- Can't write private key as it is empty -- Не може да се запише частения ключ, тъй като е празен -- -- -- Unexpected EOF when writing private key -- Неочаквано EOF при запис на частния ключ -- -- -- Unsupported key type: %1 -- Неподдържан тип ключ: %1 -- -- -- Unknown cipher: %1 -- Неизвестно шифър: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Шифъровачното IV е твърде кратък за MD5 kdf -- -- -- Unknown KDF: %1 -- Неизвестен KDF: %1 -- -- -- Unknown key type: %1 -- Неизвестен тип ключ: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Паролите не съвпадат -- -- -- Passwords match so far -- Паролите съвпадат досега -- -- -- Toggle Password (%1) -- Превключване на парола (%1) -- -- -- Generate Password (%1) -- Генериране на парола (%1) -- -- -- Warning: Caps Lock enabled! -- Предупреждение: Caps Lock активиран! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Въведете парола: -- -- -- Confirm password: -- Потвърдете паролата: -- -- -- Password -- Парола -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Паролата е основният метод за защита на вашата база данни.</p><p>Добрите пароли са дълги и уникални. KeePassXC може да генерира такава за вас.</p> -- -- -- Passwords do not match. -- Паролите не съвпадат. -- -- -- Password field -- Поле за парола -- -- -- Repeat password field -- Поле повтаряне на парола -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- сложност -- -- -- entropy -- ентропия -- -- -- Password -- Парола -- -- -- Character Types -- Типове знаци -- -- -- Numbers -- Числа -- -- -- Extended ASCII -- Разширен ASCII -- -- -- Exclude look-alike characters -- Изключване на подобни знаци -- -- -- Pick characters from every group -- Избиране на символи от всяка група -- -- -- &Length: -- &Дължина: -- -- -- Passphrase -- Фраза за достъп -- -- -- Wordlist: -- Списък с думи: -- -- -- Word Separator: -- Разделител на думите: -- -- -- Close -- Затваряне -- -- -- Entropy: %1 bit -- Ентропия: %1 бита -- -- -- Password Quality: %1 -- Качество на паролата : %1 -- -- -- Poor -- Password quality -- Слабо -- -- -- Weak -- Password quality -- Слабо -- -- -- Good -- Password quality -- Добро -- -- -- Excellent -- Password quality -- Отлично -- -- -- Switch to advanced mode -- Превключване към разширен режим -- -- -- Advanced -- Допълнителни -- -- -- Braces -- Скоби -- -- -- Punctuation -- Пунктуация -- -- -- Quotes -- Кавички -- -- -- Logograms -- Логограми -- -- -- Character set to exclude from generated password -- Набор от знаци за изключване от генерираната парола -- -- -- Do not include: -- Не включвайте: -- -- -- Add non-hex letters to "do not include" list -- Добавяне на не-шестнадесетични букви към списъка "не включвай" -- -- -- Hex -- Шестнадесетичен -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Изключени знаци: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Генерирана парола -- -- -- Upper-case letters -- Главни букви -- -- -- Lower-case letters -- Малки букви -- -- -- Special characters -- Специални знаци -- -- -- Math Symbols -- Математически символи -- -- -- Dashes and Slashes -- Тирета и наклонени черти -- -- -- Excluded characters -- Изключени знаци -- -- -- Hex Passwords -- Шеснайсетична парола -- -- -- Password length -- Дължина на паролата -- -- -- Word Case: -- Регистър на думите: -- -- -- Regenerate password -- Регенериране на парола -- -- -- Copy password -- Копиране на паролата -- -- -- lower case -- мали букви -- -- -- UPPER CASE -- ГЛАВНИ БУКВИ -- -- -- Title Case -- Title Case -- -- -- Generate Password -- Генериране на парола -- -- -- Also choose from: -- Също изберете от: -- -- -- Additional characters to use for the generated password -- Допълнителни знаци за използване за генерираната парола -- -- -- Additional characters -- Допълнителни знаци -- -- -- Word Count: -- Брой думи: -- -- -- Esc -- Esc -- -- -- Apply Password -- Прилагане на парола -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Регенериране на паролата (%1) -- -- -- Special Characters -- Специални знаци -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Статистика -- -- -- Very weak password -- Много слаба парола -- -- -- Password entropy is %1 bits -- Ентропията на паролата е %1 бита -- -- -- Weak password -- Слаба парола -- -- -- Used in %1/%2 -- Използвани в %1/%2 -- -- -- Password is used %1 times -- Паролата се използва %1 пъти -- -- -- Password has expired -- Паролата е изтекъла -- -- -- Password expiry was %1 -- Изтичането на паролата беше на %1 -- -- -- Password is about to expire -- Паролата скоро ще изтече -- -- -- Password expires in %1 days -- Паролата изтича след %1 дни -- -- -- Password will expire soon -- Паролата ще изтече скоро -- -- -- Password expires on %1 -- Паролата изтича на %1 -- -- -- Health Check -- Проверка на състоянието -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Презапиши -- -- -- Delete -- Триене -- -- -- Move -- Премести -- -- -- Empty -- Изпразни -- -- -- Remove -- Премахване -- -- -- Skip -- Пропускане -- -- -- Disable -- Изключване -- -- -- Merge -- Слей -- -- -- Continue -- Продължи -- -- -- -- QObject -- -- Database not opened -- Базата данни не е отворена -- -- -- Database hash not available -- Няма хеш на база данни -- -- -- Client public key not received -- Неполучен публичен ключ на клиента -- -- -- Cannot decrypt message -- Съобщението не може да се дешифрира -- -- -- Action cancelled or denied -- Действието е отменено или отказано -- -- -- KeePassXC association failed, try again -- KeePassXC асоциацията е неуспешна, опитайте отново -- -- -- Encryption key is not recognized -- Ключа за шифроване не е разпознат -- -- -- Incorrect action -- Неправилно действие -- -- -- Empty message received -- Получено е празно съобщение -- -- -- No URL provided -- Не е предоставен URL -- -- -- No logins found -- Не са намерени данни за вход -- -- -- Unknown error -- Неизвестна грешка -- -- -- Add a new entry to a database. -- Добавяне на нов запис към база данни. -- -- -- Path of the database. -- Път на базата данни. -- -- -- Key file of the database. -- Файл-ключа на базата данни. -- -- -- path -- път -- -- -- Username for the entry. -- Потребителско име за записа. -- -- -- username -- потребитерско име -- -- -- URL for the entry. -- URL за записа. -- -- -- URL -- Url -- -- -- Prompt for the entry's password. -- Питане за паролата на записа. -- -- -- Generate a password for the entry. -- Генериране на парола за записа. -- -- -- length -- Дължина -- -- -- Path of the entry to add. -- Път на записа за добавяне. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- -- -- -- Timeout in seconds before clearing the clipboard. -- Таймаут в секунди преди да се изчисти клипборда. -- -- -- Edit an entry. -- Редактиране на запис. -- -- -- Title for the entry. -- Заглавие на записа. -- -- -- title -- заглавие -- -- -- Path of the entry to edit. -- Път към записа за редактиране. -- -- -- Estimate the entropy of a password. -- Оцени ентропията на паролата. -- -- -- Password for which to estimate the entropy. -- Парола за която да се оцени ентропията. -- -- -- Perform advanced analysis on the password. -- Извършване на разширен анализ на паролата. -- -- -- -- --Available commands: -- -- Налични команди: -- -- -- Name of the command to execute. -- Име на командата за изпълнение. -- -- -- List database entries. -- Списък на записите в базата данни. -- -- -- Path of the group to list. Default is / -- Път на групата за показване. По подразбиране е / -- -- -- Find entries quickly. -- Бързо търсене на записи. -- -- -- Search term. -- Търсени думи. -- -- -- Merge two databases. -- Сливане на две бази данни. -- -- -- Path of the database to merge from. -- Път до базата данни, от която да се слее. -- -- -- Use the same credentials for both database files. -- Използвайте едни и същи идентификационни данни за двата файла с бази данни. -- -- -- Key file of the database to merge from. -- Файл-ключа на базата данни за сливане. -- -- -- Show an entry's information. -- Показване на информация за записа. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Имената на показваните атрибути. Тази опция може да бъде зададена повече от веднъж, като всеки атрибут се показва по един на ред в дадения ред. Ако не са зададени атрибути, се дава обобщение на атрибутите по подразбиране. -- -- -- attribute -- атрибут -- -- -- Name of the entry to show. -- Име на записа за показване. -- -- -- NULL device -- Устройство NULL -- -- -- error reading from device -- грешка при четене от устройството -- -- -- malformed string -- неправилен низ -- -- -- missing closing quote -- липсваща затваряща кавичка -- -- -- Group -- Група -- -- -- Title -- Заглавие -- -- -- Username -- Портебител -- -- -- Password -- Парола -- -- -- Notes -- Бележки -- -- -- Last Modified -- Последно променена -- -- -- Created -- Създаден -- -- -- Browser Integration -- Интеграция на браузъра -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- -- -- -- Word count for the diceware passphrase. -- -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- -- Generate a new random password. -- Генерирайте нова случайна парола. -- -- -- Could not create entry with path %1. -- Не може да се създаде запис с път %1. -- -- -- Enter password for new entry: -- Въведете парола за новия запис: -- -- -- Writing the database failed %1. -- Грешка при запис на базата данни: %1 -- -- -- Successfully added entry %1. -- Успешно добавен запис %1. -- -- -- Invalid timeout value %1. -- Невалидна стойност на таймаут %1. -- -- -- Entry %1 not found. -- Записът %1 не е намерен. -- -- -- Entry with path %1 has no TOTP set up. -- Записът с път %1 няма настроен TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- Клипборда е изчистен! -- -- -- Silence password prompt and other secondary outputs. -- Заглуши промпта за паролата и други воторостепенни изходи. -- -- -- count -- CLI parameter -- брой -- -- -- Could not find entry with path %1. -- Не може да се намери запис с път %1. -- -- -- Not changing any field for entry %1. -- Без провени в полетата за записа %1. -- -- -- Enter new password for entry: -- Въведете нова парола за записа: -- -- -- Writing the database failed: %1 -- Грешка при запис на базата данни: %1 -- -- -- Successfully edited entry %1. -- Успешно редактиран запис %1. -- -- -- Length %1 -- Дължина %1 -- -- -- Entropy %1 -- Ентропия %1 -- -- -- Log10 %1 -- Логаритъм10 %1 -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- Тип: Брутфорс -- -- -- Type: Dictionary -- Тип: Речник -- -- -- Type: Dict+Leet -- Тип: Речник+Leet -- -- -- Type: User Words -- Тип: Уличен жаргон -- -- -- Type: User+Leet -- Тип: Потребителски+Leet -- -- -- Type: Repeated -- Тип: Повтарящи се -- -- -- Type: Sequence -- Тип: Последователност -- -- -- Type: Spatial -- Тип: Пространствен -- -- -- Type: Date -- Тип: Дата -- -- -- Type: Bruteforce(Rep) -- Тип: Брутафорс(повтаряеми) -- -- -- Type: Dictionary(Rep) -- Тип: Речник (повт.) -- -- -- Type: Dict+Leet(Rep) -- Тип: Речник+Leet(повт.) -- -- -- Type: User Words(Rep) -- Тип: Потребителски думи(повт.) -- -- -- Type: User+Leet(Rep) -- Тип: Потребителски+Leet(повт.) -- -- -- Type: Repeated(Rep) -- Тип: Повтарящи се(повт.) -- -- -- Type: Sequence(Rep) -- Тип: Последователност(повт.) -- -- -- Type: Spatial(Rep) -- Тип: Пространствено(повт.) -- -- -- Type: Date(Rep) -- Тип: Дата(повт.) -- -- -- Type: Unknown%1 -- Тип: Неизвестен%1 -- -- -- Entropy %1 (%2) -- Ентропия %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- Дължина на паролата (%1) != сума от дължината на частите (%2) *** -- -- -- Failed to load key file %1: %2 -- Грешка при зареждане на файла-ключ %1: %2 -- -- -- Length of the generated password -- Дължина на генерираната парола -- -- -- Use lowercase characters -- Използване на малки букви -- -- -- Use uppercase characters -- Използване на главни букви -- -- -- Use special characters -- Използване на специални знаци -- -- -- Use extended ASCII -- Използвай разширен ASCII -- -- -- Exclude character set -- Изключване на набор от знаци -- -- -- chars -- Символи -- -- -- Exclude similar looking characters -- Изключване на подобни знаци -- -- -- Include characters from every selected group -- Включване на знаци от всяка избрана група -- -- -- Recursively list the elements of the group. -- Рекурсивно изброява елементите на групата. -- -- -- Cannot find group %1. -- Не може да се намери групата %1. -- -- -- Error reading merge file: --%1 -- Грешка при четене на файл за сливане: --%1 -- -- -- Unable to save database to file : %1 -- Базата данни не може да бъде записана във файл: %1 -- -- -- Unable to save database to file: %1 -- Базата данни не може да бъде записана във файл: % 1 -- -- -- Successfully recycled entry %1. -- Успешно изтриване на запис%1. -- -- -- Successfully deleted entry %1. -- Успешно изтрит елемент %1. -- -- -- Show the entry's current TOTP. -- Показване на текущия TOTP на записа. -- -- -- ERROR: unknown attribute %1. -- ГРЕШКА: неизвестен атрибут %1. -- -- -- No program defined for clipboard manipulation -- Няма програма, дефинирана за манипулация на клипборда -- -- -- file empty -- празен файл -- -- -- %1: (row, col) %2,%3 -- %1: (ред, колона) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Невалидни настройки -- -- -- Invalid Key -- TOTP -- Невалиден ключ -- -- -- Message encryption failed. -- Неуспешно шифроване на съобщение. -- -- -- No groups found -- Не са намерени групи -- -- -- Create a new database. -- Създаване на нова база данни. -- -- -- File %1 already exists. -- Файлът %1 вече съществува. -- -- -- Loading the key file failed -- Зареждането на файл-ключа е неуспешно -- -- -- No key is set. Aborting database creation. -- Не е зададен ключ. Прекратяване на създаването на база данни. -- -- -- Failed to save the database: %1. -- Грешка при записване на базата данни: %1. -- -- -- Successfully created new database. -- Успешно създадена нова база данни. -- -- -- Creating KeyFile %1 failed: %2 -- Грешка при създаване на KeyFile %1: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Грешка при зареждане на KeyFile %1: %2 -- -- -- Path of the entry to remove. -- Път на записа за премахване. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- -- The lock file could not be created. Single-instance mode disabled. -- -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - крос-платформен мениджър на пароли -- -- -- filenames of the password databases to open (*.kdbx) -- файловите имена на базите данни с пароли за отваряне (*.kdbx) -- -- -- path to a custom config file -- път към потребителския конфигурационен файл -- -- -- key file of the database -- файл-ключа на базата данни -- -- -- read password of the database from stdin -- прочетете паролата на базата данни от stdin -- -- -- Another instance of KeePassXC is already running. -- Друга инстанция на KeePassXC вече работи. -- -- -- Fatal error while testing the cryptographic functions. -- Фатална грешка при тестване на криптографските функции. -- -- -- KeePassXC - Error -- KeePassXC - Грешка -- -- -- Database password: -- Парола за базата данни: -- -- -- Cannot create new group -- Не може да се създаде нова група -- -- -- Deactivate password key for the database. -- Деактивиране на парола за базата данни. -- -- -- Displays debugging information. -- Показва информация за отстраняване на грешки. -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Версия %1 -- -- -- Build Type: %1 -- Тип на компилацията: %1 -- -- -- Revision: %1 -- Ревизия: %1 -- -- -- Distribution: %1 -- Дистрибуция: %1 -- -- -- Debugging mode is disabled. -- Режимът за отстраняване на грешки е изключен. -- -- -- Debugging mode is enabled. -- Режимът за отстраняване на грешки е включен. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Операционна система: %1 --Архитектура на процесора: %2 --Ядро: %3 %4 -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (подписано и неподписано споделяне) -- -- -- KeeShare (only signed sharing) -- Кийшер (само подписано споделяне) -- -- -- KeeShare (only unsigned sharing) -- Кийшер (само неподписано споделяне) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Няма -- -- -- Enabled extensions: -- Включени разширения: -- -- -- Cryptographic libraries: -- Криптографски библиотеки: -- -- -- Cannot generate a password and prompt at the same time! -- Не може да генерира парола и да се въведе едновременно! -- -- -- Adds a new group to a database. -- Добавя нова група към база данни. -- -- -- Path of the group to add. -- Пътят на групата за добавяне. -- -- -- Group %1 already exists! -- Групата %1 вече съществува! -- -- -- Group %1 not found. -- Групата %1 не е намерена. -- -- -- Successfully added group %1. -- Успешно добавена група %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Проверете дали има публичен достъп до пароли. FILENAME трябва да бъде пътя на файл, който включва SHA-1 хешове на пароли, пропускани в HIBP формат, както е налично от https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- Анализирай паролите за слабости и проблеми. -- -- -- Failed to open HIBP file %1: %2 -- Грешка при отваряне на ФАЙЛА %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Оценяване на записи в базата данни спрямо HIBP файл, това ще отнеме известно време... -- -- -- Close the currently opened database. -- Затворяне на текущо отворената база данни. -- -- -- Display this help. -- Покажи тази помощ. -- -- -- slot -- слот -- -- -- Invalid word count %1 -- Невалиден брой думи %1 -- -- -- The word list is too small (< 1000 items) -- Списъкът с думи е твърде малък (< 1000 елемента) -- -- -- Exit interactive mode. -- Излизане от интерактивния режим. -- -- -- Exports the content of a database to standard output in the specified format. -- Експортира съдържанието на база данни в стандартен изход в указания формат. -- -- -- Unable to export database to XML: %1 -- Не може да се експортира база данни в XML: %1 -- -- -- Unsupported format %1 -- Неподдържан формат %1 -- -- -- Use numbers -- Използване на номера -- -- -- Invalid password length %1 -- Невалидна дължина на паролата %1 -- -- -- Display command help. -- Показване на помощ за командна. -- -- -- Available commands: -- Налични команди: -- -- -- Import the contents of an XML database. -- Импортиране на съдържанието на XML база данни. -- -- -- Path of the XML database export. -- Път на експортирането на XML база данни. -- -- -- Path of the new database. -- Път към новата база данни. -- -- -- Successfully imported database. -- Успешно импортирана база данни. -- -- -- Unknown command %1 -- Неизвестна команда %1 -- -- -- Flattens the output to single lines. -- Изравнява изхода към единични редове. -- -- -- Only print the changes detected by the merge operation. -- Изкарай само промените, открити от операцията за сливане. -- -- -- Yubikey slot for the second database. -- Yubikey слот за втората база данни. -- -- -- Successfully merged %1 into %2. -- Успешно сливане на %1 в %2. -- -- -- Database was not modified by merge operation. -- Базата данни не е модифицирана от операция по сливане. -- -- -- Moves an entry to a new group. -- Премества запис в нова група. -- -- -- Path of the entry to move. -- Път на записа за местене. -- -- -- Path of the destination group. -- Път на целевата група. -- -- -- Could not find group with path %1. -- Не може да бъде намерена група с път %1. -- -- -- Entry is already in group %1. -- Записът вече е в група %1. -- -- -- Successfully moved entry %1 to group %2. -- Успешно преместен запис %1 в група %2. -- -- -- Open a database. -- Отворете база данни. -- -- -- Path of the group to remove. -- Пътят на групата за премахване. -- -- -- Cannot remove root group from database. -- Не може да се премахне главната група от базата данни. -- -- -- Successfully recycled group %1. -- Успешно изтрита група% 1. -- -- -- Successfully deleted group %1. -- Успешно изтрита група %1. -- -- -- Failed to open database file %1: not found -- Грешка при отваряне на файла %1: не е намерен -- -- -- Failed to open database file %1: not a plain file -- Грешка при отваряне на файла %1 на база данни: не е текстов файл -- -- -- Failed to open database file %1: not readable -- Грешка при отваряне на файла %1: не е четим -- -- -- Enter password to unlock %1: -- Въведете парола за отключване на %1: -- -- -- Invalid YubiKey slot %1 -- Невалиден YubiKey слот %1 -- -- -- Enter password to encrypt database (optional): -- Въведете парола за шифроване на база данни (незадължително): -- -- -- HIBP file, line %1: parse error -- Файл HIBP, ред %1: грешка при парсване -- -- -- Secret Service Integration -- Secret Service интеграция -- -- -- User name -- Потребителско име -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- Невалиден генератор на пароли след прилагане на всички опции -- -- -- Show the protected attributes in clear text. -- Показване на защитените атрибути в чист текст. -- -- -- Browser Plugin Failure -- Неуспех в браузърния плъгин -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Копирайте дадения атрибут в клипборда. По подразбиране е "password", ако не е зададен. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Копирай текущия TOTP в клипборда (еквивалентно на "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Копиране на атрибут на записа в клипборда. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ГРЕШКА: Моля, посочете --attribute, --totp или и двете. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- Грешка: атрибут %1 е двусмислен, съвпада с %2. -- -- -- Attribute "%1" not found. -- Не е намерен атрибут "%1". -- -- -- Entry's "%1" attribute copied to the clipboard! -- Атрибутът на записа "%1" е копиран в клипборда! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- Целево време за дешифриране на базата в MS. -- -- -- time -- Време -- -- -- Set the key file for the database. -- Задаване на файл-ключа за базата данни. -- -- -- Set a password for the database. -- Задайте парола за базата данни. -- -- -- Invalid decryption time %1. -- Невалидно време за дешифриране %1. -- -- -- Target decryption time must be between %1 and %2. -- Целевото реме за дешифриране трябва да бъде между %1 и %2. -- -- -- Failed to set database password. -- Неуспешно задаване на парола за базата данни. -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Формат при експортиране. Наличните възможности са "xml" и "csv". По подразбиране е "xml". -- -- -- Unable to import XML database: %1 -- Не може да се импортира XML база данни:% 1 -- -- -- Show a database's information. -- Показване на информация за базата данни. -- -- -- UUID: -- UUID: -- -- -- Name: -- Име: -- -- -- Description: -- Описание: -- -- -- Cipher: -- Шифър: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Кошчето е включено(. -- -- -- Recycle bin is not enabled. -- Кошчето не е включено. -- -- -- Invalid command %1. -- Невалидна команда %1. -- -- -- Invalid YubiKey serial %1 -- Невалиден YubiKey сериен номер %1 -- -- -- Please touch the button on your YubiKey to continue… -- Моля, докоснете бутона на вашия YubiKey, за да продължи... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Искате ли да създадете база данни с празна парола? [y/N]: -- -- -- Repeat password: -- Повторете паролата: -- -- -- Error: Passwords do not match. -- Грешка: Паролите не съвпадат. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- AES (% 1 рунда) -- -- -- AES 256-bit -- AES 256-битов -- -- -- Twofish 256-bit -- Twofish 256-битов -- -- -- ChaCha20 256-bit -- ChaCha20: 256-битов {20 256-?} -- -- -- Benchmark %1 delay -- Бенчмарк %1 закъснение -- -- -- %1 ms -- milliseconds -- % 1 ms%1 ms -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- Използвате остарял файлов формат на ключа, който KeePass XC може да спре да поддържа в бъдеще. -- --Помислете за генериране на нов ключ файл. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Икона -- -- -- Unsupported key file version: %1 -- Неподдържан тип ключ: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Вътрешна zlib грешка при компресиране: -- -- -- Error writing to underlying device: -- -- -- -- Error opening underlying device: -- -- -- -- Error reading data from underlying device: -- -- -- -- Internal zlib error when decompressing: -- Вътрешна zlib грешка при декомпресиране: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Форматът gzip не се поддържа в тази версия на zlib. -- -- -- Internal zlib error: -- Вътрешна грешка на zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Показване и на изключените от отетите записи -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Задръжте курсора на мишката върху причината, за да се покажат допълнителни подробности. Щракнете двукратно върху записите, за да редактирате. -- -- -- Bad -- Password quality -- Лош -- -- -- Bad — password must be changed -- Лош — паролата трябва да бъде променена -- -- -- Poor -- Password quality -- Слабо -- -- -- Poor — password should be changed -- Лошо — паролата добре да се смени -- -- -- Weak -- Password quality -- Слабо -- -- -- Weak — consider changing the password -- Слаба — помислете за промяна на паролата -- -- -- (Excluded) -- (Изключено) -- -- -- This entry is being excluded from reports -- Това вписване е изключено от отчетите -- -- -- Please wait, health data is being calculated... -- Моля изчакайте, данните за здравето се изчисляват... -- -- -- Congratulations, everything is healthy! -- Поздравления, всичко е зраво! -- -- -- Title -- Заглавие -- -- -- Path -- Път -- -- -- Score -- Оценка -- -- -- Reason -- Причина -- -- -- Edit Entry... -- Редактиране на запис... -- -- -- Exclude from reports -- Изключване от отчети -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ВНИМАНИЕ: Този доклад изисква изпращане на информация до услугата Have I Been Pwned (https://haveibeenpwned.com). Ако продължите, паролите от базата данни ще бъдат хеширани по криптографски начин и първите пет знака от тези хешове ще бъдат изпратени защитено на тази услуга. Вашата база данни остава защитена и не може да бъде възстановена от тази информация. Въпреки това, броят на паролите, които изпращате, и вашият IP адрес ще бъдат пратени на тази услуга. -- -- -- Perform Online Analysis -- Извършване на онлайн анализ -- -- -- Also show entries that have been excluded from reports -- Показване и на изключените от отетите записи -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Тази компилация на KeePassXC не разполага с мрежови функции. Те са необходими за проверка на паролите в Have I Been Pwned базата данни. -- -- -- Congratulations, no exposed passwords! -- Поздравления, няма разкрити пароли! -- -- -- Title -- Заглавие -- -- -- Path -- Път -- -- -- Password exposed… -- Парола е разкрита... -- -- -- (Excluded) -- (Изключено) -- -- -- This entry is being excluded from reports -- Това вписване е изключено от отчетите -- -- -- once -- веднъж -- -- -- up to 10 times -- до 10 пъти -- -- -- up to 100 times -- до 100 пъти -- -- -- up to 1000 times -- до 1000 пъти -- -- -- up to 10,000 times -- до 10 000 пъти -- -- -- up to 100,000 times -- до 100 000 пъти -- -- -- up to a million times -- до един милион пъти -- -- -- millions of times -- милиони пъти -- -- -- Edit Entry... -- Редактиране на запис... -- -- -- Exclude from reports -- Изключване от отчети -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Задръжте курсора на мишката върху редове с икони за грешки за допълнителна информация. -- -- -- Name -- Име -- -- -- Value -- Стойност -- -- -- Please wait, database statistics are being calculated... -- Моля, изчакайте, статистически данни за базата данни се изчисляват... -- -- -- Database name -- Име на базата данни -- -- -- Description -- Описание -- -- -- Location -- Местоположение -- -- -- Last saved -- Последно записан -- -- -- Unsaved changes -- Незаписани промени -- -- -- yes -- Да -- -- -- no -- не -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Базата данни е променена, но промените още не са записани на диска. -- -- -- Number of groups -- Брой групи -- -- -- Number of entries -- Брой записи -- -- -- Number of expired entries -- Брой изтекли записи -- -- -- The database contains entries that have expired. -- Базата данни съдържа изтекли записи. -- -- -- Unique passwords -- Уникални пароли -- -- -- Non-unique passwords -- Неуникални пароли -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Повече от 10% от паролите се преизползват. Използвайте уникални пароли, когато е възможно. -- -- -- Maximum password reuse -- Максимална преизползване на парола -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Някои пароли се преизползват от три пъти. Използвайте уникални пароли, когато е възможно. -- -- -- Number of short passwords -- Брой кратки пароли -- -- -- Recommended minimum password length is at least 8 characters. -- Препоръчителната минимална дължина на паролата е поне 8 знака. -- -- -- Number of weak passwords -- Брой на слабите пароли -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Препоръчваме използването на дълги, произволни пароли с оценка на "добро" или "отлично". -- -- -- Entries excluded from reports -- Записи, изключени от отчетите -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Изключването на записи от отчетите, например защото е известно, че имат лоша парола, не е непременно проблем, но трябва да ги държите под око. -- -- -- Average password length -- Средна дължина на паролата -- -- -- %1 characters -- %1 знака -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Средната дължина на паролата е по-малка от десет знака. По-дългите пароли осигуряват по-голяма сигурност. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Неуспешно свързване на агента. -- -- -- Agent protocol error. -- Протоколна грешка на агента. -- -- -- No agent running, cannot add identity. -- Не се изпълнява агент, не може да добави самоличност. -- -- -- No agent running, cannot remove identity. -- Няма работещ агент, не може да премахне самоличността. -- -- -- Agent refused this identity. Possible reasons include: -- Агентът отказа тази самоличност. Възможните причини включват: -- -- -- The key has already been added. -- Ключът вече е добавен. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Ограничената продължителност на живота не се поддържа от агента (проверете настройките). -- -- -- A confirmation request is not supported by the agent (check options). -- Заявка за потвърждение не се поддържа от агента (проверете настройките). -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- Няма изпълняващ се агент, не може да се покажат самоличностите. -- -- -- -- SearchHelpWidget -- -- Search Help -- Търсенете помощ -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Думи за търсене са следните: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Всеки дума за търсене трябва да съответства (т.е. логическо И) -- -- -- Modifiers -- Модификатори -- -- -- exclude term from results -- изключване на термин от резултатите -- -- -- match term exactly -- точен съвпадение на думата -- -- -- use regex in term -- използвайте регулярен израз за търсене -- -- -- Fields -- Полета -- -- -- Term Wildcards -- Шаблон -- -- -- match anything -- съвпадение на всичко -- -- -- match one -- съвпадение един -- -- -- logical OR -- логическо ИЛИ -- -- -- Examples -- Примери -- -- -- -- SearchWidget -- -- Search -- Търсене -- -- -- Limit search to selected group -- Ограничаване на търсенето до избрана група -- -- -- Search Help -- Търсенете помощ -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Търсене (%1)... -- -- -- Case sensitive -- Чувствитерен регистър -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Опции -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Включване на Freedesktop.org Secret Service интеграция -- -- -- General -- Основни -- -- -- Show notification when credentials are requested -- Показвай известие при изискване на идентификационни данни -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Ако кошчето е включео за базата данни, записите ще бъдат преместени в него директно. В противен случай те ще бъдат изтрити без потвърждение.</p><p>Ще бъдете подканени, ако някой от записите е посочен от други.</p></body></html> -- -- -- Exposed database groups: -- -- -- -- Authorization -- Разрешение -- -- -- These applications are currently connected: -- Тези приложения са свързани в момента: -- -- -- Don't confirm when entries are deleted by clients -- Не потвърждавайте при изтриване на записи от клиенти -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Грешка:</b> Неуспешно свързване с DBus. Моля, проверете настройките на DBus. -- -- -- <b>Warning:</b> -- <b>Предупреждение:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Запишете текущите промени, за да активирате приставката и да разрешите редактирането на тази секция. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Активни -- -- -- Allow export -- Разреши експортиране -- -- -- Allow import -- Разреши импортиране -- -- -- Own certificate -- Собствен сертификат -- -- -- Fingerprint: -- Пръстов отпечатък: -- -- -- Certificate: -- Сертификат: -- -- -- Signer -- Подписващ -- -- -- Key: -- Ключ: -- -- -- Generate -- Генериране -- -- -- Import -- Импортиране -- -- -- Export -- Експортиране -- -- -- Imported certificates -- Импортирани сертификати -- -- -- Trust -- Доверие -- -- -- Ask -- Попитай -- -- -- Untrust -- Не вярвай -- -- -- Remove -- Премахване -- -- -- Path -- Път -- -- -- Status -- Статут -- -- -- Fingerprint -- Отпечатък -- -- -- Certificate -- Сертификат -- -- -- Trusted -- ДОверени -- -- -- Untrusted -- Недоверени -- -- -- Unknown -- Неизвестен -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Ключ-файл на KeeShare -- -- -- All files -- Всички файлове -- -- -- Select path -- Избор на път -- -- -- Exporting changed certificate -- Експортиране на променения сертификата -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Експортираният сертификат не е същият като ползвания. Искате ли да експортирате текущия сертификат? -- -- -- Signer: -- Подписващ: -- -- -- Allow KeeShare imports -- Разреши KeeShare импортирането -- -- -- Allow KeeShare exports -- Разреши KeeShare експортирането -- -- -- Only show warnings and errors -- Показвай само предупреждения и грешки -- -- -- Key -- Ключ -- -- -- Signer name field -- Поле за име на подписващия -- -- -- Generate new certificate -- Генериране на нов сертификат -- -- -- Import existing certificate -- Импортиране на съществуващ сертификат -- -- -- Export own certificate -- Експорт на собствен сертификат -- -- -- Known shares -- Известни общи ресурси -- -- -- Trust selected certificate -- Доверяване на избрания сертификат -- -- -- Ask whether to trust the selected certificate every time -- Питай дали да се доверява на избрания сертификат всеки път -- -- -- Untrust selected certificate -- Не се доверявай на избрания сертификат -- -- -- Remove selected certificate -- Премахване на избрания сертификат -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- Не може да се вгради подпис: файлът не може да бъде отворен за запис (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Не може да се вгради подпис: файлът не може да бъде записан (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Грешка при вграждане на база данни: файлът не може да бъде отворен за запис (%1) -- -- -- Could not embed database: Could not write file (%1) -- Грешка при вграждане на база данни: файлът не може да бъде записан (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- Възникна неочаквана грешка при експортиране -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Искате ли да се доверите на %1 с пръстов отпечатък %2 от %3? {1 ?} {2 ?} -- -- -- Not this time -- Не и този път. -- -- -- Never -- Никога -- -- -- Always -- Винаги -- -- -- Just this time -- Само този път -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- Файлът не е четим -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- Успешно подписано импортирано -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- Успешно неподписано импортиране -- -- -- File does not exist -- Файлът не съществува -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Импортирането от %1 е неуспешно (%2) -- -- -- Import from %1 successful (%2) -- Импортиране от %1 успешно (%2) -- -- -- Imported from %1 -- Импортиран от %1 -- -- -- Export to %1 failed (%2) -- Експортирането в %1 е неуспешно (%2) -- -- -- Export to %1 successful (%2) -- Експортиране в %1 успешно (%2) -- -- -- Export to %1 -- Експортиране в %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Парола за време -- -- -- 000000 -- 000000 -- -- -- Copy -- Копиране -- -- -- Expires in <b>%n</b> second(s) -- -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Копиране -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Забележка: тези TOTP настройки са по избор и може да не работи с други удостоверители. -- -- -- There was an error creating the QR code. -- Възникна грешка при създаването на QR кода. -- -- -- Closing in %1 seconds. -- Затваряне след %1 секунди. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Настройка на TOTP -- -- -- Default RFC 6238 token settings -- Стандартни настройки на токена спрямо RFC 6238 -- -- -- Steam token settings -- Настройки на Steam токен -- -- -- Use custom settings -- Използване на потребителски настройки -- -- -- Custom Settings -- Потребителски настройки -- -- -- Time step: -- Времва стъпка: -- -- -- sec -- Seconds -- сек -- -- -- Code size: -- Размер на кода: -- -- -- Secret Key: -- Таен ключ: -- -- -- Secret key must be in Base32 format -- Таен ключ трябва да е в Base32 -- -- -- Secret key field -- Поле на секретен ключ -- -- -- Algorithm: -- Алгоритъм: -- -- -- Time step field -- Поле за времева стъпка -- -- -- digits -- цифри -- -- -- Invalid TOTP Secret -- Невалидна TOTP тайна -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Въвели сте невалиден секретен ключ. Ключът трябва да е във формат Base32. --Пример: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Потвърдете премахването на TOTP настройките -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Наистина ли искате да изтриете настройките на TOTP за този запис? -- -- -- -- URLEdit -- -- Invalid URL -- Невалиден URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Проверка за актуализации -- -- -- Checking for updates... -- Проверка за актуализации... -- -- -- Close -- Затваряне -- -- -- Update Error! -- Грешка при актуализиране! -- -- -- An error occurred in retrieving update information. -- Възникна грешка при извличането на информация за актуализиране. -- -- -- Please try again later. -- Моля, опитайте отново по-късно. -- -- -- Software Update -- Софтуерно актуализиране -- -- -- A new version of KeePassXC is available! -- Нова версия на KeePassXC е налична! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 е на разположение — текущата %2. -- -- -- Download it at keepassxc.org -- Изтеглете я на keepassxc.org -- -- -- You're up-to-date! -- Версията е актуалната! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 в момента е най-новата версия -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Започнете да съхранявате паролите си сигурно в KeePassXC базата данни -- -- -- Create new database -- Създаване на нова база данни -- -- -- Open existing database -- Отваряне на съществуващата база данни -- -- -- Import from KeePass 1 -- Внос от KeePass 1 -- -- -- Import from CSV -- Импортиране от CSV -- -- -- Recent databases -- Скорошни бази данни -- -- -- Welcome to KeePassXC %1 -- Добре дошли в KeePassXC %1 -- -- -- Import from 1Password -- Импортиране от 1Password -- -- -- Open a recent database -- Отваряне на скорошна база данни -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Конфигуриран слот -% 3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Натиснете -- -- -- Passive -- Пасивни -- -- -- %1 Invalid slot specified - %2 -- %1 Невалиден слот -% 2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey интерфейсът не е инициализиран. -- -- -- Hardware key is currently in use. -- Хардуерният ключ в момента се използва. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Не може да се намери хардуерен ключ със сериен номер %1. Включете го, за да продължите. -- -- -- Hardware key timed out waiting for user interaction. -- Времето за изчакване на потребителя с хардуерния ключ изтече. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Грешка с USB при достъп до хардуерния ключ: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Обновяване -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Ако притежавате <a href="https://www.yubico.com/">YubiKey</a>, можете да го използвате за допълнителна сигурност.</p><p>YubiKey изисква един от неговите слотове да бъде програмирана като <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response.</a></p> -- -- -- Refresh hardware tokens -- Обновяване на хардуерни токени -- -- -- Hardware key slot selection -- Избор на слот на хардуерен ключ -- -- -- Could not find any hardware keys! -- Не са намерени хардуерни ключове! -- -- -- Selected hardware key slot does not support challenge-response! -- Избраният слот на хардуерния ключ не поддържа challenge-response! -- -- -- Detecting hardware keys… -- Откриване на хардуерни ключове... -- -- -- No hardware keys detected -- Не са открити хардуерни ключове -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ca.ts keepassxc-2.6.4-patched/share/translations/keepassx_ca.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ca.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ca.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7841 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Quant al KeePassXC -- -- -- About -- Quant a -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Reporteu errors a: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeepassXC es distribueix sota els termes de la Llicència Pública General GNU (GPL) versió 2 o (segons la vostra opció) versió 3. -- -- -- Contributors -- Contribuïdors -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vegeu les contribucions a GitHub</a> -- -- -- Debug Info -- Informació de depuració -- -- -- Include the following information whenever you report a bug: -- Inclogueu la següent informació a l'hora de reportar un error: -- -- -- Copy to clipboard -- Copia al porta-retalls -- -- -- Project Maintainers: -- Mantenidors del projecte: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Agraïments de l'equip de KeePassXC a debfx per crear el KeePassX original. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Utilitza OpenSSH per a Windows enlloc de Pageant -- -- -- Enable SSH Agent integration -- Activar integració de l'agent SSH -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- (buit) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Configuració de l'aplicació -- -- -- General -- General -- -- -- Security -- Seguretat -- -- -- Access error for config file %1 -- Error d'accés al fitxer de configuració %1 -- -- -- Icon only -- Només la icona -- -- -- Text only -- Només text -- -- -- Text beside icon -- Text al costat de la icona -- -- -- Text under icon -- Text sota la icona -- -- -- Follow style -- Segueix l'estil -- -- -- Reset Settings? -- Restableix la configuració? -- -- -- Are you sure you want to reset all general and security settings to default? -- Esteu segur que voleu reinicialitzar totes les configuracions generals i de seguretat als valors predeterminats? -- -- -- Monochrome (light) -- Monocrom (clar) -- -- -- Monochrome (dark) -- Monocrom (fosc) -- -- -- Colorful -- Colors -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Configuració bàsica -- -- -- Startup -- Inicialització -- -- -- Start only a single instance of KeePassXC -- Inicia només una instància del KeePassXC -- -- -- Minimize window at application startup -- Minimitza la finestra en obrir l'aplicació -- -- -- File Management -- Gestió de fitxers -- -- -- Backup database file before saving -- Fes una còpia de seguretat abans de desar -- -- -- Automatically save after every change -- Desa després de cada canvi de forma automàtica -- -- -- Automatically reload the database when modified externally -- Torna a carregar automàticament la base de dades quan sigui modificada de forma externa -- -- -- Entry Management -- Gestió d'entrades -- -- -- Use group icon on entry creation -- Utilitza la icona del grup en crear una entrada -- -- -- Minimize instead of app exit -- Minimitza en lloc de sortir de l'aplicació -- -- -- Show a system tray icon -- Mostreu una icona a la safata del sistema -- -- -- Hide window to system tray when minimized -- Amaga la finestra a la safata del sistema en minimitzar -- -- -- Auto-Type -- Compleció automàtica -- -- -- Use entry title to match windows for global Auto-Type -- Usa el títol de l'entrada per coincidir amb la finestra per la compleció automàtica global -- -- -- Use entry URL to match windows for global Auto-Type -- Usa l'URL d'entrada per lligar amb la finestra per la compleció automàtica global -- -- -- Always ask before performing Auto-Type -- Pregunta sempre abans d'efectuar la compleció automàtica -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Barra d'eines mòbil -- -- -- Remember previously used databases -- Recorda les bases de dades utilitzades prèviament -- -- -- Load previously open databases on startup -- Carrega les bases de dades obertes prèviament a l'inici -- -- -- Remember database key files and security dongles -- Recorda els fitxers clau i les motxilles de seguretat -- -- -- Check for updates at application startup once per week -- Comprova si hi ha actualitzacions a l'inici de l'aplicació un cop per setmana -- -- -- Include beta releases when checking for updates -- Inclou les versions beta quan es comprovin les actualitzacions -- -- -- Language: -- Idioma: -- -- -- (restart program to activate) -- (reinicieu per activar-ho) -- -- -- Minimize window after unlocking database -- Minimitza la finestra després de desbloquejar la base de dades -- -- -- Minimize when opening a URL -- Minimitza en obrir una URL -- -- -- Hide window when copying to clipboard -- Oculta la finestra al copiar al porta-retalls -- -- -- Minimize -- Minimitza -- -- -- Drop to background -- Envia al fons -- -- -- Favicon download timeout: -- Favicon - Temps d'espera de la descàrrega: -- -- -- Website icon download timeout in seconds -- Temps d'espera en segons de la descàrrega d'icones -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Estil dels botons de la barra d'eines -- -- -- Language selection -- Selecció d'idioma -- -- -- Global auto-type shortcut -- Drecera global de compleció automàtica -- -- -- Auto-type character typing delay milliseconds -- Retard d'escriptura en mil·lisegons de la compleció automàtica -- -- -- Auto-type start delay milliseconds -- Retard d'inici en mil·lisegons de la compleció automàtica -- -- -- Automatically launch KeePassXC at system startup -- Executar KeePassXC a l'inici del sistema -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- Interfície d'usuari -- -- -- Toolbar button style: -- Estil de la barra d'eines -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- Tipus d'icona de la safata del sistema -- -- -- Reset settings to default… -- Valors de configuració per defecte... -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Temps excedits -- -- -- Clear clipboard after -- Esborra el porta-retalls després de -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Bloca les bases de dades després d'una inactivitat de -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Oblida el TouchID després d'una inactivitat de -- -- -- Convenience -- Conveniència -- -- -- Lock databases when session is locked or lid is closed -- Bloca les bases de dades quan la sessió es bloquegi o es tanqui la tapa -- -- -- Forget TouchID when session is locked or lid is closed -- Oblida el TouchID quan la sessió està blocada o la tapa està tancada -- -- -- Lock databases after minimizing the window -- Bloca les bases de dades després de minimitzar la finestra -- -- -- Re-lock previously locked database after performing Auto-Type -- Torna a blocar la base de dades després d'una compleció automàtica -- -- -- Hide passwords in the entry preview panel -- Oculta les contrasenyes al panell de previsualització de l'entrada -- -- -- Hide entry notes by default -- Oculta les notes de l'entrada per defecte -- -- -- Privacy -- Privacitat -- -- -- Use DuckDuckGo service to download website icons -- Usa DuckDuckGo per a descarregar icones de llocs web -- -- -- Clipboard clear seconds -- Segons de la neteja del porta-retalls -- -- -- Touch ID inactivity reset -- Reinici per inactivitat del Touch ID -- -- -- Database lock timeout seconds -- Segons de temps d'espera per a bloquejar la base de dades -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Elimina la teva cerca després de -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- No hem trobat una entrada que coincidesca amb el títol de la finestra: -- -- -- Auto-Type - KeePassXC -- Compleció automàtica - KeePassXC -- -- -- Auto-Type -- Compleció automàtica -- -- -- The Syntax of your Auto-Type statement is incorrect! -- La sintaxi de la declaració de compleció automàtica és incorrecta! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Aquesta ordre de compleció automàtica conté un retard molt llarg. Esteu segur que voleu continuar? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Aquesta comanda de compleció automàtica conté pulsacions de tecles molt lentes. Esteu segur que voleu continuar? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Aquesta comanda de compleció automàtica conté arguments que es repeteixen molt sovint. Esteu segur que voleu continuar? -- -- -- Permission Required -- Permís necessari -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Finestra -- -- -- Sequence -- Seqüència -- -- -- Default sequence -- Seqüència per omissió -- -- -- -- AutoTypeMatchModel -- -- Group -- Grup -- -- -- Title -- Títol -- -- -- Username -- Nom d'usuari -- -- -- Sequence -- Seqüència -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copia el nom d'&usuari -- -- -- Copy &password -- Copia la contrasenya -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permís necessari -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Compleció automàtica - KeePassXC -- -- -- Select entry to Auto-Type: -- Seleccione l'entrada per a la compleció automàtica: -- -- -- Search... -- Cerca... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- %1 demana accés a les entrades següents: -- -- -- Remember access to checked entries -- -- -- -- Remember -- Recorda -- -- -- Allow access to entries -- Permetre accés a les entrades -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- -- -- -- Ok -- D'acord -- -- -- Cancel -- Cancel·lar -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Teniu diverses bases de dades obertes. --Seleccioneu la base de dades correcta per desar les credencials. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nova petició de associació de clau -- -- -- Save and allow access -- Desa i autoritza l'accès -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Voleu sobreescriure la clau existent? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Ja existeix una clau de xifrat compartida amb el nom "%1". --Voleu sobreescriure-la? -- -- -- KeePassXC: Update Entry -- KeePassXC: Actualitza l'entrada -- -- -- Do you want to update the information in %1 - %2? -- Voleu actualitzar la informació en %1 - %2? -- -- -- Abort -- Avorta -- -- -- Converting attributes to custom data… -- Conversió d'atributs a dades personalitzades... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: atributs convertits de KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: No s'ha trobat cap entrada amb atributs KeePassHTTP -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- La base de dades activa no conté cap entrada amb atributs KeePassHTTP -- -- -- KeePassXC: Legacy browser integration settings detected -- -- -- -- KeePassXC: Create a new group -- KeePassXC: crea un grup nou -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- No tornis a mostrar aquest avís -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Diàleg -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Requerit per a l'accés a les teves bases de dades amb el navegador KeePassXC -- -- -- Enable browser integration -- Habilita la integració del navegador -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- Actualment, no s'admeten els navegadors instal·lats com a Snaps. -- -- -- Enable integration for these browsers: -- Habilita la integració amb els següents navegadors: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Només es retornen les entrades amb el mateix patró (http://, https://, ...) -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Només retorna les millors coincidències per a una adreça URL específica en lloc de totes les entrades per al domini. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Avançat -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- L'actualització o creació de camps de test no està suportada. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Actualitza la ruta binària de KeePassXC o keepassxc-proxy automàticament als scripts de missatgeria nativa a l'inici. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Usa una ubicació personalitzada de servidor intermediari si s'ha instal·lat el servidor intermediari manualment -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Navega... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- Tipus de navegador: -- -- -- Toolbar button style -- Estil dels botons de la barra d'eines -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- Vegeu a sota les instruccions especials per a l'ús d'extensions del navegador -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Atenció:</b> Canviar les següents opcions és perillós! -- -- -- Executable Files -- Fitxers executables -- -- -- All Files -- Tots els fitxers -- -- -- Select custom proxy location -- Seleccioneu la ubicació personalitzada del servidor intermediari -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Clona les opcions -- -- -- Append ' - Clone' to title -- Afegeix ' - clon' al títol -- -- -- Replace username and password with references -- Substitueix el nom d'usuari i la contrasenya amb referències -- -- -- Copy history -- Còpia el historial -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importació de fitxer CSV -- -- -- filename -- nom del fitxer -- -- -- size, rows, columns -- mida, files, columnes -- -- -- Encoding -- Codificació -- -- -- Codec -- Còdec -- -- -- Text is qualified by -- Text està qualificat per -- -- -- Fields are separated by -- Els camps estan separats per -- -- -- Comments start with -- Els comentaris comencen amb -- -- -- Consider '\' an escape character -- Considera ' \' com un caràcter d'escapada -- -- -- Preview -- Visualització prèvia -- -- -- Imported from CSV file -- Importats d'un fitxer CSV -- -- -- Original data: -- Dades originals: -- -- -- Error -- Error -- -- -- Error(s) detected in CSV file! -- S'han detectat errors al fitxer CSV! -- -- -- [%n more message(s) skipped] -- [% n més missatges s'ha omès][s'ha/n omès %n missatge/s més] -- -- -- CSV import: writer has errors: --%1 -- Importació CSV: writer té errors: --%1 -- -- -- Text qualification -- -- -- -- Field separation -- Separador de camp -- -- -- Number of header lines to discard -- Nombre de línies de la capçalera a descartar -- -- -- CSV import preview -- Previsualització de la importació CSV -- -- -- Column Association -- -- -- -- Last Modified -- Darrera modificació -- -- -- Password -- Contrasenya -- -- -- Created -- Creat -- -- -- Notes -- Notes -- -- -- Title -- Títol -- -- -- Group -- Grup -- -- -- URL -- URL -- -- -- Username -- Nom d'usuari -- -- -- Header lines skipped -- -- -- -- First line has field names -- La primera línia té els noms dels camps -- -- -- Not Present -- -- -- -- Column %1 -- Columna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Icona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n columna(es)%n columna(es) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte(s)%n byte(s) -- -- -- %n row(s) -- %n fila(es)%n fila(es) -- -- -- -- Database -- -- File %1 does not exist. -- El fitxer %1 no existeix. -- -- -- Unable to open file %1. -- No es pot obrir el fitxer %1. -- -- -- Error while reading the database: %1 -- S'ha produït un error al llegir la base de dades: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- El fitxer no es pot escriure perquè s'ha obert en mode només de lectura. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- La clau no s'ha transformat. Això és un error, notifica als desenvolupadors! -- -- -- %1 --Backup database located at %2 -- %1 --Còpia de seguretat de la base de dades situada a %2 -- -- -- Could not save, database does not point to a valid file. -- No s'ha pogut desar, la base de dades no apunta a un fitxer vàlid. -- -- -- Could not save, database file is read-only. -- No s'ha pogut desar, el fitxer de base de dades és de només lectura. -- -- -- Database file has unmerged changes. -- El fitxer de base de dades té canvis no fusionats. -- -- -- Recycle Bin -- Paperera -- -- -- Passwords -- Root group name -- Contrasenyes -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Desbloca la base de dades - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Fitxer clau: -- -- -- Refresh -- Actualitza -- -- -- Don't show this warning again -- No tornis a mostrar aquest avís -- -- -- All files -- Tots els fitxers -- -- -- Key files -- Fitxers de clau -- -- -- Select key file -- Seleccioneu el fitxer de clau -- -- -- Failed to open key file: %1 -- No s'ha pogut obrir el fitxer de clau: %1 -- -- -- Unlock KeePassXC Database -- Desbloqueja la base de dades de KeePassXC -- -- -- Enter Password: -- Introduïu la contrasenya: -- -- -- Password field -- Camp de contrasenya -- -- -- Hardware key slot selection -- Selecció de la ranura de la motxilla -- -- -- Browse for key file -- -- -- -- Browse... -- Navega... -- -- -- Refresh hardware tokens -- Refresca els testimonis de maquinari -- -- -- Hardware Key: -- Motxilla: -- -- -- Hardware key help -- Ajuda de la motxilla -- -- -- TouchID for Quick Unlock -- Usa el TouchID per desbloquejar ràpidament -- -- -- Unlock failed and no password given -- El desbloqueig ha fallat i no s'ha donat cap contrasenya -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- Torna-ho a provar amb la contrasenya buida -- -- -- Enter Additional Credentials (if any): -- Introduïu credencials addionals (si cal): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Per favor, toqueu el botó en el seu YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Contrasenyes -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Configuració avançada -- -- -- General -- General -- -- -- Security -- Seguretat -- -- -- Encryption Settings -- Configuració del xifrat -- -- -- Browser Integration -- Integració amb el navegador -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Configuració del navegador -- -- -- Stored keys -- Claus emmagatzemades -- -- -- Remove -- Suprimiu -- -- -- Delete the selected key? -- Voleu eliminar la clau seleccionada? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- -- Key -- Clau -- -- -- Value -- Valor -- -- -- Enable Browser Integration to access these settings. -- Permet que la integració del navegador accedeixi a aquesta configuració. -- -- -- Disconnect all browsers -- Desconnecta tots els navegadors -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Esteu segur que voleu desconnectar tots els navegadors? --Això pot impedir la connexió al connector del navegador. -- -- -- KeePassXC: No keys found -- KeePassXC: No s'han trobat claus -- -- -- No shared encryption keys found in KeePassXC settings. -- -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Claus de la base de dades eliminades -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- -- Removing stored permissions… -- Eliminant permisos emmagatzemats... -- -- -- Abort -- Avorta -- -- -- KeePassXC: Removed permissions -- KeePassXC: Permisos eliminats -- -- -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: No s'ha trobat cap entrada amb permisos! -- -- -- The active database does not contain an entry with permissions. -- La base de dades activa no conté cap entrada amb permisos. -- -- -- Move KeePassHTTP attributes to custom data -- Desplaça els atributs de KeePassHTTP a dades personalitzades -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- -- -- -- Remove selected key -- Suprimeix la clau seleccionada -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Creat -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Afegeix una protecció addicional... -- -- -- No password set -- Sense contrasenya -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- -- Continue without password -- Continua sense contrasenya -- -- -- No encryption key added -- No s'ha afegit cap clau de xifrat -- -- -- You must add at least one encryption key to secure your database! -- S'ha d'afegir com a mínim una clau d'encriptació per assegurar la base de dades! -- -- -- Unknown error -- Error desconegut -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algorisme de d’encriptatge: -- -- -- AES: 256 Bit (default) -- AES: 256 bits (per defecte) -- -- -- Twofish: 256 Bit -- Twofish: 256 bits -- -- -- Key Derivation Function: -- Funció de derivació de clau: -- -- -- Transform rounds: -- Transformar rondes: -- -- -- Memory Usage: -- Ús de memòria: -- -- -- Parallelism: -- Paral·lelisme: -- -- -- Decryption Time: -- Temps de desxifrat: -- -- -- ?? s -- ?? s -- -- -- Change -- Canvia -- -- -- Higher values offer more protection, but opening the database will take longer. -- Els valors més alts ofereixen més protecció, però es trigarà més a obrir la base de dades. -- -- -- Database format: -- Format de la base de dades: -- -- -- This is only important if you need to use your database with other programs. -- Això només és important si necessiteu utilitzar la vostra base de dades amb altres programes. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recomanat) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- Inalterat -- -- -- Number of rounds too high -- Key transformation rounds -- Nombre de rondes massa alt -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- -- Understood, keep number -- -- -- -- Cancel -- Cancel·lar -- -- -- Number of rounds too low -- Key transformation rounds -- Nombre de rondes massa baix -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- -- KDF unchanged -- KDF sense canvis -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- Thread (s)Fil(s) -- -- -- Change existing decryption time -- Canvia el temps de desxifrat existent -- -- -- Decryption time in seconds -- Temps de desxifrat en segons -- -- -- Database format -- Format de la base de dades -- -- -- Encryption algorithm -- Algoritme de xifrat -- -- -- Key derivation function -- Funció de derivació de clau -- -- -- Transform rounds -- Rondes de transformació -- -- -- Memory usage -- Ús de la memòria -- -- -- Parallelism -- Paral·lelisme -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadades de la base de dades -- -- -- Database name: -- Nom de base de dades: -- -- -- Database description: -- Descripció de la base de dades: -- -- -- Default username: -- Usuari per defecte: -- -- -- History Settings -- Configuració de l'historial -- -- -- Max. history items: -- Nombre màxim d'elements a l'historial: -- -- -- Max. history size: -- Mida màxima de l'historial: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Utilitza la paperera -- -- -- Additional Database Settings -- Configuració addicional de la base de dades -- -- -- Database name field -- Camp de nom de la base de dades -- -- -- Database description field -- Camp de descripció de la base de dades -- -- -- Default username field -- Camp d'usuari predeterminat -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- (antic) -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Compartició -- -- -- Breadcrumb -- Ruta de navegació -- -- -- Type -- Tipus -- -- -- Path -- Camí -- -- -- Last Signer -- Últim signant -- -- -- Certificates -- Certificats -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nom de la base de dades: -- -- -- Description: -- Descripció: -- -- -- Database name field -- Camp de nom de la base de dades -- -- -- Database description field -- Camp de descripció de la base de dades -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Base de dades de KeePass 2 -- -- -- All files -- Tots els fitxers -- -- -- Open database -- Obre la base de dades -- -- -- CSV file -- Fitxer CSV -- -- -- Merge database -- Fusiona la base de dades -- -- -- Open KeePass 1 database -- Obre base de dades de KeePass 1 -- -- -- KeePass 1 database -- Base de dades de KeePass 1 -- -- -- Export database to CSV file -- Exporta la base de dades a un fitxer CSV -- -- -- Writing the CSV file failed. -- Ha fallat l'escriptura al fitxer CSV. -- -- -- Database creation error -- Error de creació de la base de dades -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- -- Select CSV file -- Selecciona un fitxer CSV -- -- -- New Database -- Base de dades nova -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [nova base de dades] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [bloquejat] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [només de lectura] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- Exporta la base de dades a un fitxer HTML -- -- -- HTML file -- Fitxer HTML -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- Confirmació de l'exportació -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Cercant... -- -- -- Do you really want to delete the entry "%1" for good? -- Realment voleu suprimir l'entrada "%1" per sempre? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Realment voleu moure l'entrada "%1" a la paperera? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Realment voleu desplaçar% n entrada (s) a la Paperera de reciclatge?Esteu segur que voleu moure %n entrada/es a la paperera de reciclatge? -- -- -- Execute command? -- Execute l'ordre? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Voleu executar la següent ordre? <br><br>%1<br> -- -- -- Remember my choice -- Recordar la meva elecció -- -- -- Do you really want to delete the group "%1" for good? -- Realment voleu suprimir el grup "%1" per sempre? -- -- -- No current database. -- Cap base de dades actual. -- -- -- No source database, nothing to do. -- Cap base de dades, res a veure. -- -- -- Search Results (%1) -- Resultats de la cerca (%1) -- -- -- No Results -- No hi ha resultats -- -- -- File has changed -- El fitxer ha canviat -- -- -- The database file has changed. Do you want to load the changes? -- El fitxer de base de dades ha canviat. Voleu carregar els canvis? -- -- -- Merge Request -- Petició de combinació -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- El fitxer de base de dades ha canviat i teniu canvis sense desar. --Voleu fusionar els canvis? -- -- -- Empty recycle bin? -- Buida la paperera? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Esteu segur que voleu suprimir permanentment tot el contingut de la paperera? -- -- -- Do you really want to delete %n entry(s) for good? -- Esteu segur que voleu suprimir% n entrades per al Good?Esteu segur que voleu suprimir % n entrades permanentment? -- -- -- Delete entry(s)? -- Voleu suprimir les entrades?Voleu suprimir la/es entrada/es? -- -- -- Move entry(s) to recycle bin? -- Mou l'entrada (s) a la Paperera de reciclatge?Mou l'entrada(es) a la paperera de reciclatge? -- -- -- Lock Database? -- Voleu bloquejar la base de dades? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Esteu editant una entrada. Voleu descartar els canvis i bloquejar de totes maneres? -- -- -- "%1" was modified. --Save changes? -- "%1" ha canviat. --Voleu desar els canvis? -- -- -- Database was modified. --Save changes? -- S'ha modificat la base de dades. --Voleu desar els canvis? -- -- -- Save changes? -- Voleu desar els canvis? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- No es pot obrir el nou fitxer de base de dades mentre intenteu la recàrrega automàtica. --Error: %1 -- -- -- Disable safe saves? -- Voleu deshabilitar el desat segur? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC no ha pogut desar la base de dades. És probable que un servei de sincronització de fitxers estiguin bloquejant el fitxer de la base de dades. --Voleu deshabilitar el desat segur i provar-ho un altre cop? -- -- -- Passwords -- Contrasenyes -- -- -- Save database as -- Desa la base de dades com a -- -- -- KeePass 2 Database -- Base de dades de KeePass 2 -- -- -- Replace references to entry? -- Voleu substituir les referències a l'entrada? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- L'entrada "%1" té %2 referències. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment?L'entrada "%1" té %2 referència/es. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment? -- -- -- Delete group -- Suprimeix el grup -- -- -- Move group to recycle bin? -- Vols moure el grup a la Paperera de reciclatge? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- -- -- -- Successfully merged the database files. -- S'han fusionat correctament els arxius de base de dades. -- -- -- Database was not modified by merge operation. -- La base de dades no s'ha modificat amb l'operació de fusionat. -- -- -- Shared group... -- Grup compartit... -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- Desa una còpia de seguretat de la base de dades -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Entrada -- -- -- Advanced -- Avançat -- -- -- Icon -- Icona -- -- -- Auto-Type -- Compleció automàtica -- -- -- Properties -- Propietats -- -- -- History -- Historial -- -- -- SSH Agent -- Agent SSH -- -- -- n/a -- n/a -- -- -- (encrypted) -- (encriptat) -- -- -- Select private key -- Selecciona una clau privada -- -- -- Entry history -- Historial de l'entrada -- -- -- Add entry -- Afegiu una entrada -- -- -- Edit entry -- Edita l'entrada -- -- -- New attribute -- Nou atribut -- -- -- Are you sure you want to remove this attribute? -- Esteu segur que voleu suprimir aquest atribut? -- -- -- Tomorrow -- Demà -- -- -- %n week(s) -- % n setmana/es%n setmana/es -- -- -- %n month(s) -- % n mes/s%n mes/os -- -- -- Entry updated successfully. -- L'entrada s'ha actualitzat correctament. -- -- -- New attribute %1 -- Atribut nou %1 -- -- -- %n year(s) -- % n any/s%n any/s -- -- -- Confirm Removal -- Confirma l'eliminació -- -- -- Browser Integration -- Integració amb el navegador -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- Revela -- -- -- Hide -- Oculta -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atributs addicionals -- -- -- Add -- Afegiu -- -- -- Remove -- Suprimiu -- -- -- Edit Name -- Edita el nom -- -- -- Protect -- Protegeix -- -- -- Reveal -- Revela -- -- -- Attachments -- Fitxers adjunts -- -- -- Foreground Color: -- Color del primer pla: -- -- -- Background Color: -- Color de fons: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- Selecció del color de primer pla -- -- -- Background color selection -- Selecció del color de fons -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- Exclou dels informes de la base de dades -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Permetre la compleció automàtica per a aquesta entrada -- -- -- Window Associations -- Associacions de finestra -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Títol de la finestra: -- -- -- Use a specific sequence for this association: -- Usa una seqüència específica per a aquesta associació: -- -- -- Custom Auto-Type sequence -- Seqüència de compleció automàtica personalitzada -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- Seqüència de compleció automàtica personalitzada per a aquesta finestra -- -- -- Inherit default Auto-Type sequence from the group -- Hereda la seqüència de compleció automàtica del grup -- -- -- Use custom Auto-Type sequence: -- Usa una seqüència de compleció automàtica personalitzada: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Afegiu -- -- -- Remove -- Suprimiu -- -- -- Edit -- Edita -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Mostra -- -- -- Restore -- Restaura -- -- -- Delete -- Suprimeix -- -- -- Delete all -- Suprimeix tots -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Contrasenya: -- -- -- Title: -- Títol: -- -- -- Presets -- Configuracions -- -- -- Toggle the checkbox to reveal the notes section. -- Activeu la casella de selecció per mostrar la secció notes. -- -- -- Username: -- Nom d'usuari: -- -- -- Url field -- Camp d'URL -- -- -- Download favicon for URL -- Descarrega el favicon de URL -- -- -- Password field -- Camp de contrasenya -- -- -- Toggle notes visible -- Commuta la visibilitat de les notes -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- Camp de notes -- -- -- Title field -- Camp de títol -- -- -- Username field -- Camp d'usuari -- -- -- Toggle expiration -- -- -- -- Notes: -- Notes: -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulari -- -- -- Remove key from agent after -- -- -- -- seconds -- segons -- -- -- Fingerprint -- Empremta digital -- -- -- Remove key from agent when database is closed/locked -- Elimina la clau de l'agent quan la base de dades està tancada/bloquejada -- -- -- Public key -- Clau pública -- -- -- Add key to agent when database is opened/unlocked -- Afegeix la clau a l'agent quan la base de dades s'obri o es desbloquegi -- -- -- Comment -- Comentari -- -- -- Decrypt -- Desxifrar -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Copia al porta-retalls -- -- -- Private key -- Clau privada -- -- -- External file -- Fitxer extern -- -- -- Browse... -- Button for opening file dialog -- Navega... -- -- -- Attachment -- Adjunt -- -- -- Add to agent -- Afegeix-lo a l'agent -- -- -- Remove from agent -- Suprimeix-lo de l'agent -- -- -- Require user confirmation when this key is used -- Demana confirmació de l'usuari quan s'utilitzi aquesta clau -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Grup -- -- -- Icon -- Icona -- -- -- Properties -- Propietats -- -- -- Add group -- Afegeix un grup -- -- -- Edit group -- Edita el grup -- -- -- Enable -- Habilita -- -- -- Disable -- Inhabilita -- -- -- Inherit from parent group (%1) -- Hereta de grup pare (%1) -- -- -- Entry has unsaved changes -- L'entrada té canvis sense desar -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipus: -- -- -- Path: -- Camí: -- -- -- Password: -- Contrasenya: -- -- -- Inactive -- Inactiu -- -- -- KeeShare unsigned container -- -- -- -- KeeShare signed container -- -- -- -- Select import source -- -- -- -- Select export target -- -- -- -- Select import/export file -- -- -- -- Clear -- Neteja -- -- -- Import -- Importa -- -- -- Export -- Exporta -- -- -- Synchronize -- Sincronitza -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- Camp de contrasenya -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Navega... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- Camp de notes -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- Camp de seqüència de compleció automàtica per defecte -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- Notes: -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Afegeix una icona personalitzada -- -- -- Delete custom icon -- Suprimeix la icona personalitzada -- -- -- Download favicon -- Descarrega el favicon -- -- -- Unable to fetch favicon. -- No es pot descarregar el favicon. -- -- -- Images -- Imatges -- -- -- All files -- Tots els fitxers -- -- -- Confirm Delete -- Confirma la supressió -- -- -- Select Image(s) -- -- -- -- Successfully loaded %1 of %n icon(s) -- -- -- -- No icons were loaded -- No s'ha carregat cap icona -- -- -- %n icon(s) already exist in the database -- % n icona (s) ja existeix a la base de dadesJa existeix/en %n icona/es a la base de dades -- -- -- The following icon(s) failed: -- La icona (s) següent (es) ha fallat:Han fallat la/les icona/es següent/s: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- Descarrega el favicon de URL -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- Usa la icona per defecte -- -- -- Use custom icon -- Usa una icona personalitzada -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Creat: -- -- -- Modified: -- Modificat: -- -- -- Accessed: -- Accedit: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Dades del connector -- -- -- Remove -- Suprimiu -- -- -- Delete plugin data? -- -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- -- Key -- Clau -- -- -- Value -- Valor -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clon -- -- -- -- EntryAttachmentsModel -- -- Name -- Nom -- -- -- Size -- Mida -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulari -- -- -- Add -- Afegiu -- -- -- Remove -- Suprimiu -- -- -- Open -- Obre -- -- -- Save -- Desa -- -- -- Select files -- -- -- -- Are you sure you want to remove %n attachment(s)? -- -- -- -- Save attachments -- Desa els fitxers adjunts -- -- -- Unable to create directory: --%1 -- No s'ha pogut crear el directori: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- -- -- -- Confirm overwrite -- Confirma la sobreescriptura -- -- -- Unable to save attachments: --%1 -- -- -- -- Unable to open attachment: --%1 -- -- -- -- Unable to open attachments: --%1 -- -- -- -- Confirm remove -- Confirma l'eliminació -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Fitxers adjunts -- -- -- Add new attachment -- Afegeix un nou adjunt -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Nom -- -- -- -- EntryHistoryModel -- -- Last modified -- Darrera modificació -- -- -- Title -- Títol -- -- -- Username -- Nom d'usuari -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grup -- -- -- Title -- Títol -- -- -- Username -- Nom d'usuari -- -- -- URL -- URL -- -- -- Never -- Mai -- -- -- Password -- Contrasenya -- -- -- Notes -- Notes -- -- -- Expires -- Expira -- -- -- Created -- Creat -- -- -- Modified -- Modificat -- -- -- Accessed -- Accedit -- -- -- Attachments -- Fitxers adjunts -- -- -- Size -- Mida -- -- -- Group name -- Nom del grup -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Tanca -- -- -- General -- General -- -- -- Username -- Nom d'usuari -- -- -- Password -- Contrasenya -- -- -- Expiration -- Venciment -- -- -- URL -- URL -- -- -- Attributes -- Atributs -- -- -- Attachments -- Fitxers adjunts -- -- -- Notes -- Notes -- -- -- Autotype -- Tecleig automàtic -- -- -- Window -- Finestra -- -- -- Sequence -- Seqüència -- -- -- Searching -- S'està cercant -- -- -- Search -- Cerca -- -- -- Clear -- Neteja -- -- -- Never -- Mai -- -- -- [PROTECTED] -- [PROTEGIT] -- -- -- Enabled -- Habilitat -- -- -- Disabled -- Inhabilitat -- -- -- Share -- Comparteix -- -- -- Display current TOTP value -- -- -- -- Advanced -- Avançat -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Ajusta a la finestra -- -- -- Fit to contents -- Ajusta al contingut -- -- -- Reset to defaults -- Reinicialitza-la als valors predeterminats -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Grup -- -- -- Manage -- Gestiona -- -- -- Unlock to show -- -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplicació -- -- -- Manage -- Gestiona -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- -- -- -- Unknown -- Unknown executable path -- -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [buit] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Descarrega els favicons -- -- -- Cancel -- Cancel·la -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Tanca -- -- -- URL -- URL -- -- -- Status -- Estat -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- Descarregant... -- -- -- Ok -- D'acord -- -- -- Already Exists -- -- -- -- Download Failed -- La descàrrega ha fallat -- -- -- Downloading favicons (%1/%2)... -- Descarregant els favicons (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Tancar -- -- -- Close message -- Tancar missatge -- -- -- -- Kdbx3Reader -- -- missing database headers -- -- -- -- Header doesn't match hash -- La capçalera no coincideix amb el hash -- -- -- Invalid header id size -- Mida de l'identificador de capçalera no vàlida -- -- -- Invalid header field length -- Longitud del camp de capçalera no vàlida -- -- -- Invalid header data length -- Longitud de dades de la capçalera no vàlida -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- -- -- -- Invalid header checksum size -- -- -- -- Header SHA256 mismatch -- -- -- -- Unknown cipher -- -- -- -- Invalid header id size -- Mida de l'id de capçalera no vàlid -- -- -- Invalid header field length -- Longitud del camp de capçalera no vàlid -- -- -- Invalid header data length -- Longitud de dades de la capçalera no vàlida -- -- -- Failed to open buffer for KDF parameters in header -- -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- -- Legacy header fields found in KDBX4 file. -- -- -- -- Invalid inner header id size -- Mida de l'identificador intern d'encapçalament no vàlida -- -- -- Invalid inner header field length -- -- -- -- Invalid inner header binary size -- -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algorisme de xifrat simètric no vàlid. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- -- -- -- Invalid compression flags length -- -- -- -- Unsupported compression algorithm -- Algoritme de compressió no admès -- -- -- Invalid master seed size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid transform rounds size -- -- -- -- Invalid start bytes size -- -- -- -- Invalid random stream id size -- -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- No és una base de dades KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- El fitxer seleccionat és una base de dades KeePass 1 antiga (.kdb). -- --Podeu importar-la fent clic a la base de dades > "importar base de dades KeePass 1...". --Es tracta d'una migració unidireccional. No obrir la base de dades importada amb la antiga versió KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- -- -- -- Failed to read database file. -- -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- -- -- -- No root group -- No hi ha cap grup arrel -- -- -- Missing icon uuid or data -- -- -- -- Missing custom data key or value -- -- -- -- Multiple group elements -- Múltiples elements de grup -- -- -- Null group uuid -- -- -- -- Invalid group icon number -- -- -- -- Invalid EnableAutoType value -- Valor d'EnableAutoType invàlid -- -- -- Invalid EnableSearching value -- -- -- -- No group uuid found -- -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- -- -- -- History element in history entry -- -- -- -- No entry uuid found -- -- -- -- History element with different uuid -- -- -- -- Duplicate custom attribute found -- -- -- -- Entry string key or value missing -- -- -- -- Entry binary key or value missing -- -- -- -- Auto-type association window or sequence missing -- -- -- -- Invalid bool value -- -- -- -- Invalid date time value -- -- -- -- Invalid color value -- -- -- -- Invalid color rgb part -- -- -- -- Invalid number value -- -- -- -- Invalid uuid value -- -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- -- -- -- XML error: --%1 --Line %2, column %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Fitxer massa gran per ser una clau privada -- -- -- Failed to open private key -- No s'ha pogut obrir la clau privada -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- No es pot obrir la base de dades. -- -- -- Import KeePass1 Database -- Importa una base de dades de KeePass 1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- No es pot llegir el fitxer de claus. -- -- -- Not a KeePass database. -- No és una base de dades KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritme d'encriptació no admès. -- -- -- Unsupported KeePass database version. -- Versió de base de dades KeePass no admesa. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- -- -- -- Invalid number of groups -- -- -- -- Invalid number of entries -- -- -- -- Invalid content hash size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid number of transform rounds -- -- -- -- Unable to construct group tree -- -- -- -- Root -- Arrel -- -- -- Key transformation failed -- -- -- -- Invalid group field type number -- -- -- -- Invalid group field size -- -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- -- -- -- Incorrect group icon field size -- -- -- -- Incorrect group level field size -- -- -- -- Invalid group field type -- -- -- -- Missing group id or level -- -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- -- -- -- Read entry field data doesn't match size -- -- -- -- Invalid entry uuid field size -- -- -- -- Invalid entry group id field size -- -- -- -- Invalid entry icon field size -- -- -- -- Invalid entry creation time field size -- -- -- -- Invalid entry modification time field size -- -- -- -- Invalid entry expiry time field size -- -- -- -- Invalid entry field type -- -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Importat de %1 -- -- -- Exported to %1 -- Exportat a %1 -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- La importació està inhabilitada a la configuració -- -- -- Export is disabled in settings -- L'exportació està deshabilitada a la configuració -- -- -- Inactive share -- -- -- -- Imported from -- Importat de -- -- -- Exported to -- Exportat a -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- -- -- -- Key Component Description -- -- -- -- Cancel -- Cancel·lar -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- Afegeix %1 -- -- -- Change %1 -- Change a key component -- -- -- -- Remove %1 -- Remove a key component -- -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1: feu clic per canviar o eliminar -- -- -- -- KeyFileEditWidget -- -- Generate -- Genera -- -- -- Key File -- -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Podeu afegir un fitxer clau que contingui bytes aleatoris per afegir seguretat.</p><p>L'heu de mantenir secret i no perdre'l, sinó us quedareu tancats a fora!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Fitxers de clau -- -- -- All files -- Tots els fitxers -- -- -- Create Key File... -- Crea un arxiu clau... -- -- -- Error creating key file -- -- -- -- Unable to create key file: %1 -- -- -- -- Select a key file -- Seleccioneu un fitxer clau -- -- -- Key file selection -- Selecciona el fitxer clau... -- -- -- Browse for key file -- -- -- -- Browse... -- Navega... -- -- -- Generate a new key file -- Genera un fitxer clau nou -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Nota: no utilitzeu un fitxer que pugui canviar perquè faria que no poguéssiu desbloquejar la base de dades! -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Base de dades -- -- -- &Help -- &Ajuda -- -- -- &Groups -- &Grups -- -- -- &Tools -- &Eines -- -- -- &Quit -- Tanca -- -- -- &About -- &Quant a -- -- -- Database settings -- Configuració de la base de dades -- -- -- Copy username to clipboard -- Còpia el nom d'usuari al porta-retalls -- -- -- Copy password to clipboard -- Còpia la contrasenya al porta-retalls -- -- -- &Settings -- &Configuració -- -- -- &Title -- &Títol -- -- -- Copy title to clipboard -- Copia el títol al porta-retalls -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copia l'URL al porta-retalls -- -- -- &Notes -- &Notes -- -- -- Copy notes to clipboard -- Copia les notes al porta-retalls -- -- -- Copy &TOTP -- Còpia &TOTP -- -- -- E&mpty recycle bin -- -- -- -- Clear history -- Esborra l'historial -- -- -- Access error for config file %1 -- Error d'accés al fitxer de configuració %1 -- -- -- Settings -- Configuració -- -- -- Toggle window -- Activar finestra -- -- -- Quit KeePassXC -- Tanca KeePassXC -- -- -- Please touch the button on your YubiKey! -- Per favor, toqueu el botó en el seu YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ATENCIÓ: esteu utilitzant una versió inestable de KeePassXC! --Hi ha un alt risc de corrupció, manteniu una còpia de seguretat de les vostres bases de dades. --Aquesta versió no està pensada per usar-se en producció. -- -- -- &Donate -- Fes un &donatiu -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- & Importa -- -- -- Create a new database -- Crea una nova base de dades -- -- -- Merge from another KDBX database -- Fusiona amb una altra base de dades KDBX -- -- -- Add a new entry -- Afegeix una nova entrada -- -- -- View or edit entry -- Mostra o edita l'entrada -- -- -- Add a new group -- Afegeix un grup nou -- -- -- Perform &Auto-Type -- Fes una compleció automàtica -- -- -- Open &URL -- Obre la &URL -- -- -- Import a KeePass 1 database -- Importa una base de dades de KeePass 1 -- -- -- Import a CSV file -- Importa un fitxer CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTA: esteu utilitzant una versió preliminar de KeePassXC! --Podeu esperar alguns errors i incidències menors. Aquesta versió no està pensada per a un ús en producció. -- -- -- Check for updates on startup? -- Voleu comprovar si hi ha actualitzacions a l'inici? -- -- -- Would you like KeePassXC to check for updates on startup? -- Voleu que KeePassXC comprovi si hi ha actualitzacions a l'inici? -- -- -- You can always check for updates manually from the application menu. -- Sempre pots comprovar si hi ha actualitzacions manualment als menús de l'aplicació. -- -- -- &Export -- &Exporta -- -- -- Sort &A-Z -- Ordena &A-Z -- -- -- Sort &Z-A -- Ordena &Z-A -- -- -- &Password Generator -- Generador de contrasenyes -- -- -- Import a 1Password Vault -- Importa un 1Password Vault -- -- -- &Getting Started -- Primers passos -- -- -- &User Guide -- Guia d'&usuari -- -- -- &Keyboard Shortcuts -- Dreceres de teclat -- -- -- &Recent Databases -- Bases de dades &recents -- -- -- &Entries -- &Entrades -- -- -- Copy Att&ribute -- Copia l'&atribut -- -- -- TOTP -- TOTP -- -- -- View -- Visualització -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Comprova si hi ha actualitzacions -- -- -- &Open Database… -- &Obre la base de dades… -- -- -- &Save Database -- De&sa la base de dades -- -- -- &Close Database -- Tanca la base de dades -- -- -- &New Database… -- Base de dades &nova -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- &Nova entrada... -- -- -- &Edit Entry… -- &Edita l'entrada… -- -- -- &Delete Entry… -- Elimina l'entrada… -- -- -- &New Group… -- &Nou grup… -- -- -- &Edit Group… -- &Edita el grup… -- -- -- &Delete Group… -- Elimina el grup… -- -- -- Download All &Favicons… -- Baixa tots els &Favicons… -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- &Seguretat de la base de dades... -- -- -- Database &Reports... -- Informes de la base de dades... -- -- -- Statistics, health check, etc. -- Estadístiques, comprovació de salut, etc. -- -- -- &Database Settings… -- Configuració de la base de dades… -- -- -- &Clone Entry… -- &Clona l'entrada… -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- Copia el nom d'&usuari -- -- -- Copy &Password -- Copia la contrasenya -- -- -- Download &Favicon -- Descarrega el &Favicon -- -- -- &Lock Databases -- Bloqueja les bases de dades -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Mostra TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- Informeu d'un error -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- Ajuda &online -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- Desa una còpia de la base de dades... -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- Mode compacte -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- Mostra la barra d'eines -- -- -- Show Preview Panel -- Mostra el plafó de vista prèvia -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- Sempre a la part superior -- -- -- Hide Usernames -- Oculta els noms d'usuari -- -- -- Hide Passwords -- Oculta les contrasenyes -- -- -- -- ManageDatabase -- -- Database settings -- Configuració de la base de dades -- -- -- Edit database settings -- Edita la configuració de la base de dades -- -- -- Unlock database -- Desbloqueja la base de dades -- -- -- Unlock database to show more information -- -- -- -- Lock database -- Bloqueja la base de dades -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- entrada antiga fusionada de la base de dades "%1" -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- -- -- -- Root -- Root group -- Arrel -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades. -- -- -- Advanced Settings -- Configuració avançada -- -- -- Simple Settings -- -- -- -- Encryption Settings -- Configuració del xifrat -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Opcions de xifrat -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informació general de la base de dades -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- -- -- -- PEM boundary mismatch -- -- -- -- Base64 decoding failed -- -- -- -- Key file way too small. -- -- -- -- Key file magic header id invalid -- -- -- -- Found zero keys -- -- -- -- Failed to read public key. -- -- -- -- Corrupted key file, reading private key failed -- -- -- -- No private key payload to decrypt -- -- -- -- Trying to run KDF without cipher -- -- -- -- Passphrase is required to decrypt this key -- Cal la contrasenya per desxifrar aquesta clau -- -- -- Key derivation failed, key file corrupted? -- -- -- -- Decryption failed, wrong passphrase? -- El desxifrat ha fallat, la frase de contrasenya és errònia? -- -- -- Unexpected EOF while reading public key -- -- -- -- Unexpected EOF while reading private key -- -- -- -- Can't write public key as it is empty -- -- -- -- Unexpected EOF when writing public key -- -- -- -- Can't write private key as it is empty -- -- -- -- Unexpected EOF when writing private key -- -- -- -- Unsupported key type: %1 -- -- -- -- Unknown cipher: %1 -- -- -- -- Cipher IV is too short for MD5 kdf -- -- -- -- Unknown KDF: %1 -- -- -- -- Unknown key type: %1 -- -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Introduïu la contrasenya: -- -- -- Confirm password: -- Confirma la contrasenya: -- -- -- Password -- Contrasenya -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- -- -- -- Password field -- Camp de contrasenya -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p % -- -- -- strength -- Password strength -- força -- -- -- entropy -- entropia -- -- -- Password -- Contrasenya -- -- -- Character Types -- Tipus de caràcter -- -- -- Numbers -- Números -- -- -- Extended ASCII -- ASCII estès -- -- -- Exclude look-alike characters -- Excloure caràcters d'aspecte semblant -- -- -- Pick characters from every group -- Tria caràcters de tots els grups -- -- -- &Length: -- &Longitud: -- -- -- Passphrase -- Contrasenya -- -- -- Wordlist: -- Llista de paraules: -- -- -- Word Separator: -- Separador de paraula: -- -- -- Close -- Tanca -- -- -- Entropy: %1 bit -- Entropia: %1 bit(s) -- -- -- Password Quality: %1 -- Qualitat de la contrasenya: %1 -- -- -- Poor -- Password quality -- Pobre -- -- -- Weak -- Password quality -- Feble -- -- -- Good -- Password quality -- Bona -- -- -- Excellent -- Password quality -- Excel·lent -- -- -- Switch to advanced mode -- Canvia al mode avançat -- -- -- Advanced -- Avançat -- -- -- Braces -- -- -- -- Punctuation -- -- -- -- Quotes -- -- -- -- Logograms -- -- -- -- Character set to exclude from generated password -- -- -- -- Do not include: -- No incloure: -- -- -- Add non-hex letters to "do not include" list -- Afegeix caràcters no-hexadecimals a la llista "no incloure" -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- -- Generated password -- -- -- -- Upper-case letters -- Lletra majúscula -- -- -- Lower-case letters -- Lletra minúscula -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- Caràcters exclosos -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- Copia la contrasenya -- -- -- lower case -- minúscules -- -- -- UPPER CASE -- MAJÚSCULES -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- Nombre de paraules: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- Caràcters especials -- -- -- -- QApplication -- -- KeeShare -- -- -- -- Statistics -- Estadístiques -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- La contrasenya està a punt de caducar -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- Comprovació de salut -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- -- -- -- Delete -- Suprimeix -- -- -- Move -- -- -- -- Empty -- -- -- -- Remove -- Suprimiu -- -- -- Skip -- -- -- -- Disable -- Inhabilita -- -- -- Merge -- Fusiona -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- -- -- -- Database hash not available -- -- -- -- Client public key not received -- -- -- -- Cannot decrypt message -- -- -- -- Action cancelled or denied -- Acció cancel·lada o denegada -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- -- -- -- Incorrect action -- -- -- -- Empty message received -- -- -- -- No URL provided -- -- -- -- No logins found -- -- -- -- Unknown error -- Error desconegut -- -- -- Add a new entry to a database. -- -- -- -- Path of the database. -- Camí de la base de dades. -- -- -- Key file of the database. -- -- -- -- path -- -- -- -- Username for the entry. -- Nom d'usuari de l'entrada. -- -- -- username -- -- -- -- URL for the entry. -- -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- -- -- -- Generate a password for the entry. -- -- -- -- length -- -- -- -- Path of the entry to add. -- -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- -- -- -- Timeout in seconds before clearing the clipboard. -- -- -- -- Edit an entry. -- Edita una entrada. -- -- -- Title for the entry. -- -- -- -- title -- títol -- -- -- Path of the entry to edit. -- Ruta de l'entrada a editar. -- -- -- Estimate the entropy of a password. -- -- -- -- Password for which to estimate the entropy. -- -- -- -- Perform advanced analysis on the password. -- Fes una anàlisi avançada de la contrasenya. -- -- -- -- --Available commands: -- -- -- -- -- Name of the command to execute. -- Nom de l'ordre a executar. -- -- -- List database entries. -- Llista les entrades de la base de dades. -- -- -- Path of the group to list. Default is / -- Camí del grup a llistar. Per defecte és / -- -- -- Find entries quickly. -- -- -- -- Search term. -- Terme de cerca. -- -- -- Merge two databases. -- Fusiona dues bases de dades -- -- -- Path of the database to merge from. -- Camí de la base de dades de destí a fusionar. -- -- -- Use the same credentials for both database files. -- -- -- -- Key file of the database to merge from. -- Fitxer clau de la base de dades amb la que es fusiona. -- -- -- Show an entry's information. -- -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- -- -- -- attribute -- -- -- -- Name of the entry to show. -- Nom de l'entrada a mostrar. -- -- -- NULL device -- Dispositiu nul -- -- -- error reading from device -- error de lectura del dispositiu -- -- -- malformed string -- cadena mal formada -- -- -- missing closing quote -- falta la cometa de tancament -- -- -- Group -- Grup -- -- -- Title -- Títol -- -- -- Username -- Nom d'usuari -- -- -- Password -- Contrasenya -- -- -- Notes -- Notes -- -- -- Last Modified -- Darrera modificació -- -- -- Created -- Creat -- -- -- Browser Integration -- Integració amb el navegador -- -- -- SSH Agent -- Agent SSH -- -- -- Generate a new random diceware passphrase. -- Genera una frase de contrasenya nova amb llançament de daus. -- -- -- Word count for the diceware passphrase. -- Recompte de paraules per a la frase de contrasenya amb llançament de daus. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Llista de paraules per al generador de llançament de daus. --[Per defecte: EFF English] -- -- -- Generate a new random password. -- -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- L'entrada %1 s'ha editat correctament. -- -- -- Length %1 -- -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- Longitud de la contrasenya generada -- -- -- Use lowercase characters -- Usa lletres en minúscula -- -- -- Use uppercase characters -- Usa caràcters en majúscules -- -- -- Use special characters -- Usa caràcters especials -- -- -- Use extended ASCII -- Usa l'ASCII ampliat -- -- -- Exclude character set -- Exclou el conjunt de caràcters -- -- -- chars -- caràcters -- -- -- Exclude similar looking characters -- Exclou caràcters d'aspecte similar -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- -- -- -- Error reading merge file: --%1 -- Error en la lectura del fitxer de fusió: --%1 -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- L'entrada %1 s'ha suprimit correctament. -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- fitxer buit -- -- -- %1: (row, col) %2,%3 -- -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3,1) -- -- -- Invalid Settings -- TOTP -- La configuració no és vàlida -- -- -- Invalid Key -- TOTP -- Clau no vàlida -- -- -- Message encryption failed. -- -- -- -- No groups found -- -- -- -- Create a new database. -- Crea una nova base de dades. -- -- -- File %1 already exists. -- -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- Ruta de l'entrada a eliminar. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- El fitxer de bloqueig d'instància única no és vàlid. Execute una instància nova. -- -- -- The lock file could not be created. Single-instance mode disabled. -- No s'ha pogut crear l'arxiu de bloqueig. Inhabilitat el mode de instància única. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - gestor de contrasenyes multi-plataforma -- -- -- filenames of the password databases to open (*.kdbx) -- Noms de les bases de dades de contrasenya per a obrir (*.kdbx) -- -- -- path to a custom config file -- camí cap a un fitxer personalitzat de configuració -- -- -- key file of the database -- Arxiu clau de la base de dades -- -- -- read password of the database from stdin -- llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) -- -- -- Another instance of KeePassXC is already running. -- Ja s'està executant una altra instància de KeePassXC. -- -- -- Fatal error while testing the cryptographic functions. -- Error mentre es provava les funcions criptogràfiques. -- -- -- KeePassXC - Error -- KeePassXC - Error -- -- -- Database password: -- -- -- -- Cannot create new group -- No es pot crear un grup nou -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- Desactiva la clau per la base de dades que volem fusionar. -- -- -- Version %1 -- -- -- -- Build Type: %1 -- -- -- -- Revision: %1 -- Revisió: %1 -- -- -- Distribution: %1 -- Distribució: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistema operatiu: %1 --Arquitectura de la CPU: %2 --Nucli: %3 %4 -- -- -- Auto-Type -- Compleció automàtica -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- -- -- -- TouchID -- -- -- -- None -- -- -- -- Enabled extensions: -- Extensions habilitades: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- Afegeix un grup nou a una base de dades. -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- Tanca la base de dades oberta. -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- La base de dades s'ha importat correctament. -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- Mostra només els canvis detectats per l'operació de fusió. -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- S'ha fusionat amb èxit %1 a %2. -- -- -- Database was not modified by merge operation. -- La base de dades no s'ha modificat amb l'operació de fusionat. -- -- -- Moves an entry to a new group. -- Mou una entrada a un grup nou. -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- No es pot suprimir el grup arrel de la base de dades. -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icona -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Error intern de zlib mentre s'estava comprimint. -- -- -- Error writing to underlying device: -- Error d'escriptura al dispositiu subjacent: -- -- -- Error opening underlying device: -- Error a l'obrir el dispositiu subjacent: -- -- -- Error reading data from underlying device: -- Error de lectura al dispositiu subjacent: -- -- -- Internal zlib error when decompressing: -- Error intern de zlib al descomprimir: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- gzip no és un format compatible amb aquesta versió de zlib. -- -- -- Internal zlib error: -- Error intern de zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Poseu-vos damunt del motiu per veure més detalls. Feu doble clic per editar l'entrada. -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Pobre -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Feble -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Títol -- -- -- Path -- Camí -- -- -- Score -- Puntuació -- -- -- Reason -- Motiu -- -- -- Edit Entry... -- Edita l'entrada... -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Títol -- -- -- Path -- Camí -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- Edita l'entrada... -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Nom -- -- -- Value -- Valor -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- Nom de la base de dades -- -- -- Description -- Descripció -- -- -- Location -- Ubicació -- -- -- Last saved -- Desat per darrera vegada -- -- -- Unsaved changes -- Canvis no desats -- -- -- yes -- -- -- -- no -- no -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- Nombre de grups -- -- -- Number of entries -- Nombre d'entrades -- -- -- Number of expired entries -- Nombre d'entrades caducades -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- Contrasenyes úniques -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- Nombre de contrasenyes curtes -- -- -- Recommended minimum password length is at least 8 characters. -- La longitud mínima recomanada de la contrasenya és d'almenys 8 caràcters. -- -- -- Number of weak passwords -- Nombre de contrasenyes febles -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- Longitud mitjana de les contrasenyes -- -- -- %1 characters -- %1 caràcters -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- La longitud mitjana de les contrasenyes és inferior a 10 caràcters. Les contrasenyes més llargues proporcionen més seguretat. -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Cerca l'ajuda -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Els termes de cerca són així: [modificadors] [camp:] ["] terme ["] -- -- -- Every search term must match (ie, logical AND) -- Cada terme de cerca ha de coincidir (p.e. I lògica) -- -- -- Modifiers -- Modificadors -- -- -- exclude term from results -- exclou el terme dels resultats -- -- -- match term exactly -- el terme ha de coincidir exactament -- -- -- use regex in term -- usa regex al terme -- -- -- Fields -- -- -- -- Term Wildcards -- Comodins -- -- -- match anything -- concorda amb qualsevol cosa -- -- -- match one -- concorda amb un -- -- -- logical OR -- operador lògic O -- -- -- Examples -- -- -- -- -- SearchWidget -- -- Search -- Cerca -- -- -- Limit search to selected group -- Limitar la cerca al grup seleccionat -- -- -- Search Help -- Cerca l'ajuda -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Cerca (%1)... -- -- -- Case sensitive -- -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Habilita la integració amb el Freedesktop.org Secret Service -- -- -- General -- General -- -- -- Show notification when credentials are requested -- Mostra una notificació quan es demanen credencials -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- Autorització -- -- -- These applications are currently connected: -- Aquestes aplicacions estan ara connectades: -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- -- -- -- Allow export -- Permet l'exportació -- -- -- Allow import -- Permet la importació -- -- -- Own certificate -- Certificat propi -- -- -- Fingerprint: -- -- -- -- Certificate: -- Certificat: -- -- -- Signer -- Signant -- -- -- Key: -- Clau: -- -- -- Generate -- Genera -- -- -- Import -- Importa -- -- -- Export -- Exporta -- -- -- Imported certificates -- Certificats importats -- -- -- Trust -- Confia -- -- -- Ask -- Pregunta -- -- -- Untrust -- Desconfia -- -- -- Remove -- Suprimiu -- -- -- Path -- Camí -- -- -- Status -- Estat -- -- -- Fingerprint -- Empremta digital -- -- -- Certificate -- Certificat -- -- -- Trusted -- De confiança -- -- -- Untrusted -- No és de confiança -- -- -- Unknown -- -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- -- -- -- All files -- Tots els fitxers -- -- -- Select path -- -- -- -- Exporting changed certificate -- Exportant el certificat modificat -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- El certificat exportat no és el mateix que el que està en ús. Voleu exportar el certificat actual? -- -- -- Signer: -- Signant: -- -- -- Allow KeeShare imports -- Permet les importacions de KeeShare -- -- -- Allow KeeShare exports -- Permet les exportacions de KeeShare -- -- -- Only show warnings and errors -- Mostra només els avisos i els errors -- -- -- Key -- Clau -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- Importa des del contenidor amb certificat -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Voleu confiar en %1 amb l'empremta digital %2 de %3? {1?} {2?} -- -- -- Not this time -- -- -- -- Never -- Mai -- -- -- Always -- -- -- -- Just this time -- -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- S'ha evitat una importació que no era de confiança -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- La importació sense signar s'ha realitzat amb èxit -- -- -- File does not exist -- El fitxer no existeix -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- La importació de %1 ha fallat (%2) -- -- -- Import from %1 successful (%2) -- -- -- -- Imported from %1 -- Importat de %1 -- -- -- Export to %1 failed (%2) -- L'exportació a %1 ha fallat (%2) -- -- -- Export to %1 successful (%2) -- L'exportació a %1 s'ha realitzat amb èxit (%2) -- -- -- Export to %1 -- Exporta a %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Contrasenya per temps -- -- -- 000000 -- 000000 -- -- -- Copy -- Còpia -- -- -- Expires in <b>%n</b> second(s) -- Caduca en <b>%n</b> segonCaduca en <b>%n</b> segons -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Còpia -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTA: aquestes configuracions del TOTP són personalitzades i pot ser que no funcionin amb altres autentificadors. -- -- -- There was an error creating the QR code. -- -- -- -- Closing in %1 seconds. -- Tancant en %1 segons. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Organització TOTP -- -- -- Default RFC 6238 token settings -- Configuració per defecte amb token RFC 6238 -- -- -- Steam token settings -- Configuració amb token d'Steam -- -- -- Use custom settings -- Utilitza la configuració personalitzada -- -- -- Custom Settings -- Paràmetres a mida -- -- -- Time step: -- Intervals: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Mida del codi: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritme: -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Esteu segur que voleu suprimir la configuració TOTP de l'entrada? -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Comprovant si hi ha actualitzacions -- -- -- Checking for updates... -- Comprovant si hi ha actualitzacions... -- -- -- Close -- Tanca -- -- -- Update Error! -- Error d'actualització! -- -- -- An error occurred in retrieving update information. -- S'ha produït un error en recuperar la informació d'actualització. -- -- -- Please try again later. -- Si us plau, proveu-ho altre cop més tard. -- -- -- Software Update -- Actualització de programari -- -- -- A new version of KeePassXC is available! -- Hi ha disponible una nova versió de KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- -- -- -- Download it at keepassxc.org -- Descarregueu-ho a keepassxc.org -- -- -- You're up-to-date! -- Esteu actualitzats! -- -- -- KeePassXC %1 is currently the newest version available -- -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Comenceu a emmagatzemar les vostres contrasenyes de manera segura en una base de dades KeePassXC -- -- -- Create new database -- Crea una nova base de dades -- -- -- Open existing database -- Obre una base de dades existent -- -- -- Import from KeePass 1 -- Importa de KeePass 1 -- -- -- Import from CSV -- Importa d'un fitxer CSV -- -- -- Recent databases -- Bases de dades obertes recentment -- -- -- Welcome to KeePassXC %1 -- Benvinguts/des al KeePassXC %1 -- -- -- Import from 1Password -- Importa des de 1Password -- -- -- Open a recent database -- Obre una base de dades recent -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Prem -- -- -- Passive -- Passiu -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Actualitza -- -- -- YubiKey Challenge-Response -- Comprovació-resposta YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Si teniu una <a href="https://www.yubico.com/">Yubikey</a>, la podeu usar com a seguretat addicional.</p><p>La YubiKey necessita que una de les seves ranures es programi com a <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> comprovació-resposta HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Refresca els testimonis de maquinari -- -- -- Hardware key slot selection -- Selecció de la ranura de la motxilla -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_cs.ts keepassxc-2.6.4-patched/share/translations/keepassx_cs.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_cs.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_cs.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7899 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- O KeePassXC -- -- -- About -- O aplikaci -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Chyby hlaste na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC je šířeno pod GNU obecnou veřejnou licencí (GPL) verze 2 a (případně) 3. -- -- -- Contributors -- Na vývoji se podíleli -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Viz přispěvatelé na portálu GitHub</a> -- -- -- Debug Info -- Ladící informace -- -- -- Include the following information whenever you report a bug: -- K hlášení chyby vždy připojte následující údaje: -- -- -- Copy to clipboard -- Zkopírovat do schránky -- -- -- Project Maintainers: -- Správci projektu: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Tým KeePassXC děkuje zvláště vývojáři debfx za vytvoření původního KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Použít namísto Pagent raději OpenSSH pro Windows -- -- -- Enable SSH Agent integration -- Zapnout integraci s SSH agentem -- -- -- SSH_AUTH_SOCK value -- hodnota SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- přepsání SSH_AUTH_SOCK -- -- -- (empty) -- (prázdné) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Není k dispozici žádný soket SSH agenta. Buď ověřte, zda existuje proměnná prostředí SSH_AUTH_SOCK nebo nastavte její přepsání. -- -- -- SSH Agent connection is working! -- Spojení s SSH agentem funguje! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Nastavení aplikace -- -- -- General -- Obecné -- -- -- Security -- Zabezpečení -- -- -- Access error for config file %1 -- Chyba přístupu k souboru s nastaveními %1 -- -- -- Icon only -- Pouze ikona -- -- -- Text only -- Pouze text -- -- -- Text beside icon -- Text vedle ikony -- -- -- Text under icon -- Text pod ikonou -- -- -- Follow style -- Styl následování -- -- -- Reset Settings? -- Vrátit nastavení do výchozích hodnot? -- -- -- Are you sure you want to reset all general and security settings to default? -- Opravdu chcete vrátit veškerá obecná nastavení a nastavení zabezpečení do výchozích hodnot? -- -- -- Monochrome (light) -- Černobílá (světlá) -- -- -- Monochrome (dark) -- Černobílá (tmavá) -- -- -- Colorful -- Barevná -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Aby se změna jazyka projevila, je třeba aplikaci restartovat. Chcete to provést nyní? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Základní nastavení -- -- -- Startup -- Spouštění -- -- -- Start only a single instance of KeePassXC -- Spouštět pouze jedinou instanci KeePassXC -- -- -- Minimize window at application startup -- Spouštět aplikaci s minimalizovaným oknem -- -- -- File Management -- Správa souboru -- -- -- Backup database file before saving -- Před uložením zazálohovat databázový soubor -- -- -- Automatically save after every change -- Po každé změně hned automaticky uložit -- -- -- Automatically reload the database when modified externally -- V případě úpravy zvenčí, automaticky znovu načíst databázi -- -- -- Entry Management -- Správa záznamu -- -- -- Use group icon on entry creation -- Pro vytvářený záznam použít ikonu skupiny, pod kterou je vytvářen -- -- -- Minimize instead of app exit -- Namísto ukončení aplikaci minimalizovat -- -- -- Show a system tray icon -- Zobrazovat ikonu v oznamovací oblasti systémového panelu -- -- -- Hide window to system tray when minimized -- Minimalizovat okno aplikace do oznamovací oblasti systémového panelu -- -- -- Auto-Type -- Automatické vyplňování -- -- -- Use entry title to match windows for global Auto-Type -- Použít titulek položky pro hledání shody s okny pro globální automatické vyplňování -- -- -- Use entry URL to match windows for global Auto-Type -- Použít URL adresu položky pro hledání shody s okny pro globální automatické vyplňování -- -- -- Always ask before performing Auto-Type -- Vždy se zeptat před provedením automatického vyplnění -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Přesouvatelná lišta nástrojů -- -- -- Remember previously used databases -- Pamatovat si minule použité databáze -- -- -- Load previously open databases on startup -- Při spuštění načíst minule otevřené databáze -- -- -- Remember database key files and security dongles -- Pamatovat si soubory s klíči k databázím a hardwarová bezpečnostní zařízení -- -- -- Check for updates at application startup once per week -- Zjišťovat dostupnost aktualizací aplikace (při spouštění) jednou týdně -- -- -- Include beta releases when checking for updates -- Při zjišťování případných aktualizací brát v potaz i vývojové testovací verze -- -- -- Language: -- Jazyk: -- -- -- (restart program to activate) -- (pro aktivaci je třeba aplikaci ukončit a spustit znovu) -- -- -- Minimize window after unlocking database -- Po odemčení databáze okno minimalizovat -- -- -- Minimize when opening a URL -- Při otevírání URL okno minimalizovat -- -- -- Hide window when copying to clipboard -- Po zkopírování do schránky okno zminimalizovat -- -- -- Minimize -- Minimalizovat -- -- -- Drop to background -- Upustit na pozadí -- -- -- Favicon download timeout: -- Časový limit stažení ikony webu -- -- -- Website icon download timeout in seconds -- Časový limit (v sekundách) pro stažení ikony webu -- -- -- sec -- Seconds -- sek. -- -- -- Toolbar button style -- Styl tlačítek na liště nástrojů -- -- -- Language selection -- Výběr jazyka -- -- -- Global auto-type shortcut -- Zkratka pro globální automatické vyplňování -- -- -- Auto-type character typing delay milliseconds -- Prodleva (ms) mezi zadáváním jednotlivých znaků při automatickém vyplňování -- -- -- Auto-type start delay milliseconds -- Prodleva (v milisekundách) zahájení automatického vyplňování -- -- -- Automatically launch KeePassXC at system startup -- Automaticky spustit KeePassXC po startu systému -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Bezpečné ukládání souborů databáze (vypněte pokud narážíte na problémy s Dropobox, atp.) -- -- -- User Interface -- Uživatelské rozhraní -- -- -- Toolbar button style: -- Styl tlačítek na liště nástrojů: -- -- -- Use monospaced font for notes -- Pro poznámky použít písmo se všemi znaky stejně širokými -- -- -- Tray icon type: -- Typ ikony v oznamovací oblasti: -- -- -- Reset settings to default… -- Vrátit nastavení do výchozích hodnot… -- -- -- Auto-Type typing delay: -- Prodleva automatického vyplnění: -- -- -- Global Auto-Type shortcut: -- Klávesová zkratka pro všeobecné automatické vyplňování: -- -- -- Auto-Type start delay: -- Prodleva zahájení automatického vyplňování: -- -- -- Automatically save when locking database -- Při uzamykání databáze automaticky uložit -- -- -- Automatically save non-data changes when locking database -- Při uzamykání databáze automaticky uložit změny i ne v datech -- -- -- Tray icon type -- Typ ikony v oznamovací oblasti -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Časové limity -- -- -- Clear clipboard after -- Vymazat obsah schránky po uplynutí -- -- -- sec -- Seconds -- sek. -- -- -- Lock databases after inactivity of -- Uzamknout databázi při nečinnosti delší než -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Zapomenout TouchID po nečinnosti trvající -- -- -- Convenience -- Pohodlí -- -- -- Lock databases when session is locked or lid is closed -- Zamknout databáze při zamčení relace uživatele v operačním systému nebo je zavření víka notebooku -- -- -- Forget TouchID when session is locked or lid is closed -- Zapomenout TouchID při zamčení relace uživatele v operačním systému nebo při zavření víka notebooku -- -- -- Lock databases after minimizing the window -- Při minimalizaci okna uzamknout databáze -- -- -- Re-lock previously locked database after performing Auto-Type -- Po provedení automatického vyplnění databázi opět zamknout, pokud předtím byla uzamčena. -- -- -- Hide passwords in the entry preview panel -- Skrýt hesla v panelu náhledu položky -- -- -- Hide entry notes by default -- Skrývat ve výchozím stavu poznámky k položkám -- -- -- Privacy -- Soukromí -- -- -- Use DuckDuckGo service to download website icons -- Pro stahování ikon webů použít službu DuckDuckGo -- -- -- Clipboard clear seconds -- Za kolik sekund vyčistit schránku -- -- -- Touch ID inactivity reset -- Reset neaktivity Touch ID -- -- -- Database lock timeout seconds -- Časový limit (v sekundách) uzamčení databáze -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Vyčistit vyhledávací dotaz po uplynutí -- -- -- Require password repeat when it is visible -- Vyžadovat zopakování zadání hesla, i když je viditelné, -- -- -- Hide passwords when editing them -- Skrývat hesla při jejich upravování -- -- -- Use placeholder for empty password fields -- Používat pro prázdné kolonky pro heslo zástupnou výplň -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nedaří se nalézt záznam, který by se shodoval s titulkem okna: -- -- -- Auto-Type - KeePassXC -- Automatické vyplňování – KeePassXC -- -- -- Auto-Type -- Automatické vyplňování -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Neplatná syntaxe vyjádření automatického vyplňování! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Tento příkaz automatického vyplňování obsahuje velmi dlouhou prodlevu. Opravdu chcete pokračovat? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Tento příkaz automatického vyplňování obsahuje velmi pomalé stisky kláves. Opravdu chcete pokračovat? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Tento příkaz automatického vyplňování obsahuje argumenty, které se velmi často opakují. Opravdu chcete pokračovat? -- -- -- Permission Required -- Jsou zapotřebí oprávnění -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC vyžaduje oprávnění ke Zpřístupnění, aby mohlo být prováděno automatické vyplňování na úrovni položky. Pokud jste toto oprávnění už udělili, může být třeba ještě KeePassXC restartovat. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Okno -- -- -- Sequence -- Pořadí -- -- -- Default sequence -- Výchozí pořadí -- -- -- -- AutoTypeMatchModel -- -- Group -- Skupina -- -- -- Title -- Titulek -- -- -- Username -- Uživatelské jméno -- -- -- Sequence -- Posloupnost -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Zkopírovat &uživatelské jméno -- -- -- Copy &password -- Zko&pírovat heslo -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Jsou zapotřebí oprávnění -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC vyžaduje oprávnění ke Zpřístupnění a „Nahrávání obrazovky“, aby mohlo být prováděno globální automatické vyplňování. Nahrávání obrazovky je nezbytné pro použití nadpisu okna pro vyhledávání položek v databázi. Pokud jste tato oprávnění už udělili, může být třeba ještě KeePassXC restartovat. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automatické vyplňování – KeePassXC -- -- -- Select entry to Auto-Type: -- Vyberte záznam, kterým se bude automaticky vyplňovat: -- -- -- Search... -- Hledat… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC – požadavek na přístup prohlížeče -- -- -- %1 is requesting access to the following entries: -- %1 žádá přístup k následujícím záznamům: -- -- -- Remember access to checked entries -- Zapamatovat přístup k zaškrtnutým položkám -- -- -- Remember -- Zapamatovat -- -- -- Allow access to entries -- Umožnit přístup k záznamům -- -- -- Allow Selected -- Povolit vybrané -- -- -- Deny All -- Odepřít vše -- -- -- Disable for this site -- Vypnout pro tuto stránku -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Uložit položku -- -- -- Ok -- Ok -- -- -- Cancel -- Zrušit -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Máte otevřeno vícero databází. --Vyberte databázi, do které chcete přihlašovací údaje uložit. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nový požadavek na přiřazení klíče -- -- -- Save and allow access -- Uložit a umožnit přístup -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Přepsat stávající klíč? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Sdílený šifrovací klíč nazvaný „%1“ už existuje. --Přejete si ho přepsat? -- -- -- KeePassXC: Update Entry -- KeePassXC: Aktualizovat záznam -- -- -- Do you want to update the information in %1 - %2? -- Chcete aktualizovat údaj v %1 – %2? -- -- -- Abort -- Přerušit -- -- -- Converting attributes to custom data… -- Převádění atributů na uživatelsky určená data… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Převedené KeePassHTTP atributy -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Úspěšně převedeny atributy z %1 položek. --Přesunuto %2 klíčů do uživatelsky určených dat. -- -- -- Successfully moved %n keys to custom data. -- %n klíč úspěšně přesunut do uživatelsky určených dat.%n klíče úspěšně přesunuty do uživatelsky určených dat.%n klíčů úspěšně přesunuto do uživatelsky určených dat.%n klíčy úspěšně přesunuty do uživatelsky určených dat. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč -- -- -- KeePassXC: Create a new group -- KeePassXC: vytvořit novou skupinu -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Byl obdržen požadavek na vytvoření nové skupiny „%1“. --Chcete tuto skupinu vytvořit? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Vaše nastavení KeePassXC-Browser je třeba přesunout do nastavení databáze. --Toto je nezbytné pro zachování vašich stávajících spojení prohlížeče. --Chcete přenést vaše stávající nastavení nyní? -- -- -- Don't show this warning again -- Toto varování znovu nezobrazovat -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Obdrželi jste požadavek na asociaci pro následující databázi: --%1 -- --Dejte spojení neopakující se název nebo identifikátor, například: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Toto je potřebné pro přístup do vašich databází pomocí KeePassXC-Browser -- -- -- Enable browser integration -- Zapnout napojení na webový prohlížeč -- -- -- General -- Obecné -- -- -- Browsers installed as snaps are currently not supported. -- Prohlížeče, nainstalované formou snap balíčků, zatím nejsou podporované. -- -- -- Enable integration for these browsers: -- Zapnout propojení pro tyto prohlížeče: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Pokud jsou z prohlížeče vyžádány přihlašovací údaje, zobrazit upozornění -- -- -- Request to unlock the database if it is locked -- Pokud je uzamčená, požádat o odemčení databáze -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Je odpovězeno pouze položkami stejného schématu (http://, https://, …). -- -- -- Match URL scheme (e.g., https://...) -- Hledat shodu ve schématu URL (např., https://…) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Odpoví pouze nejlepšími shodami pro konkrétní URL adresu namísto všech položek pro celou doménu. -- -- -- Return only best-matching credentials -- Odpovědět pouze nejlépe odpovídajícími přihlašovacími údaji -- -- -- Returns expired credentials. String [expired] is added to the title. -- Vrátí přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired]. -- -- -- Allow returning expired credentials -- Umožnit poskytování i přihlašovacích údajů, kterým skončila platnost. -- -- -- All databases connected to the extension will return matching credentials. -- Odpovídající přihlašovací údaje budou poskytovány ze všech databází, napojených na toto rozšíření. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Hledat odpovídající přihlašovací údaje ve všech otevřených databázích -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Seřadit odpovídající přihlašovací údaje podle titulku -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Seřadit odpovídající přihlašovací údaje podle uživatelského jména -- -- -- Advanced -- Pokročilé -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nikdy se neptat před přístupem k přihlašovacím údajům -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nikdy se neptat před aktualizací přihlašovacích údajů -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Neptat se na oprávnění pro HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatické vytváření nebo aktualizace není u textových kolonek podporované! -- -- -- Return advanced string fields which start with "KPH: " -- Odpovědět také kolonkami pokročilých textových řetězců které začínají na „KPH: “ -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Nezobrazovat vyskakovací okno doporučující převedení nastavení ze starého KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Nedotazovat se na převedení nastavení z KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Při spuštění automaticky aktualizuje popis umístění spustitelného souboru s KeePassXC nebo keepassxc-proxy na skripty posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging). -- -- -- Update native messaging manifest files at startup -- Při spouštění aktualizovat soubory s manifestem posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging) -- -- -- Use a custom proxy location if you installed a proxy manually. -- Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelsky určené umístění. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Použít uživatelsky určené umístění zprostředkovávající aplikace -- -- -- Custom proxy location field -- Kolonka pro uživatelsky určené proxy umístění -- -- -- Browser for custom proxy file -- Nalistovat uživatelsky určený proxy soubor -- -- -- Browse... -- Button for opening file dialog -- Procházet… -- -- -- Use a custom browser configuration location: -- Použít uživatelsky určené umístění nastavení pro prohlížeč: -- -- -- Browser type: -- Typ prohlížeče: -- -- -- Toolbar button style -- Styl tlačítek na liště nástrojů -- -- -- Config Location: -- Umístění nastavení: -- -- -- Custom browser location field -- Kolonka uživatelsky určené umístění prohlížeče -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Nalistovat uživatelsky určený popis umístění prohlížeče -- -- -- Custom extension ID: -- Identif. uživatelsky určeného rozšíření: -- -- -- Custom extension ID -- Identif. uživatelsky určeného rozšíření -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Z důvodu, že software ze Snap balíčku je provozován v ohraničeném prostředí, je třeba spustit skript, který zapíná napojení na webový prohlížeč. <br />Tento skript je možné získat z %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Aby fungovalo napojení na prohlížeč, je třeba KeePassXC. <br /> Stáhnete ho pro %1 a %2 a %3. %4 -- -- -- Please see special instructions for browser extension use below -- Níže si přečtěte konkrétní pokyny pro rozšíření do webového prohlížeče -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Chyba:</b> Uživatelsky určené umístění proxy nenalezeno! <br/>Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Varování:</b> Následující předvolby mohou být nebezpečné! -- -- -- Executable Files -- Spustitelné soubory -- -- -- All Files -- Veškeré soubory -- -- -- Select custom proxy location -- Vybrat uživatelem určené umístění zprostředkovávající aplikace -- -- -- Select native messaging host folder location -- Vyberte umístění složky hostitele nativních zpráv -- -- -- -- CloneDialog -- -- Clone Options -- Předvolby klonu -- -- -- Append ' - Clone' to title -- Připojit k titulku „ – klon“ -- -- -- Replace username and password with references -- Nahradit uživatelské jméno a heslo těmi referenčními -- -- -- Copy history -- Kopírovat historii -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importovat CSV kolonky -- -- -- filename -- název souboru -- -- -- size, rows, columns -- velikost, řádky, sloupce -- -- -- Encoding -- Kódování znaků -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Text je zařazován pomocí -- -- -- Fields are separated by -- Kolonky jsou oddělovány pomocí -- -- -- Comments start with -- Komentáře začínají na -- -- -- Consider '\' an escape character -- Považovat „\“ za speciálního významu zbavující (escape) znak -- -- -- Preview -- Náhled -- -- -- Imported from CSV file -- Importováno z CSV souboru -- -- -- Original data: -- Původní data: -- -- -- Error -- Chyba -- -- -- Error(s) detected in CSV file! -- V CSV soubory byly zjištěny chyby! -- -- -- [%n more message(s) skipped] -- [%n další zpráva přeskočena][%n další zprávy přeskočeny][%n dalších zpráv přeskočeno][%n další zprávy přeskočeny] -- -- -- CSV import: writer has errors: --%1 -- CSV import: chyby zápisu: --%1 -- -- -- Text qualification -- Zařazování textu -- -- -- Field separation -- Oddělování kolonek -- -- -- Number of header lines to discard -- Počet řádků hlavičky, které zahodit -- -- -- CSV import preview -- Náhled importu CSV -- -- -- Column Association -- Přiřazení sloupce -- -- -- Last Modified -- Okamžik poslední úpravy -- -- -- Password -- Heslo -- -- -- Created -- Vytvořeno -- -- -- Notes -- Poznámky -- -- -- Title -- Titulek -- -- -- Group -- Skupina -- -- -- URL -- URL adresa -- -- -- Username -- Uživatelské jméno -- -- -- Header lines skipped -- Řádky se záhlavím přeskočeny -- -- -- First line has field names -- První řádek obsahuje názvy kolonek -- -- -- Not Present -- Není přitomno -- -- -- Column %1 -- Sloupec %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n sloupec%n sloupce%n sloupců%n sloupce -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bajt%n bajty%n bajtů%n bajty -- -- -- %n row(s) -- %n řádek%n řádky%n řádků%n řádky -- -- -- -- Database -- -- File %1 does not exist. -- Soubor %1 neexistuje. -- -- -- Unable to open file %1. -- Soubor %1 se nedaří otevřít. -- -- -- Error while reading the database: %1 -- Chyba při čtení databáze: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Do souboru nelze zapisovat, protože je otevřen v režimu pouze pro čtení. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Klíč nebyl přeměněn. Toto je chyba – prosím nahlaste to vývojářům. -- -- -- %1 --Backup database located at %2 -- %1 --Záložní databáze se nachází v %2 -- -- -- Could not save, database does not point to a valid file. -- Není možné uložit, databáze neodkazuje na platný soubor. -- -- -- Could not save, database file is read-only. -- Nedaří se uložit, soubor s databází je přístupný pouze pro čtení. -- -- -- Database file has unmerged changes. -- V databázovém souboru jsou nesloučené změny. -- -- -- Recycle Bin -- Koš -- -- -- Passwords -- Root group name -- Hesla -- -- -- Database save is already in progress. -- Ukládání databáze už probíhá. -- -- -- Could not save, database has not been initialized! -- Není možné uložit, databáze nebyla inicializována! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Odemknout databázi – KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Soubor s klíčem: -- -- -- Refresh -- Načíst znovu -- -- -- Don't show this warning again -- Toto varování znovu nezobrazovat -- -- -- All files -- Veškeré soubory -- -- -- Key files -- Soubory s klíči -- -- -- Select key file -- Vyberte soubor s klíčem -- -- -- Failed to open key file: %1 -- Nepodařilo se otevřít soubor s klíčem: %1 -- -- -- Unlock KeePassXC Database -- Odemknout databázi KeePassXC -- -- -- Enter Password: -- Zadejte heslo: -- -- -- Password field -- Kolonka pro heslo -- -- -- Hardware key slot selection -- Výběr slotu v hardwarovém klíči -- -- -- Browse for key file -- Nalistovat soubor s klíčem -- -- -- Browse... -- Procházet… -- -- -- Refresh hardware tokens -- Znovu načíst hardwarová bezpečnostní zařízení -- -- -- Hardware Key: -- Hardwarový klíč: -- -- -- Hardware key help -- Nápověda k hardwarovému klíči -- -- -- TouchID for Quick Unlock -- TouchID pro rychlé odemknutí -- -- -- Unlock failed and no password given -- Odemknutí se nezdařilo a nebylo zadáno žádné heslo -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Odemčení databáze se nezdařilo a nezadali jste heslo. --Chcete to zkusit znovu s „prázdným“ heslem? -- --Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení databáze / Zabezpečení“ a nastavit heslo znovu. -- -- -- Retry with empty password -- Zkusit znovu bez hesla -- -- -- Enter Additional Credentials (if any): -- Zadejte další přihlašovací údaje (pokud jsou): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Je možné používat hardwarové bezpečnostní klíče jako například <strong>YubiKey</strong> nebo <strong>OnlyKey</strong> se sloty nastavenými pro HMAC-SHA1.</p> --<p>Klikněte pro další informace…</p> -- -- -- Key file help -- Nápověda k souboru s klíčem -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Soubor s databází není možné použít pro účely souboru s klíčem (mění se) -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Soubor s databází není možné použít pro účely souboru s klíčem (bude se měnit). --Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhodný jako klíč), tuto kolonku nevyplňujte. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Krom hlavního hesla je možné použít tajný soubor a vylepšit tak zabezpečení databáze. Takový soubor je možné vytvořit v nastavení zabezpečení databáze.</p><p>Toto <strong>není</strong> *.kdbx databázový soubor!<br>Pokud nemáte soubor s klíčem, ponechte kolonku nevyplněnou.</p><p>Pro více informaci klikněte sem…</p> -- -- -- Key file to unlock the database -- Soubor s klíčem k odemknutí databáze -- -- -- Please touch the button on your YubiKey! -- Dotkněte se tlačítka na svém YubiKey zařízení! -- -- -- Detecting hardware keys… -- Zjišťování hardwarových klíčů… -- -- -- No hardware keys detected -- Nenalezeny žádné hardwarové klíče -- -- -- Select hardware key… -- Vyberte hardwarový klíč… -- -- -- Old key file format -- Starý formát souboru s klíčem -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Používáte starý formát souboru s klíčem, který může KeePassXC <br>přestat v budoucnu podporovat.<br><br>Zvažte prosím vytvoření nového souboru s klíčem v nabídce <br><strong>Databáze / Zabezpečení databáze / Změnit soubor s klíčem.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Hesla -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Pokročilá nastavení -- -- -- General -- Obecné -- -- -- Security -- Zabezpečení -- -- -- Encryption Settings -- Nastavení šifrování -- -- -- Browser Integration -- Napojení webového prohlížeče -- -- -- Database Credentials -- Přihlašovací údaje do databáze -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Nastavení pro KeePassXC-Browser -- -- -- Stored keys -- Uložené klíče -- -- -- Remove -- Odebrat -- -- -- Delete the selected key? -- Smazat označený klíč? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Opravdu chcete označený klíč smazat? --Toto může zabránit spojení se zásuvným modulem prohlížeče. -- -- -- Key -- Klíč -- -- -- Value -- Hodnota -- -- -- Enable Browser Integration to access these settings. -- Pro zpřístupnění těchto nastavení zapněte Napojení na webový prohlížeč. -- -- -- Disconnect all browsers -- Odpojit veškeré prohlížeče -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Opravdu chcete odpojit všechny prohlížeče? --To může zabránit spojení se zásuvným modulem prohlížeče. -- -- -- KeePassXC: No keys found -- KeePassXC: Nebyly nalezeny žádné klíče -- -- -- No shared encryption keys found in KeePassXC settings. -- V nastavení KeePassXC nenalezeny žádné sdílené šifrovací klíče. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Klíče odebrány z databáze -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Z nastavení KeePassXC úspěšně odebrán %n šifrovací klíč.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče.Z nastavení KeePassXC úspěšně odebráno %n šifrovacích klíčů.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče. -- -- -- Forget all site-specific settings on entries -- Zapomenout v položkách veškerá nastavení specifická pro daný web -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Opravdu chcete zapomenout veškerá nastavení pro dané weby na každé položce? --Oprávnění pro přístup k položkám budou odvolána. -- -- -- Removing stored permissions… -- Odebírání uložených oprávnění… -- -- -- Abort -- Přerušit -- -- -- KeePassXC: Removed permissions -- KeePassXC: Odebraná oprávnění -- -- -- Successfully removed permissions from %n entry(s). -- Z %n položky úspěšně odebrána oprávnění.Ze %n položek úspěšně odebrána oprávnění.Z %n položek úspěšně odebrána oprávnění.Ze %n položek úspěšně odebrána oprávnění. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nebyl nalezen žádný záznam s oprávněními! -- -- -- The active database does not contain an entry with permissions. -- Právě otevřená databáze neobsahuje záznam s oprávněními. -- -- -- Move KeePassHTTP attributes to custom data -- Přesunout KeePassHTTP atributy do uživatelsky určených dat -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Opravdu chcete přesunout všechna data starého napojení na prohlížeč na nejnovější standard? --Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohlížeč. -- -- -- Stored browser keys -- Uložené klíče prohlížeče -- -- -- Remove selected key -- Odebrat označený klíč -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Přesunout KeePassHTTP atributy do uživatelsky určených dat v KeePassXC-Browser -- -- -- Refresh database root group ID -- Znovu vytvořit identifikátor kořenové skupiny databáze -- -- -- Created -- Vytvořeno -- -- -- Refresh database ID -- Znovu vytvořit identifikátor databáze -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Opravdu chcete znovu vytvořit identifikátor databáze? --Toto je nutné pouze v případě, že vaše databáze je kopií jiné a nefunguje propojení s rozšířením prohlížeče. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Přidat další ochranu… -- -- -- No password set -- Není nastavené žádné heslo -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- VAROVÁNÍ! Nenastavili jste heslo. Používání databáze bez hesla je silně nedoporučeno! -- --Opravdu chcete pokračovat bez hesla? -- -- -- Continue without password -- Pokračovat bez hesla -- -- -- No encryption key added -- Nepřidán žádný šifrovací klíč -- -- -- You must add at least one encryption key to secure your database! -- Aby byla vaše databáze zabezpečená, je třeba přidat alespoň jeden šifrovací klíč! -- -- -- Unknown error -- Neznámá chyba -- -- -- Failed to change database credentials -- Nepodařilo se změnit přihlašovací údaje do databáze -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Šifrovací algoritmus: -- -- -- AES: 256 Bit (default) -- AES: 256 bit (výchozí) -- -- -- Twofish: 256 Bit -- Twofish: 256 bit -- -- -- Key Derivation Function: -- Funkce pro odvození klíče: -- -- -- Transform rounds: -- Počet průchodů šifrovacího algoritmu: -- -- -- Memory Usage: -- Využití paměti: -- -- -- Parallelism: -- Souběžné zpracovávání: -- -- -- Decryption Time: -- Doba, kterou rozšifrování trvalo: -- -- -- ?? s -- ?? s -- -- -- Change -- Změnit -- -- -- Higher values offer more protection, but opening the database will take longer. -- Vyšší hodnota poskytuje lepší ochranu, ale otevírání databáze zabere déle. -- -- -- Database format: -- Formát databáze: -- -- -- This is only important if you need to use your database with other programs. -- Toto je důležité pouze pokud potřebujete svou databázi používat v ostatních aplikacích. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (doporučeno) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- nezměněno -- -- -- Number of rounds too high -- Key transformation rounds -- Počet průchodů je příliš vysoký -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Používáte velmi vysoký počet průchodů transformace klíče s Argnon2. -- --Pokud tento počet ponecháte, otevírání databáze může trvat hodiny až dny (nebo dokonce déle)! -- -- -- Understood, keep number -- Rozumím, počet ponechat -- -- -- Cancel -- Zrušit -- -- -- Number of rounds too low -- Key transformation rounds -- Počet průchodů je příliš nízký -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Používáte velmi nízký počet průchodů transformace funkcí pro odvození klíče (KDF) a šifrou AES. -- --Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování vaší databáze! -- -- -- KDF unchanged -- Funkce pro odvození klíče (KDF) nezměněna -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Nepodařilo se transformovat klíč s novými parametry funkce pro odvození klíče (KDF), ta proto nezměněna. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- vláknovláknavlákenvlákna -- -- -- Change existing decryption time -- Změnit existující čas rozšifrování -- -- -- Decryption time in seconds -- Doba rozšifrování (v sekundách) -- -- -- Database format -- Formát databáze -- -- -- Encryption algorithm -- Šifrovací algoritmus -- -- -- Key derivation function -- Funkce pro odvození klíče -- -- -- Transform rounds -- Počet průchodů transformace -- -- -- Memory usage -- Využití operační paměti -- -- -- Parallelism -- Souběžné zpracovávání -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Vystavené záznamy -- -- -- Don't expose this database -- Nevystavovat tuto databázi -- -- -- Expose entries under this group: -- Vystavit položky pod touto skupinou: -- -- -- Enable Secret Service to access these settings. -- Pro přístup k těmto nastavením zapněte Secret Service. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadata databáze -- -- -- Database name: -- Název databáze: -- -- -- Database description: -- Popis databáze: -- -- -- Default username: -- Výchozí uživatelské jméno: -- -- -- History Settings -- Nastavení historie -- -- -- Max. history items: -- Omezit počet uchovávaných předchozích verzí záznamů na: -- -- -- Max. history size: -- Omezit datový objem uchovávaných předchozích verzí záznamů na: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Namísto mazání přesouvat do Koše -- -- -- Additional Database Settings -- Rozšířená nastavení databáze -- -- -- Database name field -- Kolonka název databáze -- -- -- Database description field -- Kolonka popis databáze -- -- -- Default username field -- Kolonka výchozí uživatelské jméno -- -- -- Maximum number of history items per entry -- Nejvyšší umožněný počet historických záznamů pro jednotlivé záznamy -- -- -- Maximum size of history per entry -- Nejvyšší umožněná velikost historických záznamů pro jednotlivé záznamy -- -- -- Delete Recycle Bin -- Smazat Koš -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Chcete smazat stávající Koš a vše co obsahuje? --Tuto akci nelze vzít zpět. -- -- -- (old) -- (staré) -- -- -- Enable compression (recommended) -- Zapnout kompresi (doporučeno) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Sdílení -- -- -- Breadcrumb -- Zobrazení cesty rozhraním -- -- -- Type -- Typ -- -- -- Path -- Popis umístění -- -- -- Last Signer -- Naposledy podepsal -- -- -- Certificates -- Certifikáty -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Název databáze: -- -- -- Description: -- Popis: -- -- -- Database name field -- Kolonka název databáze -- -- -- Database description field -- Kolonka popis databáze -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Databáze ve formátu KeePass verze 2 -- -- -- All files -- Veškeré soubory -- -- -- Open database -- Otevřít databázi -- -- -- CSV file -- CSV soubor -- -- -- Merge database -- Sloučit databáze -- -- -- Open KeePass 1 database -- Otevřít databázi ve formátu KeePass verze 1 -- -- -- KeePass 1 database -- Databáze ve formátu KeePass verze 1 -- -- -- Export database to CSV file -- Exportovat databázi do CSV souboru -- -- -- Writing the CSV file failed. -- Zápis do CSV souboru se nezdařil. -- -- -- Database creation error -- Chyba vytváření databáze -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Vytvořená databáze nemá klíč nebo funkci pro jeho odvození. Její uložení proto odmítnuto. --Toto je nepochybně chyba, nahlaste ji prosím vývojářům. -- -- -- Select CSV file -- Vyberte CSV soubor -- -- -- New Database -- Nová databáze -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [nová databáze] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [uzamčeno] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [pouze pro čtení] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- %1 se nepodařilo otevřít. Buď neexistuje, nebo není přístupné. -- -- -- Export database to HTML file -- Exportovat databázi do HTML souboru -- -- -- HTML file -- HTML soubor -- -- -- Writing the HTML file failed. -- Zápis do HTML souboru se nezdařil. -- -- -- Export Confirmation -- Potvrzení exportu -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Chystáte se exportovat svou databázi do nešifrovaného souboru. To zanechá vaše hesla a citlivé informace zranitelné. Opravdu to chcete? -- -- -- Open OPVault -- Otevřít OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Hledání… -- -- -- Do you really want to delete the entry "%1" for good? -- Opravdu chcete nenávratně smazat záznam „%1“? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Opravdu přesunout záznam „%1“ do Koše? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Opravdu přesunout %n záznam do Koše?Opravdu přesunout %n záznamy do Koše?Opravdu přesunout %n záznamů do Koše?Opravdu přesunout %n záznamy do Koše? -- -- -- Execute command? -- Spustit příkaz? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Opravdu spustit následující příkaz?<br><br>%1<br> -- -- -- Remember my choice -- Zapamatovat si pro příště -- -- -- Do you really want to delete the group "%1" for good? -- Opravdu chcete nenávratně smazat skupinu „%1“? -- -- -- No current database. -- Žádná nedávná databáze. -- -- -- No source database, nothing to do. -- Není zvolena zdrojová databáze, není co dělat. -- -- -- Search Results (%1) -- Výsledky vyhledávání (%1) -- -- -- No Results -- Nic nenalezeno -- -- -- File has changed -- Soubor byl změněn -- -- -- The database file has changed. Do you want to load the changes? -- Soubor s databází byl změněn. Načíst změny? -- -- -- Merge Request -- Požadavek na sloučení -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Databázový soubor byl změněn a máte neuložené změny. --Přejete si je zahrnout? -- -- -- Empty recycle bin? -- Vysypat Koš? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Opravdu chcete nevratně smazat všechno z Koše? -- -- -- Do you really want to delete %n entry(s) for good? -- Opravdu chcete %n položku nevratně smazat?Opravdu chcete %n položky nevratně smazat?Opravdu chcete %n položek nevratně smazat?Opravdu chcete %n položky nevratně smazat? -- -- -- Delete entry(s)? -- Smazat položku?Smazat položky?Smazat položky?Smazat položky? -- -- -- Move entry(s) to recycle bin? -- Přesunout položku do Koše?Přesunout položky do Koše?Přesunout položky do Koše?Přesunout položky do Koše? -- -- -- Lock Database? -- Uzamknout databázi? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Upravujete položku. Přesto zavřít a zahodit tak změny? -- -- -- "%1" was modified. --Save changes? -- „%1“ bylo změněno. --Uložit změny? -- -- -- Database was modified. --Save changes? -- Databáze byla změněna. --Uložit změny? -- -- -- Save changes? -- Uložit změny? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Nepodařilo se otevřít nový soubor s databází během pokusu o její opětovné načtení. --Chyba: %1 -- -- -- Disable safe saves? -- Vypnout bezpečná ukládání? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- I přes několikátý pokus se KeePassXC nepodařilo databázi uložit. To je nejspíš způsobeno službou synchronizace souborů, která drží zámek na ukládaném souboru. --Vypnout bezpečné ukládání a zkusit to znovu? -- -- -- Passwords -- Hesla -- -- -- Save database as -- Uložit databázi jako -- -- -- KeePass 2 Database -- Databáze ve formátu KeePass 2 -- -- -- Replace references to entry? -- Nahradit odkazy na položku? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Položka „%1“ má %2 odkaz. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazů. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak? -- -- -- Delete group -- Smazat skupinu -- -- -- Move group to recycle bin? -- Přesunout skupinu do Koše? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Opravdu chcete skupinu „%1“ přesunout do koše? -- -- -- Successfully merged the database files. -- Databázové soubory úspěšně sloučeny. -- -- -- Database was not modified by merge operation. -- Databáze nebyla operací slučování upravena. -- -- -- Shared group... -- Sdílená skupina… -- -- -- Writing the database failed: %1 -- Zápis do databáze se nezdařil: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Tato databáze je otevřena v režimu pouze pro čtení. Automatické ukládání je vypnuto. -- -- -- Save database backup -- Uložit zálohu databáze -- -- -- Could not find database file: %1 -- Nedaří se nalézt soubor s databází: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Záznam -- -- -- Advanced -- Pokročilé -- -- -- Icon -- Ikona -- -- -- Auto-Type -- Automatické vyplňování -- -- -- Properties -- Vlastnosti -- -- -- History -- Historie -- -- -- SSH Agent -- SSH agent -- -- -- n/a -- neaplikovatelné -- -- -- (encrypted) -- (šifrováno) -- -- -- Select private key -- Vybrat soukromou část klíče -- -- -- Entry history -- Historie záznamu -- -- -- Add entry -- Přidat záznam -- -- -- Edit entry -- Upravit záznam -- -- -- New attribute -- Nový atribut -- -- -- Are you sure you want to remove this attribute? -- Opravdu chcete odebrat tento atribut? -- -- -- Tomorrow -- Zítra -- -- -- %n week(s) -- %n týden%n týdny%n týdnů%n týdny -- -- -- %n month(s) -- %n měsíc%n měsíce%n měsíců%n měsíce -- -- -- Entry updated successfully. -- Položka úspěšně aktualizována. -- -- -- New attribute %1 -- Nový atribut %1 -- -- -- %n year(s) -- %n rok%n roky%n let%n roky -- -- -- Confirm Removal -- Potvrdit odebrání -- -- -- Browser Integration -- Napojení na webový prohlížeč -- -- -- <empty URL> -- <prázdná URL> -- -- -- Are you sure you want to remove this URL? -- Opravdu chcete tuto URL odebrat? -- -- -- Reveal -- Odhalit -- -- -- Hide -- Skrýt -- -- -- Unsaved Changes -- Neuložené změny -- -- -- Would you like to save changes to this entry? -- Chcete uložit změny, provedené v této položce? -- -- -- [PROTECTED] Press Reveal to view or edit -- [CHRÁNĚNO] Pro zobrazení nebo úpravu klikněte na odhalit -- -- -- Invalid Entry -- Neplatný údaj -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Externí operace sloučení tuto položku zneplatnila. --Všechny provedené změny byly bohužel ztraceny. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Další atributy -- -- -- Add -- Přidat -- -- -- Remove -- Odebrat -- -- -- Edit Name -- Upravit název -- -- -- Protect -- Chránit -- -- -- Reveal -- Odhalit -- -- -- Attachments -- Přílohy -- -- -- Foreground Color: -- Barva popředí: -- -- -- Background Color: -- Barva pozadí: -- -- -- Attribute selection -- Výběr atributu -- -- -- Attribute value -- Hodnota atributu -- -- -- Add a new attribute -- Přidat nový atribut -- -- -- Remove selected attribute -- Odebrat označený atribut -- -- -- Edit attribute name -- Upravit název atributu -- -- -- Toggle attribute protection -- Vyp/zap. ochranu atributu -- -- -- Show a protected attribute -- Zobrazit chráněný atribut -- -- -- Foreground color selection -- Výběr barvy popředí -- -- -- Background color selection -- Výběr barvy pozadí -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Pokud zaškrtnuto, položka se neobjeví v hlášeních jako Kontrola zdraví a HIBP, i když neodpovídá požadavků mna kvalitu (např. nahodilost hesla nebo opětovné použití). Toto můžete zaškrtnout pokud heslo není pod vaší kontrolu (např. je vyžadováno, že se musí jednat o PIN kód dlouhý čtyři číslice), aby tím nebyl výkaz zaneřáděný.</p></body></html> -- -- -- Exclude from database reports -- Vynechat z přehledů o databázi -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Zapnout automatické vyplňování tohoto záznamu -- -- -- Window Associations -- Přiřazení oken -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Titulek okna: -- -- -- Use a specific sequence for this association: -- Pro toto přiřazení použít konkrétní posloupnost: -- -- -- Custom Auto-Type sequence -- Uživatelsky určená posloupnost automatického vyplňování -- -- -- Open Auto-Type help webpage -- Otevřít webovou stránku s nápovědou k automatickému vyplňování -- -- -- Existing window associations -- Existující přiřazení k oknům -- -- -- Add new window association -- Přidat nové přiřazení k oknu -- -- -- Remove selected window association -- Odebrat označené přiřazení k oknu -- -- -- You can use an asterisk (*) to match everything -- Pro shodu s čímkoli je možné použít hvězdičku (*) -- -- -- Set the window association title -- Nastavit název okna, podle kterého přiřadit -- -- -- You can use an asterisk to match everything -- Pro shodu s čímkoli je možné použít hvězdičku -- -- -- Custom Auto-Type sequence for this window -- Uživatelsky určená posloupnost automatického vyplňování pro toto okno -- -- -- Inherit default Auto-Type sequence from the group -- Převzít výchozí posloupnost automatického vyplňování od skupiny -- -- -- Use custom Auto-Type sequence: -- Použít vlastní posloupnost automatického vyplňování: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Tato nastavení ovlivní chování záznamu pro rozšíření pro webový prohlížeč. -- -- -- General -- Obecné -- -- -- Skip Auto-Submit for this entry -- Přeskočit automatické odeslání pro tento záznam -- -- -- Hide this entry from the browser extension -- Skrýt tento záznam před rozšířením pro prohlížeč -- -- -- Additional URL's -- Další URL adresy -- -- -- Add -- Přidat -- -- -- Remove -- Odebrat -- -- -- Edit -- Upravit -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Toto nastavení posílat do prohlížeče pouze pro dialogy HTTP Auth. Pokud je zapnuto, běžné přihlašovací formuláře nezobrazí tuto položku pro výběr. -- -- -- Use this entry only with HTTP Basic Auth -- Tuto položku použít pouze ve spojení se základním HTTP ověřováním se -- -- -- -- EditEntryWidgetHistory -- -- Show -- Zobrazit -- -- -- Restore -- Obnovit -- -- -- Delete -- Smazat -- -- -- Delete all -- Smazat vše -- -- -- Entry history selection -- Výběr historie záznamu -- -- -- Show entry at selected history state -- Zobrazit záznam ve vybraném stavu v historii -- -- -- Restore entry to selected history state -- Obnovit záznam do podoby označeného stavu v historii -- -- -- Delete selected history state -- Smazat označený stav v historii -- -- -- Delete all history -- Smazat veškerou historii -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL adresa: -- -- -- Password: -- Heslo: -- -- -- Title: -- Titulek: -- -- -- Presets -- Předpřipravené -- -- -- Toggle the checkbox to reveal the notes section. -- Od/zaškrtnutím této kolonky odkryjete sekci poznámek. -- -- -- Username: -- Uživatelské jméno: -- -- -- Url field -- Kolonka pro URL -- -- -- Download favicon for URL -- Stáhnout ikonu webu pro URL -- -- -- Password field -- Kolonka pro heslo -- -- -- Toggle notes visible -- Zobraz./nezobrazovat poznámky -- -- -- Expiration field -- Kolonka data a času konce platnosti -- -- -- Expiration Presets -- Předpřipravené konce platnosti -- -- -- Expiration presets -- Předpřipravené konce platnosti -- -- -- Notes field -- Kolonka pro poznámky -- -- -- Title field -- Kolonka pro název -- -- -- Username field -- Kolonka pro uživatelské jméno -- -- -- Toggle expiration -- Vyp/zap. skončení platnosti -- -- -- Notes: -- Poznámky: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Platnost skončí: -- -- -- Edit Entry -- Upravit záznam -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulář -- -- -- Remove key from agent after -- Odebrat klíč z klienta po uplynutí -- -- -- seconds -- sekund -- -- -- Fingerprint -- Otisk -- -- -- Remove key from agent when database is closed/locked -- Odebrat klíč z klienta při zavření/zamčení databáze -- -- -- Public key -- Veřejná část klíče -- -- -- Add key to agent when database is opened/unlocked -- Přidat klíč do agenta při otevření/odemčení databáze -- -- -- Comment -- Komentář -- -- -- Decrypt -- Rozšifrovat -- -- -- n/a -- neaplikovatelné -- -- -- Copy to clipboard -- Zkopírovat do schránky -- -- -- Private key -- Soukromá část klíče -- -- -- External file -- Vnější soubor -- -- -- Browse... -- Button for opening file dialog -- Procházet… -- -- -- Attachment -- Příloha -- -- -- Add to agent -- Přidat do agenta -- -- -- Remove from agent -- Odebrat z agenta -- -- -- Require user confirmation when this key is used -- Při použití tohoto klíče vyžadovat potvrzení od uživatele -- -- -- Remove key from agent after specified seconds -- Odebrat klíč z agenta po uplynutí zadaného počtu sekund -- -- -- Browser for key file -- Nalistovat soubor s klíčem -- -- -- External key file -- Soubor s externím klíčem -- -- -- Select attachment file -- Vybrat soubor, který přiložit -- -- -- -- EditGroupWidget -- -- Group -- Skupina -- -- -- Icon -- Ikona -- -- -- Properties -- Vlastnosti -- -- -- Add group -- Přidat skupinu -- -- -- Edit group -- Upravit skupinu -- -- -- Enable -- Zapnout -- -- -- Disable -- Vypnout -- -- -- Inherit from parent group (%1) -- Převzít od nadřazené skupiny (%1) -- -- -- Entry has unsaved changes -- Položka má neuložené změny -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Typ: -- -- -- Path: -- Popis umístění: -- -- -- Password: -- Heslo: -- -- -- Inactive -- Neaktivní -- -- -- KeeShare unsigned container -- Nepodepsaný KeeShare kontejner -- -- -- KeeShare signed container -- Podepsaný KeeShare kontejner -- -- -- Select import source -- Vybrat zdroj pro import -- -- -- Select export target -- Vybrat cíl importu -- -- -- Select import/export file -- Vybrat importní/exportní soubor -- -- -- Clear -- Vyčistit -- -- -- Import -- Importovat -- -- -- Export -- Export -- -- -- Synchronize -- Synchronizovat -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Vámi používaná verze KeePassXC nepodporuje sdílení tohoto typu kontejneru. --Podporovaná rozšíření jsou: %1. -- -- -- %1 is already being exported by this database. -- %1 už je exportováno touto databází. -- -- -- %1 is already being imported by this database. -- %1 už je importováno touto databází. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 je importováno a exportováno jinými skupinami v této databázi. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare je nyní vypnuté. Import/export je možné zapnout v nastavení aplikace. -- -- -- Database export is currently disabled by application settings. -- Exportování databáze je nyní vypnuto v nastavení aplikace. -- -- -- Database import is currently disabled by application settings. -- Import do databáze je nyní vypnutý v nastavení aplikace. -- -- -- Sharing mode field -- Kolonka pro režim sdílení -- -- -- Path to share file field -- Kolonka pro popis umístění sdíleného souboru -- -- -- Password field -- Kolonka pro heslo -- -- -- Clear fields -- Vyčistit kolonky -- -- -- Browse for share file -- Nalistovat sdílený soubor -- -- -- Browse... -- Procházet… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Kolonka pro název -- -- -- Notes field -- Kolonka pro poznámky -- -- -- Toggle expiration -- Vyp/zap. skončení platnosti -- -- -- Auto-Type toggle for this and sub groups -- Vyp/zap. automatické vyplňování pro tuto a podskupiny -- -- -- Expiration field -- Kolonka data a času konce platnosti -- -- -- Search toggle for this and sub groups -- Vyp/zap. pro tuto a podskupiny -- -- -- Default auto-type sequence field -- Výchozí kolonka pro posloupnost automatického vyplňování -- -- -- Expires: -- Platnost skončí: -- -- -- Use default Auto-Type sequence of parent group -- Převzít výchozí pořadí automatického vyplňování od nadřazené skupiny -- -- -- Auto-Type: -- Automatické vyplňování: -- -- -- Search: -- Hledat: -- -- -- Notes: -- Poznámky: -- -- -- Name: -- Název: -- -- -- Set default Auto-Type sequence -- Nastavit výchozí pořadí automatického vyplňování -- -- -- Edit Group -- Upravit skupinu -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Přidat uživatelsky určenou ikonu -- -- -- Delete custom icon -- Smazat uživatelsky určenou ikonu -- -- -- Download favicon -- Stáhnout ikonu webu (favicon) -- -- -- Unable to fetch favicon. -- Ikonu webu (favicon) se nedaří stáhnout. -- -- -- Images -- Obrázky -- -- -- All files -- Veškeré soubory -- -- -- Confirm Delete -- Potvrdit smazání -- -- -- Select Image(s) -- Vyberte obrázky -- -- -- Successfully loaded %1 of %n icon(s) -- Úspěšně načtena %1 z %n ikonÚspěšně načteny %1 z %n ikonÚspěšně načteno %1 z %n ikonÚspěšně načteny %1 z %n ikon -- -- -- No icons were loaded -- Nebyly načteny žádné ikony -- -- -- %n icon(s) already exist in the database -- %n ikona už v databázi existuje%n ikony už v databázi existují%n ikon už v databázi existuje%n ikony už v databázi existují -- -- -- The following icon(s) failed: -- Následující ikona se nezdařila:Následující ikony se nezdařily:Následující ikony se nezdařily:Následující ikony se nezdařily: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Tato ikona je používána %n záznamem a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje → Nastavení → Zabezpečení -- -- -- Download favicon for URL -- Stáhnout ikonu webu pro URL -- -- -- Apply selected icon to subgroups and entries -- Uplatnit označenou ikonu na podskupiny a záznamy -- -- -- Also apply to child groups -- Uplatnit také na podskupiny -- -- -- Also apply to child entries -- Uplatnit také na obsažené záznamy -- -- -- Also apply to all children -- Uplatnit také na vše obsažené -- -- -- Existing icon selected. -- Vybrána existující ikona. -- -- -- Use default icon -- Použít výchozí ikonu -- -- -- Use custom icon -- Použít uživatelsky určenou ikonu -- -- -- Apply icon to... -- Použít ikonu na… -- -- -- Apply to this group only -- Použít pouze na tuto skupinu -- -- -- -- EditWidgetProperties -- -- Created: -- Okamžik vytvoření: -- -- -- Modified: -- Okamžik nejnovější úpravy: -- -- -- Accessed: -- Okamžik nejnovějšího přístupu: -- -- -- Uuid: -- Univerzálně neopakující se identifikátor: -- -- -- Plugin Data -- Data zásuvného modulu -- -- -- Remove -- Odebrat -- -- -- Delete plugin data? -- Smazat data zásuvného modulu? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Opravdu chcete smazat označená data zásuvného modulu? --Dotčený zásuvný modul to může rozbít. -- -- -- Key -- Klíč -- -- -- Value -- Hodnota -- -- -- Datetime created -- Datum a čas vytvoření -- -- -- Datetime modified -- Datum a čas změny -- -- -- Datetime accessed -- Datum a čas přístupu -- -- -- Unique ID -- Neopakující se identifikátor -- -- -- Plugin data -- Data zásuvného modulu -- -- -- Remove selected plugin data -- Odebrat označená data zásuvného modulu -- -- -- -- Entry -- -- %1 - Clone -- %1 – klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Název -- -- -- Size -- Velikost -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulář -- -- -- Add -- Přidat -- -- -- Remove -- Odebrat -- -- -- Open -- Otevřít -- -- -- Save -- Uložit -- -- -- Select files -- Vybrat soubory -- -- -- Are you sure you want to remove %n attachment(s)? -- Opravdu chcete odebrat %n přílohu?Opravdu chcete odebrat %n přílohy?Opravdu chcete odebrat %n příloh?Opravdu chcete odebrat %n přílohy? -- -- -- Save attachments -- Uložit přílohy -- -- -- Unable to create directory: --%1 -- Nedaří se vytvořit složku: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Opravdu chcete přílohou přepsat stávající soubor „%1“? -- -- -- Confirm overwrite -- Potvrdit přepsání -- -- -- Unable to save attachments: --%1 -- Nedaří se uložit přílohy: --%1 -- -- -- Unable to open attachment: --%1 -- Nedaří se otevřít přílohu: --%1 -- -- -- Unable to open attachments: --%1 -- Nedaří se otevřít přílohy: --%1 -- -- -- Confirm remove -- Potvrdit odebrání -- -- -- Unable to open file(s): --%1 -- Nedaří se otevřít soubor: --%1Nedaří se otevřít soubory: --%1Nedaří se otevřít soubory: --%1Nedaří se otevřít soubory: --%1 -- -- -- Attachments -- Přílohy -- -- -- Add new attachment -- Přidat novou přílohu -- -- -- Remove selected attachment -- Odebrat označenou přílohu -- -- -- Open selected attachment -- Otevřít označenou přílohu -- -- -- Save selected attachment to disk -- Uložit označenou přílohu na disk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 je velký soubor (%2 MB). --Vaše databáze se tím může velmi zvětšit a sníží se tím výkon. -- --Opravdu chcete tento soubor přidat? -- -- -- Confirm Attachment -- Potvrdit přílohu -- -- -- -- EntryAttributesModel -- -- Name -- Název -- -- -- -- EntryHistoryModel -- -- Last modified -- Naposledy změněno -- -- -- Title -- Titulek -- -- -- Username -- Uživatelské jméno -- -- -- URL -- URL adresa -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Skupina -- -- -- Title -- Titulek -- -- -- Username -- Uživatelské jméno -- -- -- URL -- URL adresa -- -- -- Never -- Nikdy -- -- -- Password -- Heslo -- -- -- Notes -- Poznámky -- -- -- Expires -- Platnost skončí -- -- -- Created -- Vytvořeno -- -- -- Modified -- Okamžik nejnovější úpravy: -- -- -- Accessed -- Okamžik nejnovějšího přístupu: -- -- -- Attachments -- Přílohy -- -- -- Size -- Velikost -- -- -- Group name -- Název skupiny -- -- -- Entry title -- Nadpis položky -- -- -- Entry notes -- Poznámky k položce -- -- -- Entry expires at -- Platnost položky končí v -- -- -- Creation date -- Datum vytvoření -- -- -- Last modification date -- Datum poslední změny -- -- -- Last access date -- Datum posledního přístupu -- -- -- Attached files -- Připojené soubory -- -- -- Entry size -- Velikost položky -- -- -- Has attachments -- Má přílohy -- -- -- Has TOTP one-time password -- Má jednorázové TOTP heslo -- -- -- -- EntryPreviewWidget -- -- Close -- Zavřít -- -- -- General -- Obecné -- -- -- Username -- Uživatelské jméno -- -- -- Password -- Heslo -- -- -- Expiration -- Skončení platnosti -- -- -- URL -- URL adresa -- -- -- Attributes -- Atributy -- -- -- Attachments -- Přílohy -- -- -- Notes -- Poznámky -- -- -- Autotype -- Automatické vyplnění -- -- -- Window -- Okno -- -- -- Sequence -- Posloupnost -- -- -- Searching -- Hledání -- -- -- Search -- Hledat -- -- -- Clear -- Vyčistit -- -- -- Never -- Nikdy -- -- -- [PROTECTED] -- [CHRÁNĚNO] -- -- -- Enabled -- Zapnuto -- -- -- Disabled -- Vypnuto -- -- -- Share -- Sdílet -- -- -- Display current TOTP value -- Zobrazit stávající hodnotu TOTP -- -- -- Advanced -- Pokročilé -- -- -- Default Sequence -- Výchozí pořadí -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Neplatné URL -- -- -- -- EntryView -- -- Fit to window -- Přizpůsobit oknu -- -- -- Fit to contents -- Přizpůsobit obsahu -- -- -- Reset to defaults -- Vrátit na výchozí -- -- -- Has attachments -- Entry attachment icon toggle -- Má přílohy -- -- -- Has TOTP -- Entry TOTP icon toggle -- Má TOTP heslo -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Záznam „%1“ z databáze „%2“ byl použit %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Nepodařilo se zaregistrovat službu DBus na %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n záznam byl použit %1%n záznamy byly použity %1%n záznamů bylo použito %1%n záznamy byly použity %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Soubor -- -- -- Group -- Skupina -- -- -- Manage -- Spravovat -- -- -- Unlock to show -- Odemkněte pro zobrazení -- -- -- None -- Žádné -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikace -- -- -- Manage -- Spravovat -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo tajná služba:</b> %1 -- -- -- Unknown -- Unknown PID -- Neznámý -- -- -- Unknown -- Unknown executable path -- Neznámý -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>Identif. procesu: %1, spustitelný soubor: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Je spuštěná jiná služba pro tajemství (%1).<br/>Prosím zastavte/odeberte ji a až poté znovu zapněte napojení na službu pro tajemství. -- -- -- -- Group -- -- [empty] -- group has no children -- [prázdné] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Ověření hesla online se nezdařilo -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Stáhnout ikony webů -- -- -- Cancel -- Zrušit -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Máte problémy se stahováním ikon? --Můžete zapnout službu pro stahování ikon z DuckDuckGo v sekci zabezpečení v nastavení aplikace. -- -- -- Close -- Zavřít -- -- -- URL -- URL adresa -- -- -- Status -- Stav -- -- -- Please wait, processing entry list... -- Čekejte, zpracovává se seznam položek… -- -- -- Downloading... -- Stahování… -- -- -- Ok -- Ok -- -- -- Already Exists -- Už existuje -- -- -- Download Failed -- Stažení se nezdařilo -- -- -- Downloading favicons (%1/%2)... -- Stahování ikon webů (%1/%2)… -- -- -- -- KMessageWidget -- -- &Close -- &Zavřít -- -- -- Close message -- Uzavřít správu -- -- -- -- Kdbx3Reader -- -- missing database headers -- chybí databázové hlavičky -- -- -- Header doesn't match hash -- Hlavička neodpovídá otisku -- -- -- Invalid header id size -- Neplatná velikost identifikátoru hlavičky -- -- -- Invalid header field length -- Neplatná délka kolonky hlavičky -- -- -- Invalid header data length -- Neplatné délka dat hlavičky -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Byly zadány neplatné přihlašovací údaje, zkuste to prosím znovu. --Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškozený. -- -- -- Unable to calculate database key -- Nedaří se vypočítat klíč databáze -- -- -- Unable to issue challenge-response: %1 -- Nedaří se vyvolat výzva-odpověď: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Nedaří se vyvolat výzva-odpověď: %1 -- -- -- Unable to calculate database key -- Nedaří se vypočítat klíč databáze -- -- -- -- Kdbx4Reader -- -- missing database headers -- chybí databázové hlavičky -- -- -- Invalid header checksum size -- Neplatná velikost kontrolního součtu hlavičky -- -- -- Header SHA256 mismatch -- Neshoda SHA256 kontrolního součtu hlavičky -- -- -- Unknown cipher -- Neznámá šifra -- -- -- Invalid header id size -- Neplatná velikost identifikátoru hlavičky -- -- -- Invalid header field length -- Neplatná délka kolonky hlavičky -- -- -- Invalid header data length -- Neplatné délka dat hlavičky -- -- -- Failed to open buffer for KDF parameters in header -- Nepodařilo se otevřít vyrovnávací paměť pro parametry funkce pro odvození klíče (KDF), uložené v hlavičce -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nepodporovaná funkce pro odvození klíče (KDF) nebo neplatné parametry -- -- -- Legacy header fields found in KDBX4 file. -- V KDBX4 souboru nalezeny kolonky staré hlavičky. -- -- -- Invalid inner header id size -- Neplatná velikost identifikátoru vnitřní hlavičky -- -- -- Invalid inner header field length -- Neplatná délka kolonky vnitřní hlavičky -- -- -- Invalid inner header binary size -- Neplatná velikost binárky vnitřní hlavničky -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Nepodporovaná verze mapy varianty KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Neplatná délka názvu položky mapy varianty -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Neplatná data názvu položky mapy varianty -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka hodnoty položky mapy varianty -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Neplatná data hodnoty položky mapy varianty -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka hodnoty položky typu boolean mapy varianty -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka 32 bitové celočíselné hodnoty položky varianty -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka 32 bitové kladné celočíselné hodnoty položky varianty -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka 64 bitové celočíselné hodnoty položky varianty -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná délka 64 bitové kladné celočíselné hodnoty položky varianty -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Neplatný typ položky mapy varianty -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Neplatná velikost typu kolonky mapy varianty -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Byly zadány neplatné přihlašovací údaje, zkuste to prosím znovu. --Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškozený. -- -- -- (HMAC mismatch) -- (HMAC neshoda) -- -- -- Unable to calculate database key: %1 -- Nedaří se vypočítat klíč databáze: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Neplatný algoritmus symetrické šifry. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Neplatná velikost symetrické šifry IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Nepodařilo se serializovat mapu varianty parametrů funkce pro odvození klíče -- -- -- Unable to calculate database key: %1 -- Nedaří se vypočítat klíč databáze: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nepodporovaná šifra -- -- -- Invalid compression flags length -- Neplatná délka příznaku komprimace -- -- -- Unsupported compression algorithm -- Nepodporovaný kompresní algoritmus -- -- -- Invalid master seed size -- Neplatná velikost hlavního náhodného čísla (seed) -- -- -- Invalid transform seed size -- Neplatná velikost transformačního náhodného čísla (seed) -- -- -- Invalid transform rounds size -- Neplatná velikost transformačních průchodů -- -- -- Invalid start bytes size -- Neplatná velikost počátečních bajtů -- -- -- Invalid random stream id size -- Neplatná velikost identifikátoru náhodného proudu -- -- -- Invalid inner random stream cipher -- Neplatná šifra vnitřního náhodného proudu -- -- -- Not a KeePass database. -- Nejedná se o databázi KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb). -- --Můžete ho importovat pomocí Databáze → Importovat databázi ve formátu KeePass 1…. --Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otevřít ve staré aplikaci KeePassX verze 0.4. -- -- -- Unsupported KeePass 2 database version. -- Nepodporovaná verze databáze KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Neplatná délka nikde se neopakujícího identifikátoru šifry: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- UUID se nedaří zpracovat: %1 -- -- -- Failed to read database file. -- Nepodařilo se číst soubor s databází. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Nezdar při zpracovávání XML: %1 -- -- -- No root group -- Žádná kořenová skupina -- -- -- Missing icon uuid or data -- Chybějící neopakující se identifikátor nebo data ikony -- -- -- Missing custom data key or value -- Chybějící vlastní datový klíč nebo hodnota -- -- -- Multiple group elements -- Prvky vícero skupin -- -- -- Null group uuid -- Prázdný neopakující se identifikátor skupiny -- -- -- Invalid group icon number -- Neplatné číslo ikony skupiny -- -- -- Invalid EnableAutoType value -- Neplatná hodnota zapnutí automatického vyplňování -- -- -- Invalid EnableSearching value -- Neplatná hodnota zapnutí vyhledávání -- -- -- No group uuid found -- Nenalezen žádný neopakující se identifikátor skupiny -- -- -- Null DeleteObject uuid -- Prázdný neopakující se identifikátor objektu ke smazání -- -- -- Missing DeletedObject uuid or time -- Chybějící neopakující se identifikátor nebo čas smazaného objektu -- -- -- Null entry uuid -- Prázdný neopakující se identifikátor -- -- -- Invalid entry icon number -- Neplatné číslo ikony položky -- -- -- History element in history entry -- Prvek historie v položce historie -- -- -- No entry uuid found -- Nebyl nalezen žádný neopakující se identifikátor položky -- -- -- History element with different uuid -- Prvek historie s rozdílným neopakujícím se identifikátorem -- -- -- Duplicate custom attribute found -- Zjištěn duplicitní uživatelsky určený atribut -- -- -- Entry string key or value missing -- Chybí klíč nebo hodnota řetězce položky -- -- -- Entry binary key or value missing -- Chybí binární klíč nebo hodnota položky -- -- -- Auto-type association window or sequence missing -- Chybí přiřazení okna nebo posloupnost pro automatické vyplňování -- -- -- Invalid bool value -- Neplatná boolean hodnota -- -- -- Invalid date time value -- Neplatná hodnota data a času -- -- -- Invalid color value -- Neplatná hodnota barvy -- -- -- Invalid color rgb part -- Neplatná část rgb vyjádření barvy -- -- -- Invalid number value -- Neplatná číselná hodnota -- -- -- Invalid uuid value -- Neplatná hodnota neopakujícího se identifikátoru -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Nedaří se rozbalit binární soubor -- -- -- XML error: --%1 --Line %2, column %3 -- Chyba XML: --%1 --Řádek %2, sloupec %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Neplatná struktura souboru s nastaveními pro KeeAgent. -- -- -- Private key is an attachment but no attachments provided. -- Soukromý klíč je příloha, ale nebyly poskytnuty žádné přílohy. -- -- -- Private key is empty -- Soukromý klíč je prázdný -- -- -- File too large to be a private key -- Soubor je na soukromou část klíče příliš velký -- -- -- Failed to open private key -- Nepodařilo se otevřít soukromou část klíče -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Databázi se nedaří otevřít. -- -- -- Import KeePass1 Database -- Importovat databázi ve formátu KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Soubor s klíčem se nedaří načíst. -- -- -- Not a KeePass database. -- Nejedná se o databázi Keepass. -- -- -- Unsupported encryption algorithm. -- Nepodporovaný šifrovací algoritmus. -- -- -- Unsupported KeePass database version. -- Nepodporovaná verze databáze KeePass. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Nedaří se číst šifrování IV -- -- -- Invalid number of groups -- Neplatný počet skupin -- -- -- Invalid number of entries -- Neplatný počet položek -- -- -- Invalid content hash size -- Neplatná velikost otisku (hash) obsahu -- -- -- Invalid transform seed size -- Neplatná velikost transformačního náhodného čísla (seed) -- -- -- Invalid number of transform rounds -- Neplatný počet transformačních průchodů -- -- -- Unable to construct group tree -- Nedaří se vytvořit strom skupin -- -- -- Root -- Kořen -- -- -- Key transformation failed -- Transformace klíče se nezdařila -- -- -- Invalid group field type number -- Neplatné číslo typu kolonky skupiny -- -- -- Invalid group field size -- Neplatná velikost kolonky skupiny -- -- -- Read group field data doesn't match size -- Načtená data kolonky skupiny neodpovídají velikosti -- -- -- Incorrect group id field size -- Nesprávná velikost kolonky identifikátoru skupiny -- -- -- Incorrect group creation time field size -- Nesprávná velikost kolonky času vytvoření skupiny -- -- -- Incorrect group modification time field size -- Nesprávná velikost kolonky času úpravy skupiny -- -- -- Incorrect group access time field size -- Nesprávná velikost kolonky času přístupu do skupiny -- -- -- Incorrect group expiry time field size -- Nesprávná velikost kolonky času skončení platnosti skupiny -- -- -- Incorrect group icon field size -- Nesprávná velikost kolonky ikony skupiny -- -- -- Incorrect group level field size -- Nesprávná velikost kolonky úrovně skupiny -- -- -- Invalid group field type -- Neplatný typ kolonky skupiny -- -- -- Missing group id or level -- Chybějící identifikátor nebo úroveň skupiny -- -- -- Missing entry field type number -- Chybí číslo typu kolonky položky -- -- -- Invalid entry field size -- Neplatná velikost kolonky položky -- -- -- Read entry field data doesn't match size -- Načtená data kolonky položky neodpovídají velikosti -- -- -- Invalid entry uuid field size -- Neplatná velikost kolonky neopakujícího se identifikátoru položky -- -- -- Invalid entry group id field size -- Neplatná velikost kolonky identifikátoru skupiny položky -- -- -- Invalid entry icon field size -- Neplatná velikost kolonky ikony položky -- -- -- Invalid entry creation time field size -- Neplatná velikost kolonky času vytvoření položky -- -- -- Invalid entry modification time field size -- Neplatná velikost kolonky času úpravy položky -- -- -- Invalid entry expiry time field size -- Neplatná velikost kolonky času konce platnosti položky -- -- -- Invalid entry field type -- Neplatný typ kolonky položky -- -- -- unable to seek to content position -- nedaří se posunout na pozici obsahu -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Byly zadány neplatné přihlašovací údaje, zkuste to prosím znovu. --Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškozený. -- -- -- Unable to calculate database key -- Nedaří se vypočítat klíč databáze -- -- -- -- KeeShare -- -- Invalid sharing reference -- Neplatná reference sdílení -- -- -- Inactive share %1 -- Neaktivní sdílení %1 -- -- -- Imported from %1 -- Importováno z %1 -- -- -- Exported to %1 -- Exportováno do %1 -- -- -- Synchronized with %1 -- Synchronizováno s %1 -- -- -- Import is disabled in settings -- Import je vypnutý v nastavení -- -- -- Export is disabled in settings -- Export je vypnutý v nastavení -- -- -- Inactive share -- Neaktivní sdílen -- -- -- Imported from -- Importováno z -- -- -- Exported to -- Exportováno do -- -- -- Synchronized with -- Synchronizováno s -- -- -- -- KeyComponentWidget -- -- Key Component -- Součást klíče -- -- -- Key Component Description -- Popis součásti klíče -- -- -- Cancel -- Zrušit -- -- -- Key Component set, click to change or remove -- Součást klíče nastavena, kliknutím změníte nebo odeberete -- -- -- Add %1 -- Add a key component -- Přidat %1 -- -- -- Change %1 -- Change a key component -- Změnit %1 -- -- -- Remove %1 -- Remove a key component -- Odebrat %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 nastaveno, kliknutím změníte nebo odeberete -- -- -- -- KeyFileEditWidget -- -- Generate -- Tvoř -- -- -- Key File -- Soubor s klíčem -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Jako další úroveň zabezpečení je možné přidat soubor s klíčem obsahujícím náhodné bajty.</p><p>Je třeba ho uchovávat v bezpečí a nikdy ho neztratit, jinak budete uzamčeni!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Chyba načítání souboru s klíčem „%1“ --Zpráva: %2 -- -- -- Key files -- Soubory s klíči -- -- -- All files -- Veškeré soubory -- -- -- Create Key File... -- Vytvořit soubor s klíčem… -- -- -- Error creating key file -- Chyba při vytváření souboru s klíčem -- -- -- Unable to create key file: %1 -- Nedaří se vytvořit soubor s klíčem: %1 -- -- -- Select a key file -- Vyberte soubor s klíčem -- -- -- Key file selection -- Výběr souboru s klíčem -- -- -- Browse for key file -- Nalistovat soubor s klíčem -- -- -- Browse... -- Procházet… -- -- -- Generate a new key file -- Vytvořit nový soubor s klíčem -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Pozn.: Nepoužívejte soubor, který se může změnit, protože by to znemožnilo odemčení databáze! -- -- -- Invalid Key File -- Neplatný soubor s klíčem -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Není možné použít stávající databázi jako soubor s klíčem pro ní samotnou. Zvolte jiný soubor nebo nějaký vytvořte. -- -- -- Suspicious Key File -- Podezřelý soubor s klíčem -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Zvolený soubor se zdá být souborem s databází hesel. Je třeba, aby soubor s klíčem byl soubor, který se nikdy nezmění, nebo navždy ztratíte k databázi přístup. --Opravdu chcete tento soubor použít? -- -- -- Old key file format -- Starý formát souboru s klíčem -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Vybrali jste soubor s klíčem ve starém formátu, který KeePassXC<br>může přestat v budoucnu podporovat.<br><br>Zvažte prosím místo něj vytvoření nového souboru s klíčem. -- -- -- -- MainWindow -- -- &Database -- &Databáze -- -- -- &Help -- Nápověda -- -- -- &Groups -- Skupiny -- -- -- &Tools -- Nás&troje -- -- -- &Quit -- Ukončit -- -- -- &About -- O &aplikaci -- -- -- Database settings -- Nastavení databáze -- -- -- Copy username to clipboard -- Zkopírovat uživatelské jméno do schránky -- -- -- Copy password to clipboard -- Zkopírovat heslo do schránky -- -- -- &Settings -- Na&stavení -- -- -- &Title -- &Titulek -- -- -- Copy title to clipboard -- Zkopírovat titulek do schránky -- -- -- &URL -- &URL adresa -- -- -- Copy URL to clipboard -- Zkopírovat URL adresu do schránky -- -- -- &Notes -- Poz&námky -- -- -- Copy notes to clipboard -- Zkopírovat poznámky do schránky -- -- -- Copy &TOTP -- Zkopírovat &TOTP -- -- -- E&mpty recycle bin -- &Vysypat koš -- -- -- Clear history -- Vyčistit historii -- -- -- Access error for config file %1 -- Chyba přístupu k souboru s nastaveními %1 -- -- -- Settings -- Nastavení -- -- -- Toggle window -- Zobrazit/skrýt okno -- -- -- Quit KeePassXC -- Ukončit KeePassXC -- -- -- Please touch the button on your YubiKey! -- Dotkněte se tlačítka na svém YubiKey zařízení! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- VAROVÁNÍ: Používáte vývojové sestavení KeePassXC! --Je zde vysoké riziko poškození dat, proto udržujte zálohu svých databází. --Tato verze není určena pro produkční použití. -- -- -- &Donate -- &Darovat -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- VAROVÁNÍ: Vámi používaná verze Qt může způsobovat, že při použití klávesnice na obrazovce KeePassXC zhavaruje! --Doporučujeme použít AppImage, které je k dispozici v sekci stahování našich stránek. -- -- -- &Import -- &Importovat -- -- -- Create a new database -- Vytvořit novou databázi -- -- -- Merge from another KDBX database -- Sloučit z jiné KDBX databáze -- -- -- Add a new entry -- Přidat nový záznam -- -- -- View or edit entry -- Zobrazit nebo upravit položku -- -- -- Add a new group -- Přidat novou skupinu -- -- -- Perform &Auto-Type -- Provést &automatické vyplnění -- -- -- Open &URL -- Otevřít &URL adresu -- -- -- Import a KeePass 1 database -- Importovat databázi aplikace KeePass verze 1 -- -- -- Import a CSV file -- Importovat CSV soubor -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- UPOZORNĚNÍ: Používáte vývojové sestavení KeePassXC! --Očekávejte chyby a drobné problémy, tato verze není určena pro produkční použití. -- -- -- Check for updates on startup? -- Zjišťovat dostupnost aktualizací při spouštění? -- -- -- Would you like KeePassXC to check for updates on startup? -- Přejete si, aby KeePassXC zjišťovalo dostupnost aktualizací při svém spouštění? -- -- -- You can always check for updates manually from the application menu. -- Vždy můžete aktualizace vyhledávat ručně z nabídky aplikace. -- -- -- &Export -- &Export -- -- -- Sort &A-Z -- Seřadit &A-Z -- -- -- Sort &Z-A -- Seřadit &Z-A -- -- -- &Password Generator -- &Vytváření hesel -- -- -- Import a 1Password Vault -- Importovat 1Password trezor -- -- -- &Getting Started -- &Začínáme -- -- -- &User Guide -- &Uživatelská příručka -- -- -- &Keyboard Shortcuts -- &Klávesové zkratky -- -- -- &Recent Databases -- &Nedávno otevřené databáze -- -- -- &Entries -- Položky -- -- -- Copy Att&ribute -- Zkopírovat at&ribut -- -- -- TOTP -- TOTP -- -- -- View -- Zobrazit -- -- -- Theme -- Motiv -- -- -- &Check for Updates -- &Zjistit dostupnost případných aktualizací -- -- -- &Open Database… -- &Otevřít databázi… -- -- -- &Save Database -- Uložit databázi -- -- -- &Close Database -- Zavřít databázi -- -- -- &New Database… -- &Nová databáze… -- -- -- &Merge From Database… -- &Sloučit z databáze… -- -- -- &New Entry… -- &Nový záznam… -- -- -- &Edit Entry… -- &Upravit záznam… -- -- -- &Delete Entry… -- Smazat záznam… -- -- -- &New Group… -- &Nová skupina… -- -- -- &Edit Group… -- Upravit skupinu… -- -- -- &Delete Group… -- Smazat skupinu… -- -- -- Download All &Favicons… -- Stáhnout si všechny ikony &webů… -- -- -- Sa&ve Database As… -- Uložit databázi jako… -- -- -- Database &Security… -- Zabezpečení databáze… -- -- -- Database &Reports... -- Hlášení o &databázi… -- -- -- Statistics, health check, etc. -- Statistiky, kontrola stavu atd. -- -- -- &Database Settings… -- Nastavení &databáze… -- -- -- &Clone Entry… -- Klonovat záznam… -- -- -- Move u&p -- &Přesunout nahoru -- -- -- Move entry one step up -- Přesunout položku o pozici výše -- -- -- Move do&wn -- Přesunout dolů -- -- -- Move entry one step down -- Přesunout položku o pozici níže -- -- -- Copy &Username -- Zkopírovat &uživatelské jméno -- -- -- Copy &Password -- Zko&pírovat heslo -- -- -- Download &Favicon -- Stáhnout si ikonu &webu -- -- -- &Lock Databases -- Uzamknout databáze -- -- -- &CSV File… -- &CSV soubor… -- -- -- &HTML File… -- &HTML soubor… -- -- -- KeePass 1 Database… -- Databáze ve formátu KeePass verze 1… -- -- -- 1Password Vault… -- 1Password trezor… -- -- -- CSV File… -- CSV soubor… -- -- -- Show TOTP -- Zobrazit na času založené jednorázové heslo (TOTP) -- -- -- Show QR Code -- Zobrazit QR kód -- -- -- Set up TOTP… -- Nastavit TOTP… -- -- -- Report a &Bug -- Nahlásit chy&bu -- -- -- Open Getting Started Guide -- Otevřít příručku Začínáme -- -- -- &Online Help -- Náp&ověda na webu -- -- -- Go to online documentation -- Přejít na dokumentaci na webu -- -- -- Open User Guide -- Otevřít Uživatelskou příručku -- -- -- Save Database Backup... -- Uložit zálohu databáze… -- -- -- Add key to SSH Agent -- Přidat klíč do SSH Agenta -- -- -- Remove key from SSH Agent -- Odebrat klíč z SSH Agenta -- -- -- Compact Mode -- Kompaktní režim -- -- -- Automatic -- Automatický -- -- -- Light -- Světlý -- -- -- Dark -- Tmavý -- -- -- Classic (Platform-native) -- Klasické (nativní pro danou platformu) -- -- -- Show Toolbar -- Zobrazovat lištu nástrojů -- -- -- Show Preview Panel -- Zobrazit panel náhledu -- -- -- Don't show again for this version -- Pro tuto verzi už nezobrazovat -- -- -- Restart Application? -- Restartovat aplikaci? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Chcete-li toto nastavení použít, musíte restartovat aplikaci. Chcete nyní restartovat? -- -- -- Perform Auto-Type Sequence -- Provést posloupnost automatického vyplnění -- -- -- {USERNAME} -- {UŽIVATELSKÉ_JMÉNO} -- -- -- {USERNAME}{ENTER} -- {UŽIVATELSKÉ_JMÉNO}{ENTER} -- -- -- {PASSWORD} -- {HESLO} -- -- -- {PASSWORD}{ENTER} -- {HESLO}{ENTER} -- -- -- Always on Top -- Vždy nahoře -- -- -- Hide Usernames -- Skrýt uživatelská jména -- -- -- Hide Passwords -- Skrýt hesla -- -- -- -- ManageDatabase -- -- Database settings -- Nastavení databáze -- -- -- Edit database settings -- Upravit nastavení databáze -- -- -- Unlock database -- Odemknout databázi -- -- -- Unlock database to show more information -- Odemknout databázi a zobrazit další informace -- -- -- Lock database -- Uzamknout databázi -- -- -- -- ManageSession -- -- Disconnect -- Odpojit -- -- -- Disconnect this application -- Odpojit tuto aplikaci -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Vytváření chybějícího %1 [%2] -- -- -- Relocating %1 [%2] -- Přemisťování %1 [%2] -- -- -- Overwriting %1 [%2] -- Přepisování %1 [%2] -- -- -- older entry merged from database "%1" -- starší položka sloučena z databáze „%1“ -- -- -- Adding backup for older target %1 [%2] -- Přidávání zálohy pro starší cíl %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Přidávání zálohy pro starší zdroj %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Znovu se uplatňují původní zdrojové položky nad novějším zdrojem %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Znovu se uplatňují původní zdrojové položky nad novějším cílem %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronizace z novějšího zdroje %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronizace ze staršího zdroje %1 [%2] -- -- -- Deleting child %1 [%2] -- Mazání podřízeného %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Mazání osiřelého %1 [%2] -- -- -- Changed deleted objects -- Změněny smazané objekty -- -- -- Adding missing icon %1 -- Přidávání chybějící ikony %1 -- -- -- Removed custom data %1 [%2] -- Odebrána uživatelsky určená data %1 [%2] -- -- -- Adding custom data %1 [%2] -- Přidávána uživatelsky určená data %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Vytvořit novou KeePassXC databázi… -- -- -- Root -- Root group -- Kořen -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Stránka průvodce -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze. -- -- -- Advanced Settings -- Pokročilá nastavení -- -- -- Simple Settings -- Základní nastavení -- -- -- Encryption Settings -- Nastavení šifrování -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Přihlašovací údaje do databáze -- -- -- A set of credentials known only to you that protects your database. -- Sada přihlašovacích údajů, známá pouze vám, sloužící pro ochranu databáze. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Nastavení šifrování -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Obecné informace o databázi -- -- -- Please fill in the display name and an optional description for your new database: -- Vyplňte zobrazovaný název a volitelný popis nové databáze: -- -- -- -- NixUtils -- -- Password Manager -- Správce hesel -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Neplatné OpData01 – neobsahuje hlavičku -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Nedaří se číst všech IV bajtů, chtěno 16, ale obdrženo %1 -- -- -- Unable to init cipher for opdata01: %1 -- Nedaří se inicializovat šifru pro opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Nedaří se číst všechny bajty HMAC signatury -- -- -- Malformed OpData01 due to a failed HMAC -- Chybně formulované OpData01 kvůli selhavšímu HMAC -- -- -- Unable to process clearText in place -- Nedaří se zpracovat clearText v jednom kroku -- -- -- Expected %1 bytes of clear-text, found %2 -- Očekáváno %1 bajtů v neformátovaném textu, nalezeno %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Čtení databáze nevytvořilo instanci --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Je třeba, aby existovala složka .opvault -- -- -- Directory .opvault must be readable -- Je třeba, aby složka .opvault byla přístupná pro čtení -- -- -- Directory .opvault/default must exist -- Je třeba, aby existovala složka .opvault/default -- -- -- Directory .opvault/default must be readable -- Je třeba, aby složka .opvault/default byla přístupná pro čtení -- -- -- Unable to decode masterKey: %1 -- Nedaří se dekódovat masterKey: %1 -- -- -- Unable to derive master key: %1 -- Nedaří se odvodit hlavní klíč: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Neplatný soubor s klíčem, očekáván OpenSSH klíč -- -- -- PEM boundary mismatch -- Neshoda v PEM hranici -- -- -- Base64 decoding failed -- Dekódování Base64 se nezdařilo -- -- -- Key file way too small. -- Soubor s klíčem je příliš malý. -- -- -- Key file magic header id invalid -- Neplatný identifikátor magic hlavičky souboru s klíčem -- -- -- Found zero keys -- Nenalezeny žádné klíče -- -- -- Failed to read public key. -- Nepodařilo se načíst veřejnou část klíče. -- -- -- Corrupted key file, reading private key failed -- Poškozený soubor s klíčem, čtení soukromé části klíče se nezdařilo -- -- -- No private key payload to decrypt -- Žádná obsažená soukromá část klíče k rozšifrování -- -- -- Trying to run KDF without cipher -- Snažíte se spustit funkci odvození klíče bez šifry -- -- -- Passphrase is required to decrypt this key -- Pro rozšifrování tohoto klíče je třeba zadat heslovou frázi -- -- -- Key derivation failed, key file corrupted? -- Odvození klíče se nezdařilo, soubor s klíčem je poškozený? -- -- -- Decryption failed, wrong passphrase? -- Rozšifrování se nezdařilo, chybná heslová fráze? -- -- -- Unexpected EOF while reading public key -- Neočekávaný konec souboru při čtení veřejné části klíče -- -- -- Unexpected EOF while reading private key -- Neočekávaný konec souboru při čtení soukromé části klíče -- -- -- Can't write public key as it is empty -- Není možné zapsat veřejnou část klíče, protože je prázdná -- -- -- Unexpected EOF when writing public key -- Neočekávaný konec souboru při zápisu veřejné části klíče -- -- -- Can't write private key as it is empty -- Není možné zapsat soukromou část klíče, protože je prázdná -- -- -- Unexpected EOF when writing private key -- Neočekávaný konec souboru při zápisu soukromé části klíče -- -- -- Unsupported key type: %1 -- Nepodporovaný typ klíče: %1 -- -- -- Unknown cipher: %1 -- Neznámá šifra: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cifra IV je příliš krátká pro MD5 funkci pro odvození klíče -- -- -- Unknown KDF: %1 -- Neznámá funkce pro odvození klíče: %1 -- -- -- Unknown key type: %1 -- Neznámý typ klíče: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Zadání hesla se neshodují -- -- -- Passwords match so far -- Zadání hesla jsou zatím shodná -- -- -- Toggle Password (%1) -- Zobrazit/skrýt heslo (%1) -- -- -- Generate Password (%1) -- Vytvořit heslo (%1) -- -- -- Warning: Caps Lock enabled! -- Varování: je zapnutý Caps Lock! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Zadejte heslo: -- -- -- Confirm password: -- Potvrdit heslo: -- -- -- Password -- Heslo -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Heslo je hlavní metodou zabezpečení databáze.</p><p>Dobrá hesla jsou dlouhá a nepoužívaná stejná na více místech. KeePassXC ho pro vás může vytvořit.</p> -- -- -- Passwords do not match. -- Zadání hesla se neshodují. -- -- -- Password field -- Kolonka pro heslo -- -- -- Repeat password field -- Kolonka pro zopakování zadání hesla -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- odolnost -- -- -- entropy -- nahodilost -- -- -- Password -- Heslo -- -- -- Character Types -- Typy znaků -- -- -- Numbers -- Číslice -- -- -- Extended ASCII -- Rozšířené ASCII -- -- -- Exclude look-alike characters -- Vynechat podobně vypadající znaky (předejití záměně) -- -- -- Pick characters from every group -- Zajistit přítomnost znaků ze všech zvolených skupin -- -- -- &Length: -- Dé&lka: -- -- -- Passphrase -- Heslová fráze -- -- -- Wordlist: -- Slovník: -- -- -- Word Separator: -- Oddělovač slov: -- -- -- Close -- Zavřít -- -- -- Entropy: %1 bit -- Nahodilost: %1 bitů -- -- -- Password Quality: %1 -- Kvalita hesla: %1 -- -- -- Poor -- Password quality -- Velmi slabá -- -- -- Weak -- Password quality -- Slabá -- -- -- Good -- Password quality -- Dobrá -- -- -- Excellent -- Password quality -- Výborná -- -- -- Switch to advanced mode -- Přepnout do pokročilého režimu -- -- -- Advanced -- Pokročilé -- -- -- Braces -- Složené závorky -- -- -- Punctuation -- Interpunkční znaménka -- -- -- Quotes -- Uvozovky -- -- -- Logograms -- Logogramy -- -- -- Character set to exclude from generated password -- Sada znaků kterou z vytvářených hesel vynechat -- -- -- Do not include: -- Nezahrnovat: -- -- -- Add non-hex letters to "do not include" list -- Přidat nehexadecimální znaky do seznamu „nezahrnovat“ -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Vynechané znaky: „0“, „1“, „l“, „I“, „O“, „|“, „ . “ -- -- -- Generated password -- Vytvořené heslo -- -- -- Upper-case letters -- Velká písmena -- -- -- Lower-case letters -- Malá písmena -- -- -- Special characters -- Zvláštní znaky -- -- -- Math Symbols -- Matematické symboly -- -- -- Dashes and Slashes -- Pomlčky a lomítka -- -- -- Excluded characters -- Vyloučené znaky -- -- -- Hex Passwords -- Šestnáctková hesla -- -- -- Password length -- Délka hesla -- -- -- Word Case: -- Velikost písmen: -- -- -- Regenerate password -- Znovu vytvořit heslo -- -- -- Copy password -- Zkopírovat heslo -- -- -- lower case -- malá písmena -- -- -- UPPER CASE -- VELKÁ PÍSMENA -- -- -- Title Case -- Velikost písmen nadpisu -- -- -- Generate Password -- Vytvořit heslo -- -- -- Also choose from: -- Také zvolte z: -- -- -- Additional characters to use for the generated password -- Další znaky které použít pro vytvořené heslo -- -- -- Additional characters -- Další znaky -- -- -- Word Count: -- Počet slov: -- -- -- Esc -- Esc -- -- -- Apply Password -- Použít heslo -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Znovu vytvořit heslo (%1) -- -- -- Special Characters -- Zvláštní znaky -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistiky -- -- -- Very weak password -- Velmi slabé heslo -- -- -- Password entropy is %1 bits -- Nahodilost hesla je %1 bitů -- -- -- Weak password -- Slabé heslo -- -- -- Used in %1/%2 -- Použito v %1/%2 -- -- -- Password is used %1 times -- Heslo je použito %1 krát -- -- -- Password has expired -- Platnost hesla skončila -- -- -- Password expiry was %1 -- Konec platnosti hesla byl %1 -- -- -- Password is about to expire -- Platnost hesla bude končit -- -- -- Password expires in %1 days -- Platnost hesla končí za %1 dny -- -- -- Password will expire soon -- Platnost hesla brzy skončí -- -- -- Password expires on %1 -- Platnost hesla skončí %1 -- -- -- Health Check -- Kontrola stavu -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Přepsat -- -- -- Delete -- Smazat -- -- -- Move -- Přesunout -- -- -- Empty -- Prázdné -- -- -- Remove -- Odebrat -- -- -- Skip -- Přeskočit -- -- -- Disable -- Vypnout -- -- -- Merge -- Sloučit -- -- -- Continue -- Pokračovat -- -- -- -- QObject -- -- Database not opened -- Databáze nebyla otevřena -- -- -- Database hash not available -- Otisk (hash) databáze není k dispozici -- -- -- Client public key not received -- Neobdržena veřejná část klíče klienta -- -- -- Cannot decrypt message -- Zprávu se nedaří rozšifrovat -- -- -- Action cancelled or denied -- Akce zrušena nebo odepřena -- -- -- KeePassXC association failed, try again -- Přiřazení KeePassXC se nezdařilo, zkuste to znovu -- -- -- Encryption key is not recognized -- Šifrovací klíč nebyl rozpoznán -- -- -- Incorrect action -- Nesprávná akce -- -- -- Empty message received -- Obdržena prázdná zpráva -- -- -- No URL provided -- Nebyla zadána žádná URL adresa -- -- -- No logins found -- Nenalezeny žádné přihlašovací údaje -- -- -- Unknown error -- Neznámá chyba -- -- -- Add a new entry to a database. -- Přidat do databáze novou položku. -- -- -- Path of the database. -- Umístění databáze. -- -- -- Key file of the database. -- Soubor s klíčem k databázi. -- -- -- path -- popis umístění -- -- -- Username for the entry. -- Uživatelské jméno pro záznam. -- -- -- username -- uživatelské jméno -- -- -- URL for the entry. -- URL adresa pro položku. -- -- -- URL -- URL adresa -- -- -- Prompt for the entry's password. -- Dotázat se na heslo položky. -- -- -- Generate a password for the entry. -- Vytvořit heslo pro položku. -- -- -- length -- délka -- -- -- Path of the entry to add. -- Popis umístění záznamu, který přidat. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Popis umístění záznamu ke zkopírování do schránky. -- -- -- Timeout in seconds before clearing the clipboard. -- Časová prodleva (v sekundách) před vymazáním obsahu schránky. -- -- -- Edit an entry. -- Upravit položku. -- -- -- Title for the entry. -- Titulek pro položku. -- -- -- title -- titulek -- -- -- Path of the entry to edit. -- Popis umístění položky kterou upravit. -- -- -- Estimate the entropy of a password. -- Odhadnout nahodilost hesla. -- -- -- Password for which to estimate the entropy. -- Heslo pro které odhadnout nahodilost. -- -- -- Perform advanced analysis on the password. -- Provést pokročilou analýzu hesla. -- -- -- -- --Available commands: -- -- -- --Příkazy k dispozici: -- -- -- -- Name of the command to execute. -- Název příkazu, který spustit. -- -- -- List database entries. -- Vypsat položky databáze. -- -- -- Path of the group to list. Default is / -- Umístění skupiny, kterou vypsat. Výchozí je / -- -- -- Find entries quickly. -- Najděte položky rychle. -- -- -- Search term. -- Hledat pojem. -- -- -- Merge two databases. -- Sloučit dvě databáze. -- -- -- Path of the database to merge from. -- Umístění databáze ze které sloučit. -- -- -- Use the same credentials for both database files. -- Použít stejné přihlašovací údaje pro oba databázové soubory. -- -- -- Key file of the database to merge from. -- Soubor s klíčem k databázi, ze které sloučit. -- -- -- Show an entry's information. -- Zobrazit informace o položce. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Názvy atributů které zobrazit. Tato předvolba může být zadaná vícekrát, pro každý z atributů zvlášť na řádku v daném pořadí. Pokud nejsou zadány žádné atributy, je zobrazen souhrn výchozích atributů. -- -- -- attribute -- atribut -- -- -- Name of the entry to show. -- Název položky k zobrazení. -- -- -- NULL device -- NULL zařízení -- -- -- error reading from device -- Chyba při čtení ze zařízení -- -- -- malformed string -- špatně formovaný řetězec -- -- -- missing closing quote -- chybějící uzavírací uvozovka -- -- -- Group -- Skupina -- -- -- Title -- Titulek -- -- -- Username -- Uživatelské jméno -- -- -- Password -- Heslo -- -- -- Notes -- Poznámky -- -- -- Last Modified -- Okamžik poslední úpravy -- -- -- Created -- Vytvořeno -- -- -- Browser Integration -- Napojení na webový prohlížeč -- -- -- SSH Agent -- SSH agent -- -- -- Generate a new random diceware passphrase. -- Vytvořit náhodnou diceware heslovou frázi. -- -- -- Word count for the diceware passphrase. -- Počet slov pro diceware heslovou frázi. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Slovník pro diceware generátor. --[Výchozí: EFF angličtina] -- -- -- Generate a new random password. -- Vytvořit nové náhodné heslo. -- -- -- Could not create entry with path %1. -- Nedaří se vytvořit položku v umístění %1. -- -- -- Enter password for new entry: -- Zadejte heslo pro novou položku: -- -- -- Writing the database failed %1. -- Zápis do databáze se nezdařil %1. -- -- -- Successfully added entry %1. -- Položka %1 úspěšně přidána. -- -- -- Invalid timeout value %1. -- Neplatná hodnota časového limitu %1. -- -- -- Entry %1 not found. -- Položka %1 nenalezena. -- -- -- Entry with path %1 has no TOTP set up. -- Položka s umístěním %1 nemá nastavené TOTP heslo. -- -- -- Clearing the clipboard in %1 second(s)... -- Vyčištění schránky za %1 sekundu…Vyčištění schránky za %1 sekundy…Vyčištění schránky za %1 sekund…Vyčištění schránky za %1 sekundy… -- -- -- Clipboard cleared! -- Schránka vyčištěna! -- -- -- Silence password prompt and other secondary outputs. -- Umlčet výzvy na heslo a další druhotné výstupy. -- -- -- count -- CLI parameter -- počet -- -- -- Could not find entry with path %1. -- Položku se nedaří v umístění %1 nalézt. -- -- -- Not changing any field for entry %1. -- Neprovedena změna žádného pole pro položku %1. -- -- -- Enter new password for entry: -- Zadejte nové heslo pro položku: -- -- -- Writing the database failed: %1 -- Zápis do databáze se nezdařil: %1 -- -- -- Successfully edited entry %1. -- Položka %1 úspěšně upravena. -- -- -- Length %1 -- Délka %1 -- -- -- Entropy %1 -- Nahodilost %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Víceslovné extra bity %1 -- -- -- Type: Bruteforce -- Typ: hrubá síla -- -- -- Type: Dictionary -- Typ: slovníkový -- -- -- Type: Dict+Leet -- Typ: slovník+nahrazování -- -- -- Type: User Words -- Typ: uživatelsky zadaná slova -- -- -- Type: User+Leet -- Typ: uživatelský+nahrazování -- -- -- Type: Repeated -- Typ: opakování -- -- -- Type: Sequence -- Typ: posloupnost -- -- -- Type: Spatial -- Typ: prostorové -- -- -- Type: Date -- Typ: datum -- -- -- Type: Bruteforce(Rep) -- Type: hrubá síla (opak.) -- -- -- Type: Dictionary(Rep) -- Type: slovníkový (opak.) -- -- -- Type: Dict+Leet(Rep) -- Typ: slovník+nahrazování (opak.) -- -- -- Type: User Words(Rep) -- Typ: uživatelsky zadaná slova (opak) -- -- -- Type: User+Leet(Rep) -- Typ: uživatelský+nahrazování (opak) -- -- -- Type: Repeated(Rep) -- Typ: opakování (opak.) -- -- -- Type: Sequence(Rep) -- Typ: posloupnost (opak) -- -- -- Type: Spatial(Rep) -- Typ: prostorové (opak.) -- -- -- Type: Date(Rep) -- Type: datum (opak) -- -- -- Type: Unknown%1 -- Typ: neznámé%1 -- -- -- Entropy %1 (%2) -- Nahodilost %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Délka hesla (%1) != součtu délky částí (%2) *** -- -- -- Failed to load key file %1: %2 -- Nepodařilo se načíst soubor s klíčem %1: %2 -- -- -- Length of the generated password -- Délka vytvářeného hesla -- -- -- Use lowercase characters -- Použít malá písmena -- -- -- Use uppercase characters -- Použít velká písmena -- -- -- Use special characters -- Použít zvláštní znaky -- -- -- Use extended ASCII -- Použít rozšířené ASCII -- -- -- Exclude character set -- Vynechat sadu znaků -- -- -- chars -- znaky -- -- -- Exclude similar looking characters -- Vynechat podobně vypadající znaky (předejití záměně) -- -- -- Include characters from every selected group -- Zahrnout znaky ze všech zvolených skupin -- -- -- Recursively list the elements of the group. -- Rekurzivně vypsat prvky skupiny. -- -- -- Cannot find group %1. -- Skupinu %1 se nedaří nalézt. -- -- -- Error reading merge file: --%1 -- Chyba při čtení slučovaného souboru: --%1 -- -- -- Unable to save database to file : %1 -- Nedaří se uložit databázi do souboru: %1 -- -- -- Unable to save database to file: %1 -- Nedaří se uložit databázi do souboru: %1 -- -- -- Successfully recycled entry %1. -- Položka %1 úspěšně přesunuta do Koše. -- -- -- Successfully deleted entry %1. -- Položka %1 úspěšně smazána. -- -- -- Show the entry's current TOTP. -- Zobrazit stávající TOTP heslo položky. -- -- -- ERROR: unknown attribute %1. -- CHYBA: neznámý atribut %1. -- -- -- No program defined for clipboard manipulation -- Nebyl určen program pro manipulaci se schránkou -- -- -- file empty -- soubor je prázdný -- -- -- %1: (row, col) %2,%3 -- %1: (řádek, sloupec) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Neplatná nastavení -- -- -- Invalid Key -- TOTP -- Neplatný klíč -- -- -- Message encryption failed. -- Zprávu se nepodařilo zašifrovat. -- -- -- No groups found -- Nenalezeny žádné skupiny -- -- -- Create a new database. -- Vytvořit novou databázi. -- -- -- File %1 already exists. -- Soubor %1 už existuje. -- -- -- Loading the key file failed -- Načítání souboru s klíčem se nezdařilo -- -- -- No key is set. Aborting database creation. -- Není nastavený žádný klíč. Vytváření databáze se ruší. -- -- -- Failed to save the database: %1. -- Databázi se nepodařilo uložit: %1. -- -- -- Successfully created new database. -- Nová databáze úspěšně vytvořena. -- -- -- Creating KeyFile %1 failed: %2 -- Vytváření souboru s klíčem %1 se nezdařilo: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Načítání souboru s klíčem %1 se nezdařilo: %2 -- -- -- Path of the entry to remove. -- Popis umístění položky k odebrání. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Existující uzamykací soubor, zajišťující spuštění pouze jedné instance, není platný. Spouští se nová instance. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Soubor se zámkem se nepodařilo vytvořit. Režim jediné instance proto vypnut. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC – aplikace pro správu hesel, fungující na vícero operačních systémech -- -- -- filenames of the password databases to open (*.kdbx) -- soubory s databázemi hesel k otevření (*.kdbx) -- -- -- path to a custom config file -- umístění vlastního souboru s nastaveními -- -- -- key file of the database -- soubor s klíčem k databázi -- -- -- read password of the database from stdin -- načíst heslo k databázi ze standardního vstupu -- -- -- Another instance of KeePassXC is already running. -- Již je spuštěná jiná instance KeePassXC. -- -- -- Fatal error while testing the cryptographic functions. -- Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. -- -- -- KeePassXC - Error -- KeePassXC – chyba -- -- -- Database password: -- Heslo databáze: -- -- -- Cannot create new group -- Novou skupinu se nedaří vytvořit -- -- -- Deactivate password key for the database. -- Deaktivovat klíč heslo pro databázi. -- -- -- Displays debugging information. -- Zobrazuje ladící informace. -- -- -- Deactivate password key for the database to merge from. -- Deaktivovat klíč heslo pro databázi, ze které sloučit. -- -- -- Version %1 -- Verze %1 -- -- -- -- Build Type: %1 -- Typ sestavení: %1 -- -- -- -- Revision: %1 -- Revize: %1 -- -- -- Distribution: %1 -- Distribuce: %1 -- -- -- Debugging mode is disabled. -- Ladící režim je vypnutý. -- -- -- Debugging mode is enabled. -- Ladící režim je zapnutý. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operační systém: %1 --Architektura procesoru: %2 --Jádro systému: %3 %4 -- -- -- Auto-Type -- Automatické vyplňování -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (podepsané a nepodepsané sdílení) -- -- -- KeeShare (only signed sharing) -- KeeShare (pouze podepsané sdílení) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (pouze nepodepsané sdílení) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Žádné -- -- -- Enabled extensions: -- Zapnutá rozšíření: -- -- -- Cryptographic libraries: -- Kryptografické knihovny: -- -- -- Cannot generate a password and prompt at the same time! -- Není možné vytvořit a dotázat se na heslo naráz! -- -- -- Adds a new group to a database. -- Přidá do databáze novou skupinu. -- -- -- Path of the group to add. -- Popis umístění skupiny, kterou přidat. -- -- -- Group %1 already exists! -- Skupina %1 už existuje! -- -- -- Group %1 not found. -- Skupina %1 nenalezena. -- -- -- Successfully added group %1. -- Úspěšně přidána skupina %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Zkontrolovat, zda otisky některých z hesel unikly na veřejnost. Je třeba, aby SOUBOR byl popis umístění souboru, obsahujícího výpis SHA-1 otisků uniklých hesel ve formátu HIBP, jak je k dispozici z https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- SOUBOR -- -- -- Analyze passwords for weaknesses and problems. -- Analyzovat hesla a vyhledat slabiny a ostatní problémy. -- -- -- Failed to open HIBP file %1: %2 -- Nepodařilo se otevřít HIBP soubor %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Vyhodnocování databázových záznamů vůči HIBP souboru – chvíli potrvá… -- -- -- Close the currently opened database. -- Zavřít právě otevřenou databázi. -- -- -- Display this help. -- Zobrazit tuto nápovědu. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Neplatný počet slov %1 -- -- -- The word list is too small (< 1000 items) -- Seznam slov je příliš malý (< 1000 položek) -- -- -- Exit interactive mode. -- Opustit interaktivní režim. -- -- -- Exports the content of a database to standard output in the specified format. -- Exportuje obsah databáze na standardní výstup v zadaném formátu. -- -- -- Unable to export database to XML: %1 -- Nedaří se exportovat databázi do XML: %1 -- -- -- Unsupported format %1 -- Nepodporovaný formát %1 -- -- -- Use numbers -- Použít čísla -- -- -- Invalid password length %1 -- Neplatná délka hesla %1 -- -- -- Display command help. -- Zobrazit nápovědu k příkazu -- -- -- Available commands: -- Příkazy k dispozici: -- -- -- Import the contents of an XML database. -- Importovat obsah XML databáze. -- -- -- Path of the XML database export. -- Popis umístění XML souboru pro export z databáze. -- -- -- Path of the new database. -- Popis umístění nové databáze. -- -- -- Successfully imported database. -- Úspěšně naimportovaná databáze. -- -- -- Unknown command %1 -- Neznámý příkaz %1 -- -- -- Flattens the output to single lines. -- Zploští výstup do jediných řádek. -- -- -- Only print the changes detected by the merge operation. -- Vypsat pouze změny zjištěné operací sloučení. -- -- -- Yubikey slot for the second database. -- Slož na Yubikey pro druhou databázi. -- -- -- Successfully merged %1 into %2. -- %1 úspěšně sloučeno do %2. -- -- -- Database was not modified by merge operation. -- Databáze nebyla operací slučování upravena. -- -- -- Moves an entry to a new group. -- Přesune záznam do nové skupiny. -- -- -- Path of the entry to move. -- Popis umístění záznamu, který přesunout. -- -- -- Path of the destination group. -- Popis umístění cílové skupiny. -- -- -- Could not find group with path %1. -- Nedaří se nalézt skupinu s popisem umístění %1. -- -- -- Entry is already in group %1. -- Záznam už se nachází ve skupině %1. -- -- -- Successfully moved entry %1 to group %2. -- Záznam %1 úspěšně přesunut do skupiny %2. -- -- -- Open a database. -- Otevřít databázi. -- -- -- Path of the group to remove. -- Popis umístění skupiny, kterou odebrat. -- -- -- Cannot remove root group from database. -- Z databáze není možné odebrat kořenovou skupinu. -- -- -- Successfully recycled group %1. -- Skupina %1 úspěšně zrecyklována. -- -- -- Successfully deleted group %1. -- Úspěšně smazána skupina %1. -- -- -- Failed to open database file %1: not found -- Nepodařilo se otevřít soubor s databází %1: nenalezen -- -- -- Failed to open database file %1: not a plain file -- Nepodařilo se otevřít soubor s databází %1: nejedná se o holý soubor -- -- -- Failed to open database file %1: not readable -- Nepodařilo se otevřít soubor s databází %1: není přístupný pro čtení -- -- -- Enter password to unlock %1: -- Zadejte heslo pro odemčení %1: -- -- -- Invalid YubiKey slot %1 -- Neplatný slot na YubiKey %1 -- -- -- Enter password to encrypt database (optional): -- Zadejte heslo pro zašifrování databáze (volitelné): -- -- -- HIBP file, line %1: parse error -- HIBP soubor, řádek %1: chyba zpracovávání -- -- -- Secret Service Integration -- Zapnout napojení na Secret Service -- -- -- User name -- Uživatelské jméno -- -- -- Password for '%1' has been leaked %2 time(s)! -- Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát! -- -- -- Invalid password generator after applying all options -- Po uplatnění všech možností není vytváření hesel platné -- -- -- Show the protected attributes in clear text. -- Zobrazit chráněné atributy v čitelném textu. -- -- -- Browser Plugin Failure -- Selhání zásuvného modulu pro webový prohlížeč -- -- -- Could not save the native messaging script file for %1. -- Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging) pro %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Zkopírovat daný atribut do schránky. Pokud není určen, je jako výchozí použito „heslo“. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Zkopírovat stávající TOTP do schránky (totožné s "=a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Zkopírovat atribut záznamu do schránky. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- CHYBA: Zadejte buď --attribute nebo --totp, ne obojí. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- CHYBA: atribut %1 není jednoznačný, shoduje se s %2. -- -- -- Attribute "%1" not found. -- Atribut „%1“ nenalezen. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Atribut „%1“ dané položky zkopírován do schránky! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Slot na Yubikey a volitelně sériové číslo sloužící k přístupu do databáze (např., 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Cílový čas rozšifrování (v ms) pro databázi. -- -- -- time -- čas -- -- -- Set the key file for the database. -- Nastavit soubor s klíčem pro databázi. -- -- -- Set a password for the database. -- Nastavit heslo pro databázi. -- -- -- Invalid decryption time %1. -- Neplatný čas rozšifrování %1. -- -- -- Target decryption time must be between %1 and %2. -- Je třeba, aby cílový čas rozšifrování byl z rozmezí %1 až %2. -- -- -- Failed to set database password. -- Nepodařilo se nastavit heslo databáze. -- -- -- Benchmarking key derivation function for %1ms delay. -- Testování výkonnosti funkce odvozování klíče pro prodlevu %1ms. -- -- -- Setting %1 rounds for key derivation function. -- Nastavuje se %1 průchodů pro funkci pro odvození klíče. -- -- -- error while setting database key derivation settings. -- chyba při nastavování odvozování klíče databáze. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formát který použít pro export. Možnosti jsou „xml“ nebo „csv“. Výchozí je „xml“. -- -- -- Unable to import XML database: %1 -- Nedaří se importovat XML databázi: %1 -- -- -- Show a database's information. -- Zobrazit informace o databázi. -- -- -- UUID: -- UUID: -- -- -- Name: -- Název: -- -- -- Description: -- Popis: -- -- -- Cipher: -- Šifra: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Koš je zapnutý. -- -- -- Recycle bin is not enabled. -- Koš není zapnut. -- -- -- Invalid command %1. -- Neplatný příkaz %1. -- -- -- Invalid YubiKey serial %1 -- Neplatné sériové číslo %1 YubiKey -- -- -- Please touch the button on your YubiKey to continue… -- Pokud chcete pokračovat, dotkněte se tlačítka na vašem YubiKey… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Opravdu chcete vytvořit databáze s nevyplněným heslem? [a/N]: -- -- -- Repeat password: -- Zopakujte heslo: -- -- -- Error: Passwords do not match. -- Chyba: Zadáná hesla se neshodují. -- -- -- All clipping programs failed. Tried %1 -- -- Všechny programy pro ořezání selhaly. Vyzkoušeno %1 -- -- -- AES (%1 rounds) -- AES (%1 průchodů) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Prodleva záložky %1 -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms%1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s%1 s%1 s -- -- -- path to a custom local config file -- umístění vlastního lokálního souboru s nastaveními -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- VAROVÁNÍ: Používáte starý formát souboru s klíčem, který může KeePassXC --přestat v budoucnu podporovat. -- --Zvažte prosím vytvoření nového souboru s klíčem. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 průchody, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – doporučeno) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- Unsupported key file version: %1 -- Nepodporovaná verze souboru s klíčem: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Kontrolní součet se neshoduje! Soubor s klíčem může být poškozený. -- -- -- Unexpected key file data! Key file may be corrupt. -- Neočekávaná data v souboru s klíčem! Soubor s klíčem může být poškozený. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Během komprimace se vyskytla vnitřní chyba v knihovně zlib: -- -- -- Error writing to underlying device: -- Došlo k chybě při zápisu na zařízení, na kterém se nachází: -- -- -- Error opening underlying device: -- Došlo k chybě při otevírání zařízení, na kterém se nachází: -- -- -- Error reading data from underlying device: -- Došlo k chybě při čtení dat ze zařízení, na kterém se nachází: -- -- -- Internal zlib error when decompressing: -- Během rozbalování se vyskytla vnitřní chyba v knihovně zlib: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právě používána na tomto systému. -- -- -- Internal zlib error: -- Vnitřní chyba v knihovně zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Také zobrazit položky, které byly vynechány z přehledů -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Najeďte ukazatelem myši a zobrazí se další podrobnosti. Položky upravíte dvojklikem. -- -- -- Bad -- Password quality -- Špatné -- -- -- Bad — password must be changed -- Špatné — heslo je nutné změnit -- -- -- Poor -- Password quality -- Velmi slabá -- -- -- Poor — password should be changed -- Slabé — heslo by se mělo změnit -- -- -- Weak -- Password quality -- Slabá -- -- -- Weak — consider changing the password -- Slabé — zvažte změnu hesla -- -- -- (Excluded) -- (Vyloučeno) -- -- -- This entry is being excluded from reports -- Tato položka je vynechána z přehledů -- -- -- Please wait, health data is being calculated... -- Čekejte, probíhá výpočet pro kontrolu stavu... -- -- -- Congratulations, everything is healthy! -- Gratulujeme – vše je v pořádku! -- -- -- Title -- Titulek -- -- -- Path -- Popis umístění -- -- -- Score -- Hodnocení -- -- -- Reason -- Důvod -- -- -- Edit Entry... -- Upravit záznam… -- -- -- Exclude from reports -- Vynechat z přehledů -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- VÝSTRAHA: Toto hlášení vyžaduje odeslání informací online službě Have I Been Pwned (https://haveibeenpwned.com). Pokud budete pokračovat, z hesel ve vaší databázi budou vytvořeny kryptografické otisky a prvních pět znaků těchto otisků bude zabezpečeně odesláno na tuto službu. Vaše databáze zůstává bezpečná a z takovéto informace ji není možné rekonstruovat. Nicméně počet hesel, které odešlete a IP adresa bude této službě exponována. -- -- -- Perform Online Analysis -- Provézt analýzu online -- -- -- Also show entries that have been excluded from reports -- Také zobrazit položky, které byly vynechány z přehledů -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Toto sestavení KeePassXC nemá k dispozici síťové funkce. Těch je zapotřebí pro kontrolu vašich hesel vůči databázi Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Gratulujeme, žádná uniklá hesla! -- -- -- Title -- Titulek -- -- -- Path -- Popis umístění -- -- -- Password exposed… -- Heslo exponováno… -- -- -- (Excluded) -- (Vyloučeno) -- -- -- This entry is being excluded from reports -- Tato položka je vynechána z přehledů -- -- -- once -- jednou -- -- -- up to 10 times -- až 10 krát -- -- -- up to 100 times -- až 100 krát -- -- -- up to 1000 times -- až 1000 krát -- -- -- up to 10,000 times -- až 10 000 krát -- -- -- up to 100,000 times -- až 100 000 krát -- -- -- up to a million times -- až milionkrát -- -- -- millions of times -- milionkrát -- -- -- Edit Entry... -- Upravit záznam… -- -- -- Exclude from reports -- Vynechat z přehledů -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Další informace získáte najetím kurzoru nad řádky s ikonou chyb. -- -- -- Name -- Název -- -- -- Value -- Hodnota -- -- -- Please wait, database statistics are being calculated... -- Čekejte, probíhá výpočet statistik o databázi… -- -- -- Database name -- Název databáze -- -- -- Description -- Popis -- -- -- Location -- Umístění -- -- -- Last saved -- Naposledy uloženo -- -- -- Unsaved changes -- Neuložené změny -- -- -- yes -- ano -- -- -- no -- ne -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Databáze byla změněna, ale změny doposud nebyly uloženy na disk. -- -- -- Number of groups -- Počet skupin -- -- -- Number of entries -- Počet položek -- -- -- Number of expired entries -- Počet záznamů, kterým skončila platnost -- -- -- The database contains entries that have expired. -- Databáze obsahuje záznamy, kterým skončila platnost. -- -- -- Unique passwords -- Hesel, která se neopakují -- -- -- Non-unique passwords -- Hesel, které se opakují -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Více než 10% hesel je použito na více místech. Pokud je to jen trochu možné, používejte pro různé účely různá hesla. -- -- -- Maximum password reuse -- Kolikrát nejvýše je možné opakovat použití hesla -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Některá hesla jsou použita více než třikrát. Pokud možno používejte pro každou věc jiné heslo. -- -- -- Number of short passwords -- Počet krátkých hesel -- -- -- Recommended minimum password length is at least 8 characters. -- Doporučené minimum délky hesla je alespoň 8 znaků. -- -- -- Number of weak passwords -- Počet slabých hesel -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Doporučovat používání dlouhých, náhodných hesel s hodnocením „dobré“ nebo „excelentní“. -- -- -- Entries excluded from reports -- Položky vynechané z přehledů -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Položky jsou vynechány z hlášení, např. protože se o nich ví, že mají slabá hesla není nezbytně problém, ale měli byste si je ohlídat. -- -- -- Average password length -- Průměrná délka hesla -- -- -- %1 characters -- %1 znaků -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Průměrná délka hesla je kratší, než deset znaků. Delší hesla poskytují vyšší zabezpečení. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Připojení k agentovi se nezdařilo. -- -- -- Agent protocol error. -- Chyba protokolu agenta. -- -- -- No agent running, cannot add identity. -- Není spuštěný žádný agent, identitu nelze přidat. -- -- -- No agent running, cannot remove identity. -- Není spuštěný žádný agent, identitu není možné odebrat. -- -- -- Agent refused this identity. Possible reasons include: -- Agent tuto identitu odmítl. Mezi možné důvody patří: -- -- -- The key has already been added. -- Klíč už byl přidán. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Omezená životnost není podporována agentem (zkontrolujte volby). -- -- -- A confirmation request is not supported by the agent (check options). -- Požadavek na potvrzení není podporován agentem (zkontrolujte volby). -- -- -- Key identity ownership conflict. Refusing to add. -- Konflikt vlastnictví identity klíče. Přidání odmítnuto. -- -- -- No agent running, cannot list identities. -- Není spuštěný žádný agent, není proto možné vypsat identity -- -- -- -- SearchHelpWidget -- -- Search Help -- Nápověda ke hledání -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Pojmy hledejte následovně: [modifikátory][kolonka:]["]pojem["] -- -- -- Every search term must match (ie, logical AND) -- Je třeba shody v každém hledaném termínu (tj, logické A) -- -- -- Modifiers -- Modifikátory -- -- -- exclude term from results -- vynechat pojem z výsledků -- -- -- match term exactly -- hledat přesnou shodu s pojmem -- -- -- use regex in term -- použít v pojmu regulární výraz -- -- -- Fields -- Kolonky -- -- -- Term Wildcards -- Zástupné znaky pojmu -- -- -- match anything -- shoda s čímkoli -- -- -- match one -- shoda s jedním -- -- -- logical OR -- logické NEBO -- -- -- Examples -- Příklady -- -- -- -- SearchWidget -- -- Search -- Hledat -- -- -- Limit search to selected group -- Omezit hledání na označenou skupinu -- -- -- Search Help -- Nápověda ke hledání -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Hledat (%1)… -- -- -- Case sensitive -- Rozlišovat malá/velká písmena -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Možnosti -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Zapnout napojení KeepassXC na Freedesktop Secret Service -- -- -- General -- Obecné -- -- -- Show notification when credentials are requested -- Při vyžádání si přihlašovacích údajů zobrazit oznámení -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body></p>Pokud je pro databázi zapnutý Koš, záznamy budou přesouvány přímo do něj. Jinak budou bez potvrzování smazány.</p><p>Pokud je položka odkazována z jiné, budete ale dotázáni.</p></body></html> -- -- -- Exposed database groups: -- Vystavené skupiny databáze: -- -- -- Authorization -- Pověření -- -- -- These applications are currently connected: -- Tyto aplikace jsou aktuálně připojené: -- -- -- Don't confirm when entries are deleted by clients -- Nepotvrzovat pokud jsou položky mazané z klientů -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Chyba:</b> Nepodařilo se připojit k DBus. Zkontrolujte nastavení DBus. -- -- -- <b>Warning:</b> -- <b>Varování:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Aby byl zásuvný modul aktivován a zapnuto upravování této sekce, uložte stávající změny. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktivní -- -- -- Allow export -- Umožnit export -- -- -- Allow import -- Umožnit import -- -- -- Own certificate -- Vlastní certifikát -- -- -- Fingerprint: -- Otisk: -- -- -- Certificate: -- Certifikát: -- -- -- Signer -- Podepsal -- -- -- Key: -- Klíč: -- -- -- Generate -- Tvoř -- -- -- Import -- Importovat -- -- -- Export -- Export -- -- -- Imported certificates -- Importované certifikáty -- -- -- Trust -- Důvěra -- -- -- Ask -- Ptát se -- -- -- Untrust -- Nevěřit -- -- -- Remove -- Odebrat -- -- -- Path -- Popis umístění -- -- -- Status -- Stav -- -- -- Fingerprint -- Otisk -- -- -- Certificate -- Certifikát -- -- -- Trusted -- Důvěryhodný -- -- -- Untrusted -- Nedůvěryhodný -- -- -- Unknown -- Neznámý -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Soubor s klíčem pro KeeShare -- -- -- All files -- Veškeré soubory -- -- -- Select path -- Vybrat umístění -- -- -- Exporting changed certificate -- Exportování změněného certifikátu -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Exportovaný certifikát se liší od toho, který je používán. Chcete exportovat stávající certifikát? -- -- -- Signer: -- Podepsal(a): -- -- -- Allow KeeShare imports -- Umožnit KeeShare importy -- -- -- Allow KeeShare exports -- Umožnit KeeShare exporty -- -- -- Only show warnings and errors -- Zobrazovat pouze varování a chyby -- -- -- Key -- Klíč -- -- -- Signer name field -- Kolonka pro jméno podepisujícího -- -- -- Generate new certificate -- Vytvořit nový certifikát -- -- -- Import existing certificate -- Importovat existující certifikát -- -- -- Export own certificate -- Exportovat vlastní certifikát -- -- -- Known shares -- Známá sdílení -- -- -- Trust selected certificate -- Důvěřovat označenému certifikátu -- -- -- Ask whether to trust the selected certificate every time -- Ptát se pokaždé zda označenému certifikátu důvěřujete -- -- -- Untrust selected certificate -- Přestat důvěřovat označenému certifikátu -- -- -- Remove selected certificate -- Odebrat označený certifikát -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Přepsání podepsaného kontejneru sdílení není podporováno – exportu zabráněno -- -- -- Could not write export container (%1) -- Nedaří se zapsat exportní kontejner (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Nedaří se zapouzdřit podpis: Soubor se nedaří otevřít pro zápis (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Nedaří se zapouzdřit podpis: Do souboru se nedaří zapsat (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Nedaří se zapouzdřit databázi: Soubor se nedaří otevřít pro zápis (%1) -- -- -- Could not embed database: Could not write file (%1) -- Nedaří se zapouzdřit databázi: Do souboru se nedaří zapsat (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Přepsání nepodepsaného kontejneru sdílení není podporováno – exportu zabráněno -- -- -- Could not write export container -- Nedaří se zapsat do exportního kontejneru -- -- -- Unexpected export error occurred -- Došlo k neočekávané chybě exportu -- -- -- -- ShareImport -- -- Import from container without signature -- Importovat z kontejneru bez podpisu -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Není možné ověřit zdroj sdíleného kontejneru protože není podepsán. Opravdu chcete importovat z %1? -- -- -- Import from container with certificate -- Importovat z kontejneru s certifikátem -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Věříte %1 s otiskem %2 od %3? {1 ?} {2 ?} -- -- -- Not this time -- Tentokrát ne -- -- -- Never -- Nikdy -- -- -- Always -- Vždy -- -- -- Just this time -- Jen pro teď -- -- -- Signed share container are not supported - import prevented -- Podepsaný kontejner sdílení není podporován – importu zabráněno -- -- -- File is not readable -- Soubor není čitelný -- -- -- Invalid sharing container -- Neplatný kontejner pro sdílení -- -- -- Untrusted import prevented -- Zabráněno nedůvěryhodnému importu -- -- -- Successful signed import -- Úspěšný podepsaný import -- -- -- Unsigned share container are not supported - import prevented -- Nepodepsaný kontejner sdílení není podporován – importu zabráněno -- -- -- Successful unsigned import -- Úspěšný nepodepsaný import -- -- -- File does not exist -- Soubor neexistuje -- -- -- Unknown share container type -- Neznámý typ kontejneru pro sdílení -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import z %1 se nezdařil (%2) -- -- -- Import from %1 successful (%2) -- Import z %1 úspěšný (%2) -- -- -- Imported from %1 -- Importováno z %1 -- -- -- Export to %1 failed (%2) -- Export do %1 se nezdařil (%2) -- -- -- Export to %1 successful (%2) -- Export do %1 úspěšný (%2) -- -- -- Export to %1 -- Exportovat do %1 -- -- -- Multiple import source path to %1 in %2 -- Popis umístění zdroje pro vícero importů do %1 v %2 -- -- -- Conflicting export target path %1 in %2 -- Kolidující popis umístění %1 cíle exportu v %2 -- -- -- -- TotpDialog -- -- Timed Password -- Časované heslo -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopírovat -- -- -- Expires in <b>%n</b> second(s) -- Platnost končí za <b>%n</b> sekunduPlatnost končí za %n sekundyPlatnost končí za %n sekundPlatnost končí za %n sekundy -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopírovat -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- POZN.: Tato TOTP nastavení jsou uživatelsky určená a nemusí fungovat s ostatními nástroji pro ověřování se. -- -- -- There was an error creating the QR code. -- Došlo k chybě při vytváření QR kódu. -- -- -- Closing in %1 seconds. -- Zavření za %1 sekund. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Nastavit na času založené jednorázové heslo (TOTP) -- -- -- Default RFC 6238 token settings -- Výchozí nastavení RFC 6238 tokenu -- -- -- Steam token settings -- Nastavení proudového tokenu -- -- -- Use custom settings -- Použít uživatelsky určená nastavení -- -- -- Custom Settings -- Uživatelsky určená nastavení -- -- -- Time step: -- Časový krok: -- -- -- sec -- Seconds -- sek. -- -- -- Code size: -- Velikost kódu: -- -- -- Secret Key: -- Tajný klíč: -- -- -- Secret key must be in Base32 format -- Je třeba, aby tajný klíč byl ve formátu Base32 -- -- -- Secret key field -- Kolonka pro tajný klíč -- -- -- Algorithm: -- Algoritmus: -- -- -- Time step field -- Kolonka pro časový krok -- -- -- digits -- číslice -- -- -- Invalid TOTP Secret -- Neplatné TOTP tajemství -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Zadali jste neplatný tajný klíč. Je třeba, aby byl ve formátu Base32. --Příklad: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Potvrdit odebrání nastavení pro TOTP heslo -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Opravdu chcete smazat nastavení pro TOTP heslo u tohoto záznamu? -- -- -- -- URLEdit -- -- Invalid URL -- Neplatné URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Zjišťování aktualizací -- -- -- Checking for updates... -- Zjišťování aktualizací… -- -- -- Close -- Zavřít -- -- -- Update Error! -- Chyba aktualizace! -- -- -- An error occurred in retrieving update information. -- Došlo k chybě při získávání informací o aktualizacích. -- -- -- Please try again later. -- Zkuste to prosím znovu později. -- -- -- Software Update -- Aktualizace software -- -- -- A new version of KeePassXC is available! -- Je k dispozici nová verze KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- Nyní je k dispozici KeePassXC verze %1 ‒ nainstalovanou máte %2. -- -- -- Download it at keepassxc.org -- Stáhněte si z keepassxc.org -- -- -- You're up-to-date! -- Používáte aktuální verzi! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 je v tuto chvíli nejnovější dostupná verze -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Začněte uchovávat svá hesla bezpečně v KeePassXC databázi -- -- -- Create new database -- Vytvořit novou databázi -- -- -- Open existing database -- Otevřít existující databázi -- -- -- Import from KeePass 1 -- Importovat z KeePass 1 -- -- -- Import from CSV -- Importovat z CSV -- -- -- Recent databases -- Nedávno otevřené databáze -- -- -- Welcome to KeePassXC %1 -- Vítejte v KeePassXC %1 -- -- -- Import from 1Password -- Importovat z 1Password -- -- -- Open a recent database -- Otevřít nedávno otevřenou databázi -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Nastavených slotů – %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Výzva-odpověď – Slot %3 – %4 -- -- -- Press -- Stisknout -- -- -- Passive -- Pasivní -- -- -- %1 Invalid slot specified - %2 -- zadán neplatný %1 slot – %2 -- -- -- The YubiKey interface has not been initialized. -- Rozhraní YubiKey nebylo inicializováno. -- -- -- Hardware key is currently in use. -- Hardwarový klíč je nyní využíván něčím jiným. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Nepodařilo se nalézt hardwarový klíč se sériovým číslem %1. Připojte ho, aby bylo možné pokračovat. -- -- -- Hardware key timed out waiting for user interaction. -- Překročen časový limit pro zahájení interakce uživatele s hardwarovým klíčem. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Při přistupování k hardwarovému klíči došlo k chybě na USB sběrnici: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Nepodařilo se dokončit výzvu-odpověď – konkrétní chyba byla: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Načíst znovu -- -- -- YubiKey Challenge-Response -- YubiKey výzva-odpověď -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Pokud vlastníte zařízení <a href="https://www.yubico.com/">YubiKey</a>, můžete ho použít jako další úroveň zabezpečení.</p><p>YubiKey vyžaduje aby jeden z jeho slotů byl naprogramován jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 výzva-odpověď</a>.</p> -- -- -- Refresh hardware tokens -- Znovu načíst hardwarová bezpečnostní zařízení -- -- -- Hardware key slot selection -- Výběr slotu v hardwarovém klíči -- -- -- Could not find any hardware keys! -- Nedaří se nalézt žádné hardwarové klíče! -- -- -- Selected hardware key slot does not support challenge-response! -- Zvolený slot hardwarového klíče nepodporuje výzvu-odpověď! -- -- -- Detecting hardware keys… -- Zjišťování hardwarových klíčů… -- -- -- No hardware keys detected -- Nenalezeny žádné hardwarové klíče -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_da.ts keepassxc-2.6.4-patched/share/translations/keepassx_da.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_da.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_da.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7868 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Om KeePassXC -- -- -- About -- Om -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Rapportér fejl på: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC distribueres under betingelserne i GNU General Public License (GPL) version 2 eller (efter eget valg) version 3. -- -- -- Contributors -- Bidragsydere -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se bidrag på GitHub</a> -- -- -- Debug Info -- Fejlsøgningsinformation -- -- -- Include the following information whenever you report a bug: -- Inkludér følgende information når du rapporterer en fejl: -- -- -- Copy to clipboard -- Kopiér til udklipsholder -- -- -- Project Maintainers: -- Projektet vedligeholdes af: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Særlig tak fra KeePassXC-holdet går til debfx for at udvikle den oprindelige KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Brug OpenSSH til Windows i stedet for Pageant -- -- -- Enable SSH Agent integration -- Aktivér SSH-agent (kræver genstart) -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK-værdi -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK-overstyring -- -- -- (empty) -- (tom) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Ingen SSH+agent socket tilgængelig. Sørg enten for at SSH_AUTH_SOCK eksisterer eller opsæt en overstyring. -- -- -- SSH Agent connection is working! -- SSH-agent-forbindelsen virker! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Programindstillinger -- -- -- General -- Generelt -- -- -- Security -- Sikkerhed -- -- -- Access error for config file %1 -- Adgangsfejl for konfigurationsfil %1 -- -- -- Icon only -- Kun ikon -- -- -- Text only -- Kun tekst -- -- -- Text beside icon -- Tekst ved siden af ikon -- -- -- Text under icon -- Tekst uden ikon -- -- -- Follow style -- Følg stil -- -- -- Reset Settings? -- Nulstil indstillingerne? -- -- -- Are you sure you want to reset all general and security settings to default? -- Er du sikker på at du vil nulstille alle generelle og sikkerhedsindstillinger til standardværdierne? -- -- -- Monochrome (light) -- Monokrom (lys) -- -- -- Monochrome (dark) -- Monokrom (mørk) -- -- -- Colorful -- Farverig -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Grundlæggende indstillinger -- -- -- Startup -- Opstart -- -- -- Start only a single instance of KeePassXC -- Start kun én instans af KeePassXC -- -- -- Minimize window at application startup -- Minimer vindue ved opstart -- -- -- File Management -- Filhåndtering -- -- -- Backup database file before saving -- Sikkerhedskopiér databasefilen inden den gemmes -- -- -- Automatically save after every change -- Gem automatisk når der foretages ændringer -- -- -- Automatically reload the database when modified externally -- Genindlæs automatisk databasen når den er blevet ændret eksternt -- -- -- Entry Management -- Posthåndtering -- -- -- Use group icon on entry creation -- Brug gruppeikon ved oprettelse af post -- -- -- Minimize instead of app exit -- Minimer i stedet for at afslutte programmet -- -- -- Show a system tray icon -- Vis et ikon i systembakken -- -- -- Hide window to system tray when minimized -- Skjul vindue i systembakken når det er minimeret -- -- -- Auto-Type -- Autoskriv -- -- -- Use entry title to match windows for global Auto-Type -- Brug postens titel til at matche vinduer for global autoskriv -- -- -- Use entry URL to match windows for global Auto-Type -- Brug postens URL til at matche vinduer for global autoskriv -- -- -- Always ask before performing Auto-Type -- Spørg altid før autoskriv udføres -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Værktøjslinje kan flyttes -- -- -- Remember previously used databases -- Husk tidligere anvendte databaser -- -- -- Load previously open databases on startup -- Indlæs tidligere anvendte databaser ved opstart -- -- -- Remember database key files and security dongles -- Husk databasenøglefiler og sikkerhedsdongler -- -- -- Check for updates at application startup once per week -- Søg efter opdateringer ved programstart en gang ugentligt -- -- -- Include beta releases when checking for updates -- Medtag beta-udgivelser når der søges efter opdateringer -- -- -- Language: -- Sprog: -- -- -- (restart program to activate) -- (genstart program for at aktivere) -- -- -- Minimize window after unlocking database -- -- -- -- Minimize when opening a URL -- -- -- -- Hide window when copying to clipboard -- -- -- -- Minimize -- -- -- -- Drop to background -- -- -- -- Favicon download timeout: -- -- -- -- Website icon download timeout in seconds -- -- -- -- sec -- Seconds -- sek -- -- -- Toolbar button style -- -- -- -- Language selection -- -- -- -- Global auto-type shortcut -- -- -- -- Auto-type character typing delay milliseconds -- -- -- -- Auto-type start delay milliseconds -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeouts -- -- -- Clear clipboard after -- Ryd udklipsholder efter -- -- -- sec -- Seconds -- sek -- -- -- Lock databases after inactivity of -- Lås databaserne efter inaktivitet i -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Glem TouchID efter inaktivitet på -- -- -- Convenience -- Bekvemmelighed -- -- -- Lock databases when session is locked or lid is closed -- Lås databaser når sessionen låses eller låget lukkes -- -- -- Forget TouchID when session is locked or lid is closed -- Glem TouchID når sessionen låses eller låget lukkes -- -- -- Lock databases after minimizing the window -- Lås databaser efter vinduet er blevet minimeret -- -- -- Re-lock previously locked database after performing Auto-Type -- Lås tidligere låste databaser igen efter udførsel af autoskriv -- -- -- Hide passwords in the entry preview panel -- Skjul adgangskoder i panelet til forhåndsvisning af post -- -- -- Hide entry notes by default -- Skjul postens bemærkninger som standard -- -- -- Privacy -- Privatliv -- -- -- Use DuckDuckGo service to download website icons -- -- -- -- Clipboard clear seconds -- -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Kunne ikke finde en post, der matcher vinduets titel: -- -- -- Auto-Type - KeePassXC -- Autoskriv - KeePassXC -- -- -- Auto-Type -- Autoskriv -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Syntaksen af dit autoskriv-udtryk er forkert! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Denne autoskriv-kommando indholder en meget lang pause. Er du sikker på, at du vil fortsætte? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Denne autoskriv-kommando indholder meget langsomme tastetryk. Er du sikker på, at du vil fortsætte? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Denne autoskriv-kommando indholder argumenter, som er gentaget ofte. Er du sikker på, at du vil fortsætte? -- -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Vindue -- -- -- Sequence -- Sekvens -- -- -- Default sequence -- Standardsekvens -- -- -- -- AutoTypeMatchModel -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Brugernavn -- -- -- Sequence -- Sekvens -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopiér &brugernavn -- -- -- Copy &password -- Kopiér adgangsk&ode -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Autoskriv - KeePassXC -- -- -- Select entry to Auto-Type: -- Vælg post til autoskriv: -- -- -- Search... -- Søg... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser gem post -- -- -- Ok -- Ok -- -- -- Cancel -- Annuller -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Du har flere databaser åbne. --Venligst vælg den korrekte database for at gemme loginoplysninger. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Ny anmodning om nøgletilknytning -- -- -- Save and allow access -- Gem og tillad adgang -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Overskriv eksisterende nøgle? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- En delt krypteringsnøgle med navnet "%1" eksisterer allerede. --Vil du overskrive den? -- -- -- KeePassXC: Update Entry -- KeePassXC: Opdater post -- -- -- Do you want to update the information in %1 - %2? -- Vil du opdatere oplysningerne i %1 - %2? -- -- -- Abort -- Afbryd -- -- -- Converting attributes to custom data… -- Konverterer attributter til tilpasset data … -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Konverterede KeePassHTTP-attributter -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Det lykkedes at konvertere attributter fra %1 post(er). --Flyttede %2 nøgler til tilpasset data. -- -- -- Successfully moved %n keys to custom data. -- Det lykkedes at flytte %n nøgle til tilpasset data.Det lykkedes at flytte %n nøgler til tilpasset data. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Fandt ingen post med KeePassHTTP-attributter! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Den aktive database indeholder ikke en post med KeePassHTTP-attributter. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Registreret udgået browserintegritetindstillinger -- -- -- KeePassXC: Create a new group -- KeePassXC: Opret en ny gruppe -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Modtog en anmodning om at oprette en ny gruppe "%1". --Vil du oprette gruppen? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Dine indstillinger for KeePassXC-Browser skal flyttes ind i databaseindstillingerne. --Det er nødvendigt for at vedligeholde dine nuværende browserforbindelser. --Vil du migrere dine eksisterende indstillinger nu? -- -- -- Don't show this warning again -- Vis ikke denne advarsel igen -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Dette er nødvendigt for at tilgå din database med KeePassXC-Browser -- -- -- Enable browser integration -- -- -- -- General -- Generelt -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- Aktivér integritet for disse browsere: -- -- -- Vivaldi -- -- -- -- &Edge -- -- -- -- Firefox -- -- -- -- Tor Browser -- -- -- -- Brave -- -- -- -- Google Chrome -- -- -- -- Chromium -- -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Kun poster med samme skema (http://, https:// ...) bliver returneret. -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Returnér kun det bedste match for en specifik URL i stedet for alle matches for hele domænet. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Avanceret -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- Automatisk oprettelse eller opdatering af tekstfelter understøttes ikke. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Opdaterer KeePassXC eller keepassxc-proxy binære sti automatisk til beskedscript ved opstart. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Brug en tilpasset proxyplacering hvis du har installeret en proxy manuelt. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Gennemse ... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Grundet Snap-sandkasse, er du nødsaget til at køre et script for at aktivere browserintegritet.<br />Du kan hente scriptet fra %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- Venligst se vigtige instruktioner for brug af browser tilføjelsen nedenfor -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Advarsel:</b> Følgende indstillinger kan være farlige! -- -- -- Executable Files -- Eksekverbare filer -- -- -- All Files -- Alle filer -- -- -- Select custom proxy location -- Vælg en tilpasset proxyplacering -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Kloningsindstillinger -- -- -- Append ' - Clone' to title -- Tilføj ' - Klon' til titel -- -- -- Replace username and password with references -- Udskift brugernavn og adgangskode med referencer -- -- -- Copy history -- Kopiér historik -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importér CSV-felter -- -- -- filename -- filnavn -- -- -- size, rows, columns -- størrelse, rækker, kolonner -- -- -- Encoding -- Kodning -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Tekst er kvalificeret af -- -- -- Fields are separated by -- Felter separeres med -- -- -- Comments start with -- Kommentarer starter med -- -- -- Consider '\' an escape character -- Betragt '\' som en escape karakter -- -- -- Preview -- Forhåndsvisning -- -- -- Imported from CSV file -- Importeret fra CSV-fil -- -- -- Original data: -- Original data: -- -- -- Error -- Fejl -- -- -- Error(s) detected in CSV file! -- Fejl registreret i CSV-fil! -- -- -- [%n more message(s) skipped] -- [%n yderligere meddelelse sprunget over][%n yderligere meddelelser sprunget over] -- -- -- CSV import: writer has errors: --%1 -- CSV-import: skriver har fejl: --%1 -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- Sidst ændret -- -- -- Password -- Adgangskode -- -- -- Created -- Oprettet -- -- -- Notes -- Bemærkninger -- -- -- Title -- Titel -- -- -- Group -- Gruppe -- -- -- URL -- URL -- -- -- Username -- Brugernavn -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolonne%n kolonner -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n bytes -- -- -- %n row(s) -- %n række%n rækker -- -- -- -- Database -- -- File %1 does not exist. -- Filen %1 findes ikke. -- -- -- Unable to open file %1. -- Kan ikke åbne filen %1. -- -- -- Error while reading the database: %1 -- Fejl ved læsning af databasen: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Filen kan ikke skrives da den er åbnet i skrivebeskyttet tilstand. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Nøglen blev ikke transformeret. Det er en fejl. Rapportér det venligst til udviklerne! -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- Papirkurv -- -- -- Passwords -- Root group name -- Adgangskoder -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Lås op for database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Nøglefil: -- -- -- Refresh -- Genopfrisk -- -- -- Don't show this warning again -- Vis ikke denne advarsel igen -- -- -- All files -- Alle filer -- -- -- Key files -- Nøglefiler -- -- -- Select key file -- Vælg nøglefil -- -- -- Failed to open key file: %1 -- -- -- -- Unlock KeePassXC Database -- -- -- -- Enter Password: -- -- -- -- Password field -- -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Gennemse ... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Tryk på knappen på din YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Adgangskoder -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Avancerede indstillinger -- -- -- General -- Generelt -- -- -- Security -- Sikkerhed -- -- -- Encryption Settings -- Krypteringsindstillinger -- -- -- Browser Integration -- Browserintegritet -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browserindstillinger -- -- -- Stored keys -- Gemte nøgler -- -- -- Remove -- Fjern -- -- -- Delete the selected key? -- Slet den valgte nøgle? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Vil du virkelig slette den valgte nøgle? --Det kan forhindre forbindelse til browserpluginet. -- -- -- Key -- Nøgle -- -- -- Value -- Værdi -- -- -- Enable Browser Integration to access these settings. -- Aktivér browserintegritet for at tilgå indstillingerne. -- -- -- Disconnect all browsers -- Afbryd forbindelse til alle browsere -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Vil du virkelig afbryde forbindelsen til alle browsere? --Det kan forhindre forbindelse til browserpluginet. -- -- -- KeePassXC: No keys found -- KeePassXC: Ingen nøgler fundet -- -- -- No shared encryption keys found in KeePassXC settings. -- Fandt ingen delte krypteringsnøgler i KeePassXC-indstillinger. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Fjernede nøgler fra database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Det lykkedes at fjerne %n krypteret nøgle fra KeePassXC-indstillingerne.Det lykkedes at fjerne %n krypteret nøgler fra KeePassXC-indstillingerne. -- -- -- Forget all site-specific settings on entries -- Glem alle stedspecifikke indstillinger på posterne -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Vil du virkelig glemme alle stedspecifikke indstillinger på hver post? --Tilladelser til at tilgå poster tilbagekaldes. -- -- -- Removing stored permissions… -- Fjerner gemte tilladelser … -- -- -- Abort -- Afbryd -- -- -- KeePassXC: Removed permissions -- KeePassXC: Fjernede tilladelser -- -- -- Successfully removed permissions from %n entry(s). -- Det lykkedes at fjerne tilladelser fra %n post.Det lykkedes at fjerne tilladelser fra %n poster. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Ingen nøgler fundet! -- -- -- The active database does not contain an entry with permissions. -- Den aktive database indholder ikke en post med tilladelser. -- -- -- Move KeePassHTTP attributes to custom data -- Flyt KeePassHTTP-attributter til tilpasset data -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Vil du virkelig flytte alle udgået browerintegrationsdata til den seneste standard? --Det er nødvendigt for at vedligeholde kompatibilitet med browserpluginet. -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Oprettet -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Tilføj yderligere beskyttelse ... -- -- -- No password set -- Ingen adgangskode indstillet -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- ADVARSEL! Du har ikke indstillet en adgangskode. Det frarådes kraftigt at bruge en database uden en adgangskode! -- --Er du sikker på, du vil fortsætte uden en adgangskode? -- -- -- Continue without password -- -- -- -- No encryption key added -- Ingen krypteringsnøgle tilføjet -- -- -- You must add at least one encryption key to secure your database! -- Du skal tilføje mindst en krypteringsnøgle for at sikre din database! -- -- -- Unknown error -- Ukendt fejl -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Krypteringsalgoritme: -- -- -- AES: 256 Bit (default) -- AES: 256 bit (standard) -- -- -- Twofish: 256 Bit -- Twofish: 256 bit -- -- -- Key Derivation Function: -- Nøgleafledningsfunktion: -- -- -- Transform rounds: -- Transformationsrunder: -- -- -- Memory Usage: -- Hukommelsesforbrug: -- -- -- Parallelism: -- Parallelitet: -- -- -- Decryption Time: -- Krypteringstid: -- -- -- ?? s -- ?? s -- -- -- Change -- Skift -- -- -- Higher values offer more protection, but opening the database will take longer. -- Højere værdier giver mere beskyttelse, men det vil tage længere at åbne databasen. -- -- -- Database format: -- Format på database: -- -- -- This is only important if you need to use your database with other programs. -- Det er kun vigtigt hvis du skal bruge din database med andre programmer. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (anbefales) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- uændret -- -- -- Number of rounds too high -- Key transformation rounds -- Antallet af runder er for højt -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Du benytter et meget højt antal runder af nøgletransformationer med Argon2. -- --Hvis du vil beholde antallet, så kan din database tage timer eller dage (eller endnu længere) at åbne! -- -- -- Understood, keep number -- Forstået, beholder nummer -- -- -- Cancel -- Annuller -- -- -- Number of rounds too low -- Key transformation rounds -- Antallet af runder er for lavt -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Du bruger en meget lavt antal nøgletransformeringsrunder med AES-KDF. -- --Hvis du beholder dette antal, så kan din database være nem af knække! -- -- -- KDF unchanged -- KDF uændret -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Kunne ikke transformere nøglen med nye KDF-parametre; KDF er uændret. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- tråd tråde -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- -- -- -- Database format -- -- -- -- Encryption algorithm -- -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- -- -- -- Parallelism -- -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database metadata -- -- -- Database name: -- Navn på database: -- -- -- Database description: -- Beskrivelse af database: -- -- -- Default username: -- Standard brugernavn: -- -- -- History Settings -- Historieindstillinger -- -- -- Max. history items: -- Maks. posthistorik: -- -- -- Max. history size: -- Maks. historikstørrelse: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Brug papirkurv -- -- -- Additional Database Settings -- Yderligere databaseindstillinger -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Deling -- -- -- Breadcrumb -- Brødkrumme -- -- -- Type -- Type -- -- -- Path -- Sti -- -- -- Last Signer -- Sidste underskriver -- -- -- Certificates -- Certifikater -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Navn på database: -- -- -- Description: -- Beskrivelse: -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2-database -- -- -- All files -- Alle filer -- -- -- Open database -- Åbn database -- -- -- CSV file -- CSV-fil -- -- -- Merge database -- Sammenlæg database -- -- -- Open KeePass 1 database -- Åbn KeePass 1-database -- -- -- KeePass 1 database -- KeePass 1-database -- -- -- Export database to CSV file -- Eksportér database til CSV-fil -- -- -- Writing the CSV file failed. -- Skrivning af CSV-fil mislykkedes. -- -- -- Database creation error -- Fejl ved oprettelse af database -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Den oprettede database har ingen nøgle eller KDF. Nægter at gemme den. --Det er helt sikkert en fejl. Rapportér det venligst til udviklerne. -- -- -- Select CSV file -- Vælg CSV-fil -- -- -- New Database -- Ny database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Ny database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Låst] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Skrivebeskyttet] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Søger ... -- -- -- Do you really want to delete the entry "%1" for good? -- Vil du virkelig slette posten "%1" permanent? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Vil du virkelig flytte posten "%1" til papirkurven? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Vil du virkelig flytte %n post til papirkurven?Vil du virkelig flytte %n poster til papirkurven? -- -- -- Execute command? -- Udfør kommando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Er du sikker på, at du vil udføre følgende kommando?<br><br>%1<br> -- -- -- Remember my choice -- Husk mit valg -- -- -- Do you really want to delete the group "%1" for good? -- Vil du slette gruppen "%1" permanent? -- -- -- No current database. -- Ingen database valgt. -- -- -- No source database, nothing to do. -- Ingen kilde-database, intet at gøre. -- -- -- Search Results (%1) -- Søgeresultater (%1) -- -- -- No Results -- Ingen resultater -- -- -- File has changed -- Filen har ændret sig -- -- -- The database file has changed. Do you want to load the changes? -- Databasefilen har ændret sig. Er du sikker på, at du vil indlæse ændringerne? -- -- -- Merge Request -- Sammenlægningsanmodning -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Databasefilen har ændringer og du har ændringer som du ikke har gemt. --Vil du sammenlægge dine ændringer med databasens? -- -- -- Empty recycle bin? -- Tøm papirkurven? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Er du sikker på, at du vil slette alt fra din papirkurv permanent? -- -- -- Do you really want to delete %n entry(s) for good? -- Vil du virkelig slette %n post permanent?Vil du virkelig slette %n poster permanent? -- -- -- Delete entry(s)? -- Slet post?Slet poster? -- -- -- Move entry(s) to recycle bin? -- Flyt post til papirkurven?Flyt poster til papirkurven? -- -- -- Lock Database? -- Lås database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Du er ved at redigere en post. Forkast ændringerne og lås alligevel? -- -- -- "%1" was modified. --Save changes? -- "%1" blev ændret. --Gem ændringerne? -- -- -- Database was modified. --Save changes? -- Databasen blev ændret. --Gem ændringerne? -- -- -- Save changes? -- Gem ændringer? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Kunne ikke åbne den nye databasefil ved forsøg på automatisk genindlæsning. --Fejl: %1 -- -- -- Disable safe saves? -- Slå sikre gem til? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC har ikke været i stand til at gemme databasen flere gange. Dette er formentlig fordi en filsynkroniseringstjeneste har en lås på filen. --Så sikre gem fra og prøv igen? -- -- -- Passwords -- Adgangskoder -- -- -- Save database as -- Gem database som -- -- -- KeePass 2 Database -- KeePass 2-database -- -- -- Replace references to entry? -- Erstat referencer til post? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Posten "%1" har %2 reference. Vil du overskrive referencerne med værdier, springe over posten eller slette alligevel?Posten "%1" har %2 referencer. Vil du overskrive referencerne med værdier, springe over posten eller slette alligevel? -- -- -- Delete group -- Slet gruppe -- -- -- Move group to recycle bin? -- Flyt gruppe til papirkurv? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Vil du virkelig flytte gruppen "%1" til papirkurven? -- -- -- Successfully merged the database files. -- Sammenlægning af databasefiler lykkedes. -- -- -- Database was not modified by merge operation. -- Databasen blev ikke ændret af sammenlægningshandlingen. -- -- -- Shared group... -- Delt gruppe ... -- -- -- Writing the database failed: %1 -- Skrivning af databasen mislykkedes: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Post -- -- -- Advanced -- Avanceret -- -- -- Icon -- Ikon -- -- -- Auto-Type -- Autoskriv -- -- -- Properties -- Egenskaber -- -- -- History -- Historik -- -- -- SSH Agent -- SSH-agent -- -- -- n/a -- - -- -- -- (encrypted) -- (krypteret) -- -- -- Select private key -- Vælg privat nøgle -- -- -- Entry history -- Indtastningshistorik -- -- -- Add entry -- Tilføj post -- -- -- Edit entry -- Rediger post -- -- -- New attribute -- Ny attribut -- -- -- Are you sure you want to remove this attribute? -- Er du sikker på, at du vil fjerne denne attribut? -- -- -- Tomorrow -- I morgen -- -- -- %n week(s) -- %n uge%n uger -- -- -- %n month(s) -- %n måned%n måneder -- -- -- Entry updated successfully. -- Post blev succesfuldt opdateret. -- -- -- New attribute %1 -- Ny attribut %1 -- -- -- %n year(s) -- %n år%n år -- -- -- Confirm Removal -- Bekræft fjernelse -- -- -- Browser Integration -- Browserintegritet -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- Vis -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Yderligere attributter -- -- -- Add -- Tilføj -- -- -- Remove -- Fjern -- -- -- Edit Name -- Rediger navn -- -- -- Protect -- Beskyt -- -- -- Reveal -- Vis -- -- -- Attachments -- Vedhæftninger -- -- -- Foreground Color: -- Forgrundsfarve: -- -- -- Background Color: -- Baggrundsfarve: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Aktivér autoskriv for denne post -- -- -- Window Associations -- Vinduestilknytninger -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Vinduestitel: -- -- -- Use a specific sequence for this association: -- Brug en specifik sekvens for tilknytningen: -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- Nedarv standard Auto-Indsæt sekvens fra gruppe -- -- -- Use custom Auto-Type sequence: -- Brug brugerdefineret Auto-indsæt sekvens: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- Generelt -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Tilføj -- -- -- Remove -- Fjern -- -- -- Edit -- Rediger -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Vis -- -- -- Restore -- Gendan -- -- -- Delete -- Slet -- -- -- Delete all -- Slet alle -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Adgangskode: -- -- -- Title: -- Titel: -- -- -- Presets -- Forudindstillinger -- -- -- Toggle the checkbox to reveal the notes section. -- Klik på afkrydsningsfeltet for at vise bemærkninger-afsnittet. -- -- -- Username: -- Brugernavn: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- -- -- -- Toggle notes visible -- -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- -- -- -- Notes: -- Noter: -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formular -- -- -- Remove key from agent after -- Fjern nøglen fra agenten efter -- -- -- seconds -- sekunder -- -- -- Fingerprint -- Fingeraftryk -- -- -- Remove key from agent when database is closed/locked -- Fjern nøglen fra agenten når databasen lukkes/låses -- -- -- Public key -- Offentlig nøgle -- -- -- Add key to agent when database is opened/unlocked -- Tilføj nøglen til agenten når databasen åbnes/låses op -- -- -- Comment -- Kommentar -- -- -- Decrypt -- Dekrypter -- -- -- n/a -- - -- -- -- Copy to clipboard -- Kopiér til udklipsholder -- -- -- Private key -- Privat nøgle -- -- -- External file -- Ekstern fil -- -- -- Browse... -- Button for opening file dialog -- Gennemse ... -- -- -- Attachment -- Vedhæftning -- -- -- Add to agent -- Tilføj til agent -- -- -- Remove from agent -- Fjern fra agent -- -- -- Require user confirmation when this key is used -- Kræv brugerbekræftigelse når denne nøgle bruges -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Gruppe -- -- -- Icon -- Ikon -- -- -- Properties -- Egenskaber -- -- -- Add group -- Tilføj gruppe -- -- -- Edit group -- Rediger gruppe -- -- -- Enable -- Aktivér -- -- -- Disable -- Deaktivér -- -- -- Inherit from parent group (%1) -- Nedarv fra forældregruppe (%1) -- -- -- Entry has unsaved changes -- Posten har ændringer som ikke er blevet gemt -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Sti: -- -- -- Password: -- Adgangskode: -- -- -- Inactive -- Inaktiv -- -- -- KeeShare unsigned container -- KeeShare-beholder som ikke er underskrevet -- -- -- KeeShare signed container -- KeeShare-beholder som er underskrevet -- -- -- Select import source -- Vælg importkilde -- -- -- Select export target -- Vælg eksportmål -- -- -- Select import/export file -- Vælg import-/eksportfil -- -- -- Clear -- Ryd -- -- -- Import -- Importér -- -- -- Export -- Eksportér -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Gennemse ... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- Noter: -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Tilføj tilpasset ikon -- -- -- Delete custom icon -- Slet tilpasset ikon -- -- -- Download favicon -- Download favicon -- -- -- Unable to fetch favicon. -- Kan ikke hente favicon. -- -- -- Images -- Billeder -- -- -- All files -- Alle filer -- -- -- Confirm Delete -- Bekræft sletning -- -- -- Select Image(s) -- Vælg billede(r) -- -- -- Successfully loaded %1 of %n icon(s) -- Det lykkedes at indlæse %1 af %n ikonDet lykkedes at indlæse %1 af %n ikoner -- -- -- No icons were loaded -- Ingen ikoner blev indlæst -- -- -- %n icon(s) already exist in the database -- %n ikon findes allerede i databasen%n ikoner findes allerede i databasen -- -- -- The following icon(s) failed: -- Følgende ikon mislykkedes:Følgende ikoner mislykkedes: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ikonet bruges af %n post og erstattes med standardikonet. Er du sikker på, at du vil slette det?Ikonet bruges af %n poster og erstattes med standardikonet. Er du sikker på, at du vil slette det? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- Brug standardikon -- -- -- Use custom icon -- Brug brugerbestemt ikon -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Oprettet: -- -- -- Modified: -- Ændret: -- -- -- Accessed: -- Tilgået: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Plugindata -- -- -- Remove -- Fjern -- -- -- Delete plugin data? -- Slet plugindata? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Vil du virkelig slette den valgte plugindata? --Det kan få de påvirkede plugins til at svigte. -- -- -- Key -- Nøgle -- -- -- Value -- Værdi -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Navn -- -- -- Size -- Størrelse -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formular -- -- -- Add -- Tilføj -- -- -- Remove -- Fjern -- -- -- Open -- Åbn -- -- -- Save -- Gem -- -- -- Select files -- Vælg filer -- -- -- Are you sure you want to remove %n attachment(s)? -- Er du sikker på, at du vil fjerne %n vedhæftning?Er du sikker på, at du vil fjerne %n vedhæftninger? -- -- -- Save attachments -- Gem vedhæftninger -- -- -- Unable to create directory: --%1 -- Kunne ikke oprette folder: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Er du sikker på, at du vil overskrive den eksisterende fil "%1" med denne vedhæftning? -- -- -- Confirm overwrite -- Bekræft overskrivning -- -- -- Unable to save attachments: --%1 -- Kunne ikke gemme vedhæftning: --%1 -- -- -- Unable to open attachment: --%1 -- Kunne ikke åbne vedhæftning: --%1 -- -- -- Unable to open attachments: --%1 -- Kunne ikke åbne vedhæftninger: --%1 -- -- -- Confirm remove -- Bekræft fjernelse -- -- -- Unable to open file(s): --%1 -- Kan ikke åbne filen: --%1Kan ikke åbne filerne: --%1 -- -- -- Attachments -- Vedhæftninger -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Navn -- -- -- -- EntryHistoryModel -- -- Last modified -- Sidst ændret -- -- -- Title -- Titel -- -- -- Username -- Brugernavn -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Brugernavn -- -- -- URL -- URL -- -- -- Never -- Aldrig -- -- -- Password -- Adgangskode -- -- -- Notes -- Bemærkninger -- -- -- Expires -- Udløber -- -- -- Created -- Oprettet -- -- -- Modified -- Ændret -- -- -- Accessed -- Tilgået -- -- -- Attachments -- Vedhæftninger -- -- -- Size -- Størrelse -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Luk -- -- -- General -- Generelt -- -- -- Username -- Brugernavn -- -- -- Password -- Adgangskode -- -- -- Expiration -- Udløbsdato -- -- -- URL -- URL -- -- -- Attributes -- Attributter -- -- -- Attachments -- Vedhæftninger -- -- -- Notes -- Bemærkninger -- -- -- Autotype -- Autoskriv -- -- -- Window -- Vindue -- -- -- Sequence -- Sekvens -- -- -- Searching -- Søgning -- -- -- Search -- Søg -- -- -- Clear -- Ryd -- -- -- Never -- Aldrig -- -- -- [PROTECTED] -- [BESKYTTET] -- -- -- Enabled -- Aktiveret -- -- -- Disabled -- Deaktiveret -- -- -- Share -- Del -- -- -- Display current TOTP value -- -- -- -- Advanced -- Avanceret -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Tilpas til vindue -- -- -- Fit to contents -- Tilpas til indhold -- -- -- Reset to defaults -- Nulstil til standardindstillinger -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Gruppe -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Ukendt -- -- -- Unknown -- Unknown executable path -- Ukendt -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [tom] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Download faviconer -- -- -- Cancel -- Annuller -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Luk -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- -- -- -- Ok -- Ok -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &Luk -- -- -- Close message -- Luk besked -- -- -- -- Kdbx3Reader -- -- missing database headers -- mangler databaseheadere -- -- -- Header doesn't match hash -- Headeren matcher ikke hashen -- -- -- Invalid header id size -- Ugyldig størrelse på gruppefelt -- -- -- Invalid header field length -- Ugyldig længde på headerfelt -- -- -- Invalid header data length -- Ugyldig længde på headerdata -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- mangler databaseheadere -- -- -- Invalid header checksum size -- Ugyldig størrelse på gruppefelt -- -- -- Header SHA256 mismatch -- Uoverensstemmelse i header SHA256 -- -- -- Unknown cipher -- Ukendt ciffer -- -- -- Invalid header id size -- Ugyldig størrelse på gruppefelt -- -- -- Invalid header field length -- Ugyldig længde på headerfelt -- -- -- Invalid header data length -- Ugyldig længde på headerdata -- -- -- Failed to open buffer for KDF parameters in header -- Kan ikke åbne buffer for KDF parametre i header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Ikke understøttet nøgleafledningsfunktion (KDF) eller ugyldige parametre -- -- -- Legacy header fields found in KDBX4 file. -- Forældede header-felter fundet i KDBX4 fil. -- -- -- Invalid inner header id size -- Ugyldig størrelse på indre headerfelt-id -- -- -- Invalid inner header field length -- Ugyldig længde på indre headerfelt -- -- -- Invalid inner header binary size -- Ugyldig størrelse på binær indre header -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Ikke understøttet KeePass variant version. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på navn for variantkortets post -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Ugyldig data på navn for variantkortets post -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets post -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Ugyldig data på værdi for variantkortets post -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets Bool-post -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets Int32-post -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets UInt32-post -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets Int64-post -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig længde på værdi for variantkortets UInt64-post -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Ugyldig type på post for variantkort -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Ugyldig størrelse på felttype for variantkort -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Ugyldig symmetrisk ciffer-algoritme. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ugyldig størrelse på IV for symmetrisk ciffer. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Kunne ikke serielisere KDF-parameternes variantkort -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Ikke understøttet ciffer -- -- -- Invalid compression flags length -- Ugyldig længde på komprimeringsflag -- -- -- Unsupported compression algorithm -- Ikke understøttet komprimeringsalgortime -- -- -- Invalid master seed size -- Ugyldig størrelse på hovedfrø -- -- -- Invalid transform seed size -- Ugyldig størrelse på transformeringsfrø -- -- -- Invalid transform rounds size -- Ugyldig antal af transformeringsrunder -- -- -- Invalid start bytes size -- Ugyldig størrelse på start bytes -- -- -- Invalid random stream id size -- Ugyldig størrelse på tilfældigt strøm id -- -- -- Invalid inner random stream cipher -- Ugyldig ciffer for indre tilfældig strøm -- -- -- Not a KeePass database. -- Dette er ikke en KeePass-database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Den valgte fil er en gammel KeePass 1-databasefil (.kdb). -- --Du kan importere den ved at klikke på Database > 'Importér KeePass 1-database ...'. --Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den importerede database med den gamle KeePassX 0.4 version. -- -- -- Unsupported KeePass 2 database version. -- Ikke understøttet KeePass 2-database version. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Ugyldig længde på cifferets uuid: %1 (længde=%2) -- -- -- Unable to parse UUID: %1 -- Kan ikke fortolke uuid: %1 -- -- -- Failed to read database file. -- Kunne ikke læse databasefil. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML indlæsningsfejl: %1 -- -- -- No root group -- Ingen rodgruppe -- -- -- Missing icon uuid or data -- Mangler ikon-uuid eller -data -- -- -- Missing custom data key or value -- Mangler tilpasset datanøgle eller -værdi -- -- -- Multiple group elements -- Flere gruppe-elementer -- -- -- Null group uuid -- Nul gruppe-uuid -- -- -- Invalid group icon number -- Ugyldig gruppeikon-nummer -- -- -- Invalid EnableAutoType value -- Ugyldig EnableAutoType-værdi -- -- -- Invalid EnableSearching value -- Ugyldig EnableSearching-værdi -- -- -- No group uuid found -- Intet gruppe-uuid fundet -- -- -- Null DeleteObject uuid -- Nul DeleteObject-uuid -- -- -- Missing DeletedObject uuid or time -- Mangler DeletedObject-uuid eller klokkeslæt -- -- -- Null entry uuid -- Nul post-uuid -- -- -- Invalid entry icon number -- Ugyldig postikon-nummer -- -- -- History element in history entry -- Historiske elementer i historie-posten -- -- -- No entry uuid found -- Intet post-uuid fundet -- -- -- History element with different uuid -- Historiske elementer med forskelligt uuid -- -- -- Duplicate custom attribute found -- Fandt ens tilpasset attribut -- -- -- Entry string key or value missing -- Poststreng-nøgle eller -værdi mangler -- -- -- Entry binary key or value missing -- Binær nøgle eller værdi for post mangler -- -- -- Auto-type association window or sequence missing -- Autoskriv tilknytningsvindue eller -sekvens mangler -- -- -- Invalid bool value -- Ugyldig boolesk-værdi -- -- -- Invalid date time value -- Ugyldig dato klokkeslæt-værdi -- -- -- Invalid color value -- Ugyldig farve-værdi -- -- -- Invalid color rgb part -- Ugyldig farve RGB-del -- -- -- Invalid number value -- Ugyldig nummer-værdi -- -- -- Invalid uuid value -- Ugyldig uuid-værdi -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Kan ikke dekomprimere binær data -- -- -- XML error: --%1 --Line %2, column %3 -- Fejl ved XML: --%1 --Linje %2, kolonne %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Filen er for stor til at være en privat nøgle -- -- -- Failed to open private key -- Kunne ikke åbne privat nøgle -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Kan ikke åbne databasen. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Kan ikke indlæse nøglefil. -- -- -- Not a KeePass database. -- Dette er ikke en KeePass-database. -- -- -- Unsupported encryption algorithm. -- Ikke understøttet krypteringsalgoritme. -- -- -- Unsupported KeePass database version. -- KeePass-databaseversion ikke understøttet. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Kan ikke læse krypterings-IV -- -- -- Invalid number of groups -- Ugyldig antal grupper -- -- -- Invalid number of entries -- Ugyldig antal poster -- -- -- Invalid content hash size -- Ugyldig størrelse på indholdshash -- -- -- Invalid transform seed size -- Ugyldig størrelse på transformeringsfrø -- -- -- Invalid number of transform rounds -- Ugyldig antal runder for transformation -- -- -- Unable to construct group tree -- Kan ikke konstruere gruppetræ -- -- -- Root -- Rod -- -- -- Key transformation failed -- Nøgletransformering mislykkedes -- -- -- Invalid group field type number -- Ugyldig gruppefeltstype-nummer -- -- -- Invalid group field size -- Ugyldig størrelse på gruppefelt -- -- -- Read group field data doesn't match size -- Læsegruppefeltsdata har ikke samme størrelse -- -- -- Incorrect group id field size -- Forkert størrelse på gruppe id felt -- -- -- Incorrect group creation time field size -- Forkert størrelse på gruppeoprettelsestidsfelt -- -- -- Incorrect group modification time field size -- Forkert størrelse på gruppemodifikationstidsfelt -- -- -- Incorrect group access time field size -- Forkert størrelse på gruppetilgåelsestidsfelt -- -- -- Incorrect group expiry time field size -- Forkert størrelse på gruppeudløbstidsfelt -- -- -- Incorrect group icon field size -- Forkert størrelse på gruppefelt -- -- -- Incorrect group level field size -- Forkert størrelse på gruppefelt -- -- -- Invalid group field type -- Ugyldig gruppefeltstype -- -- -- Missing group id or level -- Mangler gruppe id eller niveau -- -- -- Missing entry field type number -- Manglende type nummer for gruppefelt -- -- -- Invalid entry field size -- Ugyldig størrelse på gruppefelt -- -- -- Read entry field data doesn't match size -- Postens data længde passer ikke -- -- -- Invalid entry uuid field size -- Ugyldig uuid-værdi -- -- -- Invalid entry group id field size -- Ugyldig størrelse på gruppe id felt -- -- -- Invalid entry icon field size -- Ugyldig størrelse på postikonsfelt -- -- -- Invalid entry creation time field size -- Ugyldig størrelse på postoprettelsestidsfelt -- -- -- Invalid entry modification time field size -- Ugyldig størrelse på postmodifikationstidsfelt -- -- -- Invalid entry expiry time field size -- Ugyldig størrelse på postudløbstidsfelt -- -- -- Invalid entry field type -- Ugyldig post-felt-type -- -- -- unable to seek to content position -- kan ikke søge til indholdets placering -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Importerer fra %1 -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- Nøglekomponent -- -- -- Key Component Description -- Beskrivelse for nøglekomponent -- -- -- Cancel -- Annuller -- -- -- Key Component set, click to change or remove -- Nøglekomponenten er indstillet, klik for at ændre eller fjerne -- -- -- Add %1 -- Add a key component -- Tilføj %1 -- -- -- Change %1 -- Change a key component -- Skift %1 -- -- -- Remove %1 -- Remove a key component -- Fjern %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 er indstillet. Klik for at ændre eller fjerne -- -- -- -- KeyFileEditWidget -- -- Generate -- Generér -- -- -- Key File -- Nøglefil -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Du kan tilføje en nøglefil med tilfældige bytes for yderligere sikkerhed.</p><p>Du skal holde den hemmelig og aldrig miste den, ellers vil du være låst ude!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Fejl ved indlæsning af nøglefilen '%1' --Meddelelse: %2 -- -- -- Key files -- Nøglefiler -- -- -- All files -- Alle filer -- -- -- Create Key File... -- Opret nøglefil ... -- -- -- Error creating key file -- Fejl ved oprettelse af nøglefil -- -- -- Unable to create key file: %1 -- Kan ikke oprette nøglefil: %1 -- -- -- Select a key file -- Vælg en nøglefil -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Gennemse ... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Hjælp -- -- -- &Groups -- &Grupper -- -- -- &Tools -- &Værktøjer -- -- -- &Quit -- &Afslut -- -- -- &About -- &Om -- -- -- Database settings -- Databaseindstillinger -- -- -- Copy username to clipboard -- Kopiér brugernavn til udklipsholder -- -- -- Copy password to clipboard -- Kopiér adgangskode til udklipsholder -- -- -- &Settings -- &Indstillinger -- -- -- &Title -- &Titel -- -- -- Copy title to clipboard -- Kopiér titel til udklipsholder -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopiér URL til udklipsholder -- -- -- &Notes -- &Bemærkninger -- -- -- Copy notes to clipboard -- Kopiér bemærkninger til udklipsholder -- -- -- Copy &TOTP -- Kopiér &TOTP -- -- -- E&mpty recycle bin -- &Tøm papirkurven -- -- -- Clear history -- Ryd historik -- -- -- Access error for config file %1 -- Adgangsfejl for konfigurationsfil %1 -- -- -- Settings -- Indstillinger -- -- -- Toggle window -- Skift vindue -- -- -- Quit KeePassXC -- Luk KeePassXC -- -- -- Please touch the button on your YubiKey! -- Tryk på knappen på din YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ADVARSEL: Du bruger en ustabil udgave af KeePassXC! --Der er høj risiko for korruption, sørg for at have en sikkerhedskopi af dine databaser. --Denne version er ikke beregnet til at blive brugt i produktion. -- -- -- &Donate -- &Donér -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- ADVARSEL: Din Qt-version kan få KeePassXC til at holde op med at virke ved brug af skærmtastatur! --Vi anbefaler at du i bruger det AppImage som findes på vores downloadside. -- -- -- &Import -- &Importér -- -- -- Create a new database -- Opret en ny database -- -- -- Merge from another KDBX database -- Sammenlæg fra en anden KDBX-database -- -- -- Add a new entry -- Tilføj en ny post -- -- -- View or edit entry -- Vis eller rediger post -- -- -- Add a new group -- Tilføj en ny gruppe -- -- -- Perform &Auto-Type -- Udfør &autoskriv -- -- -- Open &URL -- Åbn &URL -- -- -- Import a KeePass 1 database -- Importér en KeePass 1-database -- -- -- Import a CSV file -- Importér en CSV-fil -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- BEMÆRK: Du bruger en præudgivelsesversion af KeePassXC! --Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produktionsbrug. -- -- -- Check for updates on startup? -- Søg efter opdateringer ved opstart? -- -- -- Would you like KeePassXC to check for updates on startup? -- Skal KeePassXC søge efter opdateringer ved opstart? -- -- -- You can always check for updates manually from the application menu. -- Du kan altid søge efter opdateringer manuelt fra programmenuen. -- -- -- &Export -- &Eksportér -- -- -- Sort &A-Z -- Sortér &A-Å -- -- -- Sort &Z-A -- Sortér &Å-A -- -- -- &Password Generator -- &Adgangskodegenerator -- -- -- Import a 1Password Vault -- Importér en 1Password-boks -- -- -- &Getting Started -- &Kom godt i gang -- -- -- &User Guide -- &Brugerguide -- -- -- &Keyboard Shortcuts -- &Tastaturgenveje -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- Vis -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Vis TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Skjul brugernavne -- -- -- Hide Passwords -- Skjul adgangskoder -- -- -- -- ManageDatabase -- -- Database settings -- Databaseindstillinger -- -- -- Edit database settings -- -- -- -- Unlock database -- Lås database op -- -- -- Unlock database to show more information -- -- -- -- Lock database -- Lås database -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Opretter manglende %1 [%2] -- -- -- Relocating %1 [%2] -- Flytter %1 [%2] -- -- -- Overwriting %1 [%2] -- Overskriver %1 [%2] -- -- -- older entry merged from database "%1" -- gammel post sammenlagt fra databasen "%1" -- -- -- Adding backup for older target %1 [%2] -- Tilføjer sikkerhedskopi til ældre mål %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Tilføjer sikkerhedskopi til ældre kilde %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Genanvender ældre målpost oven på nyere kilde %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Genanvender ældre kildepost oven på nyere mål %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synkroniserer fra nyere kilde %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synkroniserer fra ældre kilde %1 [%2] -- -- -- Deleting child %1 [%2] -- Sletter barnet %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Sletter forælderløse %1 [%2] -- -- -- Changed deleted objects -- Ændrede slettet objekter -- -- -- Adding missing icon %1 -- Tilføjer manglende ikon %1 -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Opret en ny KeePassXC-database ... -- -- -- Root -- Root group -- Rod -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Assistentside -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne. -- -- -- Advanced Settings -- Avancerede indstillinger -- -- -- Simple Settings -- Simple indstillinger -- -- -- Encryption Settings -- Krypteringsindstillinger -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Krypteringsindstillinger -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Generel information om database -- -- -- Please fill in the display name and an optional description for your new database: -- Udfyld venligst det navn som skal vises og en valgfri beskrivelse til din nye database: -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Ugyldig nøglefil, forventede en OpenSSH nøgle -- -- -- PEM boundary mismatch -- Uoverensstemmelse i PEM-grænse -- -- -- Base64 decoding failed -- Base64-afkodning mislykkedes -- -- -- Key file way too small. -- Nøglefil er alt for lille. -- -- -- Key file magic header id invalid -- Nøglefil magic i header er ugyldig -- -- -- Found zero keys -- Fandt ingen nøgler -- -- -- Failed to read public key. -- Kunne ikke læse offentlig nøgle. -- -- -- Corrupted key file, reading private key failed -- Korrupt nøglefil, kan ikke læse privat nøgle -- -- -- No private key payload to decrypt -- Der er ingen privat nøgle at dekryptere -- -- -- Trying to run KDF without cipher -- Prøver at køre KDF uden ciffer -- -- -- Passphrase is required to decrypt this key -- Adgangssætning er nødvendig for at dekryptere denne nøgle -- -- -- Key derivation failed, key file corrupted? -- Nøgleafledning mislykkedes, er nøglefilen korrupt? -- -- -- Decryption failed, wrong passphrase? -- Dekryptering mislykkedes, forkert adgangssætning? -- -- -- Unexpected EOF while reading public key -- Offentlig nøgle sluttede uventet under læsningen -- -- -- Unexpected EOF while reading private key -- Privat nøgle sluttede uventet under læsningen -- -- -- Can't write public key as it is empty -- Kan ikke skrive offentlig nøgle, da den er tom -- -- -- Unexpected EOF when writing public key -- Offentlig nøgle sluttede uventet under skrivning -- -- -- Can't write private key as it is empty -- Kan ikke skrive nøglen da den er tom -- -- -- Unexpected EOF when writing private key -- Privat nøgle sluttede uventet under skrivning -- -- -- Unsupported key type: %1 -- Ikke-understøttet nøgletype: %1 -- -- -- Unknown cipher: %1 -- Ukendt ciffer: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Ciffer IV er for kort til MD5 KDF -- -- -- Unknown KDF: %1 -- Ukendt KDF: %1 -- -- -- Unknown key type: %1 -- Ukendt nøgletype: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Indtast adgangskode: -- -- -- Confirm password: -- Bekræft adgangskode: -- -- -- Password -- Adgangskode -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>En adgangskode er den primære metode til at sikre din database.</p><p>Gode adgangskoder er lange og unikke. KeePassXC kan generere en for dig.</p> -- -- -- Passwords do not match. -- Adgangskoderne er ikke ens. -- -- -- Password field -- -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- styrke -- -- -- entropy -- entropi -- -- -- Password -- Adgangskode -- -- -- Character Types -- Tegntyper -- -- -- Numbers -- Tal -- -- -- Extended ASCII -- Udvidet ASCII -- -- -- Exclude look-alike characters -- Udeluk tegn som ligner hinanden -- -- -- Pick characters from every group -- Vælg tegn fra alle grupper -- -- -- &Length: -- &Længde: -- -- -- Passphrase -- Adgangssætning -- -- -- Wordlist: -- Ordliste: -- -- -- Word Separator: -- Ordseparator: -- -- -- Close -- Luk -- -- -- Entropy: %1 bit -- Entropi: %1 bit -- -- -- Password Quality: %1 -- Kvaliteten af adgangskoden: %1 -- -- -- Poor -- Password quality -- Dårlig -- -- -- Weak -- Password quality -- Svag -- -- -- Good -- Password quality -- God -- -- -- Excellent -- Password quality -- Fremragende -- -- -- Switch to advanced mode -- Skift til avanceret tilstand -- -- -- Advanced -- Avanceret -- -- -- Braces -- Parenteser -- -- -- Punctuation -- Tegnsætning -- -- -- Quotes -- Citationstegn -- -- -- Logograms -- Logogrammer -- -- -- Character set to exclude from generated password -- Tegnsæt som skal medtages fra generede adgangskode -- -- -- Do not include: -- Medtag ikke: -- -- -- Add non-hex letters to "do not include" list -- Tilføj tegn som ikke er hex i "medtag ikke"-liste -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Udeluk tegnene: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- Kopiér kodeord -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- Antal ord: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- Specialtegn -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- Overskriv -- -- -- Delete -- Slet -- -- -- Move -- Flyt -- -- -- Empty -- Tøm -- -- -- Remove -- Fjern -- -- -- Skip -- Spring over -- -- -- Disable -- Deaktivér -- -- -- Merge -- Sammenlæg -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- Databasen er ikke åbnet -- -- -- Database hash not available -- Databasehash er ikke tilgængeligt -- -- -- Client public key not received -- Offentlig nøgle for klient ikke modtaget -- -- -- Cannot decrypt message -- Kan ikke dekryptere besked -- -- -- Action cancelled or denied -- Handlingen blev annulleret eller nægtet -- -- -- KeePassXC association failed, try again -- KeePassXC-tilknytning mislykkedes, prøv igen -- -- -- Encryption key is not recognized -- Krypteringsnøgle ikke genkendt -- -- -- Incorrect action -- Forkert handling -- -- -- Empty message received -- Tom besked modtaget -- -- -- No URL provided -- Ingen URL angivet -- -- -- No logins found -- Ingen logins fundet -- -- -- Unknown error -- Ukendt fejl -- -- -- Add a new entry to a database. -- Tilføj en ny post til en database. -- -- -- Path of the database. -- Sti til databasen. -- -- -- Key file of the database. -- Databasens nøglefil. -- -- -- path -- sti -- -- -- Username for the entry. -- Brugernavn for posten. -- -- -- username -- brugernavn -- -- -- URL for the entry. -- URL for posten. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Spørg om postens adgangskode. -- -- -- Generate a password for the entry. -- Generér en adgangskode for posten. -- -- -- length -- længde -- -- -- Path of the entry to add. -- Sti for posten, som skal tilføjes. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Sti til posten, som skal klippes. -- -- -- Timeout in seconds before clearing the clipboard. -- Timeout i sekunder før udklipsholderen ryddes. -- -- -- Edit an entry. -- Rediger en post. -- -- -- Title for the entry. -- Titel for post. -- -- -- title -- titel -- -- -- Path of the entry to edit. -- Sti til posten, som skal redigeres. -- -- -- Estimate the entropy of a password. -- Estimat for entropi af en adgangskode. -- -- -- Password for which to estimate the entropy. -- Adgangskode, som entropi skal estimeres for. -- -- -- Perform advanced analysis on the password. -- Udfør avanceret analyse af adgangskoden. -- -- -- -- --Available commands: -- -- -- --Tilgængelige kommandoer: -- -- -- -- Name of the command to execute. -- Navn på kommando, som skal udføres. -- -- -- List database entries. -- Vis poster i databasen. -- -- -- Path of the group to list. Default is / -- Sti til gruppen, som skal vises. Standard er / -- -- -- Find entries quickly. -- Find poster hurtigt. -- -- -- Search term. -- Søgefrase. -- -- -- Merge two databases. -- Sammenlæg to databaser. -- -- -- Path of the database to merge from. -- Sti til databasen, som skal sammenlægges fra. -- -- -- Use the same credentials for both database files. -- Brug de samme loginoplysninger til begge databasefiler. -- -- -- Key file of the database to merge from. -- Nøglefil for databasen, som der skal sammenlægges fra. -- -- -- Show an entry's information. -- Vis information for en post. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Navne på attributter, som skal vises. Denne indstilling kan blive angivet mere end en gang, med hver attribut vist per linje i den angivne orden. Hvis ingen attributter bliver angivet vil en oversigt af standardattributter blive vist. -- -- -- attribute -- attribut -- -- -- Name of the entry to show. -- Navn på posten, som skal vises. -- -- -- NULL device -- NULL-enhed -- -- -- error reading from device -- fejl ved læsning fra enhed -- -- -- malformed string -- forkert udformet streng -- -- -- missing closing quote -- mangler afsluttende kvoteringstegn -- -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Brugernavn -- -- -- Password -- Adgangskode -- -- -- Notes -- Bemærkninger -- -- -- Last Modified -- Sidst ændret -- -- -- Created -- Oprettet -- -- -- Browser Integration -- Browserintegritet -- -- -- SSH Agent -- SSH-agent -- -- -- Generate a new random diceware passphrase. -- Generér en ny tilfældig diceware-adgangssætning. -- -- -- Word count for the diceware passphrase. -- Ordtælling for diceware-adgangssætning. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Ordliste for diceware-generator. --[Standard: EFF Engelsk] -- -- -- Generate a new random password. -- Generér en ny tilfældig adgangskode. -- -- -- Could not create entry with path %1. -- Kunne ikke oprette post med stien %1. -- -- -- Enter password for new entry: -- Indtast adgangskode til ny post: -- -- -- Writing the database failed %1. -- Kunne ikke skrive databasen %1. -- -- -- Successfully added entry %1. -- Det lykkedes at tilføje posten %1. -- -- -- Invalid timeout value %1. -- Ugyldig timeout-værdi %1. -- -- -- Entry %1 not found. -- Posten %1 blev ikke fundet. -- -- -- Entry with path %1 has no TOTP set up. -- Posten med stien %1 har ikke opsat nogen TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- Rydder udklipsholderen om %1 sekund ...Rydder udklipsholderen om %1 sekunder ... -- -- -- Clipboard cleared! -- Udklipsholder ryddet! -- -- -- Silence password prompt and other secondary outputs. -- Gør adgangskodeprompt og andre sekundære outputs stille. -- -- -- count -- CLI parameter -- antal -- -- -- Could not find entry with path %1. -- Kunne ikke finde post med stien %1. -- -- -- Not changing any field for entry %1. -- Ændre ikke nogen felter for posten %1. -- -- -- Enter new password for entry: -- Indtast ny adgangskode for posten: -- -- -- Writing the database failed: %1 -- Skrivning af databasen mislykkedes: %1 -- -- -- Successfully edited entry %1. -- Det lykkedes at redigere posten %1. -- -- -- Length %1 -- Længde %1 -- -- -- Entropy %1 -- Entropi %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Ekstra bits for multiord %1 -- -- -- Type: Bruteforce -- Type: Bruteforce -- -- -- Type: Dictionary -- Type: Ordbog -- -- -- Type: Dict+Leet -- Type: Ordbog+leet -- -- -- Type: User Words -- Type: Brugerord -- -- -- Type: User+Leet -- Type: Bruger ord+leet -- -- -- Type: Repeated -- Type: Gentaget -- -- -- Type: Sequence -- Type: Sekvens -- -- -- Type: Spatial -- Type: Rumlig -- -- -- Type: Date -- Type: Dato -- -- -- Type: Bruteforce(Rep) -- Type: Bruteforce(gentaget) -- -- -- Type: Dictionary(Rep) -- Type: Ordbog(gentaget) -- -- -- Type: Dict+Leet(Rep) -- Type: Ordbog+leet(gentaget) -- -- -- Type: User Words(Rep) -- Type: Brugerord(gentaget) -- -- -- Type: User+Leet(Rep) -- Type: Bruger ord+leet(gentaget) -- -- -- Type: Repeated(Rep) -- Type: Gentaget(gentaget) -- -- -- Type: Sequence(Rep) -- Type: Sekvens(gentaget) -- -- -- Type: Spatial(Rep) -- Type: Rumlig(gentaget) -- -- -- Type: Date(Rep) -- Type: Dato(gentaget) -- -- -- Type: Unknown%1 -- Type: Ukendt%1 -- -- -- Entropy %1 (%2) -- Entropi %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Længde på adgangskode (%1) != summen af længden på delene (%2) *** -- -- -- Failed to load key file %1: %2 -- Kunne ikke indlæse nøglefilen %1: %2 -- -- -- Length of the generated password -- Længde på den genereret adgangskode -- -- -- Use lowercase characters -- Brug tegn med små bogstaver -- -- -- Use uppercase characters -- Brug tegn med store bogstaver -- -- -- Use special characters -- Brug specialtegn -- -- -- Use extended ASCII -- Brug udvidet ASCII -- -- -- Exclude character set -- Udeluk tegnsæt -- -- -- chars -- tegn -- -- -- Exclude similar looking characters -- Udeluk tegn som ligner hinanden -- -- -- Include characters from every selected group -- Medtag tegn fra hver valgte gruppe -- -- -- Recursively list the elements of the group. -- Vis elementerne i gruppen rekursivt. -- -- -- Cannot find group %1. -- Kan ikke finde gruppen %1. -- -- -- Error reading merge file: --%1 -- Fejl ved læsning af sammenlægningsfil: --%1 -- -- -- Unable to save database to file : %1 -- Kan ikke gemme database til filen : %1 -- -- -- Unable to save database to file: %1 -- Kan ikke gemme database til filen: %1 -- -- -- Successfully recycled entry %1. -- Det lykkedes at genbruge posten %1. -- -- -- Successfully deleted entry %1. -- Det lykkedes at slette posten %1. -- -- -- Show the entry's current TOTP. -- Vis postens nuværende TOTP. -- -- -- ERROR: unknown attribute %1. -- FEJL: ukendt attribut %1. -- -- -- No program defined for clipboard manipulation -- Der er ikke angivet noget program til manipulering af udklipsholderen -- -- -- file empty -- filen er tom -- -- -- %1: (row, col) %2,%3 -- %1: (række, kolonne) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ugyldige indstillinger -- -- -- Invalid Key -- TOTP -- Ugyldig nøgle -- -- -- Message encryption failed. -- Kryptering af meddelelse mislykkedes. -- -- -- No groups found -- Fandt ingen grupper -- -- -- Create a new database. -- Opret en ny database. -- -- -- File %1 already exists. -- Filen %1 findes allerede. -- -- -- Loading the key file failed -- Indlæsning af nøglefilen mislykkedes -- -- -- No key is set. Aborting database creation. -- Der er ikke indstillet nogen nøgle. Afbryder oprettelse af database. -- -- -- Failed to save the database: %1. -- Kunne ikke gemme databasen: %1. -- -- -- Successfully created new database. -- Oprettelse af ny database lykkedes. -- -- -- Creating KeyFile %1 failed: %2 -- Oprettelse af nøglefilen %1 mislykkedes: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Indlæsning af nøglefilen %1 mislykkedes: %2 -- -- -- Path of the entry to remove. -- Sti til posten, som skal fjernes. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Eksisterende én-instans låsefil er ugyldig. Starter ny instans. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Låsefil kunne ikke oprettes. Én-instans-tilstand slået fra. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - adgangskodehåndtering på tværs af platforme -- -- -- filenames of the password databases to open (*.kdbx) -- filnavne på de adgangskodedatabaser som skal åbnes (*.kdbx) -- -- -- path to a custom config file -- sti til tilpasset indstillingsfil -- -- -- key file of the database -- databasens nøglefil -- -- -- read password of the database from stdin -- læs adgangskode til databasen fra stdin -- -- -- Another instance of KeePassXC is already running. -- En anden instans af KeePassXC kører allerede. -- -- -- Fatal error while testing the cryptographic functions. -- Fatal fejl ved test af kryptografiske funktioner. -- -- -- KeePassXC - Error -- KeePassXC - Fejl -- -- -- Database password: -- Adgangskode for database: -- -- -- Cannot create new group -- Kan ikke oprette ny gruppe -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- -- -- -- Build Type: %1 -- -- -- -- Revision: %1 -- Revision: %1 -- -- -- Distribution: %1 -- Distribution: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operativsystem: %1 --CPU-arkitektur: %2 --Kerne: %3 %4 -- -- -- Auto-Type -- Autoskriv -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- -- -- -- TouchID -- -- -- -- None -- -- -- -- Enabled extensions: -- Aktiverede udvidelser: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- Databasen blev ikke ændret af sammenlægningshandlingen. -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Intern zlib-fejl ved komprimering: -- -- -- Error writing to underlying device: -- Fejl ved skrivning til enhed: -- -- -- Error opening underlying device: -- Fejl ved åbning fra enhed: -- -- -- Error reading data from underlying device: -- Fejl ved læsning af data fra underliggende enhed: -- -- -- Internal zlib error when decompressing: -- Intern zlib-fejl ved dekomprimering: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Gzip-format understøttes ikke i denne version af zlib. -- -- -- Internal zlib error: -- Intern zlib-fejl: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Dårlig -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Svag -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Titel -- -- -- Path -- Sti -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Titel -- -- -- Path -- Sti -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Navn -- -- -- Value -- Værdi -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- -- -- -- Description -- -- -- -- Location -- -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- Forbindelse til agent mislykkedes. -- -- -- Agent protocol error. -- Fejl ved agentens protokol. -- -- -- No agent running, cannot add identity. -- Der kører ikke nogen agent. Kan ikke tilføje identitet. -- -- -- No agent running, cannot remove identity. -- Der kører ikke nogen agent. Kan ikke fjerne identitet. -- -- -- Agent refused this identity. Possible reasons include: -- Agenten nægter identiteten. Mulige årsager inkluderer: -- -- -- The key has already been added. -- Nøglen er allerede blevet tilføjet. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Begrænset livstid understøttes ikke af agenten (tjek indstillingerne). -- -- -- A confirmation request is not supported by the agent (check options). -- En bekræftelsesanmodning understøttes ikke af agenten (tjek indstillingerne). -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Søg i hjælp -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Søgefraser er som følger: [modifiers][felt:]["]frase["] -- -- -- Every search term must match (ie, logical AND) -- Hver søgefrase skal matche (dvs. logisk OG) -- -- -- Modifiers -- Modifiers -- -- -- exclude term from results -- udeluk frase fra resultater -- -- -- match term exactly -- match frase præcist -- -- -- use regex in term -- brug regulært udtryk i frase -- -- -- Fields -- Felter -- -- -- Term Wildcards -- Jokertegn i frase -- -- -- match anything -- match alt -- -- -- match one -- match én -- -- -- logical OR -- logisk ELLER -- -- -- Examples -- Eksempler -- -- -- -- SearchWidget -- -- Search -- Søg -- -- -- Limit search to selected group -- Begræns søgning til den valgte gruppe -- -- -- Search Help -- Søg i hjælp -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Søg (%1) ... -- -- -- Case sensitive -- Der skelnes mellem store og små bogstaver -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- Generelt -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktivering -- -- -- Allow export -- Tillad eksport -- -- -- Allow import -- Tillad import -- -- -- Own certificate -- Eget certifikat -- -- -- Fingerprint: -- Fingeraftryk: -- -- -- Certificate: -- Certifikat: -- -- -- Signer -- Underskriver -- -- -- Key: -- Nøgle: -- -- -- Generate -- Generér -- -- -- Import -- Importér -- -- -- Export -- Eksportér -- -- -- Imported certificates -- Importerede certifikater -- -- -- Trust -- Giv troværdighed -- -- -- Ask -- Spørg -- -- -- Untrust -- Fjern troværdighed -- -- -- Remove -- Fjern -- -- -- Path -- Sti -- -- -- Status -- Status -- -- -- Fingerprint -- Fingeraftryk -- -- -- Certificate -- Certifikat -- -- -- Trusted -- Troværdig -- -- -- Untrusted -- Ikke troværdig -- -- -- Unknown -- Ukendt -- -- -- key.share -- Filetype for KeeShare key -- nøgle.deling -- -- -- KeeShare key file -- KeeShare-nøglefil -- -- -- All files -- Alle filer -- -- -- Select path -- Vælg sti -- -- -- Exporting changed certificate -- Eksporterer ændret certifikat -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Det eksporterede certifikat er ikke det samme som det der er i brug. Vil du eksportere det nuværende certifikat? -- -- -- Signer: -- Underskriver: -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Nøgle -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Overskrivning af delingsbeholder som er underskrevet understøttes ikke - eksport forhindret -- -- -- Could not write export container (%1) -- Kunne ikke skrive eksportbeholderen (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Kunne ikke indlejre underskrift: Kunne ikke åbne fil til skrivning (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Kunne ikke indlejre underskrift: Kunne ikke skrive fil (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Kunne ikke indlejre database: Kunne ikke åbne fil til skrivning (%1) -- -- -- Could not embed database: Could not write file (%1) -- Kunne ikke indlejre database: Kunne ikke skrive fil (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Overskrivning af delingsbeholder som ikke er underskrevet understøttes ikke - eksport forhindret -- -- -- Could not write export container -- Kunne ikke skrive eksportbeholderen -- -- -- Unexpected export error occurred -- Der opstod en uventet fejl ved eksport -- -- -- -- ShareImport -- -- Import from container without signature -- Importér fra beholder uden underskrift -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Vi kan ikke bekræfte kilden på den delte beholder da den ikke er underskrevet. Vil du virkelig impotere fra %1? -- -- -- Import from container with certificate -- Importér fra beholder med underskrift -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Skal %1 være troværdig med fingeraftrykket %2 fra %3? -- -- -- Not this time -- Ikke denne gang -- -- -- Never -- Aldrig -- -- -- Always -- Altid -- -- -- Just this time -- Kun denne gang -- -- -- Signed share container are not supported - import prevented -- Delingsbeholder som er underskrevet understøttes ikke - import forhindret -- -- -- File is not readable -- Filen kan ikke læses -- -- -- Invalid sharing container -- Ugyldig delingsbeholder -- -- -- Untrusted import prevented -- Utroværdig import forhindret -- -- -- Successful signed import -- Underskriver import lykkedes -- -- -- Unsigned share container are not supported - import prevented -- Delingsbeholder som ikke er underskrevet understøttes ikke - import forhindret -- -- -- Successful unsigned import -- Ikke-underskriver import lykkedes -- -- -- File does not exist -- Filen findes ikke -- -- -- Unknown share container type -- Ukendt type delingsbeholder -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import fra %1 mislykkedes (%2) -- -- -- Import from %1 successful (%2) -- Import fra %1 lykkedes (%2) -- -- -- Imported from %1 -- Importerer fra %1 -- -- -- Export to %1 failed (%2) -- Eksportér til %1 mislykkedes (%2) -- -- -- Export to %1 successful (%2) -- Eksportér til %1 lykkedes (%2) -- -- -- Export to %1 -- Eksportér til %1 -- -- -- Multiple import source path to %1 in %2 -- Flere importkildestier %1 i %2 -- -- -- Conflicting export target path %1 in %2 -- Konflikt ved eksportmålets sti %1 i %2 -- -- -- -- TotpDialog -- -- Timed Password -- Tidsbaseret adgangskode -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopiér -- -- -- Expires in <b>%n</b> second(s) -- Udløber om <b>%n</b> sekundUdløber om <b>%n</b> sekunder -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopiér -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- BEMÆRK: TOTP-indstillingerne er tilpasset og virker måske ikke med andre autentifikatorere. -- -- -- There was an error creating the QR code. -- Der opstod en fejl ved oprettelse af QR-koden. -- -- -- Closing in %1 seconds. -- Lukker om %1 sekunder. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Opsæt TOTP -- -- -- Default RFC 6238 token settings -- Standard RFC 6238-token indstillinger -- -- -- Steam token settings -- Steam-token indstillinger -- -- -- Use custom settings -- Brug tilpasset indstillinger -- -- -- Custom Settings -- Tilpasset indstillinger -- -- -- Time step: -- Tidsinterval: -- -- -- sec -- Seconds -- sek -- -- -- Code size: -- Kodestørrelse: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritme: -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Søger efter opdateringer -- -- -- Checking for updates... -- Søger efter opdateringer ... -- -- -- Close -- Luk -- -- -- Update Error! -- Fejl ved opdatering! -- -- -- An error occurred in retrieving update information. -- Der opstod en fejl ved indhentning af opdateringsinformation. -- -- -- Please try again later. -- Prøv venligst igen senere. -- -- -- Software Update -- Softwareopdatering -- -- -- A new version of KeePassXC is available! -- Der findes en ny version af KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 er tilgængelig nu — du har %2. -- -- -- Download it at keepassxc.org -- Download den på keepassxc.org -- -- -- You're up-to-date! -- Du er opdateret! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 er den seneste version -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Gem dine adgangskoder sikkert i en KeePassXC-database -- -- -- Create new database -- Opret en ny database -- -- -- Open existing database -- Åbn en eksisterende database -- -- -- Import from KeePass 1 -- Importér fra KeePass 1 -- -- -- Import from CSV -- Importér fra CSV -- -- -- Recent databases -- Seneste databaser -- -- -- Welcome to KeePassXC %1 -- Velkommen til KeePassXC %1 -- -- -- Import from 1Password -- Importér fra 1Password -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Tryk -- -- -- Passive -- Passiv -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Genopfrisk -- -- -- YubiKey Challenge-Response -- Udfordring/svar med YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Hvis du ejer en <a href="https://www.yubico.com/">YubiKey</a>, så kan du bruge den for yderligere sikkerhed.</p><p>YubiKey kræver at en af dets pladser er programmet som <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1-udfordring/svar</a>.</p> -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_de.ts keepassxc-2.6.4-patched/share/translations/keepassx_de.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_de.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_de.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7894 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Über KeePassXC -- -- -- About -- Über -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Melden Sie Fehler auf: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC wird unter den Bedingungen der GNU General Public License (GPL) Version 2 oder Version 3 (je nach Ihrer Auswahl) vertrieben. -- -- -- Contributors -- Mitwirkende -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Mitwirkende auf GitHub</a> -- -- -- Debug Info -- Debug-Info -- -- -- Include the following information whenever you report a bug: -- Geben Sie folgende Informationen an, wenn Sie einen Fehler melden: -- -- -- Copy to clipboard -- In die Zwischenablage kopieren -- -- -- Project Maintainers: -- Projekt-Betreuer: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Das KeePassXC-Team möchte ganz besonders debfx danken für die Entwicklung des ursprünglichen KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- OpenSSH für Windows statt Pageant benutzen -- -- -- Enable SSH Agent integration -- SSH-Agent-Integration aktivieren -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK-Wert -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK-Überschreibung -- -- -- (empty) -- (leer) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Kein SSH-Agent-Socket verfügbar. Stellen Sie sicher, dass die SSH_AUTH_SOCK-Umgebungsvariable existiert, oder setzen Sie einen Überschreibungswert. -- -- -- SSH Agent connection is working! -- SSH-Agent-Verbindung funktioniert! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Anwendungseinstellungen -- -- -- General -- Allgemein -- -- -- Security -- Sicherheit -- -- -- Access error for config file %1 -- Zugriffsfehler bei Konfigurationsdatei %1 -- -- -- Icon only -- Nur Symbol -- -- -- Text only -- Nur Text -- -- -- Text beside icon -- Text neben Symbol -- -- -- Text under icon -- Text unter Symbol -- -- -- Follow style -- Stil beibehalten -- -- -- Reset Settings? -- Einstellungen zurücksetzen? -- -- -- Are you sure you want to reset all general and security settings to default? -- Wollen Sie alle allgemeinen und Sicherheitseinstellungen auf die Voreinstellung zurücksetzen? -- -- -- Monochrome (light) -- Monochrom (hell) -- -- -- Monochrome (dark) -- Monochrom (dunkel) -- -- -- Colorful -- Bunt -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Zum Ändern der Sprache müssen Sie die Anwendung neu starten. Möchten Sie jetzt neu starten? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Grundeinstellungen -- -- -- Startup -- Programmstart -- -- -- Start only a single instance of KeePassXC -- Nur eine einzige KeePassXC-Instanz starten -- -- -- Minimize window at application startup -- Bei Programmstart Fenster minimieren -- -- -- File Management -- Dateiverwaltung -- -- -- Backup database file before saving -- Vor dem Speichern Backup der Datenbank erstellen -- -- -- Automatically save after every change -- Automatisch speichern nach jeder Änderung -- -- -- Automatically reload the database when modified externally -- Datenbank nach externer Änderung automatisch neu laden -- -- -- Entry Management -- Eintragsverwaltung -- -- -- Use group icon on entry creation -- Gruppensymbol beim Erstellen neuer Einträge verwenden -- -- -- Minimize instead of app exit -- Minimieren, statt Programm zu beenden -- -- -- Show a system tray icon -- Taskleistensymbol anzeigen -- -- -- Hide window to system tray when minimized -- Fenster verstecken, wenn minimiert -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- Eintragstitel verwenden, um passendes Fenster für globales Auto-Type zu finden -- -- -- Use entry URL to match windows for global Auto-Type -- URL verwenden, um passendes Fenster für globales Auto-Type zu finden -- -- -- Always ask before performing Auto-Type -- Vor Auto-Type immer nachfragen -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Bewegbare Werkzeugleiste -- -- -- Remember previously used databases -- Zuletzt verwendete Datenbanken merken -- -- -- Load previously open databases on startup -- Beim Start zuletzt verwendete Datenbanken öffnen -- -- -- Remember database key files and security dongles -- Datenbank-Schlüsseldateien und Sicherheits-Dongles merken -- -- -- Check for updates at application startup once per week -- Bei Programmstart wöchentlich auf Updates prüfen -- -- -- Include beta releases when checking for updates -- Bei Update-Prüfung Beta-Versionen einbeziehen -- -- -- Language: -- Sprache: -- -- -- (restart program to activate) -- (zum Aktivieren Programm neu starten) -- -- -- Minimize window after unlocking database -- Nach Entsperren der Datenbank Fenster minimieren -- -- -- Minimize when opening a URL -- Nach Öffnen einer URL Fenster minimieren -- -- -- Hide window when copying to clipboard -- Nach Kopieren in Zwischenablage Fenster verstecken -- -- -- Minimize -- Minimieren -- -- -- Drop to background -- In den Hintergrund verschieben -- -- -- Favicon download timeout: -- Timeout beim Herunterladen von Favicons: -- -- -- Website icon download timeout in seconds -- Timeout beim Herunterladen von Webseitensymbolen in Sekunden -- -- -- sec -- Seconds -- sek -- -- -- Toolbar button style -- Schaltflächenstil der Werkzeugleiste -- -- -- Language selection -- Sprachauswahl -- -- -- Global auto-type shortcut -- Tastenkürzel für globales Auto-Type -- -- -- Auto-type character typing delay milliseconds -- Tastenverzögerung für Auto-Type in Millisekunden -- -- -- Auto-type start delay milliseconds -- Startverzögerung für Auto-Type in Millisekunden -- -- -- Automatically launch KeePassXC at system startup -- KeePassXC beim Systemstart automatisch starten -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Sicheres Speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren) -- -- -- User Interface -- Benutzeroberfläche -- -- -- Toolbar button style: -- Design der Symbolleisten-Buttons: -- -- -- Use monospaced font for notes -- Nutze eine monospaced Schriftart für Notizen -- -- -- Tray icon type: -- Tray Icon Typ: -- -- -- Reset settings to default… -- Einstellungen auf Voreinstellung zurücksetzen… -- -- -- Auto-Type typing delay: -- Tastenverzögerung für Auto-Type: -- -- -- Global Auto-Type shortcut: -- Tastenkürzel für globales Auto-Type: -- -- -- Auto-Type start delay: -- Startverzögerung für Auto-Type: -- -- -- Automatically save when locking database -- Automatisch speichern beim Sperren der Datenbank -- -- -- Automatically save non-data changes when locking database -- Metadaten automatisch speichern beim Sperren der Datenbank -- -- -- Tray icon type -- Trayicon-Typ -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeouts -- -- -- Clear clipboard after -- Zwischenablage leeren nach -- -- -- sec -- Seconds -- sek -- -- -- Lock databases after inactivity of -- Datenbanken sperren nach Inaktivität von -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- TouchID vergessen nach Inaktivität von -- -- -- Convenience -- Komfort -- -- -- Lock databases when session is locked or lid is closed -- Datenbanken sperren, wenn Sitzung gesperrt oder Deckel zugeklappt wird -- -- -- Forget TouchID when session is locked or lid is closed -- TouchID vergessen, wenn Sitzung gesperrt oder Deckel zugeklappt wird -- -- -- Lock databases after minimizing the window -- Datenbanken sperren beim Minimieren des Fensters -- -- -- Re-lock previously locked database after performing Auto-Type -- Zuvor gesperrte Datenbank nach Auto-Type wieder sperren -- -- -- Hide passwords in the entry preview panel -- Passwörter im Eintrags-Vorschau-Panel verstecken -- -- -- Hide entry notes by default -- Eintrags-Notizen standardmäßig verstecken -- -- -- Privacy -- Datenschutz -- -- -- Use DuckDuckGo service to download website icons -- DuckDuckGo zum Herunterladen von Webseiten-Symbolen verwenden -- -- -- Clipboard clear seconds -- Zwischenablage löschen nach ... Sekunden -- -- -- Touch ID inactivity reset -- Touch ID Inaktivitäts-Reset -- -- -- Database lock timeout seconds -- Timeout zum Sperren der Datenbank (Sekunden) -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Suchabfrage löschen nach -- -- -- Require password repeat when it is visible -- Passwort-Wiederholung erfordern, wenn das Passwort sichtbar ist -- -- -- Hide passwords when editing them -- Passwörter beim Bearbeiten verstecken -- -- -- Use placeholder for empty password fields -- Platzhalter für leere Passwortfelder verwenden -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Konnte keinen Eintrag finden, der mit dem Fenstertitel übereinstimmt: -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Die Syntax Ihres Auto-Type-Befehls ist fehlerhaft! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Dieses Auto-Type-Kommando enthält eine sehr lange Verzögerung. Möchten Sie wirklich fortfahren? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Dieses Auto-Type-Kommando enthält sehr langsame Tastendrücke. Möchten Sie wirklich fortfahren? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Dieses Auto-Type-Kommando enthält Argumente, die sehr oft wiederholt werden. Möchten Sie wirklich fortfahren? -- -- -- Permission Required -- Berechtigung erforderlich -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC benötigt die Berechtigung für Barrierefreiheit, um Auto-Type auf Eintragsebene durchzuführen. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePassXC bitte neu. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Fenster -- -- -- Sequence -- Sequenz -- -- -- Default sequence -- Standard-Sequenz -- -- -- -- AutoTypeMatchModel -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Benutzername -- -- -- Sequence -- Sequenz -- -- -- -- AutoTypeMatchView -- -- Copy &username -- &Benutzername kopieren -- -- -- Copy &password -- Passwort kopieren -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Berechtigung erforderlich -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC benötigt die Berechtigungen für Barrierefreiheit und Bildschirmaufzeichnung, um globalen Auto-Type durchzuführen. Die Bildschirmaufzeichnung ist notwendig, um Einträge über den Fenstertitel zu finden. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePasXC bitte neu. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- Wählen Sie den Eintrag für Auto-Type: -- -- -- Search... -- Suchen … -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Browser-Zugriffsanfrage -- -- -- %1 is requesting access to the following entries: -- %1 fordert Zugriff auf die folgenden Einträge an: -- -- -- Remember access to checked entries -- Zugriff auf markierte Einträge merken -- -- -- Remember -- Merken -- -- -- Allow access to entries -- Zugriff auf Einträge erlauben -- -- -- Allow Selected -- Auswahl erlauben -- -- -- Deny All -- Alle verweigern -- -- -- Disable for this site -- Für diese Seite deaktivieren -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Eintrag speichern -- -- -- Ok -- Ok -- -- -- Cancel -- Abbrechen -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Sie haben mehrere Datenbanken geöffnet. --Bitte wählen Sie die richtige Datenbank zum Speichern der Anmeldedaten. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Neue Schlüsselverbindungsanfrage -- -- -- Save and allow access -- Speichern und Zugriff erlauben -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Bestehenden Schlüssel überschreiben? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Ein geteilter Schlüssel mit dem Namen „%1“ existiert bereits. --Möchten Sie ihn überschreiben? -- -- -- KeePassXC: Update Entry -- KeePassXC: Eintrag aktualisiert -- -- -- Do you want to update the information in %1 - %2? -- Möchten Sie die Informationen in %1 - %2 aktualisieren? -- -- -- Abort -- Abbrechen -- -- -- Converting attributes to custom data… -- Eigenschaften werden in Plugin-Daten umgewandelt ... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeepassXC: KeePassHTTP-Eigenschaften wurden umgewandelt -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Eigenschaften von %1 Einträgen wurden erfolgreich umgewandelt. --%2 Schlüssel in die Plugin-Daten verschoben. -- -- -- Successfully moved %n keys to custom data. -- %1 Einträge wurden erfolgreich umgewandelt%n Schlüssel wurden erfolgreich in die Plugin-Daten verschoben. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Kein Eintrag mit KeePassHTTP-Eigenschaften gefunden! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP-Eigenschaften. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Veraltete Einstellungen für Browser-Integration gefunden -- -- -- KeePassXC: Create a new group -- KeePassXC: Neue Gruppe erstellen -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Eine Anfrage zur Erstellung einer neuen Gruppe "%1" ist eingegangen. --Möchten Sie diese Gruppe erstellen? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden. --Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten. --Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren? -- -- -- Don't show this warning again -- Diese Warnung nicht wieder anzeigen -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Verbindungsanfrage erhalten für folgende Datenbank: --%1 -- --Geben Sie der Verbindung einen eindeutigen Namen, z. B. "chrome-laptop". -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Dies ist notwendig, um mit KeePassXC-Browser auf Ihre Datenbanken zuzugreifen -- -- -- Enable browser integration -- Browserintegration aktivieren -- -- -- General -- Allgemein -- -- -- Browsers installed as snaps are currently not supported. -- Browser, die als Snaps installiert sind, werden derzeit nicht unterstützt. -- -- -- Enable integration for these browsers: -- Integration für diese Browser aktivieren: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Benachrichtigung anzeigen, wenn Anmeldedaten angefragt werden -- -- -- Request to unlock the database if it is locked -- Entsperrung anfragen, wenn die Datenbank gesperrt ist -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Nur Einträge mit dem gleichen Schema (http://, https://, …) werden zurückgeliefert. -- -- -- Match URL scheme (e.g., https://...) -- URL-Schema abgleichen (z. B. https://…) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Nur die am besten passenden Einträge für eine URL anzeigen statt aller Einträge der ganzen Domain -- -- -- Return only best-matching credentials -- Nur am besten passende Anmeldedaten zurückliefern -- -- -- Returns expired credentials. String [expired] is added to the title. -- Abgelaufene Anmeldedaten zurückgeben. "Abgelaufen" wird an den Titel angehängt. -- -- -- Allow returning expired credentials -- Rückgabe abgelaufener Anmeldedaten erlauben -- -- -- All databases connected to the extension will return matching credentials. -- Alle Datenbanken, die mit der Erweiterung verbunden sind, geben übereinstimmende Anmeldedaten zurück. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- In allen geöffneten Datenbanken nach passenden Anmeldedaten suchen -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Passende Anmeldedaten nach Titel sortieren -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Passende Anmeldedaten nach Benutzername sortieren -- -- -- Advanced -- Fortgeschritten -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Niemals fragen, bevor auf Anmeldedaten zugegriffen wird -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Niemals fragen, bevor Anmeldedaten aktualisiert werden -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Nicht nach Berechtigung für "HTTP Basic Auth" fragen -- -- -- Automatically creating or updating string fields is not supported. -- Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt. -- -- -- Return advanced string fields which start with "KPH: " -- Auch erweiterte Attribute anzeigen, die mit "KPH: " beginnen -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Kein Popup zeigen, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Nicht zur Migration der KeePassHTTP-Einstellungen auffordern. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Aktualisiert beim Start den KeePassXC- oder KeePassXC-Proxy-Pfad automatisch in den Native-Messaging-Skripts. -- -- -- Update native messaging manifest files at startup -- Native-Messaging-Manifest beim Start aktualisieren -- -- -- Use a custom proxy location if you installed a proxy manually. -- Benutzerdefinierten Proxy-Pfad verwenden, falls ein Proxy manuell installiert wurde -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Benutzerdefinierten Proxy-Pfad verwenden -- -- -- Custom proxy location field -- Benutzerdefiniertes Proxy-Pfad-Feld -- -- -- Browser for custom proxy file -- Browser für benutzerdefinierte Proxydatei -- -- -- Browse... -- Button for opening file dialog -- Durchsuchen ... -- -- -- Use a custom browser configuration location: -- Benutzerdefinierten Browser-Konfigurations-Pfad verwenden: -- -- -- Browser type: -- Browser-Typ: -- -- -- Toolbar button style -- Schaltflächenstil der Werkzeugleiste -- -- -- Config Location: -- Konfigurations-Pfad. -- -- -- Custom browser location field -- Feld für benutzerdefinierten Browserpfad -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Nach benutzerdefiniertem Browserpfad suchen -- -- -- Custom extension ID: -- Benutzerdefinierte Erweiterungs-ID: -- -- -- Custom extension ID -- Benutzerdefinierte Erweiterungs-ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Aufgrund von Snap Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.<br />Sie können dieses Skript erhalten unter %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser wird für die Browserintegration benötigt. <br />Laden Sie es für %1 und %2 und %3 herunter. %4 -- -- -- Please see special instructions for browser extension use below -- Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Fehler:</b> Der benutzerdefinierte Proxy-Pfad kann nicht gefunden werden!<br/>Browser-Integration WIRD NICHT FUNKTIONIEREN ohne die Proxy-Anwendung. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Warnung:</b> Die folgenden Einstellungen können gefährlich sein! -- -- -- Executable Files -- Ausführbare Dateien -- -- -- All Files -- Alle Dateien -- -- -- Select custom proxy location -- Benutzerdefinierten Proxy-Pfad auswählen -- -- -- Select native messaging host folder location -- Ordner-Pfad für Native-Messaging-Host auswählen -- -- -- -- CloneDialog -- -- Clone Options -- Klon-Optionen -- -- -- Append ' - Clone' to title -- „ - Klon“ zum Titel hinzufügen -- -- -- Replace username and password with references -- Benutzername und Passwort durch Referenzen ersetzen -- -- -- Copy history -- Verlauf kopieren -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV-Felder importieren -- -- -- filename -- Dateiname -- -- -- size, rows, columns -- Größe, Zeilen, Spalten -- -- -- Encoding -- Zeichensatz -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Text ist qualifiziert durch -- -- -- Fields are separated by -- Felder sind getrennt durch -- -- -- Comments start with -- Kommentare beginnen mit -- -- -- Consider '\' an escape character -- „\“ als Maskierungs-Zeichen behandeln -- -- -- Preview -- Vorschau -- -- -- Imported from CSV file -- Aus CSV-Datei importiert -- -- -- Original data: -- Original-Daten: -- -- -- Error -- Fehler -- -- -- Error(s) detected in CSV file! -- Fehler in CSV-Datei gefunden! -- -- -- [%n more message(s) skipped] -- [zusätzlich %n Nachricht(en) übersprungen][%n weitere Nachricht(en) übersprungen] -- -- -- CSV import: writer has errors: --%1 -- CSV-Import: Fehler beim Schreiben: %1 -- -- -- Text qualification -- Textqualifizierung -- -- -- Field separation -- Feldtrennung -- -- -- Number of header lines to discard -- Anzahl der zu verwerfenden Kopfzeilen -- -- -- CSV import preview -- CSV-Import-Vorschau -- -- -- Column Association -- Spalten-Zuordnung -- -- -- Last Modified -- Zuletzt bearbeitet -- -- -- Password -- Passwort -- -- -- Created -- Erstellt -- -- -- Notes -- Notizen -- -- -- Title -- Titel -- -- -- Group -- Gruppe -- -- -- URL -- URL -- -- -- Username -- Benutzername -- -- -- Header lines skipped -- Kopfzeilen übersprungen -- -- -- First line has field names -- Erste Zeile enthält Feldnamen -- -- -- Not Present -- Nicht vorhanden -- -- -- Column %1 -- Spalte %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Symbol -- -- -- -- CsvParserModel -- -- %n column(s) -- %n Spalte%n Spalte(n) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n Byte(s)%n Byte(s) -- -- -- %n row(s) -- %n Zeile(n)%n Zeile(n) -- -- -- -- Database -- -- File %1 does not exist. -- Datei %1 existiert nicht. -- -- -- Unable to open file %1. -- Kann Datei %1 nicht öffnen. -- -- -- Error while reading the database: %1 -- Fehler beim Öffnen der Datenbank: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Kann Datei nicht schreiben, da sie nur zum Lesen geöffnet ist. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Schlüssel nicht umgewandelt. Das ist ein Programmfehler, bitte melden Sie es den Entwicklern! -- -- -- %1 --Backup database located at %2 -- %1 --Sicherungskopie der Datenbank ist in %2 -- -- -- Could not save, database does not point to a valid file. -- Kann nicht abspeichern, Datenbank verweist nicht auf eine gültige Datei. -- -- -- Could not save, database file is read-only. -- Kann nicht abspeichern, die Datenbank-Datei ist schreibgeschützt. -- -- -- Database file has unmerged changes. -- Die Datenbank hat Änderungen, die noch nicht zusammengeführt worden sind. -- -- -- Recycle Bin -- Papierkorb -- -- -- Passwords -- Root group name -- Passwörter -- -- -- Database save is already in progress. -- Speichern der Datenbank wird bereits ausgeführt. -- -- -- Could not save, database has not been initialized! -- Kann nicht abspeichern, die Datenbank wurde nicht initialisiert! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Datenbank entsperren - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Schlüsseldatei: -- -- -- Refresh -- Neu laden -- -- -- Don't show this warning again -- Diese Warnung nicht wieder anzeigen -- -- -- All files -- Alle Dateien -- -- -- Key files -- Schlüsseldateien -- -- -- Select key file -- Schlüsseldatei auswählen -- -- -- Failed to open key file: %1 -- Fehler beim Öffnen der Schlüsseldatei: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC-Datenbank entsperren -- -- -- Enter Password: -- Passwort eingeben: -- -- -- Password field -- Passwort-Feld -- -- -- Hardware key slot selection -- Auswahl des Hardwareschlüssel-Slots -- -- -- Browse for key file -- Schlüsseldatei auswählen -- -- -- Browse... -- Durchsuchen ... -- -- -- Refresh hardware tokens -- Hardware-Token aktualisieren -- -- -- Hardware Key: -- Hardwareschlüssel: -- -- -- Hardware key help -- Hilfe zu Hardwareschlüsseln -- -- -- TouchID for Quick Unlock -- TouchID für Quick Unlock -- -- -- Unlock failed and no password given -- Entsperren fehlgeschlagen und kein Passwort angegeben -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Das Entsperren der Datenbank ist fehlgeschlagen, und Sie haben kein Passwort eingegeben. --Möchten Sie es stattdessen mit einem "leeren" Passwort versuchen? -- --Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu "Datenbankeinstellungen -> Sicherheit" gehen und Ihr Passwort zurücksetzen. -- -- -- Retry with empty password -- Mit leerem Passwort wiederholen -- -- -- Enter Additional Credentials (if any): -- Zusätzliche Anmeldedaten eingeben (falls vorhanden): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Sie können einen Hardware-Sicherheitsschlüssel wie <strong>YubiKey</strong> oder <strong>OnlyKey</strong> verwenden, dessen Slots für HMAC-SHA1 konfiguriert sind.</p> --<p>Klicken Sie hier, um weitere Informationen zu erhalten ...</p> -- -- -- Key file help -- Schlüsseldatei-Hilfe -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Datenbankdatei kann nicht als Schlüsseldatei verwendet werden -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Sie können nicht Ihre Datenbank als Schlüsseldatei verwenden. --Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Zusätzlich zum Passwort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu verbessern. Diese Datei kann in den Sicherheitseinstellungen Ihrer Datenbank erzeugt werden.</p><p>Dies ist <strong>nicht</strong> Ihre *.kdbx-Datenbankdatei!<br>Wenn Sie keine Schlüsseldatei haben, lassen Sie dieses Feld frei.</p><p>Hier klicken für weitere Informationen...</p> -- -- -- Key file to unlock the database -- Schlüsseldatei zum Entsperren der Datenbank -- -- -- Please touch the button on your YubiKey! -- Bitte drücken Sie die Taste an Ihrem YubiKey! -- -- -- Detecting hardware keys… -- Hardwareschlüssel werden erkannt… -- -- -- No hardware keys detected -- Keine Hardwareschlüssel erkannt -- -- -- Select hardware key… -- Hardwareschlüssel auswählen… -- -- -- Old key file format -- Altes Schlüsseldateiformat -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise<br>in Zukunft nicht mehr unterstützen wird.<br><br>Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen, indem Sie zu:<br><strong>Datenbank / Datenbank-Sicherheit / Schlüsseldatei ändern gehen.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Passwörter -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Fortgeschrittene Einstellungen -- -- -- General -- Allgemein -- -- -- Security -- Sicherheit -- -- -- Encryption Settings -- Verschlüsselungs-Einstellungen -- -- -- Browser Integration -- Browser-Integration -- -- -- Database Credentials -- Datenbank-Anmeldedaten -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser-Einstellungen -- -- -- Stored keys -- Gespeicherte Schlüssel -- -- -- Remove -- Entfernen -- -- -- Delete the selected key? -- Ausgewählten Schlüssel löschen? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Möchten Sie wirklich diesen Schlüssel löschen? --Dadurch kann die Verbindung zum Browser-Plugin verhindert werden. -- -- -- Key -- Schlüssel -- -- -- Value -- Wert -- -- -- Enable Browser Integration to access these settings. -- Aktivieren Sie die Browser-Integration, um auf diese Einstellungen zuzugreifen. -- -- -- Disconnect all browsers -- Alle Browserverbindungen entfernen -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Möchten Sie wirklich alle Browserverbindungen entfernen? --Das wird die Verbindung zum Browser-Plugin verhindern. -- -- -- KeePassXC: No keys found -- KeePassXC: Keine Schlüssel gefunden -- -- -- No shared encryption keys found in KeePassXC settings. -- Keine geteilten Schlüssel in den KeePassXC-Einstellungen gefunden. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Schlüssel aus der Datenbank entfernt -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt.%n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt. -- -- -- Forget all site-specific settings on entries -- Alle auf Internetseiten bezogenen Einstellungen löschen -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Wollen Sie wirklich alle auf Internetseiten bezogenen Einstellungen löschen? --Zugriffserlaubnisse zu allen Einträgen werden gelöscht. -- -- -- Removing stored permissions… -- Entferne gespeicherte Berechtigungen ... -- -- -- Abort -- Abbrechen -- -- -- KeePassXC: Removed permissions -- KeePassXC: Zugangsdaten entfernt -- -- -- Successfully removed permissions from %n entry(s). -- Zugriffsberechtigungen für %n Eintrag/Einträge erfolgreich gelöscht.Berechtigungen aus %n Einträgen erfolgreich entfernt. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! -- -- -- The active database does not contain an entry with permissions. -- Die aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP-Eigenschaften in die Plugin-Daten verschieben -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Sollen alle Einstellungen der veralteten Browserintegration zur aktuellen Version migriert werden? --Das ist nötig, um das Browser-Plugin kompatibel zu halten. -- -- -- Stored browser keys -- Gespeicherte Browser-Schlüssel -- -- -- Remove selected key -- Ausgewählten Schlüssel entfernen -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- KeePassHTTP-Eigenschaften in die KeePassXC-Browser-Plugin-Daten verschieben -- -- -- Refresh database root group ID -- ID der Datenbank-Root-Gruppe erneuern -- -- -- Created -- Erstellt -- -- -- Refresh database ID -- Datenbank-ID erneuern -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Wollen Sie wirklich die Datenbank-ID erneuern? --Dies ist nur nötig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Browser-Erweiterung sich nicht verbinden kann. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Zusätzlichen Schutz hinzufügen ... -- -- -- No password set -- Kein Passwort festgelegt -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- WARNUNG! Sie haben kein Passwort festgelegt. Es wird streng davon abgeraten, eine Datenbank ohne Passwort zu benutzen! -- --Wollen Sie wirklich ohne Passwort fortfahren? -- -- -- Continue without password -- Ohne Passwort fortfahren -- -- -- No encryption key added -- Kein Schlüssel zum Verschlüsseln hinzugefügt -- -- -- You must add at least one encryption key to secure your database! -- Sie müssen mindestens einen Schlüssel hinzufügen, um die Datenbank zu sichern! -- -- -- Unknown error -- Unbekannter Fehler -- -- -- Failed to change database credentials -- Fehler beim Ändern der Datenbank-Anmeldedaten -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Verschlüsselungs-Algorithmus: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (Standard) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Schlüssel-Ableitungsfunktion: -- -- -- Transform rounds: -- Verschlüsselungs-Durchläufe: -- -- -- Memory Usage: -- Speicherverbrauch -- -- -- Parallelism: -- Parallelität: -- -- -- Decryption Time: -- Zeit zum Entschlüsseln: -- -- -- ?? s -- ?? s -- -- -- Change -- Ändern -- -- -- Higher values offer more protection, but opening the database will take longer. -- Höhere Werte sind sicherer, aber das Öffnen der Datenbank dauert länger. -- -- -- Database format: -- Datenbankformat: -- -- -- This is only important if you need to use your database with other programs. -- Nur wichtig, wenn Sie die Datenbank mit anderen Programmen verwenden müssen. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (empfohlen) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- unverändert -- -- -- Number of rounds too high -- Key transformation rounds -- Anzahl der Runden zu groß -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Sie verwenden eine sehr hohe Rundenanzahl mit Argon2. -- --Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank Stunden oder Tage (oder noch länger) zum Öffnen benötigen! -- -- -- Understood, keep number -- Verstanden, Anzahl beibehalten -- -- -- Cancel -- Abbrechen -- -- -- Number of rounds too low -- Key transformation rounds -- Anzahl der Runden zu niedrig -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Sie verwenden eine sehr niedrige Rundenanzahl mit AES-KDF. -- --Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken sein! -- -- -- KDF unchanged -- KDF unverändert -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Konnte Schlüssel nicht mit den neuen KDF-Parametern transformieren; KDF unverändert. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiBMiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- Thread(s)Thread(s) -- -- -- Change existing decryption time -- Vorhandene Entschlüsselungszeit ändern -- -- -- Decryption time in seconds -- Entschlüsselungszeit in Sekunden -- -- -- Database format -- Datenbankformat -- -- -- Encryption algorithm -- Verschlüsselungsalgorithmus -- -- -- Key derivation function -- Funktion zur Schlüsselableitung -- -- -- Transform rounds -- Transformationsrunden -- -- -- Memory usage -- Speicherbelegung -- -- -- Parallelism -- Parallelität -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Offengelegte Einträge -- -- -- Don't expose this database -- Diese Datenbank nicht offenlegen -- -- -- Expose entries under this group: -- Einträge unter dieser Gruppe offenlegen: -- -- -- Enable Secret Service to access these settings. -- Aktivieren Sie Secret Service, um auf diese Einstellungen zuzugreifen. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Datenbank-Metadaten -- -- -- Database name: -- Datenbankname: -- -- -- Database description: -- Datenbankbeschreibung: -- -- -- Default username: -- Standard-Benutzername: -- -- -- History Settings -- Verlaufseinstellungen -- -- -- Max. history items: -- Max. Einträge im Verlauf: -- -- -- Max. history size: -- Max. Verlaufsgröße: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Papierkorb verwenden -- -- -- Additional Database Settings -- Weitere Datenbank-Einstellungen -- -- -- Database name field -- Namensfeld der Datenbank -- -- -- Database description field -- Beschreibungsfeld der Datenbank -- -- -- Default username field -- Standard-Benutzernamen-Feld -- -- -- Maximum number of history items per entry -- Maximale Anzahl von Verlaufs-Elementen pro Eintrag -- -- -- Maximum size of history per entry -- Maximale Größe des Verlaufs pro Eintrag -- -- -- Delete Recycle Bin -- Papierkorb löschen -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Wollen Sie den Papierkorb und seinen Inhalt komplett löschen? --Das kann nicht rückgängig gemacht werden. -- -- -- (old) -- (alt) -- -- -- Enable compression (recommended) -- Komprimierung aktivieren (empfohlen) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Teilen -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Typ -- -- -- Path -- Pfad -- -- -- Last Signer -- Letzte Unterschrift -- -- -- Certificates -- Zertifikate -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Datenbankname: -- -- -- Description: -- Beschreibung: -- -- -- Database name field -- Namensfeld der Datenbank -- -- -- Database description field -- Beschreibungsfeld der Datenbank -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2-Datenbank -- -- -- All files -- Alle Dateien -- -- -- Open database -- Datenbank öffnen -- -- -- CSV file -- CSV-Datei -- -- -- Merge database -- Datenbank zusammenführen -- -- -- Open KeePass 1 database -- KeePass 1-Datenbank öffnen -- -- -- KeePass 1 database -- KeePass 1-Datenbank -- -- -- Export database to CSV file -- Datenbank als CSV-Datei exportieren -- -- -- Writing the CSV file failed. -- Fehler beim Schreiben der CSV-Datei. -- -- -- Database creation error -- Fehler beim Erstellen der Datenbank -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Die erstellte Datenbank hat keinen Schlüssel oder KDF, sie kann nicht gespeichert werden. --Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler. -- -- -- Select CSV file -- CSV-Datei auswählen -- -- -- New Database -- Neue Datenbank -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Neue Datenbank] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Gesperrt] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Schreibgeschützt] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Fehler beim Öffnen von %1: Nicht vorhanden oder nicht zugänglich. -- -- -- Export database to HTML file -- Datenbank in HTML-Datei exportieren -- -- -- HTML file -- HTML-Datei -- -- -- Writing the HTML file failed. -- Fehler beim Schreiben der HTML-Datei. -- -- -- Export Confirmation -- Export bestätigen -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Ihre Datenbank wird in eine unverschlüsselte Datei exportiert. Dadurch werden Ihre Passwörter und anderen Daten anfällig! Wollen Sie wirklich fortfahren? -- -- -- Open OPVault -- OPVault öffnen -- -- -- -- DatabaseWidget -- -- Searching... -- Suche … -- -- -- Do you really want to delete the entry "%1" for good? -- Wollen Sie den Eintrag „%1“ wirklich endgültig löschen? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Wollen Sie den Eintrag "%1" wirklich in den Papierkorb verschieben? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Möchten Sie wirklich %n Eintrag aus dem Papierkorb löschen?Möchten Sie wirklich %n Einträge aus dem Papierkorb löschen? -- -- -- Execute command? -- Befehl ausführen? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Folgenden Befehl ausführen? <br><br>%1<br> -- -- -- Remember my choice -- Meine Auswahl merken -- -- -- Do you really want to delete the group "%1" for good? -- Wollen Sie die Gruppe "%1" wirklich endgültig löschen? -- -- -- No current database. -- Keine aktuelle Datenbank. -- -- -- No source database, nothing to do. -- Keine Quelldatenbank, es gibt nichts zu tun. -- -- -- Search Results (%1) -- Suchergebnisse (%1) -- -- -- No Results -- Keine Ergebnisse -- -- -- File has changed -- Datei hat sich geändert -- -- -- The database file has changed. Do you want to load the changes? -- Die Datenbank wurde verändert. Änderungen laden? -- -- -- Merge Request -- Anfrage zum Zusammenführen -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Die Datenbank wurde verändert, und Sie haben nicht gespeicherte Änderungen. --Möchten Sie Ihre Änderungen zusammenführen? -- -- -- Empty recycle bin? -- Papierkorb leeren? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Sind Sie sicher, dass Sie den Inhalt des Papierkorbs unwiederbringlich löschen wollen? -- -- -- Do you really want to delete %n entry(s) for good? -- Sollen tatsächlich %n Einträge gelöscht werden?Möchten Sie wirklich %n Einträge löschen? -- -- -- Delete entry(s)? -- Eintrag/Einträge löschen?Einträge löschen? -- -- -- Move entry(s) to recycle bin? -- Eintrag/Einträge in den Papierkorb verschieben?Einträge in den Papierkorb verschieben? -- -- -- Lock Database? -- Datenbank sperren? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Sie bearbeiten gerade einen Eintrag. --Änderungen verwerfen und trotzdem sperren? -- -- -- "%1" was modified. --Save changes? -- "%1" wurde geändert. --Änderungen speichern? -- -- -- Database was modified. --Save changes? -- Datenbank wurde geändert. --Änderungen speichern? -- -- -- Save changes? -- Änderungen speichern? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Datenbank konnte während der automatischen Aktualisierung nicht geöffnet werden. --Fehler: %1 -- -- -- Disable safe saves? -- Sicheres Speichern deaktivieren? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC konnte die Datenbank nach mehrmaligem Versuch nicht erfolgreich speichern. Dies wird möglicherweise durch Synchronisierungsdienste verursacht, die die Datei geöffnet halten. --Sicheres Speichern deaktivieren und erneut versuchen? -- -- -- Passwords -- Passwörter -- -- -- Save database as -- Datenbank speichern als -- -- -- KeePass 2 Database -- KeePass 2-Datenbank -- -- -- Replace references to entry? -- Referenzen zum Eintrag ersetzen? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Eintrag "%1" hat %2 Referenz(en). Sollen die Referenzen mit den Werten überschrieben, der Eintrag überprungen oder trotzdem gelöscht werden?Eintrag "%1" hat %2 Referenz(en). Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen? -- -- -- Delete group -- Gruppe löschen -- -- -- Move group to recycle bin? -- Gruppe in den Papierkorb verschieben? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Gruppe "%1" wirklich in den Papierkorb verschieben? -- -- -- Successfully merged the database files. -- Datenbanken erfolgreich zusammengeführt. -- -- -- Database was not modified by merge operation. -- Datenbank wurde beim Zusammenführen nicht geändert. -- -- -- Shared group... -- Gemeinsam genutzte Gruppe ... -- -- -- Writing the database failed: %1 -- Schreiben der Datenbank fehlgeschlagen: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Diese Datenbank ist nur zum Lesen geöffnet. Automatisches Speichern ist deaktiviert. -- -- -- Save database backup -- Datenbank-Backup speichern -- -- -- Could not find database file: %1 -- Datenbank-Datei konnte nicht gefunden werden: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Eintrag -- -- -- Advanced -- Fortgeschritten -- -- -- Icon -- Symbol -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- Eigenschaften -- -- -- History -- Verlauf -- -- -- SSH Agent -- SSH-Agent -- -- -- n/a -- - -- -- -- (encrypted) -- (verschlüsselt) -- -- -- Select private key -- Privaten Schlüssel auswählen -- -- -- Entry history -- Eintragsverlauf -- -- -- Add entry -- Eintrag hinzufügen -- -- -- Edit entry -- Eintrag bearbeiten -- -- -- New attribute -- Neue Eigenschaft -- -- -- Are you sure you want to remove this attribute? -- Sind Sie sicher, dass Sie dieses Attribut entfernen möchten? -- -- -- Tomorrow -- Morgen -- -- -- %n week(s) -- %n Woche%n Woche(n) -- -- -- %n month(s) -- %n Monat%n Monat(e) -- -- -- Entry updated successfully. -- Eintrag erfolgreich aktualisiert. -- -- -- New attribute %1 -- Neue Eigenschaft %1 -- -- -- %n year(s) -- %n Jahre%n Jahr(e) -- -- -- Confirm Removal -- Löschen bestätigen -- -- -- Browser Integration -- Browser-Integration -- -- -- <empty URL> -- <leere URL> -- -- -- Are you sure you want to remove this URL? -- Möchten Sie diese URL wirklich entfernen? -- -- -- Reveal -- Zeigen -- -- -- Hide -- Verstecken -- -- -- Unsaved Changes -- Ungespeicherte Änderungen -- -- -- Would you like to save changes to this entry? -- Möchten Sie Änderungen an diesem Eintrag speichern? -- -- -- [PROTECTED] Press Reveal to view or edit -- [GESCHÜTZT] „Zeigen“ anklicken zum Anzeigen oder Bearbeiten -- -- -- Invalid Entry -- Ungültiger Eintrag -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Ein externer Zusammenführungsvorgang hat diesen Eintrag ungültig gemacht. --Leider sind alle vorgenommenen Änderungen verloren gegangen. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Zusätzliche Eigenschaften -- -- -- Add -- Hinzufügen -- -- -- Remove -- Entfernen -- -- -- Edit Name -- Name bearbeiten -- -- -- Protect -- Schützen -- -- -- Reveal -- Zeigen -- -- -- Attachments -- Anhänge -- -- -- Foreground Color: -- Textfarbe: -- -- -- Background Color: -- Hintergrundfarbe: -- -- -- Attribute selection -- Auswahl der Eigenschaft -- -- -- Attribute value -- Wert der Eigenschaft -- -- -- Add a new attribute -- Neue Eigenschaft hinzufügen -- -- -- Remove selected attribute -- Ausgewählte Eigenschaft entfernen -- -- -- Edit attribute name -- Name der Eigenschaft bearbeiten -- -- -- Toggle attribute protection -- Schutz der Eigenschaft umschalten -- -- -- Show a protected attribute -- Eine geschützte Eigenschaft anzeigen -- -- -- Foreground color selection -- Auswahl der Vordergrundfarbe -- -- -- Background color selection -- Auswahl der Hintergrundfarbe -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Wenn aktiv, dann wird dieser Eintrag nicht in Berichten wie dem Gesundheitscheck oder HIBP erscheinen, selbst wenn es die Qualitätsanforderungen nicht erfüllt (z.B. Passwort-Entropie oder Wiederverwendung). Sie können das Häkchen setzen, wenn das Passwort außerhalb Ihrer Kontrolle liegt (z.B. wenn es eine vierstellige PIN sein muss), damit es die Berichte nicht durcheinanderbringt. -- -- -- Exclude from database reports -- Von Datenbank-Berichten ausschließen -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Auto-Type für diesen Eintrag aktivieren -- -- -- Window Associations -- Fenster-Zuordnungen -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Fenstertitel: -- -- -- Use a specific sequence for this association: -- Spezielle Sequenz für dieses Fenster verwenden: -- -- -- Custom Auto-Type sequence -- Benutzerdefinierte Auto-Type-Sequenz -- -- -- Open Auto-Type help webpage -- Auto-Type-Hilfe-Webseite öffnen -- -- -- Existing window associations -- Bestehende Fenster-Zuordnungen -- -- -- Add new window association -- Neue Fenster-Zuordnung hinzufügen -- -- -- Remove selected window association -- Ausgewählte Fenster-Zuordnung entfernen -- -- -- You can use an asterisk (*) to match everything -- Sie können ein Sternchen (*) benutzen, um die Auswahl auf alles auszuweiten -- -- -- Set the window association title -- Titel der Fenster-Zuordnung festlegen -- -- -- You can use an asterisk to match everything -- Sie können ein Sternchen benutzen, um die Auswahl auf alles auszuweiten -- -- -- Custom Auto-Type sequence for this window -- Benutzerdefinierte Auto-Type-Sequenz für dieses Fenster -- -- -- Inherit default Auto-Type sequence from the group -- Standard-Auto-Type-Sequenz von der Gruppe erben -- -- -- Use custom Auto-Type sequence: -- Benutzerdefinierte Auto-Type-Sequenz benutzen: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Diese Einstellungen beeinflussen das Verhalten des Eintrags mit der Browser-Erweiterung. -- -- -- General -- Allgemein -- -- -- Skip Auto-Submit for this entry -- Auto-Submit für diesen Eintrag überspringen -- -- -- Hide this entry from the browser extension -- Diesen Eintrag vor der Browsererweiterung verstecken -- -- -- Additional URL's -- Zusätzliche URLs -- -- -- Add -- Hinzufügen -- -- -- Remove -- Entfernen -- -- -- Edit -- Bearbeiten -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Diese Einstellung nur zum Browser für HTTP-Auth-Dialoge senden. Wenn aktiv, werden normale Login-Formulare diesen Eintrag nicht zur Auswahl anbieten. -- -- -- Use this entry only with HTTP Basic Auth -- Diesen Eintrag nur mit "HTTP Basic Auth" verwenden -- -- -- -- EditEntryWidgetHistory -- -- Show -- Anzeigen -- -- -- Restore -- Wiederherstellen -- -- -- Delete -- Löschen -- -- -- Delete all -- Alle löschen -- -- -- Entry history selection -- Auswahl des Eintrags-Verlaufs -- -- -- Show entry at selected history state -- Eintrag zum ausgewählten Verlaufszustand anzeigen -- -- -- Restore entry to selected history state -- Eintrag aus ausgewähltem Verlaufszustand wiederherstellen -- -- -- Delete selected history state -- Ausgewählten Verlaufszustand löschen -- -- -- Delete all history -- Gesamten Verlauf löschen -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Passwort: -- -- -- Title: -- Titel: -- -- -- Presets -- Vorgaben -- -- -- Toggle the checkbox to reveal the notes section. -- Setzen Sie das Häkchen, um die Notizen anzuzeigen. -- -- -- Username: -- Benutzername: -- -- -- Url field -- URL-Feld -- -- -- Download favicon for URL -- Favicon für URL herunterladen -- -- -- Password field -- Passwort-Feld -- -- -- Toggle notes visible -- Sichtbarkeit der Notizen umschalten -- -- -- Expiration field -- Ablaufdatums-Feld -- -- -- Expiration Presets -- Ablaufdatums-Vorgaben -- -- -- Expiration presets -- Ablaufdatums-Vorgaben -- -- -- Notes field -- Notizen-Feld -- -- -- Title field -- Titelfeld -- -- -- Username field -- Benutzernamen-Feld -- -- -- Toggle expiration -- Ablaufdatum umschalten -- -- -- Notes: -- Notizen: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Läuft ab: -- -- -- Edit Entry -- Eintrag bearbeiten -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formular -- -- -- Remove key from agent after -- Schlüssel vom Agenten entfernen nach -- -- -- seconds -- Sekunden -- -- -- Fingerprint -- Fingerabdruck -- -- -- Remove key from agent when database is closed/locked -- Schlüssel vom Agenten entfernen, wenn Datenbank geschlossen/gesperrt wird -- -- -- Public key -- Öffentlicher Schlüssel -- -- -- Add key to agent when database is opened/unlocked -- Key zum Agenten hinzufügen, wenn Datenbank geöffnet/entsperrt wird -- -- -- Comment -- Kommentar -- -- -- Decrypt -- Entschlüsseln -- -- -- n/a -- - -- -- -- Copy to clipboard -- In Zwischenablage kopieren -- -- -- Private key -- Privater Schlüssel -- -- -- External file -- Externe Datei -- -- -- Browse... -- Button for opening file dialog -- Durchsuchen ... -- -- -- Attachment -- Anhang -- -- -- Add to agent -- Zum Agenten hinzufügen -- -- -- Remove from agent -- Vom Agenten entfernen -- -- -- Require user confirmation when this key is used -- Benutzer muss bestätigen, wenn dieser Schlüssel verwendet wird -- -- -- Remove key from agent after specified seconds -- Schlüssel vom Agenten nach angegebenen Sekunden entfernen -- -- -- Browser for key file -- Browser für die Schlüsseldatei -- -- -- External key file -- Externe Schlüsseldatei -- -- -- Select attachment file -- Anhang auswählen -- -- -- -- EditGroupWidget -- -- Group -- Gruppe -- -- -- Icon -- Symbol -- -- -- Properties -- Eigenschaften -- -- -- Add group -- Gruppe hinzufügen -- -- -- Edit group -- Gruppe bearbeiten -- -- -- Enable -- Aktivieren -- -- -- Disable -- Deaktivieren -- -- -- Inherit from parent group (%1) -- Von der übergeordneten Gruppe (%1) erben -- -- -- Entry has unsaved changes -- Eintrag enthält ungespeicherte Änderungen -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Typ: -- -- -- Path: -- Pfad: -- -- -- Password: -- Passwort: -- -- -- Inactive -- Inaktiv -- -- -- KeeShare unsigned container -- KeeShare unsignierter Container -- -- -- KeeShare signed container -- KeeShare signierter Container -- -- -- Select import source -- Importquelle auswählen -- -- -- Select export target -- Exportziel auswählen -- -- -- Select import/export file -- Datei für Import/Export auswählen -- -- -- Clear -- Löschen -- -- -- Import -- Importieren -- -- -- Export -- Exportieren -- -- -- Synchronize -- Synchronisieren -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Ihre Version von KeePassXC unterstützt das Teilen dieses Containertyps nicht. --Unterstützte Erweiterungen sind: %1. -- -- -- %1 is already being exported by this database. -- %1 wird von dieser Datenbank bereits exportiert. -- -- -- %1 is already being imported by this database. -- %1 wird von dieser Datenbank bereits importiert. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 wird von verschiedenen Gruppen in dieser Datenbank importiert und exportiert. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare is derzeit deaktiviert. Sie können den Import/Export in den Anwendungseinstellungen aktivieren. -- -- -- Database export is currently disabled by application settings. -- Der Export von Datenbanken ist in den Anwendungseinstellungen deaktiviert. -- -- -- Database import is currently disabled by application settings. -- Der Import von Datenbanken ist in den Anwendungseinstellungen deaktiviert. -- -- -- Sharing mode field -- Freigabemodus-Feld -- -- -- Path to share file field -- Feld für Pfad der Freigabe-Datei -- -- -- Password field -- Passwort-Feld -- -- -- Clear fields -- Felder leeren -- -- -- Browse for share file -- Nach Freigabe-Datei durchsuchen -- -- -- Browse... -- Durchsuchen ... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Namensfeld -- -- -- Notes field -- Notizen-Feld -- -- -- Toggle expiration -- Ablaufdatum umschalten -- -- -- Auto-Type toggle for this and sub groups -- Auto-Type umschalten für diese und Untergruppen -- -- -- Expiration field -- Ablaufdatums-Feld -- -- -- Search toggle for this and sub groups -- Suche umschalten für diese und Untergruppen -- -- -- Default auto-type sequence field -- Standard-Auto-Type-Sequenz-Feld -- -- -- Expires: -- Läuft ab: -- -- -- Use default Auto-Type sequence of parent group -- Standard-Auto-Type-Sequenz der übergeordneten Gruppe verwenden -- -- -- Auto-Type: -- Auto-Type: -- -- -- Search: -- Suche: -- -- -- Notes: -- Notizen: -- -- -- Name: -- Name: -- -- -- Set default Auto-Type sequence -- Standard-Auto-Type-Sequenz festlegen -- -- -- Edit Group -- Gruppe bearbeiten -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Eigenes Symbol hinzufügen -- -- -- Delete custom icon -- Benutzerdefiniertes Symbol löschen -- -- -- Download favicon -- Favicon herunterladen -- -- -- Unable to fetch favicon. -- Kann Favicon nicht herunterladen. -- -- -- Images -- Bilder -- -- -- All files -- Alle Dateien -- -- -- Confirm Delete -- Löschen bestätigen -- -- -- Select Image(s) -- Bild(er) auswählen -- -- -- Successfully loaded %1 of %n icon(s) -- %1 von %n Symbol(en) erfolgreiche heruntergeladen%1 von %n Symbol(en) erfolgreich geladen -- -- -- No icons were loaded -- Keine Symbole geladen -- -- -- %n icon(s) already exist in the database -- %n Symbol(e) gibt es bereits in der Datenbank%n Symbol(e) gibt es bereits in der Datenbank -- -- -- The following icon(s) failed: -- Das Laden der folgenden Symbole ist fehlgeschlagen:Das Laden der folgenden Symbole ist fehlgeschlagen: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Dieses Symbol wird von %n Eintrag benutzt und wird mit dem Standardsymbol ersetzt. Sind Sie sicher, dass es gelöscht werden soll?Dieses Symbol wird von %n Einträgen benutzt und wird durch das Standardsymbol ersetzt. Sind Sie sicher, dass Sie es löschen wollen? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Sie können den DuckDuckGo-Webseitensymbol-Dienst unter Werkzeuge -> Einstellungen -> Sicherheit aktivieren -- -- -- Download favicon for URL -- Favicon für URL herunterladen -- -- -- Apply selected icon to subgroups and entries -- Ausgewähltes Symbol auf Untergruppen und Einträge anwenden -- -- -- Also apply to child groups -- Auch auf Untergruppen anwenden -- -- -- Also apply to child entries -- Auch auf Untereinträge anwenden -- -- -- Also apply to all children -- Auch auf alle Untereinträge anwenden -- -- -- Existing icon selected. -- Bestehendes Symbol ausgewählt. -- -- -- Use default icon -- Standardsymbol verwenden -- -- -- Use custom icon -- Benutzerdefiniertes Symbol verwenden -- -- -- Apply icon to... -- Symbol anwenden auf... -- -- -- Apply to this group only -- Nur auf diese Gruppe anwenden -- -- -- -- EditWidgetProperties -- -- Created: -- Erstellt: -- -- -- Modified: -- Bearbeitet: -- -- -- Accessed: -- Verwendet: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Plugin-Daten -- -- -- Remove -- Entfernen -- -- -- Delete plugin data? -- Plugin-Daten löschen? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Möchten Sie die ausgewählten Plugin-Daten wirklich löschen? --Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktionieren. -- -- -- Key -- Schlüssel -- -- -- Value -- Wert -- -- -- Datetime created -- Erstellungs-Zeitpunkt -- -- -- Datetime modified -- Änderungs-Zeitpunkt -- -- -- Datetime accessed -- Zugriffs-Zeitpunkt -- -- -- Unique ID -- Eindeutige ID -- -- -- Plugin data -- Plugin-Daten -- -- -- Remove selected plugin data -- Ausgewählte Plugin-Daten entfernen -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Name -- -- -- Size -- Größe -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formular -- -- -- Add -- Hinzufügen -- -- -- Remove -- Entfernen -- -- -- Open -- Öffnen -- -- -- Save -- Speichern -- -- -- Select files -- Dateien auswählen -- -- -- Are you sure you want to remove %n attachment(s)? -- Sind Sie sicher, dass Sie einen Anhang löschen möchten?Sind Sie sicher, dass Sie %n Anhänge löschen möchten? -- -- -- Save attachments -- Anhänge speichern -- -- -- Unable to create directory: --%1 -- Kann Verzeichnis nicht erstellen: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Sind Sie sicher, dass sie die existierende Datei „%1“ mit dem Anhang überschreiben wollen? -- -- -- Confirm overwrite -- Überschreiben bestätigen -- -- -- Unable to save attachments: --%1 -- Speichern der Anhänge nicht möglich: --%1 -- -- -- Unable to open attachment: --%1 -- Öffnen des Anhangs nicht möglich: --%1 -- -- -- Unable to open attachments: --%1 -- Öffnen der Anhänge nicht möglich: --%1 -- -- -- Confirm remove -- Entfernen bestätigen -- -- -- Unable to open file(s): --%1 -- Öffnen der Datei(en) nicht möglich: --%1Datei(en) können nicht geöffnet werden: --%1 -- -- -- Attachments -- Anhänge -- -- -- Add new attachment -- Neuen Anhang hinzufügen -- -- -- Remove selected attachment -- Ausgewählten Anhang entfernen -- -- -- Open selected attachment -- Ausgewählten Anhang öffnen -- -- -- Save selected attachment to disk -- Ausgewählten Anhang speichern -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 ist eine große Datei (%2 MB). --Ihre Datenbank könnte sehr groß werden und die Leistung könnte sich verschlechtern. -- --Wollen Sie diese Datei wirklich hinzufügen? -- -- -- Confirm Attachment -- Anhang bestätigen -- -- -- -- EntryAttributesModel -- -- Name -- Name -- -- -- -- EntryHistoryModel -- -- Last modified -- Zuletzt geändert -- -- -- Title -- Titel -- -- -- Username -- Benutzername -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Benutzername -- -- -- URL -- URL -- -- -- Never -- Nie -- -- -- Password -- Passwort -- -- -- Notes -- Notizen -- -- -- Expires -- Läuft ab -- -- -- Created -- Erstellt -- -- -- Modified -- Geändert -- -- -- Accessed -- Letzter Zugriff -- -- -- Attachments -- Anhänge -- -- -- Size -- Größe -- -- -- Group name -- Gruppenname -- -- -- Entry title -- Eintragstitel -- -- -- Entry notes -- Eintragsnotizen -- -- -- Entry expires at -- Eintrag läuft ab -- -- -- Creation date -- Erzeugungsdatum -- -- -- Last modification date -- Datum der letzten Änderung -- -- -- Last access date -- Datum des letzten Zugriffs -- -- -- Attached files -- Angehängte Dateien -- -- -- Entry size -- Eintragsgröße -- -- -- Has attachments -- Hat Anhänge -- -- -- Has TOTP one-time password -- Hat TOTP-Einmal-Passwort -- -- -- -- EntryPreviewWidget -- -- Close -- Schließen -- -- -- General -- Allgemein -- -- -- Username -- Benutzername -- -- -- Password -- Passwort -- -- -- Expiration -- Ablaufdatum -- -- -- URL -- URL -- -- -- Attributes -- Attribute -- -- -- Attachments -- Anhänge -- -- -- Notes -- Notizen -- -- -- Autotype -- Auto-Type -- -- -- Window -- Fenster -- -- -- Sequence -- Sequenz -- -- -- Searching -- Suche -- -- -- Search -- Suche -- -- -- Clear -- Löschen -- -- -- Never -- Nie -- -- -- [PROTECTED] -- [GESCHÜTZT] -- -- -- Enabled -- Aktiviert -- -- -- Disabled -- Deaktiviert -- -- -- Share -- Teilen -- -- -- Display current TOTP value -- Aktuellen TOTP-Wert anzeigen -- -- -- Advanced -- Fortgeschritten -- -- -- Default Sequence -- Standard-Sequenz -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Ungültige URL -- -- -- -- EntryView -- -- Fit to window -- An Fenster anpassen -- -- -- Fit to contents -- An Inhalt anpassen -- -- -- Reset to defaults -- Auf Voreinstellung zurücksetzen -- -- -- Has attachments -- Entry attachment icon toggle -- Hat Anhänge -- -- -- Has TOTP -- Entry TOTP icon toggle -- Hat TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Eintrag "%1" aus Datenbank "%2" wurde von %3 verwendet -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Registrierung des DBus-Service auf %1 fehlgeschlagen.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Eintrag wurde von %1 verwendet%n Einträge wurden von %1 verwendet -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Dateiname -- -- -- Group -- Gruppe -- -- -- Manage -- Verwalten -- -- -- Unlock to show -- Entsperren, um anzuzeigen -- -- -- None -- Keine -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Anwendung -- -- -- Manage -- Verwalten -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Unbekannt -- -- -- Unknown -- Unknown executable path -- Unbekannt -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Programmdatei: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Ein anderer Secret Service läuft bereits (%1).<br/>Bitte stoppen/entfernen Sie ihn, bevor Sie die Secret-Service-Integration erneut aktivieren. -- -- -- -- Group -- -- [empty] -- group has no children -- [leer] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Online-Passwortvalidierung fehlgeschlagen -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Favicons herunterladen -- -- -- Cancel -- Abbrechen -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Probleme beim Herunterladen der Symbole? --Sie können den DuckDuckGo-Dienst im Abschnitt "Sicherheit" der Anwendungseinstellungen aktivieren. -- -- -- Close -- Schließen -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Bitte warten Sie, Eintragsliste wird verarbeitet ... -- -- -- Downloading... -- Lade herunter ... -- -- -- Ok -- Ok -- -- -- Already Exists -- Existiert bereits -- -- -- Download Failed -- Herunterladen fehlgeschlagen -- -- -- Downloading favicons (%1/%2)... -- Favicons (%1/%2) werden heruntergeladen ... -- -- -- -- KMessageWidget -- -- &Close -- S&chließen -- -- -- Close message -- Meldung schließen -- -- -- -- Kdbx3Reader -- -- missing database headers -- fehlende Datenbank-Header -- -- -- Header doesn't match hash -- Header stimmt nicht mit Hash überein -- -- -- Invalid header id size -- Ungültige Größe der Header-ID -- -- -- Invalid header field length -- Ungültiger Header-Feldlänge -- -- -- Invalid header data length -- Ungültige Header-Datenlänge -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. --Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. -- -- -- Unable to calculate database key -- Berechnung des Datenbankschlüssels gescheitert -- -- -- Unable to issue challenge-response: %1 -- Fehler beim Challenge-Response-Verfahren: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Fehler beim Challenge-Response-Verfahren: %1 -- -- -- Unable to calculate database key -- Berechnung des Datenbankschlüssels gescheitert -- -- -- -- Kdbx4Reader -- -- missing database headers -- fehlende Datenbank-Header -- -- -- Invalid header checksum size -- Ungültige Größe der Header-Prüfsumme -- -- -- Header SHA256 mismatch -- Ungültige SHA256-Prüfsumme für Header -- -- -- Unknown cipher -- Unbekannter Verschlüsselungsalgorithmus -- -- -- Invalid header id size -- Ungültige Größe der Header-ID -- -- -- Invalid header field length -- Ungültiger Header-Feldlänge -- -- -- Invalid header data length -- Ungültige Header-Datenlänge -- -- -- Failed to open buffer for KDF parameters in header -- Konnte Puffer mit KDF-Parametern im Header nicht öffnen -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nicht unterstützte Schlüssel-Ableitungsfunktion (KDF) oder ungültige Parameter -- -- -- Legacy header fields found in KDBX4 file. -- Veraltete Header-Felder in KDBX4-Datei gefunden. -- -- -- Invalid inner header id size -- Ungültige Größe der Inner-Header-ID -- -- -- Invalid inner header field length -- Ungültige Inner-Header-Feldlänge -- -- -- Invalid inner header binary size -- Ungültige Inner-Header-Binärgröße -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Ungültige KeePass-Variant-Map-Version -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Ungültige Variant-Map-Eintragslänge -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Ungültige Variant-Map-Eintragsdaten -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige Variant-Map-Eintragslänge -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Ungültige Variant-Map-Eintragsdaten -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige Bool Variant-Map-Eintragslänge -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige Int32 Variant-Map-Eintragslänge -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige UInt32 Variant-Map-Eintragslänge -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige Int64 Variant-Map-Eintragslänge -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Ungültige UInt64 Variant-Map-Eintragslänge -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Ungültiger Variant-Map-Eintragstyp -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Falsche Feldgröße für Variant-Map-Feldtyp -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. --Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. -- -- -- (HMAC mismatch) -- (HMAC stimmt nicht überein) -- -- -- Unable to calculate database key: %1 -- Berechnung des Datenbankschlüssels gescheitert: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Ungültiger symmetrischer Verschlüsselungsalgorithmus -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ungültige symmetrische Verschlüsselungs-IV-Größe. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- KDF-Parameter aus Variant-Map konnten nicht serialisiert werden -- -- -- Unable to calculate database key: %1 -- Berechnung des Datenbankschlüssels gescheitert: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nicht unterstützter Verschlüsselungsalgorithmus -- -- -- Invalid compression flags length -- Ungültige Komprimierungs-Flag-Länge -- -- -- Unsupported compression algorithm -- Nicht unterstütztes Komprimierungsverfahren -- -- -- Invalid master seed size -- Ungültige Master-Seed-Länge -- -- -- Invalid transform seed size -- Ungültige Transform-Seed-Länge -- -- -- Invalid transform rounds size -- Ungültige Transformations-Runden-Länge -- -- -- Invalid start bytes size -- Ungültige Start-Byte-Länge -- -- -- Invalid random stream id size -- Ungültige Random-Stream-ID-Länge -- -- -- Invalid inner random stream cipher -- Ungültige Inner-Random-Stream-Cipher -- -- -- Not a KeePass database. -- Keine KeePass-Datenbank. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Die ausgewählte Datei ist eine alte KeePass 1-Datenbank (.kdb). -- --Sie können die Dateit mit "Datenbank -> KeePass 1-Datenbank importieren ..." importieren. --Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann später nicht mehr mit der alten KeePassX-Version 0.4 geöffnet werden. -- -- -- Unsupported KeePass 2 database version. -- Nicht unterstützte KeePass 2-Datenbank-Version. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Ungültige Länge der Cipher-UUID: %1 (Länge: %2) -- -- -- Unable to parse UUID: %1 -- UUID konnte nicht gelesen werden: %1 -- -- -- Failed to read database file. -- Fehler beim Lesen der Datenbank-Datei. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML-Parser-Fehler: %1 -- -- -- No root group -- Keine Root-Gruppe -- -- -- Missing icon uuid or data -- Fehlende Symbol-UUID oder -Daten -- -- -- Missing custom data key or value -- Fehlender benutzerdefinierter Datenschlüssel oder -wert -- -- -- Multiple group elements -- Mehrere Gruppen-Elemente -- -- -- Null group uuid -- Nicht gesetzte Gruppen-UUID -- -- -- Invalid group icon number -- Ungültige Gruppen-Symbol-Anzahl -- -- -- Invalid EnableAutoType value -- Ungültiger Wert für EnableAutoType -- -- -- Invalid EnableSearching value -- Ungültiger Wert für EnableSearching -- -- -- No group uuid found -- Keine Gruppen-UUID gefunden -- -- -- Null DeleteObject uuid -- Fehlende DeleteObject-UUID -- -- -- Missing DeletedObject uuid or time -- Fehlende DeletedObject-UUID oder -Zeit -- -- -- Null entry uuid -- Fehlende Eintrags-UUID -- -- -- Invalid entry icon number -- Ungültige Eintrags-Symbol-Nummer -- -- -- History element in history entry -- Verlaufselement in Eintragsverlauf -- -- -- No entry uuid found -- Keine Eintrags-UUID gefunden -- -- -- History element with different uuid -- Verlaufselement mit anderer UUID -- -- -- Duplicate custom attribute found -- Doppeltes Benutzerattribut gefunden -- -- -- Entry string key or value missing -- Eintrags-Schlüssel oder -Wert fehlt -- -- -- Entry binary key or value missing -- Eintrags-Binärschlüssel oder -Wert fehlt -- -- -- Auto-type association window or sequence missing -- Auto-Type-Fensterangabe oder -Sequenz fehlt -- -- -- Invalid bool value -- Ungültiger Bool-Wert -- -- -- Invalid date time value -- Ungültiger Datums-Zeit-Wert -- -- -- Invalid color value -- Ungültiger Farbwert -- -- -- Invalid color rgb part -- Ungültiger RGB-Farbteil -- -- -- Invalid number value -- Ungültiger Zahlwert -- -- -- Invalid uuid value -- Ungültiger UUID-Wert -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Binärdatei konnte nicht entkomprimiert werden -- -- -- XML error: --%1 --Line %2, column %3 -- XML Fehler: --%1 --Zeile %2, Spalte %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Ungültige KeeAgent-Einstellungs-Dateistruktur. -- -- -- Private key is an attachment but no attachments provided. -- Privater Schlüssel ist ein Anhang, aber es wurde kein Anhang angegeben. -- -- -- Private key is empty -- Privater Schlüssel ist leer -- -- -- File too large to be a private key -- Datei zu groß, um ein privater Schlüssel zu sein -- -- -- Failed to open private key -- Fehler beim Öffnen des privaten Schlüssels -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Fehler beim Öffnen der Datenbank. -- -- -- Import KeePass1 Database -- KeePass1-Datenbank importieren -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Fehler beim Lesen der Schlüsseldatei. -- -- -- Not a KeePass database. -- Keine KeePass-Datenbank. -- -- -- Unsupported encryption algorithm. -- Nicht unterstützter Verschlüsselungsalgorithmus. -- -- -- Unsupported KeePass database version. -- Nicht unterstützte KeePass-Datenbankversion. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Verschlüsselungs-IV konnte nicht gelesen werden -- -- -- Invalid number of groups -- Ungültige Anzahl Gruppen -- -- -- Invalid number of entries -- Ungültige Anzahl Einträge -- -- -- Invalid content hash size -- Ungültige Inhalts-Hashlänge -- -- -- Invalid transform seed size -- Ungültige Transform-Seed-Länge -- -- -- Invalid number of transform rounds -- Ungültige Anzahl Transform-Runden -- -- -- Unable to construct group tree -- Gruppen-Baum konnte nicht erzeugt werden -- -- -- Root -- Root -- -- -- Key transformation failed -- Schlüssel-Transformation fehlgeschlagen -- -- -- Invalid group field type number -- Ungültige Gruppen-Typanzahl -- -- -- Invalid group field size -- Falsche Feldgröße für Gruppe -- -- -- Read group field data doesn't match size -- Falsche Feldgröße für Gruppenfeld -- -- -- Incorrect group id field size -- Falsche Feldgröße für Gruppen-ID -- -- -- Incorrect group creation time field size -- Falsche Feldgröße für Gruppen-Erstellungs-Zeit -- -- -- Incorrect group modification time field size -- Falsche Feldgröße für Gruppen-Änderungszeit -- -- -- Incorrect group access time field size -- Falsche Feldgröße für Gruppen-Zugriffszeit -- -- -- Incorrect group expiry time field size -- Falsche Feldgröße für Gruppen-Verfallszeit -- -- -- Incorrect group icon field size -- Falsche Feldgröße für Gruppen-Symbol -- -- -- Incorrect group level field size -- Falsche Feldgröße für Gruppen-Level -- -- -- Invalid group field type -- Falsche Feldtyp für Gruppe -- -- -- Missing group id or level -- Fehlende Gruppen-ID oder -Level -- -- -- Missing entry field type number -- Fehlende Eintragsfeld-Typnummer -- -- -- Invalid entry field size -- Falsche Feldgröße für Eintrag -- -- -- Read entry field data doesn't match size -- Gelesene Eintrags-Felddaten haben falsche Größe -- -- -- Invalid entry uuid field size -- Eintrags-UUID hat falsche Größe -- -- -- Invalid entry group id field size -- Falsche Feldgröße für Eintrags-Gruppen-ID -- -- -- Invalid entry icon field size -- Falsche Feldgröße für Eintrags-Symbol -- -- -- Invalid entry creation time field size -- Falsche Feldgröße für Eintrags-Erstellungszeit -- -- -- Invalid entry modification time field size -- Falsche Feldgröße für Eintrags-Änderungszeit -- -- -- Invalid entry expiry time field size -- Falsche Feldgröße für Eintrags-Ablaufdatum -- -- -- Invalid entry field type -- Ungültiger Eintrags-Feldtyp -- -- -- unable to seek to content position -- Kann nicht zur Inhaltsposition spulen -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. --Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. -- -- -- Unable to calculate database key -- Berechnung des Datenbankschlüssels gescheitert -- -- -- -- KeeShare -- -- Invalid sharing reference -- Ungültige Freigabe-Referenz -- -- -- Inactive share %1 -- Inaktive Freigabe %1 -- -- -- Imported from %1 -- Importiert aus %1 -- -- -- Exported to %1 -- Exportiert nach %1 -- -- -- Synchronized with %1 -- Synchronisiert mit %1 -- -- -- Import is disabled in settings -- Der Import ist in den Einstellungen deaktiviert -- -- -- Export is disabled in settings -- Der Export ist in den Einstellungen deaktiviert -- -- -- Inactive share -- Inaktive Freigabe -- -- -- Imported from -- Importiert von -- -- -- Exported to -- Exportiert nach -- -- -- Synchronized with -- Synchronisiert mit -- -- -- -- KeyComponentWidget -- -- Key Component -- Schlüsselkomponente -- -- -- Key Component Description -- Beschreibung der Schlüsselkomponente -- -- -- Cancel -- Abbrechen -- -- -- Key Component set, click to change or remove -- Schlüsselkomponente ausgewählt, klicken zum Ändern oder Entfernen -- -- -- Add %1 -- Add a key component -- %1 hinzufügen -- -- -- Change %1 -- Change a key component -- %1 ändern -- -- -- Remove %1 -- Remove a key component -- %1 entfernen -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 ausgewählt, klicken zum Ändern oder Entfernen -- -- -- -- KeyFileEditWidget -- -- Generate -- Erzeugen -- -- -- Key File -- Schlüsseldatei -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Um die Sicherheit zu erhöhen, können Sie eine Schlüsseldatei mit zufälligem Inhalt erzeugen.</p><p>Diese Datei muss geheim gehalten werden und darf niemals verloren gehen, ansonsten ist kein Zugriff auf die Datenbank mehr möglich!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Fehler beim Laden der Schlüsseldatei '%1': --%2 -- -- -- Key files -- Schlüsseldateien -- -- -- All files -- Alle Dateien -- -- -- Create Key File... -- Schlüsseldatei erzeugen … -- -- -- Error creating key file -- Fehler beim Erstellen der Schlüsseldatei -- -- -- Unable to create key file: %1 -- Schlüsseldatei kann nicht erzeugt werden: %1 -- -- -- Select a key file -- Schlüsseldatei auswählen -- -- -- Key file selection -- Auswahl der Schlüsseldatei -- -- -- Browse for key file -- Schlüsseldatei auswählen -- -- -- Browse... -- Durchsuchen ... -- -- -- Generate a new key file -- Neue Schlüsseldatei erzeugen -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Hinweis: Benutzen Sie keine Datei, die sich ändern kann, sonst können Sie die Datenbank nicht mehr entsperren! -- -- -- Invalid Key File -- Ungültige Schlüsseldatei -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Sie können die aktuelle Datenbank nicht als ihre eigene Schlüsseldatei verwenden. Bitte wählen Sie eine andere Datei oder erzeugen Sie eine neue Schlüsseldatei. -- -- -- Suspicious Key File -- Verdächtige Schlüsseldatei -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Die gewählte Schlüsseldatei sieht aus wie eine Passwort-Datenbank. Eine Schlüsseldatei darf sich niemals ändern, sonst verlieren Sie für immer den Zugriff auf Ihre Datenbank. --Wollen Sie wirklich mit dieser Datei fortfahren? -- -- -- Old key file format -- Altes Schlüsseldateiformat -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise<br>in Zukunft nicht mehr unterstützen wird.<br><br>Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. -- -- -- -- MainWindow -- -- &Database -- &Datenbank -- -- -- &Help -- &Hilfe -- -- -- &Groups -- &Gruppen -- -- -- &Tools -- &Werkzeuge -- -- -- &Quit -- &Beenden -- -- -- &About -- &Über -- -- -- Database settings -- Datenbank-Einstellungen -- -- -- Copy username to clipboard -- Benutzername in Zwischenablage kopieren -- -- -- Copy password to clipboard -- Passwort in die Zwischenablage kopieren -- -- -- &Settings -- &Einstellungen -- -- -- &Title -- &Titel -- -- -- Copy title to clipboard -- Titel in Zwischenablage kopieren -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- URL in Zwischenablage kopieren -- -- -- &Notes -- &Notizen -- -- -- Copy notes to clipboard -- Notizen in Zwischenablage kopieren -- -- -- Copy &TOTP -- &TOTP kopieren -- -- -- E&mpty recycle bin -- Papierkorb l&eeren -- -- -- Clear history -- Verlauf löschen -- -- -- Access error for config file %1 -- Zugriffsfehler bei Konfigurationsdatei %1 -- -- -- Settings -- Einstellungen -- -- -- Toggle window -- Fenster zeigen/verstecken -- -- -- Quit KeePassXC -- KeePassXC beenden -- -- -- Please touch the button on your YubiKey! -- Bitte drücken Sie die Taste an Ihrem YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- WARNUNG: Sie verwenden eine instabile Version von KeePassXC! --Es besteht ein hohes Risiko für Datenverlust. Halten Sie ein Backup Ihrer Datenbank. --Diese Version ist nicht für den Produktiveinsatz gedacht. -- -- -- &Donate -- &Spenden -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- WARNUNG: Ihre Qt-Version kann KeePassXC bei Verwendung der Bildschirmtastatur zum Absturz bringen! --Wir empfehlen die Verwendung des auf unserer Downloadseite verfügbaren AppImage. -- -- -- &Import -- Importieren -- -- -- Create a new database -- Neue Datenbank erstellen -- -- -- Merge from another KDBX database -- Mit einer anderen KDBX-Datenbank zusammenführen -- -- -- Add a new entry -- Neuen Eintrag hinzufügen -- -- -- View or edit entry -- Eintrag anzeigen oder bearbeiten -- -- -- Add a new group -- Neue Gruppe hinzufügen -- -- -- Perform &Auto-Type -- Auto-Ausfüllen -- -- -- Open &URL -- &URL öffnen -- -- -- Import a KeePass 1 database -- KeePass 1-Datenbank importieren -- -- -- Import a CSV file -- CSV-Datei importieren -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- WARNUNG: Sie verwenden eine Vorabversion von KeePassXC! --Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedacht. -- -- -- Check for updates on startup? -- Bei Programmstart nach Updates suchen? -- -- -- Would you like KeePassXC to check for updates on startup? -- Soll KeePassXC bei Programmstart nach neuen Programmversionen suchen? -- -- -- You can always check for updates manually from the application menu. -- Sie können im Menü jederzeit selbst nach Updates suchen. -- -- -- &Export -- &Export -- -- -- Sort &A-Z -- Sortieren &A-Z -- -- -- Sort &Z-A -- Sortieren &Z-A -- -- -- &Password Generator -- &Passwortgenerator -- -- -- Import a 1Password Vault -- 1Password-Tresor importieren -- -- -- &Getting Started -- &Erste Schritte -- -- -- &User Guide -- &Benutzerhandbuch -- -- -- &Keyboard Shortcuts -- &Tastenkombinationen -- -- -- &Recent Databases -- &Zuletzt verwendete Datenbanken -- -- -- &Entries -- &Einträge -- -- -- Copy Att&ribute -- Att&ribut kopieren -- -- -- TOTP -- TOTP -- -- -- View -- Ansicht -- -- -- Theme -- Design -- -- -- &Check for Updates -- Nach Updates &suchen -- -- -- &Open Database… -- Datenbank &öffnen… -- -- -- &Save Database -- Datenbank &speichern -- -- -- &Close Database -- Datenbank &schließen -- -- -- &New Database… -- &Neue Datenbank… -- -- -- &Merge From Database… -- Mit Datenbank &zusammenführen… -- -- -- &New Entry… -- &Neuer Eintrag… -- -- -- &Edit Entry… -- Eintrag &bearbeiten… -- -- -- &Delete Entry… -- Eintrag &löschen… -- -- -- &New Group… -- &Neue Gruppe… -- -- -- &Edit Group… -- Gruppe &bearbeiten… -- -- -- &Delete Group… -- Gruppe &löschen… -- -- -- Download All &Favicons… -- Alle &Favicons herunterladen… -- -- -- Sa&ve Database As… -- Datenbank s&peichern als… -- -- -- Database &Security… -- Datenbank-&Sicherheit… -- -- -- Database &Reports... -- Datenbank-&Berichte… -- -- -- Statistics, health check, etc. -- Statistiken, Gesundheitscheck usw. -- -- -- &Database Settings… -- &Datenbank-Einstellungen… -- -- -- &Clone Entry… -- Eintrag &klonen… -- -- -- Move u&p -- Nach &oben verschieben -- -- -- Move entry one step up -- Eintrag einen Schritt nach oben verschieben -- -- -- Move do&wn -- Nach &unten verschieben -- -- -- Move entry one step down -- Eintrag einen Schritt nach unten verschieben -- -- -- Copy &Username -- &Benutzername kopieren -- -- -- Copy &Password -- Passwort kopieren -- -- -- Download &Favicon -- &Favicon herunterladen -- -- -- &Lock Databases -- Datenbanken &sperren -- -- -- &CSV File… -- &CSV-Datei… -- -- -- &HTML File… -- &HTML-Datei… -- -- -- KeePass 1 Database… -- KeePass 1-Datenbank… -- -- -- 1Password Vault… -- 1Password-Tresor… -- -- -- CSV File… -- CSV-Datei… -- -- -- Show TOTP -- TOTP anzeigen -- -- -- Show QR Code -- QR-Code anzeigen -- -- -- Set up TOTP… -- TOTP einrichten… -- -- -- Report a &Bug -- Einen &Fehler melden -- -- -- Open Getting Started Guide -- Erste Schritte öffnen -- -- -- &Online Help -- &Online-Hilfe -- -- -- Go to online documentation -- Online-Dokumentation aufrufen -- -- -- Open User Guide -- Benutzerhandbuch öffnen -- -- -- Save Database Backup... -- Datenbank-Backup speichern... -- -- -- Add key to SSH Agent -- Schlüssel zum SSH-Agent hinzufügen -- -- -- Remove key from SSH Agent -- Schlüssel vom SSH-Agent entfernen -- -- -- Compact Mode -- Kompakter Modus -- -- -- Automatic -- Automatisch -- -- -- Light -- Hell -- -- -- Dark -- Dunkel -- -- -- Classic (Platform-native) -- Klassisch (Plattform-nativ) -- -- -- Show Toolbar -- Symbolleiste anzeigen -- -- -- Show Preview Panel -- Vorschau-Panel anzeigen -- -- -- Don't show again for this version -- Für diese Version nicht erneut anzeigen -- -- -- Restart Application? -- Anwendung neustarten? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten? -- -- -- Perform Auto-Type Sequence -- Führe Auto-Type-Sequenz aus -- -- -- {USERNAME} -- {BENUTZERNAME} -- -- -- {USERNAME}{ENTER} -- {BENUTZERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORT} -- -- -- {PASSWORD}{ENTER} -- {PASSWORT}{ENTER} -- -- -- Always on Top -- Immer oben -- -- -- Hide Usernames -- Benutzernamen ausblenden -- -- -- Hide Passwords -- Passwörter ausblenden -- -- -- -- ManageDatabase -- -- Database settings -- Datenbank-Einstellungen -- -- -- Edit database settings -- Datenbank-Einstellungen bearbeiten -- -- -- Unlock database -- Datenbank entsperren -- -- -- Unlock database to show more information -- Datenbank entsperren, um mehr Informationen anzuzeigen -- -- -- Lock database -- Datenbank sperren -- -- -- -- ManageSession -- -- Disconnect -- Trennen -- -- -- Disconnect this application -- Diese Anwendung trennen -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Erzeuge fehlendes %1 [%2] -- -- -- Relocating %1 [%2] -- Verschiebe %1 [%2] -- -- -- Overwriting %1 [%2] -- Überschreibe %1 [%2] -- -- -- older entry merged from database "%1" -- älterer Eintrag aus Datenbank "%1" zusammengeführt -- -- -- Adding backup for older target %1 [%2] -- Backup für älteres Ziel %1 wird hinzugefügt [%2] -- -- -- Adding backup for older source %1 [%2] -- Backup für ältere Quelle %1 wird hinzugefügt [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Älterer Zieleintrag wird auf neueren Quelleintrag angewendet %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Älterer Quelleintrag wird auf neueren Zieleintrag angewendet %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronisiere von neuerer Quelle %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronisiere von älterer Quelle %1 [%2] -- -- -- Deleting child %1 [%2] -- Lösche Untereintrag %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Lösche verwaisten Eintrag %1 [%2] -- -- -- Changed deleted objects -- Gelöschte Einträge geändert -- -- -- Adding missing icon %1 -- Fehlendes Symbol %1 wird hinzugefügt -- -- -- Removed custom data %1 [%2] -- Plugin-Daten %1 entfernt [%2] -- -- -- Adding custom data %1 [%2] -- Plugin-Daten %1 werden hinzugefügt [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Neue KeePassXC-Datenbank erstellen … -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Assistent -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern. -- -- -- Advanced Settings -- Fortgeschrittene Einstellungen -- -- -- Simple Settings -- Grundeinstellungen -- -- -- Encryption Settings -- Verschlüsselungs-Einstellungen -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Datenbank-Anmeldedaten -- -- -- A set of credentials known only to you that protects your database. -- Ein Satz von nur Ihnen bekannten Anmeldedaten, der Ihre Datenbank schützt. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Verschlüsselungs-Einstellungen -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Allgemeine Informationen zur Datenbank -- -- -- Please fill in the display name and an optional description for your new database: -- Bitte geben Sie den Namen und (optional) eine Beschreibung der neuen Datenbank ein: -- -- -- -- NixUtils -- -- Password Manager -- Passwortmanager -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Ungültiges OpData01, enthält keinen Header -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Konnte nicht alle IV-Bytes lesen, wollte 16, aber bekam %1 -- -- -- Unable to init cipher for opdata01: %1 -- Kann Cipher für opdata01 nicht initialisieren: %1 -- -- -- Unable to read all HMAC signature bytes -- Kann nicht alle HMAC-Signatur-Bytes lesen -- -- -- Malformed OpData01 due to a failed HMAC -- Fehlerhaftes OpData01 aufgrund von fehlgeschlagenem HMAC -- -- -- Unable to process clearText in place -- Kann clearText nicht direkt verarbeiten -- -- -- Expected %1 bytes of clear-text, found %2 -- %1 Bytes Klartext erwartet, %2 gefunden -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Gelesene Datenbank ergab keine Instanz --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Ordner .opvault muss existieren -- -- -- Directory .opvault must be readable -- Ordner .opvault muss lesbar sein -- -- -- Directory .opvault/default must exist -- Ordner .opvault/default muss existieren -- -- -- Directory .opvault/default must be readable -- Ordner .opvault/default muss lesbar sein -- -- -- Unable to decode masterKey: %1 -- MasterKey: %1 konnte nicht entschlüsselt werden -- -- -- Unable to derive master key: %1 -- Master-Passwort kann nicht abgeleitet werden: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Ungültige Schlüsseldatei, erwartet: OpenSSH-Schlüssel -- -- -- PEM boundary mismatch -- Falsche PEM-Boundarys -- -- -- Base64 decoding failed -- Base64-Dekodierung fehlgeschlagen -- -- -- Key file way too small. -- Schlüsseldatei ist viel zu klein. -- -- -- Key file magic header id invalid -- Magic-Header-ID der Schlüsseldatei ungültig -- -- -- Found zero keys -- Keine Schlüssel gefunden -- -- -- Failed to read public key. -- Öffentlicher Schlüssel kann nicht gelesen werden. -- -- -- Corrupted key file, reading private key failed -- Defekte Schlüsseldatei, Lesen des privaten Schlüssels fehlgeschlagen -- -- -- No private key payload to decrypt -- Keine private Schlüsselsignatur zum Entschlüsseln -- -- -- Trying to run KDF without cipher -- Versuche, KDF ohne Verschlüsselungsalgorithmus anzuwenden -- -- -- Passphrase is required to decrypt this key -- Passphrase zum Entschlüsseln des Schlüssels benötigt -- -- -- Key derivation failed, key file corrupted? -- Schlüssel-Ableitung fehlgeschlagen, Schlüsseldatei beschädigt? -- -- -- Decryption failed, wrong passphrase? -- Entschlüsselung fehlgeschlagen, falsche Passphrase? -- -- -- Unexpected EOF while reading public key -- Unerwartetes Dateiende beim Lesen des öffentlichen Schlüssels -- -- -- Unexpected EOF while reading private key -- Unerwartetes Dateiende beim Lesen des privaten Schlüssels -- -- -- Can't write public key as it is empty -- Öffentlicher Schlüssel kann nicht geschrieben werden, da er leer ist -- -- -- Unexpected EOF when writing public key -- Unerwartetes Dateiende beim Schreiben des öffentlichen Schlüssels -- -- -- Can't write private key as it is empty -- Privatschlüssel konnte nicht geschrieben werden, da er leer ist -- -- -- Unexpected EOF when writing private key -- Unerwartetes Dateiende beim Schreiben des privaten Schlüssels -- -- -- Unsupported key type: %1 -- Nicht unterstützter Schlüssel-Typ: %1 -- -- -- Unknown cipher: %1 -- Unbekannter Verschlüsselungsalgorithmus: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Verschlüsselungs-IV ist zur kurz für MD5-KDF -- -- -- Unknown KDF: %1 -- Unbekannte KDF: %1 -- -- -- Unknown key type: %1 -- Unbekannter Schlüsseltyp: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Passwörter stimmen nicht überein -- -- -- Passwords match so far -- Passwörter stimmen überein -- -- -- Toggle Password (%1) -- Passwort umschalten (%1) -- -- -- Generate Password (%1) -- Passwort erzeugen (%1) -- -- -- Warning: Caps Lock enabled! -- Warnung: Feststelltaste aktiviert! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Passwort eingeben: -- -- -- Confirm password: -- Passwort bestätigen: -- -- -- Password -- Passwort -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Ein Passwort ist der wichtigste Weg, Ihre Datenbank abzusichern.</p><p>Gute Passwörter sind lang und werden nur ein einziges Mal benutzt. KeePassXC kann eins für Sie generieren.</p> -- -- -- Passwords do not match. -- Die Passwörter stimmen nicht überein. -- -- -- Password field -- Passwort-Feld -- -- -- Repeat password field -- Feld zum Wiederholen des Passworts -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- Stärke -- -- -- entropy -- Entropie -- -- -- Password -- Passwort -- -- -- Character Types -- Zeichentypen -- -- -- Numbers -- Zahlen -- -- -- Extended ASCII -- Erweitertes ASCII -- -- -- Exclude look-alike characters -- Gleichaussehende Zeichen ausschließen -- -- -- Pick characters from every group -- Zeichen aus allen Gruppen verwenden -- -- -- &Length: -- &Länge: -- -- -- Passphrase -- Passphrase -- -- -- Wordlist: -- Wortliste -- -- -- Word Separator: -- Worttrenner: -- -- -- Close -- Schließen -- -- -- Entropy: %1 bit -- Entropie: %1 bit -- -- -- Password Quality: %1 -- Passwort-Qualität: %1 -- -- -- Poor -- Password quality -- Schlecht -- -- -- Weak -- Password quality -- Schwach -- -- -- Good -- Password quality -- Gut -- -- -- Excellent -- Password quality -- Ausgezeichnet -- -- -- Switch to advanced mode -- Zum fortgeschrittenen Modus wechseln -- -- -- Advanced -- Fortgeschritten -- -- -- Braces -- Klammern -- -- -- Punctuation -- Interpunktion -- -- -- Quotes -- Anführungszeichen -- -- -- Logograms -- Kürzel -- -- -- Character set to exclude from generated password -- Zeichen, die nicht im Passwort enthalten sein sollen -- -- -- Do not include: -- Nicht einbeziehen: -- -- -- Add non-hex letters to "do not include" list -- Nicht-Hex-Buchstaben zu der "Nicht-Hinzufügen"-Liste hinzufügen -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Ausgeschlossene Zeichen: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Erzeugtes Passwort -- -- -- Upper-case letters -- Großbuchstaben -- -- -- Lower-case letters -- Kleinbuchstaben -- -- -- Special characters -- Sonderzeichen -- -- -- Math Symbols -- Mathematische Symbole -- -- -- Dashes and Slashes -- Bindezeichen und Schrägstriche -- -- -- Excluded characters -- Ausgenommene Zeichen -- -- -- Hex Passwords -- Hexadezimale Passwörter -- -- -- Password length -- Passwortlänge -- -- -- Word Case: -- Groß-/Kleinschreibung: -- -- -- Regenerate password -- Neu erzeugen -- -- -- Copy password -- Passwort kopieren -- -- -- lower case -- Kleinbuchstaben -- -- -- UPPER CASE -- GROẞBUCHSTABEN -- -- -- Title Case -- Anfangsbuchstaben groß -- -- -- Generate Password -- Passwort erzeugen -- -- -- Also choose from: -- Auch wählen aus: -- -- -- Additional characters to use for the generated password -- Zusätzliche Zeichen für die Passwort-Erzeugung -- -- -- Additional characters -- Zusätzliche Zeichen -- -- -- Word Count: -- Wort-Anzahl -- -- -- Esc -- Esc -- -- -- Apply Password -- Passwort anwenden -- -- -- Ctrl+S -- Strg+S -- -- -- Regenerate password (%1) -- Passwort neu erzeugen (%1) -- -- -- Special Characters -- Sonderzeichen -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistiken -- -- -- Very weak password -- Sehr schwaches Passwort -- -- -- Password entropy is %1 bits -- Passwort-Entropie ist %1 Bits -- -- -- Weak password -- Schwaches Passwort -- -- -- Used in %1/%2 -- Verwendet in %1/%2 -- -- -- Password is used %1 times -- Passwort wird %1 Mal verwendet -- -- -- Password has expired -- Passwort ist abgelaufen -- -- -- Password expiry was %1 -- Passwort-Ablauf war %1 -- -- -- Password is about to expire -- Passwort läuft bald ab -- -- -- Password expires in %1 days -- Passwort läuft in %1 Tagen ab -- -- -- Password will expire soon -- Passwort wird bald ablaufen -- -- -- Password expires on %1 -- Passwort läuft am %1 ab -- -- -- Health Check -- Gesundheitscheck -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Überschreiben -- -- -- Delete -- Löschen -- -- -- Move -- Verschieben -- -- -- Empty -- Leeren -- -- -- Remove -- Entfernen -- -- -- Skip -- Überspringen -- -- -- Disable -- Deaktivieren -- -- -- Merge -- Zusammenführen -- -- -- Continue -- Fortsetzen -- -- -- -- QObject -- -- Database not opened -- Datenbank nicht geöffnet -- -- -- Database hash not available -- Datenbank-Hash nicht verfügbar -- -- -- Client public key not received -- Öffentlichen Schlüssel des Clients nicht empfangen -- -- -- Cannot decrypt message -- Nachricht konnte nicht entschlüsselt werden -- -- -- Action cancelled or denied -- Aktion abgebrochen oder verweigert -- -- -- KeePassXC association failed, try again -- KeePassXC-Verbindung fehlgeschlagen, bitte erneut versuchen -- -- -- Encryption key is not recognized -- Schlüssel nicht erkannt -- -- -- Incorrect action -- Falsche Aktion -- -- -- Empty message received -- Leere Nachricht erhalten -- -- -- No URL provided -- Keine URL angegeben -- -- -- No logins found -- Keine Anmeldedaten gefunden -- -- -- Unknown error -- Unbekannter Fehler -- -- -- Add a new entry to a database. -- Neuen Eintrag zur Datenbank hinzufügen. -- -- -- Path of the database. -- Pfad der Datenbank. -- -- -- Key file of the database. -- Schlüsseldatei der Datenbank -- -- -- path -- Pfad -- -- -- Username for the entry. -- Benutzername für den Eintrag. -- -- -- username -- Benutzername -- -- -- URL for the entry. -- URL für den Eintrag. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Nach dem Passwort des Eintrags fragen. -- -- -- Generate a password for the entry. -- Passwort für den Eintrag generieren. -- -- -- length -- Länge -- -- -- Path of the entry to add. -- Pfad des hinzuzufügenden Eintrags. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Pfad des in die Zwischenablage zu kopierenden Eintrags -- -- -- Timeout in seconds before clearing the clipboard. -- Zeit in Sekunden, bevor die Zwischenablage geleert wird. -- -- -- Edit an entry. -- Einen Eintrag bearbeiten. -- -- -- Title for the entry. -- Titel für diesen Eintrag. -- -- -- title -- Titel -- -- -- Path of the entry to edit. -- Pfad des zu bearbeitenden Eintrags. -- -- -- Estimate the entropy of a password. -- Entropie des Passworts abschätzen. -- -- -- Password for which to estimate the entropy. -- Passwort, für das die Entropie abgeschätzt werden soll. -- -- -- Perform advanced analysis on the password. -- Fortgeschrittene Analyse des Passworts ausführen. -- -- -- -- --Available commands: -- -- -- --Verfügbare Kommandos: -- -- -- -- Name of the command to execute. -- Name des auszuführenden Befehls. -- -- -- List database entries. -- Datenbankeinträge auflisten. -- -- -- Path of the group to list. Default is / -- Pfad der aufzulistenden Gruppe. Standard ist /. -- -- -- Find entries quickly. -- Einträge schnell finden. -- -- -- Search term. -- Suchbegriff. -- -- -- Merge two databases. -- Zwei Datenbanken zusammenführen -- -- -- Path of the database to merge from. -- Pfad der Datenbank, aus der zusammengeführt werden soll. -- -- -- Use the same credentials for both database files. -- Dieselben Anmeldedaten für beide Datenbanken verwenden. -- -- -- Key file of the database to merge from. -- Schlüsseldatei der Datenbank, aus der zusammengeführt werden soll. -- -- -- Show an entry's information. -- Informationen eines Eintrags anzeigen. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Namen der anzuzeigenden Attribute. Diese Option kann mehr als einmal angegeben werden, wobei jedes Attribut in einer eigenen Zeile in der gegebenen Reihenfolge angegeben wird. Wenn keine Attribute angegeben sind, wird eine Zusammenfassung der Standardattribute gegeben. -- -- -- attribute -- Eigenschaft -- -- -- Name of the entry to show. -- Name des anzuzeigenden Eintrags. -- -- -- NULL device -- NULL-Gerät -- -- -- error reading from device -- Fehler beim Lesen vom Gerät -- -- -- malformed string -- Ungültige Zeichenfolge -- -- -- missing closing quote -- Schließendes Anführungszeichen fehlt -- -- -- Group -- Gruppe -- -- -- Title -- Titel -- -- -- Username -- Benutzername -- -- -- Password -- Passwort -- -- -- Notes -- Notizen -- -- -- Last Modified -- Zuletzt bearbeitet -- -- -- Created -- Erstellt -- -- -- Browser Integration -- Browser-Integration -- -- -- SSH Agent -- SSH-Agent -- -- -- Generate a new random diceware passphrase. -- Neue zufällige Diceware-Passphrase erzeugen. -- -- -- Word count for the diceware passphrase. -- Wortanzahl für die Diceware-Passphrase. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Wortliste für den Diceware-Generator. --[Standard: EFF Englisch] -- -- -- Generate a new random password. -- Neues zufälliges Passwort erzeugen. -- -- -- Could not create entry with path %1. -- Eintrag mit dem Pfad %1 kann nicht erstellt werden. -- -- -- Enter password for new entry: -- Passwort für neuen Eintrag eingeben: -- -- -- Writing the database failed %1. -- Schreiben der Datenbank fehlgeschlagen: %1 -- -- -- Successfully added entry %1. -- Eintrag %1 erfolgreich hinzugefügt. -- -- -- Invalid timeout value %1. -- Ungültiger Timeout-Wert %1 -- -- -- Entry %1 not found. -- Eintrag %1 nicht gefunden. -- -- -- Entry with path %1 has no TOTP set up. -- Zu Eintrag %1 wurde kein TOTP eingerichtet. -- -- -- Clearing the clipboard in %1 second(s)... -- Zwischenablage wird in %1 Sekunde(n) geleert…Zwischenablage wird in %1 Sekunde(n) gelöscht ... -- -- -- Clipboard cleared! -- Zwischenablage gelöscht. -- -- -- Silence password prompt and other secondary outputs. -- Passwortnachfrage und andere Ausgaben unterdrücken. -- -- -- count -- CLI parameter -- Anzahl -- -- -- Could not find entry with path %1. -- Eintrag mit dem Pfad %1 nicht gefunden. -- -- -- Not changing any field for entry %1. -- Eintrag %1 wurde nicht geändert. -- -- -- Enter new password for entry: -- Neues Passwort für Eintrag eingeben: -- -- -- Writing the database failed: %1 -- Schreiben der Datenbank fehlgeschlagen: %1 -- -- -- Successfully edited entry %1. -- Eintrag %1 erfolgreich bearbeitet. -- -- -- Length %1 -- Länge: %1 -- -- -- Entropy %1 -- Entropie %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-Wort-Zusatzbits %1 -- -- -- Type: Bruteforce -- Typ: Bruteforce -- -- -- Type: Dictionary -- Typ: Wörterbuch -- -- -- Type: Dict+Leet -- Typ: Wörterbuch und Leet -- -- -- Type: User Words -- Typ: Benutzerdefinierte Wörter -- -- -- Type: User+Leet -- Type: Benutzerdefinierte Wörter und Leet -- -- -- Type: Repeated -- Typ: Wiederholt -- -- -- Type: Sequence -- Typ: Sequenz -- -- -- Type: Spatial -- Typ: Räumlich -- -- -- Type: Date -- Typ: Datum -- -- -- Type: Bruteforce(Rep) -- Typ: Bruteforce -- -- -- Type: Dictionary(Rep) -- Typ: Wörterbuch -- -- -- Type: Dict+Leet(Rep) -- Typ: Wörterbuch und Leet -- -- -- Type: User Words(Rep) -- Typ: Benutzerdefinierte Wörter -- -- -- Type: User+Leet(Rep) -- Type: Benutzerdefinierte Wörter und Leet -- -- -- Type: Repeated(Rep) -- Typ: Wiederholt -- -- -- Type: Sequence(Rep) -- Typ: Sequenz -- -- -- Type: Spatial(Rep) -- Typ: Räumlich -- -- -- Type: Date(Rep) -- Typ: Datum -- -- -- Type: Unknown%1 -- Typ: Unbekannt%1 -- -- -- Entropy %1 (%2) -- Entropie %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Passwortlänge (%1) ist nicht die Summe ihrer Teile (%2) *** -- -- -- Failed to load key file %1: %2 -- Schlüsseldatei %1 kann nicht geladen werden: %2 -- -- -- Length of the generated password -- Länge des erzeugten Passworts -- -- -- Use lowercase characters -- Kleinbuchstaben verwenden -- -- -- Use uppercase characters -- Großbuchstaben verwenden -- -- -- Use special characters -- Sonderzeichen verwenden -- -- -- Use extended ASCII -- Erweitertes ASCII verwenden -- -- -- Exclude character set -- Zeichen ausschließen -- -- -- chars -- Zeichen -- -- -- Exclude similar looking characters -- Gleichaussehende Zeichen ausschließen -- -- -- Include characters from every selected group -- Zeichen aus allen ausgewählten Gruppen verwenden -- -- -- Recursively list the elements of the group. -- Rekursiv alle Elemente der Gruppe auflisten -- -- -- Cannot find group %1. -- Gruppe %1 nicht gefunden. -- -- -- Error reading merge file: --%1 -- Fehler beim Öffnen der zuzusammenzuführenden Datei: --%1 -- -- -- Unable to save database to file : %1 -- Datenbank kann nicht gespeichert werden: %1 -- -- -- Unable to save database to file: %1 -- Datenbank kann nicht gespeichert werden: %1 -- -- -- Successfully recycled entry %1. -- Eintrag %1 erfolgreich in Papierkorb verschoben. -- -- -- Successfully deleted entry %1. -- Eintrag %1 erfolgreich gelöscht. -- -- -- Show the entry's current TOTP. -- Aktuelles TOTP des Eintrags anzeigen. -- -- -- ERROR: unknown attribute %1. -- FEHLER: Unbekannte Eigenschaft %1. -- -- -- No program defined for clipboard manipulation -- Kein Programm zur Manipulation der Zwischenablage angegeben. -- -- -- file empty -- Datei leer -- -- -- %1: (row, col) %2,%3 -- %1: (Zeile, Spalte) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ungültige Einstellungen -- -- -- Invalid Key -- TOTP -- Ungültiger Schlüssel -- -- -- Message encryption failed. -- Nachrichtenverschlüsselung fehlgeschlagen -- -- -- No groups found -- Keine Gruppe gefunden -- -- -- Create a new database. -- Neue Datenbank erstellen. -- -- -- File %1 already exists. -- Datei %1 existiert bereits. -- -- -- Loading the key file failed -- Schlüsseldatei kann nicht geladen werden -- -- -- No key is set. Aborting database creation. -- Kein Schlüssel festgelegt. Datenbankerstellung wird abgebrochen. -- -- -- Failed to save the database: %1. -- Datenbank kann nicht gespeichert werden: %1. -- -- -- Successfully created new database. -- Datenbank erfolgreich erstellt. -- -- -- Creating KeyFile %1 failed: %2 -- Schlüsseldatei %1 kann nicht erstellt werden: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Schlüsseldatei %1 kann nicht geladen werden: %2 -- -- -- Path of the entry to remove. -- Pfad des zu entfernenden Eintrags. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Vorhandene Einmal-Sperrdatei ist ungültig. Starte neue Instanz. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Sperrdatei konnte nicht erstellt werden. Einzelinstanzmodus ist deaktiviert. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - Plattformübergreifender Passwort-Manager -- -- -- filenames of the password databases to open (*.kdbx) -- Dateinamen der zu öffnenden Datenbanken (*.kdbx) -- -- -- path to a custom config file -- Pfad zu einer benutzerdefinierten Konfigurationsdatei -- -- -- key file of the database -- Schlüsseldatei der Datenbank -- -- -- read password of the database from stdin -- Passwort der Datenbank von stdin lesen -- -- -- Another instance of KeePassXC is already running. -- Eine andere KeePassXC-Instanz läuft bereits. -- -- -- Fatal error while testing the cryptographic functions. -- Kritischer Fehler beim Testen der kryptografischen Funktionen. -- -- -- KeePassXC - Error -- KeePassXC - Fehler -- -- -- Database password: -- Datenbank-Passwort: -- -- -- Cannot create new group -- Neue Gruppe kann nicht erstellt werden -- -- -- Deactivate password key for the database. -- Passwort-Schlüssel für die Datenbank deaktivieren. -- -- -- Displays debugging information. -- Zeigt Informationen zur Fehlerbehebung an. -- -- -- Deactivate password key for the database to merge from. -- Passwort-Schlüssel für die Quell-Datenbank der Zusammenführung deaktivieren. -- -- -- Version %1 -- Version %1 -- -- -- Build Type: %1 -- Build Typ: %1 -- -- -- Revision: %1 -- Revision: %1 -- -- -- Distribution: %1 -- Distribution: %1 -- -- -- Debugging mode is disabled. -- Diagnosemodus ist deaktiviert. -- -- -- Debugging mode is enabled. -- Diagnosemodus ist aktiviert. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Betriebssystem: %1 --CPU-Architektur: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (bestätigtes und unbestätigtes Teilen) -- -- -- KeeShare (only signed sharing) -- KeeShare (nur bestätigtes Teilen) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (nur unbestätigtes Teilen) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Keine -- -- -- Enabled extensions: -- Aktivierte Erweiterungen: -- -- -- Cryptographic libraries: -- Kryptographische Bibliotheken: -- -- -- Cannot generate a password and prompt at the same time! -- Kann nicht Passwort und Meldung gleichzeitig generieren! -- -- -- Adds a new group to a database. -- Fügt der Datenbank eine neue Gruppe hinzu. -- -- -- Path of the group to add. -- Pfad der hinzuzufügenden Gruppe. -- -- -- Group %1 already exists! -- Gruppe %1 existiert bereits! -- -- -- Group %1 not found. -- Gruppe %1 nicht gefunden. -- -- -- Successfully added group %1. -- Gruppe %1 erfolgreich hinzugefügt. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Überprüfen, ob irgenwelche Passwörter in öffentlichen Datenlecks vorkommen. FILENAME muss der der Pfad der Datei sein, die SHA-1-Hashes der Passwörter im HIBP-Format enthält, wie zu finden unter https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- DATEINAME -- -- -- Analyze passwords for weaknesses and problems. -- Passw‭örter auf Schwächen und Probleme prüfen. -- -- -- Failed to open HIBP file %1: %2 -- HIBP-Datei %1 konnte nicht geöffnet werden: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Datenbank-Einträge werden gegen HIBP-Datei geprüft, das wird eine Weile dauern ... -- -- -- Close the currently opened database. -- Die aktuell geöffnete Datenbank schließen. -- -- -- Display this help. -- Diese Hilfe anzeigen. -- -- -- slot -- Slot -- -- -- Invalid word count %1 -- Ungültige Wortanzahl %1 -- -- -- The word list is too small (< 1000 items) -- Die Wortliste ist zu kurz (< 1000 Einträge) -- -- -- Exit interactive mode. -- Verlasse interaktiven Modus. -- -- -- Exports the content of a database to standard output in the specified format. -- Exportiert den Inhalt einer Datenbank im angegebenen Format auf die Standardausgabe. -- -- -- Unable to export database to XML: %1 -- Fehler beim Exportieren der Datenbank nach XML: %1 -- -- -- Unsupported format %1 -- Nicht unterstütztes Format %1 -- -- -- Use numbers -- Zahlen verwenden -- -- -- Invalid password length %1 -- Ungültige Passwortlänge %1 -- -- -- Display command help. -- Hilfe zu diesem Befehl anzeigen. -- -- -- Available commands: -- Verfügbare Befehle: -- -- -- Import the contents of an XML database. -- Die Inhalte einer XML-Datenbank importieren. -- -- -- Path of the XML database export. -- Pfad des XML-Datenbank-Exports. -- -- -- Path of the new database. -- Pfad zur neuen Datenbank. -- -- -- Successfully imported database. -- Datenbank erfolgreich importiert. -- -- -- Unknown command %1 -- Unbekannter Befehl %1 -- -- -- Flattens the output to single lines. -- Wandelt Ausgabe in einzelne Zeilen um. -- -- -- Only print the changes detected by the merge operation. -- Nur die bei der Zusammenführung erkannten Änderungen ausgeben. -- -- -- Yubikey slot for the second database. -- Yubikey-Slot für die zweite Datenbank. -- -- -- Successfully merged %1 into %2. -- %1 erfolgreich nach %2 zusammengeführt. -- -- -- Database was not modified by merge operation. -- Datenbank wurde beim Zusammenführen nicht verändert. -- -- -- Moves an entry to a new group. -- Verschiebt einen Eintrag in eine neue Gruppe. -- -- -- Path of the entry to move. -- Pfad des zu verschiebenden Eintrags. -- -- -- Path of the destination group. -- Pfad der Zielgruppe. -- -- -- Could not find group with path %1. -- Gruppe mit Pfad %1 nicht gefunden. -- -- -- Entry is already in group %1. -- Eintrag ist bereits in Gruppe %1. -- -- -- Successfully moved entry %1 to group %2. -- Eintrag %1 erfolgreich in Gruppe %2 verschoben. -- -- -- Open a database. -- Datenbank öffnen. -- -- -- Path of the group to remove. -- Pfad der zu entfernenden Gruppe. -- -- -- Cannot remove root group from database. -- Kann Root-Gruppe nicht aus Datenbank entfernen. -- -- -- Successfully recycled group %1. -- Gruppe %1 erfolgreich in Papierkorb verschoben. -- -- -- Successfully deleted group %1. -- Gruppe %1 erfolgreich gelöscht. -- -- -- Failed to open database file %1: not found -- Fehler beim Öffnen der Datenbank-Datei %1: Nicht gefunden -- -- -- Failed to open database file %1: not a plain file -- Fehler beim Öffnen der Datenbank-Datei %1: Keine normale Datei -- -- -- Failed to open database file %1: not readable -- Fehler beim Öffnen der Datenbank-Datei %1: Nicht lesbar -- -- -- Enter password to unlock %1: -- Passwort zum Entsperren von %1 eingeben: -- -- -- Invalid YubiKey slot %1 -- Ungültiger YubiKey-Slot %1 -- -- -- Enter password to encrypt database (optional): -- Passwort eingeben, um Datenbank zu verschlüsseln (optional): -- -- -- HIBP file, line %1: parse error -- HIBP-Datei, Zeile %1: Parse-Fehler -- -- -- Secret Service Integration -- Secret-Service-Integration -- -- -- User name -- Benutzername -- -- -- Password for '%1' has been leaked %2 time(s)! -- Passwort für '%1' wurde %2 Mal in Datenlecks gefunden!Passwort für '%1' wurde %2 Mal in Datenlecks gefunden! -- -- -- Invalid password generator after applying all options -- Ungültiger Passwortgenerator nach Anwendung aller Optionen -- -- -- Show the protected attributes in clear text. -- Geschützte Eigenschaften im Klartext anzeigen. -- -- -- Browser Plugin Failure -- Browser-Plugin-Fehler -- -- -- Could not save the native messaging script file for %1. -- Speichern des Native-Messaging-Skripts für %1 fehlgeschlagen. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Angegebene Eigenschaft in die Zwischenablage kopieren. Standardmäßig "password", wenn nicht spezifiziert. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Aktuelles TOTP in die Zwischenablage kopieren (äquivalent zu "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Eigenschaft eines Eintrags in die Zwischenablage kopieren. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- FEHLER: Geben Sie entweder --attribute oder --totp an, nicht beides. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- FEHLER: Eigenschaft %1 ist uneindeutig, es passt zu %2. -- -- -- Attribute "%1" not found. -- Eigenschaft "%1" nicht gefunden. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Eigenschaft "%1" des Eintrags wurde in die Zwischenablage kopiert! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey-Slot und optional Seriennummer zum Zugriff auf die Datenbank (z.B. 1:7370001). -- -- -- slot[:serial] -- Slot[:Seriennummer] -- -- -- Target decryption time in MS for the database. -- Ziel-Entschlüsselungszeit in ms für die Datenbank. -- -- -- time -- Zeit -- -- -- Set the key file for the database. -- Schlüsseldatei für die Datenbank festlegen. -- -- -- Set a password for the database. -- Passwort für die Datenbank festlegen. -- -- -- Invalid decryption time %1. -- Ungültige Entschlüsselungszeit %1. -- -- -- Target decryption time must be between %1 and %2. -- Ziel-Entschlüsselungszeit muss zwischen %1 und %2 sein. -- -- -- Failed to set database password. -- Festlegen des Datenbank-Passworts fehlgeschlagen. -- -- -- Benchmarking key derivation function for %1ms delay. -- Messe Schlüssel-Ableitungsfunktion für %1ms Verzögerung. -- -- -- Setting %1 rounds for key derivation function. -- Stelle %1 Runden für Schlüssel-Ableitungsfunktion ein. -- -- -- error while setting database key derivation settings. -- Fehler beim Setzen der Datenbank-Schlüsselableitungs-Einstellungen. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Zu benutzendes Format für den Export. Verfügbare Optionen sind 'xml' oder 'csv'. Standard ist 'xml'. -- -- -- Unable to import XML database: %1 -- Fehler beim Importieren der XML-Datenbank: %1 -- -- -- Show a database's information. -- Datenbankinformationen anzeigen. -- -- -- UUID: -- UUID: -- -- -- Name: -- Name: -- -- -- Description: -- Beschreibung: -- -- -- Cipher: -- Verschlüsselungsalgorithmus: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Papierkorb ist aktiviert. -- -- -- Recycle bin is not enabled. -- Papierkorb ist nicht aktiviert. -- -- -- Invalid command %1. -- Ungültiger Befehl %1. -- -- -- Invalid YubiKey serial %1 -- Ungültige YubiKey-Seriennummer %1 -- -- -- Please touch the button on your YubiKey to continue… -- Bitte drücken Sie die Taste an Ihrem YubiKey, um fortzufahren… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Wollen Sie eine Datenbank mit einem leeren Passwort erstellen? [y/N]: -- -- -- Repeat password: -- Passwort wiederholen: -- -- -- Error: Passwords do not match. -- Fehler: Passwörter stimmen nicht überein. -- -- -- All clipping programs failed. Tried %1 -- -- Alle Clipping-Programme fehlgeschlagen. %1 versucht -- -- -- -- AES (%1 rounds) -- AES (%1 Runden) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Verzögerung von %1 messen -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- Pfad zu einer benutzerdefinierten lokalen Konfigurationsdatei -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- WARNUNG: Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise --in Zukunft nicht mehr unterstützen wird. -- --Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 Runden, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – empfohlen) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Symbol -- -- -- Unsupported key file version: %1 -- Nicht unterstützte Schlüsseldateiversion: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Prüfsumme stimmt nicht überein! Die Schlüsseldatei ist möglicherweise beschädigt. -- -- -- Unexpected key file data! Key file may be corrupt. -- Unerwartete Schlüsseldateidaten! Die Schlüsseldatei ist möglicherweise beschädigt. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Interner Fehler in zlib beim Komprimieren: -- -- -- Error writing to underlying device: -- Fehler beim Schreiben aufs Gerät: -- -- -- Error opening underlying device: -- Fehler beim Öffnen des Gerätes: -- -- -- Error reading data from underlying device: -- Fehler beim Lesen der Daten vom Gerät: -- -- -- Internal zlib error when decompressing: -- Interner Fehler in zlib beim Dekomprimieren: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Das gzip-Format wird von dieser zlib-Version nicht unterstützt. -- -- -- Internal zlib error: -- Interner Fehler in zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Auch Einträge zeigen, die von Berichten ausgeschlossen wurden -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Für weitere Informationen mit der Maus über den Grund fahren. Doppelklick auf Einträge zum Bearbeiten. -- -- -- Bad -- Password quality -- Sehr schlecht -- -- -- Bad — password must be changed -- Sehr schlecht —Passwort muss geändert werden -- -- -- Poor -- Password quality -- Schlecht -- -- -- Poor — password should be changed -- Schlecht — Passwort sollte geändert werden -- -- -- Weak -- Password quality -- Schwach -- -- -- Weak — consider changing the password -- Schwach — Passwortänderung sollte erwägt werden -- -- -- (Excluded) -- (ausgeschlossen) -- -- -- This entry is being excluded from reports -- Dieser Eintrag wird von Berichten ausgeschlossen -- -- -- Please wait, health data is being calculated... -- Bitte warten, Gesundheitsdaten werden berechnet... -- -- -- Congratulations, everything is healthy! -- Glückwunsch, alles ist gesund! -- -- -- Title -- Titel -- -- -- Path -- Pfad -- -- -- Score -- Bewertung -- -- -- Reason -- Grund -- -- -- Edit Entry... -- Eintrag bearbeiten... -- -- -- Exclude from reports -- Von Berichten ausschließen -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ACHTUNG: Dieser Bericht erfordert, dass Informationen an den "Have I Been Pwned"-Onlinedienst (https://haveibeenpwned.com) gesendet werden. Wenn Sie fortfahren, werden Ihre Datenbank-Passwörter kryptografisch gehasht, und die ersten fünf Zeichen dieser Hashes werden sicher an diesen Dienst übertragen. Ihre Datenbank bleibt sicher und kann nicht aus diesen Informationen rekonstruiert werden. Jedoch werden die Anzahl der gesendeten Passwörter und Ihre IP-Adresse dem Dienst offengelegt. -- -- -- Perform Online Analysis -- Online-Analyse durchführen -- -- -- Also show entries that have been excluded from reports -- Auch Einträge zeigen, die von Berichten ausgeschlossen wurden -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Dieser Build von KeePassXC hat keine Netzwerkfunktionalität. Diese ist erforderlich, um Ihre Passwörter gegen die Datenbanken von Have I Been Pwned zu überprüfen. -- -- -- Congratulations, no exposed passwords! -- Glückwunsch, keine offengelegten Passwörter! -- -- -- Title -- Titel -- -- -- Path -- Pfad -- -- -- Password exposed… -- Passwort offengelegt… -- -- -- (Excluded) -- (ausgeschlossen) -- -- -- This entry is being excluded from reports -- Dieser Eintrag wird von Berichten ausgeschlossen -- -- -- once -- einmal -- -- -- up to 10 times -- bis zu 10 Mal -- -- -- up to 100 times -- bis zu 100 Mal -- -- -- up to 1000 times -- bis zu 1000 Mal -- -- -- up to 10,000 times -- bis zu 10.000 Mal -- -- -- up to 100,000 times -- bis zu 100.000 Mal -- -- -- up to a million times -- bis zu einer Million Mal -- -- -- millions of times -- Millionen Mal -- -- -- Edit Entry... -- Eintrag bearbeiten... -- -- -- Exclude from reports -- Von Berichten ausschließen -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Fahren Sie für weitere Informationen mit der Maus über die Zeilen mit Fehlersymbolen. -- -- -- Name -- Name -- -- -- Value -- Wert -- -- -- Please wait, database statistics are being calculated... -- Bitte warten Sie, die Datenbank-Statistiken werden ermittelt ... -- -- -- Database name -- Name der Datenbank -- -- -- Description -- Beschreibung -- -- -- Location -- Speicherort -- -- -- Last saved -- Zuletzt gespeichert -- -- -- Unsaved changes -- Ungespeicherte Änderungen -- -- -- yes -- ja -- -- -- no -- nein -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Die Datenbank wurde geändert, aber die Änderungen wurden noch nicht auf dem Datenträger gespeichert. -- -- -- Number of groups -- Anzahl der Gruppen -- -- -- Number of entries -- Anzahl der Einträge -- -- -- Number of expired entries -- Anzahl der abgelaufenen Einträge -- -- -- The database contains entries that have expired. -- Die Datenbank enthält abgelaufene Einträge. -- -- -- Unique passwords -- Einzigartige Passwörter -- -- -- Non-unique passwords -- Nicht einzigartige Passwörter -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. -- -- -- Maximum password reuse -- Maximale Wiederverwendung eines Passworts -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. -- -- -- Number of short passwords -- Anzahl der kurzen Passwörter -- -- -- Recommended minimum password length is at least 8 characters. -- Empfohlene minimale Passwortlänge beträgt mindestens 8 Zeichen. -- -- -- Number of weak passwords -- Anzahl der schwachen Passwörter -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung "gut" oder "hervorragend" wird empfohlen. -- -- -- Entries excluded from reports -- Von Berichten ausgeschlossene Einträge -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Das Ausschließen von Einträgen aus Berichten, z.B. weil sie bekannterweise schlechte Passwörter haben, ist nicht unbedingt ein Problem, aber Sie sollten ein Auge auf sie haben. -- -- -- Average password length -- Durchschnittliche Passwortlänge -- -- -- %1 characters -- %1 Zeichen -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Die durchschnittliche Passwortlänge beträgt weniger als zehn Zeichen. Längere Passwörter bieten mehr Sicherheit. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agent-Verbindung fehlgeschlagen. -- -- -- Agent protocol error. -- Agent-Protokollfehler. -- -- -- No agent running, cannot add identity. -- Kein Agent ausgeführt, kann keine Identität hinzufügen. -- -- -- No agent running, cannot remove identity. -- Kein Agent ausgeführt, kann keine Identität entfernen. -- -- -- Agent refused this identity. Possible reasons include: -- Agent lehnt diese Identität ab. Mögliche Gründe sind: -- -- -- The key has already been added. -- Der Schlüssel wurde bereits hinzugefügt. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Eingeschränkte Lebensdauer wird durch den Agenten nicht unterstützt (Optionen prüfen). -- -- -- A confirmation request is not supported by the agent (check options). -- Eine Bestätigungsanfrage wird durch den Agenten nicht unterstützt (Optionen prüfen). -- -- -- Key identity ownership conflict. Refusing to add. -- Konflikt beim Schlüssel-Identitäts-Besitz. Füge nicht hinzu. -- -- -- No agent running, cannot list identities. -- Kein Agent ausgeführt, kann keine Identitäten auflisten. -- -- -- -- SearchHelpWidget -- -- Search Help -- Hilfe durchsuchen -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Suchbegriffe: [Modifikator][Feld:]["]Suchwort["] -- -- -- Every search term must match (ie, logical AND) -- Jeder Suchbegriff muss zutreffen (logisches UND) -- -- -- Modifiers -- Modifikatoren -- -- -- exclude term from results -- Ausdruck von Ergebnissen ausschließen -- -- -- match term exactly -- Exakter Ausdruck -- -- -- use regex in term -- Reguläre Ausdrücke benutzen -- -- -- Fields -- Felder -- -- -- Term Wildcards -- Platzhalter -- -- -- match anything -- Entspreche irgendwas -- -- -- match one -- Entspreche einem -- -- -- logical OR -- logisches ODER -- -- -- Examples -- Beispiele -- -- -- -- SearchWidget -- -- Search -- Suche -- -- -- Limit search to selected group -- Suche auf ausgewählte Gruppe beschränken -- -- -- Search Help -- Hilfe durchsuchen -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Suchen (%1) … -- -- -- Case sensitive -- Groß-/Kleinschreibung beachten -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Optionen -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeepassXC-Freedesktop.org-Secret-Service-Integration aktivieren -- -- -- General -- Allgemein -- -- -- Show notification when credentials are requested -- Benachrichtigung anzeigen, wenn Anmeldedaten angefragt werden -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Wenn der Papierkorb für diese Datenbank aktiviert ist, werden Einträge direkt in den Papierkorb verschoben. Ansonsten werden sie ohne Nachfragen gelöscht.</p><p>Sie erhalten eine Meldung, wenn irgendwelche Einträge von anderen referenziert werden.</p></body></html> -- -- -- Exposed database groups: -- Offengelegte Datenbankgruppen: -- -- -- Authorization -- Authorisierung -- -- -- These applications are currently connected: -- Diese Anwendungen sind derzeit verbunden: -- -- -- Don't confirm when entries are deleted by clients -- Nicht bestätigen, wenn Einträge von Clients gelöscht werden -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Fehler:</b> Konnte nicht mit DBus verbinden. Bitte überprüfen Sie Ihr DBus-Setup. -- -- -- <b>Warning:</b> -- <b>Warnung:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Speichern Sie die aktuellen Änderungen, um das Plugin und das Anpassen dieses Abschnitts zu aktivieren. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktiv -- -- -- Allow export -- Export aktivieren -- -- -- Allow import -- Import aktivieren -- -- -- Own certificate -- Eigenes Zertifikat -- -- -- Fingerprint: -- Fingerabdruck: -- -- -- Certificate: -- Zertifikat: -- -- -- Signer -- Unterzeichner: -- -- -- Key: -- Schlüssel: -- -- -- Generate -- Erzeugen -- -- -- Import -- Importieren -- -- -- Export -- Export -- -- -- Imported certificates -- Importierte Zertifikate -- -- -- Trust -- Vertrauen -- -- -- Ask -- Fragen -- -- -- Untrust -- Nicht vertrauen -- -- -- Remove -- Entfernen -- -- -- Path -- Pfad -- -- -- Status -- Status -- -- -- Fingerprint -- Fingerabdruck -- -- -- Certificate -- Zertifikat -- -- -- Trusted -- Vertraut -- -- -- Untrusted -- Nicht vertraut -- -- -- Unknown -- Unbekannt -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare-Schlüsseldatei -- -- -- All files -- Alle Dateien -- -- -- Select path -- Pfad auswählen -- -- -- Exporting changed certificate -- Geändertes Zertifikat exportieren -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Das exportierte Zertifikat ist nicht das selbe wie das benutzte. Soll das aktuelle Zertifikat exportiert werden? -- -- -- Signer: -- Unterzeichner: -- -- -- Allow KeeShare imports -- KeeShare-Importe erlauben -- -- -- Allow KeeShare exports -- KeeShare-Exporte erlauben -- -- -- Only show warnings and errors -- Nur Warnungen und Fehler anzeigen -- -- -- Key -- Schlüssel -- -- -- Signer name field -- Unterzeichner-Namensfeld -- -- -- Generate new certificate -- Neues Zertifikat erzeugen -- -- -- Import existing certificate -- Existierendes Zertifikat importieren -- -- -- Export own certificate -- Eigenes Zertifikat exportieren -- -- -- Known shares -- Bekannte Freigaben -- -- -- Trust selected certificate -- Ausgewähltem Zertifikat vertrauen -- -- -- Ask whether to trust the selected certificate every time -- Jedes Mal nach Vertrauen für dieses Zertifikat fragen -- -- -- Untrust selected certificate -- Ausgewähltem Zertifikat nicht vertrauen -- -- -- Remove selected certificate -- Ausgewähltes Zertifikat entfernen -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Überschreiben von signierten geteilten Containern nicht unterstützt - Export verhindert -- -- -- Could not write export container (%1) -- Export-Container (%1) kann nicht gespeichert werden -- -- -- Could not embed signature: Could not open file to write (%1) -- Signatur kann nicht eingebunden werden: Datei kann nicht zum Schreiben geöffnet werden (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Signatur kann nicht eingebunden werden: Datei kann nicht geschrieben werden (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Datenbank kann nicht eingebunden werden: Datei kann nicht zum Schreiben geöffnet werden (%1) -- -- -- Could not embed database: Could not write file (%1) -- Datenbank kann nicht eingebunden werden: Datei kann nicht geschrieben werden (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Überschreiben von nicht signierten geteilten Containern nicht unterstützt - Export verhindert -- -- -- Could not write export container -- Export-Container kann nicht gespeichert werden -- -- -- Unexpected export error occurred -- Unerwarteter Fehler beim Export -- -- -- -- ShareImport -- -- Import from container without signature -- Von Container ohne Signatur importieren -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Die Quelle des geteilten Containers kann wegen einer fehlenden Unterschrift nicht verifiziert werden. Soll wirklich aus %1 importiert werden? -- -- -- Import from container with certificate -- Von Container mit Zertifikat importieren -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Möchten Sie %1 mit dem Fingerabdruck %2 von %3 vertrauen? {1 ?} {2 ?} -- -- -- Not this time -- Nicht diesmal -- -- -- Never -- Nie -- -- -- Always -- Immer -- -- -- Just this time -- Nur diesmal -- -- -- Signed share container are not supported - import prevented -- Unterzeichnete geteilte Container werden nicht unterstützt - Import verhindert -- -- -- File is not readable -- Datei ist nicht lesbar -- -- -- Invalid sharing container -- Ungültiger geteilter Container -- -- -- Untrusted import prevented -- Unvertrauter Import verhindet -- -- -- Successful signed import -- Erfolgreich signierter Import -- -- -- Unsigned share container are not supported - import prevented -- Nicht signierte geteilte Container werden nicht unterstützt - Import verhindert -- -- -- Successful unsigned import -- Erfolgreich signierter Import -- -- -- File does not exist -- Datei existiert nicht -- -- -- Unknown share container type -- Unbekannter geteilter Containertyp -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import von %1 fehlgeschlagen (%2) -- -- -- Import from %1 successful (%2) -- Import von %1 erfolgreich (%2) -- -- -- Imported from %1 -- Importiert aus %1 -- -- -- Export to %1 failed (%2) -- Export in %1 fehlgeschlagen (%2) -- -- -- Export to %1 successful (%2) -- Export in %1 erfolgreich (%2) -- -- -- Export to %1 -- Export in %1 -- -- -- Multiple import source path to %1 in %2 -- Multipler Import-Quellpfad zu %1 in %2 -- -- -- Conflicting export target path %1 in %2 -- Konflikt beim Export-Zielpfad %1 in %2 -- -- -- -- TotpDialog -- -- Timed Password -- Zeitbasiertes Passwort -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopieren -- -- -- Expires in <b>%n</b> second(s) -- Läuft in <b>%n</b> Sekunde(n) abLäuft in <b>%n</b> Sekunde(n) ab -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopieren -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Anmerkung: Diese speziellen TOTP-Einstellungen könnten nicht mit anderen Authentifikatoren funktionieren. -- -- -- There was an error creating the QR code. -- QR-Code konnte nicht erstellt werden. -- -- -- Closing in %1 seconds. -- Wird in %1 Sekunde(n) geschlossen. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP einrichten -- -- -- Default RFC 6238 token settings -- RFC 6238-Token-Standardeinstellungen -- -- -- Steam token settings -- Steam-Tokeneinstellungen -- -- -- Use custom settings -- Verwende eigene Einstellungen -- -- -- Custom Settings -- Eigene Einstellungen -- -- -- Time step: -- Zeitschritt: -- -- -- sec -- Seconds -- sek -- -- -- Code size: -- Codelänge: -- -- -- Secret Key: -- Geheimer Schlüssel: -- -- -- Secret key must be in Base32 format -- Der geheime Schlüssel muss im Base32-Format vorliegen. -- -- -- Secret key field -- Feld für geheimen Schlüssel -- -- -- Algorithm: -- Algorithmus: -- -- -- Time step field -- Zeitschritt-Feld -- -- -- digits -- Ziffern -- -- -- Invalid TOTP Secret -- Ungültiges Einmalpasswort (TOTP) -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Sie haben einen ungültigen geheimen Schlüssel angegeben. Der Schlüssel muss im Base32-Format sein. Beispiel: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Löschen der TOTP-Einstellungen bestätigen -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Möchten Sie die TOTP-Einstellungen für diesen Eintrag wirklich löschen? -- -- -- -- URLEdit -- -- Invalid URL -- Ungültige URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Nach Updates suchen -- -- -- Checking for updates... -- Nach Updates suchen ... -- -- -- Close -- Schließen -- -- -- Update Error! -- Fehler beim Update -- -- -- An error occurred in retrieving update information. -- Bei der Updatesuche ist ein Fehler aufgetreten -- -- -- Please try again later. -- Bitte später noch einmal probieren. -- -- -- Software Update -- Softwareupdate -- -- -- A new version of KeePassXC is available! -- Eine neue Version von KeePassXC ist verfügbar! -- -- -- KeePassXC %1 is now available — you have %2. -- KeepassXC %1 ist jetzt verfügbar — Sie haben %2. -- -- -- Download it at keepassxc.org -- Herunterladen auf keepassxc.org -- -- -- You're up-to-date! -- Version ist aktuell -- -- -- KeePassXC %1 is currently the newest version available -- Version %1 ist die aktuellste Version. -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Speichern Sie Ihre Passwörter sicher in einer KeePassXC-Datenbank -- -- -- Create new database -- Neue Datenbank erstellen -- -- -- Open existing database -- Existierende Datenbank öffnen -- -- -- Import from KeePass 1 -- Aus KeePass 1 importieren -- -- -- Import from CSV -- Aus CSV importieren -- -- -- Recent databases -- Zuletzt verwendete Datenbanken -- -- -- Welcome to KeePassXC %1 -- Willkommen bei KeePassXC %1 -- -- -- Import from 1Password -- Von 1Password importieren -- -- -- Open a recent database -- Kürzlich verwendete Datenbank öffnen -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Konfigurierter Slot - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Challenge-Response - Slot %3 - %4 -- -- -- Press -- Aktiver Button -- -- -- Passive -- Passiv -- -- -- %1 Invalid slot specified - %2 -- %1 Ungültiger Slot spezifiziert - %2 -- -- -- The YubiKey interface has not been initialized. -- Das YubiKey-Interface wurde nicht initialisiert. -- -- -- Hardware key is currently in use. -- Der Hardwareschlüssel wird gerade verwendet. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Hardwareschlüssel mit Seriennummer %1 konnte nicht gefunden werden. Bitte schließen Sie ihn an, um fortzufahren. -- -- -- Hardware key timed out waiting for user interaction. -- Der Hardwareschlüssel hatte eine Zeitüberschreitung beim Warten auf Nutzerinteraktion. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Beim Zugriff auf den Hardwareschlüssel ist ein USB-Fehler aufgetreten: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Abschluss von Challenge-Response ist fehlgeschlagen, der spezifische Fehler war: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Neu laden -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Ein <a href="https://www.yubico.com/">YubiKey</a> kann für zusätzliche Sicherheit sorgen.</p><p>Der YubiKey muss in einem Slot das Verfahren <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Reponse</a> gesetzt haben.</p> -- -- -- Refresh hardware tokens -- Hardware-Token aktualisieren -- -- -- Hardware key slot selection -- Auswahl des Hardwareschlüssel-Slots -- -- -- Could not find any hardware keys! -- Konnte keine Hardwareschlüssel finden! -- -- -- Selected hardware key slot does not support challenge-response! -- Ausgewählter Hardwareschlüssel-Slot unterstützt nicht Challenge-Response! -- -- -- Detecting hardware keys… -- Hardwareschlüssel werden erkannt… -- -- -- No hardware keys detected -- Keine Hardwareschlüssel erkannt -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en_GB.ts keepassxc-2.6.4-patched/share/translations/keepassx_en_GB.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_en_GB.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_en_GB.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7860 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- About KeePassXC -- -- -- About -- About -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- -- -- Contributors -- Contributors -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- -- -- Debug Info -- Debug Info -- -- -- Include the following information whenever you report a bug: -- Include the following information whenever you report a bug: -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Project Maintainers: -- Project Maintainers: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Use OpenSSH for Windows instead of Pageant -- -- -- Enable SSH Agent integration -- Enable SSH Agent integration -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK value -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK override -- -- -- (empty) -- (empty) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- SSH Agent connection is working! -- SSH Agent connection is working! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Application Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Icon only -- Icon only -- -- -- Text only -- Text only -- -- -- Text beside icon -- Text beside icon -- -- -- Text under icon -- Text under icon -- -- -- Follow style -- Follow style -- -- -- Reset Settings? -- Reset Settings? -- -- -- Are you sure you want to reset all general and security settings to default? -- Are you sure you want to reset all general and security settings to default? -- -- -- Monochrome (light) -- Monochrome (light) -- -- -- Monochrome (dark) -- Monochrome (dark) -- -- -- Colorful -- Colourful -- -- -- You must restart the application to set the new language. Would you like to restart now? -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Basic Settings -- -- -- Startup -- Startup -- -- -- Start only a single instance of KeePassXC -- Start only a single instance of KeePassXC -- -- -- Minimize window at application startup -- Minimise window at application startup -- -- -- File Management -- File Management -- -- -- Backup database file before saving -- Backup database file before saving -- -- -- Automatically save after every change -- Automatically save after every change -- -- -- Automatically reload the database when modified externally -- Automatically reload the database when modified externally -- -- -- Entry Management -- Entry Management -- -- -- Use group icon on entry creation -- Use group icon on entry creation -- -- -- Minimize instead of app exit -- Minimise instead of app exit -- -- -- Show a system tray icon -- Show a system tray icon -- -- -- Hide window to system tray when minimized -- Hide window to system tray when minimised -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- Use entry title to match windows for global Auto-Type -- -- -- Use entry URL to match windows for global Auto-Type -- Use entry URL to match windows for global Auto-Type -- -- -- Always ask before performing Auto-Type -- Always ask before performing Auto-Type -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Movable toolbar -- -- -- Remember previously used databases -- Remember previously used databases -- -- -- Load previously open databases on startup -- Load previously open databases on startup -- -- -- Remember database key files and security dongles -- Remember database key files and security dongles -- -- -- Check for updates at application startup once per week -- Check for updates at application startup once per week -- -- -- Include beta releases when checking for updates -- Include beta releases when checking for updates -- -- -- Language: -- Language: -- -- -- (restart program to activate) -- (restart program to activate) -- -- -- Minimize window after unlocking database -- Minimise window after unlocking database -- -- -- Minimize when opening a URL -- Minimise when opening a URL -- -- -- Hide window when copying to clipboard -- Hide window when copying to clipboard -- -- -- Minimize -- Minimise -- -- -- Drop to background -- Drop to background -- -- -- Favicon download timeout: -- Favicon download timeout: -- -- -- Website icon download timeout in seconds -- Website icon download timeout in seconds -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- Toolbar button style -- -- -- Language selection -- Language selection -- -- -- Global auto-type shortcut -- Global auto-type shortcut -- -- -- Auto-type character typing delay milliseconds -- Auto-type character typing delay milliseconds -- -- -- Auto-type start delay milliseconds -- Auto-type start delay milliseconds -- -- -- Automatically launch KeePassXC at system startup -- Automatically launch KeePassXC at system startup -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- User Interface -- User Interface -- -- -- Toolbar button style: -- Toolbar button style: -- -- -- Use monospaced font for notes -- Use monospaced font for notes -- -- -- Tray icon type: -- Tray icon type: -- -- -- Reset settings to default… -- Reset settings to default… -- -- -- Auto-Type typing delay: -- Auto-Type typing delay: -- -- -- Global Auto-Type shortcut: -- Global Auto-Type shortcut: -- -- -- Auto-Type start delay: -- Auto-Type start delay: -- -- -- Automatically save when locking database -- Automatically save when locking database -- -- -- Automatically save non-data changes when locking database -- Automatically save non-data changes when locking database -- -- -- Tray icon type -- Tray icon type -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeouts -- -- -- Clear clipboard after -- Clear clipboard after -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Lock databases after inactivity of -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Forget TouchID after inactivity of -- -- -- Convenience -- Convenience -- -- -- Lock databases when session is locked or lid is closed -- Lock databases when session is locked or lid is closed -- -- -- Forget TouchID when session is locked or lid is closed -- Forget TouchID when session is locked or lid is closed -- -- -- Lock databases after minimizing the window -- Lock databases after minimising the window -- -- -- Re-lock previously locked database after performing Auto-Type -- Re-lock previously locked database after performing Auto-Type -- -- -- Hide passwords in the entry preview panel -- Hide passwords in the entry preview panel -- -- -- Hide entry notes by default -- Hide entry notes by default -- -- -- Privacy -- Privacy -- -- -- Use DuckDuckGo service to download website icons -- Use DuckDuckGo service to download website icons -- -- -- Clipboard clear seconds -- Clipboard clear seconds -- -- -- Touch ID inactivity reset -- Touch ID inactivity reset -- -- -- Database lock timeout seconds -- Database lock timeout seconds -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Clear search query after -- -- -- Require password repeat when it is visible -- Require password repeat when it is visible -- -- -- Hide passwords when editing them -- Hide passwords when editing them -- -- -- Use placeholder for empty password fields -- Use placeholder for empty password fields -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Couldn't find an entry that matches the window title: -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- The Syntax of your Auto-Type statement is incorrect! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- -- -- Permission Required -- Permission Required -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Default sequence -- Default sequence -- -- -- -- AutoTypeMatchModel -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Sequence -- Sequence -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copy &username -- -- -- Copy &password -- Copy &password -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permission Required -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- Select entry to Auto-Type: -- -- -- Search... -- Search... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Browser Access Request -- -- -- %1 is requesting access to the following entries: -- %1 is requesting access to the following entries: -- -- -- Remember access to checked entries -- Remember access to checked entries -- -- -- Remember -- Remember -- -- -- Allow access to entries -- Allow access to entries -- -- -- Allow Selected -- Allow Selected -- -- -- Deny All -- Deny All -- -- -- Disable for this site -- Disable for this site -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Save Entry -- -- -- Ok -- Ok -- -- -- Cancel -- Cancel -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- You have multiple databases open. --Please select the correct database for saving credentials. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: New key association request -- -- -- Save and allow access -- Save and allow access -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Overwrite existing key? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- -- -- KeePassXC: Update Entry -- KeePassXC: Update Entry -- -- -- Do you want to update the information in %1 - %2? -- Do you want to update the information in %1 - %2? -- -- -- Abort -- Abort -- -- -- Converting attributes to custom data… -- Converting attributes to custom data… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Converted KeePassHTTP attributes -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- Successfully moved %n keys to custom data. -- Successfully moved %n key to custom data.Successfully moved %n keys to custom data. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: No entry with KeePassHTTP attributes found! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- The active database does not contain an entry with KeePassHTTP attributes. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Legacy browser integration settings detected -- -- -- KeePassXC: Create a new group -- KeePassXC: Create a new group -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- This is required for accessing your databases with KeePassXC-Browser -- -- -- Enable browser integration -- Enable browser integration -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- Browsers installed as snaps are currently not supported. -- -- -- Enable integration for these browsers: -- Enable integration for these browsers: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Show a notification when credentials are requested -- -- -- Request to unlock the database if it is locked -- Request to unlock the database if it is locked -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Only entries with the same scheme (http://, https://, ...) are returned. -- -- -- Match URL scheme (e.g., https://...) -- Match URL scheme (e.g., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- -- -- Return only best-matching credentials -- Return only best-matching credentials -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Advanced -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Do not ask permission for HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatically creating or updating string fields is not supported. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Use a custom proxy location if you installed a proxy manually. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- Toolbar button style -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- Please see special instructions for browser extension use below -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Warning:</b> The following options can be dangerous! -- -- -- Executable Files -- Executable Files -- -- -- All Files -- All Files -- -- -- Select custom proxy location -- Select custom proxy location -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Clone Options -- -- -- Append ' - Clone' to title -- Append ' - Clone' to title -- -- -- Replace username and password with references -- Replace username and password with references -- -- -- Copy history -- Copy history -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Import CSV fields -- -- -- filename -- filename -- -- -- size, rows, columns -- size, rows, columns -- -- -- Encoding -- Encoding -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Text is qualified by -- -- -- Fields are separated by -- Fields are separated by -- -- -- Comments start with -- Comments start with -- -- -- Consider '\' an escape character -- Consider '\' an escape character -- -- -- Preview -- Preview -- -- -- Imported from CSV file -- Imported from CSV file -- -- -- Original data: -- Original data: -- -- -- Error -- Error -- -- -- Error(s) detected in CSV file! -- Error(s) detected in CSV file! -- -- -- [%n more message(s) skipped] -- [%n more message skipped][%n more messages skipped] -- -- -- CSV import: writer has errors: --%1 -- CSV import: writer has errors: --%1 -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- -- -- -- Password -- Password -- -- -- Created -- Created -- -- -- Notes -- Notes -- -- -- Title -- Title -- -- -- Group -- Group -- -- -- URL -- URL -- -- -- Username -- Username -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n column%n columns -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n bytes -- -- -- %n row(s) -- %n row%n rows -- -- -- -- Database -- -- File %1 does not exist. -- File %1 does not exist. -- -- -- Unable to open file %1. -- Unable to open file %1. -- -- -- Error while reading the database: %1 -- Error while reading the database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- File cannot be written as it is opened in read-only mode. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Key not transformed. This is a bug, please report it to the developers! -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- Recycle Bin -- -- -- Passwords -- Root group name -- Passwords -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- Could not save, database has not been initialised! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Unlock Database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Key File: -- -- -- Refresh -- Refresh -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- All files -- All files -- -- -- Key files -- Key files -- -- -- Select key file -- Select key file -- -- -- Failed to open key file: %1 -- -- -- -- Unlock KeePassXC Database -- -- -- -- Enter Password: -- -- -- -- Password field -- -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Browse... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Passwords -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Advanced Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Encryption Settings -- Encryption Settings -- -- -- Browser Integration -- Browser Integration -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser settings -- -- -- Stored keys -- Stored keys -- -- -- Remove -- Remove -- -- -- Delete the selected key? -- Delete the selected key? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Enable Browser Integration to access these settings. -- Enable Browser Integration to access these settings. -- -- -- Disconnect all browsers -- Disconnect all browsers -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- KeePassXC: No keys found -- KeePassXC: No keys found -- -- -- No shared encryption keys found in KeePassXC settings. -- No shared encryption keys found in KeePassXC settings. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Removed keys from database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. -- -- -- Forget all site-specific settings on entries -- Forget all site-specific settings on entries -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- Removing stored permissions… -- Removing stored permissions… -- -- -- Abort -- Abort -- -- -- KeePassXC: Removed permissions -- KeePassXC: Removed permissions -- -- -- Successfully removed permissions from %n entry(s). -- Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: No entry with permissions found! -- -- -- The active database does not contain an entry with permissions. -- The active database does not contain an entry with permissions. -- -- -- Move KeePassHTTP attributes to custom data -- Move KeePassHTTP attributes to custom data -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Created -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Add additional protection... -- -- -- No password set -- No password set -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- Continue without password -- -- -- -- No encryption key added -- No encryption key added -- -- -- You must add at least one encryption key to secure your database! -- You must add at least one encryption key to secure your database! -- -- -- Unknown error -- Unknown error -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Encryption Algorithm: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (default) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Key Derivation Function: -- -- -- Transform rounds: -- Transform rounds: -- -- -- Memory Usage: -- Memory Usage: -- -- -- Parallelism: -- Parallelism: -- -- -- Decryption Time: -- Decryption Time: -- -- -- ?? s -- ?? s -- -- -- Change -- Change -- -- -- Higher values offer more protection, but opening the database will take longer. -- Higher values offer more protection, but opening the database will take longer. -- -- -- Database format: -- Database format: -- -- -- This is only important if you need to use your database with other programs. -- This is only important if you need to use your database with other programs. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recommended) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- unchanged -- -- -- Number of rounds too high -- Key transformation rounds -- Number of rounds too high -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- Understood, keep number -- Understood, keep number -- -- -- Cancel -- Cancel -- -- -- Number of rounds too low -- Key transformation rounds -- Number of rounds too low -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- KDF unchanged -- KDF unchanged -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- thread threads -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- -- -- -- Database format -- -- -- -- Encryption algorithm -- -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- -- -- -- Parallelism -- Parallelism -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database Meta Data -- -- -- Database name: -- Database name: -- -- -- Database description: -- Database description: -- -- -- Default username: -- Default username: -- -- -- History Settings -- History Settings -- -- -- Max. history items: -- Max. history items: -- -- -- Max. history size: -- Max. history size: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Use recycle bin -- -- -- Additional Database Settings -- Additional Database Settings -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- Maximum size of history per entry -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Sharing -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Type -- -- -- Path -- Path -- -- -- Last Signer -- Last Signer -- -- -- Certificates -- Certificates -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Database Name: -- -- -- Description: -- Description: -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- All files -- All files -- -- -- Open database -- Open database -- -- -- CSV file -- CSV file -- -- -- Merge database -- Merge database -- -- -- Open KeePass 1 database -- Open KeePass 1 database -- -- -- KeePass 1 database -- KeePass 1 database -- -- -- Export database to CSV file -- Export database to CSV file -- -- -- Writing the CSV file failed. -- Writing the CSV file failed. -- -- -- Database creation error -- Database creation error -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- Select CSV file -- Select CSV file -- -- -- New Database -- New Database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [New Database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Locked] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Read-only] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Searching... -- -- -- Do you really want to delete the entry "%1" for good? -- Do you really want to delete the entry "%1" for good? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Do you really want to move entry "%1" to the recycle bin? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? -- -- -- Execute command? -- Execute command? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Do you really want to execute the following command?<br><br>%1<br> -- -- -- Remember my choice -- Remember my choice -- -- -- Do you really want to delete the group "%1" for good? -- Do you really want to delete the group "%1" for good? -- -- -- No current database. -- No current database. -- -- -- No source database, nothing to do. -- No source database, nothing to do. -- -- -- Search Results (%1) -- Search Results (%1) -- -- -- No Results -- No Results -- -- -- File has changed -- File has changed -- -- -- The database file has changed. Do you want to load the changes? -- The database file has changed. Do you want to load the changes? -- -- -- Merge Request -- Merge Request -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- -- -- Empty recycle bin? -- Empty recycle bin? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Are you sure you want to permanently delete everything from your recycle bin? -- -- -- Do you really want to delete %n entry(s) for good? -- Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? -- -- -- Delete entry(s)? -- Delete entry?Delete entries? -- -- -- Move entry(s) to recycle bin? -- Move entry to recycle bin?Move entries to recycle bin? -- -- -- Lock Database? -- Lock Database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- You are editing an entry. Discard changes and lock anyway? -- -- -- "%1" was modified. --Save changes? -- "%1" was modified. --Save changes? -- -- -- Database was modified. --Save changes? -- Database was modified. --Save changes? -- -- -- Save changes? -- Save changes? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- Disable safe saves? -- Disable safe saves? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- Passwords -- Passwords -- -- -- Save database as -- Save database as -- -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- Replace references to entry? -- Replace references to entry? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- Delete group -- Delete group -- -- -- Move group to recycle bin? -- Move group to recycle bin? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Do you really want to move the group "%1" to the recycle bin? -- -- -- Successfully merged the database files. -- Successfully merged the database files. -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Shared group... -- Shared group... -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Entry -- -- -- Advanced -- Advanced -- -- -- Icon -- Icon -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- Properties -- -- -- History -- History -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- n/a -- -- -- (encrypted) -- (encrypted) -- -- -- Select private key -- Select private key -- -- -- Entry history -- Entry history -- -- -- Add entry -- Add entry -- -- -- Edit entry -- Edit entry -- -- -- New attribute -- New attribute -- -- -- Are you sure you want to remove this attribute? -- Are you sure you want to remove this attribute? -- -- -- Tomorrow -- Tomorrow -- -- -- %n week(s) -- %n week%n weeks -- -- -- %n month(s) -- %n month%n months -- -- -- Entry updated successfully. -- Entry updated successfully. -- -- -- New attribute %1 -- New attribute %1 -- -- -- %n year(s) -- %n year%n years -- -- -- Confirm Removal -- Confirm Removal -- -- -- Browser Integration -- Browser Integration -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- Reveal -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Additional attributes -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit Name -- Edit Name -- -- -- Protect -- Protect -- -- -- Reveal -- Reveal -- -- -- Attachments -- Attachments -- -- -- Foreground Color: -- Foreground Colour: -- -- -- Background Color: -- Background Colour: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- Foreground colour selection -- -- -- Background color selection -- Background colour selection -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Enable Auto-Type for this entry -- -- -- Window Associations -- Window Associations -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Window title: -- -- -- Use a specific sequence for this association: -- Use a specific sequence for this association: -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit -- -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Show -- -- -- Restore -- Restore -- -- -- Delete -- Delete -- -- -- Delete all -- Delete all -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Password: -- -- -- Title: -- Title: -- -- -- Presets -- Presets -- -- -- Toggle the checkbox to reveal the notes section. -- Toggle the checkbox to reveal the notes section. -- -- -- Username: -- Username: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- -- -- -- Toggle notes visible -- -- -- -- Expiration field -- Expiry field -- -- -- Expiration Presets -- Expiry Presets -- -- -- Expiration presets -- Expiry presets -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- Toggle expiry -- -- -- Notes: -- -- -- -- https://example.com -- -- -- -- Expires: -- Expires: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Form -- -- -- Remove key from agent after -- Remove key from agent after -- -- -- seconds -- seconds -- -- -- Fingerprint -- Fingerprint -- -- -- Remove key from agent when database is closed/locked -- Remove key from agent when database is closed/locked -- -- -- Public key -- Public key -- -- -- Add key to agent when database is opened/unlocked -- Add key to agent when database is opened/unlocked -- -- -- Comment -- Comment -- -- -- Decrypt -- Decrypt -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Private key -- Private key -- -- -- External file -- External file -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Attachment -- Attachment -- -- -- Add to agent -- Add to agent -- -- -- Remove from agent -- Remove from agent -- -- -- Require user confirmation when this key is used -- Require user confirmation when this key is used -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Group -- -- -- Icon -- Icon -- -- -- Properties -- Properties -- -- -- Add group -- Add group -- -- -- Edit group -- Edit group -- -- -- Enable -- Enable -- -- -- Disable -- Disable -- -- -- Inherit from parent group (%1) -- Inherit from parent group (%1) -- -- -- Entry has unsaved changes -- Entry has unsaved changes -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Path: -- -- -- Password: -- Password: -- -- -- Inactive -- Inactive -- -- -- KeeShare unsigned container -- KeeShare unsigned container -- -- -- KeeShare signed container -- KeeShare signed container -- -- -- Select import source -- Select import source -- -- -- Select export target -- Select export target -- -- -- Select import/export file -- Select import/export file -- -- -- Clear -- Clear -- -- -- Import -- Import -- -- -- Export -- -- -- -- Synchronize -- Synchronise -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Browse... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- Toggle expiry -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- Expiry field -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- Expires: -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Add custom icon -- -- -- Delete custom icon -- Delete custom icon -- -- -- Download favicon -- Download favicon -- -- -- Unable to fetch favicon. -- Unable to fetch favicon. -- -- -- Images -- Images -- -- -- All files -- All files -- -- -- Confirm Delete -- Confirm Delete -- -- -- Select Image(s) -- Select Image(s) -- -- -- Successfully loaded %1 of %n icon(s) -- Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons -- -- -- No icons were loaded -- No icons were loaded -- -- -- %n icon(s) already exist in the database -- %n icon already exist in the database%n icons already exist in the database -- -- -- The following icon(s) failed: -- The following icon failed:The following icons failed: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Created: -- -- -- Modified: -- Modified: -- -- -- Accessed: -- Accessed: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Plugin Data -- -- -- Remove -- Remove -- -- -- Delete plugin data? -- Delete plugin data? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Name -- -- -- Size -- Size -- -- -- -- EntryAttachmentsWidget -- -- Form -- Form -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Open -- Open -- -- -- Save -- Save -- -- -- Select files -- Select files -- -- -- Are you sure you want to remove %n attachment(s)? -- Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? -- -- -- Save attachments -- Save attachments -- -- -- Unable to create directory: --%1 -- Unable to create directory: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- -- -- Confirm overwrite -- Confirm overwrite -- -- -- Unable to save attachments: --%1 -- Unable to save attachments: --%1 -- -- -- Unable to open attachment: --%1 -- Unable to open attachment: --%1 -- -- -- Unable to open attachments: --%1 -- Unable to open attachments: --%1 -- -- -- Confirm remove -- Confirm remove -- -- -- Unable to open file(s): --%1 -- Unable to open file: --%1Unable to open files: --%1 -- -- -- Attachments -- Attachments -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Name -- -- -- -- EntryHistoryModel -- -- Last modified -- Last modified -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- Never -- Never -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Expires -- Expires -- -- -- Created -- Created -- -- -- Modified -- Modified -- -- -- Accessed -- Accessed -- -- -- Attachments -- Attachments -- -- -- Size -- Size -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- Entry expires at -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- Entry size -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Close -- -- -- General -- General -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Expiration -- Expiry -- -- -- URL -- URL -- -- -- Attributes -- Attributes -- -- -- Attachments -- Attachments -- -- -- Notes -- Notes -- -- -- Autotype -- Autotype -- -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Searching -- Searching -- -- -- Search -- Search -- -- -- Clear -- Clear -- -- -- Never -- Never -- -- -- [PROTECTED] -- [PROTECTED] -- -- -- Enabled -- Enabled -- -- -- Disabled -- Disabled -- -- -- Share -- Share -- -- -- Display current TOTP value -- -- -- -- Advanced -- Advanced -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Fit to window -- -- -- Fit to contents -- Fit to contents -- -- -- Reset to defaults -- Reset to defaults -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Group -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- None -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- -- -- -- Unknown -- Unknown executable path -- -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [empty] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- Cancel -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Close -- -- -- URL -- URL -- -- -- Status -- -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- -- -- -- Ok -- Ok -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &Close -- -- -- Close message -- Close message -- -- -- -- Kdbx3Reader -- -- missing database headers -- missing database headers -- -- -- Header doesn't match hash -- Header doesn't match hash -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- missing database headers -- -- -- Invalid header checksum size -- Invalid header checksum size -- -- -- Header SHA256 mismatch -- Header SHA256 mismatch -- -- -- Unknown cipher -- Unknown cipher -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Failed to open buffer for KDF parameters in header -- Failed to open buffer for KDF parameters in header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- Legacy header fields found in KDBX4 file. -- Legacy header fields found in KDBX4 file. -- -- -- Invalid inner header id size -- Invalid inner header id size -- -- -- Invalid inner header field length -- Invalid inner header field length -- -- -- Invalid inner header binary size -- Invalid inner header binary size -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Unsupported KeePass variant map version. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name data -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry value length -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Invalid variant map entry value data -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Bool entry value length -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int32 entry value length -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt32 entry value length -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int64 entry value length -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt64 entry value length -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry type -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Invalid variant map field type size -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Invalid symmetric cipher algorithm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Invalid symmetric cipher IV size. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Failed to serialise KDF parameters variant map -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Unsupported cipher -- -- -- Invalid compression flags length -- Invalid compression flags length -- -- -- Unsupported compression algorithm -- Unsupported compression algorithm -- -- -- Invalid master seed size -- Invalid master seed size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid transform rounds size -- Invalid transform rounds size -- -- -- Invalid start bytes size -- Invalid start bytes size -- -- -- Invalid random stream id size -- Invalid random stream id size -- -- -- Invalid inner random stream cipher -- Invalid inner random stream cipher -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- -- -- Unsupported KeePass 2 database version. -- Unsupported KeePass 2 database version. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Invalid cipher uuid length: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- Unable to parse UUID: %1 -- -- -- Failed to read database file. -- Failed to read database file. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML parsing failure: %1 -- -- -- No root group -- No root group -- -- -- Missing icon uuid or data -- Missing icon uuid or data -- -- -- Missing custom data key or value -- Missing custom data key or value -- -- -- Multiple group elements -- Multiple group elements -- -- -- Null group uuid -- Null group uuid -- -- -- Invalid group icon number -- Invalid group icon number -- -- -- Invalid EnableAutoType value -- Invalid EnableAutoType value -- -- -- Invalid EnableSearching value -- -- -- -- No group uuid found -- -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- -- -- -- History element in history entry -- -- -- -- No entry uuid found -- -- -- -- History element with different uuid -- -- -- -- Duplicate custom attribute found -- Duplicate custom attribute found -- -- -- Entry string key or value missing -- -- -- -- Entry binary key or value missing -- -- -- -- Auto-type association window or sequence missing -- -- -- -- Invalid bool value -- -- -- -- Invalid date time value -- -- -- -- Invalid color value -- Invalid colour value -- -- -- Invalid color rgb part -- Invalid colour rgb part -- -- -- Invalid number value -- -- -- -- Invalid uuid value -- -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- -- -- -- XML error: --%1 --Line %2, column %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- File too large to be a private key -- -- -- Failed to open private key -- Failed to open private key -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Unable to open the database. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- Unsupported encryption algorithm. -- Unsupported encryption algorithm. -- -- -- Unsupported KeePass database version. -- -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- -- -- -- Invalid number of groups -- -- -- -- Invalid number of entries -- -- -- -- Invalid content hash size -- Invalid content hash size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid number of transform rounds -- -- -- -- Unable to construct group tree -- Unable to construct group tree -- -- -- Root -- Root -- -- -- Key transformation failed -- Key transformation failed -- -- -- Invalid group field type number -- -- -- -- Invalid group field size -- Invalid group field size -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- Incorrect group expiry time field size -- -- -- Incorrect group icon field size -- -- -- -- Incorrect group level field size -- -- -- -- Invalid group field type -- -- -- -- Missing group id or level -- -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- -- -- -- Read entry field data doesn't match size -- -- -- -- Invalid entry uuid field size -- -- -- -- Invalid entry group id field size -- -- -- -- Invalid entry icon field size -- -- -- -- Invalid entry creation time field size -- -- -- -- Invalid entry modification time field size -- -- -- -- Invalid entry expiry time field size -- Invalid entry expiry time field size -- -- -- Invalid entry field type -- -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- Synchronised with %1 -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- Synchronised with -- -- -- -- KeyComponentWidget -- -- Key Component -- -- -- -- Key Component Description -- -- -- -- Cancel -- Cancel -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- -- -- -- Change %1 -- Change a key component -- -- -- -- Remove %1 -- Remove a key component -- -- -- -- %1 set, click to change or remove -- Change or remove a key component -- -- -- -- -- KeyFileEditWidget -- -- Generate -- Generate -- -- -- Key File -- -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Key files -- -- -- All files -- All files -- -- -- Create Key File... -- -- -- -- Error creating key file -- -- -- -- Unable to create key file: %1 -- -- -- -- Select a key file -- Select a key file -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Browse... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Help -- -- -- &Groups -- &Groups -- -- -- &Tools -- &Tools -- -- -- &Quit -- &Quit -- -- -- &About -- &About -- -- -- Database settings -- Database settings -- -- -- Copy username to clipboard -- Copy username to clipboard -- -- -- Copy password to clipboard -- Copy password to clipboard -- -- -- &Settings -- &Settings -- -- -- &Title -- &Title -- -- -- Copy title to clipboard -- Copy title to clipboard -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copy URL to clipboard -- -- -- &Notes -- &Notes -- -- -- Copy notes to clipboard -- Copy notes to clipboard -- -- -- Copy &TOTP -- Copy &TOTP -- -- -- E&mpty recycle bin -- E&mpty recycle bin -- -- -- Clear history -- Clear history -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Settings -- Settings -- -- -- Toggle window -- Toggle window -- -- -- Quit KeePassXC -- Quit KeePassXC -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- -- &Donate -- -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- -- -- -- Create a new database -- -- -- -- Merge from another KDBX database -- -- -- -- Add a new entry -- -- -- -- View or edit entry -- -- -- -- Add a new group -- -- -- -- Perform &Auto-Type -- -- -- -- Open &URL -- -- -- -- Import a KeePass 1 database -- -- -- -- Import a CSV file -- -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- -- -- -- Would you like KeePassXC to check for updates on startup? -- -- -- -- You can always check for updates manually from the application menu. -- -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Show TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Hide Usernames -- -- -- Hide Passwords -- Hide Passwords -- -- -- -- ManageDatabase -- -- Database settings -- Database settings -- -- -- Edit database settings -- -- -- -- Unlock database -- Unlock database -- -- -- Unlock database to show more information -- -- -- -- Lock database -- Lock database -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- Advanced Settings -- Advanced Settings -- -- -- Simple Settings -- -- -- -- Encryption Settings -- Encryption Settings -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Encryption Settings -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- -- -- -- PEM boundary mismatch -- -- -- -- Base64 decoding failed -- -- -- -- Key file way too small. -- -- -- -- Key file magic header id invalid -- -- -- -- Found zero keys -- -- -- -- Failed to read public key. -- Failed to read public key. -- -- -- Corrupted key file, reading private key failed -- -- -- -- No private key payload to decrypt -- -- -- -- Trying to run KDF without cipher -- -- -- -- Passphrase is required to decrypt this key -- Passphrase is required to decrypt this key -- -- -- Key derivation failed, key file corrupted? -- -- -- -- Decryption failed, wrong passphrase? -- -- -- -- Unexpected EOF while reading public key -- Unexpected EOF while reading public key -- -- -- Unexpected EOF while reading private key -- Unexpected EOF while reading private key -- -- -- Can't write public key as it is empty -- -- -- -- Unexpected EOF when writing public key -- Unexpected EOF when writing public key -- -- -- Can't write private key as it is empty -- -- -- -- Unexpected EOF when writing private key -- Unexpected EOF when writing private key -- -- -- Unsupported key type: %1 -- Unsupported key type: %1 -- -- -- Unknown cipher: %1 -- Unknown cipher: %1 -- -- -- Cipher IV is too short for MD5 kdf -- -- -- -- Unknown KDF: %1 -- -- -- -- Unknown key type: %1 -- Unknown key type: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Enter password: -- -- -- Confirm password: -- -- -- -- Password -- Password -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- -- -- -- Password field -- -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- -- -- -- strength -- Password strength -- -- -- -- entropy -- -- -- -- Password -- Password -- -- -- Character Types -- Character Types -- -- -- Numbers -- -- -- -- Extended ASCII -- Extended ASCII -- -- -- Exclude look-alike characters -- Exclude look-alike characters -- -- -- Pick characters from every group -- Pick characters from every group -- -- -- &Length: -- -- -- -- Passphrase -- Passphrase -- -- -- Wordlist: -- -- -- -- Word Separator: -- -- -- -- Close -- Close -- -- -- Entropy: %1 bit -- -- -- -- Password Quality: %1 -- -- -- -- Poor -- Password quality -- -- -- -- Weak -- Password quality -- -- -- -- Good -- Password quality -- -- -- -- Excellent -- Password quality -- -- -- -- Switch to advanced mode -- -- -- -- Advanced -- Advanced -- -- -- Braces -- -- -- -- Punctuation -- -- -- -- Quotes -- -- -- -- Logograms -- -- -- -- Character set to exclude from generated password -- -- -- -- Do not include: -- -- -- -- Add non-hex letters to "do not include" list -- -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- -- -- -- -- QApplication -- -- KeeShare -- -- -- -- Statistics -- -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- Password expiry was %1 -- -- -- Password is about to expire -- Password is about to expire -- -- -- Password expires in %1 days -- Password expires in %1 days -- -- -- Password will expire soon -- Password will expire soon -- -- -- Password expires on %1 -- Password expires on %1 -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- -- -- -- Delete -- Delete -- -- -- Move -- -- -- -- Empty -- -- -- -- Remove -- Remove -- -- -- Skip -- -- -- -- Disable -- Disable -- -- -- Merge -- -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- Database not opened -- -- -- Database hash not available -- Database hash not available -- -- -- Client public key not received -- Client public key not received -- -- -- Cannot decrypt message -- Cannot decrypt message -- -- -- Action cancelled or denied -- Action cancelled or denied -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- Encryption key is not recognised -- -- -- Incorrect action -- -- -- -- Empty message received -- Empty message received -- -- -- No URL provided -- No URL provided -- -- -- No logins found -- No logins found -- -- -- Unknown error -- Unknown error -- -- -- Add a new entry to a database. -- Add a new entry to a database. -- -- -- Path of the database. -- Path of the database. -- -- -- Key file of the database. -- Key file of the database. -- -- -- path -- -- -- -- Username for the entry. -- Username for the entry. -- -- -- username -- -- -- -- URL for the entry. -- URL for the entry. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Prompt for the entry's password. -- -- -- Generate a password for the entry. -- Generate a password for the entry. -- -- -- length -- -- -- -- Path of the entry to add. -- Path of the entry to add. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- -- -- -- Timeout in seconds before clearing the clipboard. -- Timeout in seconds before clearing the clipboard. -- -- -- Edit an entry. -- Edit an entry. -- -- -- Title for the entry. -- Title for the entry. -- -- -- title -- -- -- -- Path of the entry to edit. -- Path of the entry to edit. -- -- -- Estimate the entropy of a password. -- Estimate the entropy of a password. -- -- -- Password for which to estimate the entropy. -- Password for which to estimate the entropy. -- -- -- Perform advanced analysis on the password. -- Perform advanced analysis on the password. -- -- -- -- --Available commands: -- -- -- -- -- Name of the command to execute. -- Name of the command to execute. -- -- -- List database entries. -- List database entries. -- -- -- Path of the group to list. Default is / -- -- -- -- Find entries quickly. -- Find entries quickly. -- -- -- Search term. -- Search term. -- -- -- Merge two databases. -- Merge two databases. -- -- -- Path of the database to merge from. -- Path of the database to merge from. -- -- -- Use the same credentials for both database files. -- Use the same credentials for both database files. -- -- -- Key file of the database to merge from. -- Key file of the database to merge from. -- -- -- Show an entry's information. -- Show an entry's information. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- -- -- attribute -- -- -- -- Name of the entry to show. -- Name of the entry to show. -- -- -- NULL device -- -- -- -- error reading from device -- -- -- -- malformed string -- -- -- -- missing closing quote -- -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Last Modified -- -- -- -- Created -- Created -- -- -- Browser Integration -- Browser Integration -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- Generate a new random diceware passphrase. -- -- -- Word count for the diceware passphrase. -- Word count for the diceware passphrase. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- -- Generate a new random password. -- Generate a new random password. -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- -- -- -- Use lowercase characters -- -- -- -- Use uppercase characters -- -- -- -- Use special characters -- -- -- -- Use extended ASCII -- -- -- -- Exclude character set -- -- -- -- chars -- -- -- -- Exclude similar looking characters -- -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- -- -- -- %1: (row, col) %2,%3 -- -- -- -- AES-KDF (KDBX 4) -- -- -- -- AES-KDF (KDBX 3.1) -- -- -- -- Invalid Settings -- TOTP -- -- -- -- Invalid Key -- TOTP -- -- -- -- Message encryption failed. -- -- -- -- No groups found -- -- -- -- Create a new database. -- -- -- -- File %1 already exists. -- -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- Path of the entry to remove. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- The lock file could not be created. Single-instance mode disabled. -- The lock file could not be created. Single-instance mode disabled. -- -- -- KeePassXC - cross-platform password manager -- -- -- -- filenames of the password databases to open (*.kdbx) -- -- -- -- path to a custom config file -- -- -- -- key file of the database -- -- -- -- read password of the database from stdin -- -- -- -- Another instance of KeePassXC is already running. -- Another instance of KeePassXC is already running. -- -- -- Fatal error while testing the cryptographic functions. -- Fatal error while testing the cryptographic functions. -- -- -- KeePassXC - Error -- -- -- -- Database password: -- -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Version %1 -- -- -- Build Type: %1 -- Build Type: %1 -- -- -- Revision: %1 -- Revision: %1 -- -- -- Distribution: %1 -- Distribution: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (signed and unsigned sharing) -- -- -- KeeShare (only signed sharing) -- KeeShare (only signed sharing) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (only unsigned sharing) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- None -- -- -- Enabled extensions: -- Enabled extensions: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- -- -- -- Error writing to underlying device: -- -- -- -- Error opening underlying device: -- -- -- -- Error reading data from underlying device: -- -- -- -- Internal zlib error when decompressing: -- -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- -- -- -- Internal zlib error: -- -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Name -- -- -- Value -- Value -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- -- -- -- Description -- -- -- -- Location -- -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Recommend using long, randomised passwords with a rating of 'good' or 'excellent'. -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- -- -- -- exclude term from results -- -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- -- -- -- -- SearchWidget -- -- Search -- Search -- -- -- Limit search to selected group -- Limit search to selected group -- -- -- Search Help -- -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- -- -- -- Case sensitive -- -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- General -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- Authorisation -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- -- -- -- Allow export -- -- -- -- Allow import -- -- -- -- Own certificate -- -- -- -- Fingerprint: -- -- -- -- Certificate: -- -- -- -- Signer -- -- -- -- Key: -- -- -- -- Generate -- Generate -- -- -- Import -- Import -- -- -- Export -- -- -- -- Imported certificates -- -- -- -- Trust -- -- -- -- Ask -- -- -- -- Untrust -- -- -- -- Remove -- Remove -- -- -- Path -- Path -- -- -- Status -- -- -- -- Fingerprint -- Fingerprint -- -- -- Certificate -- -- -- -- Trusted -- -- -- -- Untrusted -- -- -- -- Unknown -- -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- -- -- -- All files -- All files -- -- -- Select path -- -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Key -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- -- -- -- Never -- Never -- -- -- Always -- -- -- -- Just this time -- -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- -- -- -- Import from %1 successful (%2) -- -- -- -- Imported from %1 -- -- -- -- Export to %1 failed (%2) -- -- -- -- Export to %1 successful (%2) -- -- -- -- Export to %1 -- -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- -- -- -- 000000 -- -- -- -- Copy -- Copy -- -- -- Expires in <b>%n</b> second(s) -- Expires in <b>%n</b> second(s)Expires in <b>%n</b> second(s) -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copy -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- -- -- -- There was an error creating the QR code. -- -- -- -- Closing in %1 seconds. -- -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- -- -- -- Default RFC 6238 token settings -- Default RFC 6238 token settings -- -- -- Steam token settings -- Steam token settings -- -- -- Use custom settings -- Use custom settings -- -- -- Custom Settings -- -- -- -- Time step: -- -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- -- -- -- Checking for updates... -- -- -- -- Close -- Close -- -- -- Update Error! -- -- -- -- An error occurred in retrieving update information. -- -- -- -- Please try again later. -- -- -- -- Software Update -- -- -- -- A new version of KeePassXC is available! -- -- -- -- KeePassXC %1 is now available — you have %2. -- -- -- -- Download it at keepassxc.org -- -- -- -- You're up-to-date! -- -- -- -- KeePassXC %1 is currently the newest version available -- -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Start storing your passwords securely in a KeePassXC database -- -- -- Create new database -- Create new database -- -- -- Open existing database -- Open existing database -- -- -- Import from KeePass 1 -- -- -- -- Import from CSV -- Import from CSV -- -- -- Recent databases -- Recent databases -- -- -- Welcome to KeePassXC %1 -- Welcome to KeePassXC %1 -- -- -- Import from 1Password -- -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- -- -- -- Passive -- -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- The YubiKey interface has not been initialised. -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Refresh -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en.ts keepassxc-2.6.4-patched/share/translations/keepassx_en.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_en.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_en.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7940 +0,0 @@ -- -- -- -- -- AboutDialog -- -- About KeePassXC -- About KeePassXC -- -- -- About -- About -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- -- -- Contributors -- Contributors -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- -- -- Debug Info -- Debug Info -- -- -- Include the following information whenever you report a bug: -- Include the following information whenever you report a bug: -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Project Maintainers: -- Project Maintainers: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Use OpenSSH for Windows instead of Pageant -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Application Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Icon only -- Icon only -- -- -- Text only -- Text only -- -- -- Text beside icon -- Text beside icon -- -- -- Text under icon -- Text under icon -- -- -- Follow style -- Follow style -- -- -- Reset Settings? -- -- -- -- Are you sure you want to reset all general and security settings to default? -- -- -- -- Monochrome (light) -- -- -- -- Monochrome (dark) -- -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- Monochrome -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Basic Settings -- -- -- Startup -- Startup -- -- -- Start only a single instance of KeePassXC -- Start only a single instance of KeePassXC -- -- -- Minimize window at application startup -- Minimize window at application startup -- -- -- File Management -- File Management -- -- -- Backup database file before saving -- Backup database file before saving -- -- -- Automatically save after every change -- Automatically save after every change -- -- -- Automatically reload the database when modified externally -- Automatically reload the database when modified externally -- -- -- Entry Management -- Entry Management -- -- -- Use group icon on entry creation -- Use group icon on entry creation -- -- -- Minimize instead of app exit -- Minimize instead of app exit -- -- -- Show a system tray icon -- Show a system tray icon -- -- -- Hide window to system tray when minimized -- Hide window to system tray when minimized -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- Use entry title to match windows for global Auto-Type -- -- -- Use entry URL to match windows for global Auto-Type -- Use entry URL to match windows for global Auto-Type -- -- -- Always ask before performing Auto-Type -- Always ask before performing Auto-Type -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Movable toolbar -- -- -- Remember previously used databases -- -- -- -- Load previously open databases on startup -- -- -- -- Remember database key files and security dongles -- -- -- -- Check for updates at application startup once per week -- -- -- -- Include beta releases when checking for updates -- -- -- -- Language: -- -- -- -- (restart program to activate) -- -- -- -- Minimize window after unlocking database -- -- -- -- Minimize when opening a URL -- -- -- -- Hide window when copying to clipboard -- -- -- -- Minimize -- -- -- -- Drop to background -- -- -- -- Favicon download timeout: -- -- -- -- Website icon download timeout in seconds -- -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- -- -- -- Language selection -- -- -- -- Global auto-type shortcut -- -- -- -- Auto-type character typing delay milliseconds -- -- -- -- Auto-type start delay milliseconds -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeouts -- -- -- Clear clipboard after -- Clear clipboard after -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Lock databases after inactivity of -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Forget TouchID after inactivity of -- -- -- Convenience -- Convenience -- -- -- Lock databases when session is locked or lid is closed -- Lock databases when session is locked or lid is closed -- -- -- Forget TouchID when session is locked or lid is closed -- Forget TouchID when session is locked or lid is closed -- -- -- Lock databases after minimizing the window -- Lock databases after minimizing the window -- -- -- Re-lock previously locked database after performing Auto-Type -- Re-lock previously locked database after performing Auto-Type -- -- -- Hide passwords in the entry preview panel -- Hide passwords in the entry preview panel -- -- -- Hide entry notes by default -- Hide entry notes by default -- -- -- Privacy -- Privacy -- -- -- Use DuckDuckGo service to download website icons -- -- -- -- Clipboard clear seconds -- -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Couldn't find an entry that matches the window title: -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- The Syntax of your Auto-Type statement is incorrect! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Default sequence -- Default sequence -- -- -- -- AutoTypeMatchModel -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Sequence -- Sequence -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copy &username -- -- -- Copy &password -- Copy &password -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- Select entry to Auto-Type: -- -- -- Search... -- -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Save Entry -- -- -- Ok -- Ok -- -- -- Cancel -- Cancel -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- You have multiple databases open. --Please select the correct database for saving credentials. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: New key association request -- -- -- Save and allow access -- Save and allow access -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Overwrite existing key? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- -- -- KeePassXC: Update Entry -- KeePassXC: Update Entry -- -- -- Do you want to update the information in %1 - %2? -- Do you want to update the information in %1 - %2? -- -- -- Abort -- Abort -- -- -- Converting attributes to custom data… -- Converting attributes to custom data… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Converted KeePassHTTP attributes -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- Successfully moved %n keys to custom data. -- -- Successfully moved %n keys to custom data. -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: No entry with KeePassHTTP attributes found! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- The active database does not contain an entry with KeePassHTTP attributes. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Legacy browser integration settings detected -- -- -- KeePassXC: Create a new group -- -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- This is required for accessing your databases with KeePassXC-Browser -- -- -- Enable browser integration -- -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- Enable integration for these browsers: -- -- -- Vivaldi -- -- -- -- &Edge -- -- -- -- Firefox -- -- -- -- Tor Browser -- -- -- -- Brave -- -- -- -- Google Chrome -- -- -- -- Chromium -- -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Only entries with the same scheme (http://, https://, ...) are returned. -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Advanced -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- Automatically creating or updating string fields is not supported. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Use a custom proxy location if you installed a proxy manually. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Warning:</b> The following options can be dangerous! -- -- -- Executable Files -- Executable Files -- -- -- All Files -- All Files -- -- -- Select custom proxy location -- Select custom proxy location -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Clone Options -- -- -- Append ' - Clone' to title -- Append ' - Clone' to title -- -- -- Replace username and password with references -- Replace username and password with references -- -- -- Copy history -- Copy history -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Import CSV fields -- -- -- filename -- filename -- -- -- size, rows, columns -- size, rows, columns -- -- -- Encoding -- Encoding -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Text is qualified by -- -- -- Fields are separated by -- Fields are separated by -- -- -- Comments start with -- Comments start with -- -- -- Consider '\' an escape character -- Consider '\' an escape character -- -- -- Preview -- Preview -- -- -- Imported from CSV file -- Imported from CSV file -- -- -- Original data: -- Original data: -- -- -- Error -- Error -- -- -- Error(s) detected in CSV file! -- Error(s) detected in CSV file! -- -- -- [%n more message(s) skipped] -- -- [%n more message(s) skipped] -- [%n more message(s) skipped] -- -- -- -- CSV import: writer has errors: --%1 -- CSV import: writer has errors: --%1 -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- Last Modified -- -- -- Password -- Password -- -- -- Created -- Created -- -- -- Notes -- Notes -- -- -- Title -- Title -- -- -- Group -- Group -- -- -- URL -- URL -- -- -- Username -- Username -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- -- CsvParserModel -- -- %n column(s) -- -- %n column(s) -- %n column(s) -- -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- -- %n byte(s) -- %n byte(s) -- -- -- -- %n row(s) -- -- %n row(s) -- %n row(s) -- -- -- -- -- Database -- -- File %1 does not exist. -- File %1 does not exist. -- -- -- Unable to open file %1. -- Unable to open file %1. -- -- -- Error while reading the database: %1 -- Error while reading the database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- File cannot be written as it is opened in read-only mode. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- Recycle Bin -- -- -- Passwords -- Root group name -- Passwords -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Unlock Database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Key File: -- -- -- Refresh -- Refresh -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- All files -- All files -- -- -- Key files -- Key files -- -- -- Select key file -- Select key file -- -- -- Failed to open key file: %1 -- -- -- -- Unlock KeePassXC Database -- -- -- -- Enter Password: -- -- -- -- Password field -- -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Browse... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Passwords -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Advanced Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Encryption Settings -- Encryption Settings -- -- -- Browser Integration -- Browser Integration -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser settings -- -- -- Stored keys -- Stored keys -- -- -- Remove -- Remove -- -- -- Delete the selected key? -- Delete the selected key? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Enable Browser Integration to access these settings. -- Enable Browser Integration to access these settings. -- -- -- Disconnect all browsers -- Disconnect all browsers -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- KeePassXC: No keys found -- KeePassXC: No keys found -- -- -- No shared encryption keys found in KeePassXC settings. -- No shared encryption keys found in KeePassXC settings. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Removed keys from database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- Forget all site-specific settings on entries -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- Removing stored permissions… -- Removing stored permissions… -- -- -- Abort -- Abort -- -- -- KeePassXC: Removed permissions -- KeePassXC: Removed permissions -- -- -- Successfully removed permissions from %n entry(s). -- -- Successfully removed permissions from %n entry(s). -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: No entry with permissions found! -- -- -- The active database does not contain an entry with permissions. -- The active database does not contain an entry with permissions. -- -- -- Move KeePassHTTP attributes to custom data -- Move KeePassHTTP attributes to custom data -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Created -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Add additional protection... -- -- -- No password set -- No password set -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- Continue without password -- -- -- -- No encryption key added -- No encryption key added -- -- -- You must add at least one encryption key to secure your database! -- You must add at least one encryption key to secure your database! -- -- -- Unknown error -- Unknown error -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Encryption Algorithm: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (default) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Key Derivation Function: -- -- -- Transform rounds: -- Transform rounds: -- -- -- Memory Usage: -- Memory Usage: -- -- -- Parallelism: -- Parallelism: -- -- -- Decryption Time: -- Decryption Time: -- -- -- ?? s -- ?? s -- -- -- Change -- Change -- -- -- Higher values offer more protection, but opening the database will take longer. -- Higher values offer more protection, but opening the database will take longer. -- -- -- Database format: -- Database format: -- -- -- This is only important if you need to use your database with other programs. -- This is only important if you need to use your database with other programs. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recommended) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- unchanged -- -- -- Number of rounds too high -- Key transformation rounds -- Number of rounds too high -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- Understood, keep number -- Understood, keep number -- -- -- Cancel -- Cancel -- -- -- Number of rounds too low -- Key transformation rounds -- Number of rounds too low -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- KDF unchanged -- KDF unchanged -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- -- MiB -- MiB -- -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- -- thread(s) -- thread(s) -- -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- -- -- -- Database format -- -- -- -- Encryption algorithm -- -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- -- -- -- Parallelism -- -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database Meta Data -- -- -- Database name: -- Database name: -- -- -- Database description: -- Database description: -- -- -- Default username: -- Default username: -- -- -- History Settings -- History Settings -- -- -- Max. history items: -- Max. history items: -- -- -- Max. history size: -- Max. history size: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Use recycle bin -- -- -- Additional Database Settings -- Additional Database Settings -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Sharing -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Type -- -- -- Path -- Path -- -- -- Last Signer -- Last Signer -- -- -- Certificates -- Certificates -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Database Name: -- -- -- Description: -- Description: -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- All files -- All files -- -- -- Open database -- Open database -- -- -- CSV file -- CSV file -- -- -- Merge database -- Merge database -- -- -- Open KeePass 1 database -- Open KeePass 1 database -- -- -- KeePass 1 database -- KeePass 1 database -- -- -- Export database to CSV file -- Export database to CSV file -- -- -- Writing the CSV file failed. -- Writing the CSV file failed. -- -- -- Database creation error -- Database creation error -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- Select CSV file -- Select CSV file -- -- -- New Database -- New Database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [New Database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Locked] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Read-only] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Searching... -- -- -- Do you really want to delete the entry "%1" for good? -- Do you really want to delete the entry "%1" for good? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Do you really want to move entry "%1" to the recycle bin? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- -- Do you really want to move %n entry(s) to the recycle bin? -- Do you really want to move %n entry(s) to the recycle bin? -- -- -- -- Execute command? -- Execute command? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Do you really want to execute the following command?<br><br>%1<br> -- -- -- Remember my choice -- Remember my choice -- -- -- Do you really want to delete the group "%1" for good? -- Do you really want to delete the group "%1" for good? -- -- -- No current database. -- No current database. -- -- -- No source database, nothing to do. -- No source database, nothing to do. -- -- -- Search Results (%1) -- Search Results (%1) -- -- -- No Results -- No Results -- -- -- File has changed -- File has changed -- -- -- The database file has changed. Do you want to load the changes? -- The database file has changed. Do you want to load the changes? -- -- -- Merge Request -- Merge Request -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- -- -- Empty recycle bin? -- Empty recycle bin? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Are you sure you want to permanently delete everything from your recycle bin? -- -- -- Do you really want to delete %n entry(s) for good? -- -- Do you really want to delete %n entry(s) for good? -- Do you really want to delete %n entry(s) for good? -- -- -- -- Delete entry(s)? -- -- Delete entry(s)? -- Delete entry(s)? -- -- -- -- Move entry(s) to recycle bin? -- -- Move entry(s) to recycle bin? -- Move entry(s) to recycle bin? -- -- -- -- Lock Database? -- Lock Database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- You are editing an entry. Discard changes and lock anyway? -- -- -- "%1" was modified. --Save changes? -- "%1" was modified. --Save changes? -- -- -- Database was modified. --Save changes? -- Database was modified. --Save changes? -- -- -- Save changes? -- Save changes? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- Disable safe saves? -- Disable safe saves? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- Passwords -- Passwords -- -- -- Save database as -- Save database as -- -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- Replace references to entry? -- Replace references to entry? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Delete group -- -- -- Move group to recycle bin? -- Move group to recycle bin? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Do you really want to move the group "%1" to the recycle bin? -- -- -- Successfully merged the database files. -- Successfully merged the database files. -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Shared group... -- -- -- -- Writing the database failed: %1 -- Writing the database failed: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Entry -- -- -- Advanced -- Advanced -- -- -- Icon -- Icon -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- Properties -- -- -- History -- History -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- n/a -- -- -- (encrypted) -- (encrypted) -- -- -- Select private key -- Select private key -- -- -- Entry history -- Entry history -- -- -- Add entry -- Add entry -- -- -- Edit entry -- Edit entry -- -- -- New attribute -- New attribute -- -- -- Are you sure you want to remove this attribute? -- Are you sure you want to remove this attribute? -- -- -- Tomorrow -- Tomorrow -- -- -- %n week(s) -- -- %n week(s) -- %n week(s) -- -- -- -- %n month(s) -- -- %n month(s) -- %n month(s) -- -- -- -- Entry updated successfully. -- Entry updated successfully. -- -- -- New attribute %1 -- New attribute %1 -- -- -- %n year(s) -- -- %n year(s) -- %n year(s) -- -- -- -- Confirm Removal -- Confirm Removal -- -- -- Browser Integration -- Browser Integration -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- Reveal -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Additional attributes -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit Name -- Edit Name -- -- -- Protect -- Protect -- -- -- Reveal -- Reveal -- -- -- Attachments -- Attachments -- -- -- Foreground Color: -- Foreground Color: -- -- -- Background Color: -- Background Color: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Enable Auto-Type for this entry -- -- -- Window Associations -- Window Associations -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Window title: -- -- -- Use a specific sequence for this association: -- Use a specific sequence for this association: -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit -- -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Show -- -- -- Restore -- Restore -- -- -- Delete -- Delete -- -- -- Delete all -- Delete all -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Password: -- -- -- Title: -- Title: -- -- -- Presets -- Presets -- -- -- Toggle the checkbox to reveal the notes section. -- Toggle the checkbox to reveal the notes section. -- -- -- Username: -- Username: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- -- -- -- Toggle notes visible -- -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- -- -- -- Notes: -- -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Form -- -- -- Remove key from agent after -- Remove key from agent after -- -- -- seconds -- seconds -- -- -- Fingerprint -- Fingerprint -- -- -- Remove key from agent when database is closed/locked -- Remove key from agent when database is closed/locked -- -- -- Public key -- Public key -- -- -- Add key to agent when database is opened/unlocked -- Add key to agent when database is opened/unlocked -- -- -- Comment -- Comment -- -- -- Decrypt -- Decrypt -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Private key -- Private key -- -- -- External file -- External file -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Attachment -- Attachment -- -- -- Add to agent -- Add to agent -- -- -- Remove from agent -- Remove from agent -- -- -- Require user confirmation when this key is used -- Require user confirmation when this key is used -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Group -- -- -- Icon -- Icon -- -- -- Properties -- Properties -- -- -- Add group -- Add group -- -- -- Edit group -- Edit group -- -- -- Enable -- Enable -- -- -- Disable -- Disable -- -- -- Inherit from parent group (%1) -- Inherit from parent group (%1) -- -- -- Entry has unsaved changes -- Entry has unsaved changes -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Path: -- -- -- Password: -- Password: -- -- -- Inactive -- Inactive -- -- -- KeeShare unsigned container -- KeeShare unsigned container -- -- -- KeeShare signed container -- KeeShare signed container -- -- -- Select import source -- Select import source -- -- -- Select export target -- Select export target -- -- -- Select import/export file -- Select import/export file -- -- -- Clear -- Clear -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Browse... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Add custom icon -- -- -- Delete custom icon -- Delete custom icon -- -- -- Download favicon -- Download favicon -- -- -- Unable to fetch favicon. -- Unable to fetch favicon. -- -- -- Images -- Images -- -- -- All files -- All files -- -- -- Confirm Delete -- Confirm Delete -- -- -- Select Image(s) -- Select Image(s) -- -- -- Successfully loaded %1 of %n icon(s) -- -- Successfully loaded %1 of %n icon(s) -- Successfully loaded %1 of %n icon(s) -- -- -- -- No icons were loaded -- No icons were loaded -- -- -- %n icon(s) already exist in the database -- -- %n icon(s) already exist in the database -- %n icon(s) already exist in the database -- -- -- -- The following icon(s) failed: -- -- The following icon(s) failed: -- The following icon(s) failed: -- -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Created: -- -- -- Modified: -- Modified: -- -- -- Accessed: -- Accessed: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Plugin Data -- -- -- Remove -- Remove -- -- -- Delete plugin data? -- Delete plugin data? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Name -- -- -- Size -- Size -- -- -- -- EntryAttachmentsWidget -- -- Form -- Form -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Open -- Open -- -- -- Save -- Save -- -- -- Select files -- Select files -- -- -- Are you sure you want to remove %n attachment(s)? -- -- Are you sure you want to remove %n attachment(s)? -- Are you sure you want to remove %n attachment(s)? -- -- -- -- Save attachments -- Save attachments -- -- -- Unable to create directory: --%1 -- Unable to create directory: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- -- -- Confirm overwrite -- Confirm overwrite -- -- -- Unable to save attachments: --%1 -- Unable to save attachments: --%1 -- -- -- Unable to open attachment: --%1 -- Unable to open attachment: --%1 -- -- -- Unable to open attachments: --%1 -- Unable to open attachments: --%1 -- -- -- Confirm remove -- Confirm remove -- -- -- Unable to open file(s): --%1 -- -- Unable to open file(s): --%1 -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Attachments -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Name -- -- -- -- EntryHistoryModel -- -- Last modified -- Last modified -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- Never -- Never -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Expires -- Expires -- -- -- Created -- Created -- -- -- Modified -- Modified -- -- -- Accessed -- Accessed -- -- -- Attachments -- Attachments -- -- -- Size -- Size -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Close -- -- -- General -- General -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Expiration -- Expiration -- -- -- URL -- URL -- -- -- Attributes -- Attributes -- -- -- Attachments -- Attachments -- -- -- Notes -- Notes -- -- -- Autotype -- Autotype -- -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Searching -- Searching -- -- -- Search -- Search -- -- -- Clear -- Clear -- -- -- Never -- Never -- -- -- [PROTECTED] -- [PROTECTED] -- -- -- Enabled -- Enabled -- -- -- Disabled -- Disabled -- -- -- Share -- Share -- -- -- Display current TOTP value -- -- -- -- Advanced -- Advanced -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Fit to window -- -- -- Fit to contents -- Fit to contents -- -- -- Reset to defaults -- Reset to defaults -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Group -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Unknown -- -- -- Unknown -- Unknown executable path -- Unknown -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [empty] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- Cancel -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Close -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- -- -- -- Ok -- Ok -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &Close -- -- -- Close message -- Close message -- -- -- -- Kdbx3Reader -- -- missing database headers -- missing database headers -- -- -- Header doesn't match hash -- Header doesn't match hash -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- missing database headers -- -- -- Invalid header checksum size -- Invalid header checksum size -- -- -- Header SHA256 mismatch -- Header SHA256 mismatch -- -- -- Unknown cipher -- Unknown cipher -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Failed to open buffer for KDF parameters in header -- Failed to open buffer for KDF parameters in header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- Legacy header fields found in KDBX4 file. -- Legacy header fields found in KDBX4 file. -- -- -- Invalid inner header id size -- Invalid inner header id size -- -- -- Invalid inner header field length -- Invalid inner header field length -- -- -- Invalid inner header binary size -- Invalid inner header binary size -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Unsupported KeePass variant map version. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name length -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name data -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry value length -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Invalid variant map entry value data -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Bool entry value length -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int32 entry value length -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt32 entry value length -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int64 entry value length -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt64 entry value length -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry type -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Invalid variant map field type size -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Invalid symmetric cipher algorithm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Invalid symmetric cipher IV size. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Failed to serialize KDF parameters variant map -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Unsupported cipher -- -- -- Invalid compression flags length -- Invalid compression flags length -- -- -- Unsupported compression algorithm -- Unsupported compression algorithm -- -- -- Invalid master seed size -- Invalid master seed size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid transform rounds size -- Invalid transform rounds size -- -- -- Invalid start bytes size -- Invalid start bytes size -- -- -- Invalid random stream id size -- Invalid random stream id size -- -- -- Invalid inner random stream cipher -- Invalid inner random stream cipher -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- -- -- Unsupported KeePass 2 database version. -- Unsupported KeePass 2 database version. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Invalid cipher uuid length: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- Unable to parse UUID: %1 -- -- -- Failed to read database file. -- Failed to read database file. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML parsing failure: %1 -- -- -- No root group -- No root group -- -- -- Missing icon uuid or data -- Missing icon uuid or data -- -- -- Missing custom data key or value -- Missing custom data key or value -- -- -- Multiple group elements -- Multiple group elements -- -- -- Null group uuid -- Null group uuid -- -- -- Invalid group icon number -- Invalid group icon number -- -- -- Invalid EnableAutoType value -- Invalid EnableAutoType value -- -- -- Invalid EnableSearching value -- Invalid EnableSearching value -- -- -- No group uuid found -- No group uuid found -- -- -- Null DeleteObject uuid -- Null DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Missing DeletedObject uuid or time -- -- -- Null entry uuid -- Null entry uuid -- -- -- Invalid entry icon number -- Invalid entry icon number -- -- -- History element in history entry -- History element in history entry -- -- -- No entry uuid found -- No entry uuid found -- -- -- History element with different uuid -- History element with different uuid -- -- -- Duplicate custom attribute found -- Duplicate custom attribute found -- -- -- Entry string key or value missing -- Entry string key or value missing -- -- -- Entry binary key or value missing -- Entry binary key or value missing -- -- -- Auto-type association window or sequence missing -- Auto-type association window or sequence missing -- -- -- Invalid bool value -- Invalid bool value -- -- -- Invalid date time value -- Invalid date time value -- -- -- Invalid color value -- Invalid color value -- -- -- Invalid color rgb part -- Invalid color rgb part -- -- -- Invalid number value -- Invalid number value -- -- -- Invalid uuid value -- Invalid uuid value -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Unable to decompress binary -- -- -- XML error: --%1 --Line %2, column %3 -- XML error: --%1 --Line %2, column %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- File too large to be a private key -- -- -- Failed to open private key -- Failed to open private key -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Unable to open the database. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Unable to read keyfile. -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- Unsupported encryption algorithm. -- Unsupported encryption algorithm. -- -- -- Unsupported KeePass database version. -- Unsupported KeePass database version. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Unable to read encryption IV -- -- -- Invalid number of groups -- Invalid number of groups -- -- -- Invalid number of entries -- Invalid number of entries -- -- -- Invalid content hash size -- Invalid content hash size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid number of transform rounds -- Invalid number of transform rounds -- -- -- Unable to construct group tree -- Unable to construct group tree -- -- -- Root -- Root -- -- -- Key transformation failed -- Key transformation failed -- -- -- Invalid group field type number -- Invalid group field type number -- -- -- Invalid group field size -- Invalid group field size -- -- -- Read group field data doesn't match size -- Read group field data doesn't match size -- -- -- Incorrect group id field size -- Incorrect group id field size -- -- -- Incorrect group creation time field size -- Incorrect group creation time field size -- -- -- Incorrect group modification time field size -- Incorrect group modification time field size -- -- -- Incorrect group access time field size -- Incorrect group access time field size -- -- -- Incorrect group expiry time field size -- Incorrect group expiry time field size -- -- -- Incorrect group icon field size -- Incorrect group icon field size -- -- -- Incorrect group level field size -- Incorrect group level field size -- -- -- Invalid group field type -- Invalid group field type -- -- -- Missing group id or level -- Missing group id or level -- -- -- Missing entry field type number -- Missing entry field type number -- -- -- Invalid entry field size -- Invalid entry field size -- -- -- Read entry field data doesn't match size -- Read entry field data doesn't match size -- -- -- Invalid entry uuid field size -- Invalid entry uuid field size -- -- -- Invalid entry group id field size -- Invalid entry group id field size -- -- -- Invalid entry icon field size -- Invalid entry icon field size -- -- -- Invalid entry creation time field size -- Invalid entry creation time field size -- -- -- Invalid entry modification time field size -- Invalid entry modification time field size -- -- -- Invalid entry expiry time field size -- Invalid entry expiry time field size -- -- -- Invalid entry field type -- Invalid entry field type -- -- -- unable to seek to content position -- unable to seek to content position -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Imported from %1 -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- Key Component -- -- -- Key Component Description -- Key Component Description -- -- -- Cancel -- Cancel -- -- -- Key Component set, click to change or remove -- Key Component set, click to change or remove -- -- -- Add %1 -- Add a key component -- Add %1 -- -- -- Change %1 -- Change a key component -- Change %1 -- -- -- Remove %1 -- Remove a key component -- Remove %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 set, click to change or remove -- -- -- -- KeyFileEditWidget -- -- Generate -- Generate -- -- -- Key File -- Key File -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Error loading the key file '%1' --Message: %2 -- -- -- Key files -- Key files -- -- -- All files -- All files -- -- -- Create Key File... -- Create Key File... -- -- -- Error creating key file -- Error creating key file -- -- -- Unable to create key file: %1 -- Unable to create key file: %1 -- -- -- Select a key file -- Select a key file -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Browse... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Help -- -- -- &Groups -- &Groups -- -- -- &Tools -- &Tools -- -- -- &Quit -- &Quit -- -- -- &About -- &About -- -- -- Database settings -- Database settings -- -- -- Copy username to clipboard -- Copy username to clipboard -- -- -- Copy password to clipboard -- Copy password to clipboard -- -- -- &Settings -- &Settings -- -- -- &Title -- &Title -- -- -- Copy title to clipboard -- Copy title to clipboard -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copy URL to clipboard -- -- -- &Notes -- &Notes -- -- -- Copy notes to clipboard -- Copy notes to clipboard -- -- -- Copy &TOTP -- Copy &TOTP -- -- -- E&mpty recycle bin -- E&mpty recycle bin -- -- -- Clear history -- Clear history -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Settings -- Settings -- -- -- Toggle window -- Toggle window -- -- -- Quit KeePassXC -- Quit KeePassXC -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- &Donate -- &Donate -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- &Import -- &Import -- -- -- Create a new database -- Create a new database -- -- -- Merge from another KDBX database -- Merge from another KDBX database -- -- -- Add a new entry -- Add a new entry -- -- -- View or edit entry -- View or edit entry -- -- -- Add a new group -- Add a new group -- -- -- Perform &Auto-Type -- Perform &Auto-Type -- -- -- Open &URL -- Open &URL -- -- -- Import a KeePass 1 database -- Import a KeePass 1 database -- -- -- Import a CSV file -- Import a CSV file -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- Check for updates on startup? -- Check for updates on startup? -- -- -- Would you like KeePassXC to check for updates on startup? -- Would you like KeePassXC to check for updates on startup? -- -- -- You can always check for updates manually from the application menu. -- You can always check for updates manually from the application menu. -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Hide Usernames -- -- -- Hide Passwords -- Hide Passwords -- -- -- -- ManageDatabase -- -- Database settings -- Database settings -- -- -- Edit database settings -- -- -- -- Unlock database -- -- -- -- Unlock database to show more information -- -- -- -- Lock database -- -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Creating missing %1 [%2] -- -- -- Relocating %1 [%2] -- Relocating %1 [%2] -- -- -- Overwriting %1 [%2] -- Overwriting %1 [%2] -- -- -- older entry merged from database "%1" -- older entry merged from database "%1" -- -- -- Adding backup for older target %1 [%2] -- Adding backup for older target %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Adding backup for older source %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronizing from newer source %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronizing from older source %1 [%2] -- -- -- Deleting child %1 [%2] -- Deleting child %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Deleting orphan %1 [%2] -- -- -- Changed deleted objects -- Changed deleted objects -- -- -- Adding missing icon %1 -- Adding missing icon %1 -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Create a new KeePassXC database... -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- WizardPage -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- Advanced Settings -- Advanced Settings -- -- -- Simple Settings -- Simple Settings -- -- -- Encryption Settings -- Encryption Settings -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Encryption Settings -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- General Database Information -- -- -- Please fill in the display name and an optional description for your new database: -- Please fill in the display name and an optional description for your new database: -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Invalid key file, expecting an OpenSSH key -- -- -- PEM boundary mismatch -- PEM boundary mismatch -- -- -- Base64 decoding failed -- Base64 decoding failed -- -- -- Key file way too small. -- Key file way too small. -- -- -- Key file magic header id invalid -- Key file magic header id invalid -- -- -- Found zero keys -- Found zero keys -- -- -- Failed to read public key. -- Failed to read public key. -- -- -- Corrupted key file, reading private key failed -- Corrupted key file, reading private key failed -- -- -- No private key payload to decrypt -- No private key payload to decrypt -- -- -- Trying to run KDF without cipher -- Trying to run KDF without cipher -- -- -- Passphrase is required to decrypt this key -- Passphrase is required to decrypt this key -- -- -- Key derivation failed, key file corrupted? -- Key derivation failed, key file corrupted? -- -- -- Decryption failed, wrong passphrase? -- Decryption failed, wrong passphrase? -- -- -- Unexpected EOF while reading public key -- Unexpected EOF while reading public key -- -- -- Unexpected EOF while reading private key -- Unexpected EOF while reading private key -- -- -- Can't write public key as it is empty -- Can't write public key as it is empty -- -- -- Unexpected EOF when writing public key -- Unexpected EOF when writing public key -- -- -- Can't write private key as it is empty -- Can't write private key as it is empty -- -- -- Unexpected EOF when writing private key -- Unexpected EOF when writing private key -- -- -- Unsupported key type: %1 -- Unsupported key type: %1 -- -- -- Unknown cipher: %1 -- Unknown cipher: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cipher IV is too short for MD5 kdf -- -- -- Unknown KDF: %1 -- Unknown KDF: %1 -- -- -- Unknown key type: %1 -- Unknown key type: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Enter password: -- -- -- Confirm password: -- Confirm password: -- -- -- Password -- Password -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- Passwords do not match. -- Passwords do not match. -- -- -- Password field -- -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- strength -- -- -- entropy -- entropy -- -- -- Password -- Password -- -- -- Character Types -- Character Types -- -- -- Numbers -- Numbers -- -- -- Extended ASCII -- Extended ASCII -- -- -- Exclude look-alike characters -- Exclude look-alike characters -- -- -- Pick characters from every group -- Pick characters from every group -- -- -- &Length: -- &Length: -- -- -- Passphrase -- Passphrase -- -- -- Wordlist: -- Wordlist: -- -- -- Word Separator: -- Word Separator: -- -- -- Close -- Close -- -- -- Entropy: %1 bit -- Entropy: %1 bit -- -- -- Password Quality: %1 -- Password Quality: %1 -- -- -- Poor -- Password quality -- Poor -- -- -- Weak -- Password quality -- Weak -- -- -- Good -- Password quality -- Good -- -- -- Excellent -- Password quality -- Excellent -- -- -- Switch to advanced mode -- Switch to advanced mode -- -- -- Advanced -- Advanced -- -- -- Braces -- Braces -- -- -- Punctuation -- Punctuation -- -- -- Quotes -- Quotes -- -- -- Logograms -- Logograms -- -- -- Character set to exclude from generated password -- Character set to exclude from generated password -- -- -- Do not include: -- Do not include: -- -- -- Add non-hex letters to "do not include" list -- Add non-hex letters to "do not include" list -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- Overwrite -- -- -- Delete -- Delete -- -- -- Move -- Move -- -- -- Empty -- Empty -- -- -- Remove -- Remove -- -- -- Skip -- Skip -- -- -- Disable -- Disable -- -- -- Merge -- Merge -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- Database not opened -- -- -- Database hash not available -- Database hash not available -- -- -- Client public key not received -- Client public key not received -- -- -- Cannot decrypt message -- Cannot decrypt message -- -- -- Action cancelled or denied -- Action cancelled or denied -- -- -- KeePassXC association failed, try again -- KeePassXC association failed, try again -- -- -- Encryption key is not recognized -- Encryption key is not recognized -- -- -- Incorrect action -- Incorrect action -- -- -- Empty message received -- Empty message received -- -- -- No URL provided -- No URL provided -- -- -- No logins found -- No logins found -- -- -- Unknown error -- Unknown error -- -- -- Add a new entry to a database. -- Add a new entry to a database. -- -- -- Path of the database. -- Path of the database. -- -- -- Key file of the database. -- Key file of the database. -- -- -- path -- path -- -- -- Username for the entry. -- Username for the entry. -- -- -- username -- username -- -- -- URL for the entry. -- URL for the entry. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Prompt for the entry's password. -- -- -- Generate a password for the entry. -- Generate a password for the entry. -- -- -- length -- length -- -- -- Path of the entry to add. -- Path of the entry to add. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Path of the entry to clip. -- -- -- Timeout in seconds before clearing the clipboard. -- Timeout in seconds before clearing the clipboard. -- -- -- Edit an entry. -- Edit an entry. -- -- -- Title for the entry. -- Title for the entry. -- -- -- title -- title -- -- -- Path of the entry to edit. -- Path of the entry to edit. -- -- -- Estimate the entropy of a password. -- Estimate the entropy of a password. -- -- -- Password for which to estimate the entropy. -- Password for which to estimate the entropy. -- -- -- Perform advanced analysis on the password. -- Perform advanced analysis on the password. -- -- -- -- --Available commands: -- -- -- --Available commands: -- -- -- -- Name of the command to execute. -- Name of the command to execute. -- -- -- List database entries. -- List database entries. -- -- -- Path of the group to list. Default is / -- Path of the group to list. Default is / -- -- -- Find entries quickly. -- Find entries quickly. -- -- -- Search term. -- Search term. -- -- -- Merge two databases. -- Merge two databases. -- -- -- Path of the database to merge from. -- Path of the database to merge from. -- -- -- Use the same credentials for both database files. -- Use the same credentials for both database files. -- -- -- Key file of the database to merge from. -- Key file of the database to merge from. -- -- -- Show an entry's information. -- Show an entry's information. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- -- -- attribute -- attribute -- -- -- Name of the entry to show. -- Name of the entry to show. -- -- -- NULL device -- NULL device -- -- -- error reading from device -- error reading from device -- -- -- malformed string -- malformed string -- -- -- missing closing quote -- missing closing quote -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Last Modified -- Last Modified -- -- -- Created -- Created -- -- -- Browser Integration -- Browser Integration -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- Generate a new random diceware passphrase. -- -- -- Word count for the diceware passphrase. -- Word count for the diceware passphrase. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- Generate a new random password. -- Generate a new random password. -- -- -- Could not create entry with path %1. -- Could not create entry with path %1. -- -- -- Enter password for new entry: -- Enter password for new entry: -- -- -- Writing the database failed %1. -- Writing the database failed %1. -- -- -- Successfully added entry %1. -- Successfully added entry %1. -- -- -- Invalid timeout value %1. -- Invalid timeout value %1. -- -- -- Entry %1 not found. -- Entry %1 not found. -- -- -- Entry with path %1 has no TOTP set up. -- Entry with path %1 has no TOTP set up. -- -- -- Clearing the clipboard in %1 second(s)... -- -- Clearing the clipboard in %1 second(s)... -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- Clipboard cleared! -- -- -- Silence password prompt and other secondary outputs. -- Silence password prompt and other secondary outputs. -- -- -- count -- CLI parameter -- count -- -- -- Could not find entry with path %1. -- Could not find entry with path %1. -- -- -- Not changing any field for entry %1. -- Not changing any field for entry %1. -- -- -- Enter new password for entry: -- Enter new password for entry: -- -- -- Writing the database failed: %1 -- Writing the database failed: %1 -- -- -- Successfully edited entry %1. -- Successfully edited entry %1. -- -- -- Length %1 -- Length %1 -- -- -- Entropy %1 -- Entropy %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-word extra bits %1 -- -- -- Type: Bruteforce -- Type: Bruteforce -- -- -- Type: Dictionary -- Type: Dictionary -- -- -- Type: Dict+Leet -- Type: Dict+Leet -- -- -- Type: User Words -- Type: User Words -- -- -- Type: User+Leet -- Type: User+Leet -- -- -- Type: Repeated -- Type: Repeated -- -- -- Type: Sequence -- Type: Sequence -- -- -- Type: Spatial -- Type: Spatial -- -- -- Type: Date -- Type: Date -- -- -- Type: Bruteforce(Rep) -- Type: Bruteforce(Rep) -- -- -- Type: Dictionary(Rep) -- Type: Dictionary(Rep) -- -- -- Type: Dict+Leet(Rep) -- Type: Dict+Leet(Rep) -- -- -- Type: User Words(Rep) -- Type: User Words(Rep) -- -- -- Type: User+Leet(Rep) -- Type: User+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Type: Repeated(Rep) -- -- -- Type: Sequence(Rep) -- Type: Sequence(Rep) -- -- -- Type: Spatial(Rep) -- Type: Spatial(Rep) -- -- -- Type: Date(Rep) -- Type: Date(Rep) -- -- -- Type: Unknown%1 -- Type: Unknown%1 -- -- -- Entropy %1 (%2) -- Entropy %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- Failed to load key file %1: %2 -- Failed to load key file %1: %2 -- -- -- Length of the generated password -- Length of the generated password -- -- -- Use lowercase characters -- Use lowercase characters -- -- -- Use uppercase characters -- Use uppercase characters -- -- -- Use special characters -- Use special characters -- -- -- Use extended ASCII -- Use extended ASCII -- -- -- Exclude character set -- Exclude character set -- -- -- chars -- chars -- -- -- Exclude similar looking characters -- Exclude similar looking characters -- -- -- Include characters from every selected group -- Include characters from every selected group -- -- -- Recursively list the elements of the group. -- Recursively list the elements of the group. -- -- -- Cannot find group %1. -- Cannot find group %1. -- -- -- Error reading merge file: --%1 -- Error reading merge file: --%1 -- -- -- Unable to save database to file : %1 -- Unable to save database to file : %1 -- -- -- Unable to save database to file: %1 -- Unable to save database to file: %1 -- -- -- Successfully recycled entry %1. -- Successfully recycled entry %1. -- -- -- Successfully deleted entry %1. -- Successfully deleted entry %1. -- -- -- Show the entry's current TOTP. -- Show the entry's current TOTP. -- -- -- ERROR: unknown attribute %1. -- ERROR: unknown attribute %1. -- -- -- No program defined for clipboard manipulation -- No program defined for clipboard manipulation -- -- -- file empty -- file empty -- -- -- %1: (row, col) %2,%3 -- %1: (row, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Invalid Settings -- -- -- Invalid Key -- TOTP -- Invalid Key -- -- -- Message encryption failed. -- Message encryption failed. -- -- -- No groups found -- No groups found -- -- -- Create a new database. -- Create a new database. -- -- -- File %1 already exists. -- File %1 already exists. -- -- -- Loading the key file failed -- Loading the key file failed -- -- -- No key is set. Aborting database creation. -- No key is set. Aborting database creation. -- -- -- Failed to save the database: %1. -- Failed to save the database: %1. -- -- -- Successfully created new database. -- Successfully created new database. -- -- -- Creating KeyFile %1 failed: %2 -- Creating KeyFile %1 failed: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Loading KeyFile %1 failed: %2 -- -- -- Path of the entry to remove. -- Path of the entry to remove. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- The lock file could not be created. Single-instance mode disabled. -- The lock file could not be created. Single-instance mode disabled. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - cross-platform password manager -- -- -- filenames of the password databases to open (*.kdbx) -- filenames of the password databases to open (*.kdbx) -- -- -- path to a custom config file -- path to a custom config file -- -- -- key file of the database -- key file of the database -- -- -- read password of the database from stdin -- read password of the database from stdin -- -- -- Another instance of KeePassXC is already running. -- Another instance of KeePassXC is already running. -- -- -- Fatal error while testing the cryptographic functions. -- Fatal error while testing the cryptographic functions. -- -- -- KeePassXC - Error -- KeePassXC - Error -- -- -- Database password: -- Database password: -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- -- -- -- Build Type: %1 -- -- -- -- Revision: %1 -- -- -- -- Distribution: %1 -- -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- -- -- -- TouchID -- -- -- -- None -- -- -- -- Enabled extensions: -- -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- %1 ms -- %1 ms -- -- -- -- %1 s -- seconds -- -- %1 s -- %1 s -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Internal zlib error when compressing: -- -- -- Error writing to underlying device: -- Error writing to underlying device: -- -- -- Error opening underlying device: -- Error opening underlying device: -- -- -- Error reading data from underlying device: -- Error reading data from underlying device: -- -- -- Internal zlib error when decompressing: -- Internal zlib error when decompressing: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- The gzip format not supported in this version of zlib. -- -- -- Internal zlib error: -- Internal zlib error: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Poor -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Weak -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Name -- -- -- Value -- Value -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- -- -- -- Description -- -- -- -- Location -- -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agent connection failed. -- -- -- Agent protocol error. -- Agent protocol error. -- -- -- No agent running, cannot add identity. -- No agent running, cannot add identity. -- -- -- No agent running, cannot remove identity. -- No agent running, cannot remove identity. -- -- -- Agent refused this identity. Possible reasons include: -- Agent refused this identity. Possible reasons include: -- -- -- The key has already been added. -- The key has already been added. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Restricted lifetime is not supported by the agent (check options). -- -- -- A confirmation request is not supported by the agent (check options). -- A confirmation request is not supported by the agent (check options). -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Search Help -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Every search term must match (ie, logical AND) -- -- -- Modifiers -- Modifiers -- -- -- exclude term from results -- exclude term from results -- -- -- match term exactly -- match term exactly -- -- -- use regex in term -- use regex in term -- -- -- Fields -- Fields -- -- -- Term Wildcards -- Term Wildcards -- -- -- match anything -- match anything -- -- -- match one -- match one -- -- -- logical OR -- logical OR -- -- -- Examples -- Examples -- -- -- -- SearchWidget -- -- Search -- Search -- -- -- Limit search to selected group -- Limit search to selected group -- -- -- Search Help -- Search Help -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Search (%1)... -- -- -- Case sensitive -- Case sensitive -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- General -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Active -- -- -- Allow export -- Allow export -- -- -- Allow import -- Allow import -- -- -- Own certificate -- Own certificate -- -- -- Fingerprint: -- Fingerprint: -- -- -- Certificate: -- Certificate: -- -- -- Signer -- Signer -- -- -- Key: -- Key: -- -- -- Generate -- Generate -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Imported certificates -- Imported certificates -- -- -- Trust -- Trust -- -- -- Ask -- Ask -- -- -- Untrust -- Untrust -- -- -- Remove -- Remove -- -- -- Path -- Path -- -- -- Status -- Status -- -- -- Fingerprint -- Fingerprint -- -- -- Certificate -- Certificate -- -- -- Trusted -- Trusted -- -- -- Untrusted -- Untrusted -- -- -- Unknown -- Unknown -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare key file -- -- -- All files -- All files -- -- -- Select path -- Select path -- -- -- Exporting changed certificate -- Exporting changed certificate -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Key -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Overwriting signed share container is not supported - export prevented -- -- -- Could not write export container (%1) -- Could not write export container (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- Overwriting unsigned share container is not supported - export prevented -- -- -- Could not write export container -- Could not write export container -- -- -- Unexpected export error occurred -- Unexpected export error occurred -- -- -- -- ShareImport -- -- Import from container without signature -- Import from container without signature -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- Import from container with certificate -- Import from container with certificate -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} -- -- -- Not this time -- Not this time -- -- -- Never -- Never -- -- -- Always -- Always -- -- -- Just this time -- Just this time -- -- -- Signed share container are not supported - import prevented -- Signed share container are not supported - import prevented -- -- -- File is not readable -- File is not readable -- -- -- Invalid sharing container -- Invalid sharing container -- -- -- Untrusted import prevented -- Untrusted import prevented -- -- -- Successful signed import -- Successful signed import -- -- -- Unsigned share container are not supported - import prevented -- Unsigned share container are not supported - import prevented -- -- -- Successful unsigned import -- Successful unsigned import -- -- -- File does not exist -- File does not exist -- -- -- Unknown share container type -- Unknown share container type -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import from %1 failed (%2) -- -- -- Import from %1 successful (%2) -- Import from %1 successful (%2) -- -- -- Imported from %1 -- Imported from %1 -- -- -- Export to %1 failed (%2) -- Export to %1 failed (%2) -- -- -- Export to %1 successful (%2) -- Export to %1 successful (%2) -- -- -- Export to %1 -- Export to %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Timed Password -- -- -- 000000 -- 000000 -- -- -- Copy -- Copy -- -- -- Expires in <b>%n</b> second(s) -- -- Expires in <b>%n</b> second(s) -- Expires in <b>%n</b> second(s) -- -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copy -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- -- -- There was an error creating the QR code. -- There was an error creating the QR code. -- -- -- Closing in %1 seconds. -- Closing in %1 seconds. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Setup TOTP -- -- -- Default RFC 6238 token settings -- Default RFC 6238 token settings -- -- -- Steam token settings -- Steam token settings -- -- -- Use custom settings -- Use custom settings -- -- -- Custom Settings -- Custom Settings -- -- -- Time step: -- Time step: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Code size: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Checking for updates -- -- -- Checking for updates... -- Checking for updates... -- -- -- Close -- Close -- -- -- Update Error! -- Update Error! -- -- -- An error occurred in retrieving update information. -- An error occurred in retrieving update information. -- -- -- Please try again later. -- Please try again later. -- -- -- Software Update -- Software Update -- -- -- A new version of KeePassXC is available! -- A new version of KeePassXC is available! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 is now available — you have %2. -- -- -- Download it at keepassxc.org -- Download it at keepassxc.org -- -- -- You're up-to-date! -- You're up-to-date! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 is currently the newest version available -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Start storing your passwords securely in a KeePassXC database -- -- -- Create new database -- Create new database -- -- -- Open existing database -- Open existing database -- -- -- Import from KeePass 1 -- Import from KeePass 1 -- -- -- Import from CSV -- Import from CSV -- -- -- Recent databases -- Recent databases -- -- -- Welcome to KeePassXC %1 -- Welcome to KeePassXC %1 -- -- -- Import from 1Password -- -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Press -- -- -- Passive -- Passive -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Refresh -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en_US.ts keepassxc-2.6.4-patched/share/translations/keepassx_en_US.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_en_US.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_en_US.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7896 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- About KeePassXC -- -- -- About -- About -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- -- -- Contributors -- Contributors -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- -- -- Debug Info -- Debug Info -- -- -- Include the following information whenever you report a bug: -- Include the following information whenever you report a bug: -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Project Maintainers: -- Project Maintainers: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Use OpenSSH for Windows instead of Pageant -- -- -- Enable SSH Agent integration -- Enable SSH Agent integration -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK value -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK override -- -- -- (empty) -- (empty) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- SSH Agent connection is working! -- SSH Agent connection is working! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Application Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Icon only -- Icon only -- -- -- Text only -- Text only -- -- -- Text beside icon -- Text beside icon -- -- -- Text under icon -- Text under icon -- -- -- Follow style -- Follow style -- -- -- Reset Settings? -- Reset Settings? -- -- -- Are you sure you want to reset all general and security settings to default? -- Are you sure you want to reset all general and security settings to default? -- -- -- Monochrome (light) -- Monochrome (light) -- -- -- Monochrome (dark) -- Monochrome (dark) -- -- -- Colorful -- Colorful -- -- -- You must restart the application to set the new language. Would you like to restart now? -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Basic Settings -- -- -- Startup -- Startup -- -- -- Start only a single instance of KeePassXC -- Start only a single instance of KeePassXC -- -- -- Minimize window at application startup -- Minimize window at application startup -- -- -- File Management -- File Management -- -- -- Backup database file before saving -- Backup database file before saving -- -- -- Automatically save after every change -- Automatically save after every change -- -- -- Automatically reload the database when modified externally -- Automatically reload the database when modified externally -- -- -- Entry Management -- Entry Management -- -- -- Use group icon on entry creation -- Use group icon on entry creation -- -- -- Minimize instead of app exit -- Minimize instead of app exit -- -- -- Show a system tray icon -- Show a system tray icon -- -- -- Hide window to system tray when minimized -- Hide window to system tray when minimized -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- Use entry title to match windows for global Auto-Type -- -- -- Use entry URL to match windows for global Auto-Type -- Use entry URL to match windows for global Auto-Type -- -- -- Always ask before performing Auto-Type -- Always ask before performing Auto-Type -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Movable toolbar -- -- -- Remember previously used databases -- Remember previously used databases -- -- -- Load previously open databases on startup -- Load previously open databases on startup -- -- -- Remember database key files and security dongles -- Remember database key files and security dongles -- -- -- Check for updates at application startup once per week -- Check for updates at application startup once per week -- -- -- Include beta releases when checking for updates -- Include beta releases when checking for updates -- -- -- Language: -- Language: -- -- -- (restart program to activate) -- (restart program to activate) -- -- -- Minimize window after unlocking database -- Minimize window after unlocking database -- -- -- Minimize when opening a URL -- Minimize when opening a URL -- -- -- Hide window when copying to clipboard -- Hide window when copying to clipboard -- -- -- Minimize -- Minimize -- -- -- Drop to background -- Drop to background -- -- -- Favicon download timeout: -- Favicon download timeout: -- -- -- Website icon download timeout in seconds -- Website icon download timeout in seconds -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- Toolbar button style -- -- -- Language selection -- Language selection -- -- -- Global auto-type shortcut -- Global auto-type shortcut -- -- -- Auto-type character typing delay milliseconds -- Auto-type character typing delay milliseconds -- -- -- Auto-type start delay milliseconds -- Auto-type start delay milliseconds -- -- -- Automatically launch KeePassXC at system startup -- Automatically launch KeePassXC at system startup -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- User Interface -- User Interface -- -- -- Toolbar button style: -- Toolbar button style: -- -- -- Use monospaced font for notes -- Use monospaced font for notes -- -- -- Tray icon type: -- Tray icon type: -- -- -- Reset settings to default… -- Reset settings to default… -- -- -- Auto-Type typing delay: -- Auto-Type typing delay: -- -- -- Global Auto-Type shortcut: -- Global Auto-Type shortcut: -- -- -- Auto-Type start delay: -- Auto-Type start delay: -- -- -- Automatically save when locking database -- Automatically save when locking database -- -- -- Automatically save non-data changes when locking database -- Automatically save non-data changes when locking database -- -- -- Tray icon type -- Tray icon type -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeouts -- -- -- Clear clipboard after -- Clear clipboard after -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Lock databases after inactivity of -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Forget TouchID after inactivity of -- -- -- Convenience -- Convenience -- -- -- Lock databases when session is locked or lid is closed -- Lock databases when session is locked or lid is closed -- -- -- Forget TouchID when session is locked or lid is closed -- Forget TouchID when session is locked or lid is closed -- -- -- Lock databases after minimizing the window -- Lock databases after minimizing the window -- -- -- Re-lock previously locked database after performing Auto-Type -- Re-lock previously locked database after performing Auto-Type -- -- -- Hide passwords in the entry preview panel -- Hide passwords in the entry preview panel -- -- -- Hide entry notes by default -- Hide entry notes by default -- -- -- Privacy -- Privacy -- -- -- Use DuckDuckGo service to download website icons -- Use DuckDuckGo service to download website icons -- -- -- Clipboard clear seconds -- Clipboard clear seconds -- -- -- Touch ID inactivity reset -- Touch ID inactivity reset -- -- -- Database lock timeout seconds -- Database lock timeout seconds -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Clear search query after -- -- -- Require password repeat when it is visible -- Require password repeat when it is visible -- -- -- Hide passwords when editing them -- Hide passwords when editing them -- -- -- Use placeholder for empty password fields -- Use placeholder for empty password fields -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Couldn't find an entry that matches the window title: -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- The Syntax of your Auto-Type statement is incorrect! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- -- -- Permission Required -- Permission Required -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Default sequence -- Default sequence -- -- -- -- AutoTypeMatchModel -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Sequence -- Sequence -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copy &username -- -- -- Copy &password -- Copy &password -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permission Required -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- Select entry to Auto-Type: -- -- -- Search... -- Search... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Browser Access Request -- -- -- %1 is requesting access to the following entries: -- %1 is requesting access to the following entries: -- -- -- Remember access to checked entries -- Remember access to checked entries -- -- -- Remember -- Remember -- -- -- Allow access to entries -- Allow access to entries -- -- -- Allow Selected -- Allow Selected -- -- -- Deny All -- Deny All -- -- -- Disable for this site -- Disable for this site -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Save Entry -- -- -- Ok -- Ok -- -- -- Cancel -- Cancel -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- You have multiple databases open. --Please select the correct database for saving credentials. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: New key association request -- -- -- Save and allow access -- Save and allow access -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Overwrite existing key? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- -- -- KeePassXC: Update Entry -- KeePassXC: Update Entry -- -- -- Do you want to update the information in %1 - %2? -- Do you want to update the information in %1 - %2? -- -- -- Abort -- Abort -- -- -- Converting attributes to custom data… -- Converting attributes to custom data… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Converted KeePassHTTP attributes -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- Successfully moved %n keys to custom data. -- Successfully moved %n keys to custom data.Successfully moved %n keys to custom data. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: No entry with KeePassHTTP attributes found! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- The active database does not contain an entry with KeePassHTTP attributes. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Legacy browser integration settings detected -- -- -- KeePassXC: Create a new group -- KeePassXC: Create a new group -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- This is required for accessing your databases with KeePassXC-Browser -- -- -- Enable browser integration -- Enable browser integration -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- Browsers installed as snaps are currently not supported. -- -- -- Enable integration for these browsers: -- Enable integration for these browsers: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Show a notification when credentials are requested -- -- -- Request to unlock the database if it is locked -- Request to unlock the database if it is locked -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Only entries with the same scheme (http://, https://, ...) are returned. -- -- -- Match URL scheme (e.g., https://...) -- Match URL scheme (e.g., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- -- -- Return only best-matching credentials -- Return only best-matching credentials -- -- -- Returns expired credentials. String [expired] is added to the title. -- Returns expired credentials. String [expired] is added to the title. -- -- -- Allow returning expired credentials -- Allow returning expired credentials -- -- -- All databases connected to the extension will return matching credentials. -- All databases connected to the extension will return matching credentials. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Search in all opened databases for matching credentials -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sort matching credentials by title -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sort matching credentials by username -- -- -- Advanced -- Advanced -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Never ask before accessing credentials -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Never ask before updating credentials -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Do not ask permission for HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatically creating or updating string fields is not supported. -- -- -- Return advanced string fields which start with "KPH: " -- Return advanced string fields which start with "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Do not prompt for KeePassHTTP settings migration. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- Update native messaging manifest files at startup -- Update native messaging manifest files at startup -- -- -- Use a custom proxy location if you installed a proxy manually. -- Use a custom proxy location if you installed a proxy manually. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Use a custom proxy location: -- -- -- Custom proxy location field -- Custom proxy location field -- -- -- Browser for custom proxy file -- Browser for custom proxy file -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Use a custom browser configuration location: -- Use a custom browser configuration location: -- -- -- Browser type: -- Browser type: -- -- -- Toolbar button style -- Toolbar button style -- -- -- Config Location: -- Config Location: -- -- -- Custom browser location field -- Custom browser location field -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Browse for custom browser path -- -- -- Custom extension ID: -- Custom extension ID: -- -- -- Custom extension ID -- Custom extension ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- Please see special instructions for browser extension use below -- Please see special instructions for browser extension use below -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Warning:</b> The following options can be dangerous! -- -- -- Executable Files -- Executable Files -- -- -- All Files -- All Files -- -- -- Select custom proxy location -- Select custom proxy location -- -- -- Select native messaging host folder location -- Select native messaging host folder location -- -- -- -- CloneDialog -- -- Clone Options -- Clone Options -- -- -- Append ' - Clone' to title -- Append ' - Clone' to title -- -- -- Replace username and password with references -- Replace username and password with references -- -- -- Copy history -- Copy history -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Import CSV fields -- -- -- filename -- filename -- -- -- size, rows, columns -- size, rows, columns -- -- -- Encoding -- Encoding -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Text is qualified by -- -- -- Fields are separated by -- Fields are separated by -- -- -- Comments start with -- Comments start with -- -- -- Consider '\' an escape character -- Consider '\' an escape character -- -- -- Preview -- Preview -- -- -- Imported from CSV file -- Imported from CSV file -- -- -- Original data: -- Original data: -- -- -- Error -- Error -- -- -- Error(s) detected in CSV file! -- Error(s) detected in CSV file! -- -- -- [%n more message(s) skipped] -- [%n more message skipped][%n more messages skipped] -- -- -- CSV import: writer has errors: --%1 -- CSV import: writer has errors: --%1 -- -- -- Text qualification -- Text qualification -- -- -- Field separation -- Field separation -- -- -- Number of header lines to discard -- Number of header lines to discard -- -- -- CSV import preview -- CSV import preview -- -- -- Column Association -- Column Association -- -- -- Last Modified -- Last Modified -- -- -- Password -- Password -- -- -- Created -- Created -- -- -- Notes -- Notes -- -- -- Title -- Title -- -- -- Group -- Group -- -- -- URL -- URL -- -- -- Username -- Username -- -- -- Header lines skipped -- Header lines skipped -- -- -- First line has field names -- First line has field names -- -- -- Not Present -- Not Present -- -- -- Column %1 -- Column %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n column%n columns -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n bytes -- -- -- %n row(s) -- %n row%n rows -- -- -- -- Database -- -- File %1 does not exist. -- File %1 does not exist. -- -- -- Unable to open file %1. -- Unable to open file %1. -- -- -- Error while reading the database: %1 -- Error while reading the database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- File cannot be written as it is opened in read-only mode. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Key not transformed. This is a bug, please report it to the developers. -- -- -- %1 --Backup database located at %2 -- %1 --Backup database located at %2 -- -- -- Could not save, database does not point to a valid file. -- Could not save, database does not point to a valid file. -- -- -- Could not save, database file is read-only. -- Could not save, database file is read-only. -- -- -- Database file has unmerged changes. -- Database file has unmerged changes. -- -- -- Recycle Bin -- Recycle Bin -- -- -- Passwords -- Root group name -- Passwords -- -- -- Database save is already in progress. -- Database save is already in progress. -- -- -- Could not save, database has not been initialized! -- Could not save, database has not been initialized! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Unlock Database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Key File: -- -- -- Refresh -- Refresh -- -- -- Don't show this warning again -- Don't show this warning again -- -- -- All files -- All files -- -- -- Key files -- Key files -- -- -- Select key file -- Select key file -- -- -- Failed to open key file: %1 -- Failed to open key file: %1 -- -- -- Unlock KeePassXC Database -- Unlock KeePassXC Database -- -- -- Enter Password: -- Enter Password: -- -- -- Password field -- Password field -- -- -- Hardware key slot selection -- Hardware key slot selection -- -- -- Browse for key file -- Browse for key file -- -- -- Browse... -- Browse... -- -- -- Refresh hardware tokens -- Refresh hardware tokens -- -- -- Hardware Key: -- Hardware Key: -- -- -- Hardware key help -- Hardware key help -- -- -- TouchID for Quick Unlock -- TouchID for Quick Unlock -- -- -- Unlock failed and no password given -- Unlock failed and no password given -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- Retry with empty password -- Retry with empty password -- -- -- Enter Additional Credentials (if any): -- Enter Additional Credentials (if any): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- Key file help -- Key file help -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Cannot use database file as key file -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- Key file to unlock the database -- Key file to unlock the database -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- Detecting hardware keys… -- Detecting hardware keys… -- -- -- No hardware keys detected -- No hardware keys detected -- -- -- Select hardware key… -- Select hardware key… -- -- -- Old key file format -- Old key file format -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Passwords -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Advanced Settings -- -- -- General -- General -- -- -- Security -- Security -- -- -- Encryption Settings -- Encryption Settings -- -- -- Browser Integration -- Browser Integration -- -- -- Database Credentials -- Database Credentials -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser settings -- -- -- Stored keys -- Stored keys -- -- -- Remove -- Remove -- -- -- Delete the selected key? -- Delete the selected key? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Enable Browser Integration to access these settings. -- Enable Browser Integration to access these settings. -- -- -- Disconnect all browsers -- Disconnect all browsers -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- KeePassXC: No keys found -- KeePassXC: No keys found -- -- -- No shared encryption keys found in KeePassXC settings. -- No shared encryption keys found in KeePassXC settings. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Removed keys from database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. -- -- -- Forget all site-specific settings on entries -- Forget all site-specific settings on entries -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- Removing stored permissions… -- Removing stored permissions… -- -- -- Abort -- Abort -- -- -- KeePassXC: Removed permissions -- KeePassXC: Removed permissions -- -- -- Successfully removed permissions from %n entry(s). -- Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: No entry with permissions found! -- -- -- The active database does not contain an entry with permissions. -- The active database does not contain an entry with permissions. -- -- -- Move KeePassHTTP attributes to custom data -- Move KeePassHTTP attributes to custom data -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Do you really want to convert all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- Stored browser keys -- Stored browser keys -- -- -- Remove selected key -- Remove selected key -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- Refresh database root group ID -- Refresh database root group ID -- -- -- Created -- Created -- -- -- Refresh database ID -- Refresh database ID -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Add additional protection... -- -- -- No password set -- No password set -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- Continue without password -- Continue without password -- -- -- No encryption key added -- No encryption key added -- -- -- You must add at least one encryption key to secure your database! -- You must add at least one encryption key to secure your database! -- -- -- Unknown error -- Unknown error -- -- -- Failed to change database credentials -- Failed to change database credentials -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Encryption Algorithm: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (default) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Key Derivation Function: -- -- -- Transform rounds: -- Transform rounds: -- -- -- Memory Usage: -- Memory Usage: -- -- -- Parallelism: -- Parallelism: -- -- -- Decryption Time: -- Decryption Time: -- -- -- ?? s -- ?? s -- -- -- Change -- Change -- -- -- Higher values offer more protection, but opening the database will take longer. -- Higher values offer more protection, but opening the database will take longer. -- -- -- Database format: -- Database format: -- -- -- This is only important if you need to use your database with other programs. -- This is only important if you need to use your database with other programs. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recommended) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- unchanged -- -- -- Number of rounds too high -- Key transformation rounds -- Number of rounds too high -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or longer to open. -- -- -- Understood, keep number -- Understood, keep number -- -- -- Cancel -- Cancel -- -- -- Number of rounds too low -- Key transformation rounds -- Number of rounds too low -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database will not be protected from brute force attacks. -- -- -- KDF unchanged -- KDF unchanged -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- thread threads -- -- -- Change existing decryption time -- Change existing decryption time -- -- -- Decryption time in seconds -- Decryption time in seconds -- -- -- Database format -- Database format -- -- -- Encryption algorithm -- Encryption algorithm -- -- -- Key derivation function -- Key derivation function -- -- -- Transform rounds -- Transform rounds -- -- -- Memory usage -- Memory usage -- -- -- Parallelism -- Parallelism -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Exposed Entries -- -- -- Don't expose this database -- Don't expose this database -- -- -- Expose entries under this group: -- Expose entries under this group: -- -- -- Enable Secret Service to access these settings. -- Enable Secret Service to access these settings. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database Metadata -- -- -- Database name: -- Database name: -- -- -- Database description: -- Database description: -- -- -- Default username: -- Default username: -- -- -- History Settings -- History Settings -- -- -- Max. history items: -- Max. history items: -- -- -- Max. history size: -- Max. history size: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Use recycle bin -- -- -- Additional Database Settings -- Additional Database Settings -- -- -- Database name field -- Database name field -- -- -- Database description field -- Database description field -- -- -- Default username field -- Default username field -- -- -- Maximum number of history items per entry -- Maximum number of history items per entry -- -- -- Maximum size of history per entry -- Maximum size of history per entry -- -- -- Delete Recycle Bin -- Delete Recycle Bin -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- (old) -- (old) -- -- -- Enable compression (recommended) -- Enable compression (recommended) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Sharing -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Type -- -- -- Path -- Path -- -- -- Last Signer -- Last Signer -- -- -- Certificates -- Certificates -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Database Name: -- -- -- Description: -- Description: -- -- -- Database name field -- Database name field -- -- -- Database description field -- Database description field -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- All files -- All files -- -- -- Open database -- Open database -- -- -- CSV file -- CSV file -- -- -- Merge database -- Merge database -- -- -- Open KeePass 1 database -- Open KeePass 1 database -- -- -- KeePass 1 database -- KeePass 1 database -- -- -- Export database to CSV file -- Export database to CSV file -- -- -- Writing the CSV file failed. -- Writing the CSV file failed. -- -- -- Database creation error -- Database creation error -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- Select CSV file -- Select CSV file -- -- -- New Database -- New Database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [New Database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Locked] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Read-only] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Failed to open %1. It either does not exist or is not accessible. -- -- -- Export database to HTML file -- Export database to HTML file -- -- -- HTML file -- HTML file -- -- -- Writing the HTML file failed. -- Writing the HTML file failed. -- -- -- Export Confirmation -- Export Confirmation -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- Open OPVault -- Open OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Searching... -- -- -- Do you really want to delete the entry "%1" for good? -- Do you really want to delete the entry "%1" for good? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Do you really want to move entry "%1" to the recycle bin? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? -- -- -- Execute command? -- Execute command? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Do you really want to execute the following command?<br><br>%1<br> -- -- -- Remember my choice -- Remember my choice -- -- -- Do you really want to delete the group "%1" for good? -- Do you really want to delete the group "%1" for good? -- -- -- No current database. -- No current database. -- -- -- No source database, nothing to do. -- No source database, nothing to do. -- -- -- Search Results (%1) -- Search Results (%1) -- -- -- No Results -- No Results -- -- -- File has changed -- File has changed -- -- -- The database file has changed. Do you want to load the changes? -- The database file has changed. Do you want to load the changes? -- -- -- Merge Request -- Merge Request -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- -- -- Empty recycle bin? -- Empty recycle bin? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Are you sure you want to permanently delete everything from your recycle bin? -- -- -- Do you really want to delete %n entry(s) for good? -- Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? -- -- -- Delete entry(s)? -- Delete entry?Delete entries? -- -- -- Move entry(s) to recycle bin? -- Move entry to recycle bin?Move entries to recycle bin? -- -- -- Lock Database? -- Lock Database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- You are editing an entry. Discard changes and lock anyway? -- -- -- "%1" was modified. --Save changes? -- "%1" was modified. --Save changes? -- -- -- Database was modified. --Save changes? -- Database was modified. --Save changes? -- -- -- Save changes? -- Save changes? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- Disable safe saves? -- Disable safe saves? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- Passwords -- Passwords -- -- -- Save database as -- Save database as -- -- -- KeePass 2 Database -- KeePass 2 Database -- -- -- Replace references to entry? -- Replace references to entry? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- Delete group -- Delete group -- -- -- Move group to recycle bin? -- Move group to recycle bin? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Do you really want to move the group "%1" to the recycle bin? -- -- -- Successfully merged the database files. -- Successfully merged the database files. -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Shared group... -- Shared group... -- -- -- Writing the database failed: %1 -- Writing the database failed: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- This database is opened in read-only mode. Autosave is disabled. -- -- -- Save database backup -- Save database backup -- -- -- Could not find database file: %1 -- Could not find database file: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Entry -- -- -- Advanced -- Advanced -- -- -- Icon -- Icon -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- Properties -- -- -- History -- History -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- n/a -- -- -- (encrypted) -- (encrypted) -- -- -- Select private key -- Select private key -- -- -- Entry history -- Entry history -- -- -- Add entry -- Add entry -- -- -- Edit entry -- Edit entry -- -- -- New attribute -- New attribute -- -- -- Are you sure you want to remove this attribute? -- Are you sure you want to remove this attribute? -- -- -- Tomorrow -- Tomorrow -- -- -- %n week(s) -- %n week%n weeks -- -- -- %n month(s) -- %n month%n months -- -- -- Entry updated successfully. -- Entry updated successfully. -- -- -- New attribute %1 -- New attribute %1 -- -- -- %n year(s) -- %n year%n years -- -- -- Confirm Removal -- Confirm Removal -- -- -- Browser Integration -- Browser Integration -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Are you sure you want to remove this URL? -- -- -- Reveal -- Reveal -- -- -- Hide -- Hide -- -- -- Unsaved Changes -- Unsaved Changes -- -- -- Would you like to save changes to this entry? -- Would you like to save changes to this entry? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTECTED] Press Reveal to view or edit -- -- -- Invalid Entry -- Invalid Entry -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Additional attributes -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit Name -- Edit Name -- -- -- Protect -- Protect -- -- -- Reveal -- Reveal -- -- -- Attachments -- Attachments -- -- -- Foreground Color: -- Foreground Color: -- -- -- Background Color: -- Background Color: -- -- -- Attribute selection -- Attribute selection -- -- -- Attribute value -- Attribute value -- -- -- Add a new attribute -- Add a new attribute -- -- -- Remove selected attribute -- Remove selected attribute -- -- -- Edit attribute name -- Edit attribute name -- -- -- Toggle attribute protection -- Toggle attribute protection -- -- -- Show a protected attribute -- Show a protected attribute -- -- -- Foreground color selection -- Foreground color selection -- -- -- Background color selection -- Background color selection -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- Exclude from database reports -- Exclude from database reports -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Enable Auto-Type for this entry -- -- -- Window Associations -- Window Associations -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Window title: -- -- -- Use a specific sequence for this association: -- Use a specific sequence for this association: -- -- -- Custom Auto-Type sequence -- Custom Auto-Type sequence -- -- -- Open Auto-Type help webpage -- Open Auto-Type help webpage -- -- -- Existing window associations -- Existing window associations -- -- -- Add new window association -- Add new window association -- -- -- Remove selected window association -- Remove selected window association -- -- -- You can use an asterisk (*) to match everything -- You can use an asterisk (*) to match everything -- -- -- Set the window association title -- Set the window association title -- -- -- You can use an asterisk to match everything -- You can use an asterisk to match everything -- -- -- Custom Auto-Type sequence for this window -- Custom Auto-Type sequence for this window -- -- -- Inherit default Auto-Type sequence from the group -- Inherit default Auto-Type sequence from the group -- -- -- Use custom Auto-Type sequence: -- Use custom Auto-Type sequence: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- These settings affect the browser extension’s behavior with regard to this database entry. -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- Skip Auto-Submit for this entry -- -- -- Hide this entry from the browser extension -- Hide this entry from the browser extension -- -- -- Additional URL's -- Additional URLs -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Edit -- Edit -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- Use this entry only with HTTP Basic Auth -- Use this entry only with HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Show -- -- -- Restore -- Restore -- -- -- Delete -- Delete -- -- -- Delete all -- Delete all -- -- -- Entry history selection -- Entry history selection -- -- -- Show entry at selected history state -- Show entry at selected history state -- -- -- Restore entry to selected history state -- Restore entry to selected history state -- -- -- Delete selected history state -- Delete selected history state -- -- -- Delete all history -- Delete all history -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Password: -- -- -- Title: -- Title: -- -- -- Presets -- Presets -- -- -- Toggle the checkbox to reveal the notes section. -- Toggle the checkbox to reveal the notes section. -- -- -- Username: -- Username: -- -- -- Url field -- Url field -- -- -- Download favicon for URL -- Download favicon for URL -- -- -- Password field -- Password field -- -- -- Toggle notes visible -- Toggle notes visible -- -- -- Expiration field -- Expiration field -- -- -- Expiration Presets -- Expiration Presets -- -- -- Expiration presets -- Expiration presets -- -- -- Notes field -- Notes field -- -- -- Title field -- Title field -- -- -- Username field -- Username field -- -- -- Toggle expiration -- Toggle expiration -- -- -- Notes: -- Notes: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Expires: -- -- -- Edit Entry -- Edit Entry -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Form -- -- -- Remove key from agent after -- Remove key from agent after -- -- -- seconds -- seconds -- -- -- Fingerprint -- Fingerprint -- -- -- Remove key from agent when database is closed/locked -- Remove key from agent when database is closed/locked -- -- -- Public key -- Public key -- -- -- Add key to agent when database is opened/unlocked -- Add key to agent when database is opened/unlocked -- -- -- Comment -- Comment -- -- -- Decrypt -- Decrypt -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Copy to clipboard -- -- -- Private key -- Private key -- -- -- External file -- External file -- -- -- Browse... -- Button for opening file dialog -- Browse... -- -- -- Attachment -- Attachment -- -- -- Add to agent -- Add to agent -- -- -- Remove from agent -- Remove from agent -- -- -- Require user confirmation when this key is used -- Require user confirmation when this key is used -- -- -- Remove key from agent after specified seconds -- Remove key from agent after specified seconds -- -- -- Browser for key file -- Browser for key file -- -- -- External key file -- External key file -- -- -- Select attachment file -- Select attachment file -- -- -- -- EditGroupWidget -- -- Group -- Group -- -- -- Icon -- Icon -- -- -- Properties -- Properties -- -- -- Add group -- Add group -- -- -- Edit group -- Edit group -- -- -- Enable -- Enable -- -- -- Disable -- Disable -- -- -- Inherit from parent group (%1) -- Inherit from parent group (%1) -- -- -- Entry has unsaved changes -- Entry has unsaved changes -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Path: -- -- -- Password: -- Password: -- -- -- Inactive -- Inactive -- -- -- KeeShare unsigned container -- KeeShare unsigned container -- -- -- KeeShare signed container -- KeeShare signed container -- -- -- Select import source -- Select import source -- -- -- Select export target -- Select export target -- -- -- Select import/export file -- Select import/export file -- -- -- Clear -- Clear -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Synchronize -- Synchronize -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- %1 is already being exported by this database. -- %1 is already being exported by this database. -- -- -- %1 is already being imported by this database. -- %1 is already being imported by this database. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 is being imported and exported by different groups in this database. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare is currently disabled. You can enable import/export in the application settings. -- -- -- Database export is currently disabled by application settings. -- Database export is currently disabled by application settings. -- -- -- Database import is currently disabled by application settings. -- Database import is currently disabled by application settings. -- -- -- Sharing mode field -- Sharing mode field -- -- -- Path to share file field -- Path to share file field -- -- -- Password field -- Password field -- -- -- Clear fields -- Clear fields -- -- -- Browse for share file -- Browse for share file -- -- -- Browse... -- Browse... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Name field -- -- -- Notes field -- Notes field -- -- -- Toggle expiration -- Toggle expiration -- -- -- Auto-Type toggle for this and sub groups -- Auto-Type toggle for this and sub groups -- -- -- Expiration field -- Expiration field -- -- -- Search toggle for this and sub groups -- Search toggle for this and sub groups -- -- -- Default auto-type sequence field -- Default auto-type sequence field -- -- -- Expires: -- Expires: -- -- -- Use default Auto-Type sequence of parent group -- Use default Auto-Type sequence of parent group -- -- -- Auto-Type: -- Auto-Type: -- -- -- Search: -- Search: -- -- -- Notes: -- Notes: -- -- -- Name: -- Name: -- -- -- Set default Auto-Type sequence -- Set default Auto-Type sequence -- -- -- Edit Group -- Edit Group -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Add custom icon -- -- -- Delete custom icon -- Delete custom icon -- -- -- Download favicon -- Download favicon -- -- -- Unable to fetch favicon. -- Unable to fetch favicon. -- -- -- Images -- Images -- -- -- All files -- All files -- -- -- Confirm Delete -- Confirm Delete -- -- -- Select Image(s) -- Select Image(s) -- -- -- Successfully loaded %1 of %n icon(s) -- Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons -- -- -- No icons were loaded -- No icons were loaded -- -- -- %n icon(s) already exist in the database -- %n icon already exist in the database%n icons already exist in the database -- -- -- The following icon(s) failed: -- The following icon failed:The following icons failed: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- Download favicon for URL -- Download favicon for URL -- -- -- Apply selected icon to subgroups and entries -- Apply selected icon to subgroups and entries -- -- -- Also apply to child groups -- Also apply to child groups -- -- -- Also apply to child entries -- Also apply to child entries -- -- -- Also apply to all children -- Also apply to all children -- -- -- Existing icon selected. -- Existing icon selected. -- -- -- Use default icon -- Use default icon -- -- -- Use custom icon -- Use custom icon -- -- -- Apply icon to... -- Apply icon to... -- -- -- Apply to this group only -- Apply to this group only -- -- -- -- EditWidgetProperties -- -- Created: -- Created: -- -- -- Modified: -- Modified: -- -- -- Accessed: -- Accessed: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Plugin Data -- -- -- Remove -- Remove -- -- -- Delete plugin data? -- Delete plugin data? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- Key -- Key -- -- -- Value -- Value -- -- -- Datetime created -- Datetime created -- -- -- Datetime modified -- Datetime modified -- -- -- Datetime accessed -- Datetime accessed -- -- -- Unique ID -- Unique ID -- -- -- Plugin data -- Plugin data -- -- -- Remove selected plugin data -- Remove selected plugin data -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Name -- -- -- Size -- Size -- -- -- -- EntryAttachmentsWidget -- -- Form -- Form -- -- -- Add -- Add -- -- -- Remove -- Remove -- -- -- Open -- Open -- -- -- Save -- Save -- -- -- Select files -- Select files -- -- -- Are you sure you want to remove %n attachment(s)? -- Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? -- -- -- Save attachments -- Save attachments -- -- -- Unable to create directory: --%1 -- Unable to create directory: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- -- -- Confirm overwrite -- Confirm overwrite -- -- -- Unable to save attachments: --%1 -- Unable to save attachments: --%1 -- -- -- Unable to open attachment: --%1 -- Unable to open attachment: --%1 -- -- -- Unable to open attachments: --%1 -- Unable to open attachments: --%1 -- -- -- Confirm remove -- Confirm remove -- -- -- Unable to open file(s): --%1 -- Unable to open file: --%1Unable to open files: --%1 -- -- -- Attachments -- Attachments -- -- -- Add new attachment -- Add new attachment -- -- -- Remove selected attachment -- Remove selected attachment -- -- -- Open selected attachment -- Open selected attachment -- -- -- Save selected attachment to disk -- Save selected attachment to disk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- Confirm Attachment -- Confirm Attachment -- -- -- -- EntryAttributesModel -- -- Name -- Name -- -- -- -- EntryHistoryModel -- -- Last modified -- Last modified -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- URL -- URL -- -- -- Never -- Never -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Expires -- Expires -- -- -- Created -- Created -- -- -- Modified -- Modified -- -- -- Accessed -- Accessed -- -- -- Attachments -- Attachments -- -- -- Size -- Size -- -- -- Group name -- Group name -- -- -- Entry title -- Entry title -- -- -- Entry notes -- Entry notes -- -- -- Entry expires at -- Entry expires at -- -- -- Creation date -- Creation date -- -- -- Last modification date -- Last modification date -- -- -- Last access date -- Last access date -- -- -- Attached files -- Attached files -- -- -- Entry size -- Entry size -- -- -- Has attachments -- Has attachments -- -- -- Has TOTP one-time password -- Has TOTP one-time password -- -- -- -- EntryPreviewWidget -- -- Close -- Close -- -- -- General -- General -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Expiration -- Expiration -- -- -- URL -- URL -- -- -- Attributes -- Attributes -- -- -- Attachments -- Attachments -- -- -- Notes -- Notes -- -- -- Autotype -- Autotype -- -- -- Window -- Window -- -- -- Sequence -- Sequence -- -- -- Searching -- Searching -- -- -- Search -- Search -- -- -- Clear -- Clear -- -- -- Never -- Never -- -- -- [PROTECTED] -- [PROTECTED] -- -- -- Enabled -- Enabled -- -- -- Disabled -- Disabled -- -- -- Share -- Share -- -- -- Display current TOTP value -- Display current TOTP value -- -- -- Advanced -- Advanced -- -- -- Default Sequence -- Default Sequence -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Invalid URL -- -- -- -- EntryView -- -- Fit to window -- Fit to window -- -- -- Fit to contents -- Fit to contents -- -- -- Reset to defaults -- Reset to defaults -- -- -- Has attachments -- Entry attachment icon toggle -- Has attachments -- -- -- Has TOTP -- Entry TOTP icon toggle -- Has TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Entry "%1" from database "%2" was used by %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Failed to register DBus service at %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Entry was used by %1%n Entries were used by %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- File Name -- -- -- Group -- Group -- -- -- Manage -- Manage -- -- -- Unlock to show -- Unlock to show -- -- -- None -- None -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Application -- -- -- Manage -- Manage -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Unknown -- -- -- Unknown -- Unknown executable path -- Unknown -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Executable: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- Group -- -- [empty] -- group has no children -- [empty] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Online password validation failed -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Download Favicons -- -- -- Cancel -- Cancel -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- Close -- Close -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Please wait, processing entry list... -- -- -- Downloading... -- Downloading... -- -- -- Ok -- Ok -- -- -- Already Exists -- Already Exists -- -- -- Download Failed -- Download Failed -- -- -- Downloading favicons (%1/%2)... -- Downloading favicons (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Close -- -- -- Close message -- Close message -- -- -- -- Kdbx3Reader -- -- missing database headers -- missing database headers -- -- -- Header doesn't match hash -- Header doesn't match hash -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- Unable to issue challenge-response: %1 -- Unable to issue challenge-response: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Unable to issue challenge-response: %1 -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- -- Kdbx4Reader -- -- missing database headers -- missing database headers -- -- -- Invalid header checksum size -- Invalid header checksum size -- -- -- Header SHA256 mismatch -- Header SHA256 mismatch -- -- -- Unknown cipher -- Unknown cipher -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Failed to open buffer for KDF parameters in header -- Failed to open buffer for KDF parameters in header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- Legacy header fields found in KDBX4 file. -- Legacy header fields found in KDBX4 file. -- -- -- Invalid inner header id size -- Invalid inner header id size -- -- -- Invalid inner header field length -- Invalid inner header field length -- -- -- Invalid inner header binary size -- Invalid inner header binary size -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Unsupported KeePass variant map version. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name length -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name data -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry value length -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Invalid variant map entry value data -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Bool entry value length -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int32 entry value length -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt32 entry value length -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int64 entry value length -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt64 entry value length -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry type -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Invalid variant map field type size -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- (HMAC mismatch) -- (HMAC mismatch) -- -- -- Unable to calculate database key: %1 -- Unable to calculate database key: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Invalid symmetric cipher algorithm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Invalid symmetric cipher IV size. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Failed to serialize KDF parameters variant map -- -- -- Unable to calculate database key: %1 -- Unable to calculate database key: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Unsupported cipher -- -- -- Invalid compression flags length -- Invalid compression flags length -- -- -- Unsupported compression algorithm -- Unsupported compression algorithm -- -- -- Invalid master seed size -- Invalid master seed size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid transform rounds size -- Invalid transform rounds size -- -- -- Invalid start bytes size -- Invalid start bytes size -- -- -- Invalid random stream id size -- Invalid random stream id size -- -- -- Invalid inner random stream cipher -- Invalid inner random stream cipher -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- -- -- Unsupported KeePass 2 database version. -- Unsupported KeePass 2 database version. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Invalid cipher uuid length: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- Unable to parse UUID: %1 -- -- -- Failed to read database file. -- Failed to read database file. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML parsing failure: %1 -- -- -- No root group -- No root group -- -- -- Missing icon uuid or data -- Missing icon uuid or data -- -- -- Missing custom data key or value -- Missing custom data key or value -- -- -- Multiple group elements -- Multiple group elements -- -- -- Null group uuid -- Null group uuid -- -- -- Invalid group icon number -- Invalid group icon number -- -- -- Invalid EnableAutoType value -- Invalid EnableAutoType value -- -- -- Invalid EnableSearching value -- Invalid EnableSearching value -- -- -- No group uuid found -- No group uuid found -- -- -- Null DeleteObject uuid -- Null DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Missing DeletedObject uuid or time -- -- -- Null entry uuid -- Null entry uuid -- -- -- Invalid entry icon number -- Invalid entry icon number -- -- -- History element in history entry -- History element in history entry -- -- -- No entry uuid found -- No entry uuid found -- -- -- History element with different uuid -- History element with different uuid -- -- -- Duplicate custom attribute found -- Duplicate custom attribute found -- -- -- Entry string key or value missing -- Entry string key or value missing -- -- -- Entry binary key or value missing -- Entry binary key or value missing -- -- -- Auto-type association window or sequence missing -- Auto-type association window or sequence missing -- -- -- Invalid bool value -- Invalid bool value -- -- -- Invalid date time value -- Invalid date time value -- -- -- Invalid color value -- Invalid color value -- -- -- Invalid color rgb part -- Invalid color rgb part -- -- -- Invalid number value -- Invalid number value -- -- -- Invalid uuid value -- Invalid uuid value -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Unable to decompress binary -- -- -- XML error: --%1 --Line %2, column %3 -- XML error: --%1 --Line %2, column %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Invalid KeeAgent settings file structure. -- -- -- Private key is an attachment but no attachments provided. -- Private key is an attachment but no attachments provided. -- -- -- Private key is empty -- Private key is empty -- -- -- File too large to be a private key -- File too large to be a private key -- -- -- Failed to open private key -- Failed to open private key -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Unable to open the database. -- -- -- Import KeePass1 Database -- Import KeePass1 Database -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Unable to read keyfile. -- -- -- Not a KeePass database. -- Not a KeePass database. -- -- -- Unsupported encryption algorithm. -- Unsupported encryption algorithm. -- -- -- Unsupported KeePass database version. -- Unsupported KeePass database version. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Unable to read encryption IV -- -- -- Invalid number of groups -- Invalid number of groups -- -- -- Invalid number of entries -- Invalid number of entries -- -- -- Invalid content hash size -- Invalid content hash size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid number of transform rounds -- Invalid number of transform rounds -- -- -- Unable to construct group tree -- Unable to construct group tree -- -- -- Root -- Root -- -- -- Key transformation failed -- Key transformation failed -- -- -- Invalid group field type number -- Invalid group field type number -- -- -- Invalid group field size -- Invalid group field size -- -- -- Read group field data doesn't match size -- Read group field data doesn't match size -- -- -- Incorrect group id field size -- Incorrect group id field size -- -- -- Incorrect group creation time field size -- Incorrect group creation time field size -- -- -- Incorrect group modification time field size -- Incorrect group modification time field size -- -- -- Incorrect group access time field size -- Incorrect group access time field size -- -- -- Incorrect group expiry time field size -- Incorrect group expiry time field size -- -- -- Incorrect group icon field size -- Incorrect group icon field size -- -- -- Incorrect group level field size -- Incorrect group level field size -- -- -- Invalid group field type -- Invalid group field type -- -- -- Missing group id or level -- Missing group id or level -- -- -- Missing entry field type number -- Missing entry field type number -- -- -- Invalid entry field size -- Invalid entry field size -- -- -- Read entry field data doesn't match size -- Read entry field data doesn't match size -- -- -- Invalid entry uuid field size -- Invalid entry UUID field size -- -- -- Invalid entry group id field size -- Invalid entry group id field size -- -- -- Invalid entry icon field size -- Invalid entry icon field size -- -- -- Invalid entry creation time field size -- Invalid entry creation time field size -- -- -- Invalid entry modification time field size -- Invalid entry modification time field size -- -- -- Invalid entry expiry time field size -- Invalid entry expiry time field size -- -- -- Invalid entry field type -- Invalid entry field type -- -- -- unable to seek to content position -- unable to seek to content position -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- -- KeeShare -- -- Invalid sharing reference -- Invalid sharing reference -- -- -- Inactive share %1 -- Inactive share %1 -- -- -- Imported from %1 -- Imported from %1 -- -- -- Exported to %1 -- Exported to %1 -- -- -- Synchronized with %1 -- Synchronized with %1 -- -- -- Import is disabled in settings -- Import is disabled in settings -- -- -- Export is disabled in settings -- Export is disabled in settings -- -- -- Inactive share -- Inactive share -- -- -- Imported from -- Imported from -- -- -- Exported to -- Exported to -- -- -- Synchronized with -- Synchronized with -- -- -- -- KeyComponentWidget -- -- Key Component -- Key Component -- -- -- Key Component Description -- Key Component Description -- -- -- Cancel -- Cancel -- -- -- Key Component set, click to change or remove -- Key Component set, click to change or remove -- -- -- Add %1 -- Add a key component -- Add %1 -- -- -- Change %1 -- Change a key component -- Change %1 -- -- -- Remove %1 -- Remove a key component -- Remove %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 set, click to change or remove -- -- -- -- KeyFileEditWidget -- -- Generate -- Generate -- -- -- Key File -- Key File -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out.</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Error loading the key file '%1' --Message: %2 -- -- -- Key files -- Key files -- -- -- All files -- All files -- -- -- Create Key File... -- Create Key File... -- -- -- Error creating key file -- Error creating key file -- -- -- Unable to create key file: %1 -- Unable to create key file: %1 -- -- -- Select a key file -- Select a key file -- -- -- Key file selection -- Key file selection -- -- -- Browse for key file -- Browse for key file -- -- -- Browse... -- Browse... -- -- -- Generate a new key file -- Generate a new key file -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- Invalid Key File -- Invalid Key File -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- Suspicious Key File -- Suspicious Key File -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- Old key file format -- Old key file format -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Help -- -- -- &Groups -- &Groups -- -- -- &Tools -- &Tools -- -- -- &Quit -- &Quit -- -- -- &About -- &About -- -- -- Database settings -- Database settings -- -- -- Copy username to clipboard -- Copy username to clipboard -- -- -- Copy password to clipboard -- Copy password to clipboard -- -- -- &Settings -- &Settings -- -- -- &Title -- &Title -- -- -- Copy title to clipboard -- Copy title to clipboard -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copy URL to clipboard -- -- -- &Notes -- &Notes -- -- -- Copy notes to clipboard -- Copy notes to clipboard -- -- -- Copy &TOTP -- Copy &TOTP -- -- -- E&mpty recycle bin -- E&mpty recycle bin -- -- -- Clear history -- Clear history -- -- -- Access error for config file %1 -- Access error for config file %1 -- -- -- Settings -- Settings -- -- -- Toggle window -- Toggle window -- -- -- Quit KeePassXC -- Quit KeePassXC -- -- -- Please touch the button on your YubiKey! -- Please touch the button on your YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- WARNING: You are using an unstable build of KeePassXC. --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- &Donate -- &Donate -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- &Import -- &Import -- -- -- Create a new database -- Create a new database -- -- -- Merge from another KDBX database -- Merge from another KDBX database -- -- -- Add a new entry -- Add a new entry -- -- -- View or edit entry -- View or edit entry -- -- -- Add a new group -- Add a new group -- -- -- Perform &Auto-Type -- Perform &Auto-Type -- -- -- Open &URL -- Open &URL -- -- -- Import a KeePass 1 database -- Import a KeePass 1 database -- -- -- Import a CSV file -- Import a CSV file -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTE: You are using a pre-release version of KeePassXC. --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- Check for updates on startup? -- Check for updates on startup? -- -- -- Would you like KeePassXC to check for updates on startup? -- Would you like KeePassXC to check for updates on startup? -- -- -- You can always check for updates manually from the application menu. -- You can always check for updates manually from the application menu. -- -- -- &Export -- &Export -- -- -- Sort &A-Z -- Sort &A-Z -- -- -- Sort &Z-A -- Sort &Z-A -- -- -- &Password Generator -- &Password Generator -- -- -- Import a 1Password Vault -- Import a 1Password Vault -- -- -- &Getting Started -- &Getting Started -- -- -- &User Guide -- &User Guide -- -- -- &Keyboard Shortcuts -- &Keyboard Shortcuts -- -- -- &Recent Databases -- &Recent Databases -- -- -- &Entries -- &Entries -- -- -- Copy Att&ribute -- Copy Att&ribute -- -- -- TOTP -- TOTP -- -- -- View -- View -- -- -- Theme -- Theme -- -- -- &Check for Updates -- &Check for Updates -- -- -- &Open Database… -- &Open Database… -- -- -- &Save Database -- &Save Database -- -- -- &Close Database -- &Close Database -- -- -- &New Database… -- &New Database… -- -- -- &Merge From Database… -- &Merge From Database… -- -- -- &New Entry… -- &New Entry… -- -- -- &Edit Entry… -- &Edit Entry… -- -- -- &Delete Entry… -- &Delete Entry… -- -- -- &New Group… -- &New Group… -- -- -- &Edit Group… -- &Edit Group… -- -- -- &Delete Group… -- &Delete Group… -- -- -- Download All &Favicons… -- Download All &Favicons… -- -- -- Sa&ve Database As… -- Sa&ve Database As… -- -- -- Database &Security… -- Database &Security… -- -- -- Database &Reports... -- Database &Reports... -- -- -- Statistics, health check, etc. -- Statistics, health check, etc. -- -- -- &Database Settings… -- &Database Settings… -- -- -- &Clone Entry… -- &Clone Entry… -- -- -- Move u&p -- Move u&p -- -- -- Move entry one step up -- Move entry one step up -- -- -- Move do&wn -- Move do&wn -- -- -- Move entry one step down -- Move entry one step down -- -- -- Copy &Username -- Copy &Username -- -- -- Copy &Password -- Copy &Password -- -- -- Download &Favicon -- Download &Favicon -- -- -- &Lock Databases -- &Lock Databases -- -- -- &CSV File… -- &CSV File… -- -- -- &HTML File… -- &HTML File… -- -- -- KeePass 1 Database… -- KeePass 1 Database… -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- CSV File… -- -- -- Show TOTP -- Show TOTP -- -- -- Show QR Code -- Show QR Code -- -- -- Set up TOTP… -- Set up TOTP… -- -- -- Report a &Bug -- Report a &Bug -- -- -- Open Getting Started Guide -- Open Getting Started Guide -- -- -- &Online Help -- &Online Help -- -- -- Go to online documentation -- Go to online documentation -- -- -- Open User Guide -- Open User Guide -- -- -- Save Database Backup... -- Save Database Backup... -- -- -- Add key to SSH Agent -- Add key to SSH Agent -- -- -- Remove key from SSH Agent -- Remove key from SSH Agent -- -- -- Compact Mode -- Compact Mode -- -- -- Automatic -- Automatic -- -- -- Light -- Light -- -- -- Dark -- Dark -- -- -- Classic (Platform-native) -- Classic (Platform-native) -- -- -- Show Toolbar -- Show Toolbar -- -- -- Show Preview Panel -- Show Preview Panel -- -- -- Don't show again for this version -- Don't show again for this version -- -- -- Restart Application? -- Restart Application? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- Perform Auto-Type Sequence -- Perform Auto-Type Sequence -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- Always on Top -- -- -- Hide Usernames -- Hide Usernames -- -- -- Hide Passwords -- Hide Passwords -- -- -- -- ManageDatabase -- -- Database settings -- Database settings -- -- -- Edit database settings -- Edit database settings -- -- -- Unlock database -- Unlock database -- -- -- Unlock database to show more information -- Unlock database to show more information -- -- -- Lock database -- Lock database -- -- -- -- ManageSession -- -- Disconnect -- Disconnect -- -- -- Disconnect this application -- Disconnect this application -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Creating missing %1 [%2] -- -- -- Relocating %1 [%2] -- Relocating %1 [%2] -- -- -- Overwriting %1 [%2] -- Overwriting %1 [%2] -- -- -- older entry merged from database "%1" -- older entry merged from database "%1" -- -- -- Adding backup for older target %1 [%2] -- Adding backup for older target %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Adding backup for older source %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronizing from newer source %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronizing from older source %1 [%2] -- -- -- Deleting child %1 [%2] -- Deleting child %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Deleting orphan %1 [%2] -- -- -- Changed deleted objects -- Changed deleted objects -- -- -- Adding missing icon %1 -- Adding missing icon %1 -- -- -- Removed custom data %1 [%2] -- Removed custom data %1 [%2] -- -- -- Adding custom data %1 [%2] -- Adding custom data %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Create a new KeePassXC database... -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- WizardPage -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- Advanced Settings -- Advanced Settings -- -- -- Simple Settings -- Simple Settings -- -- -- Encryption Settings -- Encryption Settings -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Database Credentials -- -- -- A set of credentials known only to you that protects your database. -- A set of credentials known only to you that protects your database. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Encryption Settings -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- General Database Information -- -- -- Please fill in the display name and an optional description for your new database: -- Please fill in the display name and an optional description for your new database: -- -- -- -- NixUtils -- -- Password Manager -- Password Manager -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Invalid OpData01, does not contain header -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- Unable to init cipher for opdata01: %1 -- Unable to init cipher for opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Unable to read all HMAC signature bytes -- -- -- Malformed OpData01 due to a failed HMAC -- Malformed OpData01 due to a failed HMAC -- -- -- Unable to process clearText in place -- Unable to process clearText in place -- -- -- Expected %1 bytes of clear-text, found %2 -- Expected %1 bytes of clear-text, found %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Read Database did not produce an instance --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Directory .opvault must exist -- -- -- Directory .opvault must be readable -- Directory .opvault must be readable -- -- -- Directory .opvault/default must exist -- Directory .opvault/default must exist -- -- -- Directory .opvault/default must be readable -- Directory .opvault/default must be readable -- -- -- Unable to decode masterKey: %1 -- Unable to decode masterKey: %1 -- -- -- Unable to derive master key: %1 -- Unable to derive master key: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Invalid key file, expecting an OpenSSH key -- -- -- PEM boundary mismatch -- PEM boundary mismatch -- -- -- Base64 decoding failed -- Base64 decoding failed -- -- -- Key file way too small. -- Key file way too small. -- -- -- Key file magic header id invalid -- Key file magic header id invalid -- -- -- Found zero keys -- Found zero keys -- -- -- Failed to read public key. -- Failed to read public key. -- -- -- Corrupted key file, reading private key failed -- Corrupted key file, reading private key failed -- -- -- No private key payload to decrypt -- No private key payload to decrypt -- -- -- Trying to run KDF without cipher -- Trying to run KDF without cipher -- -- -- Passphrase is required to decrypt this key -- Passphrase is required to decrypt this key -- -- -- Key derivation failed, key file corrupted? -- Key derivation failed, key file corrupted? -- -- -- Decryption failed, wrong passphrase? -- Decryption failed, wrong passphrase? -- -- -- Unexpected EOF while reading public key -- Unexpected EOF while reading public key -- -- -- Unexpected EOF while reading private key -- Unexpected EOF while reading private key -- -- -- Can't write public key as it is empty -- Can't write public key as it is empty -- -- -- Unexpected EOF when writing public key -- Unexpected EOF when writing public key -- -- -- Can't write private key as it is empty -- Can't write private key as it is empty -- -- -- Unexpected EOF when writing private key -- Unexpected EOF when writing private key -- -- -- Unsupported key type: %1 -- Unsupported key type: %1 -- -- -- Unknown cipher: %1 -- Unknown cipher: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cipher IV is too short for MD5 kdf -- -- -- Unknown KDF: %1 -- Unknown KDF: %1 -- -- -- Unknown key type: %1 -- Unknown key type: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Passwords do not match -- -- -- Passwords match so far -- Passwords match so far -- -- -- Toggle Password (%1) -- Toggle Password (%1) -- -- -- Generate Password (%1) -- Generate Password (%1) -- -- -- Warning: Caps Lock enabled! -- Warning: Caps Lock enabled! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Enter password: -- -- -- Confirm password: -- Confirm password: -- -- -- Password -- Password -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- Passwords do not match. -- Passwords do not match. -- -- -- Password field -- Password field -- -- -- Repeat password field -- Repeat password field -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- strength -- -- -- entropy -- entropy -- -- -- Password -- Password -- -- -- Character Types -- Character Types -- -- -- Numbers -- Numbers -- -- -- Extended ASCII -- Extended ASCII -- -- -- Exclude look-alike characters -- Exclude look-alike characters -- -- -- Pick characters from every group -- Pick characters from every group -- -- -- &Length: -- &Length: -- -- -- Passphrase -- Passphrase -- -- -- Wordlist: -- Wordlist: -- -- -- Word Separator: -- Word Separator: -- -- -- Close -- Close -- -- -- Entropy: %1 bit -- Entropy: %1 bit -- -- -- Password Quality: %1 -- Password Quality: %1 -- -- -- Poor -- Password quality -- Poor -- -- -- Weak -- Password quality -- Weak -- -- -- Good -- Password quality -- Good -- -- -- Excellent -- Password quality -- Excellent -- -- -- Switch to advanced mode -- Switch to advanced mode -- -- -- Advanced -- Advanced -- -- -- Braces -- Braces -- -- -- Punctuation -- Punctuation -- -- -- Quotes -- Quotes -- -- -- Logograms -- Logograms -- -- -- Character set to exclude from generated password -- Character set to exclude from generated password -- -- -- Do not include: -- Do not include: -- -- -- Add non-hex letters to "do not include" list -- Add non-hex letters to "do not include" list -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Generated password -- -- -- Upper-case letters -- Upper-case letters -- -- -- Lower-case letters -- Lower-case letters -- -- -- Special characters -- Special characters -- -- -- Math Symbols -- Math Symbols -- -- -- Dashes and Slashes -- Dashes and Slashes -- -- -- Excluded characters -- Excluded characters -- -- -- Hex Passwords -- Hex Passwords -- -- -- Password length -- Password length -- -- -- Word Case: -- Word Case: -- -- -- Regenerate password -- Regenerate password -- -- -- Copy password -- Copy password -- -- -- lower case -- lower case -- -- -- UPPER CASE -- UPPER CASE -- -- -- Title Case -- Title Case -- -- -- Generate Password -- Generate Password -- -- -- Also choose from: -- Also choose from: -- -- -- Additional characters to use for the generated password -- Additional characters to use for the generated password -- -- -- Additional characters -- Additional characters -- -- -- Word Count: -- Word Count: -- -- -- Esc -- Esc -- -- -- Apply Password -- Apply Password -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Regenerate password (%1) -- -- -- Special Characters -- Special Characters -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistics -- -- -- Very weak password -- Very weak password -- -- -- Password entropy is %1 bits -- Password entropy is %1 bits -- -- -- Weak password -- Weak password -- -- -- Used in %1/%2 -- Used in %1/%2 -- -- -- Password is used %1 times -- Password is used %1 times -- -- -- Password has expired -- Password has expired -- -- -- Password expiry was %1 -- Password expiry was %1 -- -- -- Password is about to expire -- Password is about to expire -- -- -- Password expires in %1 days -- Password expires in %1 days -- -- -- Password will expire soon -- Password will expire soon -- -- -- Password expires on %1 -- Password expires on %1 -- -- -- Health Check -- Health Check -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Overwrite -- -- -- Delete -- Delete -- -- -- Move -- Move -- -- -- Empty -- Empty -- -- -- Remove -- Remove -- -- -- Skip -- Skip -- -- -- Disable -- Disable -- -- -- Merge -- Merge -- -- -- Continue -- Continue -- -- -- -- QObject -- -- Database not opened -- Database not opened -- -- -- Database hash not available -- Database hash not available -- -- -- Client public key not received -- Client public key not received -- -- -- Cannot decrypt message -- Cannot decrypt message -- -- -- Action cancelled or denied -- Action cancelled or denied -- -- -- KeePassXC association failed, try again -- KeePassXC association failed, try again -- -- -- Encryption key is not recognized -- Encryption key is not recognized -- -- -- Incorrect action -- Incorrect action -- -- -- Empty message received -- Empty message received -- -- -- No URL provided -- No URL provided -- -- -- No logins found -- No logins found -- -- -- Unknown error -- Unknown error -- -- -- Add a new entry to a database. -- Add a new entry to a database. -- -- -- Path of the database. -- Path of the database. -- -- -- Key file of the database. -- Key file of the database. -- -- -- path -- path -- -- -- Username for the entry. -- Username for the entry. -- -- -- username -- username -- -- -- URL for the entry. -- URL for the entry. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Prompt for the entry's password. -- -- -- Generate a password for the entry. -- Generate a password for the entry. -- -- -- length -- length -- -- -- Path of the entry to add. -- Path of the entry to add. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Path of the entry to clip. -- -- -- Timeout in seconds before clearing the clipboard. -- Timeout in seconds before clearing the clipboard. -- -- -- Edit an entry. -- Edit an entry. -- -- -- Title for the entry. -- Title for the entry. -- -- -- title -- title -- -- -- Path of the entry to edit. -- Path of the entry to edit. -- -- -- Estimate the entropy of a password. -- Estimate the entropy of a password. -- -- -- Password for which to estimate the entropy. -- Password for which to estimate the entropy. -- -- -- Perform advanced analysis on the password. -- Perform advanced analysis on the password. -- -- -- -- --Available commands: -- -- -- --Available commands: -- -- -- -- Name of the command to execute. -- Name of the command to execute. -- -- -- List database entries. -- List database entries. -- -- -- Path of the group to list. Default is / -- Path of the group to list. Default is / -- -- -- Find entries quickly. -- Find entries quickly. -- -- -- Search term. -- Search term. -- -- -- Merge two databases. -- Merge two databases. -- -- -- Path of the database to merge from. -- Path of the database to merge from. -- -- -- Use the same credentials for both database files. -- Use the same credentials for both database files. -- -- -- Key file of the database to merge from. -- Key file of the database to merge from. -- -- -- Show an entry's information. -- Show an entry's information. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- -- -- attribute -- attribute -- -- -- Name of the entry to show. -- Name of the entry to show. -- -- -- NULL device -- NULL device -- -- -- error reading from device -- error reading from device -- -- -- malformed string -- malformed string -- -- -- missing closing quote -- missing closing quote -- -- -- Group -- Group -- -- -- Title -- Title -- -- -- Username -- Username -- -- -- Password -- Password -- -- -- Notes -- Notes -- -- -- Last Modified -- Last Modified -- -- -- Created -- Created -- -- -- Browser Integration -- Browser Integration -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- Generate a new random diceware passphrase. -- -- -- Word count for the diceware passphrase. -- Word count for the diceware passphrase. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- Generate a new random password. -- Generate a new random password. -- -- -- Could not create entry with path %1. -- Could not create entry with path %1. -- -- -- Enter password for new entry: -- Enter password for new entry: -- -- -- Writing the database failed %1. -- Writing the database failed %1. -- -- -- Successfully added entry %1. -- Successfully added entry %1. -- -- -- Invalid timeout value %1. -- Invalid timeout value %1. -- -- -- Entry %1 not found. -- Entry %1 not found. -- -- -- Entry with path %1 has no TOTP set up. -- Entry with path %1 has no TOTP set up. -- -- -- Clearing the clipboard in %1 second(s)... -- Clearing the clipboard in %1 second...Clearing the clipboard in %1 seconds... -- -- -- Clipboard cleared! -- Clipboard cleared! -- -- -- Silence password prompt and other secondary outputs. -- Silence password prompt and other secondary outputs. -- -- -- count -- CLI parameter -- count -- -- -- Could not find entry with path %1. -- Could not find entry with path %1. -- -- -- Not changing any field for entry %1. -- Not changing any field for entry %1. -- -- -- Enter new password for entry: -- Enter new password for entry: -- -- -- Writing the database failed: %1 -- Writing the database failed: %1 -- -- -- Successfully edited entry %1. -- Successfully edited entry %1. -- -- -- Length %1 -- Length %1 -- -- -- Entropy %1 -- Entropy %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-word extra bits %1 -- -- -- Type: Bruteforce -- Type: Bruteforce -- -- -- Type: Dictionary -- Type: Dictionary -- -- -- Type: Dict+Leet -- Type: Dict+Leet -- -- -- Type: User Words -- Type: User Words -- -- -- Type: User+Leet -- Type: User+Leet -- -- -- Type: Repeated -- Type: Repeated -- -- -- Type: Sequence -- Type: Sequence -- -- -- Type: Spatial -- Type: Spatial -- -- -- Type: Date -- Type: Date -- -- -- Type: Bruteforce(Rep) -- Type: Bruteforce(Rep) -- -- -- Type: Dictionary(Rep) -- Type: Dictionary(Rep) -- -- -- Type: Dict+Leet(Rep) -- Type: Dict+Leet(Rep) -- -- -- Type: User Words(Rep) -- Type: User Words(Rep) -- -- -- Type: User+Leet(Rep) -- Type: User+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Type: Repeated(Rep) -- -- -- Type: Sequence(Rep) -- Type: Sequence(Rep) -- -- -- Type: Spatial(Rep) -- Type: Spatial(Rep) -- -- -- Type: Date(Rep) -- Type: Date(Rep) -- -- -- Type: Unknown%1 -- Type: Unknown%1 -- -- -- Entropy %1 (%2) -- Entropy %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- Failed to load key file %1: %2 -- Failed to load key file %1: %2 -- -- -- Length of the generated password -- Length of the generated password -- -- -- Use lowercase characters -- Use lowercase characters -- -- -- Use uppercase characters -- Use uppercase characters -- -- -- Use special characters -- Use special characters -- -- -- Use extended ASCII -- Use extended ASCII -- -- -- Exclude character set -- Exclude character set -- -- -- chars -- chars -- -- -- Exclude similar looking characters -- Exclude similar looking characters -- -- -- Include characters from every selected group -- Include characters from every selected group -- -- -- Recursively list the elements of the group. -- Recursively list the elements of the group. -- -- -- Cannot find group %1. -- Cannot find group %1. -- -- -- Error reading merge file: --%1 -- Error reading merge file: --%1 -- -- -- Unable to save database to file : %1 -- Unable to save database to file : %1 -- -- -- Unable to save database to file: %1 -- Unable to save database to file: %1 -- -- -- Successfully recycled entry %1. -- Successfully recycled entry %1. -- -- -- Successfully deleted entry %1. -- Successfully deleted entry %1. -- -- -- Show the entry's current TOTP. -- Show the entry's current TOTP. -- -- -- ERROR: unknown attribute %1. -- ERROR: unknown attribute %1. -- -- -- No program defined for clipboard manipulation -- No program defined for clipboard manipulation -- -- -- file empty -- file empty -- -- -- %1: (row, col) %2,%3 -- %1: (row, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Invalid Settings -- -- -- Invalid Key -- TOTP -- Invalid Key -- -- -- Message encryption failed. -- Message encryption failed. -- -- -- No groups found -- No groups found -- -- -- Create a new database. -- Create a new database. -- -- -- File %1 already exists. -- File %1 already exists. -- -- -- Loading the key file failed -- Loading the key file failed -- -- -- No key is set. Aborting database creation. -- No key is set. Aborting database creation. -- -- -- Failed to save the database: %1. -- Failed to save the database: %1. -- -- -- Successfully created new database. -- Successfully created new database. -- -- -- Creating KeyFile %1 failed: %2 -- Creating KeyFile %1 failed: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Loading KeyFile %1 failed: %2 -- -- -- Path of the entry to remove. -- Path of the entry to remove. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- The lock file could not be created. Single-instance mode disabled. -- The lock file could not be created. Single-instance mode disabled. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - cross-platform password manager -- -- -- filenames of the password databases to open (*.kdbx) -- filenames of the password databases to open (*.kdbx) -- -- -- path to a custom config file -- path to a custom config file -- -- -- key file of the database -- key file of the database -- -- -- read password of the database from stdin -- read password of the database from stdin -- -- -- Another instance of KeePassXC is already running. -- Another instance of KeePassXC is already running. -- -- -- Fatal error while testing the cryptographic functions. -- Fatal error while testing the cryptographic functions. -- -- -- KeePassXC - Error -- KeePassXC - Error -- -- -- Database password: -- Database password: -- -- -- Cannot create new group -- Cannot create new group -- -- -- Deactivate password key for the database. -- Deactivate password key for the database. -- -- -- Displays debugging information. -- Displays debugging information. -- -- -- Deactivate password key for the database to merge from. -- Deactivate password key for the database to merge from. -- -- -- Version %1 -- Version %1 -- -- -- Build Type: %1 -- Build Type: %1 -- -- -- Revision: %1 -- Revision: %1 -- -- -- Distribution: %1 -- Distribution: %1 -- -- -- Debugging mode is disabled. -- Debugging mode is disabled. -- -- -- Debugging mode is enabled. -- Debugging mode is enabled. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (signed and unsigned sharing) -- -- -- KeeShare (only signed sharing) -- KeeShare (only signed sharing) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (only unsigned sharing) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- None -- -- -- Enabled extensions: -- Enabled extensions: -- -- -- Cryptographic libraries: -- Cryptographic libraries: -- -- -- Cannot generate a password and prompt at the same time! -- Cannot generate a password and prompt at the same time! -- -- -- Adds a new group to a database. -- Adds a new group to a database. -- -- -- Path of the group to add. -- Path of the group to add. -- -- -- Group %1 already exists! -- Group %1 already exists! -- -- -- Group %1 not found. -- Group %1 not found. -- -- -- Successfully added group %1. -- Successfully added group %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- Analyze passwords for weaknesses and problems. -- -- -- Failed to open HIBP file %1: %2 -- Failed to open HIBP file %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Evaluating database entries against HIBP file, this will take a while... -- -- -- Close the currently opened database. -- Close the currently opened database. -- -- -- Display this help. -- Display this help. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Invalid word count %1 -- -- -- The word list is too small (< 1000 items) -- The word list is too small (< 1000 items) -- -- -- Exit interactive mode. -- Exit interactive mode. -- -- -- Exports the content of a database to standard output in the specified format. -- Exports the content of a database to standard output in the specified format. -- -- -- Unable to export database to XML: %1 -- Unable to export database to XML: %1 -- -- -- Unsupported format %1 -- Unsupported format %1 -- -- -- Use numbers -- Use numbers -- -- -- Invalid password length %1 -- Invalid password length %1 -- -- -- Display command help. -- Display command help. -- -- -- Available commands: -- Available commands: -- -- -- Import the contents of an XML database. -- Import the contents of an XML database. -- -- -- Path of the XML database export. -- Path of the XML database export. -- -- -- Path of the new database. -- Path of the new database. -- -- -- Successfully imported database. -- Successfully imported database. -- -- -- Unknown command %1 -- Unknown command %1 -- -- -- Flattens the output to single lines. -- Flattens the output to single lines. -- -- -- Only print the changes detected by the merge operation. -- Only print the changes detected by the merge operation. -- -- -- Yubikey slot for the second database. -- Yubikey slot for the second database. -- -- -- Successfully merged %1 into %2. -- Successfully merged %1 into %2. -- -- -- Database was not modified by merge operation. -- Database was not modified by merge operation. -- -- -- Moves an entry to a new group. -- Moves an entry to a new group. -- -- -- Path of the entry to move. -- Path of the entry to move. -- -- -- Path of the destination group. -- Path of the destination group. -- -- -- Could not find group with path %1. -- Could not find group with path %1. -- -- -- Entry is already in group %1. -- Entry is already in group %1. -- -- -- Successfully moved entry %1 to group %2. -- Successfully moved entry %1 to group %2. -- -- -- Open a database. -- Open a database. -- -- -- Path of the group to remove. -- Path of the group to remove. -- -- -- Cannot remove root group from database. -- Cannot remove root group from database. -- -- -- Successfully recycled group %1. -- Successfully recycled group %1. -- -- -- Successfully deleted group %1. -- Successfully deleted group %1. -- -- -- Failed to open database file %1: not found -- Failed to open database file %1: not found -- -- -- Failed to open database file %1: not a plain file -- Failed to open database file %1: not a plain file -- -- -- Failed to open database file %1: not readable -- Failed to open database file %1: not readable -- -- -- Enter password to unlock %1: -- Enter password to unlock %1: -- -- -- Invalid YubiKey slot %1 -- Invalid YubiKey slot %1 -- -- -- Enter password to encrypt database (optional): -- Enter password to encrypt database (optional): -- -- -- HIBP file, line %1: parse error -- HIBP file, line %1: parse error -- -- -- Secret Service Integration -- Secret Service Integration -- -- -- User name -- User name -- -- -- Password for '%1' has been leaked %2 time(s)! -- Password for '%1' has been leaked %2 time!Password for '%1' has been leaked %2 times! -- -- -- Invalid password generator after applying all options -- Invalid password generator after applying all options -- -- -- Show the protected attributes in clear text. -- Show the protected attributes in clear text. -- -- -- Browser Plugin Failure -- Browser Plugin Failure -- -- -- Could not save the native messaging script file for %1. -- Could not save the native messaging script file for %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Copy an entry's attribute to the clipboard. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- Attribute "%1" not found. -- Attribute "%1" not found. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Entry's "%1" attribute copied to the clipboard! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Target decryption time in MS for the database. -- -- -- time -- time -- -- -- Set the key file for the database. -- Set the key file for the database. -- -- -- Set a password for the database. -- Set a password for the database. -- -- -- Invalid decryption time %1. -- Invalid decryption time %1. -- -- -- Target decryption time must be between %1 and %2. -- Target decryption time must be between %1 and %2. -- -- -- Failed to set database password. -- Failed to set database password. -- -- -- Benchmarking key derivation function for %1ms delay. -- Benchmarking key derivation function for %1ms delay. -- -- -- Setting %1 rounds for key derivation function. -- Setting %1 rounds for key derivation function. -- -- -- error while setting database key derivation settings. -- error while setting database key derivation settings. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- Unable to import XML database: %1 -- Unable to import XML database: %1 -- -- -- Show a database's information. -- Show a database's information. -- -- -- UUID: -- UUID: -- -- -- Name: -- Name: -- -- -- Description: -- Description: -- -- -- Cipher: -- Cipher: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Recycle bin is enabled. -- -- -- Recycle bin is not enabled. -- Recycle bin is not enabled. -- -- -- Invalid command %1. -- Invalid command %1. -- -- -- Invalid YubiKey serial %1 -- Invalid YubiKey serial %1 -- -- -- Please touch the button on your YubiKey to continue… -- Please touch the button on your YubiKey to continue… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Do you want to create a database with an empty password? [y/N]: -- -- -- Repeat password: -- Repeat password: -- -- -- Error: Passwords do not match. -- Error: Passwords do not match. -- -- -- All clipping programs failed. Tried %1 -- -- All clipping programs failed. Tried %1 -- -- -- -- AES (%1 rounds) -- AES (%1 rounds) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Benchmark %1 delay -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- path to a custom local config file -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 rounds, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – recommended) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- Unsupported key file version: %1 -- Unsupported key file version: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Checksum mismatch! Key file may be corrupt. -- -- -- Unexpected key file data! Key file may be corrupt. -- Unexpected key file data! Key file may be corrupt. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Internal zlib error when compressing: -- -- -- Error writing to underlying device: -- Error writing to underlying device: -- -- -- Error opening underlying device: -- Error opening underlying device: -- -- -- Error reading data from underlying device: -- Error reading data from underlying device: -- -- -- Internal zlib error when decompressing: -- Internal zlib error when decompressing: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- The gzip format not supported in this version of zlib. -- -- -- Internal zlib error: -- Internal zlib error: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Also show entries that have been excluded from reports -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- Bad -- Password quality -- Bad -- -- -- Bad — password must be changed -- Bad — password must be changed -- -- -- Poor -- Password quality -- Poor -- -- -- Poor — password should be changed -- Poor — password should be changed -- -- -- Weak -- Password quality -- Weak -- -- -- Weak — consider changing the password -- Weak — consider changing the password -- -- -- (Excluded) -- (Excluded) -- -- -- This entry is being excluded from reports -- This entry is being excluded from reports -- -- -- Please wait, health data is being calculated... -- Please wait, health data is being calculated... -- -- -- Congratulations, everything is healthy! -- Congratulations, everything is healthy! -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Score -- Score -- -- -- Reason -- Reason -- -- -- Edit Entry... -- Edit Entry... -- -- -- Exclude from reports -- Exclude from reports -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- Perform Online Analysis -- Perform Online Analysis -- -- -- Also show entries that have been excluded from reports -- Also show entries that have been excluded from reports -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- Congratulations, no exposed passwords! -- Congratulations, no exposed passwords! -- -- -- Title -- Title -- -- -- Path -- Path -- -- -- Password exposed… -- Password exposed… -- -- -- (Excluded) -- (Excluded) -- -- -- This entry is being excluded from reports -- This entry is being excluded from reports -- -- -- once -- once -- -- -- up to 10 times -- up to 10 times -- -- -- up to 100 times -- up to 100 times -- -- -- up to 1000 times -- up to 1000 times -- -- -- up to 10,000 times -- up to 10,000 times -- -- -- up to 100,000 times -- up to 100,000 times -- -- -- up to a million times -- up to a million times -- -- -- millions of times -- millions of times -- -- -- Edit Entry... -- Edit Entry... -- -- -- Exclude from reports -- Exclude from reports -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Hover over lines with error icons for further information. -- -- -- Name -- Name -- -- -- Value -- Value -- -- -- Please wait, database statistics are being calculated... -- Please wait, database statistics are being calculated... -- -- -- Database name -- Database name -- -- -- Description -- Description -- -- -- Location -- Location -- -- -- Last saved -- Last saved -- -- -- Unsaved changes -- Unsaved changes -- -- -- yes -- yes -- -- -- no -- no -- -- -- The database was modified, but the changes have not yet been saved to disk. -- The database was modified, but the changes have not yet been saved to disk. -- -- -- Number of groups -- Number of groups -- -- -- Number of entries -- Number of entries -- -- -- Number of expired entries -- Number of expired entries -- -- -- The database contains entries that have expired. -- The database contains entries that have expired. -- -- -- Unique passwords -- Unique passwords -- -- -- Non-unique passwords -- Non-unique passwords -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- Maximum password reuse -- Maximum password reuse -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- Number of short passwords -- Number of short passwords -- -- -- Recommended minimum password length is at least 8 characters. -- Recommended minimum password length is at least 8 characters. -- -- -- Number of weak passwords -- Number of weak passwords -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- Entries excluded from reports -- Entries excluded from reports -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- Average password length -- Average password length -- -- -- %1 characters -- %1 characters -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agent connection failed. -- -- -- Agent protocol error. -- Agent protocol error. -- -- -- No agent running, cannot add identity. -- No agent running, cannot add identity. -- -- -- No agent running, cannot remove identity. -- No agent running, cannot remove identity. -- -- -- Agent refused this identity. Possible reasons include: -- Agent refused this identity. Possible reasons include: -- -- -- The key has already been added. -- The key has already been added. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Restricted lifetime is not supported by the agent (check options). -- -- -- A confirmation request is not supported by the agent (check options). -- A confirmation request is not supported by the agent (check options). -- -- -- Key identity ownership conflict. Refusing to add. -- Key identity ownership conflict. Refusing to add. -- -- -- No agent running, cannot list identities. -- No agent running, cannot list identities. -- -- -- -- SearchHelpWidget -- -- Search Help -- Search Help -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Every search term must match (ie, logical AND) -- -- -- Modifiers -- Modifiers -- -- -- exclude term from results -- exclude term from results -- -- -- match term exactly -- match term exactly -- -- -- use regex in term -- use regex in term -- -- -- Fields -- Fields -- -- -- Term Wildcards -- Term Wildcards -- -- -- match anything -- match anything -- -- -- match one -- match one -- -- -- logical OR -- logical OR -- -- -- Examples -- Examples -- -- -- -- SearchWidget -- -- Search -- Search -- -- -- Limit search to selected group -- Limit search to selected group -- -- -- Search Help -- Search Help -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Search (%1)... -- -- -- Case sensitive -- Case sensitive -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Options -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- General -- General -- -- -- Show notification when credentials are requested -- Show notification when credentials are requested -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- Exposed database groups: -- Exposed database groups: -- -- -- Authorization -- Authorization -- -- -- These applications are currently connected: -- These applications are currently connected: -- -- -- Don't confirm when entries are deleted by clients -- Don't confirm when entries are deleted by clients -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- <b>Warning:</b> -- <b>Warning:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Active -- -- -- Allow export -- Allow export -- -- -- Allow import -- Allow import -- -- -- Own certificate -- Personal certificate -- -- -- Fingerprint: -- Fingerprint: -- -- -- Certificate: -- Certificate: -- -- -- Signer -- Signer -- -- -- Key: -- Key: -- -- -- Generate -- Generate -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Imported certificates -- Imported certificates -- -- -- Trust -- Trust -- -- -- Ask -- Ask -- -- -- Untrust -- Untrust -- -- -- Remove -- Remove -- -- -- Path -- Path -- -- -- Status -- Status -- -- -- Fingerprint -- Fingerprint -- -- -- Certificate -- Certificate -- -- -- Trusted -- Trusted -- -- -- Untrusted -- Untrusted -- -- -- Unknown -- Unknown -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare key file -- -- -- All files -- All files -- -- -- Select path -- Select path -- -- -- Exporting changed certificate -- Exporting changed certificate -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- Signer: -- Signer: -- -- -- Allow KeeShare imports -- Allow KeeShare imports -- -- -- Allow KeeShare exports -- Allow KeeShare exports -- -- -- Only show warnings and errors -- Only show warnings and errors -- -- -- Key -- Key -- -- -- Signer name field -- Signer name field -- -- -- Generate new certificate -- Generate new certificate -- -- -- Import existing certificate -- Import existing certificate -- -- -- Export own certificate -- Export personal certificate -- -- -- Known shares -- Known shares -- -- -- Trust selected certificate -- Trust selected certificate -- -- -- Ask whether to trust the selected certificate every time -- Ask whether to trust the selected certificate every time -- -- -- Untrust selected certificate -- Untrust selected certificate -- -- -- Remove selected certificate -- Remove selected certificate -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Overwriting signed share container is not supported - export prevented -- -- -- Could not write export container (%1) -- Could not write export container (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Could not embed signature: Could not open file to write (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Could not embed signature: Could not write file (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Could not embed database: Could not open file to write (%1) -- -- -- Could not embed database: Could not write file (%1) -- Could not embed database: Could not write file (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Overwriting unsigned share container is not supported - export prevented -- -- -- Could not write export container -- Could not write export container -- -- -- Unexpected export error occurred -- Unexpected export error occurred -- -- -- -- ShareImport -- -- Import from container without signature -- Import from container without signature -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- Import from container with certificate -- Import from container with certificate -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} -- -- -- Not this time -- Not this time -- -- -- Never -- Never -- -- -- Always -- Always -- -- -- Just this time -- Just this time -- -- -- Signed share container are not supported - import prevented -- Signed share container are not supported - import prevented -- -- -- File is not readable -- File is not readable -- -- -- Invalid sharing container -- Invalid sharing container -- -- -- Untrusted import prevented -- Untrusted import prevented -- -- -- Successful signed import -- Successful signed import -- -- -- Unsigned share container are not supported - import prevented -- Unsigned share container are not supported - import prevented -- -- -- Successful unsigned import -- Successful unsigned import -- -- -- File does not exist -- File does not exist -- -- -- Unknown share container type -- Unknown share container type -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import from %1 failed (%2) -- -- -- Import from %1 successful (%2) -- Import from %1 successful (%2) -- -- -- Imported from %1 -- Imported from %1 -- -- -- Export to %1 failed (%2) -- Export to %1 failed (%2) -- -- -- Export to %1 successful (%2) -- Export to %1 successful (%2) -- -- -- Export to %1 -- Export to %1 -- -- -- Multiple import source path to %1 in %2 -- Multiple import source path to %1 in %2 -- -- -- Conflicting export target path %1 in %2 -- Conflicting export target path %1 in %2 -- -- -- -- TotpDialog -- -- Timed Password -- Timed Password -- -- -- 000000 -- 000000 -- -- -- Copy -- Copy -- -- -- Expires in <b>%n</b> second(s) -- Expires in <b>%n</b> secondExpires in <b>%n</b> seconds -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copy -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- -- -- There was an error creating the QR code. -- There was an error creating the QR code. -- -- -- Closing in %1 seconds. -- Closing in %1 seconds. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Setup TOTP -- -- -- Default RFC 6238 token settings -- Default RFC 6238 token settings -- -- -- Steam token settings -- Steam token settings -- -- -- Use custom settings -- Use custom settings -- -- -- Custom Settings -- Custom Settings -- -- -- Time step: -- Time step: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Code size: -- -- -- Secret Key: -- Secret Key: -- -- -- Secret key must be in Base32 format -- Secret key must be in Base32 format -- -- -- Secret key field -- Secret key field -- -- -- Algorithm: -- Algorithm: -- -- -- Time step field -- Time step field -- -- -- digits -- digits -- -- -- Invalid TOTP Secret -- Invalid TOTP Secret -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirm Remove TOTP Settings -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- URLEdit -- -- Invalid URL -- Invalid URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Checking for updates -- -- -- Checking for updates... -- Checking for updates... -- -- -- Close -- Close -- -- -- Update Error! -- Update Error! -- -- -- An error occurred in retrieving update information. -- An error occurred in retrieving update information. -- -- -- Please try again later. -- Please try again later. -- -- -- Software Update -- Software Update -- -- -- A new version of KeePassXC is available! -- A new version of KeePassXC is available! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 is now available — you have %2. -- -- -- Download it at keepassxc.org -- Download it at keepassxc.org -- -- -- You're up-to-date! -- You're up-to-date! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 is currently the newest version available -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Start storing your passwords securely in a KeePassXC database -- -- -- Create new database -- Create new database -- -- -- Open existing database -- Open existing database -- -- -- Import from KeePass 1 -- Import from KeePass 1 -- -- -- Import from CSV -- Import from CSV -- -- -- Recent databases -- Recent databases -- -- -- Welcome to KeePassXC %1 -- Welcome to KeePassXC %1 -- -- -- Import from 1Password -- Import from 1Password -- -- -- Open a recent database -- Open a recent database -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Configured Slot - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- Press -- Press -- -- -- Passive -- Passive -- -- -- %1 Invalid slot specified - %2 -- %1 Invalid slot specified - %2 -- -- -- The YubiKey interface has not been initialized. -- The YubiKey interface has not been initialized. -- -- -- Hardware key is currently in use. -- Hardware key is currently in use. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- Hardware key timed out waiting for user interaction. -- Hardware key timed out waiting for user interaction. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- A USB error ocurred when accessing the hardware key: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Refresh -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Refresh hardware tokens -- -- -- Hardware key slot selection -- Hardware key slot selection -- -- -- Could not find any hardware keys! -- Could not find any hardware keys! -- -- -- Selected hardware key slot does not support challenge-response! -- Selected hardware key slot does not support challenge-response! -- -- -- Detecting hardware keys… -- Detecting hardware keys… -- -- -- No hardware keys detected -- No hardware keys detected -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_es.ts keepassxc-2.6.4-patched/share/translations/keepassx_es.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_es.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_es.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7896 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Acerca de KeePassXC -- -- -- About -- Acerca de -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Informe errores en: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC se distribuye bajo la Licencia Pública General de GNU (GPL) versión 2 o versión 3 (si así lo prefiere). -- -- -- Contributors -- Contribuidores -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver contribuciones en GitHub</a> -- -- -- Debug Info -- Informe de depuración -- -- -- Include the following information whenever you report a bug: -- Incluya la información siguiente cuando informe sobre un error: -- -- -- Copy to clipboard -- Copiar al portapapeles -- -- -- Project Maintainers: -- Mantenedores del proyecto: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- El equipo de KeePassXC quiere agradecer de manera especial el trabajo de debfx por la creación de KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Usar OpenSSH para Windows en lugar de Pageant -- -- -- Enable SSH Agent integration -- Habilitar la integración del agente SSH -- -- -- SSH_AUTH_SOCK value -- Valor SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Anulación de SSH_AUTH_SOCK -- -- -- (empty) -- (vacío) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- No hay ningún socket de agente SSH disponible. Asegúrese de que existe SSH_AUTH_SOCK variable de entorno o establezca una invalidación. -- -- -- SSH Agent connection is working! -- ¡La conexión del agente de SSH está funcionando! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Configuración de la aplicación -- -- -- General -- General -- -- -- Security -- Seguridad -- -- -- Access error for config file %1 -- Error de acceso al archivo de configuración %1 -- -- -- Icon only -- Solo icono -- -- -- Text only -- Solo texto -- -- -- Text beside icon -- Texto al lado del icono -- -- -- Text under icon -- Texto debajo del icono -- -- -- Follow style -- Seguir estilo -- -- -- Reset Settings? -- ¿Reiniciar configuración? -- -- -- Are you sure you want to reset all general and security settings to default? -- ¿Desea reiniciar la configuración general y de seguridad a sus valores por defecto? -- -- -- Monochrome (light) -- Monocromo (claro) -- -- -- Monochrome (dark) -- Monocromo (oscuro) -- -- -- Colorful -- Colorido -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Debe reiniciar la aplicación para establecer el nuevo lenguage. ¿Desea reiniciar ahora? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Configuraciones básicas -- -- -- Startup -- Inicio -- -- -- Start only a single instance of KeePassXC -- Iniciar solo una instancia de KeePassXC -- -- -- Minimize window at application startup -- Minimizar la ventana al iniciar -- -- -- File Management -- Administración de archivos -- -- -- Backup database file before saving -- Hacer una copia de seguridad de la base de datos antes de guardar -- -- -- Automatically save after every change -- Guardar automáticamente después de cada cambio -- -- -- Automatically reload the database when modified externally -- Recargar automáticamente la base de datos cuando sea modificada externamente -- -- -- Entry Management -- Gestión de apunte -- -- -- Use group icon on entry creation -- Usar icono del grupo en la creación del apunte -- -- -- Minimize instead of app exit -- Minimizar en lugar de cerrar la aplicación -- -- -- Show a system tray icon -- Mostrar icono en la bandeja del sistema -- -- -- Hide window to system tray when minimized -- Ocultar la ventana a la bandeja del sistema cuando se minimiza -- -- -- Auto-Type -- Autoescritura -- -- -- Use entry title to match windows for global Auto-Type -- Usar título del apunte para emparejar ventanas en autoescritura global -- -- -- Use entry URL to match windows for global Auto-Type -- Usar URL del apunte para emparejar ventanas en autoescritura global -- -- -- Always ask before performing Auto-Type -- Siempre preguntar antes de autoescritura -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Barra de herramientas móvil -- -- -- Remember previously used databases -- Recordar bases de datos usadas anteriormente -- -- -- Load previously open databases on startup -- Cargar bases de datos abiertas anteriormente al inicio -- -- -- Remember database key files and security dongles -- Recuerde los archivos de clave de la base de datos y los «dongle» de seguridad -- -- -- Check for updates at application startup once per week -- Buscar actualizaciones al inicio de la aplicación una vez por semana -- -- -- Include beta releases when checking for updates -- Incluir versiones beta al comprobar actualizaciones -- -- -- Language: -- Idioma: -- -- -- (restart program to activate) -- (reiniciar aplicación para activar) -- -- -- Minimize window after unlocking database -- Minimizar ventana tras desbloquear base de datos. -- -- -- Minimize when opening a URL -- Minimizar al abrir una URL -- -- -- Hide window when copying to clipboard -- Ocultar ventana al copiar al portapapeles -- -- -- Minimize -- Minimizar -- -- -- Drop to background -- Mover a segundo plano -- -- -- Favicon download timeout: -- Tiempo de espera de descarga de icono: -- -- -- Website icon download timeout in seconds -- Tiempo de espera en segundos de descarga de icono de sitio web -- -- -- sec -- Seconds -- seg -- -- -- Toolbar button style -- Estilo de botón de barra de herramientas -- -- -- Language selection -- Selección de idioma -- -- -- Global auto-type shortcut -- Atajo global de autoescritura -- -- -- Auto-type character typing delay milliseconds -- Retardo de autoescritura de caracteres -- -- -- Auto-type start delay milliseconds -- Retardo de inicio de autoescritura en milisegundos -- -- -- Automatically launch KeePassXC at system startup -- Inicie automáticamente KeePassXC al inicio del sistema -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) -- -- -- User Interface -- Interfaz de usuario -- -- -- Toolbar button style: -- Estilo de la barra de botones: -- -- -- Use monospaced font for notes -- Utilizar tipografía mono espaciadas para notas -- -- -- Tray icon type: -- Estilo de icono de en la barra de tareas: -- -- -- Reset settings to default… -- Restaurar configuración por defecto... -- -- -- Auto-Type typing delay: -- Retardo de escritura de la autoescritura: -- -- -- Global Auto-Type shortcut: -- Atajo global de autoescritura: -- -- -- Auto-Type start delay: -- Retardo de inicio de autoescritura: -- -- -- Automatically save when locking database -- Guardar automáticamente al bloquear la base de datos -- -- -- Automatically save non-data changes when locking database -- Guardar automáticamente cambios sin datos al bloquear la base de datos -- -- -- Tray icon type -- Tipo de icono en la bandeja -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Intervalos -- -- -- Clear clipboard after -- Vaciar el portapapeles tras -- -- -- sec -- Seconds -- segundos -- -- -- Lock databases after inactivity of -- Bloquear bases de datos tras un periodo de inactividad de -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Olvidar TouchID tras una inactividad de -- -- -- Convenience -- Conveniencia -- -- -- Lock databases when session is locked or lid is closed -- Bloquear bases de datos cuando la sesión está bloqueada o la pantalla esté cerrada -- -- -- Forget TouchID when session is locked or lid is closed -- Olvidar TouchID cuando la sesión está bloqueada o la tapa esté cerrada -- -- -- Lock databases after minimizing the window -- Bloquear bases de datos al minimizar la ventana -- -- -- Re-lock previously locked database after performing Auto-Type -- Volver a bloquear la base de datos tras realizar una autoescritura -- -- -- Hide passwords in the entry preview panel -- Ocultar contraseñas en el apunte del panel de vista previa -- -- -- Hide entry notes by default -- Ocultar notas del apunte por defecto -- -- -- Privacy -- Privacidad -- -- -- Use DuckDuckGo service to download website icons -- Utilizar el servicio DuckDuckGo para descargar iconos de sitio web -- -- -- Clipboard clear seconds -- Vaciar portapapeles en segundos -- -- -- Touch ID inactivity reset -- Reinicio de inactividad de Touch ID -- -- -- Database lock timeout seconds -- Tiempo de espera de bloqueo de base de datos en segundos -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Vaciar consulta de búsqueda tras -- -- -- Require password repeat when it is visible -- Pedir repetición de la contraseña cuando está visible -- -- -- Hide passwords when editing them -- Ocultar las contraseñas durante la edición de ellas -- -- -- Use placeholder for empty password fields -- Usar marcador de posición para los campos de contraseña vacíos -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- No se puede encontrar un apunte que corresponda al título de la ventana: -- -- -- Auto-Type - KeePassXC -- Autoescritura - KeePassXC -- -- -- Auto-Type -- Autoescritura -- -- -- The Syntax of your Auto-Type statement is incorrect! -- ¡La sintaxis de la sentencia de su autoescritura es incorrecta! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Este comando de autoescritura contiene un retraso muy largo. ¿Desea continuar? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Este comando de autoescritura contiene pulsaciones de teclas muy lentas. ¿Desea continuar? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Este comando de autoescritura contiene argumentos que se repiten muy a menudo. ¿Desea continuar? -- -- -- Permission Required -- Permiso requerido -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requiere el permiso de Accesibilidad para realizar la autoescritura en el campo del apunte. Si ya al concedido este permiso, quizá deba reiniciar KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Ventana -- -- -- Sequence -- Secuencia -- -- -- Default sequence -- Secuencia por defecto -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Usuario -- -- -- Sequence -- Secuencia -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copiar &usuario -- -- -- Copy &password -- Copiar &contraseña -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permiso requerido -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requiere el permiso accesibilidad y grabación de pantalla para realizar la autoescritura global. La grabación de pantalla es necesario para usar el título de la ventana al encontrar apuntes. Si ya ha concedido este permiso, quizá deba reiniciar KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Autoescritura - KeePassXC -- -- -- Select entry to Auto-Type: -- Seleccionar apunte para autoescritura: -- -- -- Search... -- Buscar… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- Solicitud de acceso KeePassXC-Browser -- -- -- %1 is requesting access to the following entries: -- %1 está solicitando acceso a los siguientes apuntes: -- -- -- Remember access to checked entries -- Recordar el acceso a los apuntes marcados -- -- -- Remember -- Recordar -- -- -- Allow access to entries -- Permitir acceso a los apuntes -- -- -- Allow Selected -- Permitir seleccionado -- -- -- Deny All -- Denegar todo -- -- -- Disable for this site -- Deshabilitar para este sitio -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- Guardar apunte KeePassXC-Browser -- -- -- Ok -- Aceptar -- -- -- Cancel -- Cancelar -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Tiene múltiples bases de datos abiertas. --Por favor, seleccione la base de datos correcta para guardar las credenciales. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: solicitud de asociación de nueva clave -- -- -- Save and allow access -- Guardar y permitir acceso -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: ¿Sobrescribir clave existente? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Existe una clave con el nombre «%1». --¿Desea sobrescribirlo? -- -- -- KeePassXC: Update Entry -- KeePassXC: actualizar apunte -- -- -- Do you want to update the information in %1 - %2? -- ¿Desea actualizar la información en %1 - %2? -- -- -- Abort -- Abortar -- -- -- Converting attributes to custom data… -- Convirtiendo atributos a datos personalizados... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: atributos de KeePassHTTP convertidos -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Atributos correctamente convertidos desde %1 apunte(s). --Movidas %2 claves a datos personalizados. -- -- -- Successfully moved %n keys to custom data. -- %n claves(s) movida(s) a datos propios correctamente.%n claves(s) movida(s) a datos propios correctamente. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: ¡No se encontró ningún apunte con los atributos KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- La base de datos activa no contiene un apunte con atributos de KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: detectada configuración de integración con navegador heredada -- -- -- KeePassXC: Create a new group -- KeePassXC: crear un nuevo grupo -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Se ha recibido una solicitud para crear un grupo «%1». --¿Desea crear este grupo? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos. --Es necesario para mantener sus conexiones presentes del navegador. --¿Desea migrar sus configuraciones existentes ahora? -- -- -- Don't show this warning again -- No mostrar esta advertencia de nuevo -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Ha recibido una solicitud de asociación para la siguiente base de datos: --%1 -- --Asigne a la conexión un nombre único o identificativo, por ejemplo: --portatil-chrome. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Diálogo -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Esto es necesario para acceder a las bases de datos con KeePassXC-Browser -- -- -- Enable browser integration -- Habilitar integración con navegador -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- Los navegadores instalados como snaps no están soportados. -- -- -- Enable integration for these browsers: -- Permitir la integración con estos navegadores: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Navegador Tor -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Mostrar una notificación cuando las credenciales son requeridas -- -- -- Request to unlock the database if it is locked -- Solicitar el desbloqueo de la base de datos si está bloqueada -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Sólo se muestran los apuntes con el mismo esquema (http://, https://,...) -- -- -- Match URL scheme (e.g., https://...) -- Iguala el formato de URL (e.g., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Sólo devolver los resultados similares para una URL específica en vez de todas los apuntes para todo el dominio. -- -- -- Return only best-matching credentials -- Devolver solo las credenciales con mejor coincidencia -- -- -- Returns expired credentials. String [expired] is added to the title. -- Devuelve las credenciales expiradas. La cadena [expirada] es añadida al título. -- -- -- Allow returning expired credentials -- Permitir devolver credenciales caducadas -- -- -- All databases connected to the extension will return matching credentials. -- Todas las bases de datos conectadas a la extensión devolverán las credenciales coincidentes. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Buscar en todas las bases de datos abiertas las credenciales correspondientes -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Ordenar las credenciales coincidentes por título -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Ordenar las credenciales coincidentes por nombre de usuario -- -- -- Advanced -- Avanzado -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nunca solicitar antes de acceder a las credenciales -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nunca solicitar antes de actualizar las credenciales -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- No solicitar permiso para autenticación básica HTTP -- -- -- Automatically creating or updating string fields is not supported. -- No se permite crear o actualizar campos de caracteres automáticamente. -- -- -- Return advanced string fields which start with "KPH: " -- Devuelve campos de texto avanzados que comienzan por "KPH:" -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- No permitir ventana emergente sugiriendo migración de configuración antigua de KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- No preguntar por migración de configuración de KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para obtener los mensajes nativos en el arranque. -- -- -- Update native messaging manifest files at startup -- Actualizar archivo manifiesto de mensajería nativa al iniciar -- -- -- Use a custom proxy location if you installed a proxy manually. -- Utilizar un proxy instalado manualmente. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Usar una ubicación de proxy personalizada: -- -- -- Custom proxy location field -- Ubicación de campo personalizado proxy -- -- -- Browser for custom proxy file -- Explorar para archivo personalizado proxy -- -- -- Browse... -- Button for opening file dialog -- Explorar… -- -- -- Use a custom browser configuration location: -- Usar una ubicación de proxy personalizada: -- -- -- Browser type: -- Tipo de navegador: -- -- -- Toolbar button style -- Estilo de botón de barra de herramientas -- -- -- Config Location: -- Localización de la configuración: -- -- -- Custom browser location field -- Campo de ubicación del navegador personalizado -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Buscar ruta del navegador personalizada -- -- -- Custom extension ID: -- ID de extensión personalizado: -- -- -- Custom extension ID -- ID de extensión personalizado -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Debido al modo aislado de Snap, debe ejecutar un código para permitir la integración con el navegador.<br/>Puede obtener este código de %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser es necesario para que la integración del navegador funcione.<br />Descárgalo desde %1 y %2 y %3. %4 -- -- -- Please see special instructions for browser extension use below -- Vea las instrucciones especiales para el uso de extensión de navegador debajo. -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Error:</b> ¡No se puede encontrar la ubicación de proxy personalizada!<br/>La integración del navegador NO funcionará sin la aplicación proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Advertencia:</b> las siguientes opciones pueden ser peligrosas. -- -- -- Executable Files -- Archivos ejecutables -- -- -- All Files -- Todos los archivos -- -- -- Select custom proxy location -- Elegir una ubicación de proxy personalizada -- -- -- Select native messaging host folder location -- Seleccionar la ubicación de la carpeta del host de mensajería nativa -- -- -- -- CloneDialog -- -- Clone Options -- Opciones de clonado -- -- -- Append ' - Clone' to title -- Añadir «- Clon» al título -- -- -- Replace username and password with references -- Reemplazar usuario y contraseña con referencias -- -- -- Copy history -- Copiar historial -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importar campos de CSV -- -- -- filename -- nombre del archivo -- -- -- size, rows, columns -- tamaño, filas, columnas -- -- -- Encoding -- Codificación -- -- -- Codec -- Códec -- -- -- Text is qualified by -- Los textos están rodeados por -- -- -- Fields are separated by -- Los campos están separados por -- -- -- Comments start with -- Los comentarios comienzan con -- -- -- Consider '\' an escape character -- Considerar «\» como un carácter de escape -- -- -- Preview -- Vista previa -- -- -- Imported from CSV file -- Importado de un fichero CSV -- -- -- Original data: -- Dato original: -- -- -- Error -- Error -- -- -- Error(s) detected in CSV file! -- ¡Error(es) detectado(s) en el fichero CSV! -- -- -- [%n more message(s) skipped] -- [%n más mensaje(s) omitidos][%n más mensaje(s) descartado(s)] -- -- -- CSV import: writer has errors: --%1 -- Importación CSV: la escritura tiene errores: --% 1 -- -- -- Text qualification -- Certificado de texto -- -- -- Field separation -- Separación de campo -- -- -- Number of header lines to discard -- Número de líneas de cabecera a descartar -- -- -- CSV import preview -- Previsualización importar CSV -- -- -- Column Association -- Columnas asociadas -- -- -- Last Modified -- Última modificación -- -- -- Password -- Contraseña -- -- -- Created -- Creado -- -- -- Notes -- Notas -- -- -- Title -- Título -- -- -- Group -- Grupo -- -- -- URL -- URL -- -- -- Username -- Usuario -- -- -- Header lines skipped -- Líneas de cabecera ignoradas -- -- -- First line has field names -- La primera línea tiene los nombres de los campos -- -- -- Not Present -- No presente -- -- -- Column %1 -- Columna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Icono -- -- -- -- CsvParserModel -- -- %n column(s) -- %n columna(s)%n columna(s) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte(s)%n byte(s) -- -- -- %n row(s) -- %n fila(s)%n fila(s) -- -- -- -- Database -- -- File %1 does not exist. -- El archivo %1 no existe. -- -- -- Unable to open file %1. -- Incapaz de abrir el archivo %1. -- -- -- Error while reading the database: %1 -- Error al leer la base de datos: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- El archivo no se puede escribir, ya que se ha abierto en modo de solo lectura. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- La clave no está transformada. Esto es un defecto, por favor, ¡comuniquelo a los desarrolladores! -- -- -- %1 --Backup database located at %2 -- %1 --Copia de seguridad de base de datos ubicada en %2 -- -- -- Could not save, database does not point to a valid file. -- No se puede guardar, la base de datos no apunta a un archivo válido. -- -- -- Could not save, database file is read-only. -- No se puede guardar, el archivo de base de datos es de solo lectura. -- -- -- Database file has unmerged changes. -- El archivo de base de datos tiene cambios no combinados. -- -- -- Recycle Bin -- Papelera de reciclaje -- -- -- Passwords -- Root group name -- Contraseñas -- -- -- Database save is already in progress. -- Guardado de la base de datos actualmente en proceso. -- -- -- Could not save, database has not been initialized! -- No se puede guardar, la base de datos no a sido inicializada. -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Desbloquear base de datos - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Fichero clave: -- -- -- Refresh -- Actualizar -- -- -- Don't show this warning again -- No mostrar nuevamente esta advertencia -- -- -- All files -- Todos los archivos -- -- -- Key files -- Ficheros clave -- -- -- Select key file -- Seleccionar fichero clave -- -- -- Failed to open key file: %1 -- Fallo al abrir fichero clave: %1 -- -- -- Unlock KeePassXC Database -- Desbloquear base de datos KeePassXC -- -- -- Enter Password: -- Introducir contraseña: -- -- -- Password field -- Campo de contraseña -- -- -- Hardware key slot selection -- Selección de ranura de llave por hardware -- -- -- Browse for key file -- Explorar para un fichero clave -- -- -- Browse... -- Explorar… -- -- -- Refresh hardware tokens -- Actualizar «tokens» hardware -- -- -- Hardware Key: -- Llave por hardware: -- -- -- Hardware key help -- Ayuda de la llave por hardware -- -- -- TouchID for Quick Unlock -- TouchID para desbloqueo rápido -- -- -- Unlock failed and no password given -- Desbloqueo fallido y sin contraseña proporcionada -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Desbloquear la base de datos ha fallado y no introdujo una contraseña. --¿Desea reintentar con una contraseña vacía? -- --Para prevenir que aparezca este error, debe ir a «Configuración de base de datos / Seguridad» y reiniciar su contraseña. -- -- -- Retry with empty password -- Reintentar con contraseña vacía -- -- -- Enter Additional Credentials (if any): -- Introducir credenciales adicionales (si hay alguna): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Puede usar una llave de seguridad por hardware como <strong>YubiKey</strong> o <strong>OnlyKey</strong> con ranuras configuradas para HMAC-SHA1.</p> --<p>Clic para más información...</p> -- -- -- Key file help -- Ayuda de fichero clave -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- No se puede usar una base de datos como fichero clave -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- No puede usar una base de datos como fichero clave. --Si no tiene un fichero clave, deje el campo vacío. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Adicionalmente a la contraseña, puede usar un fichero clave para mejorar la seguridad de su base de datos. Este archivo puede ser generado en su configuración de base de datos.</p><p>Esto <strong>no</strong> es su archivo *.kdbx. <br>Si no tiene un fichero clave, deje este campo vacío.</p><p>Clic para más información...</p> -- -- -- Key file to unlock the database -- Fichero clave para desbloquear la base de datos -- -- -- Please touch the button on your YubiKey! -- ¡Por favor presione el botón en su YubiKey! -- -- -- Detecting hardware keys… -- Detectando llaves por hardware... -- -- -- No hardware keys detected -- No se detectaron llaves por hardware -- -- -- Select hardware key… -- Seleccionar llave por hardware... -- -- -- Old key file format -- Formato de fichero clave antiguo -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Está usando un fichero clave con un formato antiguo que KeePassXC puede<br> dejar --de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave yendo a <br><strong>Base de datos / Seguridad de base de datos / Cambiar fichero clave. -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Contraseñas -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Configuraciones avanzadas -- -- -- General -- General -- -- -- Security -- Seguridad -- -- -- Encryption Settings -- Configuraciones de cifrado -- -- -- Browser Integration -- Integración con navegadores -- -- -- Database Credentials -- Credenciales de base de datos -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Configuraciones del KeePassXC-Browser -- -- -- Stored keys -- Claves almacenadas -- -- -- Remove -- Eliminar -- -- -- Delete the selected key? -- ¿Eliminar clave seleccionada? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- ¿Desea eliminar la clave seleccionada? --Esto puede impedir la conexión con el complemento del navegador. -- -- -- Key -- Clave -- -- -- Value -- Valor -- -- -- Enable Browser Integration to access these settings. -- Habilitar la integración del navegador para acceder a esta configuración. -- -- -- Disconnect all browsers -- Desconectar todos los navegadores -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- ¿Desea desconectar todos los naveggadores? --Esto puede impedir la conexión con el complemento de navegador. -- -- -- KeePassXC: No keys found -- KeePassXC: No se encontró ninguna clave -- -- -- No shared encryption keys found in KeePassXC settings. -- No se encontraron claves de cifrado compartidas en la configuración de KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Las claves se eliminaron de la base de datos -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Correctamente borrada %n clave de cifrado de la configuración KeePassXC.Correctamente borrada %n claves de cifrado de la configuración KeePassXC. -- -- -- Forget all site-specific settings on entries -- Olvidar todas las opciones del sitio específico en los apuntes -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- ¿Desea olvidar todas las configuraciones específicas del sitio en cada apunte? --Los permisos para acceder a los apunte serán revocados. -- -- -- Removing stored permissions… -- Eliminando permisos almacenados… -- -- -- Abort -- Abortar -- -- -- KeePassXC: Removed permissions -- KeePassXC: permisos eliminados -- -- -- Successfully removed permissions from %n entry(s). -- Permisos eliminados correctamente desde %n apunte.Permisos eliminados correctamente desde %n apuntes. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: ¡No se encontró ningún apunte con permisos! -- -- -- The active database does not contain an entry with permissions. -- La base de datos activa no contiene un apunte con permisos. -- -- -- Move KeePassHTTP attributes to custom data -- Mover los atributos KeePassHTTP a datos personalizados -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- ¿Desea mover todos los datos de integración del navegador heredado al último estándar? --Esto es necesario para mantener la compatibilidad con el complemento del navegador. -- -- -- Stored browser keys -- Claves de navegador almacenadas -- -- -- Remove selected key -- Eliminar clave seleccionada -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Mover los atributos de KeePassHTTP a los datos personales de KeePassXC-Browser -- -- -- Refresh database root group ID -- Actualizar la ID del grupo raíz de la base de datos -- -- -- Created -- Creado -- -- -- Refresh database ID -- Actualizar la ID de la base de datos -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- ¿Desea actualizar el ID de la base de datos? --Esto solo es necesario si su base de datos es copiada a otra y la extensión del navegador cono se puede conectar. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Añadir protección adicional… -- -- -- No password set -- Contraseña no establecida -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- ¡ADVERTENCIA! No ha establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña. -- --¿Desea continuar sin contraseña? -- -- -- Continue without password -- Continuar sin contraseña -- -- -- No encryption key added -- No se agregó clave de cifrado -- -- -- You must add at least one encryption key to secure your database! -- ¡Debe añadir al menos una clave de cifrado para proteger su base de datos! -- -- -- Unknown error -- Error desconocido -- -- -- Failed to change database credentials -- Fallo al cambiar las credenciales de la base de datos -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritmo de cifrado: -- -- -- AES: 256 Bit (default) -- AES: 256-Bit (por defecto) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Función de derivación de la clave: -- -- -- Transform rounds: -- Rondas de transformación: -- -- -- Memory Usage: -- Memoria utilizada: -- -- -- Parallelism: -- Paralelismo: -- -- -- Decryption Time: -- Tiempo de descifrado: -- -- -- ?? s -- ?? s -- -- -- Change -- Cambiar -- -- -- Higher values offer more protection, but opening the database will take longer. -- Los valores más altos ofrecen más protección, pero la apertura de la base de datos llevará más tiempo. -- -- -- Database format: -- Formato de base de datos: -- -- -- This is only important if you need to use your database with other programs. -- Esto solo es importante si necesita usar su base de datos con otros programas. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recomendado) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- sin cambios -- -- -- Number of rounds too high -- Key transformation rounds -- Número de rondas demasiado alto -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Está utilizando una gran cantidad de rondas de transformación de clave con Argon2. -- --Si conserva este número, ¡su base de datos puede tardar horas o días (o incluso más) en abrirse! -- -- -- Understood, keep number -- Entendido, mantener el número -- -- -- Cancel -- Cancelar -- -- -- Number of rounds too low -- Key transformation rounds -- Número de rondas demasiado bajo -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Está utilizando un número muy bajo de rondas de transformación de clave con AES-KDF. -- --Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar! -- -- -- KDF unchanged -- KDF sin cambios -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Error al transformar la clave con nuevos parámetros KDF; KDF sin cambios. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- hilohilos -- -- -- Change existing decryption time -- Cambiar el tiempo de descifrado -- -- -- Decryption time in seconds -- Tiempo de descifrado en segundos -- -- -- Database format -- Formato de base de datos -- -- -- Encryption algorithm -- Algoritmo de cifrado -- -- -- Key derivation function -- Función de derivación de la clave -- -- -- Transform rounds -- Rondas de transformación -- -- -- Memory usage -- Uso de memoria -- -- -- Parallelism -- Paralelismo -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Apuntes expuestos -- -- -- Don't expose this database -- No exponer esta base de datos -- -- -- Expose entries under this group: -- Exponer los apuntes bajo este grupo: -- -- -- Enable Secret Service to access these settings. -- Habilite el servicio secreto para acceder a esta configuración. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadatos de la base de datos -- -- -- Database name: -- Nombre de la base de datos: -- -- -- Database description: -- Descripción de la base de datos: -- -- -- Default username: -- Usuario por defecto: -- -- -- History Settings -- Configuración del historial -- -- -- Max. history items: -- Elementos máximos del historial: -- -- -- Max. history size: -- Tamaño máximo del historial: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Usar papelera de reciclaje -- -- -- Additional Database Settings -- Configuraciones adicionales de la base de datos -- -- -- Database name field -- Campo nombre de base de datos -- -- -- Database description field -- Campo descripción de base de datos -- -- -- Default username field -- Campo usuario predeterminado -- -- -- Maximum number of history items per entry -- Número máximo de elementos de historial por apunte -- -- -- Maximum size of history per entry -- Tamaño máximo de historial por apunte -- -- -- Delete Recycle Bin -- Eliminar papelera de reciclaje -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- ¿Desea eliminar los contenidos actuales de la papelera de reciclaje? --Esta acción no es reversible. -- -- -- (old) -- (viejo) -- -- -- Enable compression (recommended) -- Habilitar compresión (recomendado) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Compartir -- -- -- Breadcrumb -- Pista -- -- -- Type -- Tipo -- -- -- Path -- Ruta -- -- -- Last Signer -- Último firmante -- -- -- Certificates -- Certificados -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nombre de la base de datos: -- -- -- Description: -- Descripción: -- -- -- Database name field -- Campo nombre de base de datos -- -- -- Database description field -- Campo descripción de base de datos -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Base de datos de KeePass 2 -- -- -- All files -- Todos los ficheros -- -- -- Open database -- Abrir base de datos -- -- -- CSV file -- Archivo CSV -- -- -- Merge database -- Combinar base de datos -- -- -- Open KeePass 1 database -- Abrir base de datos KeePass 1 -- -- -- KeePass 1 database -- Base de datos KeePass 1 -- -- -- Export database to CSV file -- Exportar base de datos a un archivo CSV -- -- -- Writing the CSV file failed. -- Ha fallado la escritura del fichero CSV. -- -- -- Database creation error -- Error de creación de la base de datos -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- La base de datos creada no tiene clave o KDF, negándose a guardarla. --Esto es definitivamente un error, por favor repórtelo a los desarrolladores. -- -- -- Select CSV file -- Seleccionar archivo CSV -- -- -- New Database -- Nueva base de datos -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nueva base de datos] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Bloqueada] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Sólo lectura] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Fallo al abrir %1. No existe o no es accesible. -- -- -- Export database to HTML file -- Exportar base de datos a archivo HTML -- -- -- HTML file -- Archivo HTML -- -- -- Writing the HTML file failed. -- Fallo escribiendo a archivo HTML. -- -- -- Export Confirmation -- Confirmación de exportación -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Está a punto de exportar su base de datos a un archivo sin cifrar. Esto dejará sus contraseñas e información sensible vulnerable. ¿Desea continuar? -- -- -- Open OPVault -- Abrir OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Buscando… -- -- -- Do you really want to delete the entry "%1" for good? -- ¿Desea eliminar el apunte «%1» de forma definitiva? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- ¿Desea mover el apunte «%1» a la papelera de reciclaje? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- ¿Desea mover %n apunte a la papelera?¿Desea mover %n apuntes a la papelera de reciclaje? -- -- -- Execute command? -- ¿Ejecutar comando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- ¿Desea ejecutar el siguiente mandato?<br><br>%1<br> -- -- -- Remember my choice -- Recordar mi elección -- -- -- Do you really want to delete the group "%1" for good? -- ¿Desea eliminar el grupo «%1» de forma definitiva? -- -- -- No current database. -- No hay una base de datos actual. -- -- -- No source database, nothing to do. -- No hay una base de datos de origen, nada para hacer. -- -- -- Search Results (%1) -- Resultado de búsqueda (%1) -- -- -- No Results -- No hay resultados -- -- -- File has changed -- El archivo ha cambiado -- -- -- The database file has changed. Do you want to load the changes? -- El archivo de la base de datos ha cambiado. ¿Desea cargar los cambios? -- -- -- Merge Request -- Solicitud de combinación -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- El archivo de la base de datos ha cambiado y tiene modificaciones sin guardar. ¿Desea combinar sus modificaciones? -- -- -- Empty recycle bin? -- ¿Vaciar papelera de reciclaje? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- ¿Desea eliminar permanentemente todo de su papelera de reciclaje? -- -- -- Do you really want to delete %n entry(s) for good? -- ¿Desea eliminar %n apunte definitivamente?¿Desea eliminar %n apuntes definitivamente? -- -- -- Delete entry(s)? -- ¿Eliminar apunte?¿Eliminar apuntes? -- -- -- Move entry(s) to recycle bin? -- ¿Mover apunte a la papelera de reciclaje?¿Mover apunte a la papelera de reciclaje? -- -- -- Lock Database? -- ¿Bloquear la base de datos? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Está editando un apunte. ¿Descartar modificaciones y bloquear a pesar de todo? -- -- -- "%1" was modified. --Save changes? -- «%1» ha sido modificado. --¿Guardar cambios? -- -- -- Database was modified. --Save changes? -- Se modificó la base de datos. --¿Desea guardar las modificaciones? -- -- -- Save changes? -- ¿Guardar modificaciones? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- No se pudo abrir el nuevo fichero de base de datos al intentar cargar automáticamente. --Error: %1 -- -- -- Disable safe saves? -- ¿Desactivar almacenajes seguros? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC no ha podido guardar la base de datos varias veces. Esto es probablemente causado por los servicios de sincronización de ficheros manteniendo un bloqueo del fichero. --¿Desactivar almacenaje seguro y volver a intentarlo? -- -- -- Passwords -- Contraseñas -- -- -- Save database as -- Guardar base de datos como -- -- -- KeePass 2 Database -- Base de datos de KeePass 2 -- -- -- Replace references to entry? -- ¿Reemplazar las referencias al apunte? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- El apunte «%1» tiene %2 referencia. ¿Desea sobrescribir la referencia con los valores, descartar este apunte o eliminarlo de todos modos?El apunte «%1» tiene %2 referencias. ¿Desea sobrescribir la referencias con los valores, descartar este apunte o eliminarlo de todos modos? -- -- -- Delete group -- Eliminar grupo -- -- -- Move group to recycle bin? -- ¿Mover grupo a la papelera de reciclaje? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- ¿Desea mover el grupo «%1» a la papelera de reciclaje? -- -- -- Successfully merged the database files. -- Archivos de base de datos combinados correctamente. -- -- -- Database was not modified by merge operation. -- La base de datos no fue modificada por la operación de combinación -- -- -- Shared group... -- Grupo compartido… -- -- -- Writing the database failed: %1 -- Fallo al escribir la base de datos: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Esta base de datos está abierta en modo solo lectura. El autoguardado está deshabilitado. -- -- -- Save database backup -- Guardar copia de seguridad de la base de datos -- -- -- Could not find database file: %1 -- No se ha encontrado el archivo de base de datos: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Apunte -- -- -- Advanced -- Avanzado -- -- -- Icon -- Icono -- -- -- Auto-Type -- Autoescritura -- -- -- Properties -- Propiedades -- -- -- History -- Historial -- -- -- SSH Agent -- Agente SSH -- -- -- n/a -- n/d -- -- -- (encrypted) -- (cifrado) -- -- -- Select private key -- Seleccionar la clave privada -- -- -- Entry history -- Historial de apuntes -- -- -- Add entry -- Añadir apunte -- -- -- Edit entry -- Editar apunte -- -- -- New attribute -- Nuevo atributo -- -- -- Are you sure you want to remove this attribute? -- ¿Seguro que desea eliminar este atributo? -- -- -- Tomorrow -- Mañana -- -- -- %n week(s) -- %n semana%n semanas -- -- -- %n month(s) -- %n mes%n meses -- -- -- Entry updated successfully. -- Apunte actualizado correctamente. -- -- -- New attribute %1 -- Nuevo atributo %1 -- -- -- %n year(s) -- %n año%n años -- -- -- Confirm Removal -- Confirmar eliminación -- -- -- Browser Integration -- Integración con navegadores -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- ¿Desea eliminar esta URL? -- -- -- Reveal -- Revelar -- -- -- Hide -- Ocultar -- -- -- Unsaved Changes -- Hay cambios sin guardar -- -- -- Would you like to save changes to this entry? -- ¿Desea guardar los cambios en este apunte? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTEGIDO] Presiones para revelar para ver o editar -- -- -- Invalid Entry -- Apunte inválido -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Una operación de combinación externa ha invalidado este apunte. --Desafortunadamente, todos los cambios hechos se han perdido. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atributos adicionales -- -- -- Add -- Añadir -- -- -- Remove -- Eliminar -- -- -- Edit Name -- Editar nombre -- -- -- Protect -- Proteger -- -- -- Reveal -- Revelar -- -- -- Attachments -- Adjuntos -- -- -- Foreground Color: -- Color de primer plano: -- -- -- Background Color: -- Color de fondo: -- -- -- Attribute selection -- Selección de atributo -- -- -- Attribute value -- Valor de atributo -- -- -- Add a new attribute -- Añadir nuevo atributo -- -- -- Remove selected attribute -- Eliminar atributo seleccionado -- -- -- Edit attribute name -- Editar atributo nombre -- -- -- Toggle attribute protection -- Intercambiar atributo protección -- -- -- Show a protected attribute -- Mostrar un atributo protegido -- -- -- Foreground color selection -- Selección de color de primer plano -- -- -- Background color selection -- Selección de color de fondo -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Seleccionada, el apunte no aparecerá en los informes de salud e incluso su no cumple los requerimientos de calidad (pe. entropía de contraseña o reutilización). Puede usar la marca si la contraseña está más allá de su control (pe. si necesita configurar un PIN de cuatro dígitos) para prevenir desordenar los informes.</p></body></html> -- -- -- Exclude from database reports -- Excluir de los informes de base de datos -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Activar autoescritura para este apunte -- -- -- Window Associations -- Ventanas asociadas -- -- -- + -- + -- -- -- - -- -- -- -- Window title: -- Título de la ventana: -- -- -- Use a specific sequence for this association: -- Utilizar una secuencia específica para esta asociación: -- -- -- Custom Auto-Type sequence -- Secuencia personalizada autoescritura -- -- -- Open Auto-Type help webpage -- Abrir página de ayuda autoescritura -- -- -- Existing window associations -- Asociaciones de ventana existentes -- -- -- Add new window association -- Añadir nueva ventana asociada -- -- -- Remove selected window association -- Eliminar ventana asociada -- -- -- You can use an asterisk (*) to match everything -- Puede usar un asterisco (*) par coincidir todo. -- -- -- Set the window association title -- Establecer título de ventana asociada -- -- -- You can use an asterisk to match everything -- Puede usar un asterisco par coincidir todo. -- -- -- Custom Auto-Type sequence for this window -- Secuencia personalizada de autoescritura para esta ventana -- -- -- Inherit default Auto-Type sequence from the group -- Heredar secuencia de autoescritura predeterminada del grupo -- -- -- Use custom Auto-Type sequence: -- Utilizar secuencia de autoescritura personalizada: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Esta configuración afecta al comportamiento de este apunte con la extensión de navegador. -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- Descartar autoenvío para este apunte -- -- -- Hide this entry from the browser extension -- Ocultar este apunte de la extensión de navegador -- -- -- Additional URL's -- URLs adicionales -- -- -- Add -- Añadir -- -- -- Remove -- Eliminar -- -- -- Edit -- Editar -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Solo enviar esta configuración al navegador para los diálogos de autenticación HTTP. Habilitada, los formularios de autenticación no mostrarán este apunte para su selección. -- -- -- Use this entry only with HTTP Basic Auth -- Usar este apunte solo con autenticación básica HTTP -- -- -- -- EditEntryWidgetHistory -- -- Show -- Mostrar -- -- -- Restore -- Restaurar -- -- -- Delete -- Eliminar -- -- -- Delete all -- Eliminar todo -- -- -- Entry history selection -- Selección de apunte del historial -- -- -- Show entry at selected history state -- Mostrar apunte en historial seleccionado -- -- -- Restore entry to selected history state -- Restaurar de apunte al estado de historial seleccionado -- -- -- Delete selected history state -- Eliminar el historial seleccionado -- -- -- Delete all history -- Eliminar todo el historial -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Contraseña: -- -- -- Title: -- Título: -- -- -- Presets -- Programar -- -- -- Toggle the checkbox to reveal the notes section. -- Cambie la casilla de verificación para mostrar la sección de notas. -- -- -- Username: -- Usuario: -- -- -- Url field -- Campo URL -- -- -- Download favicon for URL -- Descargar icono para la URL -- -- -- Password field -- Campo de contraseña -- -- -- Toggle notes visible -- Intercambiar notas visibles -- -- -- Expiration field -- Campo expiración -- -- -- Expiration Presets -- Predeterminados expiración -- -- -- Expiration presets -- Predeterminados expiración -- -- -- Notes field -- Campo notas -- -- -- Title field -- Campo título -- -- -- Username field -- Campo usuario -- -- -- Toggle expiration -- Intercambiar expiración -- -- -- Notes: -- Notas: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Expira: -- -- -- Edit Entry -- Editar apunte -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Forma -- -- -- Remove key from agent after -- Eliminar clave del agente tras -- -- -- seconds -- segundos -- -- -- Fingerprint -- Huella -- -- -- Remove key from agent when database is closed/locked -- Eliminar clave del agente cuando la base de datos está cerrada/bloqueada -- -- -- Public key -- Clave pública -- -- -- Add key to agent when database is opened/unlocked -- Añadir clave al agente cuando la base de datos se abre/desbloquea -- -- -- Comment -- Comentario -- -- -- Decrypt -- Descifrar -- -- -- n/a -- n/d -- -- -- Copy to clipboard -- Copiar al portapapeles -- -- -- Private key -- Clave privada -- -- -- External file -- Archivo externo -- -- -- Browse... -- Button for opening file dialog -- Explorar… -- -- -- Attachment -- Adjunto -- -- -- Add to agent -- Añadir a agente -- -- -- Remove from agent -- Eliminar del agente -- -- -- Require user confirmation when this key is used -- Requiere confirmación del usuario cuando se usa esta clave -- -- -- Remove key from agent after specified seconds -- Eliminar clave del agente tras los segundos especificados -- -- -- Browser for key file -- Explorar para fichero clave -- -- -- External key file -- Fichero clave externo -- -- -- Select attachment file -- Seleccionar archivo adjunto -- -- -- -- EditGroupWidget -- -- Group -- Grupo -- -- -- Icon -- Icono -- -- -- Properties -- Propiedades -- -- -- Add group -- Añadir grupo -- -- -- Edit group -- Editar grupo -- -- -- Enable -- Activar -- -- -- Disable -- Desactivar -- -- -- Inherit from parent group (%1) -- Heredar del grupo anterior (%1) -- -- -- Entry has unsaved changes -- El apunte tiene cambios sin guardar -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipo: -- -- -- Path: -- Ruta: -- -- -- Password: -- Contraseña: -- -- -- Inactive -- Inactivo -- -- -- KeeShare unsigned container -- Contenedor KeeShare sin firma -- -- -- KeeShare signed container -- Contenedor KeeShare firmado -- -- -- Select import source -- Seleccione el origen de la importación -- -- -- Select export target -- Seleccionar el destino de la exportación -- -- -- Select import/export file -- Seleccione el archivo de importación/exportación -- -- -- Clear -- Vaciar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Synchronize -- Sincronizar -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Su versión de KeePassXC no soporta este tipo de contenedor de compartición. --Las extensiones soportadas son: %1. -- -- -- %1 is already being exported by this database. -- %1 ya está siendo exportada por esta base de datos. -- -- -- %1 is already being imported by this database. -- %1 ya está siendo importada por esta base de datos. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 ya está siendo importada y exportada por diferentes grupos en esta base de datos. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare actualmente está deshabilitada. Puede habilitar importar/exportar en la configuración de aplicación -- -- -- Database export is currently disabled by application settings. -- La exportación de la base de datos actualmente está deshabilitada en la configuración de aplicación. -- -- -- Database import is currently disabled by application settings. -- La importación de base de datos actualmente está deshabilitada por la configuración de aplicación -- -- -- Sharing mode field -- Campo modo comapartir -- -- -- Path to share file field -- Ruta para campo de archivo compartir -- -- -- Password field -- Campo de contraseña -- -- -- Clear fields -- Vaciar campos -- -- -- Browse for share file -- Explorar para compartir archivo -- -- -- Browse... -- Explorar… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Campo nombre -- -- -- Notes field -- Campo notas -- -- -- Toggle expiration -- Intercambiar expiración -- -- -- Auto-Type toggle for this and sub groups -- Intercambiar autoescritura para este y subgrupos -- -- -- Expiration field -- Campo expiración -- -- -- Search toggle for this and sub groups -- Intercambiar de búsqueda para este y subgrupos -- -- -- Default auto-type sequence field -- Campo por defecto de secuencia de autoescritura -- -- -- Expires: -- Expira: -- -- -- Use default Auto-Type sequence of parent group -- Usar secuencia de autoescritura por defecto del grupo padre -- -- -- Auto-Type: -- Autoescritura: -- -- -- Search: -- Buscar: -- -- -- Notes: -- Notas: -- -- -- Name: -- Nombre: -- -- -- Set default Auto-Type sequence -- Establecer secuencia de autoescritura por defecto -- -- -- Edit Group -- Editar grupo -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Añadir icono personalizado -- -- -- Delete custom icon -- Eliminar icono personalizado -- -- -- Download favicon -- Descargar icono -- -- -- Unable to fetch favicon. -- No se pudo descargar el icono. -- -- -- Images -- Imágenes -- -- -- All files -- Todos los ficheros -- -- -- Confirm Delete -- Confirmar eliminación -- -- -- Select Image(s) -- Seleccionar imagen(es) -- -- -- Successfully loaded %1 of %n icon(s) -- Cargado %1 de %n icono correctamenteCargado %1 de %n iconos correctamente -- -- -- No icons were loaded -- No se cargaron los iconos -- -- -- %n icon(s) already exist in the database -- %n icono ya existe en la base de datos%n iconos ya existen en la base de datos -- -- -- The following icon(s) failed: -- El siguiente icono falló:Los siguientes iconos fallaron: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Este icono es usado en %n apunte, y será remplazado por el icono por defecto. ¿Desea eliminarlo?Este icono es usado en %n apuntes, y será remplazado por el icono predeterminado. ¿Desea eliminarlo? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Puede habilitar el servicio de icono del sitio web DuckDuckGo bajo «Herramientas -> Configuración -> Seguridad» -- -- -- Download favicon for URL -- Descargar icono para la URL -- -- -- Apply selected icon to subgroups and entries -- Aplicar icono seleccionado a subgrupos y apuntes -- -- -- Also apply to child groups -- Aplicar a los grupos descendientes -- -- -- Also apply to child entries -- Aplicar también a los apuntes hijos -- -- -- Also apply to all children -- Aplicar a todos los descendientes -- -- -- Existing icon selected. -- Icono existente seleccionado. -- -- -- Use default icon -- Usar icono por defecto -- -- -- Use custom icon -- Usar icono personalizado -- -- -- Apply icon to... -- Aplicar icono a... -- -- -- Apply to this group only -- Aplicar solo a este grupo -- -- -- -- EditWidgetProperties -- -- Created: -- Creado: -- -- -- Modified: -- Modificado: -- -- -- Accessed: -- Accedido: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Datos del complemento -- -- -- Remove -- Eliminar -- -- -- Delete plugin data? -- ¿Eliminar los datos del complemento? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- ¿Desea eliminar los datos del complemento seleccionado? --Esto puede causar un mal funcionamiento de los complementos afectados. -- -- -- Key -- Clave -- -- -- Value -- Valor -- -- -- Datetime created -- Fecha de creación -- -- -- Datetime modified -- Fecha de modificación -- -- -- Datetime accessed -- Fecha de acceso -- -- -- Unique ID -- ID único -- -- -- Plugin data -- Complemente de datos -- -- -- Remove selected plugin data -- Eliminar complemento de datos seleccionado -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clonado -- -- -- -- EntryAttachmentsModel -- -- Name -- Nombre -- -- -- Size -- Tamaño -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formato -- -- -- Add -- Añadir -- -- -- Remove -- Eliminar -- -- -- Open -- Abrir -- -- -- Save -- Guardar -- -- -- Select files -- Seleccionar archivos -- -- -- Are you sure you want to remove %n attachment(s)? -- ¿Desea eliminar %n dato adjunto?¿Desea eliminar %n datos adjuntos? -- -- -- Save attachments -- Guardar adjuntos -- -- -- Unable to create directory: --%1 -- No se puede crear directorio: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- ¿Desea sobrescribir el archivo existente «%1» con el adjunto? -- -- -- Confirm overwrite -- Confirmar sobreescritura -- -- -- Unable to save attachments: --%1 -- No se pueden guardar los adjuntos: --%1 -- -- -- Unable to open attachment: --%1 -- No se puede abrir el adjunto: --%1 -- -- -- Unable to open attachments: --%1 -- No se pueden abrir los datos adjuntos: --%1 -- -- -- Confirm remove -- Confirmar retirada -- -- -- Unable to open file(s): --%1 -- No se puede abrir el fichero: --%1No se pueden abrir los ficheros: --%1 -- -- -- Attachments -- Adjuntos -- -- -- Add new attachment -- Añadir nuevo adjunto -- -- -- Remove selected attachment -- Eliminar adjunto seleccionado -- -- -- Open selected attachment -- Abrir adjunto seleccionado -- -- -- Save selected attachment to disk -- Guardar adjunto seleccionado a disco -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 es un fichero grande (%2 MB). --Su base de datos puede vovlerse muy grande y reducir el rendimiento. -- --¿Está seguro de añadir este fichero? -- -- -- Confirm Attachment -- Confirmar adjunto -- -- -- -- EntryAttributesModel -- -- Name -- Nombre -- -- -- -- EntryHistoryModel -- -- Last modified -- Última modificación -- -- -- Title -- Título -- -- -- Username -- Usuario -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Usuario -- -- -- URL -- URL -- -- -- Never -- Nunca -- -- -- Password -- Contraseña -- -- -- Notes -- Notas -- -- -- Expires -- Expira -- -- -- Created -- Creado -- -- -- Modified -- Modificado -- -- -- Accessed -- Accedido -- -- -- Attachments -- Adjuntos -- -- -- Size -- Tamaño -- -- -- Group name -- Nombre del grupo -- -- -- Entry title -- Título del apunte -- -- -- Entry notes -- Notas del apunte -- -- -- Entry expires at -- Apunte expira el -- -- -- Creation date -- Fecha de creación -- -- -- Last modification date -- Fecha de la última modificación -- -- -- Last access date -- Fecha del último acceso -- -- -- Attached files -- Archivos adjuntos -- -- -- Entry size -- Tamaño del apunte -- -- -- Has attachments -- Tiene archivos adjuntos -- -- -- Has TOTP one-time password -- Tiene TOTP contraseña de uso único -- -- -- -- EntryPreviewWidget -- -- Close -- Cerrar -- -- -- General -- General -- -- -- Username -- Usuario -- -- -- Password -- Contraseña -- -- -- Expiration -- Caducidad -- -- -- URL -- URL -- -- -- Attributes -- Atributos -- -- -- Attachments -- Adjuntos -- -- -- Notes -- Notas -- -- -- Autotype -- Autoescritura -- -- -- Window -- Ventana -- -- -- Sequence -- Secuencia -- -- -- Searching -- Buscando… -- -- -- Search -- Buscar -- -- -- Clear -- Vaciar -- -- -- Never -- Nunca -- -- -- [PROTECTED] -- [PROTEGIDO] -- -- -- Enabled -- Activado -- -- -- Disabled -- Desactivado -- -- -- Share -- Compartir -- -- -- Display current TOTP value -- Mostrar valor actual TOTP -- -- -- Advanced -- Avanzado -- -- -- Default Sequence -- Secuencia por defecto -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- URL inválida -- -- -- -- EntryView -- -- Fit to window -- Ajustar a la ventana -- -- -- Fit to contents -- Ajustar al contenido -- -- -- Reset to defaults -- Restablecer ajustes por defecto -- -- -- Has attachments -- Entry attachment icon toggle -- Tiene ficheros adjuntos -- -- -- Has TOTP -- Entry TOTP icon toggle -- Tiene TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Apunte «%1» de la base de datos «%2» fue usado por %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Fallo al registrar el servicio DBus en %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n apunte es usado por %1%n apuntes es usado por %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nombre de archivo -- -- -- Group -- Grupo -- -- -- Manage -- Gestionar -- -- -- Unlock to show -- Desbloquear para mostrar -- -- -- None -- Ninguno -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplicación -- -- -- Manage -- Gestionar -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Servicio de secretos Fido:</b> %1 -- -- -- Unknown -- Unknown PID -- Desconocido -- -- -- Unknown -- Unknown executable path -- Desconocido -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, ejecutable: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Otro servicio de secretos está en ejecución (%1). <br/> Párelo o elimínelo rehabilitando la integración del servicio de secretos. -- -- -- -- Group -- -- [empty] -- group has no children -- [vacío] -- -- -- -- HibpDownloader -- -- Online password validation failed -- La validación en línea de contraseña ha fallado -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Descargar iconos -- -- -- Cancel -- Cancelar -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- ¿Problemas al descargar iconos? --Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección seguridad de la configuración de la aplicación. -- -- -- Close -- Cerrar -- -- -- URL -- URL -- -- -- Status -- Estado -- -- -- Please wait, processing entry list... -- Espere, procesando listado de apuntes… -- -- -- Downloading... -- Descargando... -- -- -- Ok -- Aceptar -- -- -- Already Exists -- Ya existe -- -- -- Download Failed -- Descarga fallida -- -- -- Downloading favicons (%1/%2)... -- Descargando iconos (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Cerrar -- -- -- Close message -- Cerrar mensaje -- -- -- -- Kdbx3Reader -- -- missing database headers -- faltan las cabeceras de la base de datos -- -- -- Header doesn't match hash -- La cabecera no coincide con el hash -- -- -- Invalid header id size -- Tamaño id de la cabecera inválido -- -- -- Invalid header field length -- Longitud del campo en la cabecera inválido -- -- -- Invalid header data length -- Longitud del campo de datos en la cabecera incorrecto -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Se han proporcionado credenciales inválidas, inténtelo de nuevo. --Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. -- -- -- Unable to calculate database key -- No se puede calcular la clave de la base de datos -- -- -- Unable to issue challenge-response: %1 -- No se puede emitir reto-respuesta: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- No se puede emitir reto-respuesta: %1 -- -- -- Unable to calculate database key -- No se puede calcular la clave de la base de datos -- -- -- -- Kdbx4Reader -- -- missing database headers -- faltan las cabeceras de la base de datos -- -- -- Invalid header checksum size -- Suma de verificación incorrecta de la cabecera -- -- -- Header SHA256 mismatch -- Cabecera SHA256 diferente -- -- -- Unknown cipher -- Algoritmo de cifrado desconocido -- -- -- Invalid header id size -- Tamaño id de la cabecera inválido -- -- -- Invalid header field length -- Longitud del campo en la cabecera inválido -- -- -- Invalid header data length -- Longitud del campo de datos en la cabecera incorrecto -- -- -- Failed to open buffer for KDF parameters in header -- Error al abrir el búfer para los parámetros KDF en la cabecera -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Función de derivación de clave no admitida (KDF) o parámetros no válidos -- -- -- Legacy header fields found in KDBX4 file. -- Los campos heredados de la cabecera se encuentran en el fichero KDBX4. -- -- -- Invalid inner header id size -- Tamaño id de la cabecera interna inválido -- -- -- Invalid inner header field length -- Longitud del campo en la cabecera interna inválido -- -- -- Invalid inner header binary size -- Tamaño binario de la cabecera interna inválido -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Versión de asociación de variante de KeePass no admitida. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Longitud del nombre del apunte de asociación variante inválida -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Datos del nombre del apunte asociado variante inválido -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor del apunte asociado variante inválido -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Datos del valor de apunte asociado variante inválido -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor del apunte asociado booleano de variante inválida -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor del apunte asociado Int32 de variante inválida -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor del apunte asociado UInt32 de variante inválida -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor del apunte asociado Int64 de variante inválida -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Longitud del valor de la entrada asociado UInt64 de variante inválida -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Tipo de apunte asociado variante inválido -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Tamaño de tipo de campo asociado variante inválido -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Se han proporcionado credenciales inválidas, inténtelo de nuevo. --Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. -- -- -- (HMAC mismatch) -- (HMAC no coincidente) -- -- -- Unable to calculate database key: %1 -- No se puede calcular la clave de la base de datos: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritmo de cifrado simétrico inválido. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Tamaño de cifrado simétrico IV inválido -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Ha fallado al serializar parámetros KDF en variante asociada -- -- -- Unable to calculate database key: %1 -- No se puede calcular la clave de la base de datos: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cifrado no compatible -- -- -- Invalid compression flags length -- Tamaño opcional de compresión inválido -- -- -- Unsupported compression algorithm -- Algoritmo de compresión no admitido -- -- -- Invalid master seed size -- Tamaño inválido de semilla maestra -- -- -- Invalid transform seed size -- Tamaño inválido de semilla de transformación -- -- -- Invalid transform rounds size -- Tamaño inválido de rondas de transformación -- -- -- Invalid start bytes size -- Tamaño no válido de bytes de inicio -- -- -- Invalid random stream id size -- Tamaño no válido de id de flujo -- -- -- Invalid inner random stream cipher -- Cifrador del flujo interno no válido -- -- -- Not a KeePass database. -- No es una base de datos KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- El archivo seleccionado es una antigua base de datos de KeePass 1 (.kdb). -- --Puede importarla pulsando sobre «Base de datos → Importar base de datos KeePass 1…». --Esta migración es de sentido único. No podrá abrir la base de datos importada con la versión antigua de KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Versión no admitida de la base de datos de KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Longitud de UUID de cifrado no válida: %1 (longitud =%2) -- -- -- Unable to parse UUID: %1 -- No se puede analizar UUID: %1 -- -- -- Failed to read database file. -- Error al leer el fichero de base de datos. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Error de parsing XML: %1 -- -- -- No root group -- Ningún grupo de raíz -- -- -- Missing icon uuid or data -- Falta icono uuid o datos -- -- -- Missing custom data key or value -- Falta la clave de datos personializados o valor -- -- -- Multiple group elements -- Múltiples elementos de grupo -- -- -- Null group uuid -- Uuid de grupo nulo -- -- -- Invalid group icon number -- Número de icono de grupo no válido -- -- -- Invalid EnableAutoType value -- Valor no válido de EnableAutoType -- -- -- Invalid EnableSearching value -- Valor no válido de EnableSearching -- -- -- No group uuid found -- No encontrado uuid de grupo -- -- -- Null DeleteObject uuid -- Uuid de DeleteObject nulo -- -- -- Missing DeletedObject uuid or time -- Falta uuid de DeletedObject o tiempo -- -- -- Null entry uuid -- Uuid de apunte nulo -- -- -- Invalid entry icon number -- Número de icono de apunte no válido -- -- -- History element in history entry -- Elemento del historial en el apunte del historial -- -- -- No entry uuid found -- Uuid de apunte no encontrado -- -- -- History element with different uuid -- Elemento del historial con uuid diferente -- -- -- Duplicate custom attribute found -- Atributo personalizado duplicado encontrado -- -- -- Entry string key or value missing -- Falta clave de apunte de texto o valor -- -- -- Entry binary key or value missing -- Falta clave de apunte binaria o valor -- -- -- Auto-type association window or sequence missing -- Falta secuencia o ventana asociada de autoescritura -- -- -- Invalid bool value -- Valor booleano inválido -- -- -- Invalid date time value -- Valor de tiempo o fecha no válido -- -- -- Invalid color value -- Valor del color no válido -- -- -- Invalid color rgb part -- Parte de color rgb no válido -- -- -- Invalid number value -- Valor de número no válido -- -- -- Invalid uuid value -- Valor uuid no válido -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- No se puede descomprimir binario -- -- -- XML error: --%1 --Line %2, column %3 -- Error XML: --%1 --Linea %2, columna %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Estructura de archivo de preferencias KeeAgent inválido. -- -- -- Private key is an attachment but no attachments provided. -- La clave privada es un adjunto pero no se han proporcionado adjuntos. -- -- -- Private key is empty -- La clave privada está vacía -- -- -- File too large to be a private key -- Archivo demasiado grande para ser una clave privada -- -- -- Failed to open private key -- Error al abrir la clave privada -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- No se pudo abrir la base de datos. -- -- -- Import KeePass1 Database -- Importar base de datos KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Incapaz de leer el fichero clave. -- -- -- Not a KeePass database. -- No es una base de datos KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritmo de cifrado no soportado. -- -- -- Unsupported KeePass database version. -- Versión de la base de datos KeePass no soportada. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- No se puede leer el cifrado IV -- -- -- Invalid number of groups -- Número de grupos no válido -- -- -- Invalid number of entries -- Número de apuntes no válido -- -- -- Invalid content hash size -- Tamaño del hash de contenido no válido -- -- -- Invalid transform seed size -- Tamaño de semilla de transformación inválido -- -- -- Invalid number of transform rounds -- Número de turnos de transformación no válido -- -- -- Unable to construct group tree -- Incapaz de crear un grupo -- -- -- Root -- Raíz -- -- -- Key transformation failed -- Error en la transformación de la clave -- -- -- Invalid group field type number -- Número de tipo de campo de grupo inválido -- -- -- Invalid group field size -- Tamaño inválido para el campo grupo -- -- -- Read group field data doesn't match size -- Datos de campo de grupo leídos no coinciden en tamaño -- -- -- Incorrect group id field size -- Tamaño de campo de id de grupo incorrecto -- -- -- Incorrect group creation time field size -- Tamaño de campo de tiempo de creación de grupo incorrecto -- -- -- Incorrect group modification time field size -- Tamaño de campo de hora de modificación de grupo incorrecto -- -- -- Incorrect group access time field size -- Tamaño de campo de tiempo de acceso de grupo incorrecto -- -- -- Incorrect group expiry time field size -- Tamaño de campo de tiempo de caducidad de grupo incorrecto -- -- -- Incorrect group icon field size -- Tamaño del campo del ícono de grupo incorrecto -- -- -- Incorrect group level field size -- Tamaño de campo del nivel de grupo incorrecto -- -- -- Invalid group field type -- Tipo de campo de grupo inválido -- -- -- Missing group id or level -- Falta identificador de grupo o nivel -- -- -- Missing entry field type number -- Entrada de tipo número en campo faltante -- -- -- Invalid entry field size -- Tamaño del apunte para el campo inválido -- -- -- Read entry field data doesn't match size -- Datos de campo de apunte no coinciden en tamaño -- -- -- Invalid entry uuid field size -- Tamaño del apunte para el campo uuid inválido -- -- -- Invalid entry group id field size -- Tamaño del apunte para el campo identificador de grupo inválido -- -- -- Invalid entry icon field size -- Tamaño del apunte para el campo icono inválido -- -- -- Invalid entry creation time field size -- Tamaño del apunte para el campo tiempo de creación inválido -- -- -- Invalid entry modification time field size -- Tamaño del apunte para el campo tiempo de modificación inválido -- -- -- Invalid entry expiry time field size -- Tamaño del apunte para el campo tiempo de expiración inválido -- -- -- Invalid entry field type -- Tipo del apunte para el campo inválido -- -- -- unable to seek to content position -- incapaz de buscar la posición de contenido -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Se han proporcionado credenciales inválidas, inténtelo de nuevo. --Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. -- -- -- Unable to calculate database key -- No se puede calcular la clave de la base de datos -- -- -- -- KeeShare -- -- Invalid sharing reference -- Referencia de compartición inválida -- -- -- Inactive share %1 -- Compartición inactiva %1 -- -- -- Imported from %1 -- Importado de %1 -- -- -- Exported to %1 -- Exportado a %1 -- -- -- Synchronized with %1 -- Sincronizado con %1 -- -- -- Import is disabled in settings -- Importar está deshabilitado en configuración -- -- -- Export is disabled in settings -- Exportar está deshabilitado en configuración -- -- -- Inactive share -- Compartición inactiva -- -- -- Imported from -- Importado desde -- -- -- Exported to -- Exportado a -- -- -- Synchronized with -- Sincronizado con -- -- -- -- KeyComponentWidget -- -- Key Component -- Componente de la clave -- -- -- Key Component Description -- Descripción del componente de la clave -- -- -- Cancel -- Cancelar -- -- -- Key Component set, click to change or remove -- Conjunto de componentes de la clave, haga clic para cambiar o eliminar -- -- -- Add %1 -- Add a key component -- Añadir %1 -- -- -- Change %1 -- Change a key component -- Cambiar %1 -- -- -- Remove %1 -- Remove a key component -- Eliminar %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 conjunto, haga clic para cambiar o eliminar -- -- -- -- KeyFileEditWidget -- -- Generate -- Generar -- -- -- Key File -- Fichero Clave -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Puede añadir un fichero clave que contiene bytes aleatorios para seguridad adicional.</p><p>¡Debe mantenerlo en secreto y nunca perderlo o se bloquearán!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Error al cargar el fichero clave «%1» --Mensaje: %2 -- -- -- Key files -- Ficheros clave -- -- -- All files -- Todos los archivos -- -- -- Create Key File... -- Crear un fichero clave... -- -- -- Error creating key file -- Error al crear el fichero clave -- -- -- Unable to create key file: %1 -- No se puede crear el fichero de claves: %1 -- -- -- Select a key file -- Seleccionar un fichero clave -- -- -- Key file selection -- Selección de fichero clave -- -- -- Browse for key file -- Explorar para un fichero clave -- -- -- Browse... -- Explorar… -- -- -- Generate a new key file -- Generar un nuevo fichero clave -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Nota: no use un archivo que pueda cambiar dado que impedirá desbloquear la base de datos. -- -- -- Invalid Key File -- Fichero clave inválido -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- No puede usar la base de datos actual como su propio fichero clave. Seleccione un fichero diferente o genere un nuevo fichero clave. -- -- -- Suspicious Key File -- Fichero clave sospechoso -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- El fichero clave seleccionado parece una base de datos de contraseñas. Un fichero clave debe ser un fichero estático que nunca cambie o perderá el acceso a su base de datos para siempre. --¿Desea continuar con este archivo? -- -- -- Old key file format -- Formato de fichero clave antiguo -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Ha seleccionado un fichero clave con un formato que KeePassXC<br>puede dejar de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave en su lugar. -- -- -- -- MainWindow -- -- &Database -- Base de &datos -- -- -- &Help -- Ay&uda -- -- -- &Groups -- &Grupos -- -- -- &Tools -- &Herramientas -- -- -- &Quit -- &Salir -- -- -- &About -- &Acerca de -- -- -- Database settings -- Configuración de la base de datos -- -- -- Copy username to clipboard -- Copiar usuario al portapapeles -- -- -- Copy password to clipboard -- Copiar contraseña al portapapeles -- -- -- &Settings -- &Configuración -- -- -- &Title -- &Título -- -- -- Copy title to clipboard -- Copiar título al portapapeles -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copiar URL al portapapeles -- -- -- &Notes -- &Notas -- -- -- Copy notes to clipboard -- Copiar notas al portapapeles -- -- -- Copy &TOTP -- Copiar &TOTP -- -- -- E&mpty recycle bin -- &Vaciar papelera de reciclaje -- -- -- Clear history -- Limpiar historial -- -- -- Access error for config file %1 -- Error de acceso al archivo de configuración %1 -- -- -- Settings -- Configuración -- -- -- Toggle window -- Cambiar a ventana -- -- -- Quit KeePassXC -- Salir de KeePassXC -- -- -- Please touch the button on your YubiKey! -- ¡Por favor presione el botón en su YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ADVERTENCIA: Usted está utilizando una versión inestable de KeePassXC! --Hay un alto riesgo de corrupción, mantenga una copia de seguridad de sus bases de datos. --Esta versión no es para uso de producción. -- -- -- &Donate -- &Donar -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- ADVERTENCIA: ¡Su versión de Qt puede hacer que KeePassXC se bloquee con un teclado virtual! --Le recomendamos que utilice la AppImage disponible en nuestra página de descargas. -- -- -- &Import -- &Importar -- -- -- Create a new database -- Crear una base de datos nueva -- -- -- Merge from another KDBX database -- Combinar desde otra base de datos KDBX -- -- -- Add a new entry -- Añadir un nuevo apunte -- -- -- View or edit entry -- Ver o editar apunte -- -- -- Add a new group -- Añadir un nuevo grupo -- -- -- Perform &Auto-Type -- Realizar &autoescritura -- -- -- Open &URL -- Abrir &URL -- -- -- Import a KeePass 1 database -- Importar una base de datos KeePass 1 -- -- -- Import a CSV file -- Importar un archivo CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTA: ¡Está utilizando una versión preliminar de KeePassXC! --Espere algunos errores y problemas menores, esta versión no está destinada para uso de producción. -- -- -- Check for updates on startup? -- ¿Buscar actualizaciones en el inicio? -- -- -- Would you like KeePassXC to check for updates on startup? -- ¿Quieres KeePassXC para comprobar las actualizaciones en el arranque? -- -- -- You can always check for updates manually from the application menu. -- Siempre se puede comprobar si hay actualizaciones manualmente desde el menú de la aplicación. -- -- -- &Export -- &Exportar -- -- -- Sort &A-Z -- Ordenar &A-Z -- -- -- Sort &Z-A -- Ordenar &Z-A -- -- -- &Password Generator -- &Generador de contraseñas -- -- -- Import a 1Password Vault -- Importar un 1Password Vault -- -- -- &Getting Started -- &Guía de inicio -- -- -- &User Guide -- Guía de &usuario -- -- -- &Keyboard Shortcuts -- Atajos de &teclado -- -- -- &Recent Databases -- Bases de datos &recientes -- -- -- &Entries -- &Apuntes -- -- -- Copy Att&ribute -- Copiar at&ributo -- -- -- TOTP -- TOTP -- -- -- View -- Ver -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Comprobar actualizaciones -- -- -- &Open Database… -- &Abrir base de datos... -- -- -- &Save Database -- &Guardar base de datos -- -- -- &Close Database -- &Cerrar base de datos -- -- -- &New Database… -- &Nueva base de datos -- -- -- &Merge From Database… -- Com&binar desde base de datos... -- -- -- &New Entry… -- &Nuevo apunte... -- -- -- &Edit Entry… -- &Editar apunte... -- -- -- &Delete Entry… -- E&liminar apunte -- -- -- &New Group… -- &Nuevo grupo... -- -- -- &Edit Group… -- &Editar grupo... -- -- -- &Delete Group… -- &E&liminar grupo -- -- -- Download All &Favicons… -- Descargar todos los &iconos... -- -- -- Sa&ve Database As… -- Guar&dar base de datos como... -- -- -- Database &Security… -- &Seguridad de base de datos... -- -- -- Database &Reports... -- &Informes de base de datos... -- -- -- Statistics, health check, etc. -- Estadísticas, salud, etc. -- -- -- &Database Settings… -- &Configuración de base de datos... -- -- -- &Clone Entry… -- &Duplicar apunte... -- -- -- Move u&p -- Mover &arriba -- -- -- Move entry one step up -- Mover el apunte una posición arriba -- -- -- Move do&wn -- Mover abajo -- -- -- Move entry one step down -- Mover el apunte una posición abajo -- -- -- Copy &Username -- Copiar nombre de &usuario -- -- -- Copy &Password -- Copiar &contraseña -- -- -- Download &Favicon -- Descargar &icono -- -- -- &Lock Databases -- &Bloquear bases de datos -- -- -- &CSV File… -- Archivo &CSV... -- -- -- &HTML File… -- Archivo &HTML... -- -- -- KeePass 1 Database… -- Base de datos KeePass 1... -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- Archivo CSV... -- -- -- Show TOTP -- Mostrar TOTP -- -- -- Show QR Code -- Mostrar código QR -- -- -- Set up TOTP… -- Configurar TOTP... -- -- -- Report a &Bug -- Informar de un &error -- -- -- Open Getting Started Guide -- Abrir guía de inicio -- -- -- &Online Help -- Ayuda en &línea -- -- -- Go to online documentation -- Ir a la documentación en línea -- -- -- Open User Guide -- Abrir guía de usuario -- -- -- Save Database Backup... -- Guardar copia de seguridad de la base de datos... -- -- -- Add key to SSH Agent -- Añadir clave a agente SSH -- -- -- Remove key from SSH Agent -- Eliminar clave del agente SSH -- -- -- Compact Mode -- Modo compacto -- -- -- Automatic -- Automático -- -- -- Light -- Claro -- -- -- Dark -- Oscuro -- -- -- Classic (Platform-native) -- Clásico (Plataforma-nativo) -- -- -- Show Toolbar -- Mostrar barra de herramientas -- -- -- Show Preview Panel -- Mostrar panel de previsualización -- -- -- Don't show again for this version -- No mostrar de nuevo para esta versión -- -- -- Restart Application? -- ¿Reiniciar la aplicación? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Debe reiniciar la aplicación para aplicar esta configuración. ¿Desea reiniciar ahora? -- -- -- Perform Auto-Type Sequence -- Realizar secuencia de autoescritura -- -- -- {USERNAME} -- {USUARIO} -- -- -- {USERNAME}{ENTER} -- {USUARIO}{ENTER} -- -- -- {PASSWORD} -- {CONTRASEÑA} -- -- -- {PASSWORD}{ENTER} -- {CONTRASEÑA}{ENTER} -- -- -- Always on Top -- Siempre encima -- -- -- Hide Usernames -- Ocultar usuarios -- -- -- Hide Passwords -- Ocultar contraseñas -- -- -- -- ManageDatabase -- -- Database settings -- Configuración de la base de datos -- -- -- Edit database settings -- Editar configuración de base de datos -- -- -- Unlock database -- Desbloquear base de datos -- -- -- Unlock database to show more information -- Desbloquear para mostrar más información -- -- -- Lock database -- Bloquear base de datos -- -- -- -- ManageSession -- -- Disconnect -- Desconectar -- -- -- Disconnect this application -- Desconectar esta aplicación -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Creando %1 faltante [%2] -- -- -- Relocating %1 [%2] -- Reubicando %1 [%2] -- -- -- Overwriting %1 [%2] -- Sobrescribiendo %1 [%2] -- -- -- older entry merged from database "%1" -- el apunte más antiguo se combinó a la base de datos «%1» -- -- -- Adding backup for older target %1 [%2] -- Añadiendo copia de seguridad para el destino más antiguo %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Añadiendo copia de seguridad para la fuente mas antigua %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Volver a aplicar un apunte de destino más antiguo sobre la fuente más nueva %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Volver a aplicar un apunte de origen anterior sobre el objetivo más nuevo %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Sincronización desde una fuente más nueva %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Sincronización desde una fuente anterior %1 [%2] -- -- -- Deleting child %1 [%2] -- Eliminando hijo %1[%2] -- -- -- Deleting orphan %1 [%2] -- Eliminando huérfano %1 [%2] -- -- -- Changed deleted objects -- cambiado objetos eliminados -- -- -- Adding missing icon %1 -- Añadiendo el icono faltante %1 -- -- -- Removed custom data %1 [%2] -- Eliminados datos personalizados %1 [%2] -- -- -- Adding custom data %1 [%2] -- Añadiendo datos personalizados %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Crear una base de datos nueva KeePassXC... -- -- -- Root -- Root group -- Raíz -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Asistente -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. -- -- -- Advanced Settings -- Configuraciones avanzadas -- -- -- Simple Settings -- Ajustes simples -- -- -- Encryption Settings -- Configuraciones de cifrado -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Credenciales de base de datos -- -- -- A set of credentials known only to you that protects your database. -- Un conjunto de credenciales solo conocido por ti que protege su base de datos. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Configuraciones de cifrado -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Información general de la base de datos -- -- -- Please fill in the display name and an optional description for your new database: -- Por favor complete el nombre, y agregue una descripción opcional, para su nueva base de datos: -- -- -- -- NixUtils -- -- Password Manager -- Gestor de contraseñas -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 inválido, no contiene cabecera -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- No se pueden leer todos los bytes IV, se deseaban 16 pero se obtuvieron %1 -- -- -- Unable to init cipher for opdata01: %1 -- No se puede inicializar el cifrado para opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- No se pueden leer todos los bytes de firma HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 malformado debido a un HMAC fallido -- -- -- Unable to process clearText in place -- No se puede procesar clearText en su lugar -- -- -- Expected %1 bytes of clear-text, found %2 -- Se esperaban %1 bytes de texto plano, se encontraron %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Leer la base de datos no produce una instancia --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- El directorio .opvault debe existir -- -- -- Directory .opvault must be readable -- El directorio .opvault debe ser leíble -- -- -- Directory .opvault/default must exist -- El directorio .opvault/default debe existir -- -- -- Directory .opvault/default must be readable -- El directorio .opvault/default debe ser leíble -- -- -- Unable to decode masterKey: %1 -- No se puede decodificar la clave maestra: %1 -- -- -- Unable to derive master key: %1 -- No se puede derivar la clave maestra: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Fichero clave no válido, esperando una clave de OpenSSH -- -- -- PEM boundary mismatch -- Desajuste de límite PEM -- -- -- Base64 decoding failed -- No se pudo decodificar Base64 -- -- -- Key file way too small. -- Fichero clave demasiado pequeño. -- -- -- Key file magic header id invalid -- Id de encabezado mágico del fichero clave inválido -- -- -- Found zero keys -- Cero claves encontradas -- -- -- Failed to read public key. -- No se pudo leer la clave pública. -- -- -- Corrupted key file, reading private key failed -- Fichero clave corrupto, no se pudo leer la clave privada -- -- -- No private key payload to decrypt -- Sin contenido a descifrar en clave privada -- -- -- Trying to run KDF without cipher -- Tratando de ejecutar KDF sin cifrado -- -- -- Passphrase is required to decrypt this key -- Frase de contraseña necesaria para descrifrar esta clave -- -- -- Key derivation failed, key file corrupted? -- La derivación de la clave falló, ¿el fichero clave está dañado? -- -- -- Decryption failed, wrong passphrase? -- ¿Error de descifrado, frase de contraseña incorrecta? -- -- -- Unexpected EOF while reading public key -- EOF inesperado al leer la clave pública -- -- -- Unexpected EOF while reading private key -- EOF inesperado al leer la clave privada -- -- -- Can't write public key as it is empty -- No se puede escribir la clave pública ya que es vacía -- -- -- Unexpected EOF when writing public key -- EOF inesperado al escribir la clave pública -- -- -- Can't write private key as it is empty -- No se puede escribir la clave privada ya que está vacía -- -- -- Unexpected EOF when writing private key -- EOF inesperado al escribir la clave privada -- -- -- Unsupported key type: %1 -- Tipo de clave no soportada: %1 -- -- -- Unknown cipher: %1 -- Cifrado desconocido: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cifrado IV demasiado corto para MD5 kdf -- -- -- Unknown KDF: %1 -- KDF desconocido: %1 -- -- -- Unknown key type: %1 -- Tipo de clave desconocida: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Contraseñas que no coinciden -- -- -- Passwords match so far -- Contraseñas coincidentes hasta el momento -- -- -- Toggle Password (%1) -- Intercambiar contraseña (%1) -- -- -- Generate Password (%1) -- Generar contraseña (%1) -- -- -- Warning: Caps Lock enabled! -- Advertencia: ¡las mayúsculas están activadas! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Ingrese la contraseña -- -- -- Confirm password: -- Confirmar la contraseña -- -- -- Password -- Contraseña -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>La contraseña es el método principal para asegurar su base de datos.<p><p>Las contraseñas buenas son largas y únicas. KeePassXC puede generar una para usted.<p> -- -- -- Passwords do not match. -- Las contraseñas no coinciden. -- -- -- Password field -- Campo de contraseña -- -- -- Repeat password field -- Campo repetir contraseña -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- seguridad -- -- -- entropy -- entropía -- -- -- Password -- Contraseña -- -- -- Character Types -- Tipos de caracteres -- -- -- Numbers -- Números -- -- -- Extended ASCII -- ASCII extendido -- -- -- Exclude look-alike characters -- Excluir caracteres similares -- -- -- Pick characters from every group -- Elegir caracteres de todos los grupos -- -- -- &Length: -- &Longitud: -- -- -- Passphrase -- Frase de contraseña -- -- -- Wordlist: -- Lista de palabras: -- -- -- Word Separator: -- Separador de palabras: -- -- -- Close -- Cerrar -- -- -- Entropy: %1 bit -- Entropía: %1 bit -- -- -- Password Quality: %1 -- Calidad de la contraseña: %1 -- -- -- Poor -- Password quality -- Pobre -- -- -- Weak -- Password quality -- Débil -- -- -- Good -- Password quality -- Buena -- -- -- Excellent -- Password quality -- Excelente -- -- -- Switch to advanced mode -- Cambiar a modo avanzado -- -- -- Advanced -- Avanzado -- -- -- Braces -- Llaves -- -- -- Punctuation -- Puntuación -- -- -- Quotes -- Comillas -- -- -- Logograms -- Logogramas -- -- -- Character set to exclude from generated password -- Conjunto de caracteres a excluir de la contraseña generada -- -- -- Do not include: -- No incluir: -- -- -- Add non-hex letters to "do not include" list -- Añadir letras no-hexadecimales a la lista de "no incluir" -- -- -- Hex -- Hexadecimal -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Caracteres excluidos: «0», «1», «l», «I», «O», «|», «﹒» -- -- -- Generated password -- Generar contraseña -- -- -- Upper-case letters -- Letras mayúsculas -- -- -- Lower-case letters -- Letras minúsculas -- -- -- Special characters -- Caracteres especiales -- -- -- Math Symbols -- Símbolos matemáticos -- -- -- Dashes and Slashes -- Guiones y barras -- -- -- Excluded characters -- Excluir caracteres -- -- -- Hex Passwords -- Contraseñas hex -- -- -- Password length -- Longitud de contraseña -- -- -- Word Case: -- Capitalización de palabra: -- -- -- Regenerate password -- Regenerar contraseña -- -- -- Copy password -- Copiar contraseña -- -- -- lower case -- Minúsculas -- -- -- UPPER CASE -- Mayúsculas -- -- -- Title Case -- Capitalización de título -- -- -- Generate Password -- Generar contraseña -- -- -- Also choose from: -- También seleccionar de: -- -- -- Additional characters to use for the generated password -- Caracteres adicionales a usar para generar la contraseña -- -- -- Additional characters -- Caracteres adicionales -- -- -- Word Count: -- Cantidad de palabras: -- -- -- Esc -- Esc -- -- -- Apply Password -- Aplicar contraseña -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Regenerar contraseña (%1) -- -- -- Special Characters -- Caracteres especiales -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Estadísticas -- -- -- Very weak password -- Contraseña muy débil -- -- -- Password entropy is %1 bits -- La entropía de la contraseña es de %1 bits -- -- -- Weak password -- Contraseña débil -- -- -- Used in %1/%2 -- Usada en %1%2 -- -- -- Password is used %1 times -- La contraseña es usada %1 veces -- -- -- Password has expired -- La contraseña ha expirado -- -- -- Password expiry was %1 -- La expiración de la contraseña fue %1 -- -- -- Password is about to expire -- La contraseña está a punto de expirar -- -- -- Password expires in %1 days -- La contraseña expira en %1 días -- -- -- Password will expire soon -- La contraseña expirará pronto -- -- -- Password expires on %1 -- La contraseña expira el %1 -- -- -- Health Check -- Comprobación de salud -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Sobrescribir -- -- -- Delete -- Eliminar -- -- -- Move -- Mover -- -- -- Empty -- Vaciar -- -- -- Remove -- Eliminar -- -- -- Skip -- Omitir -- -- -- Disable -- Deshabilitar -- -- -- Merge -- Combinar -- -- -- Continue -- Continuar -- -- -- -- QObject -- -- Database not opened -- Base de datos no abierta -- -- -- Database hash not available -- Hash de la base de datos no disponible -- -- -- Client public key not received -- Clave pública del cliente no recibida -- -- -- Cannot decrypt message -- No se puede descifrar el mensaje -- -- -- Action cancelled or denied -- Acción cancelada o denegada -- -- -- KeePassXC association failed, try again -- No se pudo asociar con KeePassXC, inténtelo de nuevo -- -- -- Encryption key is not recognized -- Clave de cifrado no es reconocida -- -- -- Incorrect action -- Acción incorrecta -- -- -- Empty message received -- Mensaje vacío recibido -- -- -- No URL provided -- No hay URL proporcionada -- -- -- No logins found -- No se encontraron inicios de sesión -- -- -- Unknown error -- Error desconocido -- -- -- Add a new entry to a database. -- Añadir un nuevo apunte a una base de datos. -- -- -- Path of the database. -- Ruta a la base de datos. -- -- -- Key file of the database. -- Fichero clave de la base de datos -- -- -- path -- ruta -- -- -- Username for the entry. -- Usuario para el apunte. -- -- -- username -- usuario -- -- -- URL for the entry. -- URL del apunte. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Solicitar contraseña del apunte. -- -- -- Generate a password for the entry. -- Generar una contraseña para el apunte. -- -- -- length -- Tamaño -- -- -- Path of the entry to add. -- Ruta del apunte para añadir. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Ruta del apunte para copiar. -- -- -- Timeout in seconds before clearing the clipboard. -- Tiempo de espera en segundos antes de eliminar el portapapeles. -- -- -- Edit an entry. -- Editar un apunte. -- -- -- Title for the entry. -- Título para el apunte. -- -- -- title -- título -- -- -- Path of the entry to edit. -- Ruta del apunte para editar. -- -- -- Estimate the entropy of a password. -- Estimar la entropía de una contraseña. -- -- -- Password for which to estimate the entropy. -- Contraseña para la que desea calcular la entropía. -- -- -- Perform advanced analysis on the password. -- Realizar análisis avanzado sobre la contraseña. -- -- -- -- --Available commands: -- -- -- --Comandos disponibles: -- -- -- -- Name of the command to execute. -- Nombre del comando a ejecutar. -- -- -- List database entries. -- Listar los apuntes de la base de datos. -- -- -- Path of the group to list. Default is / -- Ruta del grupo a listar. Por defecto es / -- -- -- Find entries quickly. -- Encontrar los apuntes rápidamente. -- -- -- Search term. -- Término de búsqueda. -- -- -- Merge two databases. -- Combinar dos bases de datos. -- -- -- Path of the database to merge from. -- Ruta de la base de datos de la que combinar. -- -- -- Use the same credentials for both database files. -- Utilizar las mismas credenciales para ambos archivos de base de datos. -- -- -- Key file of the database to merge from. -- Fichero clave de la base de datos desde la cual desea combinar. -- -- -- Show an entry's information. -- Muestra información de un apunte. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nombres de los atributos para mostrar. Esta opción se puede especificar más de una vez, con cada atributo apareciendo uno por línea en el orden dado. Si no se especifica ningún atributo, se da un resumen de los atributos predeterminados. -- -- -- attribute -- atributo -- -- -- Name of the entry to show. -- Nombre del apunte para mostrar. -- -- -- NULL device -- Dispositivo NULL -- -- -- error reading from device -- error leyendo del dispositivo -- -- -- malformed string -- cadena de caracteres mal formada -- -- -- missing closing quote -- comilla de cierre faltante -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Usuario -- -- -- Password -- Contraseña -- -- -- Notes -- Notas -- -- -- Last Modified -- Última modificación -- -- -- Created -- Creado -- -- -- Browser Integration -- Integración con navegadores -- -- -- SSH Agent -- Agente SSH -- -- -- Generate a new random diceware passphrase. -- Generar una nueva frase de contraseña aleatoria diceware. -- -- -- Word count for the diceware passphrase. -- Número de palabras para la frase de contraseña de diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista de palabras para el generador de diceware. --[Por defecto: Inglés EFF] -- -- -- Generate a new random password. -- Generar una nueva contraseña aleatoria. -- -- -- Could not create entry with path %1. -- No pudo crearse el apunte con ruta %1. -- -- -- Enter password for new entry: -- Introduzca la contraseña para el nuevo apunte: -- -- -- Writing the database failed %1. -- Falló escritura de la base de datos %1. -- -- -- Successfully added entry %1. -- El apunte %1 se añadió correctamente. -- -- -- Invalid timeout value %1. -- Valor inválido para valor de tiempo de espera %1. -- -- -- Entry %1 not found. -- No se encontró el apunte %1. -- -- -- Entry with path %1 has no TOTP set up. -- El apunte con ruta %1 no tiene un TOTP configurado. -- -- -- Clearing the clipboard in %1 second(s)... -- Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundo(s)... -- -- -- Clipboard cleared! -- ¡El portapapeles se ha limpiado! -- -- -- Silence password prompt and other secondary outputs. -- Silenciar la solicitud de contraseña y demás productos secundarios. -- -- -- count -- CLI parameter -- número -- -- -- Could not find entry with path %1. -- No se pudo encontrar el apunte con la ruta %1. -- -- -- Not changing any field for entry %1. -- No cambiar cualquier campo para el apunte 1%. -- -- -- Enter new password for entry: -- Introduzca una nueva contraseña para el apunte: -- -- -- Writing the database failed: %1 -- Fallo al escribir la base de datos: %1 -- -- -- Successfully edited entry %1. -- Apunte %1 editado correctamente. -- -- -- Length %1 -- Longitud %1 -- -- -- Entropy %1 -- Entropía: %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-palabra extra bits %1 -- -- -- Type: Bruteforce -- Tipo: Fuerza bruta -- -- -- Type: Dictionary -- Tipo: Diccionario -- -- -- Type: Dict+Leet -- Tipo: Dicc+leet -- -- -- Type: User Words -- Tipo: Palabras de usuario -- -- -- Type: User+Leet -- Tipo: Usuario+leet -- -- -- Type: Repeated -- Tipo: repetido -- -- -- Type: Sequence -- Tipo: Secuencia -- -- -- Type: Spatial -- Tipo: Espacial -- -- -- Type: Date -- Tipo: Fecha -- -- -- Type: Bruteforce(Rep) -- Tipo: Fuerza Bruta(Rep) -- -- -- Type: Dictionary(Rep) -- Tipo: Diccionario(Rep) -- -- -- Type: Dict+Leet(Rep) -- Tipo: Dicc+Leet(Rep) -- -- -- Type: User Words(Rep) -- Tipo: palabras de usuario (rep) -- -- -- Type: User+Leet(Rep) -- Tipo: Usuario + Leet(Rep) -- -- -- Type: Repeated(Rep) -- Tipo: Repetido(Rep) -- -- -- Type: Sequence(Rep) -- Tipo: Secuencia(Rep) -- -- -- Type: Spatial(Rep) -- Tipo: Espacial(Rep) -- -- -- Type: Date(Rep) -- Tipo: Fecha(Rep) -- -- -- Type: Unknown%1 -- Tipo: Desconocido %1 -- -- -- Entropy %1 (%2) -- Entropía %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Longitud de la contraseña (%1) != Suma de la longitud de las partes (%2) *** -- -- -- Failed to load key file %1: %2 -- Error al cargar el fichero clave %1: %2 -- -- -- Length of the generated password -- Longitud de la contraseña generada -- -- -- Use lowercase characters -- Usar caracteres en minúscula -- -- -- Use uppercase characters -- Usar caracteres en mayúscula -- -- -- Use special characters -- Usar caracteres especiales -- -- -- Use extended ASCII -- Usar ASCII extendido -- -- -- Exclude character set -- Excluir conjunto de caracteres -- -- -- chars -- caracteres -- -- -- Exclude similar looking characters -- Excluir caracteres de aspecto similar -- -- -- Include characters from every selected group -- Incluir caracteres de cada grupo seleccionado -- -- -- Recursively list the elements of the group. -- Listar recursivamente los elementos del grupo. -- -- -- Cannot find group %1. -- No se puede encontrar el grupo %1. -- -- -- Error reading merge file: --%1 -- Error al leer el archivo a combinar: --%1 -- -- -- Unable to save database to file : %1 -- No se puede guardar la base de datos en el archivo: %1 -- -- -- Unable to save database to file: %1 -- No se puede guardar la base de datos en el archivo: %1 -- -- -- Successfully recycled entry %1. -- Apunte %1 reciclado correctamente. -- -- -- Successfully deleted entry %1. -- Se eliminó correctamente el apunte %1. -- -- -- Show the entry's current TOTP. -- Muestra el TOTP actual del apunte. -- -- -- ERROR: unknown attribute %1. -- ERROR: atributo desconocido %1. -- -- -- No program defined for clipboard manipulation -- Ningún programa definido para la manipulación del portapapeles. -- -- -- file empty -- archivo vacío -- -- -- %1: (row, col) %2,%3 -- %1: (fila, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Configuración inválida -- -- -- Invalid Key -- TOTP -- Clave inválida -- -- -- Message encryption failed. -- El cifrado del mensaje falló. -- -- -- No groups found -- No se encontraron grupos -- -- -- Create a new database. -- Crear una base de datos nueva. -- -- -- File %1 already exists. -- El archivo %1 ya existe. -- -- -- Loading the key file failed -- La carga del fichero clave falló -- -- -- No key is set. Aborting database creation. -- No se establece ninguna clave. Anulando la creación de base de datos. -- -- -- Failed to save the database: %1. -- Error al guardar la base de datos: %1. -- -- -- Successfully created new database. -- Nueva base de datos creada correctamente. -- -- -- Creating KeyFile %1 failed: %2 -- Error al crear el fichero clave %1: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Error al cargar el fichero clave %1: %2 -- -- -- Path of the entry to remove. -- Ruta del apunte a eliminar. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- El archivo de bloqueo de instancia única existente no es válido. Lanzando nueva instancia. -- -- -- The lock file could not be created. Single-instance mode disabled. -- El archivo de bloqueo no pudo ser creado. Modo de instancia única deshabilitado. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - gestor de claves multiplataforma -- -- -- filenames of the password databases to open (*.kdbx) -- nombre de archivo de las bases de datos de contraseñas a abrir (*.kdbx) -- -- -- path to a custom config file -- ruta a un archivo de configuración personalizado -- -- -- key file of the database -- fichero clave de la base de datos -- -- -- read password of the database from stdin -- leer contraseña de la base de datos desde la entrada estándar -- -- -- Another instance of KeePassXC is already running. -- Otra instancia de KeePassXC ya se está ejecutando. -- -- -- Fatal error while testing the cryptographic functions. -- Error fatal comprobando las funciones criptográficas. -- -- -- KeePassXC - Error -- KeePassXC - Error -- -- -- Database password: -- Contraseña de la base de datos: -- -- -- Cannot create new group -- No se puede crear el nuevo grupo -- -- -- Deactivate password key for the database. -- Desactivar contraseña para la base de datos. -- -- -- Displays debugging information. -- Representa información de depurado. -- -- -- Deactivate password key for the database to merge from. -- Desactivar contraseña para la base de datos desde la que combinar. -- -- -- Version %1 -- Versión %1 -- -- -- Build Type: %1 -- Tipo de compilación: %1 -- -- -- Revision: %1 -- Revisión: %1 -- -- -- Distribution: %1 -- Distribución: %1 -- -- -- Debugging mode is disabled. -- Modo de depurado deshabilitado. -- -- -- Debugging mode is enabled. -- Modo de depurado habilitado. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistema operativo: %1 --Arquitectura de CPU: %2 --Núcleo: %3 %4 -- -- -- Auto-Type -- Autoescritura -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (compartir firmado y sin firmar) -- -- -- KeeShare (only signed sharing) -- KeeShare (compartir solo firmado) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (compartir solo sin firmar) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Ninguno -- -- -- Enabled extensions: -- Extensiones habilitadas: -- -- -- Cryptographic libraries: -- Librerías criptográficas: -- -- -- Cannot generate a password and prompt at the same time! -- No se puede generar una contraseña y preguntar al mismo tiempo -- -- -- Adds a new group to a database. -- Añade un nuevo grupo a la base de datos. -- -- -- Path of the group to add. -- Ruta del grupo a añadir. -- -- -- Group %1 already exists! -- Grupo %1 ya existe. -- -- -- Group %1 not found. -- Grupo %1 no encontrado. -- -- -- Successfully added group %1. -- Grupo %1 añadido correctamente. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Comprueba si algunas contraseñas han sido filtradas públicamente. FILENAME debe ser la ruta de un archivo conteniendo «hashes» SHA-1 de las contraseñas filtradas en formato HIBP, como está disponible en https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- Analizar debilidades y problemas en las contraseñas. -- -- -- Failed to open HIBP file %1: %2 -- Fallo al abrir archivo HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Evaluando los apuntes de la base de datos contra el archivo HIBP, esto tomará un rato... -- -- -- Close the currently opened database. -- Cerrar la base de datos abierta actual. -- -- -- Display this help. -- Representar esta ayuda. -- -- -- slot -- ranura -- -- -- Invalid word count %1 -- Número de palabras inválido %1 -- -- -- The word list is too small (< 1000 items) -- El listado de palabras es demasiado pequeña (< 1000 elementos) -- -- -- Exit interactive mode. -- Salir de modo interactivo. -- -- -- Exports the content of a database to standard output in the specified format. -- Exporta el contenido de la base de datos en la salida estándar en el formato especificado. -- -- -- Unable to export database to XML: %1 -- No se puede exportar base de datos a XML: %1 -- -- -- Unsupported format %1 -- Formato no soportado %1 -- -- -- Use numbers -- Utilizar números -- -- -- Invalid password length %1 -- Longitud de contraseña inválida %1 -- -- -- Display command help. -- Representar mandato de ayuda. -- -- -- Available commands: -- Comandos disponibles: -- -- -- Import the contents of an XML database. -- Importar los contenidos de la base de datos XML. -- -- -- Path of the XML database export. -- Ruta de la exportación de la base de datos XML. -- -- -- Path of the new database. -- Ruta de la nueva base de datos. -- -- -- Successfully imported database. -- Base de datos importada correctamente. -- -- -- Unknown command %1 -- Mandato %1 desconocido -- -- -- Flattens the output to single lines. -- Aplana la salida en líneas individuales. -- -- -- Only print the changes detected by the merge operation. -- Imprimir solo cambios detectados por la operación combinar. -- -- -- Yubikey slot for the second database. -- Ranura YubiKey para la segunda base de datos. -- -- -- Successfully merged %1 into %2. -- Combinado %1 en %2 correctamente. -- -- -- Database was not modified by merge operation. -- La base de datos no fue modificada por la operación de combinación -- -- -- Moves an entry to a new group. -- Mueve un apunte a un nuevo grupo. -- -- -- Path of the entry to move. -- Ruta del apunte a mover. -- -- -- Path of the destination group. -- Ruta del grupo destino. -- -- -- Could not find group with path %1. -- No se puede encontrar el grupo con ruta %1. -- -- -- Entry is already in group %1. -- El apunte ya está en el grupo %1. -- -- -- Successfully moved entry %1 to group %2. -- Apunte %1 movido al grupo %2 correctamente. -- -- -- Open a database. -- Abrir base de datos -- -- -- Path of the group to remove. -- Ruta del grupo a eliminar. -- -- -- Cannot remove root group from database. -- No se puede eliminar grupo raíz de la base de datos. -- -- -- Successfully recycled group %1. -- Grupo %1 reciclado correctamente. -- -- -- Successfully deleted group %1. -- Grupo %1 eliminado correctamente. -- -- -- Failed to open database file %1: not found -- Fallo al abrir archivo de base de datos %1: no encontrado -- -- -- Failed to open database file %1: not a plain file -- Fallo al abrir archivo de base de datos %1: archivo de texto no plano -- -- -- Failed to open database file %1: not readable -- Fallo al abrir archivo de base de datos %1: no leíble -- -- -- Enter password to unlock %1: -- Introduzca contraseña para desbloquear: %1 -- -- -- Invalid YubiKey slot %1 -- Ranura %1 de YubiKey inválida -- -- -- Enter password to encrypt database (optional): -- Introduzca la contraseña para cifrar la base de datos (opcional): -- -- -- HIBP file, line %1: parse error -- Archivo HIBP, línea %1: error de analizado -- -- -- Secret Service Integration -- Integración con servicio de secretos -- -- -- User name -- Usuario -- -- -- Password for '%1' has been leaked %2 time(s)! -- ¡Contraseña para «%1» ha sido filtrada %2 vez!¡Contraseña para «%1» ha sido filtrada %2 veces! -- -- -- Invalid password generator after applying all options -- Generador de contraseñas inválido tras aplicar opciones -- -- -- Show the protected attributes in clear text. -- Mostrar los atributos protegidos en texto legible -- -- -- Browser Plugin Failure -- Fallo en complemento de naegador -- -- -- Could not save the native messaging script file for %1. -- Nose puede guardar el mensaje del script nativo para %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copiar en atributo al portapapeles. Por defecto a «password» si no se especifica. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copiar el TOTP actual al portapapeles (equivalente a «-a totp».) -- -- -- Copy an entry's attribute to the clipboard. -- Copiar un atributo del apunte al portapapeles. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERROR: especifique uno de --attibute o --totp, no ambos. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERROR: el atributo %1 es ambiguo, coincide con %2. -- -- -- Attribute "%1" not found. -- Atributo «%1» no encontrado. -- -- -- Entry's "%1" attribute copied to the clipboard! -- ¡Atributo del apunte «%1» copiado al portapapeles! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- La ranura Yubikey y el dato de serie usado para acceder a la base de datos (pe. 1:7370001). -- -- -- slot[:serial] -- ranura(:serie) -- -- -- Target decryption time in MS for the database. -- Tiempo de descifrado objetivo en ms para la base de datos. -- -- -- time -- tiempo -- -- -- Set the key file for the database. -- Establecer el fichero clave para la base de datos. -- -- -- Set a password for the database. -- Establecer la contraseña para la base de datos. -- -- -- Invalid decryption time %1. -- Tiempo de descifrado inválido %1. -- -- -- Target decryption time must be between %1 and %2. -- El tiempo de descifrado debe estar entre %1 y %2. -- -- -- Failed to set database password. -- Fallo al establecer la contraseña de la base de datos. -- -- -- Benchmarking key derivation function for %1ms delay. -- Rendimiento de función de derivación de clave con un retraso de %1ms. -- -- -- Setting %1 rounds for key derivation function. -- Estableciendo %1 pasadas para la función de derivación de clave. -- -- -- error while setting database key derivation settings. -- error mientras se establecía la configuración de derivación de contraseña. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formato a usar al exportar. Las opciones disponibles son «xml» o «csv». Por defecto «xml». -- -- -- Unable to import XML database: %1 -- No se puede importar la base de datos XML: %1 -- -- -- Show a database's information. -- Mostrar información de una base de datos. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nombre: -- -- -- Description: -- Descripción: -- -- -- Cipher: -- Cifrado: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- La papelera de reciclaje está habilitada. -- -- -- Recycle bin is not enabled. -- La papelera de reciclaje no está habilitada. -- -- -- Invalid command %1. -- Comando inválido %1. -- -- -- Invalid YubiKey serial %1 -- Serie de YubiKey inválido %1 -- -- -- Please touch the button on your YubiKey to continue… -- Toque el botón en su yubiKey para continuar... -- -- -- Do you want to create a database with an empty password? [y/N]: -- ¿Desea crear una base de datos con una contraseña vacía? (y/N): -- -- -- Repeat password: -- Repetir contraseña: -- -- -- Error: Passwords do not match. -- Error: las contraseñas no coinciden. -- -- -- All clipping programs failed. Tried %1 -- -- Todos los programas de recortes fallaron. Intentado %1 -- -- -- -- AES (%1 rounds) -- AES (%1 pasadas) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Retraso de rendimiento %1 -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- ruta a un archivo de configuración local personalizado -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- ADVERTENCIA: Está usando un fichero clave con un formato antiguo que KeePassXC puede dejar --de soportar en el futuro. -- --Considere generar un nuevo fichero clave. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 rondas, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – recomendado) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Icono -- -- -- Unsupported key file version: %1 -- Versión de fichero clave no soportado: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- ¡Fallo de suma de comprobación! El fichero clave puede estar corrupto. -- -- -- Unexpected key file data! Key file may be corrupt. -- ¡Datos de fichero clave inesperados! El fichero clave puede estar corrupto. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Error interno de zlib comprimiendo: -- -- -- Error writing to underlying device: -- Error al escribir en el dispositivo subyacente: -- -- -- Error opening underlying device: -- Error al abrir el dispositivo subyacente: -- -- -- Error reading data from underlying device: -- Error al leer el dispositivo subyacente: -- -- -- Internal zlib error when decompressing: -- Error interno de zlib descomprimiendo: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- El formato gzip no está soportado en esta versión de zlib. -- -- -- Internal zlib error: -- Error interno de zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Mostrar también que ha sido excluido de los informes -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Pasar por encima del motivo para mostrar detalles adicionales. Doble clic para editar. -- -- -- Bad -- Password quality -- Mal -- -- -- Bad — password must be changed -- Mal — la contraseña debe ser cambiada -- -- -- Poor -- Password quality -- Pobre -- -- -- Poor — password should be changed -- Pobre — la contraseña debería ser cambiada -- -- -- Weak -- Password quality -- Débil -- -- -- Weak — consider changing the password -- Débil — considere cambiar la contraseña -- -- -- (Excluded) -- (Excluida) -- -- -- This entry is being excluded from reports -- Este apunte es excluido de los informes -- -- -- Please wait, health data is being calculated... -- Espere, los datos de salud están siendo calculados... -- -- -- Congratulations, everything is healthy! -- ¡Felicidades, todo está correcto! -- -- -- Title -- Título -- -- -- Path -- Ruta -- -- -- Score -- Puntuación -- -- -- Reason -- Motivo -- -- -- Edit Entry... -- Editar apunte... -- -- -- Exclude from reports -- Excluir de los informes -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- CUIDADO: Este informe requiere enviar información al servicio en línea Have I Been Pwned (https://haveibeenpwned.com). Si continúa, su base de datos de contraseñas será cifrada criptográficamente y los cinco primeros caracteres de esos hashes serán enviados de forma segura a este servicio. Su base de datos se mantiene segura y no puede ser reconstruida desde esta información. Sin embargo, el número de contraseñas que envíe y su dirección IP quedará expuesto a este servicio. -- -- -- Perform Online Analysis -- Realizar análisis en línea -- -- -- Also show entries that have been excluded from reports -- Mostrar también que ha sido excluido de los informes -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Esta construcción de KeePassXC no tiene funciones de red. Las funciones de red son requeridas para comprobar sus contraseñas contra las bases de datos Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- ¡Felicidades, no hay contraseñas expuestas! -- -- -- Title -- Título -- -- -- Path -- Ruta -- -- -- Password exposed… -- Contraseñas expuestas... -- -- -- (Excluded) -- (Excluido) -- -- -- This entry is being excluded from reports -- Este apunte es excluido de los informes -- -- -- once -- una vez -- -- -- up to 10 times -- hasta 10 veces -- -- -- up to 100 times -- hasta 100 veces -- -- -- up to 1000 times -- hasta 1000 veces -- -- -- up to 10,000 times -- hasta 10,000 veces -- -- -- up to 100,000 times -- hasta 100,000 veces -- -- -- up to a million times -- hasta un millón veces -- -- -- millions of times -- millones de veces -- -- -- Edit Entry... -- Editar apunte... -- -- -- Exclude from reports -- Excluir de los informes -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Ratón sobre líneas con iconos de error para información adicional. -- -- -- Name -- Nombre -- -- -- Value -- Valor -- -- -- Please wait, database statistics are being calculated... -- Espere, calculando las estadísticas de la base de datos... -- -- -- Database name -- Nombre de la base de datos -- -- -- Description -- Descripción -- -- -- Location -- Localización -- -- -- Last saved -- Última guardada -- -- -- Unsaved changes -- Cambios no guardados -- -- -- yes -- -- -- -- no -- no -- -- -- The database was modified, but the changes have not yet been saved to disk. -- La base de datos fue modificada pero los cambios no han sido guardados a disco todavía. -- -- -- Number of groups -- Número de grupos -- -- -- Number of entries -- Número de apuntes -- -- -- Number of expired entries -- Número de apuntes expirados -- -- -- The database contains entries that have expired. -- La base de datos contiene apuntes que han expirado. -- -- -- Unique passwords -- Contraseñas únicas -- -- -- Non-unique passwords -- Contraseñas no únicas -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Más del 10% de las contraseñas son reusadas. Use contraseñas únicas si es posible. -- -- -- Maximum password reuse -- Reuso máximo de contraseña -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Algunas contraseñas son usadas más de tres veces. Use contraseñas únicas si es posible. -- -- -- Number of short passwords -- Número de contraseñas cortas -- -- -- Recommended minimum password length is at least 8 characters. -- La longitud mínima recomendada de contraseña es de al menos 8 caracteres. -- -- -- Number of weak passwords -- Número de contraseñas débiles -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Se recomienda usar largas contraseñas aleatorias con una calificación de «buena» o «excelente». -- -- -- Entries excluded from reports -- Apuntes excluidos de los informes -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Excluyendo apuntes de los informes, pe. porque se sabe que tiene una contraseña pobre, no es necesariamente un problema pero debería analizarse. -- -- -- Average password length -- Longitud media de contraseña -- -- -- %1 characters -- %1 caracteres -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- La longitud media de contraseña es menos de diez caracteres. Las contraseñas más largas proporcionan más seguridad. -- -- -- -- SSHAgent -- -- Agent connection failed. -- La conexión del agente falló. -- -- -- Agent protocol error. -- Error de protocolo del agente. -- -- -- No agent running, cannot add identity. -- Ningún agente en ejecución, no se puede añadir identidad. -- -- -- No agent running, cannot remove identity. -- Ningún agente en ejecución, no puede eliminar identidad. -- -- -- Agent refused this identity. Possible reasons include: -- El agente rechazó esta identidad. Los posibles motivos incluyen: -- -- -- The key has already been added. -- La clave ya ha sido añadida. -- -- -- Restricted lifetime is not supported by the agent (check options). -- La vida útil limitada no es soportada por el agente (verifique opciones). -- -- -- A confirmation request is not supported by the agent (check options). -- La solicitud de confirmación no es soportada por el agente (verifique opciones). -- -- -- Key identity ownership conflict. Refusing to add. -- Conflicto de propiedad de Identidad de clave. Denegando el añadir. -- -- -- No agent running, cannot list identities. -- No hay ningún agente ejecutándose, no se pueden listar identidades. -- -- -- -- SearchHelpWidget -- -- Search Help -- Buscar ayuda -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Los términos de búsqueda son los siguientes: [modificadores] [campo:] ["] término ["] -- -- -- Every search term must match (ie, logical AND) -- Cada término de búsqueda debe coincidir (es decir, AND lógico) -- -- -- Modifiers -- Modificadores -- -- -- exclude term from results -- excluir término de resultados -- -- -- match term exactly -- coincidencia en término exactamente -- -- -- use regex in term -- usar expresiones regulares en término -- -- -- Fields -- Campos -- -- -- Term Wildcards -- Comodines en término -- -- -- match anything -- coincidir cualquier cosa -- -- -- match one -- coincidir uno -- -- -- logical OR -- OR lógico -- -- -- Examples -- Ejemplos -- -- -- -- SearchWidget -- -- Search -- Buscar -- -- -- Limit search to selected group -- Limitar la búsqueda al grupo selecionado -- -- -- Search Help -- Buscar Ayuda -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Buscar (%1) ... -- -- -- Case sensitive -- Distinguir mayúsculas/minúsculas -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opciones -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Permitir integración de servicio de secretos KeepassXC Freedesktop.org -- -- -- General -- General -- -- -- Show notification when credentials are requested -- Mostrar una notificación cuando las credenciales son requeridas -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Si la papelera de reciclaje está habilitada para la base de datos, las entradas serán movidas a la papelera directamente. Sino serán eliminadas sin confirmación.</p><p>Aún así se le solicitará si alguna entrada es referenciada por otras.</p></body></html> -- -- -- Exposed database groups: -- Grupos de base de datos expuestos: -- -- -- Authorization -- Autorización -- -- -- These applications are currently connected: -- Estas aplicaciones están actualmente conectadas: -- -- -- Don't confirm when entries are deleted by clients -- No confirmar cuando los apuntes son eliminados por los clientes. -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Error:</b> Fallo al conectar a DBus. Compruebe su configuración de DBus. -- -- -- <b>Warning:</b> -- <b>Advertencia:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Guardar los cambios para activar el complemento y habilitar la edición de esta sección. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Activo -- -- -- Allow export -- Permitir la exportación -- -- -- Allow import -- Permitir la importación -- -- -- Own certificate -- Certificado propio -- -- -- Fingerprint: -- Huella digital: -- -- -- Certificate: -- Certificado: -- -- -- Signer -- Firmante -- -- -- Key: -- Clave: -- -- -- Generate -- Generar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Imported certificates -- Certificados importados -- -- -- Trust -- De confianza -- -- -- Ask -- Preguntar -- -- -- Untrust -- Sin confianza -- -- -- Remove -- Eliminar -- -- -- Path -- Ruta -- -- -- Status -- Estado -- -- -- Fingerprint -- Huella digital -- -- -- Certificate -- Certificado -- -- -- Trusted -- De confianza -- -- -- Untrusted -- No es de confianza -- -- -- Unknown -- Desconocido -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Fichero clave de KeeShare -- -- -- All files -- Todos los archivos -- -- -- Select path -- Seleccionar ruta -- -- -- Exporting changed certificate -- Exportando certificado modificado -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- El certificado exportado no es lo mismo que el que está en uso. ¿Desea exportar el certificado actual? -- -- -- Signer: -- Firmante: -- -- -- Allow KeeShare imports -- Permitir importación KeeShare -- -- -- Allow KeeShare exports -- Permitir exportación KeeShare -- -- -- Only show warnings and errors -- Mostrar solo advertencias y errores -- -- -- Key -- Clave -- -- -- Signer name field -- Campo de nombre firmante -- -- -- Generate new certificate -- Generar nuevo certificado -- -- -- Import existing certificate -- Importar certificado existente -- -- -- Export own certificate -- Exportar certificado propio -- -- -- Known shares -- Comparticiones conocidos -- -- -- Trust selected certificate -- Confiar en certificado seleccionado -- -- -- Ask whether to trust the selected certificate every time -- Solicitar si confiar en certificado seleccionado cada vez -- -- -- Untrust selected certificate -- Desconfiar de certificado seleccionado -- -- -- Remove selected certificate -- Eliminar certificado seleccionado -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida -- -- -- Could not write export container (%1) -- No podría escribir el contenedor de exportación (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- No se puede incrustar la firma: no se puede abrir el archivo para escribir (%1) -- -- -- Could not embed signature: Could not write file (%1) -- No se puede incrustar la firma: no se puede escribir el archivo (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- No se puede incrustar la base de datos: no se puede abrir el archivo para escribir (%1) -- -- -- Could not embed database: Could not write file (%1) -- No se puede incrustar la base de datos.: no se puede escribir el archivo (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida -- -- -- Could not write export container -- No se puede escribir contenedor de exportación -- -- -- Unexpected export error occurred -- Ha ocurrido un error inesperado en la exportación -- -- -- -- ShareImport -- -- Import from container without signature -- Importación de contenedores sin firma -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- No podemos verificar la fuente del contenedor compartido porque no está firmado. ¿Desea importar desde %1? -- -- -- Import from container with certificate -- Importar desde contenedor con certificado -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- ¿Desea confiar a %1 con la huella digital de %2 desde %3? {1 ?} {2 ?} -- -- -- Not this time -- No esta vez -- -- -- Never -- Nunca -- -- -- Always -- Siempre -- -- -- Just this time -- Sólo esta vez -- -- -- Signed share container are not supported - import prevented -- No se soportan contenedores compartidos firmados - importación prevenida -- -- -- File is not readable -- El archivo no es legible -- -- -- Invalid sharing container -- Contenedor compartido no válido -- -- -- Untrusted import prevented -- Se previno importación no fiable -- -- -- Successful signed import -- Importación firmada correcta -- -- -- Unsigned share container are not supported - import prevented -- No se soportan contenedores compartidos sin firmar - Importación prevenida -- -- -- Successful unsigned import -- Importación no firmada correcta -- -- -- File does not exist -- El archivo no existe -- -- -- Unknown share container type -- Tipo de contenedor compartido desconocido -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importación de %1 fallida (%2) -- -- -- Import from %1 successful (%2) -- Importación de %1 exitosa (%2) -- -- -- Imported from %1 -- Importado de %1 -- -- -- Export to %1 failed (%2) -- Falló exportación a %1 (%2) -- -- -- Export to %1 successful (%2) -- Exportación a %1 existosa (%2) -- -- -- Export to %1 -- Exportar a %1 -- -- -- Multiple import source path to %1 in %2 -- Ruta de origen de importación múltiple a %1 en %2 -- -- -- Conflicting export target path %1 in %2 -- Ruta de destino de exportación contradictoria %1 en %2 -- -- -- -- TotpDialog -- -- Timed Password -- Contraseña temporizada -- -- -- 000000 -- 000000 -- -- -- Copy -- Copiar -- -- -- Expires in <b>%n</b> second(s) -- Caduca en <b>%n</b> segundoCaduca en <b>%n</b> segundos -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copiar -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTA: Esta configuración de TOTP es personalizada y puede que no funcione con otros autenticadores. -- -- -- There was an error creating the QR code. -- Se ha producido un error al crear el código QR. -- -- -- Closing in %1 seconds. -- Cerrando en %1 segundos. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Configurar TOTP -- -- -- Default RFC 6238 token settings -- Ajustes para el token por defecto RFC 6238 -- -- -- Steam token settings -- Opciones de token de Steam -- -- -- Use custom settings -- Usar configuración personalizada -- -- -- Custom Settings -- Configuración personalizada -- -- -- Time step: -- Paso del tiempo: -- -- -- sec -- Seconds -- segundos -- -- -- Code size: -- Tamaño del código: -- -- -- Secret Key: -- Clave secreta: -- -- -- Secret key must be in Base32 format -- La clave secreta debe estar en formato Base32 -- -- -- Secret key field -- Campo clave secreta -- -- -- Algorithm: -- Algoritmo: -- -- -- Time step field -- Campo paso de tiempo -- -- -- digits -- dígitos -- -- -- Invalid TOTP Secret -- Secreto TOTP inválido -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Ha introducido un secreto de clave inválido. La clave debe estar en formato Base32. --Ejemplo: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirmar eliminar configuración TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- ¿Desea eliminar la configuración TOTP para este apunte? -- -- -- -- URLEdit -- -- Invalid URL -- URL inválida -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Comprobando actualizaciones -- -- -- Checking for updates... -- Comprobando actualizaciones... -- -- -- Close -- Cerrar -- -- -- Update Error! -- ¡Error al acualizar! -- -- -- An error occurred in retrieving update information. -- Se ha producido un error al recuperando la información de la actualización. -- -- -- Please try again later. -- Por favor Inténtelo más tarde. -- -- -- Software Update -- Actualización de software -- -- -- A new version of KeePassXC is available! -- ¡Una versión nueva de KeePassXC está disponible! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 ya está disponible — usted tiene %2. -- -- -- Download it at keepassxc.org -- Descargala de keepassxc.org -- -- -- You're up-to-date! -- ¡Está actualizado! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 actualmente es la versión más reciente disponible -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Empiece a guardar sus contraseñas con seguridad en una base de datos de KeePassXC -- -- -- Create new database -- Crear una base de datos nueva -- -- -- Open existing database -- Abrir una base de datos existente -- -- -- Import from KeePass 1 -- Importar de KeePass 1 -- -- -- Import from CSV -- Importar de CSV -- -- -- Recent databases -- Bases de datos recientes -- -- -- Welcome to KeePassXC %1 -- Bienvenido a KeePassXC %1 -- -- -- Import from 1Password -- Importar de 1Password -- -- -- Open a recent database -- Abrir base de datos reciente -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Ranura de configuración - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Reto respuesta - Ranura %3 - %4 -- -- -- Press -- Presione -- -- -- Passive -- Pasivo -- -- -- %1 Invalid slot specified - %2 -- %1 Especificado una ranura inválida - %2 -- -- -- The YubiKey interface has not been initialized. -- La interfaz YubiKey no ha sido inicializada. -- -- -- Hardware key is currently in use. -- La llave por hardware está actualmente en uso. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- No se puede encontrar llave por hardware con número de serie %1. Conéctelo para continuar. -- -- -- Hardware key timed out waiting for user interaction. -- La llave por hardware expiró esperando interacción del usuario. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Ha ocurrido un error USB al acceder a la llave por hardware: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Fallo al completar el reto-respuesta, el error fue: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Actualizar -- -- -- YubiKey Challenge-Response -- Desafío/respuesta Yubikey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Si posee una <a href="https://www.yubico.com/">YubiKey</a>, puede usarla para seguridad adicional.</p><p> La YubiKey requiere que una de sus ranuras esté programada como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Desafío/respuesta HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Actualizar «tokens» hardware -- -- -- Hardware key slot selection -- Selección de ranura de llave por hardware -- -- -- Could not find any hardware keys! -- ¡No se puede encontrar ninguna llave por hardware! -- -- -- Selected hardware key slot does not support challenge-response! -- ¡La ranura de la llave por hardware seleccionada no soporta reto-respuesta! -- -- -- Detecting hardware keys… -- Detectando llaves por hardware... -- -- -- No hardware keys detected -- No se detectaron llaves por hardware -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_et.ts keepassxc-2.6.4-patched/share/translations/keepassx_et.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_et.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_et.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7889 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- KeePassXC teave -- -- -- About -- Teave -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Vigadest teatamise koht: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC-d levitatakse vastavalt GNU Üldise Avaliku Litsentsi (GPL) versioonis 2 või (sinu valikul) versioonis 3 toodud tingimustele. -- -- -- Contributors -- Kaasautorid -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vaata kaasautoreid GitHubis</a> -- -- -- Debug Info -- Silumisteave -- -- -- Include the following information whenever you report a bug: -- Vigadest teatamisel tuleks alati lisada järgnev teave: -- -- -- Copy to clipboard -- Kopeeri lõikepuhvrisse -- -- -- Project Maintainers: -- Projekti haldajad: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC meeskonna eriline tänu kuulub debfx-ile algse KeePassX-i loomise eest. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Pageanti asemel Windowsi OpenSSH kasutamine -- -- -- Enable SSH Agent integration -- SSH agendi lõimingu lubamine -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK-i väärtus: -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK-i alistus: -- -- -- (empty) -- (tühi) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Ühtki SSH agendi pesa pole saadaval. Vaata, et keskkonnamuutuja "SSH_AUTH_SOCK" oleks määratud või sisesta allpool alistusväärtus. -- -- -- SSH Agent connection is working! -- SSH agendi ühendus toimib! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Rakenduse seaded -- -- -- General -- Üldine -- -- -- Security -- Turvalisus -- -- -- Access error for config file %1 -- Juurdepääsuviga seadistusfailil "%1" -- -- -- Icon only -- ainult ikoon -- -- -- Text only -- ainult tekst -- -- -- Text beside icon -- tekst ikooni kõrval -- -- -- Text under icon -- tekst ikooni all -- -- -- Follow style -- stiili järgi -- -- -- Reset Settings? -- Seadete lähtestamise kinnitus -- -- -- Are you sure you want to reset all general and security settings to default? -- Kas oled kindel, et tahad kõik üld- ja turvaseaded lähtestada? -- -- -- Monochrome (light) -- mustvalge (hele) -- -- -- Monochrome (dark) -- mustvalge (tume) -- -- -- Colorful -- värviline -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Keele vahetamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Põhiseaded -- -- -- Startup -- Käivitumine -- -- -- Start only a single instance of KeePassXC -- Avada saab ainult ühe KeePassXC protsessi -- -- -- Minimize window at application startup -- Programmi käivitamisel aken minimeeritakse -- -- -- File Management -- Failihaldus -- -- -- Backup database file before saving -- Enne salvestamist tehakse andmebaasifailist varukoopia -- -- -- Automatically save after every change -- Automaatne salvestamine iga muudatuse järel -- -- -- Automatically reload the database when modified externally -- Andmebaas laaditakse automaatselt uuesti, kui seda väljastpoolt (nt teise programmiga) muudetakse -- -- -- Entry Management -- Kirjehaldus -- -- -- Use group icon on entry creation -- Kirjete loomisel määratakse neile grupi ikoon -- -- -- Minimize instead of app exit -- Sulgemise asemel minimeeritakse -- -- -- Show a system tray icon -- Ikoon süsteemisalves -- -- -- Hide window to system tray when minimized -- Minimeerimisel peidetakse aken süsteemisalve -- -- -- Auto-Type -- Automaatsisestus -- -- -- Use entry title to match windows for global Auto-Type -- Akende vastendamine globaalse automaatsisestuse jaoks kirjete pealkirja järgi -- -- -- Use entry URL to match windows for global Auto-Type -- Akende vastendamine globaalse automaatsisestuse jaoks kirjete URL-i järgi -- -- -- Always ask before performing Auto-Type -- Enne automaatsisestuse sooritamist küsitakse alati kinnitust -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Teisaldatav tööriistariba -- -- -- Remember previously used databases -- Mäletatakse viimati kasutatud andmebaase -- -- -- Load previously open databases on startup -- Käivitumisel laaditakse viimati avatud olnud andmebaasid -- -- -- Remember database key files and security dongles -- Mäletatakse andmebaaside võtmefaile ja riistvaravõtmeid -- -- -- Check for updates at application startup once per week -- Kord nädalas kontrollitakse programmi käivitumisel uuenduste olemasolu -- -- -- Include beta releases when checking for updates -- Sobivad ka beetaversioonid -- -- -- Language: -- Keel: -- -- -- (restart program to activate) -- (muutmine jõustub programmi järgmisel käivitamisel) -- -- -- Minimize window after unlocking database -- Andmebaasi luku avamise järel aken minimeeritakse -- -- -- Minimize when opening a URL -- URL-i avamisel aken minimeeritakse -- -- -- Hide window when copying to clipboard -- Millegi lõikepuhvrisse kopeerimise järel aken peidetakse -- -- -- Minimize -- Minimeeritakse -- -- -- Drop to background -- Viiakse tagaplaanile -- -- -- Favicon download timeout: -- Saidiikoonide allalaadimise ajalõpp: -- -- -- Website icon download timeout in seconds -- Saidiikoonide allalaadimiskatsete aegumine sekundites -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Tööriistariba nuppude stiil -- -- -- Language selection -- Keelevalik -- -- -- Global auto-type shortcut -- Automaatsisestuse globaalne kiirklahv -- -- -- Auto-type character typing delay milliseconds -- Viivitus millisekundites iga automaatse klahvivajutuse vahel -- -- -- Auto-type start delay milliseconds -- Viivitus millisekundites enne automaatsisestuse alustamist -- -- -- Automatically launch KeePassXC at system startup -- KeePassXC käivitatakse sisselogimisel automaatselt -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Andmebaasifailid salvestatakse turvaliselt (probleemide korral Dropboxi vms-ga tasub välja lülitada) -- -- -- User Interface -- Kasutajaliides -- -- -- Toolbar button style: -- Tööriistariba nuppude stiil: -- -- -- Use monospaced font for notes -- Märkmete jaoks kasutatakse fikseeritud laiusega fonti -- -- -- Tray icon type: -- Süsteemisalve ikooni tüüp: -- -- -- Reset settings to default… -- Taasta vaikeseaded… -- -- -- Auto-Type typing delay: -- Viivitus enne automaatsisestust: -- -- -- Global Auto-Type shortcut: -- Automaatsisestuse globaalne kiirklahv: -- -- -- Auto-Type start delay: -- Viivitus automaatsisestuse klahvivajutuste vahel: -- -- -- Automatically save when locking database -- Automaatne salvestamine andmebaasi lukustamisel -- -- -- Automatically save non-data changes when locking database -- Andmeid mittepuudutavate muudatuste automaatne salvestamine andmebaasi lukustamisel -- -- -- Tray icon type -- Süsteemisalve ikooni tüüp: -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Aegumine -- -- -- Clear clipboard after -- Lõikepuhver tühjendatakse pärast -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Andmebaasid lukustatakse, kui neid pole kasutatud kauem kui -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- TouchID unustatakse, kui andmebaase pole kasutatud kauem kui -- -- -- Convenience -- Mugavus -- -- -- Lock databases when session is locked or lid is closed -- Andmebaasid lukustatakse seansi lukustamisel või sülearvuti kaane sulgemisel -- -- -- Forget TouchID when session is locked or lid is closed -- TouchID unustatakse seansi lukustamisel või sülearvuti kaane sulgemisel -- -- -- Lock databases after minimizing the window -- Andmebaasid lukustatakse akna minimeerimisel -- -- -- Re-lock previously locked database after performing Auto-Type -- Pärast automaatsisestuse sooritamist lukustatakse eelnevalt lukus olnud andmebaas uuesti -- -- -- Hide passwords in the entry preview panel -- Kirjete eelvaatepaneelil varjatakse paroolid täppidega -- -- -- Hide entry notes by default -- Vaikimisi peidetakse kirjete märkmed -- -- -- Privacy -- Privaatsus -- -- -- Use DuckDuckGo service to download website icons -- Saidiikoonide allalaadimiseks kasutatakse DuckDuckGo teenust -- -- -- Clipboard clear seconds -- Lõikepuhvri tühjendamise viivitus sekundites -- -- -- Touch ID inactivity reset -- TouchID unustamise viivitus -- -- -- Database lock timeout seconds -- Andmebaasi lukustamise ajalõpp sekundites -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Otsinguväli puhastatakse pärast -- -- -- Require password repeat when it is visible -- Ka nähtava paroolivälja korral nõutakse parooli kordamist -- -- -- Hide passwords when editing them -- Paroolid on muutmise ajal peidetud -- -- -- Use placeholder for empty password fields -- Ka tühjad paroolid varjatakse täppidega -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Sellisele aknatiitlile vastavat automaatsisestuse kirjet ei leitud: -- -- -- Auto-Type - KeePassXC -- Automaatsisestus - KeePassXC -- -- -- Auto-Type -- Automaatsisestus -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Määratud automaatsisestuse süntaks on vigane. -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- See automaatsisestus sisaldab väga pikka viivitust. Kas oled kindel, et soovid jätkata? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- See automaatsisestus sisaldab väga aeglasi klahvivajutusi. Kas oled kindel, et soovid jätkata? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- See automaatsisestus sisaldab väga sageli korduvaid argumente. Kas oled kindel, et soovid jätkata? -- -- -- Permission Required -- Loataotlus -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- Käsitsi valitud kirje automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise luba. Kui oled juba loa andnud, tuleb KeePassXC võibolla uuesti käivitada. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Aken -- -- -- Sequence -- Jada -- -- -- Default sequence -- Vaikejada -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupp -- -- -- Title -- Pealkiri -- -- -- Username -- Kasutajanimi -- -- -- Sequence -- Jada -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopeeri &kasutajanimi -- -- -- Copy &password -- Kopeeri &parool -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Loataotlus -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- Globaalse automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise ja ekraani salvestamise luba. Kui oled juba load andnud, tuleb KeePassXC võibolla uuesti käivitada. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automaatsisestus - KeePassXC -- -- -- Select entry to Auto-Type: -- Vali sooritatav automaatsisestus: -- -- -- Search... -- Otsing... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- Brauseri juurdepääsutaotlus – KeePassXC -- -- -- %1 is requesting access to the following entries: -- %1 küsib juurdepääsu järgmistele kirjetele: -- -- -- Remember access to checked entries -- Märkimisel jäetakse valitud kirjetele juurdepääsu lubamine meelde -- -- -- Remember -- Jäetakse meelde -- -- -- Allow access to entries -- Luba juurdepääs valitud kirjetele -- -- -- Allow Selected -- Luba valituile -- -- -- Deny All -- Keela kõik -- -- -- Disable for this site -- Keela selle saidi jaoks -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browseri kirje salvestamine -- -- -- Ok -- OK -- -- -- Cancel -- Loobu -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Sul on avatud mitu andmebaasi. --Vali, millisesse neist tunnused salvestada tuleks. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- Uus ühendumistaotlus – KeePassXC -- -- -- Save and allow access -- Salvesta ja luba juurdepääs -- -- -- KeePassXC: Overwrite existing key? -- Kirje ülekirjutamise kinnitus – KeePassXC -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Jagatud krüptimisvõti nimega "%1" on juba olemas. --Kas soovid selle üle kirjutada? -- -- -- KeePassXC: Update Entry -- Kirje uuendamine – KeePassXC -- -- -- Do you want to update the information in %1 - %2? -- Kas soovid uuendada teavet kirjes %1 - %2? -- -- -- Abort -- Katkesta -- -- -- Converting attributes to custom data… -- Atribuutide teisendamine kohandatud andmeteks... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- Teisendatud KeePassHTTP atribuudid – KeePassXC -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- %1 kirje atribuudid edukalt teisendatud. --Kohandatud andmetesse teisaldati %2 võtit. -- -- -- Successfully moved %n keys to custom data. -- %n võti edukalt kohandatud andmetesse teisaldatud.%n võtit edukalt kohandatud andmetesse teisaldatud. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- Ühtegi KeePassHTTP atribuutidega kirjet ei leitud – KeePassXC -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktiivne andmebaas ei sisalda ühtegi kirjet, millel oleks KeePassHTTP atribuute. -- -- -- KeePassXC: Legacy browser integration settings detected -- Tuvastati brauserilõimingu pärandseadistus – KeePassXC -- -- -- KeePassXC: Create a new group -- Uue grupi loomine – KeePassXC -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Saadi taotlus uue grupi "%1" loomiseks. --Kas lubad selle grupi luua? -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Sinu KeePassXC-Browseri seadistus tuleb teisaldada andmebaasi seadistusse. --See on vajalik praeguste brauseriühenduste säilitamiseks. --Kas tahad oma olemasoleva seadistuse kohe üle kolida? -- -- -- Don't show this warning again -- Seda hoiatust rohkem ei näidata -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Saadi taotlus ühenduda järgmise andmebaasiga: --%1 -- --Määra palun sellele ühendusele ainukordne nimi või ID, näiteks: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialoog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- See on vajalik andmebaasidele KeePassXC-Browseri abil juurdepääsemiseks. -- -- -- Enable browser integration -- Brauserilõimingu lubamine -- -- -- General -- Üldine -- -- -- Browsers installed as snaps are currently not supported. -- <i>Snap</i>'ina paigaldatud brausereid praegu ei toetata. -- -- -- Enable integration for these browsers: -- Lubatakse lõimimine järgmiste brauseritega: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Tunnuste taotlemisel kuvatakse märguanne -- -- -- Request to unlock the database if it is locked -- Kui andmebaas on lukus, küsitakse luku avamist -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Kui see ruut on märgitud, tagastatakse ainult kirjed, mille URL-il on sama skeem (http, https, ...) nagu aktiivsel veebilehel. -- -- -- Match URL scheme (e.g., https://...) -- Nõutakse URL-i skeemi vastavust (nt https://... vs. http://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Märkimisel tagastatakse ainult konkreetse URL-i kohta käivad vasted, mitte kõik kirjed, mille URL-i domeeniosa klapib. -- -- -- Return only best-matching credentials -- Tagastatakse vaid kõige paremini sobivad tunnused -- -- -- Returns expired credentials. String [expired] is added to the title. -- Märkimisel tagastatakse ka aegunud tunnused. Nende pealkirja ette lisatakse [aegunud]. -- -- -- Allow returning expired credentials -- Lubatakse aegunud tunnuste tagastamine -- -- -- All databases connected to the extension will return matching credentials. -- Märkimisel tagastatakse sobivad tunnused kõigist laiendusega ühendatud andmebaasidest. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Tunnuseid otsitakse kõigist avatud andmebaasidest -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sobivad tunnused sorditakse pealkirja järgi -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sobivad tunnused sorditakse kasutajanime järgi -- -- -- Advanced -- Lisaseaded -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Tunnuste kasutamisel ei küsita kinnitust -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Tunnuste uuendamisel ei küsita kinnitust -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- HTTP lihtautentimiseks luba ei küsita -- -- -- Automatically creating or updating string fields is not supported. -- Stringiväljade automaatne loomine või uuendamine pole toetatud. -- -- -- Return advanced string fields which start with "KPH: " -- Tagastatakse ka lisastringiväljad, mille alguses on "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Märkimisel ei näidata hüpikakent, mis pakub KeePassHTTP pärandseadistuse migreerimist. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Ei pakuta KeePassHTTP seadistuse ülekolimist -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Märkimisel uuendatakse käivitusel programmiomase teatevahetuse skriptides automaatselt KeePassXC või keepassxc-proxy binaarfaili asukohta. -- -- -- Update native messaging manifest files at startup -- Käivitusel uuendatakse programmiomase teatevahetuse manifestifaile -- -- -- Use a custom proxy location if you installed a proxy manually. -- Kui paigaldasid puhverrakenduse käsitsi, saab siin määrata selle asukoha. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Kasutatakse kohandatud puhverrakenduse asukohta: -- -- -- Custom proxy location field -- Kohandatud puhverrakenduse asukoha väli -- -- -- Browser for custom proxy file -- Vali kohandatud puhverrakenduse fail -- -- -- Browse... -- Button for opening file dialog -- Sirvi... -- -- -- Use a custom browser configuration location: -- Kasutatakse kohandatud brauseriseadistuse asukohta: -- -- -- Browser type: -- Brauseritüüp: -- -- -- Toolbar button style -- Tööriistariba nuppude stiil -- -- -- Config Location: -- Seadete asukoht: -- -- -- Custom browser location field -- Kohandatud brauseriseadistuse asukoha väli -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Vali kohandatud brauseriseadistuse asukoht -- -- -- Custom extension ID: -- Kohandatud laienduse-ID: -- -- -- Custom extension ID -- Kohandatud laienduse-ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- <i>Snap</i>'ide isoleerituse tõttu tuleb brauserilõimingu võimaldamiseks esmalt teatud skript käivitada.<br />Vajaliku skripti saab aadressilt %1. -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. <br />See on saadaval %1i, %2'i ja %3'i jaoks. %4 -- -- -- Please see special instructions for browser extension use below -- Vaata allpool brauserilaienduse kasutamise erijuhiseid. -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Viga:</b> kohandatud puhverrakenduse asukohta ei leitud!<br/>Ilma puhverrakenduseta brauserilõiming EI TÖÖTA. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Hoiatus:</b> nende seadete muutmine võib olla ohtlik! -- -- -- Executable Files -- Rakendusfailid -- -- -- All Files -- Kõik failid -- -- -- Select custom proxy location -- Kohandatud puhverrakenduse valimine -- -- -- Select native messaging host folder location -- Programmiomase teatevahetuse hosti kausta valimine -- -- -- -- CloneDialog -- -- Clone Options -- Kloonimisseaded -- -- -- Append ' - Clone' to title -- Pealkirja lõppu lisatakse " - koopia" -- -- -- Replace username and password with references -- Kasutajanimi ja parool asendatakse viidetega -- -- -- Copy history -- Kopeeritakse ajalugu -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV väljade importimine -- -- -- filename -- failinimi -- -- -- size, rows, columns -- maht, ridade arv, veergude arv -- -- -- Encoding -- Kodeerimine -- -- -- Codec -- Kodeering: -- -- -- Text is qualified by -- Teksti eraldaja: -- -- -- Fields are separated by -- Väljade eraldaja: -- -- -- Comments start with -- Kommentaaride tähis: -- -- -- Consider '\' an escape character -- Längkriipsu "\" tuleb käsitleda paomärgina -- -- -- Preview -- Eelvaade -- -- -- Imported from CSV file -- Imporditud CSV-failist -- -- -- Original data: -- Algsed andmed: -- -- -- Error -- Viga -- -- -- Error(s) detected in CSV file! -- CSV-failis leiti vigu: -- -- -- [%n more message(s) skipped] -- [ja veel %n teade, mis jäeti vahele][ja veel %n teadet, mis jäeti vahele] -- -- -- CSV import: writer has errors: --%1 -- CSV importimine: kirjutamisel ilmnes vigu: --%1 -- -- -- Text qualification -- Teksti eraldaja -- -- -- Field separation -- Väljade eraldaja -- -- -- Number of header lines to discard -- Eiratavate päiseridade arv: -- -- -- CSV import preview -- CSV importimise eelvaade -- -- -- Column Association -- Veergude vastendamine -- -- -- Last Modified -- Muutmisaeg: -- -- -- Password -- Parool: -- -- -- Created -- Loomisaeg: -- -- -- Notes -- Märkmed: -- -- -- Title -- Pealkiri: -- -- -- Group -- Grupp: -- -- -- URL -- URL: -- -- -- Username -- Kasutajanimi: -- -- -- Header lines skipped -- Eiratavate päiseridade arv: -- -- -- First line has field names -- Esimesel real on väljade nimed -- -- -- Not Present -- puudub -- -- -- Column %1 -- %1. veerg -- -- -- TOTP -- &TOTP -- -- -- Icon -- Ikoon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n veerg%n veergu -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bait%n baiti -- -- -- %n row(s) -- %n rida%n rida -- -- -- -- Database -- -- File %1 does not exist. -- Faili "%1" pole olemas. -- -- -- Unable to open file %1. -- Faili "%1" avamine pole võimalik. -- -- -- Error while reading the database: %1 -- Andmebaasi lugemisel tekkis tõrge: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Faili kirjutamine pole võimalik, kuna see on avatud kirjutuskaitstud režiimis. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Võti jäi teisendamata. See on programmiviga – palun anna sellest arendajatele teada! -- -- -- %1 --Backup database located at %2 -- %1 --Varuandmebaasi asukoht: %2 -- -- -- Could not save, database does not point to a valid file. -- Salvestamine pole võimalik, andmebaas ei osuta sobivale failile. -- -- -- Could not save, database file is read-only. -- Salvestamine pole võimalik, andmebaasifail on kirjutuskaitstud. -- -- -- Database file has unmerged changes. -- Andmebaasifailis on mestimata muudatusi. -- -- -- Recycle Bin -- Prügikast -- -- -- Passwords -- Root group name -- Paroolid -- -- -- Database save is already in progress. -- Andmebaasi salvestamine juba käib. -- -- -- Could not save, database has not been initialized! -- Salvestamine pole võimalik, andmebaas on initsialiseerimata! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Andmebaasi luku avamine - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Võtmefail: -- -- -- Refresh -- Värskenda -- -- -- Don't show this warning again -- Seda hoiatust rohkem ei näidata -- -- -- All files -- Kõik failid -- -- -- Key files -- Võtmefailid -- -- -- Select key file -- Võtmefaili valimine -- -- -- Failed to open key file: %1 -- Võtmefaili avamine ebaõnnestus: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC andmebaasi luku avamine -- -- -- Enter Password: -- Parool: -- -- -- Password field -- Parooli väli -- -- -- Hardware key slot selection -- Riistvaralise võtme pesa valimine -- -- -- Browse for key file -- Vali võtmefail -- -- -- Browse... -- Sirvi... -- -- -- Refresh hardware tokens -- Värskenda riistvaraliste võtmete loendit -- -- -- Hardware Key: -- Riistvaraline võti: -- -- -- Hardware key help -- Riistvaralise võtme abi -- -- -- TouchID for Quick Unlock -- TouchID kasutamine kiiresti luku avamiseks -- -- -- Unlock failed and no password given -- Luku avamine ilma paroolita ebaõnnestus -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Andmebaasi luku avamine ebaõnnestus ja parooli ei sisestatud. --Kas soovid "tühja" parooliga uuesti proovida? -- --Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisuse jaotise ja parooli uuesti määrama. -- -- -- Retry with empty password -- Proovi uuesti tühja parooliga -- -- -- Enter Additional Credentials (if any): -- Lisatunnused (kui vaja): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Kasutada saab riistvaralist võtit nagu <strong>YubiKey</strong> või <strong>OnlyKey</strong>, millel on HMAC-SHA1 jaoks seadistatud pesa.</p> --<p>Lisateabe saamiseks klõpsa.</p> -- -- -- Key file help -- Abi võtmefailide kohta -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Andmebaasifail ei sobi võtmefailiks -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Andmebaasifaili ennast ei saa võtmefailina kasutada. --Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Lisaks paroolile saab andmebaasi turvalisuse suurendamiseks kasutada võtmefaili. Selle saab genereerida andmebaasi turvaseadetes.</p><p>See <strong>ei ole</strong> sinu *.kdbx andmebaasifail!<br>Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</p><p>Lisateabe saamiseks klõpsa.</p> -- -- -- Key file to unlock the database -- Võtmefail andmebaasi luku avamiseks -- -- -- Please touch the button on your YubiKey! -- Puuduta YubiKey nuppu! -- -- -- Detecting hardware keys… -- riistvaraliste võtmete tuvastamine… -- -- -- No hardware keys detected -- riistvaralisi võtmeid ei tuvastatud -- -- -- Select hardware key… -- vali riistvaraline võti… -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Paroolid -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Täpsemad seaded -- -- -- General -- Üldine -- -- -- Security -- Turvalisus -- -- -- Encryption Settings -- Krüptimisseaded -- -- -- Browser Integration -- Brauserilõiming -- -- -- Database Credentials -- Andmebaasi tunnused -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browseri seaded -- -- -- Stored keys -- Salvestatud võtmed -- -- -- Remove -- Eemalda -- -- -- Delete the selected key? -- Valitud võtme kustutamise kinnitus -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Kas oled kindel, et soovid valitud võtme kustutada? --See võib tõkestada ühendumise brauseripluginaga. -- -- -- Key -- Võti -- -- -- Value -- Väärtus -- -- -- Enable Browser Integration to access these settings. -- Nende seadete määramiseks luba programmi seadetes brauserilõiming. -- -- -- Disconnect all browsers -- Kõigi brauseritega ühenduse katkestamise kinnitus -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Kas oled kindel, et soovid katkestada ühenduse kõigi brauseritega? --See võib tõkestada ühendumise brauseripluginaga. -- -- -- KeePassXC: No keys found -- Võtmeid ei leitud – KeePassXC -- -- -- No shared encryption keys found in KeePassXC settings. -- KeePassXC seadetest ei leitud ühtki jagatud krüptimisvõtit. -- -- -- KeePassXC: Removed keys from database -- Võtmed andmebaasist eemaldatud – KeePassXC -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n krüptimisvõti edukalt KeePassXC seadetest eemaldatud.%n krüptimisvõtit edukalt KeePassXC seadetest eemaldatud. -- -- -- Forget all site-specific settings on entries -- Kirjete kõigi saidiomaste seadete kustutamine -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Kas oled kindel, et tahad kõigi kirjete kõik saidiomased seaded eemaldada? --See tühistab ka juurdepääsuload kirjetele. -- -- -- Removing stored permissions… -- Salvestatud juurdepääsulubade eemaldamine... -- -- -- Abort -- Katkesta -- -- -- KeePassXC: Removed permissions -- Juurdepääsuload eemaldatud – KeePassXC -- -- -- Successfully removed permissions from %n entry(s). -- %n kirje juurdepääsuload edukalt eemaldatud.%n kirje juurdepääsuload edukalt eemaldatud. -- -- -- KeePassXC: No entry with permissions found! -- Juurdepääsulubadega kirjeid ei leitud – KeePassXC -- -- -- The active database does not contain an entry with permissions. -- Aktiivne andmebaas ei sisalda ühtki juurdepääsulubadega kirjet. -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP atribuutide kohandatud andmetesse teisaldamine -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Kas oled kindel, et tahad kõik brauserilõimingu pärandandmed uusimale standardile üle viia? --Need võivad olla vajalikud brauseripluginaga ühilduvuse säilitamiseks. -- -- -- Stored browser keys -- Salvestatud brauserivõtmed -- -- -- Remove selected key -- Eemalda valitud võti -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Teisalda KeePassHTTP atribuudid KeePassXC-Browseri kohandatud andmetesse -- -- -- Refresh database root group ID -- Värskenda andmebaasi juurgrupi ID-d -- -- -- Created -- Loodud -- -- -- Refresh database ID -- Andmebaasi ID värskendamine -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Kas oled kindel, et tahad andmebaasi ID-d värskendada? --See on vajalik vaid juhul, kui sinu andmebaas on teise andmebaasi koopia ning brauserilaiendus ei saa sellega ühendust. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Lisa täiendav kaitse... -- -- -- No password set -- Parooli pole määratud -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- HOIATUS! Sa ei määranud parooli. Andmebaasi kasutamine ilma paroolita on äärmiselt ebasoovitatav! -- --Kas oled kindel, et soovid jätkata ilma paroolita? -- -- -- Continue without password -- Jätka ilma paroolita -- -- -- No encryption key added -- Ühtki krüptimisvõtit pole lisatud -- -- -- You must add at least one encryption key to secure your database! -- Andmebaasi kaitsmiseks tuleb lisada vähemalt üks krüptimisvõti. -- -- -- Unknown error -- Tundmatu viga -- -- -- Failed to change database credentials -- Andmebaasi tunnuste vahetamine ebaõnnestus. -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Krüptimisalgoritm: -- -- -- AES: 256 Bit (default) -- AES: 256-bitine (vaikimisi) -- -- -- Twofish: 256 Bit -- Twofish: 256-bitine -- -- -- Key Derivation Function: -- Võtmetuletusfunktsioon: -- -- -- Transform rounds: -- Teisendusraundide arv: -- -- -- Memory Usage: -- Mälukasutus: -- -- -- Parallelism: -- Rööpsus: -- -- -- Decryption Time: -- Lahtikrüptimise aeg: -- -- -- ?? s -- ?? s -- -- -- Change -- Muuda -- -- -- Higher values offer more protection, but opening the database will take longer. -- Mida suurem väärtus, seda kaitstum on andmebaas, kuid seda kauem võtab ka selle avamine. -- -- -- Database format: -- Andmebaasi vorming: -- -- -- This is only important if you need to use your database with other programs. -- See on oluline vaid juhul, kui andmebaasi on vaja kasutada ka teiste programmidega. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (soovituslik) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- muutmata -- -- -- Number of rounds too high -- Key transformation rounds -- Liiga suur raundide arv -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Määrasid väga suure Argon2 võtmeteisendusraundide arvu. -- --Kui jätad selle väiksemaks muutmata, võib andmebaasi avamine võtta tunde või päevi – või veelgi kauem! -- -- -- Understood, keep number -- Jäta ikkagi muutmata -- -- -- Cancel -- Loobu -- -- -- Number of rounds too low -- Key transformation rounds -- Liiga väike raundide arv -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Määrasid väga väikse AES-KDF-i võtmeteisendusraundide arvu. -- --Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda! -- -- -- KDF unchanged -- KDF jäeti muutmata -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Võtme teisendamine uute KDF-parameetrite abil ebaõnnestus, nii et KDF jäeti muutmata. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- lõim lõime -- -- -- Change existing decryption time -- Muuda juba määratud lahtikrüptimise aega -- -- -- Decryption time in seconds -- Lahtikrüptimise aeg sekundites -- -- -- Database format -- Andmebaasi vorming -- -- -- Encryption algorithm -- Krüptimisalgoritm -- -- -- Key derivation function -- Võtmetuletusfunktsioon -- -- -- Transform rounds -- Teisendusraundide arv -- -- -- Memory usage -- Mälukasutus -- -- -- Parallelism -- Rööpsus -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Nähtavad kirjed -- -- -- Don't expose this database -- Seda andmebaasi ei tehta nähtavaks -- -- -- Expose entries under this group: -- Nähtavaks tehakse määratud grupi all olevad kirjed: -- -- -- Enable Secret Service to access these settings. -- Nende seadete määramiseks luba programmi seadetes saladuste teenuse lõiming. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Andmebaasi metaandmed -- -- -- Database name: -- Andmebaasi nimi: -- -- -- Database description: -- Andmebaasi kirjeldus: -- -- -- Default username: -- Vaikimisi kasutajanimi: -- -- -- History Settings -- Ajalooseaded -- -- -- Max. history items: -- Ajalooelementide maksimumarv kirje kohta: -- -- -- Max. history size: -- Ajaloo maksimummaht kirje kohta: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Kasutatakse prügikasti -- -- -- Additional Database Settings -- Andmebaasi lisaseaded -- -- -- Database name field -- Andmebaasi nime väli -- -- -- Database description field -- Andmebaasi kirjelduse väli -- -- -- Default username field -- Vaikimisi kasutajanime väli -- -- -- Maximum number of history items per entry -- Ajalooelementide maksimaalne arv kirje kohta -- -- -- Maximum size of history per entry -- Ajaloo maksimaalne maht kirje kohta -- -- -- Delete Recycle Bin -- Prügikasti kustutamise kinnitus -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Kas oled kindel, et soovid kustutada praeguse prügikasti ja kogu selle sisu? --Seda toimingut ei saa tagasi võtta. -- -- -- (old) -- (vana) -- -- -- Enable compression (recommended) -- Andmebaasi tihendamine (soovituslik) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Jagamine -- -- -- Breadcrumb -- Jälglink -- -- -- Type -- Tüüp -- -- -- Path -- Asukoht -- -- -- Last Signer -- Viimane allkirjastaja -- -- -- Certificates -- Sertifikaadid -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Andmebaasi nimi: -- -- -- Description: -- Kirjeldus: -- -- -- Database name field -- Andmebaasi nime väli -- -- -- Database description field -- Andmebaasi kirjelduse väli -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 andmebaas -- -- -- All files -- Kõik failid -- -- -- Open database -- Andmebaasi avamine -- -- -- CSV file -- CSV-fail -- -- -- Merge database -- Andmebaasi mestimine -- -- -- Open KeePass 1 database -- KeePass 1 andmebaasi avamine -- -- -- KeePass 1 database -- KeePass 1 andmebaas -- -- -- Export database to CSV file -- Andmebaasi eksportimine CSV-failiks -- -- -- Writing the CSV file failed. -- CSV-faili kirjutamine ebaõnnestus. -- -- -- Database creation error -- Viga andmebaasi loomisel -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Loodud andmebaasil pole ei võtit ega KDF-i, nii et selle salvestamisest keelduti. --See on kahtlemata programmiviga – palun anna sellest arendajatele teada! -- -- -- Select CSV file -- CSV-faili valimine -- -- -- New Database -- Uus andmebaas -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [uus andmebaas] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [lukus] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [kirjutuskaitstud] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Andmebaasi "%1" avamine ebaõnnestus. Faili pole kas enam olemas või puudub sellele juurdepääsuõigus. -- -- -- Export database to HTML file -- Andmebaasi eksportimine HTML-failiks -- -- -- HTML file -- HTML-fail -- -- -- Writing the HTML file failed. -- HTML-faili kirjutamine ebaõnnestus. -- -- -- Export Confirmation -- Eksportimise kinnitus -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Asusid andmebaasi eksportima krüptimata failivormingusse. See jätab su paroolid jm tundliku teabe kaitseta! Kas oled kindel, et soovid jätkata? -- -- -- Open OPVault -- OPVaulti avamine -- -- -- -- DatabaseWidget -- -- Searching... -- Otsimine... -- -- -- Do you really want to delete the entry "%1" for good? -- Kas oled kindel, et tahad kirje "%1" jäädavalt kustutada? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Kas oled kindel, et tahad kirje "%1" prügikasti visata? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Kas oled kindel, et tahad selle %n kirje prügikasti visata?Kas oled kindel, et tahad need %n kirjet prügikasti visata? -- -- -- Execute command? -- Käsu käivitamise kinnitus -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Kas oled kindel, et tahad käivitada järgmise käsu?<br><br>%1<br> -- -- -- Remember my choice -- Valik jäetakse meelde -- -- -- Do you really want to delete the group "%1" for good? -- Kas oled kindel, et tahad grupi "%1" jäädavalt kustutada? -- -- -- No current database. -- Aktiivne andmebaas puudub. -- -- -- No source database, nothing to do. -- Lähteandmebaas puudub, midagi pole teha. -- -- -- Search Results (%1) -- Otsingutulemused (%1) -- -- -- No Results -- Tulemusi pole -- -- -- File has changed -- Faili on muudetud -- -- -- The database file has changed. Do you want to load the changes? -- Andmebaasifaili on muudetud. Kas tahad selle uuesti avada? -- -- -- Merge Request -- Mestimistaotlus -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Andmebaasifaili on muudetud, aga sinul on salvestamata muudatusi. --Kas tahad oma muudatused mestida? -- -- -- Empty recycle bin? -- Prügikasti tühjendamise kinnitus -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Kas oled kindel, et soovid kogu prügikasti sisu jäädavalt kustutada? -- -- -- Do you really want to delete %n entry(s) for good? -- Kas oled kindel, et tahad selle %n kirje jäädavalt kustutada?Kas oled kindel, et tahad need %n kirjet jäädavalt kustutada? -- -- -- Delete entry(s)? -- Kirje kustutamise kinnitusKirjete kustutamise kinnitus -- -- -- Move entry(s) to recycle bin? -- Kirje prügikasti viskamise kinnitusKirjete prügikasti viskamise kinnitus -- -- -- Lock Database? -- Andmebaasi lukustamise kinnitus -- -- -- You are editing an entry. Discard changes and lock anyway? -- Kirje muutmine on pooleli. Kas unustada muudatused ja andmebaas ikkagi lukustada? -- -- -- "%1" was modified. --Save changes? -- Andmebaasi "%1" on muudetud. --Kas salvestada muudatused? -- -- -- Database was modified. --Save changes? -- Andmebaasi on muudetud. --Kas salvestada muudatused? -- -- -- Save changes? -- Muudatuste salvestamine -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Automaatse taaslaadimise käigus polnud uut andmebaasifaili võimalik avada. --Veateade: %1 -- -- -- Disable safe saves? -- Turvalise salvestamise keelamine -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC-l on ebaõnnestunud mitu katset andmebaasi salvestada. Tõenäoliselt põhjustab seda mõni failisünkimisteenus, mis salvestatavat faili lukus hoiab. --Kas keelata turvaline salvestamine ja proovida seejärel uuesti? -- -- -- Passwords -- Paroolid -- -- -- Save database as -- Andmebaasi salvestamine -- -- -- KeePass 2 Database -- KeePass 2 andmebaas -- -- -- Replace references to entry? -- Kirje viidete asendamise kinnitus -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Kirjele "%1" leidub %2 viide. Kas kirjutada viide vastava väärtusega üle, jätta see kirje vahele või see ikkagi kustutada?Kirjele "%1" leidub %2 viidet. Kas kirjutada viited vastavate väärtustega üle, jätta see kirje vahele või see ikkagi kustutada? -- -- -- Delete group -- Grupi kustutamise kinnitus -- -- -- Move group to recycle bin? -- Grupi prügikasti viskamise kinnitus -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Kas oled kindel, et tahad grupi "%1" prügikasti visata? -- -- -- Successfully merged the database files. -- Andmebaasifailid edukalt mestitud. -- -- -- Database was not modified by merge operation. -- Mestimise käigus andmebaasi ei muudetud. -- -- -- Shared group... -- Jagatud grupp… -- -- -- Writing the database failed: %1 -- Andmebaasi kirjutamine ebaõnnestus: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Andmebaas on avatud kirjutuskaitstud režiimis. Automaatne salvestamine on välja lülitatud. -- -- -- Save database backup -- Andmebaasi varukoopia salvestamine -- -- -- Could not find database file: %1 -- Andmebaasifaili ei leitud: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Kirje -- -- -- Advanced -- Lisaseaded -- -- -- Icon -- Ikoon -- -- -- Auto-Type -- Automaatsisestus -- -- -- Properties -- Omadused -- -- -- History -- Ajalugu -- -- -- SSH Agent -- SSH agent -- -- -- n/a -- -- -- -- (encrypted) -- (krüptitud) -- -- -- Select private key -- Privaatvõtme valimine -- -- -- Entry history -- Kirje ajalugu -- -- -- Add entry -- Kirje lisamine -- -- -- Edit entry -- Kirje muutmine -- -- -- New attribute -- Uus atribuut -- -- -- Are you sure you want to remove this attribute? -- Kas oled kindel, et soovid selle atribuudi eemaldada? -- -- -- Tomorrow -- Homme -- -- -- %n week(s) -- %n nädala pärast%n nädala pärast -- -- -- %n month(s) -- %n kuu pärast%n kuu pärast -- -- -- Entry updated successfully. -- Kirje kenasti uuendatud. -- -- -- New attribute %1 -- Uus atribuut %1 -- -- -- %n year(s) -- %n aasta pärast%n aasta pärast -- -- -- Confirm Removal -- Eemaldamise kinnitus -- -- -- Browser Integration -- Brauserilõiming -- -- -- <empty URL> -- <tühi URL> -- -- -- Are you sure you want to remove this URL? -- Kas oled kindel, et soovid selle URL-i eemaldada? -- -- -- Reveal -- Paljasta -- -- -- Hide -- Peida -- -- -- Unsaved Changes -- Salvestamata muudatused -- -- -- Would you like to save changes to this entry? -- Kas salvestada selles kirjes tehtud muudatused? -- -- -- [PROTECTED] Press Reveal to view or edit -- [KAITSTUD] Vaatamiseks või muutmiseks klõpsa "Paljasta" -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Lisaatribuudid -- -- -- Add -- Lisa -- -- -- Remove -- Eemalda -- -- -- Edit Name -- Muuda nime -- -- -- Protect -- Kaitstud -- -- -- Reveal -- Paljasta -- -- -- Attachments -- Kaasatud failid -- -- -- Foreground Color: -- Esiplaani värv: -- -- -- Background Color: -- Taustavärv: -- -- -- Attribute selection -- Atribuudi valik -- -- -- Attribute value -- Atribuudi väärtus -- -- -- Add a new attribute -- Lisa uus atribuut -- -- -- Remove selected attribute -- Eemalda valitud atribuut -- -- -- Edit attribute name -- Muuda valitud atribuudi nime -- -- -- Toggle attribute protection -- Lülita atribuudi kaitset -- -- -- Show a protected attribute -- Näita kaitstud atribuuti -- -- -- Foreground color selection -- Vali esiplaani värv -- -- -- Background color selection -- Vali taustavärv -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Märkimisel ei kaasata seda kirjet andmebaasi tervisekontrolli ega HIBP aruannetesse, isegi kui see ei vasta kvaliteedinõuetele (nt parooli vähese entroopia või korduva kasutamise tõttu). Märgi see ruut, kui parooli keerukus ei allu sinu kontrollile (nt kui see peab olema neljakohaline PIN) ja soovid, et see ei risustaks andmebaasi aruandeid.</p></body></html> -- -- -- Exclude from database reports -- Kirje jäetakse andmebaasi aruannetest välja -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Automaatsisestuse lubamine selle kirje puhul -- -- -- Window Associations -- Aknaseosed -- -- -- + -- Lisa -- -- -- - -- Eemalda -- -- -- Window title: -- Akna tiitel: -- -- -- Use a specific sequence for this association: -- Selle seose jaoks kasutatakse eraldi jada: -- -- -- Custom Auto-Type sequence -- Omamääratud automaatsisestuse jada -- -- -- Open Auto-Type help webpage -- Ava automaatsisestuse abimaterjal veebis -- -- -- Existing window associations -- Juba määratud aknaseosed -- -- -- Add new window association -- Lisa uus aknaseos -- -- -- Remove selected window association -- Eemalda valitud aknaseos -- -- -- You can use an asterisk (*) to match everything -- Suvalise märgijada vastavuse määramiseks saab kasutada tärni (*) -- -- -- Set the window association title -- Määra seostatava akna tiitel -- -- -- You can use an asterisk to match everything -- Suvalise märgijada vastavuse määramiseks saab kasutada tärni -- -- -- Custom Auto-Type sequence for this window -- Omamääratud automaatsisestuse jada selle akna jaoks -- -- -- Inherit default Auto-Type sequence from the group -- Grupilt päritud automaatsisestuse jada -- -- -- Use custom Auto-Type sequence: -- Omamääratud automaatsisestuse jada: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Need seaded mõjutavad kirje käitumist brauserilaiendusega. -- -- -- General -- Üldine -- -- -- Skip Auto-Submit for this entry -- Automaatsaatmine jäetakse selle kirje puhul vahele -- -- -- Hide this entry from the browser extension -- See kirje peidetakse brauserilaienduse eest -- -- -- Additional URL's -- Lisa-URL-id -- -- -- Add -- Lisa -- -- -- Remove -- Eemalda -- -- -- Edit -- Muuda -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Märkimisel saadetakse see kirje brauserile ainult HTTP autentimisdialoogide puhul ning tavaliste sisselogimisvormide korral seda kirjet valida ei saa. -- -- -- Use this entry only with HTTP Basic Auth -- Seda kirjet kasutatakse vaid HTTP lihtautentimisel -- -- -- -- EditEntryWidgetHistory -- -- Show -- Näita -- -- -- Restore -- Taasta -- -- -- Delete -- Kustuta -- -- -- Delete all -- Kustuta kõik -- -- -- Entry history selection -- Kirje ajaloolise seisu valimine -- -- -- Show entry at selected history state -- Näita valitud ajaloolist seisu -- -- -- Restore entry to selected history state -- Taasta valitud ajalooline seis -- -- -- Delete selected history state -- Kustuta valitud ajalooline seis -- -- -- Delete all history -- Kustuta kogu selle kirje ajalugu -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Parool: -- -- -- Title: -- Pealkiri: -- -- -- Presets -- Valmisseaded -- -- -- Toggle the checkbox to reveal the notes section. -- Märkmete nägemiseks või muutmiseks märgi kõrvalolev ruut. -- -- -- Username: -- Kasutajanimi: -- -- -- Url field -- URL-i väli -- -- -- Download favicon for URL -- Laadi alla saidiikoon selle URL-i jaoks -- -- -- Password field -- Parooli väli -- -- -- Toggle notes visible -- Lülita märkmete nähtavust -- -- -- Expiration field -- Aegumise väli -- -- -- Expiration Presets -- Vaikimisi aegumisvalikud -- -- -- Expiration presets -- Vaikimisi aegumisvalikud -- -- -- Notes field -- Märkmete väli -- -- -- Title field -- Pealkirja väli -- -- -- Username field -- Kasutajanime väli -- -- -- Toggle expiration -- Lülita aegumist -- -- -- Notes: -- Märkmed: -- -- -- https://example.com -- https://näide.ee -- -- -- Expires: -- Aegub: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Vorm -- -- -- Remove key from agent after -- Võti eemaldatakse agendilt pärast -- -- -- seconds -- sekundit -- -- -- Fingerprint -- Sõrmejälg: -- -- -- Remove key from agent when database is closed/locked -- Võti eemaldatakse agendilt andmebaasi sulgemisel/lukustamisel -- -- -- Public key -- Avalik võti: -- -- -- Add key to agent when database is opened/unlocked -- Võti lisatakse agendile andmebaasi avamisel / lukust lahti tegemisel -- -- -- Comment -- Märkus: -- -- -- Decrypt -- Krüpti lahti -- -- -- n/a -- -- -- -- Copy to clipboard -- Kopeeri lõikepuhvrisse -- -- -- Private key -- Privaatvõti -- -- -- External file -- Väline fail: -- -- -- Browse... -- Button for opening file dialog -- Sirvi... -- -- -- Attachment -- Kaasatud fail: -- -- -- Add to agent -- Lisa agendile -- -- -- Remove from agent -- Eemalda agendilt -- -- -- Require user confirmation when this key is used -- Võtme kasutamisel küsitakse kasutajalt kinnitust -- -- -- Remove key from agent after specified seconds -- Võtme agendilt eemaldamise viivitus sekundites -- -- -- Browser for key file -- Vali võtmefail -- -- -- External key file -- Väline võtmefail -- -- -- Select attachment file -- Kaasatud faili valimine -- -- -- -- EditGroupWidget -- -- Group -- Grupp -- -- -- Icon -- Ikoon -- -- -- Properties -- Omadused -- -- -- Add group -- Grupi lisamine -- -- -- Edit group -- Grupi muutmine -- -- -- Enable -- lubatud -- -- -- Disable -- keelatud -- -- -- Inherit from parent group (%1) -- ülemgrupi järgi (%1) -- -- -- Entry has unsaved changes -- Kas salvestada kirjesse tehtud muudatused? -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tüüp: -- -- -- Path: -- Asukoht: -- -- -- Password: -- Parool: -- -- -- Inactive -- mitteaktiivne -- -- -- KeeShare unsigned container -- KeeShare'i allkirjastamata ümbrik -- -- -- KeeShare signed container -- KeeShare'i allkirjastatud ümbrik -- -- -- Select import source -- Imporditava lähtefaili valimine -- -- -- Select export target -- Eksporditava sihtfaili valimine -- -- -- Select import/export file -- Imporditava/eksporditava faili valimine -- -- -- Clear -- Puhasta -- -- -- Import -- importimine -- -- -- Export -- eksportimine -- -- -- Synchronize -- sünkroonimine -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- See KeePassXC versioon ei toeta valitud ümbrikutüübi jagamist. --Toetatud faililaiendid: %1 -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare on hetkel keelatud. Rakenduse seadetes saab importimise/eksportimise lubada. -- -- -- Database export is currently disabled by application settings. -- Andmebaasi eksportimine on rakenduse seadetes keelatud. -- -- -- Database import is currently disabled by application settings. -- Andmebaasi importimine on rakenduse seadetes keelatud. -- -- -- Sharing mode field -- Jagamisrežiimi väli -- -- -- Path to share file field -- Jagatava faili asukoha väli -- -- -- Password field -- Parooli väli -- -- -- Clear fields -- Puhasta väljad -- -- -- Browse for share file -- Vali jagatav fail -- -- -- Browse... -- Sirvi... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Nime väli -- -- -- Notes field -- Märkmete väli -- -- -- Toggle expiration -- Lülita aegumist -- -- -- Auto-Type toggle for this and sub groups -- Automaatsisestusfunktsiooni lülitamine selle grupi ja alamgruppide jaoks -- -- -- Expiration field -- Aegumise väli -- -- -- Search toggle for this and sub groups -- Otsingufunktsiooni lülitamine selle grupi ja alamgruppide jaoks -- -- -- Default auto-type sequence field -- Vaikimisi automaatsisestuse jada väli -- -- -- Expires: -- Aegub: -- -- -- Use default Auto-Type sequence of parent group -- Kasutatakse ülemgrupi vaikimisi automaatsisestuse jada -- -- -- Auto-Type: -- Automaatsisestus: -- -- -- Search: -- Otsing: -- -- -- Notes: -- Märkmed: -- -- -- Name: -- Nimi: -- -- -- Set default Auto-Type sequence -- Grupile määratakse oma vaikimisi automaatsisestuse jada -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Lisa kohandatud ikoon -- -- -- Delete custom icon -- Kustuta kohandatud ikoon -- -- -- Download favicon -- Laadi alla saidi&ikoon -- -- -- Unable to fetch favicon. -- Saidiikooni allalaadimine polnud võimalik. -- -- -- Images -- Pildid -- -- -- All files -- Kõik failid -- -- -- Confirm Delete -- Kustutamise kinnitus -- -- -- Select Image(s) -- Piltide valimine -- -- -- Successfully loaded %1 of %n icon(s) -- %1 ikoon %n-st kenasti laaditud%1 ikooni %n-st kenasti laaditud -- -- -- No icons were loaded -- Ühtki ikooni ei laaditud -- -- -- %n icon(s) already exist in the database -- %n ikoon on juba andmebaasis olemas%n ikooni on juba andmebaasis olemas -- -- -- The following icon(s) failed: -- Järgmise ikooni laadimine ebaõnnestus:Järgmiste ikoonide laadimine ebaõnnestus: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- See ikoon on kasutusel %n kirjes, kus see asendataks vaikeikooniga. Kas oled kindel, et soovid selle ikooni kustutada?See ikoon on kasutusel %n kirjes, kus see asendataks vaikeikooniga. Kas oled kindel, et soovid selle ikooni kustutada? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Võid sisse lülitada DuckDuckGo veebisaidiikoonide teenuse, valides menüüst Tööriistad > Seaded > Turvalisus. -- -- -- Download favicon for URL -- Laadi alla saidiikoon selle URL-i jaoks -- -- -- Apply selected icon to subgroups and entries -- Vali, kas rakendada valitud ikoon ainult grupile endale või ka selle alamkirjetele -- -- -- Also apply to child groups -- Rakendatakse ka alamgruppidele -- -- -- Also apply to child entries -- Rakendatakse ka alamkirjetele -- -- -- Also apply to all children -- Rakendatakse ka alamgruppidele ja nende kirjetele -- -- -- Existing icon selected. -- Valiti olemasolev ikoon. -- -- -- Use default icon -- Vaikeikoon -- -- -- Use custom icon -- Kohandatud ikoon -- -- -- Apply icon to... -- Ikoon rakendatakse… -- -- -- Apply to this group only -- Rakendatakse ainult grupile endale -- -- -- -- EditWidgetProperties -- -- Created: -- Loodud: -- -- -- Modified: -- Muudetud: -- -- -- Accessed: -- Vaadatud: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Pluginate andmed -- -- -- Remove -- Eemalda -- -- -- Delete plugin data? -- Plugina andmete kustutamise kinnitus -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Kas oled kindel, et soovid valitud plugina andmed kustutada? --See võib põhjustada asjaomaste pluginate töös tõrkeid. -- -- -- Key -- Võti -- -- -- Value -- Väärtus -- -- -- Datetime created -- Loomisaeg -- -- -- Datetime modified -- Muutmisaeg -- -- -- Datetime accessed -- Vaatamisaeg -- -- -- Unique ID -- Unikaalne ID -- -- -- Plugin data -- Pluginate andmed -- -- -- Remove selected plugin data -- Eemalda valitud plugina andmed -- -- -- -- Entry -- -- %1 - Clone -- %1 - koopia -- -- -- -- EntryAttachmentsModel -- -- Name -- Nimi -- -- -- Size -- Suurus -- -- -- -- EntryAttachmentsWidget -- -- Form -- Vorm -- -- -- Add -- Lisa -- -- -- Remove -- Eemalda -- -- -- Open -- Ava -- -- -- Save -- Salvesta -- -- -- Select files -- Failide valimine -- -- -- Are you sure you want to remove %n attachment(s)? -- Kas oled kindel, et soovid eemaldada %n manuse?Kas oled kindel, et soovid eemaldada %n manust? -- -- -- Save attachments -- Kaasatud failide salvestamine -- -- -- Unable to create directory: --%1 -- Kataloogi loomine pole võimalik: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Kas oled kindel, et soovid juba olemasoleva faili "%1" selle manusega üle kirjutada? -- -- -- Confirm overwrite -- Ülekirjutamise kinnitus -- -- -- Unable to save attachments: --%1 -- Kaasatud failide salvestamine pole võimalik: --%1 -- -- -- Unable to open attachment: --%1 -- Kaasatud faili avamine pole võimalik: --%1 -- -- -- Unable to open attachments: --%1 -- Kaasatud failide avamine pole võimalik: --%1 -- -- -- Confirm remove -- Eemaldamise kinnitus -- -- -- Unable to open file(s): --%1 -- Faili avamine pole võimalik: --%1Failide avamine pole võimalik: --%1 -- -- -- Attachments -- Kaasatud failid -- -- -- Add new attachment -- Lisa uus kaasatud fail -- -- -- Remove selected attachment -- Eemalda valitud kaasatud fail -- -- -- Open selected attachment -- Ava valitud kaasatud fail -- -- -- Save selected attachment to disk -- Salvesta valitud kaasatud fail kettale -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- "%1" on suur fail (%2 MB). --See võib andmebaasi väga suureks ajada ja jõudlust vähendada. -- --Kas oled kindel, et tahad selle faili lisada? -- -- -- Confirm Attachment -- Faili kaasamise kinnitus -- -- -- -- EntryAttributesModel -- -- Name -- Nimi -- -- -- -- EntryHistoryModel -- -- Last modified -- Muudetud -- -- -- Title -- Pealkiri -- -- -- Username -- Kasutajanimi -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Viide: -- -- -- Group -- Grupp -- -- -- Title -- Pealkiri -- -- -- Username -- Kasutajanimi -- -- -- URL -- URL -- -- -- Never -- mitte kunagi -- -- -- Password -- Parool -- -- -- Notes -- Märkmed -- -- -- Expires -- Aegub -- -- -- Created -- Loodud -- -- -- Modified -- Muudetud -- -- -- Accessed -- Vaadatud -- -- -- Attachments -- Kaasatud failid -- -- -- Size -- Maht -- -- -- Group name -- Grupi nimi -- -- -- Entry title -- Kirje pealkiri -- -- -- Entry notes -- Kirje märkmed -- -- -- Entry expires at -- Kirje aegub -- -- -- Creation date -- Loomisaeg -- -- -- Last modification date -- Viimase muutmise aeg -- -- -- Last access date -- Viimase vaatamise aeg -- -- -- Attached files -- Kaasatud failid -- -- -- Entry size -- Kirje maht -- -- -- Has attachments -- Kaasatud failide olemasolu -- -- -- Has TOTP one-time password -- TOTP ühekordse parooli olemasolu -- -- -- -- EntryPreviewWidget -- -- Close -- Sulge -- -- -- General -- Üldine -- -- -- Username -- Kasutajanimi -- -- -- Password -- Parool -- -- -- Expiration -- Aegub -- -- -- URL -- URL -- -- -- Attributes -- Atribuudid -- -- -- Attachments -- Kaasatud failid -- -- -- Notes -- Märkmed -- -- -- Autotype -- Automaatsisestus -- -- -- Window -- Aken -- -- -- Sequence -- Jada -- -- -- Searching -- Otsing -- -- -- Search -- Otsimine -- -- -- Clear -- Puhasta -- -- -- Never -- mitte kunagi -- -- -- [PROTECTED] -- [KAITSTUD] -- -- -- Enabled -- lubatud -- -- -- Disabled -- keelatud -- -- -- Share -- Jagamine -- -- -- Display current TOTP value -- Praeguse TOTP väärtuse kuvamine -- -- -- Advanced -- Lisaseaded -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Sobimatu URL -- -- -- -- EntryView -- -- Fit to window -- Mahuta aknasse -- -- -- Fit to contents -- Mahuta sisu järgi -- -- -- Reset to defaults -- Taasta vaikeväärtused -- -- -- Has attachments -- Entry attachment icon toggle -- Kaasatud failide olemasolu -- -- -- Has TOTP -- Entry TOTP icon toggle -- TOTP olemasolu -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- %3 kasutas andmebaasi "%2" kirjet "%1" -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- DBus'i teenuse registreerimine asukohas %1 ebaõnnestus.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %1 kasutas %n kirjet%1 kasutas %n kirjet -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Faili nimi -- -- -- Group -- Grupp -- -- -- Manage -- Haldamine -- -- -- Unlock to show -- Nägemiseks ava lukk -- -- -- None -- Puudub -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Rakendus -- -- -- Manage -- Haldamine -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fd.o saladuste teenus:</b> %1 -- -- -- Unknown -- Unknown PID -- teadmata -- -- -- Unknown -- Unknown executable path -- teadmata -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, käitusfail: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Muu saladuste teenus juba töötab (%1).<br/>See tuleb peatada või eemaldada, enne kui saladuste teenuse lõimingu uuesti sisse lülitada saab. -- -- -- -- Group -- -- [empty] -- group has no children -- [tühi] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Paroolide võrgus valideerimine ebaõnnestus -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Saidiikoonide allalaadimine -- -- -- Cancel -- Loobu -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Kui ikoonide allalaadimisega on probleeme, võid KeePassXC seadete turvalisuse jaotises sisse lülitada DuckDuckGo veebisaidiikoonide teenuse. -- -- -- Close -- Sulge -- -- -- URL -- URL -- -- -- Status -- Olek -- -- -- Please wait, processing entry list... -- Palun oota, kirjete nimekirja töödeldakse... -- -- -- Downloading... -- Allalaadimine... -- -- -- Ok -- OK -- -- -- Already Exists -- On juba olemas -- -- -- Download Failed -- Allalaadimine ebaõnnestus -- -- -- Downloading favicons (%1/%2)... -- Saidiikoonide allalaadimine (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- S&ulge -- -- -- Close message -- Sulge teade -- -- -- -- Kdbx3Reader -- -- missing database headers -- andmebaasipäised on puudu. -- -- -- Header doesn't match hash -- päis ei vasta räsile. -- -- -- Invalid header id size -- sobimatu päise-ID suurus -- -- -- Invalid header field length -- sobimatu päisevälja suurus -- -- -- Invalid header data length -- sobimatu päiseandmete pikkus -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- sisestatud tunnused ei sobinud, proovi palun uuesti. --Kui probleem püsib, võib andmebaasifail olla rikutud. -- -- -- Unable to calculate database key -- andmebaasivõtme arvutamine pole võimalik -- -- -- Unable to issue challenge-response: %1 -- pretensiooni ja vastuse väljastamine pole võimalik: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- pretensiooni ja vastuse väljastamine pole võimalik: %1 -- -- -- Unable to calculate database key -- andmebaasivõtme arvutamine pole võimalik -- -- -- -- Kdbx4Reader -- -- missing database headers -- andmebaasipäised on puudu. -- -- -- Invalid header checksum size -- sobimatu päise kontrollsumma suurus -- -- -- Header SHA256 mismatch -- päise SHA256 mittevastavus -- -- -- Unknown cipher -- tundmatu šiffer -- -- -- Invalid header id size -- sobimatu päise-ID suurus -- -- -- Invalid header field length -- sobimatu päisevälja suurus -- -- -- Invalid header data length -- sobimatu päiseandmete pikkus -- -- -- Failed to open buffer for KDF parameters in header -- päises olevate KDF-parameetrite jaoks puhvri avamine ebaõnnestus -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- toetamata võtmetuletusfunktsioon (KDF) või sobimatud parameetrid -- -- -- Legacy header fields found in KDBX4 file. -- KDBX4-failist leiti iganenud päisevälju. -- -- -- Invalid inner header id size -- sobimatu sisemise päise ID maht -- -- -- Invalid inner header field length -- sobimatu sisemise päise väljapikkus -- -- -- Invalid inner header binary size -- sobimatu sisemise päise binaarmaht -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- toetamata KeePassi metaandmete salvestusstruktuuri versioon -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- sobimatu kirjenime pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- sobimatud kirjenime andmed metaandmete salvestusstruktuuris -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- sobimatud kirjeväärtuse andmed metaandmete salvestusstruktuuris -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu Bool-kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu Int32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu UInt32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu Int64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- sobimatu UInt64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- sobimatu kirjetüüp metaandmete salvestusstruktuuris -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- sobimatu väljatüübi maht metaandmete salvestusstruktuuris -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- sisestatud tunnused ei sobinud, proovi palun uuesti. --Kui probleem püsib, võib andmebaasifail olla rikutud. -- -- -- (HMAC mismatch) -- (HMAC-i mittevastavus) -- -- -- Unable to calculate database key: %1 -- andmebaasivõtme arvutamine pole võimalik: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- sobimatu sümmeetrilise šifri algoritm -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- sobimatu sümmeetrilise šifri initsialisatsioonivektori maht -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- metaandmete salvestusstruktuuri KDF-parameetrite järjestamine ebaõnnestus -- -- -- Unable to calculate database key: %1 -- andmebaasivõtme arvutamine pole võimalik: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- toetamata šiffer -- -- -- Invalid compression flags length -- sobimatu tihenduslippude pikkus -- -- -- Unsupported compression algorithm -- toetamata pakkimisalgoritm -- -- -- Invalid master seed size -- sobimatu ülemseemne suurus -- -- -- Invalid transform seed size -- sobimatu teisendusseemne suurus -- -- -- Invalid transform rounds size -- sobimatu teisendusraundide arvu maht -- -- -- Invalid start bytes size -- sobimatu alustusbaitide suurus -- -- -- Invalid random stream id size -- -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- tegemist pole KeePassi andmebaasiga. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- valitud fail on vana KeePass 1 andmebaas (.kdb). -- --Selle saab importida, valides menüüst Andmebaas > Impordi > KeePass 1 andmebaas. --Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 versiooniga avada. -- -- -- Unsupported KeePass 2 database version. -- toetamata KeePass 2 andmebaasiversioon -- -- -- Invalid cipher uuid length: %1 (length=%2) -- sobimatu šifri UUID pikkus: %1 (pikkus = %2) -- -- -- Unable to parse UUID: %1 -- UUID parsimine pole võimalik: %1 -- -- -- Failed to read database file. -- andmebaasifaili lugemine ebaõnnestus. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML-i parsimine ebaõnnestus: %1 -- -- -- No root group -- juurgrupp puudub -- -- -- Missing icon uuid or data -- Ikooni UUID või andmed on puudu -- -- -- Missing custom data key or value -- kohandatud andmete võti või väärtus puudub -- -- -- Multiple group elements -- -- -- -- Null group uuid -- -- -- -- Invalid group icon number -- sobimatu grupi ikooninumber -- -- -- Invalid EnableAutoType value -- sobimatu võtme EnableAutoType väärtus -- -- -- Invalid EnableSearching value -- sobimatu võtme EnableSearching väärtus -- -- -- No group uuid found -- ei leitud ühtki grupi-UUID-d -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- sobimatu kirje ikooninumber -- -- -- History element in history entry -- ajalooelement ajalookirjes -- -- -- No entry uuid found -- ei leitud ühtki kirje-UUID-d -- -- -- History element with different uuid -- leiti erineva UUID-ga ajalooelement -- -- -- Duplicate custom attribute found -- leiti duplitseeritud kohandatud atribuut -- -- -- Entry string key or value missing -- võtme stringvõti või väärtus puudub -- -- -- Entry binary key or value missing -- võtme binaarvõti või väärtus puudub -- -- -- Auto-type association window or sequence missing -- automaatsisestuse sihtaken või jada puudub -- -- -- Invalid bool value -- sobimatu tõeväärtus -- -- -- Invalid date time value -- sobimatu ajaväärtus -- -- -- Invalid color value -- sobimatu värviväärtus -- -- -- Invalid color rgb part -- sobimatu värvi RGB-osa -- -- -- Invalid number value -- sobimatu arvväärtus -- -- -- Invalid uuid value -- sobimatu UUID-väärtus -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- binaarandmete lahtipakkimine pole võimalik -- -- -- XML error: --%1 --Line %2, column %3 -- XML-i viga: --%1 --Rida %2, veerg %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Sobimatu KeeAgenti seadistusfaili struktuur. -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- Privaatvõti on tühi. -- -- -- File too large to be a private key -- Fail on liiga suur, et privaatvõti olla. -- -- -- Failed to open private key -- Privaatvõtme avamine ebaõnnestus. -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Andmebaasi avamine pole võimalik. -- -- -- Import KeePass1 Database -- KeePass 1 andmebaasi importimine -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- võtmefaili lugemine pole võimalik. -- -- -- Not a KeePass database. -- tegemist pole KeePassi andmebaasiga. -- -- -- Unsupported encryption algorithm. -- toetamata krüptimisalgoritm -- -- -- Unsupported KeePass database version. -- toetamata KeePassi andmebaasiversioon -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- krüptimise IV lugemine pole võimalik -- -- -- Invalid number of groups -- sobimatu gruppide arv -- -- -- Invalid number of entries -- sobimatu kirjete arv -- -- -- Invalid content hash size -- sobimatu sisuräsi suurus -- -- -- Invalid transform seed size -- sobimatu teisendusseemne suurus -- -- -- Invalid number of transform rounds -- sobimatu teisendusraundide arv -- -- -- Unable to construct group tree -- grupipuu konstrueerimine ebaõnnestus -- -- -- Root -- Juur -- -- -- Key transformation failed -- võtmeteisendus ebaõnnestus -- -- -- Invalid group field type number -- sobimatu grupi väljatüübi number -- -- -- Invalid group field size -- sobimatu grupi väljasuurus -- -- -- Read group field data doesn't match size -- grupi loetud väljaandmed ei kattu väidetava suurusega -- -- -- Incorrect group id field size -- sobimatu grupi ID-välja suurus -- -- -- Incorrect group creation time field size -- sobimatu grupi loomisaja välja suurus -- -- -- Incorrect group modification time field size -- sobimatu grupi muutmisaja välja suurus -- -- -- Incorrect group access time field size -- sobimatu grupi vaatamisaja välja suurus -- -- -- Incorrect group expiry time field size -- sobimatu grupi aegumisaja välja suurus -- -- -- Incorrect group icon field size -- sobimatu grupi ikoonivälja suurus -- -- -- Incorrect group level field size -- sobimatu grupi tasemevälja suurus -- -- -- Invalid group field type -- sobimatu grupi väljatüüp -- -- -- Missing group id or level -- grupi ID või tase puudub -- -- -- Missing entry field type number -- kirje väljatüübi number puudub -- -- -- Invalid entry field size -- sobimatu kirje väljasuurus -- -- -- Read entry field data doesn't match size -- kirje loetud väljaandmed ei kattu väidetava suurusega -- -- -- Invalid entry uuid field size -- sobimatu kirje UUID-välja suurus -- -- -- Invalid entry group id field size -- sobimatu kirje grupi-ID-välja suurus -- -- -- Invalid entry icon field size -- sobimatu kirje ikoonivälja suurus -- -- -- Invalid entry creation time field size -- sobimatu kirje loomisaja välja suurus -- -- -- Invalid entry modification time field size -- sobimatu kirje muutmisaja välja suurus -- -- -- Invalid entry expiry time field size -- sobimatu kirje aegumisaja välja suurus -- -- -- Invalid entry field type -- sobimatu kirje väljatüüp -- -- -- unable to seek to content position -- sisu alguskoha juurde pöördumine pole võimalik -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- sisestatud tunnused ei sobinud, proovi palun uuesti. --Kui probleem püsib, võib andmebaasifail olla rikutud. -- -- -- Unable to calculate database key -- andmebaasivõtme arvutamine pole võimalik -- -- -- -- KeeShare -- -- Invalid sharing reference -- Sobimatu jagamisviide -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Imporditud asukohast "%1" -- -- -- Exported to %1 -- Eksporditud asukohta %1 -- -- -- Synchronized with %1 -- Sünkroonitud asukohaga %1 -- -- -- Import is disabled in settings -- Importimine on seadetes keelatud -- -- -- Export is disabled in settings -- Eksportimine on seadetes keelatud -- -- -- Inactive share -- -- -- -- Imported from -- Imporditud asukohast -- -- -- Exported to -- Eksporditud asukohta -- -- -- Synchronized with -- Sünkroonitud asukohaga -- -- -- -- KeyComponentWidget -- -- Key Component -- Võtmekomponent -- -- -- Key Component Description -- Võtmekomponendi kirjeldus -- -- -- Cancel -- Loobu -- -- -- Key Component set, click to change or remove -- Võtmekomponent on määratud, muutmiseks või eemaldamiseks klõpsa vastavat nuppu -- -- -- Add %1 -- Add a key component -- Lisa: %1 -- -- -- Change %1 -- Change a key component -- Muuda: %1 -- -- -- Remove %1 -- Remove a key component -- Eemalda: %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 on määratud, muutmiseks või eemaldamiseks klõpsa vastavat nuppu -- -- -- -- KeyFileEditWidget -- -- Generate -- Genereeri -- -- -- Key File -- Võtmefail -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Lisaturvalisuse saavutamiseks võid määrata juhuslikke baite sisaldava võtmefaili.</p><p>Hoia seda salajas ja ära seda ära kaota, sest muidu ei saa andmebaasi lukku enam avada!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Viga võtmefaili "%1" laadimisel. --Teade: %2 -- -- -- Key files -- Võtmefailid -- -- -- All files -- Kõik failid -- -- -- Create Key File... -- Võtmefaili loomine -- -- -- Error creating key file -- Viga võtmefaili loomisel -- -- -- Unable to create key file: %1 -- Võtmefaili pole võimalk luua: %1 -- -- -- Select a key file -- Võtmefaili valimine -- -- -- Key file selection -- Võtmefaili valimine -- -- -- Browse for key file -- Vali võtmefail -- -- -- Browse... -- Sirvi... -- -- -- Generate a new key file -- Genereeri uus võtmefail -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- NB: ära kasuta faili, mis võib muutuda, kuna sel juhul pole enam võimalik andmebaasi lukku avada! -- -- -- Invalid Key File -- Sobimatu võtmefail -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Andmebaasi ennast ei saa võtmefailina kasutada. Palun vali mõni muu fail või genereeri uus võtmefail. -- -- -- Suspicious Key File -- Kahtlane võtmefail -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile juurdepääsu. --Kas oled kindel, et soovid selle failiga jätkata? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Andmebaas -- -- -- &Help -- A&bi -- -- -- &Groups -- &Grupid -- -- -- &Tools -- &Tööriistad -- -- -- &Quit -- &Välju -- -- -- &About -- &Teave -- -- -- Database settings -- Andmebaasi seaded -- -- -- Copy username to clipboard -- Kopeeri kasutajanimi lõikepuhvrisse -- -- -- Copy password to clipboard -- Kopeeri parool lõikepuhvrisse -- -- -- &Settings -- &Seaded -- -- -- &Title -- &Pealkiri -- -- -- Copy title to clipboard -- Kopeeri pealkiri lõikepuhvrisse -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopeeri URL lõikepuhvrisse -- -- -- &Notes -- &Märkmed -- -- -- Copy notes to clipboard -- Kopeeri märkmed lõikepuhvrisse -- -- -- Copy &TOTP -- Kopeeri &TOTP -- -- -- E&mpty recycle bin -- &Tühjenda prügikast -- -- -- Clear history -- Puhasta ajalugu -- -- -- Access error for config file %1 -- Juurdepääsuviga seadistusfailil "%1" -- -- -- Settings -- Seaded -- -- -- Toggle window -- Kuva või peida põhiaken -- -- -- Quit KeePassXC -- Välju KeePassXC-st -- -- -- Please touch the button on your YubiKey! -- Puuduta YubiKey nuppu! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- HOIATUS: kasutad KeePassXC ebastabiilset versiooni! --Selle kasutamisega kaasneb suur risk oma parooliandmebaasid ära rikkuda, nii et vaata, et sul oleks neist varukoopiad. --See versioon ei ole mõeldud töökeskkonnas kasutamiseks. -- -- -- &Donate -- A&nneta… -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- HOIATUS: sinu Qt versioon võib põhjustada KeePassXC kokkujooksmist ekraaniklaviatuuri kasutamisel. --Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage'i kasutamist. -- -- -- &Import -- &Impordi -- -- -- Create a new database -- Loo uus andmebaas -- -- -- Merge from another KDBX database -- Mesti mõne teise KDBX-andmebaasiga -- -- -- Add a new entry -- Lisa uus kirje -- -- -- View or edit entry -- Vaata või muuda kirjet -- -- -- Add a new group -- Lisa uus grupp -- -- -- Perform &Auto-Type -- Soorita &automaatsisestus -- -- -- Open &URL -- A&va URL -- -- -- Import a KeePass 1 database -- Impordi KeePass 1 andmebaas -- -- -- Import a CSV file -- Impordi CSV-fail -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NB: kasutad KeePassXC testversiooni! --Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see versioon ei ole mõeldud töökeskkonnas kasutamiseks. -- -- -- Check for updates on startup? -- Käivitamisel uuenduste otsimine -- -- -- Would you like KeePassXC to check for updates on startup? -- Kas soovid, et KeePassXC käivitumisel uuenduste olemasolu kontrolliks? -- -- -- You can always check for updates manually from the application menu. -- Rakenduse menüü kaudu saab neid alati ka käsitsi otsida. -- -- -- &Export -- &Ekspordi -- -- -- Sort &A-Z -- Sordi &A-st Y-ni -- -- -- Sort &Z-A -- Sordi &Y-st A-ni -- -- -- &Password Generator -- &Parooligeneraator -- -- -- Import a 1Password Vault -- Impordi 1Passwordi turvalaegas -- -- -- &Getting Started -- &Alustusjuhend... -- -- -- &User Guide -- Käsi&raamat... -- -- -- &Keyboard Shortcuts -- &Kiirklahvid -- -- -- &Recent Databases -- Viimatised andme&baasid -- -- -- &Entries -- &Kirjed -- -- -- Copy Att&ribute -- Kopeeri at&ribuut -- -- -- TOTP -- &TOTP -- -- -- View -- &Vaade -- -- -- Theme -- &Kujundus -- -- -- &Check for Updates -- &Otsi uuendusi -- -- -- &Open Database… -- &Ava andmebaas… -- -- -- &Save Database -- &Salvesta andmebaas -- -- -- &Close Database -- S&ulge andmebaas -- -- -- &New Database… -- &Uus andmebaas… -- -- -- &Merge From Database… -- &Mesti andmebaas… -- -- -- &New Entry… -- &Uus kirje… -- -- -- &Edit Entry… -- &Muuda kirjet… -- -- -- &Delete Entry… -- Kustuta kirj&e… -- -- -- &New Group… -- &Uus grupp… -- -- -- &Edit Group… -- &Muuda gruppi… -- -- -- &Delete Group… -- K&ustuta grupp… -- -- -- Download All &Favicons… -- Laadi alla kõigi saitide &ikoonid… -- -- -- Sa&ve Database As… -- Salvesta andmebaas &kui… -- -- -- Database &Security… -- Andmebaasi &turvalisus… -- -- -- Database &Reports... -- A&ndmebaasi aruanded… -- -- -- Statistics, health check, etc. -- Statistika, tervisekontroll jm -- -- -- &Database Settings… -- An&dmebaasi seaded… -- -- -- &Clone Entry… -- K&looni kirje… -- -- -- Move u&p -- Lii&guta ülespoole -- -- -- Move entry one step up -- Liiguta kirje sammu võrra ülespoole -- -- -- Move do&wn -- Liiguta allap&oole -- -- -- Move entry one step down -- Liiguta kirje sammu võrra allapoole -- -- -- Copy &Username -- Kopeeri &kasutajanimi -- -- -- Copy &Password -- Kopeeri &parool -- -- -- Download &Favicon -- Laadi alla saidi&ikoon -- -- -- &Lock Databases -- &Lukusta andmebaasid -- -- -- &CSV File… -- &CSV-failiks… -- -- -- &HTML File… -- &HTML-failiks… -- -- -- KeePass 1 Database… -- KeePass 1 andmebaas… -- -- -- 1Password Vault… -- 1Passwordi turvalaegas… -- -- -- CSV File… -- CSV-fail… -- -- -- Show TOTP -- Kuva TOTP -- -- -- Show QR Code -- Kuva QR-kood -- -- -- Set up TOTP… -- Seadista TOTP… -- -- -- Report a &Bug -- T&eata veast... -- -- -- Open Getting Started Guide -- Ava alustusjuhend -- -- -- &Online Help -- Abi &võrgus -- -- -- Go to online documentation -- Ava dokumentatsioon võrgus -- -- -- Open User Guide -- Ava käsiraamat -- -- -- Save Database Backup... -- Sa&lvesta andmebaasi varukoopia… -- -- -- Add key to SSH Agent -- Lisa võti SSH agendile -- -- -- Remove key from SSH Agent -- Eemalda võti SSH agendilt -- -- -- Compact Mode -- Kompaktne režiim -- -- -- Automatic -- Automaatne -- -- -- Light -- Hele -- -- -- Dark -- Tume -- -- -- Classic (Platform-native) -- Klassikaline (platvormiomane) -- -- -- Show Toolbar -- &Tööriistariba nähtaval -- -- -- Show Preview Panel -- &Eelvaatluse paneel nähtaval -- -- -- Don't show again for this version -- Ära selle versiooni puhul rohkem näita -- -- -- Restart Application? -- Uuesti käivitamise kinnitus -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? -- -- -- Perform Auto-Type Sequence -- Soorita automaatsisestuse jada -- -- -- {USERNAME} -- Kasutajanimi -- -- -- {USERNAME}{ENTER} -- Kasutajanimi ja Enter -- -- -- {PASSWORD} -- Parool -- -- -- {PASSWORD}{ENTER} -- Parool ja Enter -- -- -- Always on Top -- -- -- -- Hide Usernames -- Kasutajanimede varjamine -- -- -- Hide Passwords -- Paroolide varjamine -- -- -- -- ManageDatabase -- -- Database settings -- Andmebaasi seaded -- -- -- Edit database settings -- Muuda andmebaasi seadeid -- -- -- Unlock database -- Ava andmebaasi lukk -- -- -- Unlock database to show more information -- Lisateabe nägemiseks ava andmebaasi lukk -- -- -- Lock database -- Lukusta andmebaas -- -- -- -- ManageSession -- -- Disconnect -- Katkesta ühendus -- -- -- Disconnect this application -- Katkesta ühendus selle rakendusega -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Uue KeePassXC andmebaasi loomine -- -- -- Root -- Root group -- Juur -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Andmebaasinõustaja -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes. -- -- -- Advanced Settings -- Täpsemad seaded -- -- -- Simple Settings -- Lihtsad seaded -- -- -- Encryption Settings -- Krüptimisseaded -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Andmebaasi tunnused -- -- -- A set of credentials known only to you that protects your database. -- Kaitse andmebaasi tunnustega, mida ainult sina tead. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Krüptimisseaded -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Andmebaasi üldandmed -- -- -- Please fill in the display name and an optional description for your new database: -- Sisesta oma uuele andmebaasile kuvanimi ja soovi korral kirjeldus: -- -- -- -- NixUtils -- -- Password Manager -- Paroolihaldur -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- sobimatu OpData01, ei sisalda päist -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- IV kõiki baite pole võimalik lugeda: oodati 16, aga saadi %1 -- -- -- Unable to init cipher for opdata01: %1 -- Šifri initsialiseerimine OpData01 jaoks pole võimalik: %1 -- -- -- Unable to read all HMAC signature bytes -- HMAC-i signatuuri kõiki baite pole võimalik lugeda -- -- -- Malformed OpData01 due to a failed HMAC -- Ebaõnnestunud HMAC-i tõttu vigane OpData01 -- -- -- Unable to process clearText in place -- clearTexti kohapeal töötlemine pole võimalik -- -- -- Expected %1 bytes of clear-text, found %2 -- oodati %1 baiti lihtteksti, aga leiti %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Andmebaasi lugemine ei loonud protsessi --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- kataloog .opvault peab olemas olema -- -- -- Directory .opvault must be readable -- kataloog .opvault peab olema loetav -- -- -- Directory .opvault/default must exist -- kataloog .opvault/default peab olemas olema -- -- -- Directory .opvault/default must be readable -- kataloog .opvault/default peab olema loetav -- -- -- Unable to decode masterKey: %1 -- ülemvõtme dekodeerimine pole võimalik: %1 -- -- -- Unable to derive master key: %1 -- ülemvõtme tuletamine pole võimalik: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Sobimatu võtmefail – oodati OpenSSH võtit -- -- -- PEM boundary mismatch -- PEM-i perimeetri mittevastavus -- -- -- Base64 decoding failed -- Base64 dekodeerimine ebaõnnestus -- -- -- Key file way too small. -- Võtmefail on kaugelt liiga väike. -- -- -- Key file magic header id invalid -- Võtmefaili maagilise päise ID on sobimatu -- -- -- Found zero keys -- Võtmeid ei leitud -- -- -- Failed to read public key. -- Avaliku võtme lugemine ebaõnnestus. -- -- -- Corrupted key file, reading private key failed -- Rikutud võtmefail, privaatvõtme lugemine ebaõnnestus -- -- -- No private key payload to decrypt -- Privaatvõtmel pole lasti, mida lahti krüptida -- -- -- Trying to run KDF without cipher -- Ilma šifrita KDF-i käitamise üritamine -- -- -- Passphrase is required to decrypt this key -- Selle võtme lahtikrüptimiseks on vaja paroolifraasi -- -- -- Key derivation failed, key file corrupted? -- Võtmetuletus ebaõnnestus – rikutud võtmefail? -- -- -- Decryption failed, wrong passphrase? -- Lahtikrüptimine ebaõnnestus – vale paroolifraas? -- -- -- Unexpected EOF while reading public key -- Ootamatu faililõpp avaliku võtme lugemisel -- -- -- Unexpected EOF while reading private key -- Ootamatu faililõpp privaatvõtme lugemisel -- -- -- Can't write public key as it is empty -- Avalikku võtit ei saa kirjutada, kuna see on tühi -- -- -- Unexpected EOF when writing public key -- Ootamatu faililõpp avaliku võtme kirjutamisel -- -- -- Can't write private key as it is empty -- Privaatvõtit ei saa kirjutada, kuna see on tühi -- -- -- Unexpected EOF when writing private key -- Ootamatu faililõpp privaatvõtme kirjutamisel -- -- -- Unsupported key type: %1 -- Toetamata võtmetüüp: %1 -- -- -- Unknown cipher: %1 -- Tundmatu šiffer: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Šifri IV on MD5-KDF-i jaoks liiga lühike -- -- -- Unknown KDF: %1 -- Tundmatu KDF: %1 -- -- -- Unknown key type: %1 -- Tundmatu võtmetüüp: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Paroolid ei kattu -- -- -- Passwords match so far -- Paroolid kattuvad -- -- -- Toggle Password (%1) -- Lülita parooli nähtavust (%1) -- -- -- Generate Password (%1) -- Genereeri parool (%1) -- -- -- Warning: Caps Lock enabled! -- Hoiatus: suurtähelukk on sisse lülitatud! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Parool: -- -- -- Confirm password: -- Kordus: -- -- -- Password -- Parool -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Parool on esmane meetod andmebaasi turvamiseks.</p><p>Hea parool on pikk ja ainukordne. Soovi korral võib lasta KeePassXC-l parooli genereerida.</p> -- -- -- Passwords do not match. -- Paroolid ei kattu. -- -- -- Password field -- Parooli väli -- -- -- Repeat password field -- Parooli korduse väli -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- tugevus -- -- -- entropy -- entroopia -- -- -- Password -- Parool -- -- -- Character Types -- Märgitüübid -- -- -- Numbers -- Numbrid -- -- -- Extended ASCII -- Laiendatud ASCII -- -- -- Exclude look-alike characters -- Sarnase välimusega märgid jäetakse välja -- -- -- Pick characters from every group -- Kaasatakse märke igast valitud tüübist -- -- -- &Length: -- &Pikkus: -- -- -- Passphrase -- Paroolifraas -- -- -- Wordlist: -- Sõnaloend: -- -- -- Word Separator: -- Sõnade eraldaja: -- -- -- Close -- Sulge -- -- -- Entropy: %1 bit -- Entroopia: %1 bitti -- -- -- Password Quality: %1 -- Parooli kvaliteet: %1 -- -- -- Poor -- Password quality -- kehv -- -- -- Weak -- Password quality -- nõrk -- -- -- Good -- Password quality -- hea -- -- -- Excellent -- Password quality -- suurepärane -- -- -- Switch to advanced mode -- Lülita täppisrežiimi -- -- -- Advanced -- Lisaseaded -- -- -- Braces -- Sulud -- -- -- Punctuation -- Kirjavahemärgid -- -- -- Quotes -- Jutumärgid -- -- -- Logograms -- Logogrammid -- -- -- Character set to exclude from generated password -- Märgid, mida genereeritavas paroolis esineda ei tohi -- -- -- Do not include: -- Välistatakse: -- -- -- Add non-hex letters to "do not include" list -- Lisa välistusloendisse tähed, mida 16nd-süsteemis ei kasutata -- -- -- Hex -- 16nd-süsteemis parool -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Määrab, kas välistada märgid nagu "0", "O", "1", "l", "I", "|", "﹒" -- -- -- Generated password -- Genereeritud parool -- -- -- Upper-case letters -- Suurtähed -- -- -- Lower-case letters -- Väiketähed -- -- -- Special characters -- Erimärgid -- -- -- Math Symbols -- Matemaatikasümbolid -- -- -- Dashes and Slashes -- Kriipsud -- -- -- Excluded characters -- Välistatud märgid -- -- -- Hex Passwords -- 16nd-paroolid -- -- -- Password length -- Parooli pikkus -- -- -- Word Case: -- Täheregister: -- -- -- Regenerate password -- Genereeri uus parool -- -- -- Copy password -- Kopeeri parool -- -- -- lower case -- väiketähed -- -- -- UPPER CASE -- SUURTÄHED -- -- -- Title Case -- Suured Esitähed -- -- -- Generate Password -- Parooli genereerimine -- -- -- Also choose from: -- Lisamärgid: -- -- -- Additional characters to use for the generated password -- Lisamägid, mille hulgast parooli genereerimisel valida -- -- -- Additional characters -- Lisamärgid -- -- -- Word Count: -- Sõnade arv: -- -- -- Esc -- Esc -- -- -- Apply Password -- Kasuta seda parooli -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Genereeri uus parool (%1) -- -- -- Special Characters -- Erimärgid -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistika -- -- -- Very weak password -- Väga nõrk parool -- -- -- Password entropy is %1 bits -- Parooli entroopia on %1 bitti -- -- -- Weak password -- Nõrk parool -- -- -- Used in %1/%2 -- Kasutuskoht: %1/%2 -- -- -- Password is used %1 times -- Parooli on kasutatud %1 korda -- -- -- Password has expired -- Parool on aegunud -- -- -- Password expiry was %1 -- Parool aegus %1 -- -- -- Password is about to expire -- Parool aegub lähipäevil -- -- -- Password expires in %1 days -- Parool aegub %1 päeva pärast -- -- -- Password will expire soon -- Parool aegub varsti -- -- -- Password expires on %1 -- Parool aegub %1 -- -- -- Health Check -- Tervisekontroll -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Kirjuta üle -- -- -- Delete -- Kustuta -- -- -- Move -- Viska -- -- -- Empty -- &Tühjenda -- -- -- Remove -- Eemalda -- -- -- Skip -- Jäta vahele -- -- -- Disable -- Keela -- -- -- Merge -- Mesti -- -- -- Continue -- &Jätka -- -- -- -- QObject -- -- Database not opened -- Andmebaasi pole avatud -- -- -- Database hash not available -- Andmebaasi räsi pole saadaval -- -- -- Client public key not received -- Kliendi avalikku võtit ei saadud -- -- -- Cannot decrypt message -- Sõnumi lahtikrüptimine pole võimalik -- -- -- Action cancelled or denied -- -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- -- -- -- Incorrect action -- -- -- -- Empty message received -- -- -- -- No URL provided -- URL-i ei antud -- -- -- No logins found -- -- -- -- Unknown error -- Tundmatu viga -- -- -- Add a new entry to a database. -- Uue kirje lisamine andmebaasi. -- -- -- Path of the database. -- Andmebaasi asukoht. -- -- -- Key file of the database. -- Andmebaasi võtmefail. -- -- -- path -- asukoht -- -- -- Username for the entry. -- Kirje kasutajanimi. -- -- -- username -- kasutajanimi -- -- -- URL for the entry. -- Kirje URL. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Kirje parooli küsitakse. -- -- -- Generate a password for the entry. -- Kirjele genereeritakse parool. -- -- -- length -- pikkus -- -- -- Path of the entry to add. -- Lisatava kirje asukoht. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Lõikepuhvrisse kopeeritava kirje asukoht. -- -- -- Timeout in seconds before clearing the clipboard. -- Lõikepuhvri puhastamise viivitus sekundites. -- -- -- Edit an entry. -- Kirje muutmine. -- -- -- Title for the entry. -- Kirje pealkiri -- -- -- title -- pealkiri -- -- -- Path of the entry to edit. -- Muudetava kirje asukoht. -- -- -- Estimate the entropy of a password. -- Parooli entroopia hindamine. -- -- -- Password for which to estimate the entropy. -- Parool, mille entroopiat hinnata. -- -- -- Perform advanced analysis on the password. -- -- -- -- -- --Available commands: -- -- -- --Võimalikud käsud: -- -- -- -- Name of the command to execute. -- Käivitatava käsu nimi. -- -- -- List database entries. -- Andmebaasi kirjete loetlemine. -- -- -- Path of the group to list. Default is / -- Loetletava grupi asukoht andmebaasis. Vaikimisi / -- -- -- Find entries quickly. -- Kirjete kiiresti leidmine. -- -- -- Search term. -- Otsingusõna. -- -- -- Merge two databases. -- Kahe andmebaasi mestimine. -- -- -- Path of the database to merge from. -- Mestitava andmebaasi asukoht. -- -- -- Use the same credentials for both database files. -- Mõlema andmebaasi luku avamiseks kasutatakse samu tunnuseid. -- -- -- Key file of the database to merge from. -- Mestitava andmebaasi võtmefail. -- -- -- Show an entry's information. -- Kirje teabe näitamine. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Näidatavate atribuutide nimed. Selle võtme võib anda ka mitu korda, sel juhul näidatakse atribuute vastavas järjestuses, üks igal real. Kui atribuute ei määrata, esitatakse kokkuvõte vaikeatribuutidest. -- -- -- attribute -- atribuut -- -- -- Name of the entry to show. -- Näidatava kirje nimi. -- -- -- NULL device -- NULL-seade -- -- -- error reading from device -- viga seadmest lugemisel -- -- -- malformed string -- vigane string -- -- -- missing closing quote -- puuduv lõpujutumärk -- -- -- Group -- Grupp -- -- -- Title -- Pealkiri -- -- -- Username -- Kasutajanimi -- -- -- Password -- Parool -- -- -- Notes -- Märkmed -- -- -- Last Modified -- Muudetud -- -- -- Created -- Loodud -- -- -- Browser Integration -- Brauserilõiming -- -- -- SSH Agent -- SSH agent -- -- -- Generate a new random diceware passphrase. -- Uue juhusliku Diceware'i paroolifraasi genereerimine. -- -- -- Word count for the diceware passphrase. -- Sõnade arv Diceware'i paroolifraasis. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Diceware'i generaatori kasutatav sõnaloend. --[Vaikimisi: EFF English] -- -- -- Generate a new random password. -- Uue juhusliku parooli genereerimine. -- -- -- Could not create entry with path %1. -- Kirjet asukohaga "%1" pole võimalik luua. -- -- -- Enter password for new entry: -- Sisesta uue kirje parool: -- -- -- Writing the database failed %1. -- Andmebaasi kirjutamine ebaõnnestus: %1 -- -- -- Successfully added entry %1. -- Kirje "%1" edukalt lisatud. -- -- -- Invalid timeout value %1. -- Sobimatu viivituse väärtus %1. -- -- -- Entry %1 not found. -- Kirjet "%1" ei leitud. -- -- -- Entry with path %1 has no TOTP set up. -- Kirjel asukohas "%1" pole TOTP-d seadistatud. -- -- -- Clearing the clipboard in %1 second(s)... -- Lõikepuhver puhastatakse %1 sekundi pärast...Lõikepuhver puhastatakse %1 sekundi pärast... -- -- -- Clipboard cleared! -- Lõikepuhver puhastatud! -- -- -- Silence password prompt and other secondary outputs. -- Parooliviiba jm teisese väljundi vaigistamine. -- -- -- count -- CLI parameter -- arv -- -- -- Could not find entry with path %1. -- Kirjet asukohaga "%1" ei leitud. -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- Sisesta kirje uus parool: -- -- -- Writing the database failed: %1 -- Andmebaasi kirjutamine ebaõnnestus: %1 -- -- -- Successfully edited entry %1. -- Kirje "%1" edukalt muudetud. -- -- -- Length %1 -- Pikkus: %1 -- -- -- Entropy %1 -- Entroopia: %1 -- -- -- Log10 %1 -- Log10: %1 -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- Entroopia: %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Parooli pikkus (%1) != osade pikkuse summa (%2) *** -- -- -- Failed to load key file %1: %2 -- Võtmefaili %1 laadimine ebaõnnestus: %2 -- -- -- Length of the generated password -- Genereeritava parooli pikkus. -- -- -- Use lowercase characters -- Kasutatakse väiketähti. -- -- -- Use uppercase characters -- Kasutatakse suurtähti. -- -- -- Use special characters -- Kasutatakse erimärke. -- -- -- Use extended ASCII -- Kasutatakse laiendatud ASCII märke. -- -- -- Exclude character set -- Välistatavad märgid. -- -- -- chars -- märgid -- -- -- Exclude similar looking characters -- Sarnase välimusega märgid jäetakse välja. -- -- -- Include characters from every selected group -- Kaasatakse märke igast valitud tüübist. -- -- -- Recursively list the elements of the group. -- Grupi elementide rekursiivne loetlemine. -- -- -- Cannot find group %1. -- Gruppi %1 ei leitud. -- -- -- Error reading merge file: --%1 -- Viga mestitava faili lugemisel: --%1 -- -- -- Unable to save database to file : %1 -- Andmebaasi failiks salvestamine ebaõnnestus: %1 -- -- -- Unable to save database to file: %1 -- Andmebaasi failiks salvestamine ebaõnnestus: %1 -- -- -- Successfully recycled entry %1. -- Kirje "%1" edukalt prügikasti visatud. -- -- -- Successfully deleted entry %1. -- Kirje "%1" edukalt kustutatud. -- -- -- Show the entry's current TOTP. -- Kirje praeguse TOTP näitamine. -- -- -- ERROR: unknown attribute %1. -- VIGA: tundmatu atribuut %1. -- -- -- No program defined for clipboard manipulation -- Lõikepuhvri käsitlemise programmi pole määratud. -- -- -- file empty -- fail on tühi -- -- -- %1: (row, col) %2,%3 -- %1: (rida, veerg) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Sobimatu seadistus -- -- -- Invalid Key -- TOTP -- Sobimatu võti -- -- -- Message encryption failed. -- Sõnumi krüptimine ebaõnnestus. -- -- -- No groups found -- Ühtegi gruppi ei leitud -- -- -- Create a new database. -- Uue andmebaasi loomine. -- -- -- File %1 already exists. -- Fail %1 on juba olemas. -- -- -- Loading the key file failed -- Võtmefaili laadimine ebaõnnestus -- -- -- No key is set. Aborting database creation. -- Võtit pole määratud. Andmebaasi ei looda. -- -- -- Failed to save the database: %1. -- Andmebaasi salvestamine ebaõnnestus: %1. -- -- -- Successfully created new database. -- Uus andmebaas edukalt loodud. -- -- -- Creating KeyFile %1 failed: %2 -- Võtmefaili %1 loomine ebaõnnestus: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Võtmefaili %1 laadimine ebaõnnestus: %2 -- -- -- Path of the entry to remove. -- Eemaldatava kirje asukoht. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Olemasoleva ainuprotsessi lukufail on sobimatu. Käivitatakse uus protsess. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Lukufaili loomine ei õnnestunud. Ainuprotsessi režiim välja lülitatud. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - mitmeplatvormne paroolihaldur -- -- -- filenames of the password databases to open (*.kdbx) -- Avatavate parooliandmebaaside failinimed (*.kdbx). -- -- -- path to a custom config file -- Kohandatud seadistusfaili asukoht. -- -- -- key file of the database -- Andmebaasi võtmefail. -- -- -- read password of the database from stdin -- Andmebaasi parooli lugemine standardsisendist (stdin). -- -- -- Another instance of KeePassXC is already running. -- Teine KeePassXC protsess juba töötab. -- -- -- Fatal error while testing the cryptographic functions. -- Parandamatu tõrge krüptograafiafunktsioonide testimisel. -- -- -- KeePassXC - Error -- Viga - KeePassXC -- -- -- Database password: -- Andmebaasi parool: -- -- -- Cannot create new group -- Uue grupi loomine ebaõnnestus. -- -- -- Deactivate password key for the database. -- Andmebaasi paroolivõtme desaktiveerimine. -- -- -- Displays debugging information. -- Silumisteabe näitamine. -- -- -- Deactivate password key for the database to merge from. -- Mestitava andmebaasi paroolivõtme desaktiveerimine. -- -- -- Version %1 -- versioon %1 -- -- -- Build Type: %1 -- Järgu tüüp: %1 -- -- -- Revision: %1 -- Redaktsioon: %1 -- -- -- Distribution: %1 -- Distributsioon: %1 -- -- -- Debugging mode is disabled. -- Silumisrežiim on välja lülitatud. -- -- -- Debugging mode is enabled. -- Silumisrežiim on sisse lülitatud. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operatsioonisüsteem: %1 --CPU-arhitektuur: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Automaatsisestus -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (allkirjastatud ja allkirjastamata) -- -- -- KeeShare (only signed sharing) -- KeeShare (ainult allkirjastatud) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (ainult allkirjastamata) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Puudub -- -- -- Enabled extensions: -- Lubatud laiendused: -- -- -- Cryptographic libraries: -- Krüptograafiateegid: -- -- -- Cannot generate a password and prompt at the same time! -- Parooli ei saa ühtaegu küsida ja automaatselt genereerida! -- -- -- Adds a new group to a database. -- Uue grupi lisamine andmebaasi. -- -- -- Path of the group to add. -- Lisatava grupi asukoht andmebaasis. -- -- -- Group %1 already exists! -- Grupp "%1" on juba olemas. -- -- -- Group %1 not found. -- Gruppi "%1" ei leitud. -- -- -- Successfully added group %1. -- Grupp "%1" edukalt lisatud. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Kontrollimine, kas mõni parool on lekkinud. FAILINIMI peab olema fail (koos asukohaga), mis sisaldab lekkinud paroolide HIBP vormingus SHA-1 räsisid, nagu need on saadaval veebilehel https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FAILINIMI -- -- -- Analyze passwords for weaknesses and problems. -- Paroolide analüüsimine nõrkuste ja probleemide leidmiseks. -- -- -- Failed to open HIBP file %1: %2 -- HIBP-faili %1 avamine ebaõnnestus: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Andmebaasi kirjete võrdlemine HIBP-failiga võtab mõnevõrra aega... -- -- -- Close the currently opened database. -- Parajasti avatud andmebaasi sulgemine. -- -- -- Display this help. -- Selle abi näitamine. -- -- -- slot -- pesa -- -- -- Invalid word count %1 -- Sobimatu sõnade arv %1 -- -- -- The word list is too small (< 1000 items) -- Sõnaloend on liiga väike (< 1000 elementi) -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- Andmebaasi sisu määratavas vormingus standardväljundisse eksportimine. -- -- -- Unable to export database to XML: %1 -- Andmebaasi eksportimine XML-iks pole võimalik: %1 -- -- -- Unsupported format %1 -- Toetamata vorming %1 -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- Sobimatu parooli pikkus %1 -- -- -- Display command help. -- Käsu abi näitamine. -- -- -- Available commands: -- Võimalikud käsud: -- -- -- Import the contents of an XML database. -- XML-andmebaasi sisu importimine. -- -- -- Path of the XML database export. -- Eksporditava XML-andmebaasi asukoht. -- -- -- Path of the new database. -- Uue andmebaasi asukoht. -- -- -- Successfully imported database. -- Andmebaas edukalt imporditud. -- -- -- Unknown command %1 -- Tundmatu käsk %1 -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- Teise andmebaasi YubiKey pesa. -- -- -- Successfully merged %1 into %2. -- %1 edukalt %2-isse mestitud. -- -- -- Database was not modified by merge operation. -- Mestimise käigus andmebaasi ei muudetud. -- -- -- Moves an entry to a new group. -- Kirje teisaldamine uude gruppi. -- -- -- Path of the entry to move. -- Teisaldatava kirje asukoht. -- -- -- Path of the destination group. -- Sihtgrupi asukoht. -- -- -- Could not find group with path %1. -- Gruppi asukohaga "%1" ei leitud. -- -- -- Entry is already in group %1. -- Kirje on juba grupis %1. -- -- -- Successfully moved entry %1 to group %2. -- Kirje "%1" edukalt gruppi "%2" teisaldatud. -- -- -- Open a database. -- Andmebaasi avamine. -- -- -- Path of the group to remove. -- Eemaldatava grupi asukoht. -- -- -- Cannot remove root group from database. -- Andmebaasi juurgruppi pole võimalik eemaldada. -- -- -- Successfully recycled group %1. -- Grupp "%1" edukalt prügikasti visatud. -- -- -- Successfully deleted group %1. -- Grupp "%1" edukalt kustutatud. -- -- -- Failed to open database file %1: not found -- Andmebaasifaili %1 avamine ebaõnnestus: faili ei leitud -- -- -- Failed to open database file %1: not a plain file -- Andmebaasifaili %1 avamine ebaõnnestus: pole lihtfail -- -- -- Failed to open database file %1: not readable -- Andmebaasifaili %1 avamine ebaõnnestus: pole loetav -- -- -- Enter password to unlock %1: -- Sisesta parool andmebaasi %1 luku avamiseks: -- -- -- Invalid YubiKey slot %1 -- Sobimatu YubiKey pesa %1 -- -- -- Enter password to encrypt database (optional): -- Sisesta parool andmebaasi krüptimiseks (pole kohustuslik): -- -- -- HIBP file, line %1: parse error -- HIBP-faili rida %1: parsimisviga -- -- -- Secret Service Integration -- Saladuste teenuse lõiming -- -- -- User name -- Kasutajanimi -- -- -- Password for '%1' has been leaked %2 time(s)! -- Kirje "%1" parool on lekkinud %2 kord!Kirje "%1" parool on lekkinud %2 korda! -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- Kaitstud atribuutide näitamine tavatekstina. -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Määratud atribuudi kopeerimine lõikepuhvrisse. Täpsustamata jätmise korral kopeeritakse parool. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Praeguse TOTP lõikepuhvrisse kopeerimine (sama nagu "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Kirje atribuudi kopeerimine lõikepuhvrisse. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- VIGA: palun kasuta kas võtit --attribute või --totp, mitte aga mõlemat. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- Atribuuti "%1" ei leitud. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Kirje atribuut "%1" lõikepuhvrisse kopeeritud! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- YubiKey pesa ja valikuliselt seerianumber, mida kasutada andmebaasi luku avamiseks (nt 1:7370001). -- -- -- slot[:serial] -- pesa[:seerianr] -- -- -- Target decryption time in MS for the database. -- Andmebaasi soovitav lahtikrüptimisaeg millisekundites. -- -- -- time -- aeg -- -- -- Set the key file for the database. -- Andmebaasile võtmefaili määramine. -- -- -- Set a password for the database. -- Andmebaasile parooli määramine. -- -- -- Invalid decryption time %1. -- Sobimatu lahtikrüptimise aeg %1 -- -- -- Target decryption time must be between %1 and %2. -- Lahtikrüptimisaeg peab olema vahemikus %1 kuni %2. -- -- -- Failed to set database password. -- Andmebaasi parooli määramine ebaõnnestus. -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Eksportimisel kasutatav vorming. Valida on "xml" ja "csv". Vaikimisi "xml". -- -- -- Unable to import XML database: %1 -- XML-andmebaasi importimine pole võimalik: %1 -- -- -- Show a database's information. -- Andmebaasi teabe näitamine. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nimi: -- -- -- Description: -- Kirjeldus: -- -- -- Cipher: -- Šiffer: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Prügikasti lubamine. -- -- -- Recycle bin is not enabled. -- Prügikasti keelamine. -- -- -- Invalid command %1. -- Sobimatu käsk %1. -- -- -- Invalid YubiKey serial %1 -- Sobimatu YubiKey seerianumber %1 -- -- -- Please touch the button on your YubiKey to continue… -- Jätkamiseks vajuta oma YubiKey nuppu... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Kas soovid luua tühja parooliga andmebaasi? (jah/EI) [y/N]: -- -- -- Repeat password: -- Parooli kordus: -- -- -- Error: Passwords do not match. -- Viga: paroolid ei kattu. -- -- -- All clipping programs failed. Tried %1 -- -- Kõigi lõikepuhvri käsitlemise programmide kasutamine ebaõnnestus. Proovitud: %1 -- -- -- AES (%1 rounds) -- AES (%1 raundi) -- -- -- AES 256-bit -- AES: 256-bitine -- -- -- Twofish 256-bit -- Twofish: 256-bitine -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bitine -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- &TOTP -- -- -- Icon -- Ikoon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Sisemine zlib'i tõrge tihendamisel: -- -- -- Error writing to underlying device: -- -- -- -- Error opening underlying device: -- -- -- -- Error reading data from underlying device: -- -- -- -- Internal zlib error when decompressing: -- Sisemine zlib'i tõrge lahtipakkimisel: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Selles zlib'i versioonis gzip-vormingut ei toetata. -- -- -- Internal zlib error: -- Sisemine zlib'i tõrge: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Kuvatakse ka muidu aruannetest välja jäetavad kirjed -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Põhjuse kohta täpsema teabe saamiseks hoia hiirekursorit selle kohal. Kirje muutmiseks tee topeltklõps. -- -- -- Bad -- Password quality -- Kohutav -- -- -- Bad — password must be changed -- Kohutav – palun muuda parooli -- -- -- Poor -- Password quality -- Kehv -- -- -- Poor — password should be changed -- Kehv – parooli tuleks muuta -- -- -- Weak -- Password quality -- Nõrk -- -- -- Weak — consider changing the password -- Nõrk – kaalu parooli muutmist -- -- -- (Excluded) -- (välja jäetud) -- -- -- This entry is being excluded from reports -- See kirje on aruannetest välja jäetud -- -- -- Please wait, health data is being calculated... -- Palun oota, tervisehinnangute arvutamine käib… -- -- -- Congratulations, everything is healthy! -- Kõik on kõige paremas korras. Palju õnne! -- -- -- Title -- Pealkiri -- -- -- Path -- Asukoht -- -- -- Score -- Hinne -- -- -- Reason -- Põhjus -- -- -- Edit Entry... -- Muuda kirjet… -- -- -- Exclude from reports -- Jäetakse aruannetest välja -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- HOIATUS: selle aruande käigus saadetakse teavet Have I Been Pwned'i võrguteenusele (https://haveibeenpwned.com). Kui jätkad, luuakse sinu andmebaasi paroolidest krüptograafilised räsid, mille viis esimest märki seejärel turvaliselt sellele teenusele edastatakse. Sinu andmebaasi turvalisust see ei vähenda ja paroole räsi põhjal taastada ei saa. Küll aga on teenusele näha saadetud paroolide arv ja sinu IP-aadress. -- -- -- Perform Online Analysis -- Soorita interneti-analüüs -- -- -- Also show entries that have been excluded from reports -- Kuvatakse ka muidu aruannetest välja jäetavad kirjed -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- KeePassXC on kompiilitud ilma võrgufunktsioonideta, aga paroolide võrdlemiseks Have I Been Pwned'i andmebaasidega on vaja võrgujuurdepääsu. -- -- -- Congratulations, no exposed passwords! -- Ühtegi lekkinud parooli ei leitud. Palju õnne! -- -- -- Title -- Pealkiri -- -- -- Path -- Asukoht -- -- -- Password exposed… -- Parool lekkinud… -- -- -- (Excluded) -- (välja jäetud) -- -- -- This entry is being excluded from reports -- See kirje on aruannetest välja jäetud -- -- -- once -- üks kord -- -- -- up to 10 times -- kuni 10 korda -- -- -- up to 100 times -- kuni 100 korda -- -- -- up to 1000 times -- kuni 1000 korda -- -- -- up to 10,000 times -- kuni 10 000 korda -- -- -- up to 100,000 times -- kuni 100 000 korda -- -- -- up to a million times -- kuni miljon korda -- -- -- millions of times -- miljoneid kordi -- -- -- Edit Entry... -- Muuda kirjet… -- -- -- Exclude from reports -- Jäetakse aruannetest välja -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Veaikooniga ridade kohta täpsema teabe saamiseks hoia hiirekursorit vastaval real. -- -- -- Name -- Nimi -- -- -- Value -- Väärtus -- -- -- Please wait, database statistics are being calculated... -- Palun oota, andmebaasi statistikat arvutatakse... -- -- -- Database name -- Andmebaasi nimi -- -- -- Description -- Kirjeldus -- -- -- Location -- Asukoht -- -- -- Last saved -- Viimati salvestanud -- -- -- Unsaved changes -- Salvestamata muudatusi -- -- -- yes -- on -- -- -- no -- pole -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Andmebaasi on muudetud, kuid muudatused pole veel kettale salvestatud. -- -- -- Number of groups -- Gruppide arv -- -- -- Number of entries -- Kirjete arv -- -- -- Number of expired entries -- Aegunud kirjete arv -- -- -- The database contains entries that have expired. -- Andmebaas sisaldab aegunud kirjeid. -- -- -- Unique passwords -- Unikaalsete paroolide arv -- -- -- Non-unique passwords -- Korduvate paroolide arv -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Rohkem kui 10% paroolidest on kasutatud korduvalt. Kui vähegi võimalik, kasuta ainukordseid paroole. -- -- -- Maximum password reuse -- Sagedasima parooli kasutuskordade arv -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Mõnda parooli on kasutatud enam kui kolm korda. Kui vähegi võimalik, kasuta ainukordseid paroole. -- -- -- Number of short passwords -- Lühikeste paroolide arv -- -- -- Recommended minimum password length is at least 8 characters. -- Paroolide soovituslik pikkus on vähemalt 8 märki. -- -- -- Number of weak passwords -- Nõrkade paroolide arv -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Soovitatav on kasutada pikki juhuslikest märkidest koosnevaid paroole, mille tugevushinnang on "hea" või "suurepärane". -- -- -- Entries excluded from reports -- Aruannetest väljajäetavate kirjete arv -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Kirjete aruannetest väljajätmine (nt kuna neil on teadaolevalt kehv parool) pole tingimata probleem, kuid neil tasuks silm peal hoida. -- -- -- Average password length -- Paroolide keskmine pikkus -- -- -- %1 characters -- %1 märki -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Paroolide keskmine pikkus on alla kümne märgi. Pikemad paroolid on turvalisemad. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agendiga ühendumine ebaõnnestus. -- -- -- Agent protocol error. -- Agendi protokolliviga. -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- Võtmefail on juba lisatud. -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Otsinguabi -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Otsingusõnade süntaks on järgmine: [modifikaator][väli:]["]otsitav["] -- -- -- Every search term must match (ie, logical AND) -- Tagastatakse kirjed, mis vastavad kõigile otsingusõnadele (s.t tegu on loogilise JA-tehtega) -- -- -- Modifiers -- Modifikaatorid -- -- -- exclude term from results -- välja arvatud otsingusõna -- -- -- match term exactly -- otsingusõna täpne sobivus -- -- -- use regex in term -- otsingusõna on regulaaravaldis -- -- -- Fields -- Väljad -- -- -- Term Wildcards -- Metamärgid -- -- -- match anything -- suvaline märgijada -- -- -- match one -- suvaline üks märk -- -- -- logical OR -- loogiline VÕI -- -- -- Examples -- Näited -- -- -- -- SearchWidget -- -- Search -- Otsimine -- -- -- Limit search to selected group -- Otsitakse ainult valitud grupist -- -- -- Search Help -- Otsinguabi -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Otsing (%1) -- -- -- Case sensitive -- Tõstutundlik -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Seaded -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeePassXC Freedesktop.org-i saladuste teenuse lõimingu lubamine -- -- -- General -- Üldine -- -- -- Show notification when credentials are requested -- Tunnuste taotlemisel kuvatakse märguanne -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Kui andmebaasi prügikast on sisse lülitatud, teisaldatakse kirjed sinna, muul juhul kustutatakse kohe lõplikult.</p><p>Kui kustutatavale kirjele viitab mõni teine kirje, küsitakse siiski kinnitust ka siis, kui see märkeruut on märgitud.</p></body></html> -- -- -- Exposed database groups: -- Nähtavaks tehtud grupid andmebaasides: -- -- -- Authorization -- Autentimine -- -- -- These applications are currently connected: -- Need rakendused on praegu ühendatud: -- -- -- Don't confirm when entries are deleted by clients -- Klientidel lubatakse kirjeid kinnituseta kustutada -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Viga:</b> DBus'iga ühendumine ebaõnnestus. Palun kontrolli oma DBus'i seadistust. -- -- -- <b>Warning:</b> -- <b>Hoiatus:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Plugina aktiveerimiseks ja selle jaotise muutmise võimaldamiseks salvesta esmalt tehtud muudatused. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktiveerimine -- -- -- Allow export -- Eksportimine lubatud -- -- -- Allow import -- Importimine lubatud -- -- -- Own certificate -- Oma sertifikaat -- -- -- Fingerprint: -- Sõrmejälg: -- -- -- Certificate: -- Sertifikaat: -- -- -- Signer -- Allkirjastaja -- -- -- Key: -- Võti: -- -- -- Generate -- Genereeri -- -- -- Import -- Impordi -- -- -- Export -- Ekspordi -- -- -- Imported certificates -- Imporditud sertifikaadid -- -- -- Trust -- Usalda -- -- -- Ask -- Küsi -- -- -- Untrust -- Ära usalda -- -- -- Remove -- Eemalda -- -- -- Path -- Asukoht -- -- -- Status -- Olek -- -- -- Fingerprint -- Sõrmejälg -- -- -- Certificate -- Sertifikaat -- -- -- Trusted -- Usaldatav -- -- -- Untrusted -- Mitteusaldatav -- -- -- Unknown -- Teadmata -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare'i võtmefail -- -- -- All files -- Kõik failid -- -- -- Select path -- Asukoha valimine -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- Allkirjastaja: -- -- -- Allow KeeShare imports -- Märkimisel lubatakse KeeShare'i importimine -- -- -- Allow KeeShare exports -- Märkimisel lubatakse KeeShare'i eksportimine -- -- -- Only show warnings and errors -- Kuvatakse ainult hoiatused ja veateated -- -- -- Key -- Võti -- -- -- Signer name field -- Allkirjastaja nime väli -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- Mitte praegu -- -- -- Never -- mitte kunagi -- -- -- Always -- Alati -- -- -- Just this time -- Ainult seekord -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- Fail ei ole loetav -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- Faili ei ole olemas -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- -- -- -- Import from %1 successful (%2) -- -- -- -- Imported from %1 -- Imporditud asukohast "%1" -- -- -- Export to %1 failed (%2) -- -- -- -- Export to %1 successful (%2) -- -- -- -- Export to %1 -- -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Ajastatud parool -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopeeri -- -- -- Expires in <b>%n</b> second(s) -- Aegub <b>%n</b> sekundi pärastAegub <b>%n</b> sekundi pärast -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopeeri -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NB: need kohandatud TOTP-seaded ei pruugi muude autentikaatoritega toimida. -- -- -- There was an error creating the QR code. -- QR-koodi loomisel ilmnes tõrge. -- -- -- Closing in %1 seconds. -- Aken sulgub %1 sekundi pärast. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP seadistamine -- -- -- Default RFC 6238 token settings -- Vaikimisi RFC 6238 volitustõendi seaded -- -- -- Steam token settings -- Steami volitustõendi seaded -- -- -- Use custom settings -- Kohandatud seaded -- -- -- Custom Settings -- Kohandatud seaded -- -- -- Time step: -- Ajaintervall: -- -- -- sec -- Seconds -- s -- -- -- Code size: -- Koodi pikkus: -- -- -- Secret Key: -- Salajane võti: -- -- -- Secret key must be in Base32 format -- Salajane võti peab olema Base32-vormingus -- -- -- Secret key field -- Salajase võtme väli -- -- -- Algorithm: -- Algoritm: -- -- -- Time step field -- Ajatempli väli -- -- -- digits -- numbrit -- -- -- Invalid TOTP Secret -- Sobimatu TOTP salavõti -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Sisestasid sobimatu salajase võtme. Võti peab olema Base32-vormingus. --Näide: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- TOTP seadete eemaldamise kinnitus -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Kas oled kindel, et tahad selle kirje TOTP-seaded kustutada? -- -- -- -- URLEdit -- -- Invalid URL -- Sobimatu URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Uuenduste kontrollimine -- -- -- Checking for updates... -- Uuenduste olemasolu kontrollimine... -- -- -- Close -- Sulge -- -- -- Update Error! -- Viga uuendamisel! -- -- -- An error occurred in retrieving update information. -- Uuenduste teabe hankimisel ilmnes viga. -- -- -- Please try again later. -- Proovi hiljem uuesti. -- -- -- Software Update -- Tarkvarauuendus -- -- -- A new version of KeePassXC is available! -- KeePassXC uus versioon on saadaval! -- -- -- KeePassXC %1 is now available — you have %2. -- Saadaval on KeePassXC %1 – sinul on %2. -- -- -- Download it at keepassxc.org -- Allalaadimiseks ava keepassxc.org -- -- -- You're up-to-date! -- Sul juba on uusim versioon! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 on praegu uusim saadaolev versioon. -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Hakka oma paroole turvaliselt KeePassXC andmebaasis hoidma -- -- -- Create new database -- Loo uus andmebaas -- -- -- Open existing database -- Ava olemasolev andmebaas -- -- -- Import from KeePass 1 -- Impordi KeePass 1-st -- -- -- Import from CSV -- Impordi CSV-failist -- -- -- Recent databases -- Viimatised andmebaasid -- -- -- Welcome to KeePassXC %1 -- Tere tulemast KeePassXC %1 kasutama! -- -- -- Import from 1Password -- Impordi 1Passwordist -- -- -- Open a recent database -- Ava hiljutine andmebaas -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] seadistatud - pesa %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] pretensioon-vastus - pesa %3 - %4 -- -- -- Press -- ootab vajutust -- -- -- Passive -- passiivne -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- YubiKey liides pole initsialiseeritud. -- -- -- Hardware key is currently in use. -- Riistvaraline võti on hetkel kasutuses. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Riistvaralist võtit seerianumbriga %1 ei leitud. Jätkamiseks tuleb see arvutiga ühendada. -- -- -- Hardware key timed out waiting for user interaction. -- Riistvaraline võti ei jõudnud kasutaja vastust ära oodata. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Riistvaralise võtme kasutamisel ilmnes USB-tõrge: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Pretensiooni-vastuse lõpetamine ebaõnnestus. Konkreetne viga: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Värskenda -- -- -- YubiKey Challenge-Response -- YubiKey pretensioon-vastus -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Kui sul on <a href="https://www.yubico.com/">YubiKey</a>, võid lisaturvalisuse nimel seda kasutada.</p><p>Ühe YubiKey pesa peab programmeerima <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 pretensiooni ja vastusena</a>.</p> -- -- -- Refresh hardware tokens -- Värskenda riistvaraliste võtmete loendit -- -- -- Hardware key slot selection -- Riistvaralise võtme pesa valimine -- -- -- Could not find any hardware keys! -- Riistvaralisi võtmeid ei leitud. -- -- -- Selected hardware key slot does not support challenge-response! -- Valitud riistvaralise võtme pesa ei toeta pretensiooni-vastust. -- -- -- Detecting hardware keys… -- riistvaraliste võtmete tuvastamine… -- -- -- No hardware keys detected -- riistvaralisi võtmeid ei tuvastatud -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_fi.ts keepassxc-2.6.4-patched/share/translations/keepassx_fi.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_fi.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_fi.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7890 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Tietoja ohjelmasta KeePassXC -- -- -- About -- Tietoja -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Ilmoita ongelmista: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC:tä jaellaan GPL-lisenssin (GNU General Public License) version 2 tai (valintasi mukaan) version 3 ehtojen mukaisesti. -- -- -- Contributors -- Osallistujat -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Katso osallistujat GitHubista</a> -- -- -- Debug Info -- Vianjäljitystiedot -- -- -- Include the following information whenever you report a bug: -- Sisällytä seuraavat tiedot aina kun ilmoitat ongelmasta: -- -- -- Copy to clipboard -- Kopioi leikepöydälle -- -- -- Project Maintainers: -- Projektin ylläpitäjät: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC-tiimi antaa erityiskiitokset KeePassX-ohjelman alkuperäiselle luojalle debfx:lle -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Käytä Windowsissa OpenSSH:ta Pageant:in sijasta -- -- -- Enable SSH Agent integration -- Ota SSH Agentti käyttöön -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK-arvo -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK-ylikirjoitus -- -- -- (empty) -- (tyhjä) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- SSH Agentin socketia ei ole. Varmista, että SSH_AUTH_SOCK-ympäristömuuttuja on olemassa, tai aseta sille ylikirjoitus -- -- -- SSH Agent connection is working! -- SSH Agent -yhteys toimii! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Sovelluksen asetukset -- -- -- General -- Yleistä -- -- -- Security -- Turvallisuus -- -- -- Access error for config file %1 -- Pääsyvirhe asetustiedostoon %1 -- -- -- Icon only -- Vain kuvake -- -- -- Text only -- Vain teksti -- -- -- Text beside icon -- Teksti kuvakkeen vieressä -- -- -- Text under icon -- Teksti kuvakkeen alla -- -- -- Follow style -- Seuraa tyyliä -- -- -- Reset Settings? -- Palauta asetukset? -- -- -- Are you sure you want to reset all general and security settings to default? -- Haluatko varmasti palauttaa kaikki yleiset ja turvallisuusasetukset oletuksiin? -- -- -- Monochrome (light) -- Mustavalkoinen (vaalea) -- -- -- Monochrome (dark) -- Mustavalkoinen (tumma) -- -- -- Colorful -- Värikäs -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Ohjelma täytyy käynnistää uudelleen, jotta uusi kieli voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Perusasetukset -- -- -- Startup -- Käynnistys -- -- -- Start only a single instance of KeePassXC -- Käynnistä vain yksi KeePassXC-instanssi -- -- -- Minimize window at application startup -- Pienennä ikkuna ohjelman käynnistyessä -- -- -- File Management -- Tiedostohallinta -- -- -- Backup database file before saving -- Ota tietokannasta varmuuskopio ennen tallentamista -- -- -- Automatically save after every change -- Tallenna automaattisesti jokaisen muutoksen jälkeen -- -- -- Automatically reload the database when modified externally -- Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla -- -- -- Entry Management -- Tietueiden hallinta -- -- -- Use group icon on entry creation -- Käytä ryhmän kuvaketta tietuetta luodessa -- -- -- Minimize instead of app exit -- Minimoi ohjelma sulkemisen sijasta -- -- -- Show a system tray icon -- Näytä ilmoitusalueen kuvake -- -- -- Hide window to system tray when minimized -- Piiloita pienennetty ikkuna ilmoitusalueelle -- -- -- Auto-Type -- Automaattisyöttö -- -- -- Use entry title to match windows for global Auto-Type -- Tietue on sopiva, jos sen nimi sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä -- -- -- Use entry URL to match windows for global Auto-Type -- Tietue on sopiva, jos sen osoite sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä -- -- -- Always ask before performing Auto-Type -- Kysy aina ennen automaattisyötön käyttämistä -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Siirrettävä työkalupalkki -- -- -- Remember previously used databases -- Muista aiemmin käytetyt tietokannat -- -- -- Load previously open databases on startup -- Lataa aiemmin avoinna olleet tietokannat käynnistyksen yhteydessä -- -- -- Remember database key files and security dongles -- Muista tietokannan avaintiedostot ja tietoturva-avainlaitteet -- -- -- Check for updates at application startup once per week -- Tarkista päivitykset kerran viikossa sovelluksen käynnistyessä -- -- -- Include beta releases when checking for updates -- Sisällytä betajulkaisut päivityksiä tarkistaessa -- -- -- Language: -- Kieli: -- -- -- (restart program to activate) -- (aktivoi käynnistämällä ohjelma uudestaan) -- -- -- Minimize window after unlocking database -- Pienennä ikkuna tietokannan lukituksen avauksen jälkeen -- -- -- Minimize when opening a URL -- Pienennä ikkuna URL:ää avatessa -- -- -- Hide window when copying to clipboard -- Piilota ikkuna leikepöydälle kopioitaessa -- -- -- Minimize -- Pienennä -- -- -- Drop to background -- Siirrä taustalle -- -- -- Favicon download timeout: -- Faviconin latauksen aikakatkaisu: -- -- -- Website icon download timeout in seconds -- Nettisivun ikonin latauksen aikakatkaisu sekunneissa -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Työkalupalkin painiketyyli -- -- -- Language selection -- Kielivalinta -- -- -- Global auto-type shortcut -- Yleisen automaattisyötön pikanäppäin -- -- -- Auto-type character typing delay milliseconds -- Automaattisyötön kirjoituksen viive millisekunneissa -- -- -- Auto-type start delay milliseconds -- Automaattisyötön aloitusviive millisekunneissa -- -- -- Automatically launch KeePassXC at system startup -- Käynnistä KeePassXC automaattisesti järjestelmän käynnistyksessä -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Tallenna tietokannat turvallisesti (ota pois käytöstä, jos tämä aiheuttaa ongelmia Dropboxin ym. kanssa) -- -- -- User Interface -- Käyttöliittymä -- -- -- Toolbar button style: -- Työkalupalkin nappien tyyli: -- -- -- Use monospaced font for notes -- Käytä tasalevyistä fonttia muistiinpanoille -- -- -- Tray icon type: -- Ilmoitusalueen ikonin tyyppi: -- -- -- Reset settings to default… -- Palauta oletusasetukset... -- -- -- Auto-Type typing delay: -- Automaattisyötön kirjoituksen viive: -- -- -- Global Auto-Type shortcut: -- Yleisen automaattisyötön pikanäppäin: -- -- -- Auto-Type start delay: -- Automaattisyötön aloitusviive: -- -- -- Automatically save when locking database -- Tallenna automaattisesti, kun tietokanta lukitaan -- -- -- Automatically save non-data changes when locking database -- Tallenna automaattisesti asetukset jotka eivät liity varsinaisiin tietoihin, kun tietokanta lukitaan -- -- -- Tray icon type -- Ilmoitusalueen ikonin tyyppi -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Aikakatkaisut -- -- -- Clear clipboard after -- Tyhjennä leikepöytä kun on kulunut -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Lukitse tietokannat jos on oltu joutilaana -- -- -- min -- minuuttia -- -- -- Forget TouchID after inactivity of -- Unohda TouchID jos on oltu joutilaana -- -- -- Convenience -- Mukavuus -- -- -- Lock databases when session is locked or lid is closed -- Lukitse tietokannat kun istunto lukitaan tai kansi suljetaan -- -- -- Forget TouchID when session is locked or lid is closed -- Unohda TouchID kun istunto lukitaan tai kansi suljetaan -- -- -- Lock databases after minimizing the window -- Lukitse tietokanta ikkunan pienennyksen jälkeen -- -- -- Re-lock previously locked database after performing Auto-Type -- Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen -- -- -- Hide passwords in the entry preview panel -- Piilota salasanat tietueiden esikatselupaneelissa -- -- -- Hide entry notes by default -- Piilota tietueiden muistiinpanot -- -- -- Privacy -- Yksityisyys -- -- -- Use DuckDuckGo service to download website icons -- Käytä DuckDuckGo:ta sivustojen ikonien lataukseen -- -- -- Clipboard clear seconds -- Leikepöydän tyhjentäminen sekunneissa -- -- -- Touch ID inactivity reset -- Touch ID:n joutilaisuusasetuksen palautus -- -- -- Database lock timeout seconds -- Tietokannan lukituksen aikakatkaisu sekunneissa -- -- -- min -- Minutes -- minuuttia -- -- -- Clear search query after -- Tyhjennä hakukentän sisältö kun on kulunut -- -- -- Require password repeat when it is visible -- Vaadi salasanan toistamista, mikäli se on näkyvillä -- -- -- Hide passwords when editing them -- Piilota salasanat muokkauksen aikana -- -- -- Use placeholder for empty password fields -- Käytä paikkamerkkiä tyhjissä salasanakentissä -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Ikkunan nimeä vastaavaa tietuetta ei löytynyt: -- -- -- Auto-Type - KeePassXC -- Automaattisyöttö - KeePassXC -- -- -- Auto-Type -- Automaattisyöttö -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Automaattisyötön syntaksi on virheellinen! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Tämän automaattisyötön komento sisältää pitkän viiveen. Oletko varma, että haluat jatkaa? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Tämän automaattisyötön komento sisältää hitaita näppäinpainalluksia. Oletko varma, että haluat jatkaa? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Tämän automaattisyötön komento sisältää parametreja joita toistetaan usein. Oletko varma, että haluat jatkaa? -- -- -- Permission Required -- Lupa vaaditaan -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC:n täytyy saada lupa Käyttöavun kautta automaattisyötön suorittamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Ikkuna -- -- -- Sequence -- Sekvenssi -- -- -- Default sequence -- Oletussekvenssi -- -- -- -- AutoTypeMatchModel -- -- Group -- Ryhmä -- -- -- Title -- Otsikko -- -- -- Username -- Käyttäjätunnus -- -- -- Sequence -- Sekvenssi -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopioi käyttäjä&tunnus -- -- -- Copy &password -- Kopioi &salasana -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Lupa vaaditaan -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC tarvitsee luvan Käyttöavun kautta Näyttötallennukseen, jotta yleinen automaattisyöttö toimisi oikein. Näyttötallennus on pakollinen ikkunan otsikkotiedon saamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automaattisyöttö - KeePassXC -- -- -- Select entry to Auto-Type: -- Valitse tietue automaattisyöttöä varten: -- -- -- Search... -- Etsi... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Selaimen pääsypyyntö -- -- -- %1 is requesting access to the following entries: -- %1 pyytää pääsylupaa seuraaviin tietueisiin: -- -- -- Remember access to checked entries -- Muista pääsylupa merkatuille tietueille -- -- -- Remember -- Muista -- -- -- Allow access to entries -- Salli pääsy tietueisiin -- -- -- Allow Selected -- Salli valitut -- -- -- Deny All -- Estä kaikilta -- -- -- Disable for this site -- Ota pois käytöstä tällä sivustolla -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser - Tallenna tietue -- -- -- Ok -- Ok -- -- -- Cancel -- Peruuta -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Useita tietokantoja on auki --Valitse oikea tietokanta tietueen tallentamiseksi -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Uusi avaimenliittämispyyntö -- -- -- Save and allow access -- Tallenna ja salli pääsy -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Korvataanko olemassa oleva avain? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Jaettu salausavain samalla nimellä "%1" on jo olemassa. --Haluatko korvata sen? -- -- -- KeePassXC: Update Entry -- KeePassXC: Päivitä tietue -- -- -- Do you want to update the information in %1 - %2? -- Haluatko päivittää tiedot osoitteesta %1 - %2? -- -- -- Abort -- Keskeytä -- -- -- Converting attributes to custom data… -- Muutetaan attribuutteja mukautetuiksi tiedoiksi... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Muutetut KeePassHTTP-attribuutit -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Mukautettiin attribuutit onnistuneesti %1 tietueesta. --Siirrettiin %2 avainta mukautettuihin tietoihin. -- -- -- Successfully moved %n keys to custom data. -- Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Vanhoja selainintegraatioasetuksia havaittu -- -- -- KeePassXC: Create a new group -- KeePassXC: Luo uusi ryhmä -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Vastaanotettiin pyyntö luoda uusi ryhmä "%1". --Haluatko varmasti luoda tämän ryhmän? -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin. --Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana. --Haluat siirtää asetukset nyt? -- -- -- Don't show this warning again -- Älä näytä tätä varoitusta uudelleen -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Olet saanut avainliittämispyynnön seuraavalle tietokannalle: --%1 -- --Anna yhteydelle yksilöllinen nimi tai tunniste, esimerkiksi: --chrome-läppäri. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialogi -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Tämä vaaditaan, jotta tietokantoja voidaan käyttää KeePassXC-Browser -selainlaajennuksella -- -- -- Enable browser integration -- Käytä selainintegraatiota -- -- -- General -- Yleistä -- -- -- Browsers installed as snaps are currently not supported. -- Snapin kautta asennetut selaimet eivät ole tällä hetkellä tuettuja. -- -- -- Enable integration for these browsers: -- Käytä integraatiota seuraaville selaimille: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor-selain -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Näytä ilmoitus, kun tietueita pyydetään tietokannasta -- -- -- Request to unlock the database if it is locked -- Pyydä tietokannan avaamista, jos se on lukittu -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Vain tietueet samalla skeemalla (http://, https://, ...) palautetaan. -- -- -- Match URL scheme (e.g., https://...) -- URL-skeeman on sovittava yhteen (esim. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta -- -- -- Return only best-matching credentials -- Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta -- -- -- Returns expired credentials. String [expired] is added to the title. -- Salli vanhentuneiden tietueiden noutaminen. Teksti [vanhentunut] lisätään tietueen otsikkoon. -- -- -- Allow returning expired credentials -- Salli vanhentuneiden tietueiden noutaminen -- -- -- All databases connected to the extension will return matching credentials. -- Sallitaan tietueiden nouto kaikista tietokannoista jotka ovat yhdistetty selainlaajennukseen. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Etsi osumia kaikista avoimista tietokannoista -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Järjestä vastaavat tietueet nimen mukaan -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Järjestä vastaavat tietueet käyttäjänimen mukaan -- -- -- Advanced -- Lisäasetukset -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Älä koskaan varmista pääsyä tietueisiin -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Älä koskaan varmista tietueiden päivitystä -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Älä kysy lupaa HTTP Basic -autentikaatioon -- -- -- Automatically creating or updating string fields is not supported. -- Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu -- -- -- Return advanced string fields which start with "KPH: " -- Palauta lisämerkkijonot jotka alkavat "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Päivittää KeePassXC:n tai välitysohjelman polun automaattisesti native messaging -rajapinnan skripteihin käynnistyksen yhteydessä -- -- -- Update native messaging manifest files at startup -- Päivitä native messaging -rajapinnan skriptit automaattisesti ohjelman käynnistyessä -- -- -- Use a custom proxy location if you installed a proxy manually. -- Käytä mukautettua välitysohjelmaa mikäli olet asentanut sellaisen manuaalisesti -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Valitse mukautettu välitysohjelma: -- -- -- Custom proxy location field -- Mukautetun välitusohjelman sijainti -- -- -- Browser for custom proxy file -- Selaa mukautettua välitysohjelman tiedostoa -- -- -- Browse... -- Button for opening file dialog -- Selaa... -- -- -- Use a custom browser configuration location: -- Mukautetun välitusohjelman sijainti: -- -- -- Browser type: -- Selaimen tyyppi: -- -- -- Toolbar button style -- Työkalupalkin painiketyyli -- -- -- Config Location: -- Asetustiedoston sijainti: -- -- -- Custom browser location field -- Mukautetun selaimen sijaintikenttä -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Selaa mukautetun selaimen polkua -- -- -- Custom extension ID: -- Mukautetun selainlaajennuksen ID: -- -- -- Custom extension ID -- Mukautetun selainlaajennuksen ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.<br />Voit ladata komentosarjan osoitteesta %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Lataa se seuraaville selaimille: %1, %2 ja %3. %4 -- -- -- Please see special instructions for browser extension use below -- Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Virhe:</b> Mukautetun välitysohjelman sijaintia ei löydy!<br/>Selainintegraatio EI TOIMI ilman välitysohjelmaa. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! -- -- -- Executable Files -- Suoritettavat tiedostot -- -- -- All Files -- Kaikki tiedostot -- -- -- Select custom proxy location -- Valitse mukautettu välitysohjelma -- -- -- Select native messaging host folder location -- Valitse native messaging -isännän hakemiston sijainti -- -- -- -- CloneDialog -- -- Clone Options -- Kloonausasetukset -- -- -- Append ' - Clone' to title -- Lisää ' - Klooni' otsikkoon -- -- -- Replace username and password with references -- Korvaa käyttäjänimi ja salasana viittauksilla -- -- -- Copy history -- Kopiointihistoria -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Tuo CSV-kentät -- -- -- filename -- tiedostonimi -- -- -- size, rows, columns -- koko, rivit, sarakkeet -- -- -- Encoding -- Koodaus -- -- -- Codec -- Koodekki -- -- -- Text is qualified by -- Teksti on määritelty merkeillä -- -- -- Fields are separated by -- Kentät erottaa -- -- -- Comments start with -- Kommentit alkavat -- -- -- Consider '\' an escape character -- Käsittele merkkiä '\' escape-merkkinä -- -- -- Preview -- Esikatselu -- -- -- Imported from CSV file -- Tuotu CSV-tiedostosta -- -- -- Original data: -- Alkuperäiset tiedot: -- -- -- Error -- Virhe -- -- -- Error(s) detected in CSV file! -- CSV-tiedostossa havaittiin virhe/virheitä! -- -- -- [%n more message(s) skipped] -- [%n more message(s) skipped][%n kappaletta viestejä ohitettiin] -- -- -- CSV import: writer has errors: --%1 -- CSV-tuonti: kirjoituksessa on virheitä: --%1 -- -- -- Text qualification -- Tekstin määrittely -- -- -- Field separation -- Kenttäerotus -- -- -- Number of header lines to discard -- Hylättävissä olevien otsakerivien lukumäärä -- -- -- CSV import preview -- CSV-tuonnin esikatselu -- -- -- Column Association -- Sarakkeen liitos -- -- -- Last Modified -- Viimeksi muokattu -- -- -- Password -- Salasana -- -- -- Created -- Luotu -- -- -- Notes -- Muistiinpanot -- -- -- Title -- Otsikko -- -- -- Group -- Ryhmä -- -- -- URL -- URL -- -- -- Username -- Käyttäjätunnus -- -- -- Header lines skipped -- Otsakerivejä ohitettu -- -- -- First line has field names -- Ensimmäinen rivi sisältää kentän nimet -- -- -- Not Present -- Ei löydy -- -- -- Column %1 -- Sarake %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Kuvake -- -- -- -- CsvParserModel -- -- %n column(s) -- %n sarake.%n saraketta -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n tavu%n tavua -- -- -- %n row(s) -- %n rivi%n riviä -- -- -- -- Database -- -- File %1 does not exist. -- Tiedostoa %1 ei ole. -- -- -- Unable to open file %1. -- Tiedostoa %1 ei voitu avata. -- -- -- Error while reading the database: %1 -- Virhe tietokantaa luettaessa: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Tiedostoa ei voitu tallentaa, sillä se on avattu vain lukuoikeuksin. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Avainmuunnosta ei voitu suorittaa. Ole hyvä ja ilmoita tästä virheestä sovelluksen kehittäjille. -- -- -- %1 --Backup database located at %2 -- %1 --Tietokannan varmuuskopio paikannettu: %2 -- -- -- Could not save, database does not point to a valid file. -- Tallennus ei onnistu. Tietokanta ei osoita validiin tiedostoon. -- -- -- Could not save, database file is read-only. -- Ei voitu tallentaa, tietokantatiedosto on vain luettavassa muodossa. -- -- -- Database file has unmerged changes. -- Tietokannalla on muutoksia joita ei ole yhdistetty. -- -- -- Recycle Bin -- Roskakori -- -- -- Passwords -- Root group name -- Salasanat -- -- -- Database save is already in progress. -- Tietokannan tallennus on jo käynnissä. -- -- -- Could not save, database has not been initialized! -- Tallennus ei onnistu, tietokantaa ei ole alustettu! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Avaa tietokanta - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Avaintiedosto: -- -- -- Refresh -- Päivitä -- -- -- Don't show this warning again -- Älä näytä tätä varoitusta uudelleen -- -- -- All files -- Kaikki tiedostot -- -- -- Key files -- Avaintiedostot -- -- -- Select key file -- Valitse avaintiedosto -- -- -- Failed to open key file: %1 -- Avaintiedoston avaus epäonnistui: %1 -- -- -- Unlock KeePassXC Database -- Avaa KeePassXC-tietokannan lukitus -- -- -- Enter Password: -- Syötä salasana: -- -- -- Password field -- Salasanakenttä -- -- -- Hardware key slot selection -- Laiteavaimen paikan valinta -- -- -- Browse for key file -- Selaa avaintiedostoa -- -- -- Browse... -- Selaa... -- -- -- Refresh hardware tokens -- Uudista laitetunnisteet -- -- -- Hardware Key: -- Laiteavain: -- -- -- Hardware key help -- Laiteavaimen apu -- -- -- TouchID for Quick Unlock -- TouchID Pika-Avaukseen -- -- -- Unlock failed and no password given -- Avaus epäonnistui, eikä salasanaa ole annettu -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Tietokannan avaus epäonnistui, eikä salasanaa ole syötetty. --Haluat koittaa uudestaan tyhjällä salasanalla? -- --Jos et halua nähdä tätä virhettä uudestaan, mene "Tietokannan asetukset / Turvallisuus" ja muuta salasanaasi. -- -- -- Retry with empty password -- Yritä uudelleen tyhjällä salasanalla -- -- -- Enter Additional Credentials (if any): -- Syötä lisätietueita (mikäli niitä on): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Voit käyttää laiteavainta, kuten <strong>Yubikey:tä</strong> tai <strong>Onlykey:tä</strong> HMAC-SHA1 -asetuksella olevan paikan kanssa.</p> --<p>Lisätietoja tästä...</p> -- -- -- Key file help -- Avaintiedoston ohje -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Tietokantaa ei voida käyttää avaintiedostona -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Et voi käyttää tietokantaasi avaintiedostona. --Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.</p><p>Tämä salainen tiedosto <strong>ei</strong> ole *.kdbx -tietokantatiedosto!<br>Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</p><p>Lisätietoja tästä...</p> -- -- -- Key file to unlock the database -- Avaintiedosto tietokannan avaukseen -- -- -- Please touch the button on your YubiKey! -- Kosketa YubiKeyssa olevaa painiketta! -- -- -- Detecting hardware keys… -- Etsitään laiteavaimia... -- -- -- No hardware keys detected -- Laiteavaimia ei havaittu -- -- -- Select hardware key… -- Valitse laiteavain... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Salasanat -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Lisäasetukset -- -- -- General -- Yleistä -- -- -- Security -- Turvallisuus -- -- -- Encryption Settings -- Salausasetukset -- -- -- Browser Integration -- Selainintegraatio -- -- -- Database Credentials -- Tietokannan tietueet -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser -asetukset -- -- -- Stored keys -- Tallennetut avaimet -- -- -- Remove -- Poista -- -- -- Delete the selected key? -- Poista valittu avain? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Haluatko poistaa valitun avaimen? --Tämä voi estää yhteyden selainlaajennukseen. -- -- -- Key -- Avain -- -- -- Value -- Arvo -- -- -- Enable Browser Integration to access these settings. -- Käytä selainintegraatiota käyttääksesi näitä asetuksia. -- -- -- Disconnect all browsers -- Unohda kaikki selaimet -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Haluatko todella unohtaa kaikki selaimet? --Tämä voi estää yhteyden selainlaajennukseen. -- -- -- KeePassXC: No keys found -- KeePassXC: Avaimia ei löytynyt -- -- -- No shared encryption keys found in KeePassXC settings. -- Jaettuja salausavaimia ei löytynyt KeePassXC:n asetuksista. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Poistettiin avaimet tietokannasta -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n salausavain poistettiin onnistuneesti KeePassXC:n asetuksista.%n salausavainta poistettiin onnistuneesti KeePassXC:n asetuksista. -- -- -- Forget all site-specific settings on entries -- Unohda kaikki sivustokohtaiset asetukset tietueilta -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Haluatko todella unohtaa sivustokohtaiset asetuksista joka tietueelta? --Pääsy tietueisiin evätään. -- -- -- Removing stored permissions… -- Poistetaan talletettuja oikeuksia… -- -- -- Abort -- Keskeytä -- -- -- KeePassXC: Removed permissions -- KeePassXC: Poistetut käyttöoikeudet -- -- -- Successfully removed permissions from %n entry(s). -- Poistettiin lupa %n tietueelta.Poistettiin lupa %n tietueelta. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Tietuetta käyttöoikeuksilla ei löytynyt! -- -- -- The active database does not contain an entry with permissions. -- Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. -- -- -- Move KeePassHTTP attributes to custom data -- Siirrä KeePassHTTP-attribuutit mukautettuihin tietoihin. -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Haluatko todella siirtää vanhat selainlaajennustiedot uuteen muotoon? --Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi. -- -- -- Stored browser keys -- Tallennetut selaimen avaimet -- -- -- Remove selected key -- Poista valittu avain -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in mukautettuihin tietoihin -- -- -- Refresh database root group ID -- Uudista tietokannan juuriryhmän ID -- -- -- Created -- Luotu -- -- -- Refresh database ID -- Uudista tietokannan ID -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Haluatko todella uudistaa tietokannan ID:n? --Tämä on tarpeellista vain, jos tietokantasi on kloonattu toisesta ja selainintegraatio ei pysty yhdistämään siihen. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Lisäsuoja... -- -- -- No password set -- Salasanaa ei ole asetettu -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- VAROITUS! Et ole asettanut salasanaa. Tietokannan käyttöä ilman salasanaa ei suositella! -- --Oletko varma, että haluat jatkaa ilman salasanaa? -- -- -- Continue without password -- Jatka ilman salasanaa -- -- -- No encryption key added -- Salausavainta ei ole lisätty -- -- -- You must add at least one encryption key to secure your database! -- Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa! -- -- -- Unknown error -- Tuntematon virhe -- -- -- Failed to change database credentials -- Tietokannan tietueiden muuttaminen ei onnistu -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Salausalgoritmi: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (oletus) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Avainmuunnosfunktio: -- -- -- Transform rounds: -- Muunnositeraatioita: -- -- -- Memory Usage: -- Muistin käyttö: -- -- -- Parallelism: -- Rinnakkaisuus: -- -- -- Decryption Time: -- Salauksen purkuun kulunut aika: -- -- -- ?? s -- ?? s -- -- -- Change -- Muuta -- -- -- Higher values offer more protection, but opening the database will take longer. -- Korkeat arvot lupaavat parempaa suojaa, mutta tietokannan avaus voi kestää pidempään. -- -- -- Database format: -- Tietokannan muoto: -- -- -- This is only important if you need to use your database with other programs. -- Tämä on tärkeää vain, jos käytät tietokantaa muissa ohjelmissa. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (suositeltu) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- muuttamaton -- -- -- Number of rounds too high -- Key transformation rounds -- Iteraatioiden lukumäärä on liian suuri -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Käytät todella suurta lukua iteraatioiden määränä avaimen muunnoksen yhteydessä Argon2:lla. -- --Jos pidät tämän arvon, tietokannan avauksessa voi kestää tunteja tai päiviä (tai jopa pidempään)! -- -- -- Understood, keep number -- Ymmärrän, säilytä numero -- -- -- Cancel -- Peruuta -- -- -- Number of rounds too low -- Key transformation rounds -- Iteraatioiden lukumäärä on liian pieni -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Käytät todella pientä lukua iteraatioiden määränä avaimen muunnoksessa AES-KDF:llä. -- --Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! -- -- -- KDF unchanged -- Avainmuunnosfunktio ei ole muuttunut -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Avaimen muunnos uusia KDF-parametreja käyttäen epäonnistui; KDF:ää ei muutettu. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiBMiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- säiesäiettä -- -- -- Change existing decryption time -- Muuta olemassa olevaa salauksen purkuun vaadittavaa aikaa -- -- -- Decryption time in seconds -- Salauksen purkuun vaadittava aika sekunneissa -- -- -- Database format -- Tietokannan muoto -- -- -- Encryption algorithm -- Salausalgoritmi -- -- -- Key derivation function -- Avainmuunnosfunktio -- -- -- Transform rounds -- Muunnoskierroksia -- -- -- Memory usage -- Muistin käyttö -- -- -- Parallelism -- Rinnakkaisuus -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Avoimia tietueita -- -- -- Don't expose this database -- Älä näytä tätä tietokantaa -- -- -- Expose entries under this group: -- Näytä tietueet vain tästä ryhmästä: -- -- -- Enable Secret Service to access these settings. -- Ota Secret Service käyttöön päästäksesi näihin asetuksiin. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Tietokannan metatiedot -- -- -- Database name: -- Tietokannan nimi: -- -- -- Database description: -- Tietokannan kuvaus: -- -- -- Default username: -- Oletuskäyttäjänimi: -- -- -- History Settings -- Historia-asetukset -- -- -- Max. history items: -- Maks. historia-kohteiden lukumäärä: -- -- -- Max. history size: -- Maks. historian koko: -- -- -- MiB -- Mt -- -- -- Use recycle bin -- Käytä roskakoria -- -- -- Additional Database Settings -- Tietokannan lisäasetukset -- -- -- Database name field -- Tietokannan nimikenttä -- -- -- Database description field -- Tietokannan kuvauskenttä -- -- -- Default username field -- Oletuskäyttäjänimen kenttä -- -- -- Maximum number of history items per entry -- Historiamerkintöjen maksimimäärä per tietue -- -- -- Maximum size of history per entry -- Historian koon maksimimäärä per tietue -- -- -- Delete Recycle Bin -- Poista roskakori -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Haluatko poistaa nykyisen roskakorin ja sen kaiken sisällön? Tämä toimenpide on peruuttamaton. -- -- -- (old) -- (vanha) -- -- -- Enable compression (recommended) -- Ota pakkaus käyttöön (suositeltu) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Jakaminen -- -- -- Breadcrumb -- Leipätiedosto -- -- -- Type -- Tyyppi -- -- -- Path -- Polku -- -- -- Last Signer -- Viimeinen allekirjoittaja -- -- -- Certificates -- Varmenteet -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Tietokannan nimi: -- -- -- Description: -- Kuvaus: -- -- -- Database name field -- Tietokannan nimikenttä -- -- -- Database description field -- Tietokannan kuvauskenttä -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 -tietokanta -- -- -- All files -- Kaikki tiedostot -- -- -- Open database -- Avaa tietokanta -- -- -- CSV file -- CSV-tiedosto -- -- -- Merge database -- Yhdistä tietokanta -- -- -- Open KeePass 1 database -- Avaa KeePass 1 -tietokanta -- -- -- KeePass 1 database -- KeePass 1 -tietokanta -- -- -- Export database to CSV file -- Vie tietokanta CSV-tiedostoon -- -- -- Writing the CSV file failed. -- CSV-tiedoston kirjoitus levylle epäonnistui. -- -- -- Database creation error -- Tietokannan luomisvirhe -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Luodulla tietokannalla ei ole avainta tai avainmuunnosfunktiota, joten sitä ei voida tallentaa. --Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. -- -- -- Select CSV file -- Valitse CSV-tiedosto -- -- -- New Database -- Uusi tietokanta -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Uusi tietokanta] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Lukittu] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Vain luku] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- %1:n avaus epäonnistui. Sitä ei ole joko olemassa, tai siihen ei ole pääsyoikeutta. -- -- -- Export database to HTML file -- Vie tietokanta HTML-tiedostoon -- -- -- HTML file -- HTML-tiedosto -- -- -- Writing the HTML file failed. -- HTML-tiedoston kirjoittaminen epäonnistui. -- -- -- Export Confirmation -- Viennin vahvistus -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Olet viemässä tietokantaasi salaamattomaan tiedostoon. Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvaksi! Oletko varma, että haluat jatkaa? -- -- -- Open OPVault -- Avaa OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Etsitään... -- -- -- Do you really want to delete the entry "%1" for good? -- Haluatko varmasti poistaa tietueen "%1" lopullisesti? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Haluatko varmasti siirtää tietueen "%1" roskakoriin? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Haluatko varmasti siirtää %n tietueen roskakoriin?Haluatko varmasti siirtää %n tietuetta roskakoriin? -- -- -- Execute command? -- Suorita komento? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Haluatko varmasti suorittaa seuraavan komennon?<br><br>%1<br> -- -- -- Remember my choice -- Muista valintani -- -- -- Do you really want to delete the group "%1" for good? -- Haluatko varmasti poistaa ryhmän "%1" lopullisesti? -- -- -- No current database. -- Ei nykyistä tietokantaa. -- -- -- No source database, nothing to do. -- Ei lähdetietokantaa, ei mitään tehtävää. -- -- -- Search Results (%1) -- Etsinnän tulokset (%1) -- -- -- No Results -- Ei tuloksia. -- -- -- File has changed -- Tiedosto on muuttunut -- -- -- The database file has changed. Do you want to load the changes? -- Tietokantatiedosto on muuttunut. Haluatko ladata muutokset? -- -- -- Merge Request -- Yhdistämispyyntö -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Tietokantatiedosto on muuttunut, ja sinulla on tallentamattomia muutoksia. --Haluatko yhdistää muutoksesi? -- -- -- Empty recycle bin? -- Tyhjennetäänkö roskakori? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Haluatko varmasti tyhjentää kaiken pysyvästi roskakorista? -- -- -- Do you really want to delete %n entry(s) for good? -- Haluatko todella poistaa %n tietueen pysyvästi?Haluatko todella poistaa %n tietuetta pysyvästi? -- -- -- Delete entry(s)? -- Poista tietue?Poista tietueet? -- -- -- Move entry(s) to recycle bin? -- Siirrä tietue roskakoriin?Siirrä tietueet roskakoriin? -- -- -- Lock Database? -- Lukitse tietokanta? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Muokkaat tietuetta. Hylkää muutokset ja lukitse silti? -- -- -- "%1" was modified. --Save changes? -- Tietuetta "%1" muokattiin. --Tallennetaanko muutokset? -- -- -- Database was modified. --Save changes? -- Tietokantaa on muokattu. --Tallenna muutokset? -- -- -- Save changes? -- Tallenna muutokset? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Uutta tietokantaa ei voitu avata automaattisen uudelleenlatauksen yhteydessä. --Virhe: %1 -- -- -- Disable safe saves? -- Ota turvallinen tallennus pois käytöstä? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC on epäonnistunut useaan otteeseen tietokannan tallentamisessa. Tämä johtuu luultavasti tiedostojen synkronoinnista, joka pitää tiedostoa lukittuna. --Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? -- -- -- Passwords -- Salasanat -- -- -- Save database as -- Tallenna tietokanta nimellä -- -- -- KeePass 2 Database -- KeePass 2 -tietokanta -- -- -- Replace references to entry? -- Korvaa tietueen viittaukset? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Tietueella "%1" on %2 viittaus. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen?Tietueella "%1" on %2 viittausta. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen? -- -- -- Delete group -- Poista ryhmä -- -- -- Move group to recycle bin? -- Siirretäänkö ryhmä roskakoriin? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Haluatko varmasti siirtää ryhmän "%1" roskakoriin? -- -- -- Successfully merged the database files. -- Tietokantatiedostot yhdistettiin onnistuneesti. -- -- -- Database was not modified by merge operation. -- Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. -- -- -- Shared group... -- Jaettu ryhmä... -- -- -- Writing the database failed: %1 -- Tietokannan kirjoittaminen epäonnistui: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Tietokanta on avattu vain-luku -moodissa. Automaattinen tallennus on otettu pois päältä. -- -- -- Save database backup -- Tallenna tietokannan varmuuskopio -- -- -- Could not find database file: %1 -- Tietokantatiedostoa ei löydy: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Tietue -- -- -- Advanced -- Lisäasetukset -- -- -- Icon -- Kuvake -- -- -- Auto-Type -- Automaattisyöttö -- -- -- Properties -- Ominaisuudet -- -- -- History -- Historia -- -- -- SSH Agent -- SSH-agentti -- -- -- n/a -- ei saatavilla -- -- -- (encrypted) -- (salattu) -- -- -- Select private key -- Valitse yksityinen avain -- -- -- Entry history -- Tietueiden historia -- -- -- Add entry -- Lisää tietue -- -- -- Edit entry -- Muokkaa tietuetta -- -- -- New attribute -- Uusi attribuutti -- -- -- Are you sure you want to remove this attribute? -- Haluatko varmasti poistaa tämän attribuutin? -- -- -- Tomorrow -- Huomenna -- -- -- %n week(s) -- %n viikko%n viikkoa -- -- -- %n month(s) -- %n kuukausi%n kuukautta -- -- -- Entry updated successfully. -- Tietue päivitetty onnistuneesti. -- -- -- New attribute %1 -- Uusi attribuutti %1 -- -- -- %n year(s) -- %n vuosi%n vuotta -- -- -- Confirm Removal -- Vahvista poistaminen -- -- -- Browser Integration -- Selainintegraatio -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Haluatko varmasti poistaa tämän URL:n? -- -- -- Reveal -- Paljasta -- -- -- Hide -- Piilota -- -- -- Unsaved Changes -- Tallentamattomia muutoksia -- -- -- Would you like to save changes to this entry? -- Haluatko tallentaa muutokset tähän tietueeseen? -- -- -- [PROTECTED] Press Reveal to view or edit -- [SUOJATTU] Klikkaa Paljasta näyttääksesi tai muokataksesi -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Lisäattribuutit -- -- -- Add -- Lisää -- -- -- Remove -- Poista -- -- -- Edit Name -- Muokkaa nimeä -- -- -- Protect -- Suojattu -- -- -- Reveal -- Paljasta -- -- -- Attachments -- Liitteet -- -- -- Foreground Color: -- Korostusväri: -- -- -- Background Color: -- Taustaväri: -- -- -- Attribute selection -- Attribuutin valinta -- -- -- Attribute value -- Attribuutin arvo -- -- -- Add a new attribute -- Lisää uusi attribuutti -- -- -- Remove selected attribute -- Poista valittu attribuutti -- -- -- Edit attribute name -- Muokkaa attribuutin nimeä -- -- -- Toggle attribute protection -- Suojaa attribuutti -- -- -- Show a protected attribute -- Näytä suojattu attribuutti -- -- -- Foreground color selection -- Korostusvärin valinta -- -- -- Background color selection -- Taustavärin valinta -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Jos valittu, tietue ei näy Diagnostiikassa tai HIBP:ssä vaikkei se läpäisisikään laatuvaatimuksia (esim. salasanan entropia tai uudelleenkäyttö). Voit käyttää asetusta, jos salasana on sellainen mitä et voi hallita (jos sen täytyy olla esim. nelinumeroinen PIN-koodi), jolloin se ei väärennä raportin tuloksia.</p></body></html> -- -- -- Exclude from database reports -- Jätä tietokantaraporttien ulkopuolelle -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Salli automaattisyöttö tälle tietueelle -- -- -- Window Associations -- Ikkunoiden liitokset -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Ikkunan otsikko: -- -- -- Use a specific sequence for this association: -- Käytä tiettyä sekvenssiä tälle liitokselle: -- -- -- Custom Auto-Type sequence -- Mukautettu automaattisyötön sekvenssi -- -- -- Open Auto-Type help webpage -- Avaa automaattitäydennyksen ohjesivusto -- -- -- Existing window associations -- Jo olemassa olevat ikkunoiden liitokset -- -- -- Add new window association -- Lisää uusi ikkunan liitos -- -- -- Remove selected window association -- Poista valittu ikkunaliitos -- -- -- You can use an asterisk (*) to match everything -- Voit käyttää asteriskia (*) vastaamaan kaikkea mahdollista -- -- -- Set the window association title -- Aseta ikkunan liitoksen otsikko -- -- -- You can use an asterisk to match everything -- Voit käyttää asteriskia vastaamaan kaikkea mahdollista -- -- -- Custom Auto-Type sequence for this window -- Mukautettu automaattisyötön sekvenssi tälle ikkunalle -- -- -- Inherit default Auto-Type sequence from the group -- Peri automaattisyötön oletussekvenssi ryhmältä -- -- -- Use custom Auto-Type sequence: -- Käytä mukautettua automaattisyötön sekvenssiä: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Tämä asetukset vaikuttavat tietueen toimintaan selainlaajennuksen kanssa. -- -- -- General -- Yleistä -- -- -- Skip Auto-Submit for this entry -- Älä salli automaattisyöttöä tälle tietueelle -- -- -- Hide this entry from the browser extension -- Piilota tämä tietue selainlaajennuksesta -- -- -- Additional URL's -- Lisäosoitteet -- -- -- Add -- Lisää -- -- -- Remove -- Poista -- -- -- Edit -- Muokkaa -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Lähetä tämä tietue vain HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tavalliset kirjautumiskentät eivät näytä tätä tietuetta listassa. -- -- -- Use this entry only with HTTP Basic Auth -- Käytä tietuetta vain HTTP Basic -autentikaatioon -- -- -- -- EditEntryWidgetHistory -- -- Show -- Näytä -- -- -- Restore -- Palauta -- -- -- Delete -- Poista -- -- -- Delete all -- Poista kaikki -- -- -- Entry history selection -- Tietueen historiavalinta -- -- -- Show entry at selected history state -- Näytä tietue valitulla historiatilalla -- -- -- Restore entry to selected history state -- Palauta tietue valittuun historiatilaan -- -- -- Delete selected history state -- Poista valittu historiatila -- -- -- Delete all history -- Poista kaikki historia -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Salasana -- -- -- Title: -- Otsikko: -- -- -- Presets -- Esiasetukset -- -- -- Toggle the checkbox to reveal the notes section. -- Ruksi valintaruutu näyttääksesi muistiinpano-osio. -- -- -- Username: -- Käyttäjänimi -- -- -- Url field -- Osoitekenttä -- -- -- Download favicon for URL -- Lataa favicon tälle URL:lle -- -- -- Password field -- Salasanakenttä -- -- -- Toggle notes visible -- Vaihda muistiinpanojen näkyvyyttä -- -- -- Expiration field -- Vanhentumisajan kenttä -- -- -- Expiration Presets -- Vanhentumisajan valmiit asetukset -- -- -- Expiration presets -- Vanhentumisajan valmiit asetukset -- -- -- Notes field -- Muistiinpanojen kenttä -- -- -- Title field -- Otsikkokenttä -- -- -- Username field -- Käyttäjätunnuksen kenttä -- -- -- Toggle expiration -- Ota vanhentumisaika käyttöön -- -- -- Notes: -- Muistiinpanot: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Vanhentuu: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Lomake -- -- -- Remove key from agent after -- Poista avain agentista kun on kulunut -- -- -- seconds -- sekuntia -- -- -- Fingerprint -- Sormenjälki -- -- -- Remove key from agent when database is closed/locked -- Poista avain agentista kun tietokanta suljetaan/lukitaan -- -- -- Public key -- Julkinen avain -- -- -- Add key to agent when database is opened/unlocked -- Lisää avain agenttiin kun tietokanta avataan/lukitaan -- -- -- Comment -- Kommentti -- -- -- Decrypt -- Pura salaus -- -- -- n/a -- ei saatavilla -- -- -- Copy to clipboard -- Kopioi leikepöydälle -- -- -- Private key -- Yksityinen avain -- -- -- External file -- Ulkoinen tiedosto -- -- -- Browse... -- Button for opening file dialog -- Selaa... -- -- -- Attachment -- Liite -- -- -- Add to agent -- Lisää agenttiin -- -- -- Remove from agent -- Poista agentista -- -- -- Require user confirmation when this key is used -- Vaadi käyttäjävahvistusta kun avainta käytetään -- -- -- Remove key from agent after specified seconds -- Poista avain agentista tietyn sekuntiajan jälkeen -- -- -- Browser for key file -- Selaa avaintiedostoa -- -- -- External key file -- Ulkoinen avaintiedosto -- -- -- Select attachment file -- Valitse liitetiedosto -- -- -- -- EditGroupWidget -- -- Group -- Ryhmä -- -- -- Icon -- Kuvake -- -- -- Properties -- Ominaisuudet -- -- -- Add group -- Lisää ryhmä -- -- -- Edit group -- Muokkaa ryhmää -- -- -- Enable -- Kytke päälle -- -- -- Disable -- Kytke pois päältä -- -- -- Inherit from parent group (%1) -- Peri ylemmältä ryhmältä (%1) -- -- -- Entry has unsaved changes -- Tietueella on tallentamattomia muutoksia -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tyyppi: -- -- -- Path: -- Polku: -- -- -- Password: -- Salasana: -- -- -- Inactive -- Toimeton -- -- -- KeeShare unsigned container -- KeeSharen allekirjoittamaton säiliö -- -- -- KeeShare signed container -- KeeSharen allekirjoitettu säiliö -- -- -- Select import source -- Valitse tuonnin lähde -- -- -- Select export target -- Valitse viennin kohde -- -- -- Select import/export file -- Valitse tuonti-/vientitiedosto -- -- -- Clear -- Tyhjennä -- -- -- Import -- Tuo -- -- -- Export -- Vie -- -- -- Synchronize -- Synkronoi -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- KeePassXC-versiosi ei tue jakamista tällä säiliötyypillä. --Tuetut tyypit ovat: %1. -- -- -- %1 is already being exported by this database. -- %1 on jo viety tästä tietokannasta. -- -- -- %1 is already being imported by this database. -- %1 on jo tuotu tästä tietokannasta. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 on tuotu ja viety eri ryhmästä tästä tietokannasta. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare ei ole tällä hetkellä käytössä. Voit ottaa tuonnin/viennin käyttöön ohjelmiston asetuksista. -- -- -- Database export is currently disabled by application settings. -- Tietokannan vienti on poistettu käytöstä ohjelmiston asetuksissa. -- -- -- Database import is currently disabled by application settings. -- Tietokannan tuonti on poistettu käytöstä ohjelmiston asetuksista. -- -- -- Sharing mode field -- Jakotavan kenttä -- -- -- Path to share file field -- Jakotiedoston sijainnin kenttä -- -- -- Password field -- Salasanakenttä -- -- -- Clear fields -- Tyhjennä kentät -- -- -- Browse for share file -- Selaa jakotiedostoa -- -- -- Browse... -- Selaa... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Nimikenttä -- -- -- Notes field -- Muistiinpanojen kenttä -- -- -- Toggle expiration -- Ota vanhentumisaika käyttöön -- -- -- Auto-Type toggle for this and sub groups -- Automaattisyötön päälle laittaminen tälle ryhmälle ja sen aliryhmille -- -- -- Expiration field -- Vanhentumisajan kenttä -- -- -- Search toggle for this and sub groups -- Haun päälle laittaminen tälle ryhmälle ja sen aliryhmille -- -- -- Default auto-type sequence field -- Automaattisyötön sekvenssin oletuksen kenttä -- -- -- Expires: -- Vanhentuu: -- -- -- Use default Auto-Type sequence of parent group -- Peri automaattisyötön sekvenssi emoryhmältä -- -- -- Auto-Type: -- Automaattisyöttö: -- -- -- Search: -- Etsi: -- -- -- Notes: -- Muistiinpanot: -- -- -- Name: -- Nimi: -- -- -- Set default Auto-Type sequence -- Aseta automaattisyötön oletussekvenssi -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Lisää mukautettu kuvake -- -- -- Delete custom icon -- Poista mukautettu kuvake -- -- -- Download favicon -- Lataa favicon -- -- -- Unable to fetch favicon. -- Faviconin noutaminen ei onnistu -- -- -- Images -- Kuvat -- -- -- All files -- Kaikki tiedostot -- -- -- Confirm Delete -- Vahvista poisto -- -- -- Select Image(s) -- Valitse kuva(t) -- -- -- Successfully loaded %1 of %n icon(s) -- %1 ikoni kaikista (%n) ladattiin onnistuneesti%1 ikonia kaikista (%n) ladattiin onnistuneesti -- -- -- No icons were loaded -- Yhtään ikonia ei ladattu -- -- -- %n icon(s) already exist in the database -- %n ikoni on jo tietokannassa%n ikonia on jo tietokannassa -- -- -- The following icon(s) failed: -- Seuraava ikoni epäonnistui:Seuraavat ikonit epäonnistuivat: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Voit asettaa DuckDuckGo:n ikonien lataukseen asetuksen Työkalut>Asetukset>Turvallisuus alta -- -- -- Download favicon for URL -- Lataa favicon tälle URL:lle -- -- -- Apply selected icon to subgroups and entries -- Lisää valittu ikoni aliryhmille ja sen tietueille -- -- -- Also apply to child groups -- Lisää myös aliryhmille -- -- -- Also apply to child entries -- Lisää myös lapsitietueille -- -- -- Also apply to all children -- Lisää kaikille lapsille -- -- -- Existing icon selected. -- Jo olemassa oleva ikoni valittu. -- -- -- Use default icon -- Käytä oletusikonia -- -- -- Use custom icon -- Käytä mukautettua ikonia -- -- -- Apply icon to... -- Käytä ikonia... -- -- -- Apply to this group only -- Käytä vain tässä ryhmässä -- -- -- -- EditWidgetProperties -- -- Created: -- Luotu: -- -- -- Modified: -- Muokattu: -- -- -- Accessed: -- Käytetty: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Liitännäistiedot -- -- -- Remove -- Poista -- -- -- Delete plugin data? -- Poista liitännäistiedot? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Haluatko varmasti poistaa valitun liitännäistiedon? --Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. -- -- -- Key -- Avain -- -- -- Value -- Arvo -- -- -- Datetime created -- Luomisen ajankohta -- -- -- Datetime modified -- Muokkauksen ajankohta -- -- -- Datetime accessed -- Käyttämisen ajankohta -- -- -- Unique ID -- Yksilökohtainen ID -- -- -- Plugin data -- Liitännäistiedot -- -- -- Remove selected plugin data -- Poista liitännäistiedot -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klooni -- -- -- -- EntryAttachmentsModel -- -- Name -- Nimi -- -- -- Size -- Koko -- -- -- -- EntryAttachmentsWidget -- -- Form -- Lomake -- -- -- Add -- Lisää -- -- -- Remove -- Poista -- -- -- Open -- Avaa -- -- -- Save -- Tallenna -- -- -- Select files -- Valitse tiedostot -- -- -- Are you sure you want to remove %n attachment(s)? -- Haluatko varmasti poistaa &n liitettä?Haluatko varmasti poistaa %n liitettä? -- -- -- Save attachments -- Tallenna liitteet -- -- -- Unable to create directory: --%1 -- Hakemiston luominen epäonnistui: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Haluatko varmasti korvata tiedoston "%1" tällä liitteellä? -- -- -- Confirm overwrite -- Vahvista korvaaminen -- -- -- Unable to save attachments: --%1 -- Liitteiden tallentaminen epäonnistui: --%1 -- -- -- Unable to open attachment: --%1 -- Liitteen avaaminen epäonnistui: --%1 -- -- -- Unable to open attachments: --%1 -- Liitteiden avaaminen epäonnistui: --%1 -- -- -- Confirm remove -- Vahvista poisto -- -- -- Unable to open file(s): --%1 -- Tiedostoa ei voitu avata: --%1Tiedostoja ei voitu avata: --%1 -- -- -- Attachments -- Liitteet -- -- -- Add new attachment -- Lisää uusi liite -- -- -- Remove selected attachment -- Poista valittu liite -- -- -- Open selected attachment -- Avaa valittu liite -- -- -- Save selected attachment to disk -- Tallenna valittu liite levylle -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 on suurikokoinen tiedosto (%2 MB) --Tietokantasi voi kasvaa liian suureksi ja hidastua. -- --Oletko varma, että haluat lisätä tämän tiedoston? -- -- -- Confirm Attachment -- Varmista liitetiedosto -- -- -- -- EntryAttributesModel -- -- Name -- Nimi -- -- -- -- EntryHistoryModel -- -- Last modified -- Viimeksi muokattu -- -- -- Title -- Otsikko -- -- -- Username -- Käyttäjätunnus -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Viittaus: -- -- -- Group -- Ryhmä -- -- -- Title -- Otsikko -- -- -- Username -- Käyttäjätunnus -- -- -- URL -- URL -- -- -- Never -- Ei koskaan -- -- -- Password -- Salasana -- -- -- Notes -- Muistiinpanot -- -- -- Expires -- Erääntyy -- -- -- Created -- Luotu -- -- -- Modified -- Muokattu -- -- -- Accessed -- Käytetty -- -- -- Attachments -- Liitteet -- -- -- Size -- Koko -- -- -- Group name -- Ryhmän nimi -- -- -- Entry title -- Tietueen nimi -- -- -- Entry notes -- Tietueen muistiinpanot -- -- -- Entry expires at -- Tietue vanhentuu -- -- -- Creation date -- Luomispäivämäärä -- -- -- Last modification date -- Edellisen muokkauksen päivämäärä -- -- -- Last access date -- Edellisen pääsyn päivämäärä -- -- -- Attached files -- Liitetiedostot -- -- -- Entry size -- Tietueen koko -- -- -- Has attachments -- Sisältää liitetiedostoja -- -- -- Has TOTP one-time password -- Sisältää TOTP-salasanan -- -- -- -- EntryPreviewWidget -- -- Close -- Sulje -- -- -- General -- Yleistä -- -- -- Username -- Käyttäjätunnus -- -- -- Password -- Salasana -- -- -- Expiration -- Vanhentumisaika -- -- -- URL -- URL -- -- -- Attributes -- Attribuutit -- -- -- Attachments -- Liitteet -- -- -- Notes -- Muistiinpanot -- -- -- Autotype -- Automaattisyöttö -- -- -- Window -- Ikkuna -- -- -- Sequence -- Sekvenssi -- -- -- Searching -- Hakeminen -- -- -- Search -- Etsi -- -- -- Clear -- Tyhjennä -- -- -- Never -- Ei koskaan -- -- -- [PROTECTED] -- [SUOJATTU] -- -- -- Enabled -- Käytössä -- -- -- Disabled -- Pois käytöstä -- -- -- Share -- Jaa -- -- -- Display current TOTP value -- Näytä nykyinen TOTP-arvo -- -- -- Advanced -- Lisäasetukset -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Virheellinen URL -- -- -- -- EntryView -- -- Fit to window -- Sovita ikkunaan -- -- -- Fit to contents -- Sovita sisältöön -- -- -- Reset to defaults -- Palauta oletusasetukset -- -- -- Has attachments -- Entry attachment icon toggle -- Sisältää liitetiedostoja -- -- -- Has TOTP -- Entry TOTP icon toggle -- Sisältää TOTP:n -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Tietuetta "%1" tietokannasta "%2" käytettiin %3:n toimesta -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- DBus-palvelun rekisteröinti epäonnistui %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n tietue käytetiin %1%n tietuetta käytettiin %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Tiedostonimi -- -- -- Group -- Ryhmä -- -- -- Manage -- Hallitse -- -- -- Unlock to show -- Avaa lukitus näyttääksesi -- -- -- None -- Ei mitään -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Sovellus -- -- -- Manage -- Hallitse -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Tuntematon -- -- -- Unknown -- Unknown executable path -- Tuntematon -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID %1, Suoritettava tiedosto: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Toinen Secret Service -palvelu on jo käynnissä (%1).<br/>Ole hyvä ja pysäytä/poista se ennen kuin otat Secret Service -integraation käyttöön. -- -- -- -- Group -- -- [empty] -- group has no children -- [tyhjä] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Salasanan varmistus netissä epäonnistui -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Lataa faviconit -- -- -- Cancel -- Peruuta -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Onko ikonien latauksessa ongelmia? --Voit käyttää DuckDuckGo:ta ikonien lataukseen ohjelmiston turvallisuusasetuksia muokkaamalla. -- -- -- Close -- Sulje -- -- -- URL -- URL -- -- -- Status -- Tila -- -- -- Please wait, processing entry list... -- Odota hetki, käsitellään tietuelistaa... -- -- -- Downloading... -- Ladataan... -- -- -- Ok -- Ok -- -- -- Already Exists -- On jo olemassa -- -- -- Download Failed -- Lataus epäonnistui -- -- -- Downloading favicons (%1/%2)... -- Ladataan faviconeja (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Sulje -- -- -- Close message -- Sulje viesti -- -- -- -- Kdbx3Reader -- -- missing database headers -- tietokannan otsaketiedot puuttuvat -- -- -- Header doesn't match hash -- Otsaketieto ei vastaa tiivistettä (hash) -- -- -- Invalid header id size -- Virheellinen otsaketietojen id:n koko -- -- -- Invalid header field length -- Virhellinen otsaketietojen kentän koko -- -- -- Invalid header data length -- Virheellinen otsaketietojen sisällön koko -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Väärät tilitiedot, ole hyvä ja koita uudestaan. --Jos tämä toistuu, tietokantasi voi olla viallinen. -- -- -- Unable to calculate database key -- Tietokannan avaimen laskenta epäonnistui -- -- -- Unable to issue challenge-response: %1 -- Haaste-vastauksen tekeminen epäonnistui: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Haaste-vastauksen tekeminen epäonnistui: %1 -- -- -- Unable to calculate database key -- Tietokannan avaimen laskenta epäonnistui -- -- -- -- Kdbx4Reader -- -- missing database headers -- tietokannan otsaketiedot puuttuvat -- -- -- Invalid header checksum size -- Virheellinen otsaketietojen tarkistussumman koko -- -- -- Header SHA256 mismatch -- Yhteensopimaton SHA256-otsaketieto -- -- -- Unknown cipher -- Tuntematon salaus -- -- -- Invalid header id size -- Virheellinen otsaketietojen id:n koko -- -- -- Invalid header field length -- Virhellinen otsaketietojen kentän koko -- -- -- Invalid header data length -- Virheellinen otsaketietojen sisällön koko -- -- -- Failed to open buffer for KDF parameters in header -- Puskurin avaaminen avaimenluontifunktion parametreja varten tiedoston alkuosassa epäonnistui -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Avainmuunnosfunktio (KDF) ei ole tuettu, tai virheelliset parametrit -- -- -- Legacy header fields found in KDBX4 file. -- KDBX4-tiedostosta löytyi vanhentuneita otsaketietoja -- -- -- Invalid inner header id size -- Virheellinen sisemmän otsaketiedon tunnisteen koko -- -- -- Invalid inner header field length -- Virheellinen sisemmän otsaketiedon kentän pituus -- -- -- Invalid inner header binary size -- Virheellinen sisemmän otsaketiedon binäärikoko -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- KeePass -variant-kartan versio ei ole tuettu. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan tietuenimen pituus -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan tietueen nimen sisältö -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan tietueen arvon pituus -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Virheellinen variant-kartan tietueen arvon sisältä -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan Bool-arvon pituus -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan Int32-arvon pituus -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan Uint32-arvon pituus -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan Int64-arvon pituus -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan Uint64-arvon pituus -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan tietueen tyyppi -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Virheellinen variant-kartan kenttätyypin koko -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Väärät tilitiedot, ole hyvä ja koita uudestaan. --Jos tämä toistuu, tietokantasi voi olla viallinen. -- -- -- (HMAC mismatch) -- (HMAC on yhteensopimaton) -- -- -- Unable to calculate database key: %1 -- Tietokannan avaimen laskenta epäonnistui: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Virheellinen symmetrinen salausalgoritmi. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Virheellinen symmetrisen salauksen alustussektorin (IV) koko. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- KDF-parametrien serialisointi variant-karttaan epäonnistui -- -- -- Unable to calculate database key: %1 -- Tietokannan avaimen laskenta epäonnistui: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Salausta ei tueta -- -- -- Invalid compression flags length -- Virheellinen pakkauslippujen pituus -- -- -- Unsupported compression algorithm -- Ei-tuettu pakkausalgoritmi -- -- -- Invalid master seed size -- Virheellinen pääavainsiemenen koko -- -- -- Invalid transform seed size -- Virheellinen avainmuunnossiemenen koko -- -- -- Invalid transform rounds size -- Virheellinen avainmuunnoskertoimen koko -- -- -- Invalid start bytes size -- Virheellinen avaustavujen koko -- -- -- Invalid random stream id size -- Virheellinen satunnaistietovuon tietueen koko -- -- -- Invalid inner random stream cipher -- Virheellinen sisäisen satunnaistietovuon salaus -- -- -- Not a KeePass database. -- Tiedosto ei ole KeePass-tietokanta -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Valittu tiedosto on vanha KeePass 1 -tietokanta (.kdb). -- --Voit tuoda sen Tietokanta-valikosta > 'Tuo KeePass 1 -tietokanta' --Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokantaa auki vanhalla KeePassX 0.4 -versiolla. -- -- -- Unsupported KeePass 2 database version. -- Ei-tuettu KeePass 2 -tietokantaversio. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Virheellinen salauksen uuid:n pituus: %1 (pituus=%2) -- -- -- Unable to parse UUID: %1 -- UUID:tä ei voitu jäsentää: %1 -- -- -- Failed to read database file. -- Tietokantatiedoston lukeminen epäonnistui. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML-jäsentämisen virhe: %1 -- -- -- No root group -- Ei isäntäryhmää -- -- -- Missing icon uuid or data -- Kuvakkeen uuid tai tiedot puuttuvat -- -- -- Missing custom data key or value -- Itse valittu sisältöavain tai -arvo puuttuu -- -- -- Multiple group elements -- Useita ryhmäelementtejä -- -- -- Null group uuid -- Tyhjä ryhmän uuid -- -- -- Invalid group icon number -- Virhellinen ryhmän kuvakkeen numeroarvo -- -- -- Invalid EnableAutoType value -- Virheellinen EnableAutoType-arvo -- -- -- Invalid EnableSearching value -- Virheellinen EnableSearching-arvo -- -- -- No group uuid found -- Ryhmän uuid:tä ei löydy -- -- -- Null DeleteObject uuid -- Tyhjä uudi-arvo objektia tuhotessa (DeleteObject) -- -- -- Missing DeletedObject uuid or time -- Tuhotun objektin (DeletedObject) uuid tai aika puuttuu -- -- -- Null entry uuid -- Tyhjä tietueen uuid (null) -- -- -- Invalid entry icon number -- Virhellinen ryhmän kuvakkeen numeroarvo -- -- -- History element in history entry -- Historiaelementti historiatietueessa -- -- -- No entry uuid found -- Tietueen uuid:tä ei löydy -- -- -- History element with different uuid -- Historiaelementti eri uuid:llä -- -- -- Duplicate custom attribute found -- Itse valittu attribuutti on jo olemassa -- -- -- Entry string key or value missing -- Tietueen merkkijonoavain tai -arvo puuttuu -- -- -- Entry binary key or value missing -- Tietueen binääriavain tai -arvo puuttuu -- -- -- Auto-type association window or sequence missing -- Automaattisyötön ikkunan liitos tai sekvenssi puuttuu -- -- -- Invalid bool value -- Virheellinen boolean-arvo -- -- -- Invalid date time value -- Virheellinen päivämääräarvo -- -- -- Invalid color value -- Virheellinen väriarvo -- -- -- Invalid color rgb part -- Virheellinen RGB-väriarvo -- -- -- Invalid number value -- Virheellinen numeroarvo -- -- -- Invalid uuid value -- Virheellinen uuid-arvo -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Binääriä ei voitu purkaa -- -- -- XML error: --%1 --Line %2, column %3 -- XML-virhe: --%1 --Rivi %2, sarake %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Virheellinen KeeAgentin asetustiedoston rakenne -- -- -- Private key is an attachment but no attachments provided. -- Yksityinen avain on liitetiedosto, mutta liitetiedostoja ei ole annettu. -- -- -- Private key is empty -- Yksityinen avainen on tyhjä -- -- -- File too large to be a private key -- Tiedosto on liian suuri ollakseen yksityinen avain -- -- -- Failed to open private key -- Yksityisen avaimen avaaminen epäonnistui -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Tietokannan avaaminen epäonnistui. -- -- -- Import KeePass1 Database -- Tuo KeePass1-tietokanta -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Avaintiedoston luku ei onnistu -- -- -- Not a KeePass database. -- Tiedosto ei ole KeePass-tietokanta -- -- -- Unsupported encryption algorithm. -- Tukematon salausalgoritmi. -- -- -- Unsupported KeePass database version. -- Tukematon KeePass-tietokantaversio -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Salauksen alustusvektoria ei voitu lukea -- -- -- Invalid number of groups -- Virheellinen määrä ryhmiä -- -- -- Invalid number of entries -- Virheellinen määrä tietueita -- -- -- Invalid content hash size -- Virheellinen sisältötarkisteen koko -- -- -- Invalid transform seed size -- Virheellinen avainmuunnossiemenen koko -- -- -- Invalid number of transform rounds -- Virheellinen määrä muunnoskertoimia -- -- -- Unable to construct group tree -- Ryhmän puuta ei voitu rakentaa -- -- -- Root -- Juuri -- -- -- Key transformation failed -- Avaimen muuttaminen epäonnistui -- -- -- Invalid group field type number -- Virheellinen ryhmän kenttätyypin numero -- -- -- Invalid group field size -- Virheellinen ryhmän kentän koko -- -- -- Read group field data doesn't match size -- Luetun ryhmän kentän sisältö ei vastaa sen kokoa -- -- -- Incorrect group id field size -- Virheellinen ryhmän tunnistekentän koko -- -- -- Incorrect group creation time field size -- Virheellinen ryhmän luomisajan kentän koko -- -- -- Incorrect group modification time field size -- Virheellinen ryhmän muokkausajan kentän koko -- -- -- Incorrect group access time field size -- Virheellinen ryhmän hakuajan kentän koko -- -- -- Incorrect group expiry time field size -- Virheellinen ryhmän vanhentumisajan kentän koko -- -- -- Incorrect group icon field size -- Virheellinen ryhmän ikonikentän koko -- -- -- Incorrect group level field size -- Virheellinen ryhmän tasokentän koko -- -- -- Invalid group field type -- Virheellinen ryhmän kentän tyyppi -- -- -- Missing group id or level -- Ryhmän tunniste tai taso puuttuu -- -- -- Missing entry field type number -- Tietueen kentän tyyppinumero puuttuu -- -- -- Invalid entry field size -- Virheellinen tietueen kentän koko -- -- -- Read entry field data doesn't match size -- Luetun tietueen kentän sisältö ei vastaa sen kokoa -- -- -- Invalid entry uuid field size -- Virheellinen tietueen uuid-kentän koko -- -- -- Invalid entry group id field size -- Virheellinen tietueen ryhmän tunnistekentän koko -- -- -- Invalid entry icon field size -- Virheellinen tietueen ikonikentän koko -- -- -- Invalid entry creation time field size -- Virheellinen tietueen luomisajan kentän koko -- -- -- Invalid entry modification time field size -- Virhellinen tietueen muokkausajan kentän koko -- -- -- Invalid entry expiry time field size -- Virheellinen tietueen vanhentumisajan kentän koko -- -- -- Invalid entry field type -- Virheellinen tietueen kentän tyyppi -- -- -- unable to seek to content position -- sisällön sijaintia ei voitu hakea -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Väärät tilitiedot, ole hyvä ja koita uudestaan. --Jos tämä toistuu, tietokantasi voi olla viallinen. -- -- -- Unable to calculate database key -- Tietokannan avaimen laskenta epäonnistui -- -- -- -- KeeShare -- -- Invalid sharing reference -- Virheellinen jakoviittaus -- -- -- Inactive share %1 -- Ei-aktiivinen jako %1 -- -- -- Imported from %1 -- Tuotu kohteesta %1 -- -- -- Exported to %1 -- Viety kohteeseen %1 -- -- -- Synchronized with %1 -- Synkronoitu kohteen %1 kanssa -- -- -- Import is disabled in settings -- Tuonti on poistettu käytöstä asetuksissa -- -- -- Export is disabled in settings -- Vienti on otettu pois käytöstä asetuksissa -- -- -- Inactive share -- Ei-aktiivinen jako -- -- -- Imported from -- Tuotu kohteesta -- -- -- Exported to -- Viety kohteeseen -- -- -- Synchronized with -- Synkronoitu seuraavan kohteen kanssa -- -- -- -- KeyComponentWidget -- -- Key Component -- Avainkomponentti -- -- -- Key Component Description -- Avainkomponentin kuvaus -- -- -- Cancel -- Peruuta -- -- -- Key Component set, click to change or remove -- Avainkomponentti asetettu, paina muokataksesi tai poistaaksesi -- -- -- Add %1 -- Add a key component -- Lisätty %1 -- -- -- Change %1 -- Change a key component -- Muutettu %1 -- -- -- Remove %1 -- Remove a key component -- Poista %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 asetettu, paina muokataksesi tai poistaaksesi -- -- -- -- KeyFileEditWidget -- -- Generate -- Luo -- -- -- Key File -- Avaintiedosto -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Lisäturvaksi voit lisätä avaintiedoston, joka sisältää sattumanvaraista dataa.</p><p>Tämä tiedosto täytyy pitää salassa eikä sitä saa koskaan hävittää!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Avaintiedostoa '%1' ei voitu avata --Viesti: %2 -- -- -- Key files -- Avaintiedostot -- -- -- All files -- Kaikki tiedostot -- -- -- Create Key File... -- Luo avaintiedosto... -- -- -- Error creating key file -- Virhe luotaessa avaintiedostoa -- -- -- Unable to create key file: %1 -- Avaintiedostoa ei voitu luoda: %1 -- -- -- Select a key file -- Valitse avaintiedosto -- -- -- Key file selection -- Avaintiedoston valinta -- -- -- Browse for key file -- Selaa avaintiedostoa -- -- -- Browse... -- Selaa... -- -- -- Generate a new key file -- Luo uusi avaintiedosto -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Huom.: Älä käytä tiedostoa jonka sisältö voi muuttua, sillä se voi estää tietokannan avauksen! -- -- -- Invalid Key File -- Virheellinen avaintiedosto -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Et voi käyttää kyseistä tietokantaa avaintiedostona. Ole hyvä ja valitse eri tiedosto, tai luo uusi avaintiedosto. -- -- -- Suspicious Key File -- Epäilyttävä avaintiedosto -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Valittu avaintiedosto näyttää tietokannalta. Avaintiedoston täytyy olla staattinen tiedosto jonka sisältö ei koskaan muutu. Muussa tapauksessa saatat menettää pääsyn tietokantaasi lopullisesti. --Haluatko jatkaa käyttämällä tätä tiedostoa? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Tietokanta -- -- -- &Help -- &Ohje -- -- -- &Groups -- Ryhmät -- -- -- &Tools -- T&yökalut -- -- -- &Quit -- &Lopeta -- -- -- &About -- T&ietoja -- -- -- Database settings -- Tietokannan asetukset -- -- -- Copy username to clipboard -- Kopioi käyttäjätunnus leikepöydälle -- -- -- Copy password to clipboard -- Kopioi salasana leikepöydälle -- -- -- &Settings -- &Asetukset -- -- -- &Title -- &Otsikko -- -- -- Copy title to clipboard -- Kopioi nimi leikepöydälle -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopioi osoite leikepöydälle -- -- -- &Notes -- &Muistiinpanot -- -- -- Copy notes to clipboard -- Kopioi muistiinpanot leikepöydälle -- -- -- Copy &TOTP -- Kopioi &TOTP -- -- -- E&mpty recycle bin -- &Tyhjennä roskakori -- -- -- Clear history -- Tyhjennä historia -- -- -- Access error for config file %1 -- Pääsyvirhe asetustiedostoon %1 -- -- -- Settings -- Asetukset -- -- -- Toggle window -- Vaihda ikkunaan -- -- -- Quit KeePassXC -- Sulje KeePassXC -- -- -- Please touch the button on your YubiKey! -- Kosketa YubiKeyssa olevaa painiketta! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- VAROITUS: Käytät epävakaata KeePassXC-julkaisua! --On mahdollista, että tietokantasi korruptoituu. Pidä huolta sen varmuuskopiosta. --Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. -- -- -- &Donate -- &Lahjoita -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- VAROITUS: Qt-versiosi voi aiheuttaa KeePassXC:n kaatumisen näytön näppäimistöllä! --Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme. -- -- -- &Import -- &Tuo -- -- -- Create a new database -- Luo uusi tietokanta -- -- -- Merge from another KDBX database -- Yhdistä toisesta KDBX-tietokannasta -- -- -- Add a new entry -- Lisää uusi tietue -- -- -- View or edit entry -- Katso tai muokkaa tietuetta -- -- -- Add a new group -- Lisää uusi ryhmä -- -- -- Perform &Auto-Type -- Suorita &automaattitäydennys -- -- -- Open &URL -- &Avaa URL -- -- -- Import a KeePass 1 database -- Tuo KeePass 1 -tietokanta -- -- -- Import a CSV file -- Tuo CSV-tiedosto -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- HUOM: Käytät KeePassXC:n esiversiota! --Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäiseen käyttöön. -- -- -- Check for updates on startup? -- Tarkistetaanko päivitykset käynnistyksen yhteydessä? -- -- -- Would you like KeePassXC to check for updates on startup? -- Haluatko että KeePassXC tarkistaa päivitykset käynnistyessään? -- -- -- You can always check for updates manually from the application menu. -- Voit tarkistaa päivitykset manuaalisesti sovellusvalikosta. -- -- -- &Export -- &Vie -- -- -- Sort &A-Z -- Järjestä &A-Ö -- -- -- Sort &Z-A -- Järjestä &Ö-A -- -- -- &Password Generator -- &Salasanageneraattori -- -- -- Import a 1Password Vault -- Tuo 1Password-holvi -- -- -- &Getting Started -- &Alkuun pääsy -- -- -- &User Guide -- &Käyttäjäopas -- -- -- &Keyboard Shortcuts -- &Pikanäppäimet -- -- -- &Recent Databases -- &Viimeisimmät tietokannat -- -- -- &Entries -- &Tietueet -- -- -- Copy Att&ribute -- Kopioi att&ribuutti -- -- -- TOTP -- TOTP -- -- -- View -- Näytä -- -- -- Theme -- Teema -- -- -- &Check for Updates -- Tarkista &päivitykset -- -- -- &Open Database… -- &Avaa tietokanta… -- -- -- &Save Database -- &Tallenna tietokanta -- -- -- &Close Database -- &Sulje tietokanta -- -- -- &New Database… -- &Uusi tietokanta… -- -- -- &Merge From Database… -- &Yhdistä tietokannasta… -- -- -- &New Entry… -- &Uusi tietue… -- -- -- &Edit Entry… -- &Muokkaa tietuetta… -- -- -- &Delete Entry… -- &Poista tietue… -- -- -- &New Group… -- &Uusi ryhmä… -- -- -- &Edit Group… -- &Muokkaa ryhmää… -- -- -- &Delete Group… -- &Poista ryhmä… -- -- -- Download All &Favicons… -- Lataa kaikki &faviconit… -- -- -- Sa&ve Database As… -- Ta&llenna tietokanta nimellä… -- -- -- Database &Security… -- Tietokannan &turvallisuus… -- -- -- Database &Reports... -- Tietokannan &raportit... -- -- -- Statistics, health check, etc. -- Tilastot, kelvollisuuden tarkastus jne. -- -- -- &Database Settings… -- &Tietokannan asetukset… -- -- -- &Clone Entry… -- &Kloonaa tietue… -- -- -- Move u&p -- Siirrä &ylös -- -- -- Move entry one step up -- Siirrä tietue yksi rivi ylemmäs -- -- -- Move do&wn -- Siirrä &alas -- -- -- Move entry one step down -- Siirrä tietue yksi rivi alemmas -- -- -- Copy &Username -- Kopioi &käyttäjätunnus -- -- -- Copy &Password -- Kopioi &salasana -- -- -- Download &Favicon -- Lataa &favicon -- -- -- &Lock Databases -- &Lukitse tietokannat -- -- -- &CSV File… -- &CSV-tiedosto… -- -- -- &HTML File… -- &HTML-tiedosto… -- -- -- KeePass 1 Database… -- KeePass 1 -tietokanta -- -- -- 1Password Vault… -- !Password-holvi... -- -- -- CSV File… -- CSV-tiedosto... -- -- -- Show TOTP -- Näytä TOTP -- -- -- Show QR Code -- Näytä QR-koodi -- -- -- Set up TOTP… -- Aseta TOTP... -- -- -- Report a &Bug -- Ilmoita &virheestä -- -- -- Open Getting Started Guide -- Avaa alkuun pääsyyn tarkoitettu opas -- -- -- &Online Help -- &Verkko-ohje -- -- -- Go to online documentation -- Siirry online-dokumentaatioon -- -- -- Open User Guide -- Avaa käyttöopas -- -- -- Save Database Backup... -- Tallenna tietokannan varmuuskopio... -- -- -- Add key to SSH Agent -- Lisää avain SSH-agenttiin -- -- -- Remove key from SSH Agent -- Poista avain SSH-agentista -- -- -- Compact Mode -- Kompakti tila -- -- -- Automatic -- Automaattinen -- -- -- Light -- Vaalea -- -- -- Dark -- Tumma -- -- -- Classic (Platform-native) -- Klassinen (käyttöjärjestelmän oma) -- -- -- Show Toolbar -- Näytä työkalupalkki -- -- -- Show Preview Panel -- Näytä esikatselupaneeli -- -- -- Don't show again for this version -- Älä näytä uudestaan tälle versiolle -- -- -- Restart Application? -- Käynnistä ohjelma uudelleen? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? -- -- -- Perform Auto-Type Sequence -- Suorita automaattisyötön sekvenssi -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Piilota käyttäjänimet -- -- -- Hide Passwords -- Piilota salasanat -- -- -- -- ManageDatabase -- -- Database settings -- Tietokannan asetukset -- -- -- Edit database settings -- Muokkaa tietokannan asetuksia -- -- -- Unlock database -- Avaa tietokannan lukitus -- -- -- Unlock database to show more information -- Avaa tietokannan lukitus näyttääksesi enemmän tietoja -- -- -- Lock database -- Lukitse tietokanta -- -- -- -- ManageSession -- -- Disconnect -- Katkaise yhteys -- -- -- Disconnect this application -- Katkaise yhteys tältä ohjelmalta -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Luodaan puuttunutta %1 [%2] -- -- -- Relocating %1 [%2] -- Uudelleensijoitetaan %1 [%2] -- -- -- Overwriting %1 [%2] -- Ylikirjoitetaan %1 [%2] -- -- -- older entry merged from database "%1" -- vanhempi tietue yhdistetty tietokannasta "%1" -- -- -- Adding backup for older target %1 [%2] -- Lisätään varmuuskopio vanhemmalle kohteelle %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Lisätään varmuuskopio vanhemmalle lähteelle %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Uudelleensijoitetaan vanhempi kohdetietue uuden lähteen päälle %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Uudelleensijoitetaan vanhempi lähdetietue uuden kohteen päälle %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synkronoidaan uudemmasta lähteestä %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synkronoidaan vanhemmasta lähteestä %1 [%2] -- -- -- Deleting child %1 [%2] -- Poistetaan lasta %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Poistetaan orpoa %1 [%2] -- -- -- Changed deleted objects -- Muutettiin poistettuja kohteita -- -- -- Adding missing icon %1 -- Lisätään puuttuva ikoni %1 -- -- -- Removed custom data %1 [%2] -- Poista mukautettu tieto %1 [%2] -- -- -- Adding custom data %1 [%2] -- Lisätään mukautettua tietoa%1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Luo uusi KeePassXC-tietokanta... -- -- -- Root -- Root group -- Juuri -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Ohjattu sivu -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. -- -- -- Advanced Settings -- Lisäasetukset -- -- -- Simple Settings -- Yksinkertaiset asetukset -- -- -- Encryption Settings -- Salausasetukset -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Tietokannan tietueet -- -- -- A set of credentials known only to you that protects your database. -- Tietokannan suojelemiseksi tarkoitettu tietueiden ryhmä -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Salausasetukset -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Yleiset tietokannan tiedot -- -- -- Please fill in the display name and an optional description for your new database: -- Ole hyvä ja täytä tietokantasi nimi ja vapaaehtoinen kuvaus: -- -- -- -- NixUtils -- -- Password Manager -- Salasanamanageri -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Viallinen OpData01. Otsaketieto puuttuu -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Kaikkia IV-tavuja ei voitu lukea. Tarvittiin 16, mutta saatiin vain %1 -- -- -- Unable to init cipher for opdata01: %1 -- OpData01:n salakirjoitusta ei voitu alustaa: %1 -- -- -- Unable to read all HMAC signature bytes -- Kaikkia HMAC-allekirjoituksen tavuja ei voitu lukea -- -- -- Malformed OpData01 due to a failed HMAC -- Viallinen OpData01 epäonnistuneen HMAC:in vuoksi -- -- -- Unable to process clearText in place -- Selkotekstiä ei voitu prosessoida -- -- -- Expected %1 bytes of clear-text, found %2 -- Odotettiin %1 tavua selkotekstiä, löydettiin %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Tietokannan lukeminen ei luonut instanssia --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Hakemiston .opvault täytyy olla olemassa -- -- -- Directory .opvault must be readable -- Hakemistoon .opvault täytyy olla lukuoikeus -- -- -- Directory .opvault/default must exist -- Hakemisto .opvault/default täytyy olla olemassa -- -- -- Directory .opvault/default must be readable -- Hakemistoon .opvault/default täytyy olla lukuoikeus -- -- -- Unable to decode masterKey: %1 -- Pääavainta %1 ei voitu purkaa -- -- -- Unable to derive master key: %1 -- Pääavainta %1 ei kyetty johdattamaan -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Virheellinen avaintiedosto, odotetaan OpenSSH-avainta -- -- -- PEM boundary mismatch -- Yhteensopimaton PEM-raja-arvo -- -- -- Base64 decoding failed -- Base64-dekoodaus epäonnistui -- -- -- Key file way too small. -- Avaintiedosto aivan liian pieni. -- -- -- Key file magic header id invalid -- Otsaketietojen taikatunniste on virheellinen -- -- -- Found zero keys -- Löytyi nolla avainta -- -- -- Failed to read public key. -- Julkisen avaimen lukeminen epäonnistui. -- -- -- Corrupted key file, reading private key failed -- Rikkinäinen avaintiedosto, yksityisen avaimen lukeminen epäonnistui -- -- -- No private key payload to decrypt -- Salauksen purku epäonnistui: yksityisen avaimen sisältö on tyhjä -- -- -- Trying to run KDF without cipher -- Yritetään tehdä avainmuunnosfunktiota ilman salausta -- -- -- Passphrase is required to decrypt this key -- Avaimen purkuun vaaditaan salalause -- -- -- Key derivation failed, key file corrupted? -- Avaimen muuntaminen epäonnistui. Onko avaintiedosto korruptoitunut? -- -- -- Decryption failed, wrong passphrase? -- Salauksen purku epäonnistui, väärä salalause? -- -- -- Unexpected EOF while reading public key -- Odottamaton EOF julkista avainta luettaessa -- -- -- Unexpected EOF while reading private key -- Odottamaton EOF yksityistä avainta luettaessa -- -- -- Can't write public key as it is empty -- Ei voida kirjoittaa julkista avainta, koska se on tyhjä -- -- -- Unexpected EOF when writing public key -- Odottamaton EOF julkista avainta kirjoittaessa -- -- -- Can't write private key as it is empty -- Ei voida kirjoittaa yksityistä avainta, koska se on tyhjä -- -- -- Unexpected EOF when writing private key -- Odottamaton EOF yksityistä avainta kirjoittaessa -- -- -- Unsupported key type: %1 -- Tuntematon avaimen tyyppi: %1 -- -- -- Unknown cipher: %1 -- Tuntematon salausalgoritmi: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Salausalgoritmin alustusvektori on liian lyhyt MD5-avainmuunnosfunktiolle -- -- -- Unknown KDF: %1 -- Tuntematon avainmuunnosfunktio: %1 -- -- -- Unknown key type: %1 -- Tuntematon avaimen tyyppi: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Salasanat eivät täsmää -- -- -- Passwords match so far -- Salasanat jotka ovat tähän mennessä samoja -- -- -- Toggle Password (%1) -- Ota salasana käyttöön (%1) -- -- -- Generate Password (%1) -- Luo salasana (%1) -- -- -- Warning: Caps Lock enabled! -- Varoitus: Caps Lock on päällä! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Syötä salasana: -- -- -- Confirm password: -- Vahvista salasana: -- -- -- Password -- Salasana -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Salasana on kaikkein tärkein asia tietokannan suojauksessa.</p><p>Hyvät salasanat ovat pitkiä ja uniikkeja. KeePassXC voi luoda sellaisen sinulle.</p> -- -- -- Passwords do not match. -- Salasanat eivät ole samoja. -- -- -- Password field -- Salasanakenttä -- -- -- Repeat password field -- Toista salasana -kenttä -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- vahvuus -- -- -- entropy -- entropia -- -- -- Password -- Salasana -- -- -- Character Types -- Merkkityypit -- -- -- Numbers -- Numerot -- -- -- Extended ASCII -- Laajennettu ASCII -- -- -- Exclude look-alike characters -- Poissulje samannäköiset merkit -- -- -- Pick characters from every group -- Poimi merkkejä jokaisesta ryhmästä -- -- -- &Length: -- &Pituus: -- -- -- Passphrase -- Salalause -- -- -- Wordlist: -- Sanalista: -- -- -- Word Separator: -- Sanaerotin: -- -- -- Close -- Sulje -- -- -- Entropy: %1 bit -- Entropia: %1 bit -- -- -- Password Quality: %1 -- Salasanan laatu: %1 -- -- -- Poor -- Password quality -- Huono -- -- -- Weak -- Password quality -- Heikko -- -- -- Good -- Password quality -- Hyvä -- -- -- Excellent -- Password quality -- Erinomainen -- -- -- Switch to advanced mode -- Vaihda kehittyneeseen tilaan -- -- -- Advanced -- Lisäasetukset -- -- -- Braces -- Sulut -- -- -- Punctuation -- Välimerkit -- -- -- Quotes -- Lainausmerkit -- -- -- Logograms -- Erikoismerkit -- -- -- Character set to exclude from generated password -- Kirjaimet joita ei käytetä salasanan muodostukseen -- -- -- Do not include: -- Älä sisällytä: -- -- -- Add non-hex letters to "do not include" list -- Lisää heksakoodia sisältämättömät kirjaimet "älä sisällytä" -listaan -- -- -- Hex -- Heksa -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Poissuljetut kirjaimet: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Luotu salasana -- -- -- Upper-case letters -- Isot kirjaimet -- -- -- Lower-case letters -- Pienet kirjaimet -- -- -- Special characters -- Erikoismerkit -- -- -- Math Symbols -- Matemaattiset symbolit -- -- -- Dashes and Slashes -- Viivat ja vinoviivat -- -- -- Excluded characters -- Poissuljetut merkit -- -- -- Hex Passwords -- Heksasalasanat -- -- -- Password length -- Salasanan pituus -- -- -- Word Case: -- Aakkoslaji: -- -- -- Regenerate password -- Luo salasana uudelleen -- -- -- Copy password -- Kopioi salasana -- -- -- lower case -- pienaakkoset -- -- -- UPPER CASE -- SUURAAKKOSET -- -- -- Title Case -- Otsikon aakkoslaji -- -- -- Generate Password -- Luo salasana -- -- -- Also choose from: -- Valitse myös: -- -- -- Additional characters to use for the generated password -- Lisäkirjaimet joita käytetään salasanan luomisessa -- -- -- Additional characters -- Lisäkirjaimet -- -- -- Word Count: -- Sanamäärä: -- -- -- Esc -- Esc -- -- -- Apply Password -- Käytä salasanaa -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Luo salasana uudelleen (%1) -- -- -- Special Characters -- Erikoismerkit -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Tilastot -- -- -- Very weak password -- Erittäin heikko salasana -- -- -- Password entropy is %1 bits -- Salasanan entropia on %1 bittiä -- -- -- Weak password -- Heikko salasana -- -- -- Used in %1/%2 -- Käytetty %1/%2 -- -- -- Password is used %1 times -- Salasanaa on käytetty %1 kertaa -- -- -- Password has expired -- Salasana on vanhentunut -- -- -- Password expiry was %1 -- Salasana vanhentui %1 -- -- -- Password is about to expire -- Salasana on vanhentumassa -- -- -- Password expires in %1 days -- Salasana vanhentuu %1 päivässä -- -- -- Password will expire soon -- Salasana vanhenee pian -- -- -- Password expires on %1 -- Salasana vanhentuu %1 -- -- -- Health Check -- Diagnostiikka -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Korvaa -- -- -- Delete -- Poista -- -- -- Move -- Siirrä -- -- -- Empty -- Tyhjä -- -- -- Remove -- Poista -- -- -- Skip -- Ohita -- -- -- Disable -- Kytke pois päältä -- -- -- Merge -- Yhdistä -- -- -- Continue -- Jatka -- -- -- -- QObject -- -- Database not opened -- Tietokanta ei avattu -- -- -- Database hash not available -- Tietokannan tiivistettä (hash) ei saatu -- -- -- Client public key not received -- Asiakkaan julkista avainta ei saatu -- -- -- Cannot decrypt message -- Viestin salauksen purkaminen ei onnistu -- -- -- Action cancelled or denied -- Toiminto peruttiin tai estettiin -- -- -- KeePassXC association failed, try again -- Liittäminen KeePassXC:hen epäonnistui, yritä uudelleen -- -- -- Encryption key is not recognized -- Salausavainta ei tunnistettu -- -- -- Incorrect action -- Virheellinen toiminto -- -- -- Empty message received -- Vastaanotettiin tyhjä viesti -- -- -- No URL provided -- Sivuston osoitetta ei ole annettu -- -- -- No logins found -- Tunnuksia ei löydy -- -- -- Unknown error -- Tuntematon virhe -- -- -- Add a new entry to a database. -- Lisää uusi tietue tietokantaan. -- -- -- Path of the database. -- Tietokannan polku. -- -- -- Key file of the database. -- Tietokannan avaintiedosto. -- -- -- path -- polku -- -- -- Username for the entry. -- Tietueen käyttäjänimi. -- -- -- username -- käyttäjätunnus -- -- -- URL for the entry. -- Tietueen osoite. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Tietueen salasanan kuvaus. -- -- -- Generate a password for the entry. -- Luo tietueelle salasana. -- -- -- length -- pituus -- -- -- Path of the entry to add. -- Lisättävän tietueen polku. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Kopioitavan tietueen polku. -- -- -- Timeout in seconds before clearing the clipboard. -- Viive sekunneissa ennen leikepöydän tyhjentämistä. -- -- -- Edit an entry. -- Muokkaa tietuetta. -- -- -- Title for the entry. -- Tietueen nimi -- -- -- title -- nimi -- -- -- Path of the entry to edit. -- Muokattavan tietueen polku. -- -- -- Estimate the entropy of a password. -- Salasanan arvioitu entropia. -- -- -- Password for which to estimate the entropy. -- Salasana josta entropia arvioidaan. -- -- -- Perform advanced analysis on the password. -- Suorita salasanalle edistynyt analyysi. -- -- -- -- --Available commands: -- -- -- --Käytettävissä olevat komennot: -- -- -- -- Name of the command to execute. -- Suoritettavan komennon nimi. -- -- -- List database entries. -- Listaa tietokannan tietueet. -- -- -- Path of the group to list. Default is / -- Listattavan ryhmän polku. Oletus on / -- -- -- Find entries quickly. -- Etsi tietueita nopeasti. -- -- -- Search term. -- Hakutermi. -- -- -- Merge two databases. -- Yhdistä kaksi tietokantaa. -- -- -- Path of the database to merge from. -- Tietokannan polku, josta yhdistetään. -- -- -- Use the same credentials for both database files. -- Käytä samoja tilitietoja molemmille tietokantatiedostoille. -- -- -- Key file of the database to merge from. -- Tietokannan avaintiedosto, josta yhdistetään. -- -- -- Show an entry's information. -- Näytä tietueen tiedot. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Näytettävien attribuuttien nimi. Tämän asetuksen voi määrittää useammin kuin kerran, jokaisen attribuutin näkyessä omalla rivillään annetussa järjestyksessä. Jos attribuutteja ei ole määritetty, näytetään yhteenveto oletuksista. -- -- -- attribute -- attribuutti -- -- -- Name of the entry to show. -- Näytettävän tietueen nimi. -- -- -- NULL device -- Tyhjä laite (NULL) -- -- -- error reading from device -- virhe laitteelta luettaessa -- -- -- malformed string -- Viallinen merkkijono -- -- -- missing closing quote -- lainausmerkki puuttuu lopusta -- -- -- Group -- Ryhmä -- -- -- Title -- Otsikko -- -- -- Username -- Käyttäjätunnus -- -- -- Password -- Salasana -- -- -- Notes -- Muistiinpanot -- -- -- Last Modified -- Viimeksi muokattu -- -- -- Created -- Luotu -- -- -- Browser Integration -- Selainintegraatio -- -- -- SSH Agent -- SSH-agentti -- -- -- Generate a new random diceware passphrase. -- Luo uusi satunnainen noppaware-salalause -- -- -- Word count for the diceware passphrase. -- Sanamäärä noppaware-salalauseelle. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Sanalista noppaware-luojalle. --[Oletus: EFF Englanti] -- -- -- Generate a new random password. -- Luo uusi satunnainen salasana. -- -- -- Could not create entry with path %1. -- Tietuetta ei voitu luoda polun %1 kanssa. -- -- -- Enter password for new entry: -- Anna uuden tietueen salasana: -- -- -- Writing the database failed %1. -- Tietokantaan kirjoittaminen epäonnistui %1. -- -- -- Successfully added entry %1. -- Tietueen %1 lisäys onnistui. -- -- -- Invalid timeout value %1. -- Virheellinen aikakatkaisun arvo %1. -- -- -- Entry %1 not found. -- Tietuetta %1 ei löytynyt. -- -- -- Entry with path %1 has no TOTP set up. -- Tietueella joka käyttää polkua %1 ei ole TOTP:ia asetettuna. -- -- -- Clearing the clipboard in %1 second(s)... -- Tyhjennetään leikepöytä %1 sekunnissa...Tyhjennetään leikepöytä %1 sekunnissa... -- -- -- Clipboard cleared! -- Leikepöytä tyhjennetty! -- -- -- Silence password prompt and other secondary outputs. -- Hiljennä salasanamuistutus ja muut toissijaiset tulostukset. -- -- -- count -- CLI parameter -- määrä -- -- -- Could not find entry with path %1. -- Tietuetta polulla %1 ei löydetty. -- -- -- Not changing any field for entry %1. -- Yhtään kenttää tietueelle %1 ei vaihdettu. -- -- -- Enter new password for entry: -- Anna tietueelle uusi salasana: -- -- -- Writing the database failed: %1 -- Tietokannan kirjoittaminen epäonnistui: %1 -- -- -- Successfully edited entry %1. -- Tietuetta %1 muokattiin onnistuneesti. -- -- -- Length %1 -- Pituus %1 -- -- -- Entropy %1 -- Entropia %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Monisanaiset ylimääräiset tavut %1 -- -- -- Type: Bruteforce -- Tyyppi: Väsytyshyökkäys -- -- -- Type: Dictionary -- Tyyppi: Sanakirja -- -- -- Type: Dict+Leet -- Tyyppi: Sanakirja + Leet -- -- -- Type: User Words -- Tyyppi: Käyttäjän sanat -- -- -- Type: User+Leet -- Tyyppi: Käyttäjän sanat + Leet -- -- -- Type: Repeated -- Tyyppi: Toistettu -- -- -- Type: Sequence -- Tyyppi: Sekvenssi -- -- -- Type: Spatial -- Tyyppi: Spatiaalinen -- -- -- Type: Date -- Tyyppi: Päivämäärä -- -- -- Type: Bruteforce(Rep) -- Tyyppi: Väsytyshyökkäys (toistettu) -- -- -- Type: Dictionary(Rep) -- Tyyppi: Sanakirja (toistettu) -- -- -- Type: Dict+Leet(Rep) -- Tyyppi: Sanakirja + Leet (toistettu) -- -- -- Type: User Words(Rep) -- Tyyppi: Käyttäjän sanat (toistettu) -- -- -- Type: User+Leet(Rep) -- Tyyppi: Käyttäjän sanat + Leet (toistettu) -- -- -- Type: Repeated(Rep) -- Tyyppi: Toistettu (toistettu) -- -- -- Type: Sequence(Rep) -- Tyyppi: Sekvenssi (toistettu) -- -- -- Type: Spatial(Rep) -- Tyyppi: Spatiaalinen (toistettu) -- -- -- Type: Date(Rep) -- Tyyppi: Päivämäärä (toistettu) -- -- -- Type: Unknown%1 -- Tyyppi: Tuntematon %1 -- -- -- Entropy %1 (%2) -- Entropia %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Salasanan pituus (%1) != osien (%2) summa *** -- -- -- Failed to load key file %1: %2 -- Avaintiedoston %1 lataaminen epäonnistui: %2 -- -- -- Length of the generated password -- Luodun salasanan pituus -- -- -- Use lowercase characters -- Käytiä pieniä merkkejä -- -- -- Use uppercase characters -- Käytä isoja merkkejä -- -- -- Use special characters -- Käytä erikoismerkkejä -- -- -- Use extended ASCII -- Käytä laajennettua ASCII-merkistöä -- -- -- Exclude character set -- Älä sisällytä merkkejä -- -- -- chars -- merkit -- -- -- Exclude similar looking characters -- Älä sisällytä samankaltaisilta vaikuttavia kirjaimia -- -- -- Include characters from every selected group -- Sisällytä kirjaimia jokaisesta valitusta ryhmästä -- -- -- Recursively list the elements of the group. -- Listaa ryhmän elementit rekursiivisesti -- -- -- Cannot find group %1. -- Ryhmää %1 ei löytynyt. -- -- -- Error reading merge file: --%1 -- Virhe lukiessa yhdistämiseen tarvittavaa tiedostoa: --%1 -- -- -- Unable to save database to file : %1 -- Tietokannan tallentaminen tiedostoon ei onnistu: %1 -- -- -- Unable to save database to file: %1 -- Tietokantaa ei voitu tallentaa tiedostoon: %1 -- -- -- Successfully recycled entry %1. -- Tietue %1 siirrettiin onnistuneesti roskakoriin. -- -- -- Successfully deleted entry %1. -- Tietue %1 poistettiin onnistuneesti. -- -- -- Show the entry's current TOTP. -- Näytä tietueen tämän hetkinen TOTP. -- -- -- ERROR: unknown attribute %1. -- VIRHE: Tuntematon attribuutti %1. -- -- -- No program defined for clipboard manipulation -- Ohjelmaa leikepöydän hallintaan ei ole määritelty. -- -- -- file empty -- tyhjä tiedosto -- -- -- %1: (row, col) %2,%3 -- %1: (rivi, sarake) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Virheelliset asetukset -- -- -- Invalid Key -- TOTP -- Virheellinen avain -- -- -- Message encryption failed. -- Viestin salaus epäonnistui -- -- -- No groups found -- Ryhmiä ei löytynyt -- -- -- Create a new database. -- Luo uusi tietokanta. -- -- -- File %1 already exists. -- Tiedosto %1 on jo olemassa. -- -- -- Loading the key file failed -- Avaintiedoston lataaminen epäonnistui -- -- -- No key is set. Aborting database creation. -- Avainta ei ole asetettu. Perutaan tietokannan luominen. -- -- -- Failed to save the database: %1. -- Tietokannan tallentaminen epäonnistui: %1. -- -- -- Successfully created new database. -- Luotiin onnistuneesti uusi tietokanta. -- -- -- Creating KeyFile %1 failed: %2 -- Avaintiedoston %1 luonti epäonnistui: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Avaintiedoston %1 lataus epäonnistui: %2 -- -- -- Path of the entry to remove. -- Poistettavan tietueen polku. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus -- -- -- filenames of the password databases to open (*.kdbx) -- avattavien salasanatietokantojen tiedostonimet (*.kdbx) -- -- -- path to a custom config file -- polku mukautettuun asetustiedostoon -- -- -- key file of the database -- tietokannan avaintiedosto -- -- -- read password of the database from stdin -- lue tietokannan salasana stdin:istä -- -- -- Another instance of KeePassXC is already running. -- Toinen KeePassXC-instanssi on jo käynnissä. -- -- -- Fatal error while testing the cryptographic functions. -- Vakava virhe kryptografisia toimintoa testattaessa. -- -- -- KeePassXC - Error -- KeePassXC - Virhe -- -- -- Database password: -- Tietokannan salasana: -- -- -- Cannot create new group -- Uutta ryhmää ei voitu luoda -- -- -- Deactivate password key for the database. -- Poista salasana-avain tietokannasta. -- -- -- Displays debugging information. -- Näytä virheenjäljitystiedot. -- -- -- Deactivate password key for the database to merge from. -- Ota salasana-avain pois käytöstä tietokannasta josta yhdistetään. -- -- -- Version %1 -- Versio %1 -- -- -- Build Type: %1 -- Ohjelmiston tyyppi -- -- -- Revision: %1 -- Revisio: %1 -- -- -- Distribution: %1 -- Jakelu: %1 -- -- -- Debugging mode is disabled. -- Virheenjäljitystila on pois päältä. -- -- -- Debugging mode is enabled. -- Virheenjäljitystila on päällä. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Käyttöjärjestelmä: %1 --Suoritinarkkitehtuuri: %2 --Ydin: %3 %4 -- -- -- Auto-Type -- Automaattisyöttö -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (allekirjoitettu ja allekirjoittamaton jakaminen) -- -- -- KeeShare (only signed sharing) -- KeeShare (vain allekirjoitettu jakaminen) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (vain allekirjoittamaton jakaminen) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Ei mitään -- -- -- Enabled extensions: -- Käytössä olevat laajennukset: -- -- -- Cryptographic libraries: -- Kryptografiakirjastot: -- -- -- Cannot generate a password and prompt at the same time! -- Salasanaa ei voida luoda ja asettaa yhtäaikaisesti! -- -- -- Adds a new group to a database. -- Lisää uuden ryhmän tietokantaan. -- -- -- Path of the group to add. -- Lisättävän ryhmän polku. -- -- -- Group %1 already exists! -- Ryhmä %1 on jo olemassa! -- -- -- Group %1 not found. -- Ryhmää %1 ei löydy. -- -- -- Successfully added group %1. -- Ryhmä %1 lisättiin onnistuneesti. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Tarkista onko yksikään salanoista julkisesti vuotanut. TIEDOSTONIMEN täytyy osoittaa sijaintiin tiedostosta, joka listaa SHA-1 -tiivisteet vuotaneista salasanoista HIBP-muodossa, kuten sivusto https://haveibeenpwned.com/Passwords tarjoaa. -- -- -- FILENAME -- TIEDOSTONIMI -- -- -- Analyze passwords for weaknesses and problems. -- Analysoi salasanojen heikkouksia ja ongelmia. -- -- -- Failed to open HIBP file %1: %2 -- HIBP-tiedoston %1 avaus epäonnistui: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Tarkastetaan tietokantaa HIBP-tiedostoa vasten, tämä kestää hetken aikaa... -- -- -- Close the currently opened database. -- Sulje parhaillaan avoinna oleva tietokanta. -- -- -- Display this help. -- Näytä tämä ohje. -- -- -- slot -- paikka -- -- -- Invalid word count %1 -- Väärä sanamäärä %1 -- -- -- The word list is too small (< 1000 items) -- Sanalista on liian pieni (< 1000 sanaa) -- -- -- Exit interactive mode. -- Poistu interaktiivisesta tilasta. -- -- -- Exports the content of a database to standard output in the specified format. -- Vie tietokannan sisällön standardiin tulosteeseen (stdout) halutussa formaatissa. -- -- -- Unable to export database to XML: %1 -- Tietokantaa ei voitu viedä XML-muotoon: %1 -- -- -- Unsupported format %1 -- Formaattia %1 ei ole tuettu -- -- -- Use numbers -- Käytä numeroita -- -- -- Invalid password length %1 -- Väärä salasanan pituus %1 -- -- -- Display command help. -- Näytä komento-ohjeistus -- -- -- Available commands: -- Käytettävissä olevat komennot: -- -- -- Import the contents of an XML database. -- Tuo XML-tietokannan sisältö. -- -- -- Path of the XML database export. -- Tietokannan XML-viennin polku. -- -- -- Path of the new database. -- Uuden tietokannan polku. -- -- -- Successfully imported database. -- Tietokanta tuotiin onnistuneesti. -- -- -- Unknown command %1 -- Tuntematon komento %1 -- -- -- Flattens the output to single lines. -- Tasoittaa tulostuksen yksittäisille riveille. -- -- -- Only print the changes detected by the merge operation. -- Tulosta vain yhdistämisessä havaitut muutokset. -- -- -- Yubikey slot for the second database. -- Yukibey-paikka toiselle tietokannalle. -- -- -- Successfully merged %1 into %2. -- %1 yhdistettiin onnistuneesti kohteeseen %2 -- -- -- Database was not modified by merge operation. -- Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. -- -- -- Moves an entry to a new group. -- Siirtää tietueen uuteen ryhmään. -- -- -- Path of the entry to move. -- Siirrettävän tietueen polku. -- -- -- Path of the destination group. -- Kohderyhmän polku. -- -- -- Could not find group with path %1. -- Ryhmää ei voitu löytää polussa %1. -- -- -- Entry is already in group %1. -- Tietue on jo ryhmässä %1. -- -- -- Successfully moved entry %1 to group %2. -- Siirrettiin onnistuneesti tietue %1 ryhmään %2. -- -- -- Open a database. -- Avaa tietokanta. -- -- -- Path of the group to remove. -- Poistettavan ryhmän polku. -- -- -- Cannot remove root group from database. -- Juuriryhmää ei voida poistaa tietokannasta. -- -- -- Successfully recycled group %1. -- Ryhmä %1 siirrettiin onnistuneesti roskakoriin. -- -- -- Successfully deleted group %1. -- Ryhmä %1 poistettiin onnistuneesti. -- -- -- Failed to open database file %1: not found -- Tietokantatiedoston %1 avaus epäonnistui: ei löytynyt -- -- -- Failed to open database file %1: not a plain file -- Tietokantatiedostoa %1 ei voitu avata: ei ole tavallinen tiedosto -- -- -- Failed to open database file %1: not readable -- Tietokantatiedoston %1 avaus epäonnistui: ei luettavissa -- -- -- Enter password to unlock %1: -- Syötä salasana avataksesi %1: -- -- -- Invalid YubiKey slot %1 -- Virheellinen Yubikey-paikka %1 -- -- -- Enter password to encrypt database (optional): -- Syötä salasana salataksesi tietokannan (valinnainen): -- -- -- HIBP file, line %1: parse error -- HIBP-tiedosto, rivi %1: jäsennysvirhe -- -- -- Secret Service Integration -- Secret Service -integraatio -- -- -- User name -- Käyttäjätunnus -- -- -- Password for '%1' has been leaked %2 time(s)! -- Salasana palveluun '%1' on vuotanut %1 kerran!Salasana palveluun '%1' on vuotanut %2 kertaa! -- -- -- Invalid password generator after applying all options -- Virheellinen salasanageneraattori kaikkien aktiivisten asetusten kanssa -- -- -- Show the protected attributes in clear text. -- Näytä suojatut attribuutit selkotekstinä. -- -- -- Browser Plugin Failure -- Selainliitännän virhe -- -- -- Could not save the native messaging script file for %1. -- Native messaging -skriptatiedostoa ei voitu tallentaa %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Kopioi annettu attribuutti leikepöydälle. Asetetaan oletukseen "password", mikäli tätä ei ole asetettu. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Kopioi tämän hetkinen TOTP leikepöydälle (sama kuin "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Kopioi tietueen attribuutti leikepöydälle -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- VIRHE: Määritä joko --attribute tai --totp, mutta älä molempia. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- VIRHE: attribuutti %1 on epäselvä, se sopii yhteen %2 kanssa. -- -- -- Attribute "%1" not found. -- Attribuuttia "%1" ei löydy. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Tietueen "%1" attribuutti on kopioitu leikepöydälle! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikeyn paikka ja valinnainen serial tietokannan pääsyyn (esim. 1:7370001). -- -- -- slot[:serial] -- paikka[:serial] -- -- -- Target decryption time in MS for the database. -- Kohteen salauksen purkuun kuluva aika millisekunneissa tietokannalle. -- -- -- time -- aika -- -- -- Set the key file for the database. -- Syötä tietokannan avaintiedosto. -- -- -- Set a password for the database. -- Syötä tietokannan salasana. -- -- -- Invalid decryption time %1. -- Virheellinen salauksen purun aika %1. -- -- -- Target decryption time must be between %1 and %2. -- Kohteen salauksen purkuun kuluva aika täytyy olla välillä %1 ja %2. -- -- -- Failed to set database password. -- Tietokannan salasanan asettaminen ei onnistunut. -- -- -- Benchmarking key derivation function for %1ms delay. -- Verrataan avainmuunnosfunktiota %1 ms:n viiveelle. -- -- -- Setting %1 rounds for key derivation function. -- Asetetaan %1 kierrosta avainmuunnosfunktiolle. -- -- -- error while setting database key derivation settings. -- Virhe asetettaessa tietokannan avainmuunnosfunktion asetuksia. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Viennissä käytettävä formaatti. Mahdolliset vaihtoehdot ovat 'xml' tai 'csv'. Oletus on 'xml'. -- -- -- Unable to import XML database: %1 -- XML-muodossa olevaa tietokantaa ei voitu tuoda: %1 -- -- -- Show a database's information. -- Näytä tietokannan tiedot. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nimi: -- -- -- Description: -- Kuvaus: -- -- -- Cipher: -- Salaus: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Roskakori on otettu käyttöön. -- -- -- Recycle bin is not enabled. -- Roskakori ei ole käytössä. -- -- -- Invalid command %1. -- Virheellinen komento %1. -- -- -- Invalid YubiKey serial %1 -- Virheellinen Yubikeyn serial %1 -- -- -- Please touch the button on your YubiKey to continue… -- Ole hyvä ja paina Yubikeyssä olevaa painiketta jatkaaksesi... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Haluatko luoda tietokannan tyhjällä salasanalla? [k/E]: -- -- -- Repeat password: -- Toista salasana: -- -- -- Error: Passwords do not match. -- Virhe: Salasanat eivät ole samoja. -- -- -- All clipping programs failed. Tried %1 -- -- Kaikki leikkaavat ohjelmat epäonnistuivat. Kokeiltiin %1 -- -- -- -- AES (%1 rounds) -- AES (%1 kierrosta) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Mittaa %1 viive -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Kuvake -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Sisäinen zlib virhe pakatessa: -- -- -- Error writing to underlying device: -- Kirjoitus taustalla olevaan laitteeseen epäonnistui: -- -- -- Error opening underlying device: -- Taustalla olevan laitteen avaus epäonnistui: -- -- -- Error reading data from underlying device: -- Virhe luettaessa taustalla olevasta laitteesta: -- -- -- Internal zlib error when decompressing: -- Sisäinen zlib-virhe purkaessa: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- gzip-formaatti ei ole tuettu tässä zlib-versiossa. -- -- -- Internal zlib error: -- Sisäinen zlib-virhe: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Näytä myös ne tietueet jotka on poissuljettu raporteista -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Siirrä kursori syyn päälle nähdäksesi lisätietoja. Tuplaklikkaa tietueita muokataksesi niitä. -- -- -- Bad -- Password quality -- Paha -- -- -- Bad — password must be changed -- Paha - salasana on vaihdettava -- -- -- Poor -- Password quality -- Huono -- -- -- Poor — password should be changed -- Heikko - salasana on vaihdettava -- -- -- Weak -- Password quality -- Heikko -- -- -- Weak — consider changing the password -- Heikohko - salasana on vaihdettava -- -- -- (Excluded) -- (Poissuljettu) -- -- -- This entry is being excluded from reports -- Tämä tietue on poissuljettu raporteista -- -- -- Please wait, health data is being calculated... -- Odota hetki, diagnostiikkaa lasketaan... -- -- -- Congratulations, everything is healthy! -- Onneksi olkoon, kaikki on kunnossa! -- -- -- Title -- Otsikko -- -- -- Path -- Polku -- -- -- Score -- Pisteytys -- -- -- Reason -- Syy -- -- -- Edit Entry... -- Muokkaa tietuetta... -- -- -- Exclude from reports -- Poissulje raporteista -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- HUOMIO: Tämä raportti lähettää tietoa Have I Been Pwned -palveluun (https://haveibeenpwned.com). Jos jatkat, tietokantasi salasanat tiivistetään ja viisi ensimmäistä kirjainta tästä tiivisteestä lähetetään turvallisesti palvelimelle. Tietokantasi pysyy turvassa, eikä sen tietoja voida kerätä tätä informaatiota käyttäen. Salasanojesi määrä ja IP-osoitteesi tosin lähetetään palvelimelle. -- -- -- Perform Online Analysis -- Suorita online-analyysi -- -- -- Also show entries that have been excluded from reports -- Näytä myös ne tietueet jotka on otettu pois raporteista -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Tässä KeePassXC:n build-versiossa ei ole verkkotoiminnallisuuksia. Verkkotoiminnallisuus vaaditaan, jotta voit tarkistaa salasanojasi Have I Been Pwned -tietokannasta. -- -- -- Congratulations, no exposed passwords! -- Onneksi olkoon, salasanojasi ei ole vuotanut! -- -- -- Title -- Otsikko -- -- -- Path -- Polku -- -- -- Password exposed… -- Salasana vuotanut... -- -- -- (Excluded) -- (Poissuljettu) -- -- -- This entry is being excluded from reports -- Tämä tietue on poissuljettu raporteista -- -- -- once -- kerran -- -- -- up to 10 times -- jopa kymmenen kertaa -- -- -- up to 100 times -- jopa sata kertaa -- -- -- up to 1000 times -- jopa tuhat kertaa -- -- -- up to 10,000 times -- jopa 10 000 kertaa -- -- -- up to 100,000 times -- jopa 100 000 kertaa -- -- -- up to a million times -- jopa miljoona kertaa -- -- -- millions of times -- miljoonia kertoja -- -- -- Edit Entry... -- Muokkaa tietuetta... -- -- -- Exclude from reports -- Poissulje raporteista -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Liiku virheikonin sisältävän rivin päälle saadaksesi lisätietoa. -- -- -- Name -- Nimi -- -- -- Value -- Arvo -- -- -- Please wait, database statistics are being calculated... -- Odota hetki, lasketaan tietokannan statistiikkaa... -- -- -- Database name -- Tietokannan nimi -- -- -- Description -- Kuvaus -- -- -- Location -- Sijainti -- -- -- Last saved -- Viimeksi tallennettu -- -- -- Unsaved changes -- Tallentamattomia muutoksia -- -- -- yes -- kyllä -- -- -- no -- ei -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Tietokantaa muokattiin, mutta muutoksia ei ole tallennettu levylle. -- -- -- Number of groups -- Ryhmien määrä -- -- -- Number of entries -- Tietueiden lukumäärä -- -- -- Number of expired entries -- Vanhentuneiden tietueiden lukumäärä -- -- -- The database contains entries that have expired. -- Tietokanta sisältää tietueita jotka ovat vanhentuneet. -- -- -- Unique passwords -- Yksilöllisiä salasanoja -- -- -- Non-unique passwords -- Ei-yksilöllisiä salasanoja -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Salasanoista enemmän kuin 10% ovat samoja. Käytä yksilöllisiä salasanoja aina kun mahdollista. -- -- -- Maximum password reuse -- Maksimimäärä samoja salasanoja -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Salasanoista osa on käytössä useammassa kuin kolmessa tietueessa. Käytä yksilöllisiä salasanoja aina kun mahdollista. -- -- -- Number of short passwords -- Lyhyiden salasanojen määrä -- -- -- Recommended minimum password length is at least 8 characters. -- Salasanan suositeltu minimipituus on vähintään 8 merkkiä. -- -- -- Number of weak passwords -- Heikkojen salasanojen määrä -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- On suositeltavaa käyttää salasanoja joiden luokitus on 'hyvä' tai 'erinomainen'. -- -- -- Entries excluded from reports -- Tietueet jotka on poissuljettu raporteista -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Poissuljetut tietueet raporteista, esim. joissa tiedetään olevan heikko salasana, eivät välttämättä ole ongelma, mutta niitä kannattaa pitää silmällä. -- -- -- Average password length -- Salasanan keskimääräinen pituus -- -- -- %1 characters -- %1 merkkiä -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Salasanojen keskimääräinen pituus on vähemmän kuin kymmenen merkkiä. Pidemmät salasanat ovat turvallisempia. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agentin yhteydenotto epäonnistui. -- -- -- Agent protocol error. -- Agentin protokollavirhe. -- -- -- No agent running, cannot add identity. -- Agentti ei ole käynnissä. Identiteettiä ei voitu lisätä. -- -- -- No agent running, cannot remove identity. -- Agentti ei ole käynnissä. Identiteettiä ei voitu poistaa. -- -- -- Agent refused this identity. Possible reasons include: -- Agentti hylkäsi tämän identiteetin. Mahdolliset syyt sisältävät: -- -- -- The key has already been added. -- Avain on jo lisätty. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Agentti ei tue rajoitettua käyttöikää (tarkista asetukset). -- -- -- A confirmation request is not supported by the agent (check options). -- Agentti ei tue vahvistuspyyntöä (tarkista asetukset). -- -- -- Key identity ownership conflict. Refusing to add. -- Avaimen tunnisteen omistajaristiriita. Lisäystä ei tehdä. -- -- -- No agent running, cannot list identities. -- Agentti ei ole päällä, tunnisteita ei voi listata. -- -- -- -- SearchHelpWidget -- -- Search Help -- Etsi apua -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Hakutermit ovat seuraavat: [modifikaattorit][kenttä:]["]termi["] -- -- -- Every search term must match (ie, logical AND) -- Jokaisen hakutermin on sovittava yhteen (esim. looginen AND) -- -- -- Modifiers -- Modifikaattorit -- -- -- exclude term from results -- älä sisällytä termiä hakutuloksiin -- -- -- match term exactly -- termin on sovittava täysin yhteen -- -- -- use regex in term -- käytä termissä regex:iä -- -- -- Fields -- Kentät -- -- -- Term Wildcards -- Termin jokerimerkit (wildcards) -- -- -- match anything -- vastaa minkä tahansa kanssa -- -- -- match one -- vastaa yhtä -- -- -- logical OR -- looginen OR -- -- -- Examples -- Esimerkit -- -- -- -- SearchWidget -- -- Search -- Etsi -- -- -- Limit search to selected group -- Rajoita haku valittuun ryhmään -- -- -- Search Help -- Etsi apua -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Etsi (%1)... -- -- -- Case sensitive -- Merkkikokoriippuvainen -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Valinnat -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Käytä KeePassXC:ssä Freedesktop.org:in Secret Service -integraatiota -- -- -- General -- Yleistä -- -- -- Show notification when credentials are requested -- Näytä ilmoitus, kun tilitietoja pyydetään -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Jos tietokannassa on roskakori, tietueet siirretään suoraan sinne. Muussa tapauksessa ne poistetaan ilman vahvistusta.</p><p>Huomautus näytetään, mikäli tietue viittaa johonkin toiseen tietueeseen.</p></body></html> -- -- -- Exposed database groups: -- Avoimet tietokannan ryhmät: -- -- -- Authorization -- Valtuutus -- -- -- These applications are currently connected: -- Nämä sovellukset ovat parhaillaan yhdistetty: -- -- -- Don't confirm when entries are deleted by clients -- Älä varmista, kun tietueita tuhotaan asiakkaan kautta -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Virhe:</b> DBus:iin ei voitu yhdistää. Tarkista DBus-asetuksesi. -- -- -- <b>Warning:</b> -- <b>Varoitus:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Tallenna tämän hetkiset muutokset aktivoidaksesi laajennus ja salliaksesi tämä osa-alueen muokkaamisen. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktiivinen -- -- -- Allow export -- Salli vienti -- -- -- Allow import -- Salli tuonti -- -- -- Own certificate -- Oma varmenne -- -- -- Fingerprint: -- Sormenjälki: -- -- -- Certificate: -- Varmenne: -- -- -- Signer -- Allekirjoittaja -- -- -- Key: -- Avain: -- -- -- Generate -- Luo -- -- -- Import -- Tuo -- -- -- Export -- Vie -- -- -- Imported certificates -- Tuodut varmenteet -- -- -- Trust -- Luota -- -- -- Ask -- Kysy -- -- -- Untrust -- Älä luota -- -- -- Remove -- Poista -- -- -- Path -- Polku -- -- -- Status -- Tila -- -- -- Fingerprint -- Sormenjälki -- -- -- Certificate -- Varmenne -- -- -- Trusted -- Luotettu -- -- -- Untrusted -- Ei luotettu -- -- -- Unknown -- Tuntematon -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare-avaintiedosto -- -- -- All files -- Kaikki tiedostot -- -- -- Select path -- Valitse polku -- -- -- Exporting changed certificate -- Viedään muuttuneita sertifikaatteja -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Viety sertifikaatti ei ole sama kuin käytössä oleva. Haluatko viedä tämän hetkisen sertifikaatin? -- -- -- Signer: -- Allekirjoittaja: -- -- -- Allow KeeShare imports -- Salli KeeSharen tuonnit -- -- -- Allow KeeShare exports -- Salli KeeSharen viennit -- -- -- Only show warnings and errors -- Näytä vain varoitukset ja virheet -- -- -- Key -- Avain -- -- -- Signer name field -- Allekirjoittajan nimen kenttä -- -- -- Generate new certificate -- Luo uusi varmenne -- -- -- Import existing certificate -- Tuo olemassa oleva varmenne -- -- -- Export own certificate -- Vie oma varmenne -- -- -- Known shares -- Tunnetut jaot -- -- -- Trust selected certificate -- Luota valittuun varmenteeseen -- -- -- Ask whether to trust the selected certificate every time -- Kysy joka kerta luotetaanko valittuun varmenteeseen -- -- -- Untrust selected certificate -- Älä luota valittuun varmenteeseen -- -- -- Remove selected certificate -- Poista valittu varmenne -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Allekirjoitetun jaetun säiliön ylikirjoittaminen ei ole tuettu - vienti estettiin -- -- -- Could not write export container (%1) -- Vietyä säiliötä ei voitu kirjoittaa (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Allekirjoitusta ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Allekirjoitusta ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Tietokantaa ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1) -- -- -- Could not embed database: Could not write file (%1) -- Tietokantaa ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Allekirjoittamattoman jaetun säiliön ylikirjoitus ei ole tuettu - vienti estettiin -- -- -- Could not write export container -- Vietyä säiliötä ei voitu kirjoittaa -- -- -- Unexpected export error occurred -- Tapahtui odottamaton vientivirhe -- -- -- -- ShareImport -- -- Import from container without signature -- Tuo säiliöstä ilman allekirjoitusta -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Jaetun säiliön lähdettä ei voitu vahvistaa, sillä se ei ole allekirjoitettu. Haluatko todella tuoda sen kohteesta %1? -- -- -- Import from container with certificate -- Tuo säiliöstä sertifikaatin kanssa -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Haluatko luottaa kohteeseen %1 sormenjäljellä %2, joka on peräisin kohteesta %3? {1 ?} {2 ?} -- -- -- Not this time -- Ei tällä kertaa -- -- -- Never -- Ei koskaan -- -- -- Always -- Aina -- -- -- Just this time -- Vain tämän kerran -- -- -- Signed share container are not supported - import prevented -- Allekirjoitettu jaettu säiliö ei ole tuettu - tuonti estettiin -- -- -- File is not readable -- Tiedosto ei ole luettavissa -- -- -- Invalid sharing container -- Virheellinen jaettu säiliö -- -- -- Untrusted import prevented -- Ei-luotettu tuonti estettiin -- -- -- Successful signed import -- Onnistunut allekirjoitettu tuonti -- -- -- Unsigned share container are not supported - import prevented -- Allekirjoittamattoman jaetut säiliöt eivät ole tuettu - tuonti estettiin -- -- -- Successful unsigned import -- Onnistunut allekirjoittamaton tuonti -- -- -- File does not exist -- Tiedostoa ei ole olemassa -- -- -- Unknown share container type -- Tuntematon jaetun säiliön tyyppi -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Tuonti kohteesta %1 epäonnistui (%2) -- -- -- Import from %1 successful (%2) -- Tuonti kohteesta %1 onnistui (%2) -- -- -- Imported from %1 -- Tuotu kohteesta %1 -- -- -- Export to %1 failed (%2) -- Vienti kohteeseen %1 epäonnistui (%2) -- -- -- Export to %1 successful (%2) -- Vienti kohteeseen %1 onnistui (%2) -- -- -- Export to %1 -- Vie kohteeseen %1 -- -- -- Multiple import source path to %1 in %2 -- Useampi lähde kohteeseen %1 tuonnissa %2 -- -- -- Conflicting export target path %1 in %2 -- Ristiriita viennin %2 kohdepolussa %1 -- -- -- -- TotpDialog -- -- Timed Password -- Ajastettu salasana -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopioi -- -- -- Expires in <b>%n</b> second(s) -- Umpeutuu <b>%n</b> sekunnin kuluttuaUmpeutuu <b>%n</b> sekunnin kuluttua -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopioi -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- HUOM: Nämä TOTP-asetukset ovat mukautettuja eivätkä ne välttämättä toimi muiden autentikaattoreiden kanssa. -- -- -- There was an error creating the QR code. -- QR-koodia luotaessa tapahtui virhe. -- -- -- Closing in %1 seconds. -- Suljetaan %1 sekunnin kuluttua. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Määritä TOTP -- -- -- Default RFC 6238 token settings -- Oletusarvoiset RFC 6238:n mukaiset tunnisteasetukset -- -- -- Steam token settings -- Steam-tunnisteen asetukset -- -- -- Use custom settings -- Käytä mukautettuja asetuksia -- -- -- Custom Settings -- Mukautetut asetukset -- -- -- Time step: -- Aikaväli: -- -- -- sec -- Seconds -- s -- -- -- Code size: -- Koodikoko: -- -- -- Secret Key: -- Salainen avain: -- -- -- Secret key must be in Base32 format -- Salaisen avaimen täytyy olla Base32-formaatissa -- -- -- Secret key field -- Salaisen avaimen kenttä -- -- -- Algorithm: -- Algoritmi: -- -- -- Time step field -- Ajan uusiutumisen kenttä -- -- -- digits -- numeroa -- -- -- Invalid TOTP Secret -- Virheellinen TOTP-salaisuus -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Syötit väärän salaisen avaimen. Avaimen täytyy olla Base32-formaatissa. --Esimerkiksi: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Varmista TOTP-asetusten poisto -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Haluatko varmasti poistaa TOTP-asetukset tältä tietueelta? -- -- -- -- URLEdit -- -- Invalid URL -- Virheellinen URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Tarkistetaan päivityksiä -- -- -- Checking for updates... -- Tarkistetaan päivityksiä... -- -- -- Close -- Sulje -- -- -- Update Error! -- Päivitysvirhe! -- -- -- An error occurred in retrieving update information. -- Päivitystietoja haettassa tapahtui virhe. -- -- -- Please try again later. -- Yritä myöhemmin uudelleen. -- -- -- Software Update -- Ohjelmistopäivitys -- -- -- A new version of KeePassXC is available! -- Uusi versio KeePassXC:stä on saatavilla! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 on nyt saatavilla — käytössäsi on %2. -- -- -- Download it at keepassxc.org -- Lataa se osoitteesta keepassxc.org -- -- -- You're up-to-date! -- Olet ajan tasalla! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 on uusin saatavilla oleva versio -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Aloita salasanojesi turvallinen tallentaminen KeePassXC-tietokantaan -- -- -- Create new database -- Luo uusi tietokanta -- -- -- Open existing database -- Avaa tietokanta -- -- -- Import from KeePass 1 -- Tuo KeePass 1 -tietokanta -- -- -- Import from CSV -- Tuo CSV-tiedostosta -- -- -- Recent databases -- Viimeisimmät tietokannat -- -- -- Welcome to KeePassXC %1 -- Tervetuloa KeePassXC:n versioon %1 -- -- -- Import from 1Password -- Tuo 1Passwordista -- -- -- Open a recent database -- Avaa yksi viimeisimmistä tietokannoista -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Asetettu paikka - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Haaste-vastaus - Paikka %3 - %4 -- -- -- Press -- Paina -- -- -- Passive -- Passiivi -- -- -- %1 Invalid slot specified - %2 -- %1 Virheellinen paikka määritetty - %2 -- -- -- The YubiKey interface has not been initialized. -- Yubikeyn käyttöliittymää ei ole alustettu. -- -- -- Hardware key is currently in use. -- Laiteavain on käytössä. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Laiteavainta sarjanumerolla %1 ei löydetty. Ole hyvä ja liitä se jatkaaksesi. -- -- -- Hardware key timed out waiting for user interaction. -- Laiteavain aikakatkaistu käyttäjän toimia odottaessa. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Tapahtui USB-virhe laiteavaimeen yhdistäessä: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Haaste-vastauksen valmistuminen epäonnistui virheellä: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Päivitä -- -- -- YubiKey Challenge-Response -- YubiKeyn haaste/vastaus -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Jos omistat <a href="https://www.yubico.com/">YubiKey:n</a>, voit käyttää sitä lisäturvakeinona.</p><p>YubiKey vaatii yhden paikan asettamista <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Responseksi</a>.</p> -- -- -- Refresh hardware tokens -- Uudista laitetunnisteet -- -- -- Hardware key slot selection -- Laiteavaimen paikan valinta -- -- -- Could not find any hardware keys! -- Laiteavaimia ei löytynyt! -- -- -- Selected hardware key slot does not support challenge-response! -- Valittu laitepaikka ei tue haaste-vastausta! -- -- -- Detecting hardware keys… -- Etsitään laiteavaimia... -- -- -- No hardware keys detected -- Laiteavaimia ei havaittu -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_fr.ts keepassxc-2.6.4-patched/share/translations/keepassx_fr.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_fr.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_fr.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7892 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- À propos de KeePassXC -- -- -- About -- À propos -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Signaler les bogues sur : <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC est distribué suivant les conditions de la licence publique générale GNU (GNU GPL) version 2 ou version 3 de la licence (à votre gré). -- -- -- Contributors -- Contributeurs -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Voir Contributions sur GitHub</a> -- -- -- Debug Info -- Renseignements de débogage -- -- -- Include the following information whenever you report a bug: -- Incluez les renseignements suivants chaque fois que vous signalez un bogue : -- -- -- Copy to clipboard -- Copier dans le presse-papiers -- -- -- Project Maintainers: -- Mainteneurs du projet : -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- L’équipe de KeePassXC remercie tout particulièrement debfx pour la création du KeePassX original. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Utiliser OpenSSH pour Windows au lieu de Pageant -- -- -- Enable SSH Agent integration -- Activer l’intégration de l’agent SSH -- -- -- SSH_AUTH_SOCK value -- Valeur SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Valeur de remplacement SSH_AUTH_SOCK -- -- -- (empty) -- (vide) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Aucun emplacement d’agent SSH n’est disponible. Assurez-vous que la variable d’environnement SSH_AUTH_SOCK existe ou définissez une valeur de remplacement. -- -- -- SSH Agent connection is working! -- La connexion de l’agent SSH fonctionne. -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Paramètres de l’application -- -- -- General -- Général -- -- -- Security -- Sécurité -- -- -- Access error for config file %1 -- Erreur d’accès pour le fichier de configuration %1 -- -- -- Icon only -- Icône seulement -- -- -- Text only -- Texte seulement -- -- -- Text beside icon -- Texte à côté de l’icône -- -- -- Text under icon -- Texte sous l’icône -- -- -- Follow style -- Suivre le style -- -- -- Reset Settings? -- Réinitialiser les paramètres ? -- -- -- Are you sure you want to reset all general and security settings to default? -- Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ? -- -- -- Monochrome (light) -- Monochrome (clair) -- -- -- Monochrome (dark) -- Monochrome (sombre) -- -- -- Colorful -- Multicolore -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Pour appliquer la nouvelle langue, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Paramètres de base -- -- -- Startup -- Démarrage -- -- -- Start only a single instance of KeePassXC -- Ne démarrer qu’une seule instance de KeePassXC -- -- -- Minimize window at application startup -- Réduire la fenêtre lors du démarrage de l’application -- -- -- File Management -- Gestion des fichiers -- -- -- Backup database file before saving -- Sauvegarder le fichier de la base de données avant d’enregistrer -- -- -- Automatically save after every change -- Enregistrer automatiquement après chaque changement -- -- -- Automatically reload the database when modified externally -- Recharger automatiquement la base de données quand elle est modifiée de l’extérieur -- -- -- Entry Management -- Gestion des entrées -- -- -- Use group icon on entry creation -- Utiliser l’icône de groupe lors de la création d’une entrée -- -- -- Minimize instead of app exit -- Réduire au lieu de fermer l’appli -- -- -- Show a system tray icon -- Afficher une icône dans la zone de notification -- -- -- Hide window to system tray when minimized -- Cacher la fenêtre dans la zone de notification une fois minimisée -- -- -- Auto-Type -- Saisie automatique -- -- -- Use entry title to match windows for global Auto-Type -- Utiliser le titre de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. -- -- -- Use entry URL to match windows for global Auto-Type -- Utiliser l’URL de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. -- -- -- Always ask before performing Auto-Type -- Toujours demander avant de saisir automatiquement -- -- -- ms -- Milliseconds --  ms -- -- -- Movable toolbar -- Barre d’outils mobile -- -- -- Remember previously used databases -- Mémoriser les bases de données utilisées précédemment -- -- -- Load previously open databases on startup -- Lors du démarrage, charger les bases de données ouvertes précédemment -- -- -- Remember database key files and security dongles -- Mémoriser les fichiers clés de base de données et les clés électroniques de sécurité -- -- -- Check for updates at application startup once per week -- Vérifier une fois par semaine la présence de mises à jour au démarrage de l’application -- -- -- Include beta releases when checking for updates -- Inclure les versions bêta lors de la vérification de la présence de mises à jour -- -- -- Language: -- Langue : -- -- -- (restart program to activate) -- (relancer le programme pour activer) -- -- -- Minimize window after unlocking database -- Réduire la fenêtre après déverrouillage de la base de données -- -- -- Minimize when opening a URL -- Réduire lors de l’ouverture d’une URL -- -- -- Hide window when copying to clipboard -- Cacher la fenêtre lors de la copie dans le presse-papiers -- -- -- Minimize -- Réduire -- -- -- Drop to background -- Passer en arrière-plan -- -- -- Favicon download timeout: -- Temps imparti au téléchargement de la favoricône : -- -- -- Website icon download timeout in seconds -- Temps imparti au chargement de l’icône du site Web en secondes -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Style des boutons de la barre d’outils -- -- -- Language selection -- Sélection de la langue -- -- -- Global auto-type shortcut -- Raccourci global de saisie automatique -- -- -- Auto-type character typing delay milliseconds -- Délai de frappe des caractères, en millisecondes, de la saisie automatique -- -- -- Auto-type start delay milliseconds -- Délai de démarrage, en millisecondes, de la saisie automatique -- -- -- Automatically launch KeePassXC at system startup -- Lancer automatiquement KeepassXC au démarrage du système. -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Enregistrer les fichiers de base de données de façon sécurisée (désactiver en cas de problèmes avec Dropbox, etc.) -- -- -- User Interface -- Interface utilisateur -- -- -- Toolbar button style: -- Style des boutons de la barre d’outils : -- -- -- Use monospaced font for notes -- Utiliser une police à espacement constant pour les notes -- -- -- Tray icon type: -- Type d’icône de la zone de notification : -- -- -- Reset settings to default… -- Réinitialiser les paramètres à leur valeur par défaut… -- -- -- Auto-Type typing delay: -- Délai de saisie de la saisie automatique : -- -- -- Global Auto-Type shortcut: -- Raccourci global de la saisie automatique : -- -- -- Auto-Type start delay: -- Délai de démarrage de la saisie automatique : -- -- -- Automatically save when locking database -- Enregistrer automatiquement en verrouillant la base de données -- -- -- Automatically save non-data changes when locking database -- Enregistrer automatiquement les changements qui ne sont pas relatifs aux données en verrouillant la base de données -- -- -- Tray icon type -- Type d’icône de la zone de notification -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Délais d’attente -- -- -- Clear clipboard after -- Effacer le presse-papiers après -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Verrouiller les bases de données après une inactivité de -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Oublier le TouchID après une inactivité de -- -- -- Convenience -- Commodité -- -- -- Lock databases when session is locked or lid is closed -- Verrouiller les bases de données quand la session est verrouillée ou l’écran rabattu -- -- -- Forget TouchID when session is locked or lid is closed -- Oublier le TouchID quand la session est verrouillée ou le couvercle fermé -- -- -- Lock databases after minimizing the window -- Verrouiller les bases de données après avoir réduit la fenêtre -- -- -- Re-lock previously locked database after performing Auto-Type -- Après avoir effectué la saisie automatique, reverrouiller la base de données qui était verrouillée précédemment -- -- -- Hide passwords in the entry preview panel -- Cacher les mots de passe dans le panneau de prévisualisation des entrées -- -- -- Hide entry notes by default -- Par défaut, cacher les notes des entrées -- -- -- Privacy -- Confidentialité -- -- -- Use DuckDuckGo service to download website icons -- Utiliser le service DuckDuckGo pour télécharger les icônes de sites Web -- -- -- Clipboard clear seconds -- Effacement du presse-papiers en secondes -- -- -- Touch ID inactivity reset -- Réinitialisation de TouchID après inactivité -- -- -- Database lock timeout seconds -- Délai, en secondes, avant verrouillage de la base de données -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Effacer la requête de recherche après -- -- -- Require password repeat when it is visible -- Exiger de répéter le mot de passe s’il est visible -- -- -- Hide passwords when editing them -- Cacher les mots de passe lors de leur modification -- -- -- Use placeholder for empty password fields -- Utiliser un espace réservé pour les champs de mots de passe vides -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Impossible de trouver une entrée qui corresponde au titre de la fenêtre : -- -- -- Auto-Type - KeePassXC -- Saisie automatique – KeePassXC -- -- -- Auto-Type -- Saisie automatique -- -- -- The Syntax of your Auto-Type statement is incorrect! -- La syntaxe de votre instruction de saisie automatique est incorrecte. -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Cette commande de saisie automatique comprend un délai très long. Voulez-vous vraiment continuer ? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Cette commande de saisie automatique comprend une frappe de touches très lente. Voulez-vous vraiment continuer ? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Cette commande de saisie automatique comprend des arguments répétés très souvent. Voulez-vous vraiment continuer ? -- -- -- Permission Required -- Une autorisation est requise -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requiert l’autorisation Accessibilité pour la saisie automatique des entrées. SI vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Fenêtre -- -- -- Sequence -- Séquence -- -- -- Default sequence -- Séquence par défaut -- -- -- -- AutoTypeMatchModel -- -- Group -- Groupe -- -- -- Title -- Titre -- -- -- Username -- Nom d’utilisateur -- -- -- Sequence -- Séquence -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copier le nom d’&utilisateur -- -- -- Copy &password -- Copier le mot de &passe -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Une autorisation est requise -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC a besoin de la permission Accessibilité et Enregistreur d’écran pour la saisie automatique globale. L’enregistrement de l’écran est nécessaire afin d’utiliser le titre des fenêtres pour trouver des entrées. Si vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Saisie automatique – KeePassXC -- -- -- Select entry to Auto-Type: -- Sélectionner une entrée à saisir automatiquement : -- -- -- Search... -- Recherche… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC – Demande d’accès au navigateur -- -- -- %1 is requesting access to the following entries: -- %1 demande l’accès aux entrées suivantes : -- -- -- Remember access to checked entries -- Mémoriser l’accès aux entrées sélectionnées -- -- -- Remember -- Mémoriser -- -- -- Allow access to entries -- Permettre l’accès aux entrées -- -- -- Allow Selected -- Permettre les éléments sélectionnés -- -- -- Deny All -- Tout refuser -- -- -- Disable for this site -- Désactiver pour ce site -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Enregistrer l’entrée -- -- -- Ok -- Valider -- -- -- Cancel -- Annuler -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Plusieurs bases de données sont ouvertes. --Veuillez sélectionner la base de données souhaitée pour enregistrer les identifiants. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC : Nouvelle demande d’association de clé -- -- -- Save and allow access -- Enregistrer et permettre l’accès -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC : Remplacer la clé existante ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Une clé de chiffrement partagée nommée « %1 » existe déjà. --Voulez-vous la remplacer ? -- -- -- KeePassXC: Update Entry -- KeePassXC : Mettre l’entrée à jour -- -- -- Do you want to update the information in %1 - %2? -- Voulez-vous mettre à jour les renseignements dans %1 - %2 ? -- -- -- Abort -- Abandonner -- -- -- Converting attributes to custom data… -- Conversion des attributs en données personnalisées… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC : Attributs KeePassHTTP convertis -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Les attributs de %1 entrée(s) ont été convertis avec succès. --%2 clés ont été déplacées vers les données personnalisées. -- -- -- Successfully moved %n keys to custom data. -- %n clé a été déplacée avec succès vers les données personnalisées.%n clés ont été déplacées avec succès vers les données personnalisées. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC : Aucune entrée avec des attributs KeePassHTTP n’a été trouvée -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- La base de données active ne comprend aucune entrée avec des attributs KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC : Des paramètres hérités d’intégration aux navigateurs ont été détectés -- -- -- KeePassXC: Create a new group -- KeePassXC : Créer un nouveau groupe -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Une demande de création d’un nouveau groupe « %1 » a été reçue. --Voulez-vous créer ce groupe ? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Vos paramètres KeePassXC-Browser doivent être intégrés aux paramètres de la base de données. --Cela est nécessaire pour conserver les connexions actuelles de votre navigateur. --Voulez-vous migrer vos paramètres maintenant ? -- -- -- Don't show this warning again -- Ne plus afficher cet avertissement -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Vous avez reçu une demande d’association pour la base de données suivante : --%1 -- --Attribuez à cette connexion un nom ou un ID unique, par exemple : --chrome-laptop -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Boîte de dialogue -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Requis pour accéder à vos bases de données avec KeePassXC-Browser -- -- -- Enable browser integration -- Activer l’intégration aux navigateurs -- -- -- General -- Général -- -- -- Browsers installed as snaps are currently not supported. -- Les navigateurs installés en tant que snap ne sont pas pris en charge actuellement. -- -- -- Enable integration for these browsers: -- Activer l’intégration pour ces navigateurs : -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Navigateur Tor -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Afficher une notification quand les identifiants sont demandés -- -- -- Request to unlock the database if it is locked -- Demander de déverrouiller la base de données si elle est verrouillée -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Seules les entrées de même format (http://, https://,…) sont retournées. -- -- -- Match URL scheme (e.g., https://...) -- Adapter au format de l’URL (p. ex. : https://….) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Ne renvoie que les meilleures correspondances pour une URL précise au lieu de toutes les entrées du domaine entier. -- -- -- Return only best-matching credentials -- Retourner que les identifiants qui correspondent le mieux -- -- -- Returns expired credentials. String [expired] is added to the title. -- Retourne les identifiants expirés. La chaîne [expiré] est ajoutée au titre. -- -- -- Allow returning expired credentials -- Permettre de retourner des identifiants expirés -- -- -- All databases connected to the extension will return matching credentials. -- Toutes les bases de données connectées à l’extension retourneront les identifiants correspondants. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Chercher les identifiants correspondants dans toutes les bases de données ouvertes -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Trier les identifiants correspondants par titre -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Trier les identifiants correspondants par nom d’utilisateur -- -- -- Advanced -- Avancé -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Ne jamais demander avant d’accéder aux identifiants -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Ne jamais demander avant de mettre les identifiants à jour -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Ne pas demander d’autorisation pour l’authentification HTTP Basic -- -- -- Automatically creating or updating string fields is not supported. -- Ni la création ni la mise à jour automatique des champs de chaîne ne sont prises en charge. -- -- -- Return advanced string fields which start with "KPH: " -- Retourner les champs de chaîne avancés qui commencent par « KPH:  » -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Ne pas afficher la fenêtre de suggestion de migration des paramètres de KeePassHTTP hérités. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Ne pas proposer la migration des paramètres de KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Met automatiquement à jour le chemin des exécutables KeePassXC ou keepassxc-proxy vers les scripts de messagerie native lors du démarrage. -- -- -- Update native messaging manifest files at startup -- Mettre les fichiers manifeste de la messagerie native à jour au lancement -- -- -- Use a custom proxy location if you installed a proxy manually. -- Utiliser un emplacement de mandataire personnalisé si vous avez installé un mandataire manuellement. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Utiliser un emplacement de mandataire personnalisé : -- -- -- Custom proxy location field -- Champ d’emplacement de mandataire personnalisé -- -- -- Browser for custom proxy file -- Sélectionner un fichier de mandataire personnalisé -- -- -- Browse... -- Button for opening file dialog -- Parcourir… -- -- -- Use a custom browser configuration location: -- Utiliser un emplacement de navigateur personnalisé : -- -- -- Browser type: -- Type de navigateur : -- -- -- Toolbar button style -- Style des boutons de la barre d’outils -- -- -- Config Location: -- Emplacement de configuration : -- -- -- Custom browser location field -- Champ d’emplacement de navigateur personnalisé -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Sélectionner un chemin personnalisé de navigateur -- -- -- Custom extension ID: -- ID d’extension personnalisé : -- -- -- Custom extension ID -- ID d’extension personnalisé -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- En raison du bac à sable de Snap, vous devez exécuter un script afin d’activer l’intégration aux navigateurs.<br />Vous pouvez obtenir ce script sur %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser est nécessaire pour que l’intégration aux navigateurs fonctionne. <br />Téléchargez-la pour %1, %2 et %3. %4 -- -- -- Please see special instructions for browser extension use below -- Veuillez consulter ci-dessous les instructions spéciales de l’extension pour navigateurs -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Erreur :</b> L’emplacement de mandataire personnalisé est introuvable. <br/>L’intégration aux navigateurs NE FONCTIONNERA PAS sans l’application mandataire. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Avertissement :</b> Les options suivantes peuvent être dangereuses -- -- -- Executable Files -- Fichiers exécutables -- -- -- All Files -- Tous les fichiers -- -- -- Select custom proxy location -- Sélectionner un emplacement de mandataire personnalisé -- -- -- Select native messaging host folder location -- Sélectionner l’emplacement du dossier de l’hôte de messagerie native -- -- -- -- CloneDialog -- -- Clone Options -- Options de clonage -- -- -- Append ' - Clone' to title -- Ajouter ’ – Clone’ au titre -- -- -- Replace username and password with references -- Remplacer le nom d’utilisateur et le mot de passe par des références -- -- -- Copy history -- Copier l’historique -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importer les champs CSV -- -- -- filename -- nom de fichier -- -- -- size, rows, columns -- taille, lignes, colonnes -- -- -- Encoding -- Encodage -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Le texte est qualifié par -- -- -- Fields are separated by -- Les champs sont séparés par -- -- -- Comments start with -- Les commentaires commencent par -- -- -- Consider '\' an escape character -- Considérer « \ » en tant que caractère d’échappement -- -- -- Preview -- Aperçu -- -- -- Imported from CSV file -- Importé d’un fichier CSV -- -- -- Original data: -- Données originales : -- -- -- Error -- Erreur -- -- -- Error(s) detected in CSV file! -- Des erreurs ont été détectées dans le fichier CSV -- -- -- [%n more message(s) skipped] -- [%n autre message a été ignoré][%n autres messages ont été ignorés] -- -- -- CSV import: writer has errors: --%1 -- Importation CSV : le scripteur comporte des erreurs : --%1 -- -- -- Text qualification -- Qualification du texte -- -- -- Field separation -- Séparation des champs -- -- -- Number of header lines to discard -- Nombre de lignes d’en-tête à ignorer -- -- -- CSV import preview -- Aperçu de l’importation d’un fichier CSV -- -- -- Column Association -- Associations de colonnes -- -- -- Last Modified -- Dernière modification -- -- -- Password -- Mot de passe -- -- -- Created -- Créée -- -- -- Notes -- Notes -- -- -- Title -- Titre -- -- -- Group -- Groupe -- -- -- URL -- URL -- -- -- Username -- Nom d’utilisateur -- -- -- Header lines skipped -- Les lignes d’en-tête ont été ignorées -- -- -- First line has field names -- La première ligne comporte des noms de champs -- -- -- Not Present -- Les données ne s’y trouvent pas -- -- -- Column %1 -- Colonne %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Icône -- -- -- -- CsvParserModel -- -- %n column(s) -- %n colonne%n colonnes -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n octet%n octets -- -- -- %n row(s) -- %n ligne%n lignes -- -- -- -- Database -- -- File %1 does not exist. -- Le fichier %1 n’existe pas. -- -- -- Unable to open file %1. -- Impossible d’ouvrir le fichier %1. -- -- -- Error while reading the database: %1 -- Erreur de lecture de la base de données : %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Impossible d’écrire dans le fichier, car il est ouvert en lecture seulement. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- La clé n’a pas été transformée, ce qui est un bogue. Veuillez le signaler aux développeurs. -- -- -- %1 --Backup database located at %2 -- %1 --La base de données de sauvegarde est située sur %2 -- -- -- Could not save, database does not point to a valid file. -- Impossible d’enregistrer, car la base de données n’est pas dirigée vers un fichier valide. -- -- -- Could not save, database file is read-only. -- Impossible d’enregistrer, car le fichier de la base de données est en lecture seule. -- -- -- Database file has unmerged changes. -- Le fichier de la base de données comporte des changements non fusionnés. -- -- -- Recycle Bin -- Corbeille -- -- -- Passwords -- Root group name -- Mots de passe -- -- -- Database save is already in progress. -- La base de données est déjà en cours d’enregistrement. -- -- -- Could not save, database has not been initialized! -- Impossible d’enregistrer, la base de données n’a pas été initialisée -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Déverrouiller la base de données – KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Fichier clé : -- -- -- Refresh -- Actualiser -- -- -- Don't show this warning again -- Ne plus afficher cet avertissement -- -- -- All files -- Tous les fichiers -- -- -- Key files -- Fichiers clés -- -- -- Select key file -- Sélectionner un fichier clé -- -- -- Failed to open key file: %1 -- Échec d’ouverture du fichier clé : %1 -- -- -- Unlock KeePassXC Database -- Déverrouiller la base de données KeePassXC -- -- -- Enter Password: -- Saisissez le mot de passe : -- -- -- Password field -- Champ de mot de passe -- -- -- Hardware key slot selection -- Sélection de l’emplacement de la clé matérielle -- -- -- Browse for key file -- Rechercher un fichier clé -- -- -- Browse... -- Parcourir… -- -- -- Refresh hardware tokens -- Actualiser les jetons matériels -- -- -- Hardware Key: -- Clé matérielle : -- -- -- Hardware key help -- Aide sur les clés matérielles -- -- -- TouchID for Quick Unlock -- TouchID pour un déverrouillage rapide -- -- -- Unlock failed and no password given -- Échec de déverrouillage et aucun mot de passe n’a été saisi -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Le déverrouillage de la base de données a échoué et vous n’avez pas saisi de mot de passe. --Voulez-vous plutôt réessayer sans mot de passe ? -- --Afin d’empêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe. -- -- -- Retry with empty password -- Réessayer sans mot de passe -- -- -- Enter Additional Credentials (if any): -- Saisissez des identifiants supplémentaires (si définis) : -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Vous pouvez utiliser une clé de sécurité matérielle telle qu’une <strong>YubiKey</strong> ou une <strong>OnlyKey</strong> avec des emplacements configurés pour HMAC-SHA1.</p> --<p>Cliquez pour plus de précisions…</p> -- -- -- Key file help -- Aide fichier clé -- -- -- ? --  ? -- -- -- Cannot use database file as key file -- Impossible d’utiliser une base de données comme fichier clé -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Vous ne pouvez pas utiliser la base de données actuelle comme fichier clé. --Si vous n’avez pas de fichier clé, laissez le champ vide. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>En plus d’un mot de passe, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Ce fichier peut être généré dans les paramètres de sécurité de votre base de données.</p><p>Il ne s’agit <strong>pas</strong> de votre fichier de base de données *.kdbx.<br>Si vous n’avez pas de fichier clé, laissez ce champ vide.</p><p>Cliquez pour plus de précisions…</p> -- -- -- Key file to unlock the database -- Fichier clé pour déverrouiller la base de données -- -- -- Please touch the button on your YubiKey! -- Veuillez appuyez sur le bouton de votre YubiKey -- -- -- Detecting hardware keys… -- Détection des clés matérielles… -- -- -- No hardware keys detected -- Aucune clé matérielle n’a été détectée -- -- -- Select hardware key… -- Sélectionner une clé matérielle… -- -- -- Old key file format -- Ancien format de fichier clé -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Vous utilisez un ancien format de fichier clé que KeePassXC pourrait<br>ne plus prendre en charge à l’avenir.<br><br>Veuillez envisager de générer un nouveau fichier clé en accédant à :<strong>Base de données > Sécurité de la base de données > Changer la clé.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Mots de passe -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Paramètres avancés -- -- -- General -- Général -- -- -- Security -- Sécurité -- -- -- Encryption Settings -- Paramètres de chiffrement -- -- -- Browser Integration -- Intégration aux navigateurs -- -- -- Database Credentials -- Identifiants de la base de données -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Paramètres de KeePassXC-Browser -- -- -- Stored keys -- Clés enregistrées -- -- -- Remove -- Supprimer -- -- -- Delete the selected key? -- Supprimer la clé sélectionnée ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Voulez-vous vraiment supprimer la clé sélectionnée ? --Cela pourrait empêcher la connexion l’extension pour navigateurs. -- -- -- Key -- Clé -- -- -- Value -- Valeur -- -- -- Enable Browser Integration to access these settings. -- Activez l’intégration aux navigateurs pour accéder à ces paramètres. -- -- -- Disconnect all browsers -- Déconnecter tous les navigateurs -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Voulez-vous vraiment déconnecter tous les navigateurs ? --Cela pourrait empêcher la connexion avec l’extension pour navigateurs. -- -- -- KeePassXC: No keys found -- KeePassXC : Aucune clé n’a été trouvée -- -- -- No shared encryption keys found in KeePassXC settings. -- Aucune clé de chiffrement partagée n’a été trouvée dans les paramètres de KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC : Les clés ont été supprimées de la base de données -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n clé de chiffrement a été supprimée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC. -- -- -- Forget all site-specific settings on entries -- Oublier tous les paramètres d’entrée propres aux sites -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. -- -- -- Removing stored permissions… -- Suppression des autorisations enregistrées… -- -- -- Abort -- Abandonner -- -- -- KeePassXC: Removed permissions -- KeePassXC : Les autorisations ont été supprimées -- -- -- Successfully removed permissions from %n entry(s). -- Les autorisations d’%n entrée ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimées avec succès. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC : Aucune entrée avec autorisation n’a été trouvée -- -- -- The active database does not contain an entry with permissions. -- La base de données active ne comprend aucune entrée avec des autorisations. -- -- -- Move KeePassHTTP attributes to custom data -- Déplacer les attributs KeePassHTTP vers les données personnalisées -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Voulez-vous vraiment convertir toutes les données d’intégration au navigateur héritées à la norme la plus récente ? --Cela est nécessaire pour assurer la compatibilité avec l’extension pour navigateurs. -- -- -- Stored browser keys -- Clés de navigateurs enregistrées -- -- -- Remove selected key -- Supprimer la clé sélectionnée -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Déplacer les attributs KeePassHTTP vers les données personnalisées de KeePassXC-Browser -- -- -- Refresh database root group ID -- Actualiser l’ID du groupe racine de la base de données -- -- -- Created -- Créée -- -- -- Refresh database ID -- Actualiser l’ID de la base de données -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Voulez-vous vraiment actualiser l’ID de la base de données ? --Cela n’est nécessaire que si votre base de données est la copie d’une autre et que l’extension pour navigateurs ne peut pas se connecter. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Ajouter une protection supplémentaire… -- -- -- No password set -- Aucun mot de passe n’a été défini -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- AVERTISSEMENT : Vous n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe. -- --Voulez-vous vraiment poursuivre sans mot de passe ? -- -- -- Continue without password -- Poursuivre sans mot de passe -- -- -- No encryption key added -- Aucune clé de chiffrement n’a été ajoutée -- -- -- You must add at least one encryption key to secure your database! -- Vous devez ajouter au moins une clé de chiffrement afin de sécuriser votre base de données. -- -- -- Unknown error -- Erreur inconnue -- -- -- Failed to change database credentials -- Échec de changement des identifiants de la base de données -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algorithme de chiffrement : -- -- -- AES: 256 Bit (default) -- AES : 256 bits (par défaut) -- -- -- Twofish: 256 Bit -- Twofish : 256 bits -- -- -- Key Derivation Function: -- Fonction de dérivation de clé : -- -- -- Transform rounds: -- Cycles de transformation : -- -- -- Memory Usage: -- Utilisation de la mémoire : -- -- -- Parallelism: -- Parallélisme : -- -- -- Decryption Time: -- Temps de déchiffrement : -- -- -- ?? s -- ?? s -- -- -- Change -- Changer -- -- -- Higher values offer more protection, but opening the database will take longer. -- Les valeurs plus élevées offrent plus de protection, mais l’ouverture de la base de données prendra plus de temps. -- -- -- Database format: -- Format de la base de données : -- -- -- This is only important if you need to use your database with other programs. -- Ce paramètre n’est important que si vous devez utiliser votre base de données avec d’autres programmes. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recommandée) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- inchangé -- -- -- Number of rounds too high -- Key transformation rounds -- Le nombre de cycles est trop grand -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Vous utilisez un très grand nombre de cycles de transformation de clé avec Argon2. -- --Si vous gardez ce nombre, votre base de données pourrait prendre des heures voire des jours (ou plus) pour s’ouvrir. -- -- -- Understood, keep number -- Compris, garder ce nombre -- -- -- Cancel -- Annuler -- -- -- Number of rounds too low -- Key transformation rounds -- Le nombre de cycles est trop petit -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Vous utilisez un très petit nombre de cycles de transformation de clé avec AES-KDF. -- --Si vous gardez ce nombre, votre base de données pourrait être craquée trop facilement. -- -- -- KDF unchanged -- La fonction de dérivation de clé est inchangée -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Échec de transformation de la clé avec les nouveaux paramètres de fonction de dérivation de clé ; la fonction de dérivation de clé est inchangée. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MioMio -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- fil d’exécutionfils d’exécution -- -- -- Change existing decryption time -- Changer le temps de déchiffrement existant -- -- -- Decryption time in seconds -- Temps de déchiffrement en secondes -- -- -- Database format -- Format de la base de données -- -- -- Encryption algorithm -- Algorithme de chiffrement -- -- -- Key derivation function -- Fonction de dérivation de clé -- -- -- Transform rounds -- Cycles de transformation -- -- -- Memory usage -- Utilisation de la mémoire -- -- -- Parallelism -- Parallélisme -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Entrées visibles -- -- -- Don't expose this database -- Ne pas rendre cette base de données visible -- -- -- Expose entries under this group: -- Rendre visibles les entrées de ce groupe : -- -- -- Enable Secret Service to access these settings. -- Activer « Secret Service » pour accéder à ces paramètres. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Métadonnées de la base de données -- -- -- Database name: -- Nom de la base de données : -- -- -- Database description: -- Description de la base de données : -- -- -- Default username: -- Nom d’utilisateur par défaut : -- -- -- History Settings -- Paramètres de l’historique -- -- -- Max. history items: -- Nombre maximal d’éléments d’historique : -- -- -- Max. history size: -- Taille maximale de l’historique : -- -- -- MiB -- Mio -- -- -- Use recycle bin -- Utiliser une corbeille -- -- -- Additional Database Settings -- Paramètres supplémentaires de base de données -- -- -- Database name field -- Champ de nom de la base de données -- -- -- Database description field -- Champ de description de la base de données -- -- -- Default username field -- Champ de nom d’utilisateur par défaut -- -- -- Maximum number of history items per entry -- Nombre maximal d’éléments historiques par entrée -- -- -- Maximum size of history per entry -- Taille maximale de l’historique par entrée -- -- -- Delete Recycle Bin -- Supprimer la corbeille -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Voulez-vous supprimer la corbeille actuelle et tout son contenu ? --Cette action est irréversible. -- -- -- (old) -- (ancien) -- -- -- Enable compression (recommended) -- Activer la compression (recommandé) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Partage -- -- -- Breadcrumb -- Fil d’Ariane -- -- -- Type -- Type -- -- -- Path -- Chemin -- -- -- Last Signer -- Dernier signataire -- -- -- Certificates -- Certificats -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nom de la base de données : -- -- -- Description: -- Description : -- -- -- Database name field -- Champ de nom de la base de données -- -- -- Database description field -- Champ de description de la base de données -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Base de données KeePass 2 -- -- -- All files -- Tous les fichiers -- -- -- Open database -- Ouvrir la base de données -- -- -- CSV file -- Fichier CSV -- -- -- Merge database -- Fusionner la base de données -- -- -- Open KeePass 1 database -- Ouvrir une base de données KeePass 1 -- -- -- KeePass 1 database -- Base de données KeePass 1 -- -- -- Export database to CSV file -- Exporter la base de données vers un fichier CSV -- -- -- Writing the CSV file failed. -- Échec d’écriture du fichier CSV. -- -- -- Database creation error -- Erreur de création de la base de données -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- La base de données créée n’a ni clé, ni fonction de dérivation de clé et ne peut pas être enregistrée. --C’est très certainement un bogue, veuillez le signaler aux développeurs. -- -- -- Select CSV file -- Sélectionner un fichier CSV -- -- -- New Database -- Nouvelle base de données -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [nouvelle base de données] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [verrouillé] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [en lecture seule] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Échec d’ouverture de %1. Soit le fichier n’existe pas soit il n’est pas accessible. -- -- -- Export database to HTML file -- Exporter la base de données vers un fichier HTML -- -- -- HTML file -- Fichier HTML -- -- -- Writing the HTML file failed. -- Échec d’écriture du fichier HTML. -- -- -- Export Confirmation -- Confirmation de l’exportation -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? -- -- -- Open OPVault -- Ouvrir OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Recherche… -- -- -- Do you really want to delete the entry "%1" for good? -- Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Voulez-vous vraiment déplacer %n entrée vers la corbeille ?Voulez-vous vraiment déplacer %n entrées vers la corbeille ? -- -- -- Execute command? -- Exécuter la commande ? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Voulez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> -- -- -- Remember my choice -- Mémoriser mon choix -- -- -- Do you really want to delete the group "%1" for good? -- Voulez-vous vraiment supprimer définitivement le groupe « %1 » ? -- -- -- No current database. -- Aucune base de données actuelle. -- -- -- No source database, nothing to do. -- Aucune base de données source, il n’y a rien à faire. -- -- -- Search Results (%1) -- Résultats de recherche (%1) -- -- -- No Results -- Il n’y a aucun résultat -- -- -- File has changed -- Le fichier a été modifié -- -- -- The database file has changed. Do you want to load the changes? -- Le fichier de la base de données a été modifié. Voulez-vous le recharger ? -- -- -- Merge Request -- Demande de fusion -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Le fichier de la base de données a été modifié et vos changements ne sont pas enregistrés. --Voulez-vous fusionner vos changements ? -- -- -- Empty recycle bin? -- Vider la corbeille ? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Voulez-vous vraiment vider définitivement la corbeille ? -- -- -- Do you really want to delete %n entry(s) for good? -- Voulez-vous vraiment supprimer %n entrée définitivement ?Voulez-vous vraiment supprimer %n entrées définitivement ? -- -- -- Delete entry(s)? -- Supprimer l’entrée ?Supprimer les entrées ? -- -- -- Move entry(s) to recycle bin? -- Déplacer l’entrée vers la corbeille ?Déplacer les entrées vers la corbeille ? -- -- -- Lock Database? -- Verrouiller la base de données ? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Vous êtes en train de modifier une entrée. Abandonner les changements et la verrouiller quand même ? -- -- -- "%1" was modified. --Save changes? -- « %1 » a été modifié. --Enregistrer les changements ? -- -- -- Database was modified. --Save changes? -- La base de données a été modifiée. --Enregistrer les changements ? -- -- -- Save changes? -- Enregistrer les changements ? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Impossible d’ouvrir le nouveau fichier de base de données en tentant de la recharger automatiquement. --Erreur : % 1 -- -- -- Disable safe saves? -- Désactiver les enregistrements sécurisés ? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC n’a pas réussi à enregistrer la base de données à plusieurs reprises. Le fichier à enregistrer est probablement verrouillé par les services de synchronisation de fichiers. --Désactiver les enregistrements sécurisés et réessayer ? -- -- -- Passwords -- Mots de passe -- -- -- Save database as -- Enregistrer la base de données sous -- -- -- KeePass 2 Database -- Base de données KeePass 2 -- -- -- Replace references to entry? -- Remplacer les références vers l’entrée ? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- L’entrée « %1 » a %2 référence. Voulez-vous remplacer la référence par les valeurs, ignorer cette entrée ou la supprimer ?L’entrée « %1 » a %2 références. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou la supprimer ? -- -- -- Delete group -- Supprimer le groupe -- -- -- Move group to recycle bin? -- Déplacer le groupe vers la corbeille ? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? -- -- -- Successfully merged the database files. -- Les fichiers de base de données ont été fusionnés avec succès. -- -- -- Database was not modified by merge operation. -- La base de données n’a pas été modifiée par l’opération de fusion. -- -- -- Shared group... -- Groupe partagé… -- -- -- Writing the database failed: %1 -- Échec d’écriture de la base de données : %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Cette base de données est ouverte en lecture seule. L’enregistrement automatique est désactivé. -- -- -- Save database backup -- Sauvegarder la base de données -- -- -- Could not find database file: %1 -- Impossible de trouver le fichier de la base de données : %1 -- -- -- -- EditEntryWidget -- -- Entry -- Entrée -- -- -- Advanced -- Avancé -- -- -- Icon -- Icône -- -- -- Auto-Type -- Saisie automatique -- -- -- Properties -- Propriétés -- -- -- History -- Historique -- -- -- SSH Agent -- Agent SSH -- -- -- n/a -- s.o. -- -- -- (encrypted) -- (chiffrée) -- -- -- Select private key -- Sélectionner un fichier clé -- -- -- Entry history -- Historique de l’entrée -- -- -- Add entry -- Ajouter une entrée -- -- -- Edit entry -- Modifier l’entrée -- -- -- New attribute -- Nouvel attribut -- -- -- Are you sure you want to remove this attribute? -- Voulez-vous vraiment supprimer cet attribut ? -- -- -- Tomorrow -- Demain -- -- -- %n week(s) -- %n semaine%n semaines -- -- -- %n month(s) -- %n mois%n mois -- -- -- Entry updated successfully. -- L’entrée a été mise à jour avec succès. -- -- -- New attribute %1 -- Nouvel attribut %1 -- -- -- %n year(s) -- % an%n ans -- -- -- Confirm Removal -- Confirmer la suppression -- -- -- Browser Integration -- Intégration aux navigateurs -- -- -- <empty URL> -- <URL vide> -- -- -- Are you sure you want to remove this URL? -- Voulez-vous vraiment supprimer cette URL ? -- -- -- Reveal -- Révéler -- -- -- Hide -- Cacher -- -- -- Unsaved Changes -- Changements non enregistrés -- -- -- Would you like to save changes to this entry? -- Voulez-vous enregistrer les changements de cette entrée ? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTÉGÉ] Appuyez sur Révéler pour afficher ou modifier -- -- -- Invalid Entry -- L’entrée est invalide -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Une opération externe de fusion a invalidé cette entrée. --Malheureusement, les changements effectués ont été perdus. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Attributs supplémentaires -- -- -- Add -- Ajouter -- -- -- Remove -- Supprimer -- -- -- Edit Name -- Modifier le nom -- -- -- Protect -- Protéger -- -- -- Reveal -- Révéler -- -- -- Attachments -- Fichiers joints -- -- -- Foreground Color: -- Couleur de l’avant-plan : -- -- -- Background Color: -- Couleur de l’arrière-plan : -- -- -- Attribute selection -- Sélection d’un attribut -- -- -- Attribute value -- Valeur de l’attribut -- -- -- Add a new attribute -- Ajouter un nouvel attribut -- -- -- Remove selected attribute -- Supprimer l’attribut sélectionné -- -- -- Edit attribute name -- Modifier le nom de l’attribut -- -- -- Toggle attribute protection -- Activer ou désactiver la protection de l’attribut -- -- -- Show a protected attribute -- Afficher un attribut protégé -- -- -- Foreground color selection -- Sélection de la couleur d’avant-plan -- -- -- Background color selection -- Sélection de la couleur d’arrière-plan -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Si cette option est cochée, l’entrée n’apparaîtra pas dans les rapports tels que le bilan de santé ou les mots de passe compromis (HIBP), même si elle ne correspond pas aux exigences de qualité (p. ex. entropie ou réutilisation du mot de passe). Vous pouvez la cocher si le mot de passe échappe à votre contrôle (p. ex. s’il doit être un NIP à quatre chiffres), afin d’empêcher qu’il encombre les rapports.</p></body></html> -- -- -- Exclude from database reports -- Exclure des rapports de base de données -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Activer la saisie automatique pour cette entrée -- -- -- Window Associations -- Associations de fenêtres -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Titre de la fenêtre : -- -- -- Use a specific sequence for this association: -- Utiliser une séquence précise pour cette association : -- -- -- Custom Auto-Type sequence -- Séquence personnalisée de saisie automatique -- -- -- Open Auto-Type help webpage -- Ouvrir la page Web d’aide de la saisie automatique -- -- -- Existing window associations -- Associations de fenêtres existantes -- -- -- Add new window association -- Ajouter une nouvelle association de fenêtre -- -- -- Remove selected window association -- Supprimer l’association de fenêtre sélectionnée -- -- -- You can use an asterisk (*) to match everything -- Vous pouvez utiliser un astérisque (*) pour tout inclure -- -- -- Set the window association title -- Définir le titre de l’association de fenêtre -- -- -- You can use an asterisk to match everything -- Vous pouvez utiliser un astérisque pour tout inclure -- -- -- Custom Auto-Type sequence for this window -- Séquence personnalisée de saisie automatique pour cette fenêtre -- -- -- Inherit default Auto-Type sequence from the group -- Hériter du groupe la séquence par défaut de saisie automatique -- -- -- Use custom Auto-Type sequence: -- Utiliser une séquence personnalisée de saisie automatique : -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Ces paramètres affectent le comportement de l’entrée avec l’extension pour navigateurs. -- -- -- General -- Général -- -- -- Skip Auto-Submit for this entry -- Ignorer l’envoi automatique pour cette entrée -- -- -- Hide this entry from the browser extension -- Cacher cette entrée aux yeux de l’extension pour navigateurs -- -- -- Additional URL's -- URL supplémentaires -- -- -- Add -- Ajouter -- -- -- Remove -- Supprimer -- -- -- Edit -- Modifier -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- N’envoyer ce paramètre au navigateur que pour les boîtes de dialogue d’authentification HTTP. Si cette option est activée, cette entrée ne sera pas présentée par les formulaires d’authentification normaux comme possibilité de sélection. -- -- -- Use this entry only with HTTP Basic Auth -- N’utiliser cette entrée qu’avec l’authentification HTTP Basic -- -- -- -- EditEntryWidgetHistory -- -- Show -- Afficher -- -- -- Restore -- Restaurer -- -- -- Delete -- Supprimer -- -- -- Delete all -- Tout supprimer -- -- -- Entry history selection -- Sélection de l’historique de l’entrée -- -- -- Show entry at selected history state -- Afficher l’entrée pour l’état historique sélectionné -- -- -- Restore entry to selected history state -- Restaurer l’entrée vers l’état historique sélectionné -- -- -- Delete selected history state -- Supprimer l’état historique sélectionné -- -- -- Delete all history -- Supprimer tout l’historique -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL : -- -- -- Password: -- Mot de passe : -- -- -- Title: -- Titre : -- -- -- Presets -- Préréglages -- -- -- Toggle the checkbox to reveal the notes section. -- Cochez la case pour révéler la section des notes. -- -- -- Username: -- Nom d’utilisateur : -- -- -- Url field -- Champ d’URL -- -- -- Download favicon for URL -- Télécharger une favoricône pour l’URL -- -- -- Password field -- Champ de mot de passe -- -- -- Toggle notes visible -- Activer ou désactiver la visibilité des notes -- -- -- Expiration field -- Champ d’expiration -- -- -- Expiration Presets -- Préréglages de l’expiration -- -- -- Expiration presets -- Préréglages de l’expiration -- -- -- Notes field -- Champ de note -- -- -- Title field -- Champ de titre -- -- -- Username field -- Champ de nom d’utilisateur -- -- -- Toggle expiration -- Activer ou désactiver l’expiration -- -- -- Notes: -- Notes : -- -- -- https://example.com -- https://exemple.com -- -- -- Expires: -- Expire le : -- -- -- Edit Entry -- Modifier l’entrée -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulaire -- -- -- Remove key from agent after -- Supprimer la clé de l’agent après -- -- -- seconds -- secondes -- -- -- Fingerprint -- Empreinte -- -- -- Remove key from agent when database is closed/locked -- Supprimer la clé de l’agent si la base de données est fermée ou verrouillée -- -- -- Public key -- Clé publique -- -- -- Add key to agent when database is opened/unlocked -- Ajouter la clé à l’agent si la base de données est ouverte ou déverrouillée -- -- -- Comment -- Commentaire -- -- -- Decrypt -- Déchiffrer -- -- -- n/a -- s.o. -- -- -- Copy to clipboard -- Copier dans le presse-papiers -- -- -- Private key -- Clé privée -- -- -- External file -- Fichier externe -- -- -- Browse... -- Button for opening file dialog -- Parcourir… -- -- -- Attachment -- Fichier joint -- -- -- Add to agent -- Ajouter à l’agent -- -- -- Remove from agent -- Retirer de l’agent -- -- -- Require user confirmation when this key is used -- Exiger la confirmation de l’utilisateur quand cette clé est utilisée -- -- -- Remove key from agent after specified seconds -- Supprimer la clé de l’agent après le nombre de secondes indiqué -- -- -- Browser for key file -- Rechercher un fichier clé -- -- -- External key file -- Fichier clé externe -- -- -- Select attachment file -- Sélectionner une fichier joint -- -- -- -- EditGroupWidget -- -- Group -- Groupe -- -- -- Icon -- Icône -- -- -- Properties -- Propriétés -- -- -- Add group -- Ajouter un groupe -- -- -- Edit group -- Modifier le groupe -- -- -- Enable -- Activer -- -- -- Disable -- Désactiver -- -- -- Inherit from parent group (%1) -- Hériter du groupe parent (%1) -- -- -- Entry has unsaved changes -- L’entrée comporte des changements non enregistrés -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type : -- -- -- Path: -- Chemin : -- -- -- Password: -- Mot de passe : -- -- -- Inactive -- Inactif -- -- -- KeeShare unsigned container -- Conteneur KeeShare non signé -- -- -- KeeShare signed container -- Conteneur KeeShare signé -- -- -- Select import source -- Sélectionner la source d’importation -- -- -- Select export target -- Sélectionner la cible de l’exportation -- -- -- Select import/export file -- Sélectionner le fichier d’importation ou d’exportation -- -- -- Clear -- Effacer -- -- -- Import -- Importer -- -- -- Export -- Exporter -- -- -- Synchronize -- Synchroniser -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Votre version de KeePassXC ne prend pas en charge le partage de ce type de conteneur. Les extensions prises en charge sont : %1. -- -- -- %1 is already being exported by this database. -- %1 est déjà exporté par cette base de données. -- -- -- %1 is already being imported by this database. -- %1 est déjà importé par cette base de données. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 est importé et exporté par différents groupes dans cette base de données. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare est actuellement désactivé. Vous pouvez activer l’importation et l’exportation dans les paramètres de l’application. -- -- -- Database export is currently disabled by application settings. -- L’exportation de la base de données est actuellement désactivée par les paramètres de l’application. -- -- -- Database import is currently disabled by application settings. -- L’importation de la base de données est actuellement désactivée par les paramètres de l’application. -- -- -- Sharing mode field -- Champ de mode de partage -- -- -- Path to share file field -- Champ de chemin vers le fichier partagé -- -- -- Password field -- Champ de mot de passe -- -- -- Clear fields -- Effacer les champs -- -- -- Browse for share file -- Sélectionner un fichier à partager -- -- -- Browse... -- Parcourir… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Champ de nom -- -- -- Notes field -- Champ de note -- -- -- Toggle expiration -- Activer ou désactiver l’expiration -- -- -- Auto-Type toggle for this and sub groups -- Activer ou désactiver la saisie automatique pour cela et les sous-groupes -- -- -- Expiration field -- Champ d’expiration -- -- -- Search toggle for this and sub groups -- Activer ou désactiver la recherche pour cela et les sous-groupes -- -- -- Default auto-type sequence field -- Champ de séquence par défaut de saisie automatique -- -- -- Expires: -- Expire le : -- -- -- Use default Auto-Type sequence of parent group -- Utiliser la séquence par défaut de saisie automatique du groupe parent -- -- -- Auto-Type: -- Saisie automatique : -- -- -- Search: -- Recherche : -- -- -- Notes: -- Notes : -- -- -- Name: -- Nom : -- -- -- Set default Auto-Type sequence -- Définir la séquence par défaut de saisie automatique -- -- -- Edit Group -- Modifier le groupe -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Ajouter une icône personnalisée -- -- -- Delete custom icon -- Supprimer l’icône personnalisée -- -- -- Download favicon -- Télécharger une favoricône -- -- -- Unable to fetch favicon. -- Impossible de récupérer la favoricône -- -- -- Images -- Images -- -- -- All files -- Tous les fichiers -- -- -- Confirm Delete -- Confirmer la suppression -- -- -- Select Image(s) -- Sélectionner des images -- -- -- Successfully loaded %1 of %n icon(s) -- %1 icône d’un total de %n a été chargée avec succès%1 icônes d’un total de %n ont été chargées avec succès -- -- -- No icons were loaded -- Aucune icône n’a été chargée -- -- -- %n icon(s) already exist in the database -- %n icône existe déjà dans la base de données%n icônes existent déjà dans la base de données -- -- -- The following icon(s) failed: -- Échec de l’icône suivante :Échec des icônes suivantes : -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Cette icône est utilisée par %n entrée et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ?Cette icône est utilisée par %n entrées et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans Outils > Paramètres > Sécurité -- -- -- Download favicon for URL -- Télécharger une favoricône pour l’URL -- -- -- Apply selected icon to subgroups and entries -- Appliquer l’icône sélectionnée aux sous-groupes et entrées -- -- -- Also apply to child groups -- Appliquer aussi aux groupes enfant -- -- -- Also apply to child entries -- Appliquer aussi aux entrées enfant -- -- -- Also apply to all children -- Appliquer aussi à tous les enfants -- -- -- Existing icon selected. -- L’icône existante a été sélectionnée. -- -- -- Use default icon -- Utiliser l’icône par défaut -- -- -- Use custom icon -- Utiliser une icône personnalisée -- -- -- Apply icon to... -- Appliquer l’icône à… -- -- -- Apply to this group only -- N’appliquer qu’à ce groupe -- -- -- -- EditWidgetProperties -- -- Created: -- Création : -- -- -- Modified: -- Modification : -- -- -- Accessed: -- Accès : -- -- -- Uuid: -- UUID : -- -- -- Plugin Data -- Données de l’extension -- -- -- Remove -- Supprimer -- -- -- Delete plugin data? -- Supprimer les données de l’extension ? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Voulez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées. -- -- -- Key -- Clé -- -- -- Value -- Valeur -- -- -- Datetime created -- Date et heure de création -- -- -- Datetime modified -- Date et heure de modification -- -- -- Datetime accessed -- Date et heure d’accès -- -- -- Unique ID -- ID unique -- -- -- Plugin data -- Données de l’extension -- -- -- Remove selected plugin data -- Supprimer les données d’extension sélectionnée -- -- -- -- Entry -- -- %1 - Clone -- %1 – Cloner -- -- -- -- EntryAttachmentsModel -- -- Name -- Nom -- -- -- Size -- Taille -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulaire -- -- -- Add -- Ajouter -- -- -- Remove -- Supprimer -- -- -- Open -- Ouvrir -- -- -- Save -- Enregistrer -- -- -- Select files -- Sélectionner des fichiers -- -- -- Are you sure you want to remove %n attachment(s)? -- Voulez-vous vraiment supprimer %n fichier joint ?Voulez-vous vraiment supprimer %n fichiers joints ? -- -- -- Save attachments -- Enregistrer les fichiers joints -- -- -- Unable to create directory: --%1 -- Impossible de créer le répertoire : --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? -- -- -- Confirm overwrite -- Confirmer le remplacement -- -- -- Unable to save attachments: --%1 -- Impossible d’enregistrer les fichiers joints : --%1 -- -- -- Unable to open attachment: --%1 -- Impossible d’ouvrir le fichier joint : --%1 -- -- -- Unable to open attachments: --%1 -- Impossible d’ouvrir les fichiers joints : --%1 -- -- -- Confirm remove -- Confirmer la suppression -- -- -- Unable to open file(s): --%1 -- Impossible d’ouvrir le fichier : --%1Impossible d’ouvrir les fichiers : --%1 -- -- -- Attachments -- Fichiers joints -- -- -- Add new attachment -- Ajouter une nouveau fichier joint -- -- -- Remove selected attachment -- Supprimer le fichier joint sélectionné -- -- -- Open selected attachment -- Ouvrir le fichier joint sélectionné -- -- -- Save selected attachment to disk -- Enregistrer sur le disque le fichier joint sélectionné -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 est un gros fichier (%2 Mo). --Votre base de données pourrait prendre de l’ampleur et réduire les performances. -- --Voulez-vous vraiment ajouter ce fichier ? -- -- -- Confirm Attachment -- Confirmer le fichier joint -- -- -- -- EntryAttributesModel -- -- Name -- Nom -- -- -- -- EntryHistoryModel -- -- Last modified -- Dernière modification -- -- -- Title -- Titre -- -- -- Username -- Nom d’utilisateur -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Réf. : -- -- -- Group -- Groupe -- -- -- Title -- Titre -- -- -- Username -- Nom d’utilisateur -- -- -- URL -- URL -- -- -- Never -- Jamais -- -- -- Password -- Mot de passe -- -- -- Notes -- Notes -- -- -- Expires -- Expire le -- -- -- Created -- Créée -- -- -- Modified -- Modifiée -- -- -- Accessed -- Accès -- -- -- Attachments -- Fichiers joints -- -- -- Size -- Taille -- -- -- Group name -- Nom du groupe -- -- -- Entry title -- Titre de l’entrée -- -- -- Entry notes -- Notes de l’entrée -- -- -- Entry expires at -- L’entrée expire à -- -- -- Creation date -- Date de création -- -- -- Last modification date -- Date de dernière modification -- -- -- Last access date -- Date de dernier accès -- -- -- Attached files -- Fichiers joints -- -- -- Entry size -- Taille de l’entrée -- -- -- Has attachments -- Comprend des fichiers joints -- -- -- Has TOTP one-time password -- A un mot de passe TOTP à usage unique -- -- -- -- EntryPreviewWidget -- -- Close -- Fermer -- -- -- General -- Général -- -- -- Username -- Nom d’utilisateur -- -- -- Password -- Mot de passe -- -- -- Expiration -- Expiration -- -- -- URL -- URL -- -- -- Attributes -- Attributs -- -- -- Attachments -- Fichiers joints -- -- -- Notes -- Notes -- -- -- Autotype -- Saisie automatique -- -- -- Window -- Fenêtre -- -- -- Sequence -- Séquence -- -- -- Searching -- Recherche -- -- -- Search -- Chercher -- -- -- Clear -- Effacer -- -- -- Never -- Jamais -- -- -- [PROTECTED] -- [PROTÉGÉ] -- -- -- Enabled -- Activé -- -- -- Disabled -- Désactivé -- -- -- Share -- Partager -- -- -- Display current TOTP value -- Afficher la valeur TOTP actuelle -- -- -- Advanced -- Avancé -- -- -- Default Sequence -- Séquence par défaut -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- L’URL est invalide -- -- -- -- EntryView -- -- Fit to window -- Adapter à la fenêtre -- -- -- Fit to contents -- Adapter au contenu -- -- -- Reset to defaults -- Réinitialiser aux valeurs par défaut -- -- -- Has attachments -- Entry attachment icon toggle -- Comprend des fichiers joints -- -- -- Has TOTP -- Entry TOTP icon toggle -- A un TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- L’entrée « %1 » de la base de données « %2 » a été utilisée par %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Échec d’inscription du service DBus à %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n entrée était utilisée par %1%n entrées étaient utilisées par %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nom de fichier -- -- -- Group -- Groupe -- -- -- Manage -- Gérer -- -- -- Unlock to show -- Déverrouiller pour afficher -- -- -- None -- Aucun -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Application -- -- -- Manage -- Gérer -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>« Secret Service » de Fdo :</b> %1 -- -- -- Unknown -- Unknown PID -- Inconnu -- -- -- Unknown -- Unknown executable path -- Inconnu -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID : %1, exécutable : %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Un autre « secret service » est en cours d’exécution (%1).<br/>Veuillez l’arrêter ou le supprimer avant de réactiver l’intégration à « Secret Service ». -- -- -- -- Group -- -- [empty] -- group has no children -- [vide] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Échec de validation du mot de passe en ligne -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Télécharger des favoricônes -- -- -- Cancel -- Annuler -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Des problèmes pour télécharger les icônes ? --Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la section sécurité des paramètres de l’application. -- -- -- Close -- Fermer -- -- -- URL -- URL -- -- -- Status -- État -- -- -- Please wait, processing entry list... -- Veuillez patienter, traitement de la liste des entrées… -- -- -- Downloading... -- Téléchargement… -- -- -- Ok -- Valider -- -- -- Already Exists -- Existe déjà -- -- -- Download Failed -- Échec de téléchargement -- -- -- Downloading favicons (%1/%2)... -- Téléchargement des favoricônes (%1/%2)… -- -- -- -- KMessageWidget -- -- &Close -- &Fermer -- -- -- Close message -- Fermer le message -- -- -- -- Kdbx3Reader -- -- missing database headers -- les en-têtes de la base de données manquent -- -- -- Header doesn't match hash -- L’en-tête ne correspond pas à l’empreinte numérique -- -- -- Invalid header id size -- La taille de l’ID d’en-tête est invalide -- -- -- Invalid header field length -- La longueur du champ d’en-tête est invalide -- -- -- Invalid header data length -- La longueur des données d’en-tête est invalide -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Des identifiants invalides ont été fournis, veuillez réessayer. --Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. -- -- -- Unable to calculate database key -- Impossible de calculer la clé de la base de données -- -- -- Unable to issue challenge-response: %1 -- Impossible de lancer une question-réponse : %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Impossible de lancer une question-réponse : %1 -- -- -- Unable to calculate database key -- Impossible de calculer la clé de la base de données -- -- -- -- Kdbx4Reader -- -- missing database headers -- les en-têtes de la base de données manquent -- -- -- Invalid header checksum size -- La taille de la somme de contrôle de l’en-tête est invalide -- -- -- Header SHA256 mismatch -- Le SHA256 de l’en-tête ne correspond pas -- -- -- Unknown cipher -- Chiffrement inconnu -- -- -- Invalid header id size -- La taille de l’ID d’en-tête est invalide -- -- -- Invalid header field length -- La longueur du champ d’en-tête est invalide -- -- -- Invalid header data length -- La longueur des données d’en-tête est invalide -- -- -- Failed to open buffer for KDF parameters in header -- Échec d’ouverture d’un tampon pour les paramètres de fonction de dérivation de clé dans l’en-tête -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- La fonction de dérivation de clé (KDF) n’est pas prise en charge ou les paramètres sont invalides -- -- -- Legacy header fields found in KDBX4 file. -- Des champs d’en-tête hérités ont été trouvés dans le fichier KDBX4. -- -- -- Invalid inner header id size -- La taille de l’ID d’en-tête interne est invalide -- -- -- Invalid inner header field length -- La longueur du champ d’en-tête interne est invalide -- -- -- Invalid inner header binary size -- La taille binaire d’en-tête interne est invalide -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- La version de la mappe de variantes KeePass n’est pas prise charge. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- La longueur d’un nom d’entrée de la mappe de variantes est invalide -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Les données d’un nom d’entrée de la mappe de variantes sont invalides -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée de la mappe de variantes est invalide -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Les données d’une valeur d’entrée de la mappe de variantes sont invalides -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée Bool de la mappe de variantes est invalide -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée Int32 de la mappe de variantes est invalide -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée UInt32 de la mappe de variantes est invalide -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée Int64 de la mappe de variantes est invalide -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- La longueur d’une valeur d’entrée UInt64 de la mappe de variantes est invalide -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Le type d’une entrée de la mappe de variantes est invalide -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- La taille du type d’un champ de la mappe de variantes est invalide -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Des identifiants invalides ont été fournis, veuillez réessayer. --Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. -- -- -- (HMAC mismatch) -- (HMAC ne correspond pas) -- -- -- Unable to calculate database key: %1 -- Impossible de calculer la clé de la base de données : %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- L’algorithme de chiffrement symétrique est invalide -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- La taille du chiffrement IV symétrique est invalide. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Échec de sérialisation des paramètres de fonction de dérivation de clé de la mappe de variantes. -- -- -- Unable to calculate database key: %1 -- Impossible de calculer la clé de la base de données : %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Chiffrement non pris en charge -- -- -- Invalid compression flags length -- La longueur des drapeaux de compression est invalide. -- -- -- Unsupported compression algorithm -- L’algorithme de compression n’est pas pris en charge -- -- -- Invalid master seed size -- La taille de la graine maîtresse est invalide -- -- -- Invalid transform seed size -- La taille de la semence de transformation est invalide -- -- -- Invalid transform rounds size -- La taille des cycles de transformation est invalide -- -- -- Invalid start bytes size -- La taille des octets de début est invalide -- -- -- Invalid random stream id size -- La taille de l’ID de flux aléatoire est invalide. -- -- -- Invalid inner random stream cipher -- Le chiffrement du flux intérieur aléatoire est invalide -- -- -- Not a KeePass database. -- N’est pas une base de données KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Le fichier sélectionné est une ancienne base de données KeePass 1 (.kdb). -- --Vous pouvez l’importer en cliquant sur Base de données > « Importer une base de données KeePass 1… ». --Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base de données importée avec l’ancienne version KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Version de base de données KeePass 2 non pris en charge. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- La longueur de l’UUID de chiffrement est invalide : %1 (longueur = %2) -- -- -- Unable to parse UUID: %1 -- Impossible d’analyser l’UUID : %1 -- -- -- Failed to read database file. -- Échec de lecture du fichier de base de données. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Échec d’analyse XML : %1 -- -- -- No root group -- Aucun groupe racine -- -- -- Missing icon uuid or data -- L’UUID ou les données de l’icône manquent -- -- -- Missing custom data key or value -- La valeur ou la clé des données personnalisées manque -- -- -- Multiple group elements -- Éléments de groupe multiples -- -- -- Null group uuid -- UUID de groupe nul -- -- -- Invalid group icon number -- Le numéro de l’icône du groupe est invalide -- -- -- Invalid EnableAutoType value -- La valeur EnableAutoType est invalide -- -- -- Invalid EnableSearching value -- La valeur de EnableSearching est invalide -- -- -- No group uuid found -- Aucun UUID de groupe n’a été trouvé -- -- -- Null DeleteObject uuid -- UUID de DeleteObject null -- -- -- Missing DeletedObject uuid or time -- L’UUID ou l’heure de DeletedObject manque -- -- -- Null entry uuid -- UUID de l’entrée null -- -- -- Invalid entry icon number -- Le numéro de l’icône de l’entrée est invalide -- -- -- History element in history entry -- Élément d’historique dans l’entrée de l’historique -- -- -- No entry uuid found -- Aucun UUID d’entrée n’a été trouvé -- -- -- History element with different uuid -- Élément d’historique avec un UUID différent -- -- -- Duplicate custom attribute found -- Un doublon d’attribut personnalisé a été trouvé -- -- -- Entry string key or value missing -- La clé ou la valeur de chaîne de l’entrée manque -- -- -- Entry binary key or value missing -- La clé ou la valeur binaire de l’entrée manque -- -- -- Auto-type association window or sequence missing -- La fenêtre d’association ou la séquence de saisie automatique manque -- -- -- Invalid bool value -- La valeur booléenne est invalide -- -- -- Invalid date time value -- La valeur de date et d’heure est invalide -- -- -- Invalid color value -- La valeur de couleur est invalide -- -- -- Invalid color rgb part -- La partie de couleur RVB est invalide -- -- -- Invalid number value -- La valeur numérique est invalide -- -- -- Invalid uuid value -- La valeur d’UUID est invalide -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Impossible de décompresser les données binaires -- -- -- XML error: --%1 --Line %2, column %3 -- Erreur XML : --%1 --Ligne %2, colonne %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- La structure du fichier de paramètres KeeAgent est invalide. -- -- -- Private key is an attachment but no attachments provided. -- La clé privée est un fichier joint, mais aucun fichier joint n’est fourni. -- -- -- Private key is empty -- La clé privée est vide -- -- -- File too large to be a private key -- Le fichier est trop important pour être un fichier clé -- -- -- Failed to open private key -- Échec d’ouverture de la clé privée -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Impossible d’ouvrir la base de données. -- -- -- Import KeePass1 Database -- Importer une base de données KeePass 1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Impossible de lire le fichier clé. -- -- -- Not a KeePass database. -- N’est pas une base de données KeePass. -- -- -- Unsupported encryption algorithm. -- Algorithme de chiffrement non pris en charge. -- -- -- Unsupported KeePass database version. -- Version de base de données KeePass non prise en charge. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Impossible de lire le chiffrement IV -- -- -- Invalid number of groups -- Le nombre de groupes est invalide -- -- -- Invalid number of entries -- Le nombre d’entrées est invalide -- -- -- Invalid content hash size -- La taille de l’empreinte du contenu est invalide -- -- -- Invalid transform seed size -- La taille de la semence de transformation est invalide -- -- -- Invalid number of transform rounds -- Le nombre de cycles de transformation est invalide -- -- -- Unable to construct group tree -- Impossible de créer l’arborescence du groupe -- -- -- Root -- Racine -- -- -- Key transformation failed -- Échec de transformation de la clé -- -- -- Invalid group field type number -- Le numéro de type du champ de groupe est invalide -- -- -- Invalid group field size -- La taille du champ de groupe est invalide -- -- -- Read group field data doesn't match size -- Les données du champ de groupe lues ne correspondent pas à la taille -- -- -- Incorrect group id field size -- La taille du champ « ID du groupe » est incorrecte -- -- -- Incorrect group creation time field size -- La taille du champ d’heure de création du groupe est incorrecte -- -- -- Incorrect group modification time field size -- La taille du champ d’heure de modification du groupe est incorrecte -- -- -- Incorrect group access time field size -- La taille du champ de date d’accès du groupe est incorrecte. -- -- -- Incorrect group expiry time field size -- La taille du champ de date d’expiration du groupe est incorrecte. -- -- -- Incorrect group icon field size -- La taille du champ d’icône du groupe est incorrecte -- -- -- Incorrect group level field size -- La taille de champ du niveau du groupe est incorrecte -- -- -- Invalid group field type -- La taille du champ de groupe est invalide -- -- -- Missing group id or level -- L’ID ou le niveau du groupe manque -- -- -- Missing entry field type number -- Le numéro de type du champ d’entrée manque -- -- -- Invalid entry field size -- La taille du champ d’entrée est invalide -- -- -- Read entry field data doesn't match size -- Les données du champ d’entrée lues ne correspondent pas à la taille. -- -- -- Invalid entry uuid field size -- La taille du champ UUID de l’entrée est invalide -- -- -- Invalid entry group id field size -- La taille du champ d’ID de groupe de l’entrée est invalide -- -- -- Invalid entry icon field size -- La taille du champ d’icône de l’entrée est invalide -- -- -- Invalid entry creation time field size -- La taille du champ de date de création de l’entrée est invalide -- -- -- Invalid entry modification time field size -- La taille du champ de date de modification de l’entrée est invalide -- -- -- Invalid entry expiry time field size -- La taille du champ de date d’expiration de l’entrée est invalide -- -- -- Invalid entry field type -- Le type du champ d’entrée est invalide -- -- -- unable to seek to content position -- impossible de se déplacer vers la position du contenu -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Des identifiants invalides ont été fournis, veuillez réessayer. --Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. -- -- -- Unable to calculate database key -- Impossible de calculer la clé de la base de données -- -- -- -- KeeShare -- -- Invalid sharing reference -- La référence de partage est invalide -- -- -- Inactive share %1 -- Le partage %1 est inactif -- -- -- Imported from %1 -- Importé de %1 -- -- -- Exported to %1 -- A été exporté vers %1 -- -- -- Synchronized with %1 -- A été synchronisé avec %1 -- -- -- Import is disabled in settings -- L’importation est désactivée dans les paramètres -- -- -- Export is disabled in settings -- L’exportation est désactivée dans les paramètres -- -- -- Inactive share -- Le partage est inactif -- -- -- Imported from -- A été importé de -- -- -- Exported to -- A été exporté vers -- -- -- Synchronized with -- A été synchronisé avec -- -- -- -- KeyComponentWidget -- -- Key Component -- Composant clé -- -- -- Key Component Description -- Description du composant clé -- -- -- Cancel -- Annuler -- -- -- Key Component set, click to change or remove -- Le composant clé est défini, cliquez pour le changer ou le supprimer -- -- -- Add %1 -- Add a key component -- Ajouter %1 -- -- -- Change %1 -- Change a key component -- Changer %1 -- -- -- Remove %1 -- Remove a key component -- Supprimer %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 est défini, cliquez pour le changer ou le supprimer -- -- -- -- KeyFileEditWidget -- -- Generate -- Générer -- -- -- Key File -- Fichier clé -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Pour une sécurité accrue, vous pouvez ajouter un fichier clé qui comprend des octets aléatoires.</p><p>Vous devez le garder secret et ne jamais le perdre ou vous ne pourrez plus vous connecter.</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Erreur durant le chargement du fichier clé « %1 » --Message : %2 -- -- -- Key files -- Fichiers clés -- -- -- All files -- Tous les fichiers -- -- -- Create Key File... -- Créer un fichier clé… -- -- -- Error creating key file -- Erreur lors de la création du fichier clé -- -- -- Unable to create key file: %1 -- Impossible de créer le fichier clé : %1 -- -- -- Select a key file -- Sélectionner un fichier clé -- -- -- Key file selection -- Sélection du fichier clé -- -- -- Browse for key file -- Rechercher un fichier clé -- -- -- Browse... -- Parcourir… -- -- -- Generate a new key file -- Générer un nouveau fichier clé -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Note : N’utilisez pas un fichier qui pourrait changer, car cela pourrait vous empêcher de déverrouiller votre base de données. -- -- -- Invalid Key File -- Le fichier clé est invalide -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Vous ne pouvez pas utiliser la base de données actuelle comme son propre fichier clé. Veuillez choisir un autre fichier ou générer un nouveau fichier clé. -- -- -- Suspicious Key File -- Fichier clé douteux -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais ou vous perdrez irrémédiablement l’accès à votre base de données. --Voulez-vous vraiment poursuivre avec ce fichier ? -- -- -- Old key file format -- Ancien format de fichier clé -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Vous utilisez un ancien format de fichier clé que KeePassXC <br>pourrait ne plus prendre en charge à l’avenir.<br><br>Veuillez envisager de plutôt générer un nouveau fichier clé. -- -- -- -- MainWindow -- -- &Database -- &Base de données -- -- -- &Help -- &Aide -- -- -- &Groups -- &Groupes -- -- -- &Tools -- &Outils -- -- -- &Quit -- &Fermer -- -- -- &About -- À &propos -- -- -- Database settings -- Paramètres de la base de données -- -- -- Copy username to clipboard -- Copier le nom d’utilisateur dans le presse-papiers -- -- -- Copy password to clipboard -- Copier le mot de passe dans le presse-papiers -- -- -- &Settings -- &Paramètres -- -- -- &Title -- &Titre -- -- -- Copy title to clipboard -- Copier le titre dans le presse-papiers -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copier l’URL dans le presse-papiers -- -- -- &Notes -- &Notes -- -- -- Copy notes to clipboard -- Copier les notes dans le presse-papiers -- -- -- Copy &TOTP -- Copier le &TOTP -- -- -- E&mpty recycle bin -- &Vider la corbeille -- -- -- Clear history -- Effacer l’historique -- -- -- Access error for config file %1 -- Erreur d’accès pour le fichier de configuration %1 -- -- -- Settings -- Paramètres -- -- -- Toggle window -- Activer ou désactiver la fenêtre -- -- -- Quit KeePassXC -- Fermer KeePassXC -- -- -- Please touch the button on your YubiKey! -- Veuillez appuyez sur le bouton de votre YubiKey -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- AVERTISSEMENT : Vous utilisez une version instable du KeePassXC. --Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données. --Cette version n’est pas destinée à un usage régulier. -- -- -- &Donate -- &Faire un don -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- AVERTISSEMENT : Votre version de Qt pourrait faire planter KeePassXC avec un clavier virtuel. --Nous recommandons d’utiliser l’AppImage proposée sur notre page de téléchargement. -- -- -- &Import -- &Importer -- -- -- Create a new database -- Créer une nouvelle base de données -- -- -- Merge from another KDBX database -- Fusionner d’une autre base de données KDBX -- -- -- Add a new entry -- Ajouter une nouvelle entrée -- -- -- View or edit entry -- Voir ou modifier l’entrée -- -- -- Add a new group -- Ajouter un nouveau groupe -- -- -- Perform &Auto-Type -- Saisir &automatiquement -- -- -- Open &URL -- Ouvrir l’&URL -- -- -- Import a KeePass 1 database -- Importer une base de données KeePass 1 -- -- -- Import a CSV file -- Importer un fichier CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTE : Vous utilisez une préversion de KeePassXC. --Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas destinée à un usage régulier. -- -- -- Check for updates on startup? -- Vérifier la présence de mises à jour au démarrage ? -- -- -- Would you like KeePassXC to check for updates on startup? -- Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? -- -- -- You can always check for updates manually from the application menu. -- Vous pouvez toujours vérifier manuellement la présence de mises à jour à partir du menu de l’application. -- -- -- &Export -- &Exporter -- -- -- Sort &A-Z -- Trier de &A à Z -- -- -- Sort &Z-A -- Trier de &Z à A -- -- -- &Password Generator -- &Générateur de mot de passe -- -- -- Import a 1Password Vault -- Importer un coffre 1Password -- -- -- &Getting Started -- &Guide de démarrage -- -- -- &User Guide -- Guide d’&utilisation -- -- -- &Keyboard Shortcuts -- &Raccourcis clavier -- -- -- &Recent Databases -- Bases de données &récentes -- -- -- &Entries -- &Entrées -- -- -- Copy Att&ribute -- Copier l’att&ribut -- -- -- TOTP -- TOTP -- -- -- View -- Affichage -- -- -- Theme -- Thème -- -- -- &Check for Updates -- &Vérifier la présence de mises à jour -- -- -- &Open Database… -- &Ouvrir une base de données… -- -- -- &Save Database -- Enregistrer la base de donnée&s -- -- -- &Close Database -- Fermer la &base de données -- -- -- &New Database… -- &Nouvelle base de données… -- -- -- &Merge From Database… -- Fusio&nner à partir d’une base de données… -- -- -- &New Entry… -- &Nouvelle entrée… -- -- -- &Edit Entry… -- &Modifier l’entrée… -- -- -- &Delete Entry… -- &Supprimer l’entrée… -- -- -- &New Group… -- &Nouveau groupe… -- -- -- &Edit Group… -- &Modifier le groupe… -- -- -- &Delete Group… -- &Supprimer le groupe… -- -- -- Download All &Favicons… -- Télécharger toutes les &favoricônes… -- -- -- Sa&ve Database As… -- Enre&gistrer la base de données sous… -- -- -- Database &Security… -- &Sécurité de la base de données… -- -- -- Database &Reports... -- &Rapports de la base de données… -- -- -- Statistics, health check, etc. -- Statistiques, bilan de santé, etc. -- -- -- &Database Settings… -- &Paramètres de la base de données… -- -- -- &Clone Entry… -- &Cloner l’entrée… -- -- -- Move u&p -- Déplacer vers le &haut -- -- -- Move entry one step up -- Déplacer l’entrée d’un niveau vers le haut -- -- -- Move do&wn -- Déplacer vers le &bas -- -- -- Move entry one step down -- Déplacer l’entrée d’un niveau vers le bas -- -- -- Copy &Username -- Copier le nom d’&utilisateur -- -- -- Copy &Password -- Copier le mot de &passe -- -- -- Download &Favicon -- Télécharger une &favoricône -- -- -- &Lock Databases -- &Verrouiller les bases de données -- -- -- &CSV File… -- Fichier &CSV… -- -- -- &HTML File… -- Fichier &HTML… -- -- -- KeePass 1 Database… -- Base de données KeePass 1… -- -- -- 1Password Vault… -- Coffre 1Password… -- -- -- CSV File… -- Fichier CSV… -- -- -- Show TOTP -- Afficher le TOTP -- -- -- Show QR Code -- Afficher le QR code -- -- -- Set up TOTP… -- Configurer TOTP… -- -- -- Report a &Bug -- Signaler un &bogue -- -- -- Open Getting Started Guide -- Ouvrir le guide de démarrage -- -- -- &Online Help -- &Aide en ligne -- -- -- Go to online documentation -- Accéder à la documentation en ligne -- -- -- Open User Guide -- Ouvrir le guide d’utilisation -- -- -- Save Database Backup... -- Sauvegarder la base de données… -- -- -- Add key to SSH Agent -- Ajouter une clé à l’agent SSH -- -- -- Remove key from SSH Agent -- Supprimer la clé de l’agent SSH -- -- -- Compact Mode -- Mode compact -- -- -- Automatic -- Automatique -- -- -- Light -- Clair -- -- -- Dark -- Sombre -- -- -- Classic (Platform-native) -- Classique (de la plateforme) -- -- -- Show Toolbar -- Afficher la barre d’outils -- -- -- Show Preview Panel -- Afficher le panneau de prévisualisation -- -- -- Don't show again for this version -- Ne plus afficher pour cette version -- -- -- Restart Application? -- Redémarrer l’application ? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Pour appliquer ce paramètre, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? -- -- -- Perform Auto-Type Sequence -- Effectuer une séquence de saisie automatique -- -- -- {USERNAME} -- {NOMD’UTILISATEUR} -- -- -- {USERNAME}{ENTER} -- {NOMD’UTILISATEUR}{ENTRÉE} -- -- -- {PASSWORD} -- {MOTDEPASSE} -- -- -- {PASSWORD}{ENTER} -- {MOTDEPASSE}{ENTRÉE} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Cacher les noms d’utilisateur -- -- -- Hide Passwords -- Cacher les mots de passe -- -- -- -- ManageDatabase -- -- Database settings -- Paramètres de la base de données -- -- -- Edit database settings -- Modifier les paramètres de la base de données -- -- -- Unlock database -- Déverrouiller la base de données -- -- -- Unlock database to show more information -- Déverrouiller la base de données pour afficher davantage de renseignements -- -- -- Lock database -- Verrouiller la base de données -- -- -- -- ManageSession -- -- Disconnect -- Déconnecter -- -- -- Disconnect this application -- Déconnecter cette application -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Création du %1 manquant [%2] -- -- -- Relocating %1 [%2] -- Déplacement de %1 [%2] -- -- -- Overwriting %1 [%2] -- Remplacement de %1 [%2] -- -- -- older entry merged from database "%1" -- ancienne entrée fusionnée de la base de données « %1 » -- -- -- Adding backup for older target %1 [%2] -- Ajout d’une sauvegarde pour l’ancienne cible %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Ajout d’une sauvegarde pour l’ancienne source %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Ré-application de l’ancienne entrée cible sur la nouvelle source %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Ré-application de l’ancienne entrée source sur la nouvelle cible %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronisation avec une source plus récente %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronisation avec une source plus ancienne %1 [%2] -- -- -- Deleting child %1 [%2] -- Suppression de l’enfant %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Suppression de l’orphelin %1 [%2] -- -- -- Changed deleted objects -- Objets supprimés changés -- -- -- Adding missing icon %1 -- Ajout de l’icône %1 manquante -- -- -- Removed custom data %1 [%2] -- Les données personnalisées %1 [%2] ont été supprimées -- -- -- Adding custom data %1 [%2] -- Ajout des données personnalisées %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Créer une nouvelle base de données KeePassXC… -- -- -- Root -- Root group -- Racine -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Page d’aide -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. -- -- -- Advanced Settings -- Paramètres avancés -- -- -- Simple Settings -- Paramètres simples -- -- -- Encryption Settings -- Paramètres de chiffrement -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Identifiants de la base de données -- -- -- A set of credentials known only to you that protects your database. -- Un jeu d’identifiants connus de vous seul, qui protège votre base de données. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Paramètres de chiffrement -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Renseignements généraux de la base de données -- -- -- Please fill in the display name and an optional description for your new database: -- Veuillez saisir le nom d’affichage et une description facultative pour votre nouvelle base de données : -- -- -- -- NixUtils -- -- Password Manager -- Gestionnaire de mots de passe -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 est invalide, ne comprend pas d’en-tête -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Impossible de lire les octets du vecteur d’initialisation, 16 nécessaires, %1 lus -- -- -- Unable to init cipher for opdata01: %1 -- Impossible d’initialiser le chiffrement pour opdata01 : %1 -- -- -- Unable to read all HMAC signature bytes -- Impossible de lire tous les octets de la signature HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 mal formé en raison d’un échec HMAC -- -- -- Unable to process clearText in place -- Impossible d’activer le traitement de ClearText -- -- -- Expected %1 bytes of clear-text, found %2 -- %1 octets de texte en clair étaient attendus, %2 ont été trouvés -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- La base de données lue n’a généré aucune instance --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Le répertoire .opvault doit exister -- -- -- Directory .opvault must be readable -- Le répertoire .opvault doit être lisible -- -- -- Directory .opvault/default must exist -- Le répertoire .opvault/default doit exister -- -- -- Directory .opvault/default must be readable -- Le répertoire .opvault/default doit être lisible -- -- -- Unable to decode masterKey: %1 -- Impossible de décoder la clé maîtresse : %1 -- -- -- Unable to derive master key: %1 -- Impossible de calculer la clé maîtresse : %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Une clé OpenSSH est requise, mais le fichier clé est invalide -- -- -- PEM boundary mismatch -- La limite PEM ne correspond pas -- -- -- Base64 decoding failed -- Échec du décodage Base64 -- -- -- Key file way too small. -- Le fichier clé est bien trop petit. -- -- -- Key file magic header id invalid -- L’identifiant d’en-tête magique du fichier clé est invalide -- -- -- Found zero keys -- Aucune clé n’a été trouvée -- -- -- Failed to read public key. -- Échec de lecture de la clé publique. -- -- -- Corrupted key file, reading private key failed -- Le fichier clé est corrompu. Échec de lecture de la clé privée. -- -- -- No private key payload to decrypt -- Il n’y a pas de données de clé privée à déchiffrer -- -- -- Trying to run KDF without cipher -- Tentative d’exécution de la fonction de dérivation de clé sans chiffrement -- -- -- Passphrase is required to decrypt this key -- Une phrase de passe est exigée pour déchiffrer cette clé -- -- -- Key derivation failed, key file corrupted? -- Échec de dérivation de la clé. Le fichier clé serait-il corrompu ? -- -- -- Decryption failed, wrong passphrase? -- Échec de déchiffrement. La phrase de passe est-elle erronée ? -- -- -- Unexpected EOF while reading public key -- Fin de fichier inattendue lors de la lecture de la clé publique -- -- -- Unexpected EOF while reading private key -- Fin de fichier inattendue lors de la lecture de la clé privée -- -- -- Can't write public key as it is empty -- Impossible d’écrire la clé publique, car elle est vide -- -- -- Unexpected EOF when writing public key -- Fin de fichier inattendue lors de l’écriture de la clé publique -- -- -- Can't write private key as it is empty -- Impossible d’écrire la clé privée, car elle est vide -- -- -- Unexpected EOF when writing private key -- Fin de fichier inattendue lors de l’écriture de la clé privée -- -- -- Unsupported key type: %1 -- Type de clé non pris en charge : %1 -- -- -- Unknown cipher: %1 -- Chiffrement inconnu : %1 -- -- -- Cipher IV is too short for MD5 kdf -- Le chiffrement IV est trop court pour la fonction de dérivation de clé MD5 -- -- -- Unknown KDF: %1 -- Fonction de dérivation de clé inconnue : %1 -- -- -- Unknown key type: %1 -- Type de clé inconnu : %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Les mots de passe ne correspondent pas -- -- -- Passwords match so far -- Les mots de passe correspondent jusqu’à présent -- -- -- Toggle Password (%1) -- Activer ou désactiver le mot de passe (%1) -- -- -- Generate Password (%1) -- Générer un mot de passe (%1) -- -- -- Warning: Caps Lock enabled! -- Avertissement : Les majuscules sont verrouillées -- -- -- -- PasswordEditWidget -- -- Enter password: -- Saisir le mot de passe : -- -- -- Confirm password: -- Confirmer le mot de passe : -- -- -- Password -- Mot de passe -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Un mot de passe est le moyen principal pour sécuriser votre base de données.</p><p>Les bons mots de passe sont longs et uniques. KeePassXC peut en générer un pour vous.</p> -- -- -- Passwords do not match. -- Les mots de passe ne correspondent pas. -- -- -- Password field -- Champ de mot de passe -- -- -- Repeat password field -- Champ de confirmation du mot de passe -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- robustesse -- -- -- entropy -- entropie -- -- -- Password -- Mot de passe -- -- -- Character Types -- Types de caractères -- -- -- Numbers -- Chiffres -- -- -- Extended ASCII -- ASCII étendu -- -- -- Exclude look-alike characters -- Exclure les caractères qui se ressemblent -- -- -- Pick characters from every group -- Choisir des caractères dans chacun des groupes -- -- -- &Length: -- &Longueur : -- -- -- Passphrase -- Phrase de passe -- -- -- Wordlist: -- Liste de mots : -- -- -- Word Separator: -- Séparateur de mot : -- -- -- Close -- Fermer -- -- -- Entropy: %1 bit -- Entropie : %1 bits -- -- -- Password Quality: %1 -- Qualité du mot de passe : %1 -- -- -- Poor -- Password quality -- Plutôt mauvais -- -- -- Weak -- Password quality -- Faible -- -- -- Good -- Password quality -- Bon -- -- -- Excellent -- Password quality -- Excellent -- -- -- Switch to advanced mode -- Passer en mode avancé -- -- -- Advanced -- Avancé -- -- -- Braces -- Accolades -- -- -- Punctuation -- Ponctuation -- -- -- Quotes -- Guillemets -- -- -- Logograms -- Logogrammes -- -- -- Character set to exclude from generated password -- Jeu de caractères à exclure du mot de passe généré -- -- -- Do not include: -- Ne doit pas comporter : -- -- -- Add non-hex letters to "do not include" list -- Ajouter les lettres non hexadécimales à la liste « Ne doit pas comporter » -- -- -- Hex -- Hexadécimal -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Les caractères exclus sont : « 0 », « 1 », « l », « I », « O », « | », « . » -- -- -- Generated password -- Mot de passe généré -- -- -- Upper-case letters -- Majuscules -- -- -- Lower-case letters -- Minuscules -- -- -- Special characters -- Caractères spéciaux -- -- -- Math Symbols -- Symboles mathématiques -- -- -- Dashes and Slashes -- Tirets et barres obliques -- -- -- Excluded characters -- Caractères exclus -- -- -- Hex Passwords -- Mots de passe hexadécimaux -- -- -- Password length -- Longueur du mot de passe -- -- -- Word Case: -- Casse des mots : -- -- -- Regenerate password -- Générer le mot de passe de nouveau -- -- -- Copy password -- Copier le mot de passe -- -- -- lower case -- minuscules -- -- -- UPPER CASE -- MAJUSCULES -- -- -- Title Case -- Majuscule De Signification -- -- -- Generate Password -- Générer un mot de passe -- -- -- Also choose from: -- Choisir aussi parmi : -- -- -- Additional characters to use for the generated password -- Caractères supplémentaires à utiliser pour le mot de passe généré -- -- -- Additional characters -- Caractères supplémentaires -- -- -- Word Count: -- Nombre de mots : -- -- -- Esc -- Échap -- -- -- Apply Password -- Appliquer le mot de passe -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Générer le mot de passe de nouveau (%1) -- -- -- Special Characters -- Caractères spéciaux -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistiques -- -- -- Very weak password -- Le mot de passe est très faible -- -- -- Password entropy is %1 bits -- L’entropie du mot de passe est de %1 bits -- -- -- Weak password -- Le mot de passe est faible -- -- -- Used in %1/%2 -- Utilisé dans %1/%2 -- -- -- Password is used %1 times -- Le mot de passe est utilisé %1 fois -- -- -- Password has expired -- Le mot de passe est expiré -- -- -- Password expiry was %1 -- La date d’expiration du mot de passe était le %1 -- -- -- Password is about to expire -- Le mot de passe est sur le point d’expirer -- -- -- Password expires in %1 days -- Le mot de passe expire dans %1 jours -- -- -- Password will expire soon -- Le mot de passe expirera bientôt -- -- -- Password expires on %1 -- Le mot de passe expire le %1 -- -- -- Health Check -- Bilan de santé -- -- -- HIBP -- HIBP – Mot de passe compromis -- -- -- -- QMessageBox -- -- Overwrite -- Remplacer -- -- -- Delete -- Supprimer -- -- -- Move -- Déplacer -- -- -- Empty -- Vider -- -- -- Remove -- Supprimer -- -- -- Skip -- Ignorer -- -- -- Disable -- Désactiver -- -- -- Merge -- Fusionner -- -- -- Continue -- Poursuivre -- -- -- -- QObject -- -- Database not opened -- La base de données n’est pas ouverte -- -- -- Database hash not available -- L’empreinte numérique de la base de données n’est pas disponible -- -- -- Client public key not received -- La clé publique du client n’a pas été reçue -- -- -- Cannot decrypt message -- Impossible de déchiffrer le message -- -- -- Action cancelled or denied -- L’action a été annulée ou refusée -- -- -- KeePassXC association failed, try again -- L’association à KeePassXC a échoué, veuillez réessayer -- -- -- Encryption key is not recognized -- La clé de chiffrement n’est pas reconnue -- -- -- Incorrect action -- L’action est incorrecte -- -- -- Empty message received -- Un message vide a été reçu -- -- -- No URL provided -- Aucune URL n’a été indiquée -- -- -- No logins found -- Aucun identifiant n’a été trouvé -- -- -- Unknown error -- Erreur inconnue -- -- -- Add a new entry to a database. -- Ajouter une nouvelle entrée à la base de données. -- -- -- Path of the database. -- Chemin de la base de données. -- -- -- Key file of the database. -- Fichier clé de la base de données. -- -- -- path -- chemin -- -- -- Username for the entry. -- Nom d’utilisateur de l’entrée. -- -- -- username -- nom d’utilisateur -- -- -- URL for the entry. -- URL de l’entrée. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Demander le mot de passe de l’entrée. -- -- -- Generate a password for the entry. -- Générer un mot de passe pour l’entrée. -- -- -- length -- longueur -- -- -- Path of the entry to add. -- Chemin de l’entrée à ajouter. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Chemin de l’entrée à épingler. -- -- -- Timeout in seconds before clearing the clipboard. -- Délai en secondes avant effacement du presse-papiers. -- -- -- Edit an entry. -- Modifier une entrée. -- -- -- Title for the entry. -- Titre de l’entrée. -- -- -- title -- titre -- -- -- Path of the entry to edit. -- Chemin de l’entrée à modifier. -- -- -- Estimate the entropy of a password. -- Estimer l’entropie d’un mot de passe. -- -- -- Password for which to estimate the entropy. -- Mot de passe pour lequel estimer l’entropie. -- -- -- Perform advanced analysis on the password. -- Effectuer une analyse approfondie du mot de passe. -- -- -- -- --Available commands: -- -- -- --Commandes proposées : -- -- -- -- Name of the command to execute. -- Nom de la commande à exécuter. -- -- -- List database entries. -- Lister les entrées de la base de données. -- -- -- Path of the group to list. Default is / -- Chemin du groupe à lister. Par défaut : / -- -- -- Find entries quickly. -- Trouver des entrées rapidement. -- -- -- Search term. -- Terme d'interrogation. -- -- -- Merge two databases. -- Fusionner deux bases de données. -- -- -- Path of the database to merge from. -- Chemin de la base de données à partir de laquelle fusionner. -- -- -- Use the same credentials for both database files. -- Utiliser les mêmes identifiants pour les deux fichiers de base de données. -- -- -- Key file of the database to merge from. -- Fichier clé de la base de données à partir de laquelle fusionner. -- -- -- Show an entry's information. -- Afficher les renseignements d’une entrée. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Noms des attributs à afficher. Cette option peut être indiquée plus d’une fois, avec chaque attribut apparaissant un par ligne dans l’ordre donné. Si aucun attribut n’est indiqué, un résumé des attributs par défaut est présenté. -- -- -- attribute -- attribut -- -- -- Name of the entry to show. -- Nom de l’entrée à afficher. -- -- -- NULL device -- Dispositif NUL -- -- -- error reading from device -- erreur de lecture à partir du dispositif -- -- -- malformed string -- chaîne mal formée -- -- -- missing closing quote -- Le guillemet fermant manque -- -- -- Group -- Groupe -- -- -- Title -- Titre -- -- -- Username -- Nom d’utilisateur -- -- -- Password -- Mot de passe -- -- -- Notes -- Notes -- -- -- Last Modified -- Dernière modification -- -- -- Created -- Créée -- -- -- Browser Integration -- Intégration aux navigateurs -- -- -- SSH Agent -- Agent SSH -- -- -- Generate a new random diceware passphrase. -- Créer une nouvelle phrase de passe générée avec la méthode du lancer de dés. -- -- -- Word count for the diceware passphrase. -- Nombre de mots de la phrase de passe générée avec la méthode du lancer de dés. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Liste de mots pour le générateur par méthode du lancer de dés. --[Par défaut : FFÉ anglais] -- -- -- Generate a new random password. -- Générer un nouveau mot de passe aléatoire. -- -- -- Could not create entry with path %1. -- Impossible de créer l’entrée dont le chemin est %1. -- -- -- Enter password for new entry: -- Saisir un mot de passe pour la nouvelle entrée : -- -- -- Writing the database failed %1. -- Échec d’écriture de la base de données %1. -- -- -- Successfully added entry %1. -- Ajouté avec succès l’entrée %1. -- -- -- Invalid timeout value %1. -- La valeur de délai d’attente %1 est invalide. -- -- -- Entry %1 not found. -- L’entrée %1 est introuvable. -- -- -- Entry with path %1 has no TOTP set up. -- Aucun TOTP n’est configuré pour l’entrée dont le chemin est %1. -- -- -- Clearing the clipboard in %1 second(s)... -- Effacement du presse-papiers dans %1 seconde…Effacement du presse-papiers dans %1 secondes… -- -- -- Clipboard cleared! -- Le presse-papiers a été effacé -- -- -- Silence password prompt and other secondary outputs. -- Désactiver les demandes de mot de passe et autres sorties secondaires. -- -- -- count -- CLI parameter -- nombre -- -- -- Could not find entry with path %1. -- Impossible de trouver l’entrée dont le chemin est %1. -- -- -- Not changing any field for entry %1. -- Aucun changement de champ pour l’entrée %1. -- -- -- Enter new password for entry: -- Saisir le nouveau mot de passe pour l’entrée : -- -- -- Writing the database failed: %1 -- Échec d’écriture de la base de données : %1 -- -- -- Successfully edited entry %1. -- L’entrée %1 a été modifiée avec succès. -- -- -- Length %1 -- Longueur %1 -- -- -- Entropy %1 -- Entropie %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Octets supplémentaires de mots multiples %1 -- -- -- Type: Bruteforce -- Type : force brute -- -- -- Type: Dictionary -- Type : dictionnaire -- -- -- Type: Dict+Leet -- Type : dictionnaire + leet -- -- -- Type: User Words -- Type : mots utilisateur -- -- -- Type: User+Leet -- Type : utilisateur + Leet -- -- -- Type: Repeated -- Type : répété -- -- -- Type: Sequence -- Type : séquence -- -- -- Type: Spatial -- Type : spatial -- -- -- Type: Date -- Type : date -- -- -- Type: Bruteforce(Rep) -- Type : force brute (rép.) -- -- -- Type: Dictionary(Rep) -- Type : dictionnaire (rép.) -- -- -- Type: Dict+Leet(Rep) -- Type : dictionnaire + Leet (rép.) -- -- -- Type: User Words(Rep) -- Type : mots utilisateur (rép.) -- -- -- Type: User+Leet(Rep) -- Type : utilisateur + leet (rép.) -- -- -- Type: Repeated(Rep) -- Type : répété (rép.) -- -- -- Type: Sequence(Rep) -- Type : séquence (rép.) -- -- -- Type: Spatial(Rep) -- Type : spatial (rép.) -- -- -- Type: Date(Rep) -- Type : date (rép.) -- -- -- Type: Unknown%1 -- Type : inconnu %1 -- -- -- Entropy %1 (%2) -- Entropie %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Longueur du mot de passe (%1) != somme de la longueur des parties (%2) *** -- -- -- Failed to load key file %1: %2 -- Échec de chargement du fichier clé %1 : %2 -- -- -- Length of the generated password -- Longueur du mot de passe généré -- -- -- Use lowercase characters -- Utiliser des minuscules -- -- -- Use uppercase characters -- Utiliser des majuscules -- -- -- Use special characters -- Utiliser des caractères spéciaux -- -- -- Use extended ASCII -- Utiliser l’ASCII étendu -- -- -- Exclude character set -- Exclure le jeu de caractères -- -- -- chars -- caractères -- -- -- Exclude similar looking characters -- Exclure les caractères qui se ressemblent -- -- -- Include characters from every selected group -- Choisir des caractères dans chacun des groupes sélectionnés -- -- -- Recursively list the elements of the group. -- Lister récursivement les éléments du groupe. -- -- -- Cannot find group %1. -- Impossible de trouver le groupe %1. -- -- -- Error reading merge file: --%1 -- Erreur de lecture du fichier fusionné : --%1 -- -- -- Unable to save database to file : %1 -- Impossible d’enregistrer la base de données dans le fichier : %1 -- -- -- Unable to save database to file: %1 -- Impossible d’enregistrer la base de données dans le fichier : %1 -- -- -- Successfully recycled entry %1. -- L’entrée %1 a été recyclée avec succès. -- -- -- Successfully deleted entry %1. -- Supprimé l’entrée %1 avec succès. -- -- -- Show the entry's current TOTP. -- Afficher le TOTP actuel pour l’entrée. -- -- -- ERROR: unknown attribute %1. -- ERREUR : L’attribut %1 est inconnu. -- -- -- No program defined for clipboard manipulation -- Aucun programme n’est défini pour le traitement du presse-papiers -- -- -- file empty -- fichier vide -- -- -- %1: (row, col) %2,%3 -- %1 : (ligne, colonne) %2, %3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Des paramètres sont invalides -- -- -- Invalid Key -- TOTP -- La clé est invalide -- -- -- Message encryption failed. -- Échec de chiffrement du message. -- -- -- No groups found -- Aucun groupe n’a été trouvé -- -- -- Create a new database. -- Créer un nouvelle base de données. -- -- -- File %1 already exists. -- Le fichier %1 existe déjà. -- -- -- Loading the key file failed -- Échec du chargement du fichier clé -- -- -- No key is set. Aborting database creation. -- Aucune clé n’est définie. Abandon de la création de la base de données. -- -- -- Failed to save the database: %1. -- Échec d’enregistrement de la base de données : %1. -- -- -- Successfully created new database. -- La nouvelle base de données a été créée avec succès. -- -- -- Creating KeyFile %1 failed: %2 -- Échec de création du fichier clé %1 : %2 -- -- -- Loading KeyFile %1 failed: %2 -- Échec de chargement du fichier clé %1 : %2 -- -- -- Path of the entry to remove. -- Chemin de l’entrée à supprimer. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Le fichier de verrouillage de l’instance unique existant est invalide. Lancement d’une nouvelle instance. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Impossible de créer le fichier de verrouillage. Le mode d’instance unique est désactivé. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC – Gestionnaire de mots de passe multiplateforme -- -- -- filenames of the password databases to open (*.kdbx) -- noms de fichiers des bases de données de mots de passe à ouvrir (*.kdbx) -- -- -- path to a custom config file -- chemin vers un fichier de configuration personnalisée -- -- -- key file of the database -- fichier clé de la base de données -- -- -- read password of the database from stdin -- lire le mot de passe de la base de données sur l’entrée standard -- -- -- Another instance of KeePassXC is already running. -- Une autre instance de KeePassXC est déjà en cours d’exécution. -- -- -- Fatal error while testing the cryptographic functions. -- Erreur fatale lors de l’évaluation des fonctions cryptographiques. -- -- -- KeePassXC - Error -- KeePassXC – Erreur -- -- -- Database password: -- Mot de passe de la base de données : -- -- -- Cannot create new group -- Impossible de créer un nouveau groupe -- -- -- Deactivate password key for the database. -- Désactiver la clé du mot de passe pour la base de données. -- -- -- Displays debugging information. -- Affiche les renseignements de débogage. -- -- -- Deactivate password key for the database to merge from. -- Désactiver la clé du mot de passe pour la base de données à partir de laquelle fusionner. -- -- -- Version %1 -- Version %1 -- -- -- Build Type: %1 -- Type de version : %1 -- -- -- Revision: %1 -- Révision : %1 -- -- -- Distribution: %1 -- Distribution : %1 -- -- -- Debugging mode is disabled. -- Le mode débogage est désactivé. -- -- -- Debugging mode is enabled. -- Le mode débogage est activé. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Système d’exploitation : %1 --Architecture de l’unité centrale : %2 --Noyau : %3 %4 -- -- -- Auto-Type -- Saisie automatique -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (partage signé et non signé) -- -- -- KeeShare (only signed sharing) -- KeeShare (partage signé seulement) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (partage non signé seulement) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Aucun -- -- -- Enabled extensions: -- Extensions activées : -- -- -- Cryptographic libraries: -- Bibliothèques cryptographiques : -- -- -- Cannot generate a password and prompt at the same time! -- Il est impossible de générer un mot de passe et de le demander en même temps -- -- -- Adds a new group to a database. -- Ajoute un nouveau groupe à la base de données. -- -- -- Path of the group to add. -- Chemin du groupe à ajouter. -- -- -- Group %1 already exists! -- Le groupe %1 existe déjà -- -- -- Group %1 not found. -- Le groupe %1 est introuvable. -- -- -- Successfully added group %1. -- Le groupe %1 a été ajouté avec succès. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Vérifier si un mot de passe a été divulgué publiquement. NOM_DU_FICHIER doit être le chemin d’un fichier qui liste les empreintes SHA-1 de mots de passe divulgués au format HIBP, tel que proposé sur https://haveibeenpwned.com/Passwords (site en anglais). -- -- -- FILENAME -- NOM_DU_FICHIER -- -- -- Analyze passwords for weaknesses and problems. -- Analyser la robustesse et les problèmes des mots de passe. -- -- -- Failed to open HIBP file %1: %2 -- Échec de l’ouverture du fichier HIBP %1 : %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Comparaison des entrées de la base de données avec le fichier HIBP, cette opération prend du temps… -- -- -- Close the currently opened database. -- Fermer la base de données ouverte actuellement. -- -- -- Display this help. -- Afficher cette aide. -- -- -- slot -- emplacement -- -- -- Invalid word count %1 -- Le nombre de mots %1 est invalide -- -- -- The word list is too small (< 1000 items) -- La liste de mots est trop courte (moins de 1 000 articles) -- -- -- Exit interactive mode. -- Quitter le mode interactif. -- -- -- Exports the content of a database to standard output in the specified format. -- Exporte au format indiqué le contenu de la base de données vers la sortie standard. -- -- -- Unable to export database to XML: %1 -- Impossible d’exporter la base de données en XML : %1 -- -- -- Unsupported format %1 -- Le format %1 n’est pas pris en charge -- -- -- Use numbers -- Utiliser des chiffres -- -- -- Invalid password length %1 -- La longueur du mot de passe %1 est invalide -- -- -- Display command help. -- Afficher l’aide de la commande. -- -- -- Available commands: -- Commandes proposées : -- -- -- Import the contents of an XML database. -- Importer le contenu d’une base de données XML. -- -- -- Path of the XML database export. -- Chemin vers l’exportation de la base de données au format XML. -- -- -- Path of the new database. -- Chemin de la nouvelle base de données. -- -- -- Successfully imported database. -- La base de données a été importée avec succès. -- -- -- Unknown command %1 -- La commande %1 est inconnue -- -- -- Flattens the output to single lines. -- Réduit la sortie en lignes simples. -- -- -- Only print the changes detected by the merge operation. -- N’imprimer que les changements détectés par l’opération de fusion. -- -- -- Yubikey slot for the second database. -- Emplacement Yubikey pour la seconde base de données. -- -- -- Successfully merged %1 into %2. -- %1 a été fusionné dans %2 avec succès. -- -- -- Database was not modified by merge operation. -- La base de données n’a pas été modifiée par l’opération de fusion. -- -- -- Moves an entry to a new group. -- Déplace une entrée vers un nouveau groupe. -- -- -- Path of the entry to move. -- Chemin de l’entrée à déplacer. -- -- -- Path of the destination group. -- Chemin du groupe de destination. -- -- -- Could not find group with path %1. -- Impossible de trouver un groupe avec le chemin %1. -- -- -- Entry is already in group %1. -- L’entrée est déjà dans le groupe %1. -- -- -- Successfully moved entry %1 to group %2. -- L’entrée %1 a été déplacée vers le groupe %2 avec succès. -- -- -- Open a database. -- Ouvre une base de données. -- -- -- Path of the group to remove. -- Chemin du groupe à supprimer. -- -- -- Cannot remove root group from database. -- Impossible de supprimer le groupe racine de la base de données. -- -- -- Successfully recycled group %1. -- Le groupe %1 a été recyclé avec succès. -- -- -- Successfully deleted group %1. -- Le groupe %1 a été supprimé avec succès. -- -- -- Failed to open database file %1: not found -- Échec d’ouverture du fichier de base de données %1 : il est introuvable -- -- -- Failed to open database file %1: not a plain file -- Échec d’ouverture du fichier de base de données %1 : ce n’est pas un fichier brut -- -- -- Failed to open database file %1: not readable -- Échec d’ouverture du fichier de base de données %1 : il est illisible -- -- -- Enter password to unlock %1: -- Saisir le mot de passe pour déverrouiller %1 : -- -- -- Invalid YubiKey slot %1 -- L’emplacement YubiKey %1 est invalide -- -- -- Enter password to encrypt database (optional): -- Saisissez un mot de passe pour chiffrer la base de données (facultatif) : -- -- -- HIBP file, line %1: parse error -- Fichier HIBP, ligne %1 : erreur d’analyse -- -- -- Secret Service Integration -- Intégration à « Secret Service » -- -- -- User name -- Nom d’utilisateur -- -- -- Password for '%1' has been leaked %2 time(s)! -- Le mot de passe pour « %1 » a été divulgué %2 foisLe mot de passe pour « %1 » a été divulgué %2 fois -- -- -- Invalid password generator after applying all options -- Le générateur de mots de passe est invalide après application de toutes les options -- -- -- Show the protected attributes in clear text. -- Afficher en clair les attributs protégés. -- -- -- Browser Plugin Failure -- Échec de l’extension pour navigateurs -- -- -- Could not save the native messaging script file for %1. -- Impossible d’enregistrer le fichier script de messagerie native pour %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copier dans le presse-papiers l’attribut donné. Si rien n’est précisé, « mot de passe » est utilisé par défaut. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copier le TOTP actuel dans le presse-papiers (équivalent à « -a totp »). -- -- -- Copy an entry's attribute to the clipboard. -- Copier l’attribut d’une entrée dans le presse-papiers. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERREUR : Veuillez indiquer -attribut ou -totp, mais pas les deux. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERREUR : L’attribut %1 est ambigu, il correspond à %2. -- -- -- Attribute "%1" not found. -- L’attribut « %1 » est introuvable. -- -- -- Entry's "%1" attribute copied to the clipboard! -- L’attribut de l’entrée « %1 » a été copié dans le presse-papiers -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Emplacement et numéro de série facultatif Yubikey utilisés pour accéder à la base de données (p. ex. : 1:7370001). -- -- -- slot[:serial] -- emplacement[:numéro de série] -- -- -- Target decryption time in MS for the database. -- Durée de déchiffrement cible en millisecondes pour la base de données. -- -- -- time -- durée -- -- -- Set the key file for the database. -- Définir le fichier clé de la base de données. -- -- -- Set a password for the database. -- Définir un mot de passe pour la base de données. -- -- -- Invalid decryption time %1. -- La durée de déchiffrement est invalide : %1. -- -- -- Target decryption time must be between %1 and %2. -- La durée de déchiffrement cible doit être entre %1 et %2. -- -- -- Failed to set database password. -- Échec de définition du mot de passe de la base de données. -- -- -- Benchmarking key derivation function for %1ms delay. -- Analyse des performances de la fonction de dérivation de clé pour un retard de %1 ms. -- -- -- Setting %1 rounds for key derivation function. -- %1 cycles sont définis pour la fonction de dérivation de clé. -- -- -- error while setting database key derivation settings. -- erreur de paramétrage de la dérivation de clé de la base de données. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Format à utiliser lors de l’exportation. Les choix proposés sont « xml » ou « csv ». La valeur par défaut est « xml ». -- -- -- Unable to import XML database: %1 -- Impossible d’importer la base de données XML : %1 -- -- -- Show a database's information. -- Afficher les renseignements d’une base de données. -- -- -- UUID: -- UUID : -- -- -- Name: -- Nom : -- -- -- Description: -- Description : -- -- -- Cipher: -- Chiffrement : -- -- -- KDF: -- Fonction de dérivation de clé : -- -- -- Recycle bin is enabled. -- La corbeille est activée. -- -- -- Recycle bin is not enabled. -- La corbeille est désactivée. -- -- -- Invalid command %1. -- La commande %1 est invalide. -- -- -- Invalid YubiKey serial %1 -- Le numéro de série Yubikey %1 est invalide -- -- -- Please touch the button on your YubiKey to continue… -- Veuillez touchez le bouton de votre YubiKey afin de poursuivre… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] : -- -- -- Repeat password: -- Confirmer le mot de passe : -- -- -- Error: Passwords do not match. -- Erreur : Les mots de passe ne correspondent pas. -- -- -- All clipping programs failed. Tried %1 -- -- Échec de tous les programmes de découpage. %1 essayés -- -- -- -- AES (%1 rounds) -- AES (%1 cycles) -- -- -- AES 256-bit -- AES 256 bits -- -- -- Twofish 256-bit -- Twofish 256 bits -- -- -- ChaCha20 256-bit -- ChaCha20 : 256 bits {20 256 à ?} -- -- -- Benchmark %1 delay -- Analyse des performance : %1 de retard -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- chemin vers un fichier local de configuration personnalisée -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- AVERTISSEMENT : vous utilisez un ancien format de fichier clé que KeePassXC pourrait ne plus prendre en charge à l’avenir. -- --Veuillez envisager de générer un nouveau fichier clé. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 cycles, %3 Ko) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – recommandé) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Icône -- -- -- Unsupported key file version: %1 -- Version de fichier clé non prise en charge : %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- La somme de contrôle ne correspond pas. Le fichier clé pourrait être corrompu. -- -- -- Unexpected key file data! Key file may be corrupt. -- Les données du fichier clé ne sont pas celles attendues. Le fichier clé pourrait être corrompu. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Erreur interne zlib lors de la compression : -- -- -- Error writing to underlying device: -- Erreur d’écriture sur le dispositif sous-jacent : -- -- -- Error opening underlying device: -- Erreur d’ouverture du dispositif sous-jacent : -- -- -- Error reading data from underlying device: -- Erreur de lecture de données à partir du dispositif sous-jacent : -- -- -- Internal zlib error when decompressing: -- Erreur interne zlib lors de la décompression : -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Le format gzip n’est pas pris en charge dans cette version de zlib. -- -- -- Internal zlib error: -- Erreur interne zlib : -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Afficher aussi les entrées qui ont été exclues des rapports -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Survolez la raison pour afficher des détails supplémentaires. Double-cliquez sur les entrées pour les modifier. -- -- -- Bad -- Password quality -- Mauvais -- -- -- Bad — password must be changed -- Mauvais – le mot de passe doit être changé -- -- -- Poor -- Password quality -- Plutôt mauvais -- -- -- Poor — password should be changed -- Plutôt mauvais – le mot de passe doit être changé -- -- -- Weak -- Password quality -- Faible -- -- -- Weak — consider changing the password -- Faible – envisagez de changer le mot de passe -- -- -- (Excluded) -- (exclue) -- -- -- This entry is being excluded from reports -- Cette entrée est exclue des rapports -- -- -- Please wait, health data is being calculated... -- Veuillez patienter, le bilan de santé est en cours de calcul… -- -- -- Congratulations, everything is healthy! -- Félicitations, tout est en ordre -- -- -- Title -- Titre -- -- -- Path -- Chemin -- -- -- Score -- Résultats -- -- -- Reason -- Raison -- -- -- Edit Entry... -- Modifier l’entrée… -- -- -- Exclude from reports -- Exclure des rapports -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ATTENTION : Ce rapport requiert l’envoi de renseignements au service en ligne « Have I Been Pwned » (https://haveibeenpwned.com). Si vous poursuivez, les mots de passe de votre base de données seront hachés de façon cryptographique et les cinq premiers caractères de ces hachages seront envoyés de façon sécurisée à ce service. La sécurité de votre base de données est assurée et votre base de données ne peut pas être reconstituée à partir de ces renseignements. Toutefois, le nombre de mots de passe que vous envoyez et votre adresse IP seront dévoilés à ce service. -- -- -- Perform Online Analysis -- Effectuer une analyse en ligne -- -- -- Also show entries that have been excluded from reports -- Afficher aussi les entrées qui ont été exclues des rapports -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Cette version de KeePassXC ne dispose pas de fonctions réseau. Il est nécessaire de se connecter au réseau afin de vérifier vos mots de passe auprès du service « Have I Been Pwned ». -- -- -- Congratulations, no exposed passwords! -- Félicitations, aucun mot de passe n’a été divulgué -- -- -- Title -- Titre -- -- -- Path -- Chemin -- -- -- Password exposed… -- Mots de passe divulgués… -- -- -- (Excluded) -- (exclue) -- -- -- This entry is being excluded from reports -- Cette entrée est exclue des rapports -- -- -- once -- une fois -- -- -- up to 10 times -- jusqu’à 10 fois -- -- -- up to 100 times -- jusqu’à 100 fois -- -- -- up to 1000 times -- jusqu’à 1 000 fois -- -- -- up to 10,000 times -- jusqu’à 10 000 fois -- -- -- up to 100,000 times -- jusqu’à 100 000 fois -- -- -- up to a million times -- jusqu’à un million de fois -- -- -- millions of times -- millions de fois -- -- -- Edit Entry... -- Modifier l’entrée… -- -- -- Exclude from reports -- Exclure des rapports -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Survolez les lignes affichant une icône d’erreur pour plus de précisons. -- -- -- Name -- Nom -- -- -- Value -- Valeur -- -- -- Please wait, database statistics are being calculated... -- Veuillez patienter pendant que les statistiques de base de données sont calculées… -- -- -- Database name -- Nom de la base de données -- -- -- Description -- Description -- -- -- Location -- Emplacement -- -- -- Last saved -- Dernier enregistrement -- -- -- Unsaved changes -- Changements non enregistrés -- -- -- yes -- oui -- -- -- no -- non -- -- -- The database was modified, but the changes have not yet been saved to disk. -- La base de données a été modifiée, mais les changements n’ont pas encore été enregistrés sur le disque. -- -- -- Number of groups -- Nombre de groupes -- -- -- Number of entries -- Nombre d’entrées -- -- -- Number of expired entries -- Nombre d’entrées expirées -- -- -- The database contains entries that have expired. -- La base de données comprend des données expirées. -- -- -- Unique passwords -- Mots de passes uniques -- -- -- Non-unique passwords -- Mots de passe non uniques -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Plus de 10 % des mots de passe sont réutilisés. Si possible, utilisez des mots de passe uniques. -- -- -- Maximum password reuse -- Maximum de réutilisations des mots de passe -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Certains mots de passe sont utilisés plus de trois fois. Si possible, utilisez des mots de passe uniques. -- -- -- Number of short passwords -- Nombre de mots de passe courts -- -- -- Recommended minimum password length is at least 8 characters. -- Il est recommandé qu’un mot de passe comporte au moins huit caractères -- -- -- Number of weak passwords -- Nombre de mots de passe faibles -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Il est recommandé d’utiliser des mots de passe longs et aléatoires dont le niveau de robustesse est « bon » ou « excellent ». -- -- -- Entries excluded from reports -- Entrées exclues des rapports -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Exclure des entrées des rapports, car elles ont par exemple un mot de passe plutôt mauvais, n’est pas un problème en soi, mais vous devriez les surveiller. -- -- -- Average password length -- Longueur moyenne des mots de passe -- -- -- %1 characters -- %1 caractères -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- La longueur moyenne des mots de passe est inférieure à dix caractères. Des mots de passe plus longs offrent une meilleure sécurité. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Échec de connexion à l’agent. -- -- -- Agent protocol error. -- Erreur de protocole de l’agent -- -- -- No agent running, cannot add identity. -- Aucun agent n’est en cours d’exécution, il est impossible d’ajouter l’identité. -- -- -- No agent running, cannot remove identity. -- Aucun agent n’est en cours d’exécution, il est impossible de supprimer l’identité. -- -- -- Agent refused this identity. Possible reasons include: -- L’agent a refusé cette identité. Raisons possibles, entre autres : -- -- -- The key has already been added. -- La clé a déjà été ajoutée. -- -- -- Restricted lifetime is not supported by the agent (check options). -- L’agent ne prend pas en charge une durée de vie limitée (vérifier les options). -- -- -- A confirmation request is not supported by the agent (check options). -- L’agent ne prend pas en charge une demande de confirmation (vérifier les options). -- -- -- Key identity ownership conflict. Refusing to add. -- Conflit de propriété de l’identité de clé. L’ajout a été refusé. -- -- -- No agent running, cannot list identities. -- Aucun agent n’est en cours d’exécution, il est impossible de lister les identités. -- -- -- -- SearchHelpWidget -- -- Search Help -- Chercher dans l’aide -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Les termes d’interrogation sont les suivants : [modificateurs][champ:]["]terme["] -- -- -- Every search term must match (ie, logical AND) -- Tous les termes d’interrogation doivent correspondre (c.-à-d. : ET logique) -- -- -- Modifiers -- Modificateurs -- -- -- exclude term from results -- exclure le terme des résultats -- -- -- match term exactly -- correspondance exacte -- -- -- use regex in term -- utiliser les expressions rationnelles dans le terme -- -- -- Fields -- Champs -- -- -- Term Wildcards -- Caractère de remplacement des termes -- -- -- match anything -- correspond à n’importe quel caractère -- -- -- match one -- correspond à un caractère -- -- -- logical OR -- OU logique -- -- -- Examples -- Exemples -- -- -- -- SearchWidget -- -- Search -- Chercher -- -- -- Limit search to selected group -- Limiter la recherche au groupe sélectionné -- -- -- Search Help -- Chercher dans l’aide -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Recherche (%1)… -- -- -- Case sensitive -- Sensible à la casse -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Options -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Activer l’intégration de KeePassXC à « Secret Service » de Freedesktop.org -- -- -- General -- Général -- -- -- Show notification when credentials are requested -- Afficher une notification quand les identifiants sont demandés -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Si la corbeille est activée pour la base de données, les entrées seront déplacées dans la corbeille directement. Sinon, elles seront supprimées sans confirmation.</p><p>Une confirmation sera toujours demandée si l’entrée est référencée par d’autres.</p></body></html> -- -- -- Exposed database groups: -- Groupes de base de données visibles : -- -- -- Authorization -- Autorisation -- -- -- These applications are currently connected: -- Ces applications sont connectées actuellement : -- -- -- Don't confirm when entries are deleted by clients -- Ne pas confirmer la suppression d’entrées par les clients -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Erreur :</b> Échec de connexion à DBus. Veuillez vérifier votre configuration DBus. -- -- -- <b>Warning:</b> -- </b>Avertissement :</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Enregistrer les changements actuels pour activer le greffon et permettre la modification de cette section. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Actif -- -- -- Allow export -- Permettre l’exportation -- -- -- Allow import -- Permettre l’importation -- -- -- Own certificate -- Propre certificat -- -- -- Fingerprint: -- Empreinte : -- -- -- Certificate: -- Certificat : -- -- -- Signer -- Signataire -- -- -- Key: -- Clé : -- -- -- Generate -- Générer -- -- -- Import -- Importer -- -- -- Export -- Exporter -- -- -- Imported certificates -- Certificats importés -- -- -- Trust -- Faire confiance -- -- -- Ask -- Demander -- -- -- Untrust -- Ne pas faire confiance -- -- -- Remove -- Supprimer -- -- -- Path -- Chemin -- -- -- Status -- État -- -- -- Fingerprint -- Empreinte -- -- -- Certificate -- Certificat -- -- -- Trusted -- Fiable -- -- -- Untrusted -- Non fiable -- -- -- Unknown -- Inconnu -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- fichier clé KeeShare -- -- -- All files -- Tous les fichiers -- -- -- Select path -- Sélectionner le chemin -- -- -- Exporting changed certificate -- Exportation des certificats changés -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Le certificat exporté est différent de celui en cours d’utilisation. Voulez-vous exporter le certificat actuel ? -- -- -- Signer: -- Signataire : -- -- -- Allow KeeShare imports -- Permettre les importations KeeShare -- -- -- Allow KeeShare exports -- Permettre les exportations KeeShare -- -- -- Only show warnings and errors -- N’afficher que les avertissements et erreurs -- -- -- Key -- Clé -- -- -- Signer name field -- Champ de nom du signataire -- -- -- Generate new certificate -- Générer un nouveau certificat -- -- -- Import existing certificate -- Importer un certificat existant -- -- -- Export own certificate -- Exporter son propre certificat -- -- -- Known shares -- Partages connus -- -- -- Trust selected certificate -- Faire confiance au certificat sélectionné -- -- -- Ask whether to trust the selected certificate every time -- Toujours demander le niveau de confiance envers le certificat sélectionné -- -- -- Untrust selected certificate -- Ne pas faire confiance au certificat sélectionné -- -- -- Remove selected certificate -- Supprimer le certificat sélectionné -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Remplacer le conteneur de partage signé s’il n’est pas pris en charge - empêche l’exportation -- -- -- Could not write export container (%1) -- Impossible d’écrire dans le conteneur d’exportation (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Impossible d’intégrer la signature :impossible d’ouvrir le fichier en écriture (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Impossible d’intégrer la signature : impossible d’écrire le fichier (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Impossible d’intégrer la base de données : impossible d’ouvrir le fichier en écriture (%1) -- -- -- Could not embed database: Could not write file (%1) -- Impossible d’intégrer la base de données : impossible d’écrire le fichier (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Remplacer le conteneur de partage non signé s’il n’est pas pris en charge - empêche l’exportation -- -- -- Could not write export container -- Impossible d’écrire dans le conteneur d’exportation -- -- -- Unexpected export error occurred -- Une erreur d’exportation inattendue est survenue -- -- -- -- ShareImport -- -- Import from container without signature -- Importer d’un conteneur sans signature -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Nous ne pouvons vérifier la source du conteneur partagé, car il n’est pas signé. Voulez-vous vraiment importer de %1 ? -- -- -- Import from container with certificate -- Importer d’un conteneur avec certificat -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Voulez-vous faire confiance à %1 avec l’empreinte %2 de %3 ? {1 ?} {2 ?} -- -- -- Not this time -- Pas cette fois -- -- -- Never -- Jamais -- -- -- Always -- Toujours -- -- -- Just this time -- Cette fois seulement -- -- -- Signed share container are not supported - import prevented -- Conteneur de partage signé non pris en charge - empêche l’importation -- -- -- File is not readable -- Le fichier n’est illisible -- -- -- Invalid sharing container -- Le conteneur de partage est invalide -- -- -- Untrusted import prevented -- Une importation non fiable a été bloquée -- -- -- Successful signed import -- L’importation a été signée avec succès -- -- -- Unsigned share container are not supported - import prevented -- Conteneur de partage non signé non pris en charge - empêche l’importation -- -- -- Successful unsigned import -- La signature a été ôtée de l’importation avec succès -- -- -- File does not exist -- Le fichier n’existe pas -- -- -- Unknown share container type -- Le type de conteneur de partage est inconnu -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Échec d’importation de %1 (%2) -- -- -- Import from %1 successful (%2) -- Importé de %1 avec succès (%2) -- -- -- Imported from %1 -- Importé de %1 -- -- -- Export to %1 failed (%2) -- Échec d’exportation vers %1 (%2) -- -- -- Export to %1 successful (%2) -- Exporté vers %1 avec succès (%2) -- -- -- Export to %1 -- Exporter vers %1 -- -- -- Multiple import source path to %1 in %2 -- Chemin source d’importation multiple de %1 dans %2 -- -- -- Conflicting export target path %1 in %2 -- Conflit du chemin cible d’exportation %1 dans %2 -- -- -- -- TotpDialog -- -- Timed Password -- Mot de passe temporisé -- -- -- 000000 -- 000000 -- -- -- Copy -- Copier -- -- -- Expires in <b>%n</b> second(s) -- Expire dans <b>%n</b> secondeExpire dans <b>%n</b> secondes -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copier -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTE : Ces paramètres TOTP sont personnalisés et pourraient ne pas fonctionner avec d’autres authentificateurs. -- -- -- There was an error creating the QR code. -- Une erreur est survenue lors de la création du QR code. -- -- -- Closing in %1 seconds. -- Fermeture dans %1 secondes. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Configurer TOTP -- -- -- Default RFC 6238 token settings -- Paramètres par défaut des jetons RFC 6238 -- -- -- Steam token settings -- Paramètres des jetons Steam -- -- -- Use custom settings -- Utiliser des paramètres personnalisés -- -- -- Custom Settings -- Paramètres personnalisés -- -- -- Time step: -- Intervalle : -- -- -- sec -- Seconds -- s -- -- -- Code size: -- Taille du code : -- -- -- Secret Key: -- Clé secrète : -- -- -- Secret key must be in Base32 format -- La clé secrète doit être au format Base32 -- -- -- Secret key field -- Champ de la clé secrète -- -- -- Algorithm: -- Algorithme : -- -- -- Time step field -- Champ de l’intervalle -- -- -- digits -- chiffres -- -- -- Invalid TOTP Secret -- Le secret TOTP est invalide -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Vous avez saisi une clé secrète invalide. La clé doit être au format Base32. --Exemple : JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirmer la suppression des paramètres TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? -- -- -- -- URLEdit -- -- Invalid URL -- L’URL est invalide -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Vérification de la présence de mises à jour -- -- -- Checking for updates... -- Vérification de la présence de mises à jour… -- -- -- Close -- Fermer -- -- -- Update Error! -- Erreur de mise à jour -- -- -- An error occurred in retrieving update information. -- Une erreur est survenue lors de la récupération des renseignements de mise à jour. -- -- -- Please try again later. -- Veuillez réessayer plus tard. -- -- -- Software Update -- Mise à jour du logiciel -- -- -- A new version of KeePassXC is available! -- Une nouvelle version de KeePassXC est proposée -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 est maintenant proposée – vous avez %2. -- -- -- Download it at keepassxc.org -- Téléchargez-la sur keepassxc.org -- -- -- You're up-to-date! -- Votre version est à jour -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 est actuellement la version la plus récente proposée. -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Commencez à enregistrer vos mots de passe en toute sécurité dans une base de données KeePassXC -- -- -- Create new database -- Créer une nouvelle base de données -- -- -- Open existing database -- Ouvrir une base de données existante -- -- -- Import from KeePass 1 -- Importer de KeePass 1 -- -- -- Import from CSV -- Importer d’un fichier CSV -- -- -- Recent databases -- Bases de données récentes -- -- -- Welcome to KeePassXC %1 -- Bienvenue sur KeePassXC %1 -- -- -- Import from 1Password -- Importer de 1Password -- -- -- Open a recent database -- Ouvrir une base de données récente -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Emplacement configuré – %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Question-réponse – Emplacement %3 - %4 -- -- -- Press -- Appuyer -- -- -- Passive -- -- -- -- %1 Invalid slot specified - %2 -- %1 Un emplacement invalide est indiqué – %2 -- -- -- The YubiKey interface has not been initialized. -- L’interface YubiKey n’a pas été initialisée. -- -- -- Hardware key is currently in use. -- La clé matérielle est en cours d’utilisation. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Impossible de trouver la clé matérielle dont le numéro de série est %1. Veuillez la connecter afin de poursuivre. -- -- -- Hardware key timed out waiting for user interaction. -- Le temps imparti à l’interaction utilisateur avec la clé matérielle est écoulé. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Une erreur USB est survenue lors de l’accès à la clé matérielle : %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Échec de question-réponse, l’erreur particulière était : %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Actualiser -- -- -- YubiKey Challenge-Response -- Question-réponse YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Si vous possédez une <a href="https://www.yubico.com/">YubiKey</a>, vous pouvez l’utiliser pour une sécurité accrue.</p><p>Un des emplacements de la YubiKey doit être programmé en tant que <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Question-réponse HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Actualiser les jetons matériels -- -- -- Hardware key slot selection -- Sélection de l’emplacement de la clé matérielle -- -- -- Could not find any hardware keys! -- Impossible de trouver une clé matérielle -- -- -- Selected hardware key slot does not support challenge-response! -- L’emplacement de clé matérielle sélectionné ne prend pas en charge une question-réponse. -- -- -- Detecting hardware keys… -- Détection des clés matérielles… -- -- -- No hardware keys detected -- Aucune clé matérielle n’a été détectée -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_hr_HR.ts keepassxc-2.6.4-patched/share/translations/keepassx_hr_HR.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_hr_HR.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_hr_HR.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7851 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Informacije o KeePassXC-u -- -- -- About -- O programu -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Prijavite greške na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC je distribuiran pod uvjetima GNU opće javne licence (GPL) verzija 2 ili (po vašoj želji) verzija 3. -- -- -- Contributors -- Suradnici -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Pogledajte doprinose na GitHub-u</a> -- -- -- Debug Info -- Informacije za otklanjanje pogrešaka -- -- -- Include the following information whenever you report a bug: -- Priložite slijedeće informacije prilikom prijave greške: -- -- -- Copy to clipboard -- Kopiraj u međuspremnik -- -- -- Project Maintainers: -- Održavatelji projekta: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Posebne zahvale KeePassXC tima idu debfx-u za stvaranje izvornog KeePassX-a. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Koristi OpenSSH za Windows umjesto Pageant-a. -- -- -- Enable SSH Agent integration -- Omogući integraciju SSH agenta -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK vrijednost -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK nadjačanje -- -- -- (empty) -- (prazno) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Nema dostupnog SSH Agenta. Ili potvrdite postojanje SSH_AUTH_SOCK vrijednosti okruženja ili podesite nadjačanje. -- -- -- SSH Agent connection is working! -- SSH Agent veza radi! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Postavke aplikacije -- -- -- General -- Općenito -- -- -- Security -- Sigurnost -- -- -- Access error for config file %1 -- Pogreška pristupa za konfiguracijsku datoteku %1 -- -- -- Icon only -- Samo ikone -- -- -- Text only -- Samo tekst -- -- -- Text beside icon -- Tekst uz ikone -- -- -- Text under icon -- Tekst ispod ikona -- -- -- Follow style -- Prati stil -- -- -- Reset Settings? -- Poništi Postavke? -- -- -- Are you sure you want to reset all general and security settings to default? -- Želite li zaista vratiti sve opće i sigurnosne postavke na zadano? -- -- -- Monochrome (light) -- Jednobojna(svijetla) -- -- -- Monochrome (dark) -- Jednobojna(tamna) -- -- -- Colorful -- Raznobojna -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Morate ponovo pokrenuti aplikaciju kako biste postavili novi jezik. Želite li ju ponovo pokrenuti sada? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Osnovne Postavke -- -- -- Startup -- Pokretanje -- -- -- Start only a single instance of KeePassXC -- Pokreni samo jedan primjer KeePassXC-a -- -- -- Minimize window at application startup -- Smanji prozor prilikom pokretanja aplikacije -- -- -- File Management -- Upravljanje Datotekama -- -- -- Backup database file before saving -- Napravi sigurnosnu kopiju datoteke baze podataka prije spremanja -- -- -- Automatically save after every change -- Automatski spremi poslije svake izmjene -- -- -- Automatically reload the database when modified externally -- Automatski iznova otvori bazu podataka kada je modificirana izvana -- -- -- Entry Management -- Upravljanje Stavkama -- -- -- Use group icon on entry creation -- Koristi ikonu grupe pri stvaranju stavki -- -- -- Minimize instead of app exit -- Smanji aplikaciju umjesto izlaženje -- -- -- Show a system tray icon -- Prikaži ikonu sistemske ladice -- -- -- Hide window to system tray when minimized -- Sakrij prozor u sistemsku ladicu kada je smanjen -- -- -- Auto-Type -- Automatsko-tipkanje -- -- -- Use entry title to match windows for global Auto-Type -- Upotrijebi naziv stavke za podudaranje prozora pri globalnom Auto-tipkanju -- -- -- Use entry URL to match windows for global Auto-Type -- Upotrijebi URL stavke za podudaranje prozora pri globalnom Auto-tipkanju -- -- -- Always ask before performing Auto-Type -- Uvijek pitaj prije izvođenja Auto-tipkanja -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Pokretna alatna traka -- -- -- Remember previously used databases -- Zapamti prethodno korištene baze podataka -- -- -- Load previously open databases on startup -- Učitaj prethodno otvorene baze podataka pri pokretanju -- -- -- Remember database key files and security dongles -- Zapamti datoteku ključa i hardverske ključeve baze podataka -- -- -- Check for updates at application startup once per week -- Provjeri dostupnost dopuna pri pokretanju aplikacije jednom tjedno -- -- -- Include beta releases when checking for updates -- Obuhvati beta izdanja tokom provjere za nadopune -- -- -- Language: -- Jezik: -- -- -- (restart program to activate) -- (ponovo pokrenite program za aktivaciju) -- -- -- Minimize window after unlocking database -- Smanji prozor nakon otključavanja baze podataka -- -- -- Minimize when opening a URL -- Smanji prilikom otvaranja ULR-a -- -- -- Hide window when copying to clipboard -- Sakrij prozor prilikom kopiranja u međuspremnik -- -- -- Minimize -- Smanji -- -- -- Drop to background -- Spusti u pozadinu -- -- -- Favicon download timeout: -- Istek vremena za preuzimanje favikona: -- -- -- Website icon download timeout in seconds -- Istek vremena za preuzimanje ikona mrežnih stranica u sekundama -- -- -- sec -- Seconds -- sek -- -- -- Toolbar button style -- Stil gumba alatne trake -- -- -- Language selection -- Odabir jezika -- -- -- Global auto-type shortcut -- Globalni prečac auto-tipkanja -- -- -- Auto-type character typing delay milliseconds -- Auto-tipkanje odgoda pisanja znakova milisekunde -- -- -- Auto-type start delay milliseconds -- Auto-tipkanje odgoda pokretanja milisekunde -- -- -- Automatically launch KeePassXC at system startup -- Automatski pokreni KeePassXC pri pokretanju sustava -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Sigurno spremi datoteke baze podataka (onemogućite ako imate problema sa Dropbox-om i sl.) -- -- -- User Interface -- Korisničko Sučelje -- -- -- Toolbar button style: -- Stil gumba alatne trake: -- -- -- Use monospaced font for notes -- Koristi font fiksne širine za bilješke -- -- -- Tray icon type: -- Vrsta ikone ladice: -- -- -- Reset settings to default… -- Vrati postavke na zadano... -- -- -- Auto-Type typing delay: -- Auto-tipkanje odgoda pisanja: -- -- -- Global Auto-Type shortcut: -- Globalni Auto-tipkanje prečac: -- -- -- Auto-Type start delay: -- Auto-tipkanje odgoda pokretanja: -- -- -- Automatically save when locking database -- Automatski spremi prilikom zaključavanja baze podataka -- -- -- Automatically save non-data changes when locking database -- Automatski sačuvaj bespodatkovne izmjene prilikom zaključavanja baze podataka -- -- -- Tray icon type -- Vrsta ikone ladice -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Istek vremena -- -- -- Clear clipboard after -- Obriši međuspremnik nakon -- -- -- sec -- Seconds -- sek -- -- -- Lock databases after inactivity of -- Zaključaj bazu podataka nakon neaktivnosti od -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Zaboravi TouchID nakon neaktivnosti od -- -- -- Convenience -- Pogodnost -- -- -- Lock databases when session is locked or lid is closed -- Zaključaj bazu podataka kada je sesija zaključana ili poklopac zatvoren -- -- -- Forget TouchID when session is locked or lid is closed -- Zaboravi TouchID kada je sesija zaključanja ili je poklopac zatvoren -- -- -- Lock databases after minimizing the window -- Zaključaj baze podataka nakon smanjenja prozora -- -- -- Re-lock previously locked database after performing Auto-Type -- Ponovo zaključaj prethodno zaključanu bazu podataka nakon izvođenja Auto-Tipkanja -- -- -- Hide passwords in the entry preview panel -- Sakrij lozinke na ploči za pregled stavki -- -- -- Hide entry notes by default -- Sakrij bilješke stavki pod zadano -- -- -- Privacy -- Privatnost -- -- -- Use DuckDuckGo service to download website icons -- Koristi DuckDuckGo usluge za preuzimanje ikona mrežnih stranica -- -- -- Clipboard clear seconds -- Brisanje međuspremnika sekunde -- -- -- Touch ID inactivity reset -- Ponovo pokretanje TouchID nakon neaktivnosti -- -- -- Database lock timeout seconds -- Istek vremena za zaključavanje baze podataka u sekundama -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Obriši upite pretage nakon -- -- -- Require password repeat when it is visible -- Zahtijevaj ponavljanje lozinke kada je vidljiva -- -- -- Hide passwords when editing them -- Sakrij lozinke tokom uređivanja -- -- -- Use placeholder for empty password fields -- Koristi rezervirana mjesta za prazna polja lozinki -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Stavku koja odgovara naslovu prozora nije moguće naći: -- -- -- Auto-Type - KeePassXC -- Auto-Tipkanje - KeePassXC -- -- -- Auto-Type -- Automatsko-tipkanje -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Sintaksa Vaše Auto-Tipkane izjave je netočna! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Ova Auto-Tipkana naredba sadrži vrlo dugo kašnjenje. Želite li zaista nastaviti? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Ova Auto-Tipkana naredba sadrži vrlo spore pritiske tipki. Želite li zaista nastaviti? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Ova Auto-Tipkana naredba sadrži argumente koji se često ponavljaju. Želite li zaista nastaviti? -- -- -- Permission Required -- Potrebna Dozvola -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC zahtijeva dozvolu Pristupačnosti kako bi izvršio Auto-Tipkanje stavki . Ako ste mu već dali dozvolu, možda ćete morati ponovno pokrenuti KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Prozor -- -- -- Sequence -- Redoslijed -- -- -- Default sequence -- Zadani redoslijed -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupa -- -- -- Title -- Naslov -- -- -- Username -- Korisničko ime -- -- -- Sequence -- Redoslijed -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopiraj &korisničko ime -- -- -- Copy &password -- Kopiraj &lozinku -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Potrebna Dozvola -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC zahtijeva dozvolu Pristupačnosti i Snimača Zaslona kako bi izvršio globalno Auto-Tipkanje. Snimanje Zaslona je potrebno za korištenje naslova prozora pri pronalaženju stavki. Ako ste mu već dali dozvolu, možda ćete morati ponovno pokrenuti KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Tipkanje - KeePassXC -- -- -- Select entry to Auto-Type: -- Odaberite stavku za Auto-Tipkanje -- -- -- Search... -- Traži... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Zahtjev za Pristup Pregledniku -- -- -- %1 is requesting access to the following entries: -- %1 zahtijeva pristup sljedećim stavkama: -- -- -- Remember access to checked entries -- Zapamti pristup označenim stavkama -- -- -- Remember -- Zapamti -- -- -- Allow access to entries -- Dopusti pristup stavkama -- -- -- Allow Selected -- Dopusti Odabrane -- -- -- Deny All -- Odbij Sve -- -- -- Disable for this site -- Onemogući za ovu stranicu -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- Spremi Stavku KeePassXC-Preglednika -- -- -- Ok -- Ok -- -- -- Cancel -- Otkaži -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Imate više otvorenih baza podataka. --Odaberite ispravnu bazu podataka za spremanje vjerodajnica. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Novi zahtjev za udruženje ključa -- -- -- Save and allow access -- Spremi i omogući pristup -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Presnimi postojeći ključ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Zajednički ključ za šifriranje s nazivom "%1" već postoji. --Želite li ga pesnimiti? -- -- -- KeePassXC: Update Entry -- KeePassXC: Dopuni Stavku -- -- -- Do you want to update the information in %1 - %2? -- Želite li nadopuniti informacije u %1 - %2? -- -- -- Abort -- Prekini -- -- -- Converting attributes to custom data… -- Pretvaranje svojstava u prilagođene podatke... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Pretvorena KeePassHTTP svojstva -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Uspješno pretvorena svojstva od %1 stavke(i). --%2 ključa premještena u prilagođene podatke. -- -- -- Successfully moved %n keys to custom data. -- Uspješno premješten %n ključ u prilagođene podatke.Uspješno premještena %n ključa u prilagođene podatke.Uspješno premješteno %n ključeva u prilagođene podatke. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nema stavki s KeePassHTTP svojstvima! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktivna baza podataka nema stavke sa KeePassHTTP svojstvom. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Otkrivene zastarjele postavke integracije preglednika -- -- -- KeePassXC: Create a new group -- KeePassXC: Stvori novu grupu -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Zaprimljen je zahtjev za stvaranje nove grupe "%1". --Želite li stvoriti ovu grupu? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Vaše KeePassXC postavke preglednika potrebno je premjestiti u postavke baze podataka. --To je potrebno za održavanje trenutnih veza preglednika. --Želite li premjestiti postojeće postavke sada? -- -- -- Don't show this warning again -- Nemoj više prikazivati ovo upozorenje. -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Dobilii ste zahtjev udruženja za sljedeću bazu podataka: --%1 -- --Dajte vezi jedinstveno ime ili ID, na primjer: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dijalog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Ovo je potrebno za pristup vašim bazama podataka pomoću KeePassXC-Preglednika -- -- -- Enable browser integration -- Omogući integraciju preglednika -- -- -- General -- Općentio -- -- -- Browsers installed as snaps are currently not supported. -- Preglednici instalirani kao snap-ovi trenutno nisu podržani. -- -- -- Enable integration for these browsers: -- Omogućite integraciju za ove preglednike: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Prikaži obavijest kada se zatraže podaci za prijavu -- -- -- Request to unlock the database if it is locked -- Zatraži otključavanje baze podataka ako je zaključana -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Vraćene su samo stavke s istom shemom (http://, https://, ...). -- -- -- Match URL scheme (e.g., https://...) -- Uskladi shemu URL-a(npr. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Vraća samo najbolja podudaranja za određeni URL, umjesto svih stavki za cijelu domene. -- -- -- Return only best-matching credentials -- Vrati samo najprikladnije podatke za prijavu -- -- -- Returns expired credentials. String [expired] is added to the title. -- Vraća istekle podatke za prijavu. Znakovni niz [istekao] se dodaje naslovu. -- -- -- Allow returning expired credentials -- Dopusti vraćanje podataka kojima je istekao rok -- -- -- All databases connected to the extension will return matching credentials. -- Sve baze podataka povezane s proširenjem vratit će odgovarajuće podatke za prijavu. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Traži odgovarajuće podatke za prijavu u svim otvorenim bazama podataka -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sortiraj odgovarajuće podatke za prijavu po naslovu -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sortiraj odgovarajuće podatke za prijavu po korisničkom imenu -- -- -- Advanced -- Napredno -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nikad ne pitaj prije nego što zatražite pristup podacima za prijavu -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nikad ne pitaj prije nego što ažurirate podataka za prijavu -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Nemoj tražiti dozvolu za HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatsko stvaranje ili nadopunjavanje polja znakovnih nizova nije podržano. -- -- -- Return advanced string fields which start with "KPH: " -- Vratite napredna polja znakovnog niza koji počinje s "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Nemoj prikazivati skočni zaslon koji predlaže migraciju zastarjelih postavki KeePassHTTP-a. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Ne prikazuj podsjetnik za migriranje zastarjelih postavki KeePassHTTP-a. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Prilikom pokretanja automatski ažuriraj binarnu putanju KeePassXC-a ili keepassxc-proxy-a u izvorne skripte za slanje poruka. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Koristi prilagođenu lokaciju proxy-a ako ste ručno instalirali proxy. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Koristi prilagođenu lokaciju proxy-a: -- -- -- Custom proxy location field -- Polje prilagođene lokacije proxy-a -- -- -- Browser for custom proxy file -- Preglednik za prilagođenu proxy datoteku -- -- -- Browse... -- Button for opening file dialog -- Pretraživanje... -- -- -- Use a custom browser configuration location: -- Koristi prilagođenu lokaciju konfiguracije preglednika: -- -- -- Browser type: -- Vrsta preglednika: -- -- -- Toolbar button style -- Stil gumba alatne trake -- -- -- Config Location: -- Lokacija konfiguracije: -- -- -- Custom browser location field -- Prilagođeno polje lokacije preglednika -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- Prilagođena ID proširenja: -- -- -- Custom extension ID -- Prilagođena ID proširenja -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Zbog Snap-ovog odvojenog pokrretanja, morate pokrenuti skriptu kako biste omogućili integraciju preglednika.<br />Tu skriptu možete dobiti od %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Preglednik potreban je za funkcioniranje integracije preglednika. <br />Preuzmite ga na %1 i %2 i %3. %4 -- -- -- Please see special instructions for browser extension use below -- -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Pogreška:</b> Prilagođena lokacija proxy-a nije pronađena!<br/>Integracija preglednika NEĆE FUNKCIONIRATI bez proxy aplikacije. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Upozorenje:</b> Sljedeće opcije mogu biti opasne! -- -- -- Executable Files -- Izvršne datoteke -- -- -- All Files -- Sve datoteke -- -- -- Select custom proxy location -- Odaberite prilagođenu lokaciju proxy-a -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Opcije Kloniranja -- -- -- Append ' - Clone' to title -- Dodataj ' - Klon' naslovu -- -- -- Replace username and password with references -- -- -- -- Copy history -- Povijesti kopiranja -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Uvezi CSV polja -- -- -- filename -- ime datoteke -- -- -- size, rows, columns -- veličina, redovi, stupci -- -- -- Encoding -- Kodiranje -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- -- -- -- Fields are separated by -- -- -- -- Comments start with -- -- -- -- Consider '\' an escape character -- -- -- -- Preview -- Pregled -- -- -- Imported from CSV file -- Uvezeno iz CSV datoteke -- -- -- Original data: -- Izvorni podaci: -- -- -- Error -- Pogreška -- -- -- Error(s) detected in CSV file! -- Greška(e) otkrivena u CSV datoteci! -- -- -- [%n more message(s) skipped] -- [%n poruka preskočena][još %n poruke preskočeno][još %n poruka preskočeno] -- -- -- CSV import: writer has errors: --%1 -- -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- Pregled CSV uvoza -- -- -- Column Association -- -- -- -- Last Modified -- Posljednja izmjena -- -- -- Password -- Lozinka -- -- -- Created -- Stvoreno -- -- -- Notes -- Bilješke -- -- -- Title -- Naslov -- -- -- Group -- Grupa -- -- -- URL -- URL -- -- -- Username -- Korisničko ime -- -- -- Header lines skipped -- Linije zaglavlje preskočene -- -- -- First line has field names -- Prva linija ima nazive polja -- -- -- Not Present -- Nije prisutno -- -- -- Column %1 -- Stupac %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n stupac%n stupaca%n stupaca -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bajt%n bajta%n bajtova -- -- -- %n row(s) -- %n redak%n retka%n redova -- -- -- -- Database -- -- File %1 does not exist. -- Datoteka %1 ne postoji. -- -- -- Unable to open file %1. -- Datoteku %1 nije moguće otvoriti. -- -- -- Error while reading the database: %1 -- Pogreška tijekom čitanja baze podataka: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- -- -- -- Key not transformed. This is a bug, please report it to the developers! -- -- -- -- %1 --Backup database located at %2 -- %1 --Sigurnosna kopija baza podataka nalazi se na %2 -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- Datoteka baze podataka ima nesjedinjene promjene. -- -- -- Recycle Bin -- Koš za smeće -- -- -- Passwords -- Root group name -- Lozinke -- -- -- Database save is already in progress. -- Spremanje baze podataka je u toku. -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Otključaj bazu podataka - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Datoteka ključa: -- -- -- Refresh -- Osvježi -- -- -- Don't show this warning again -- Nemoj više pokazivati ovo upozorenje. -- -- -- All files -- Sve datoteke -- -- -- Key files -- Datoteke ključeva -- -- -- Select key file -- Odaberite datoteku ključa -- -- -- Failed to open key file: %1 -- Otvaranja datoteke ključa nije uspjelo: %1 -- -- -- Unlock KeePassXC Database -- Otključaj bazu podataka KeePassXC -- -- -- Enter Password: -- Unesite lozinku: -- -- -- Password field -- Polje lozinke -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- Potraži datoteku ključa -- -- -- Browse... -- Pretraživanje... -- -- -- Refresh hardware tokens -- Osvježi hardverske tokene -- -- -- Hardware Key: -- Hardverski ključ: -- -- -- Hardware key help -- Hardverski ključ pomoć -- -- -- TouchID for Quick Unlock -- TouchID za Brzo Otključavanje -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- Unesite dodatne vjerodajnice (ako ih ima): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Možete koristiti hardverski sigurnosni ključ kao što <strong>je YubiKey</strong> <strong>ili OnlyKey</strong> s utorima podešenim za HMAC-SHA1.</p> --<p>Kliknite za više informacija...</p> -- -- -- Key file help -- Datoteka ključa pomoć -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Nije moguće koristiti datoteku baze podataka kao datoteku ključa -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Ne možete koristiti datoteku baze podataka kao datoteku ključa. --Ako nemate datoteku ključa, ostavite polje prazno. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Uz lozinke, možete koristiti tajnu datoteku kako biste poboljšali sigurnost svoje baze podataka. Ta se datoteka može proizvesti u sigurnosnim postavkama baze podataka.</p><p>Ovo nije <strong>Vaša</strong> *.kdbx datoteka baze podataka!<br>Ako nemate datoteku ključa, ostavite ovo polje prazno.</p><p>Kliknite za više informacija...</p> -- -- -- Key file to unlock the database -- Datoteka ključa za otključavanje baze podataka -- -- -- Please touch the button on your YubiKey! -- Molimo prritisnite gumb na svom YubiKey! -- -- -- Detecting hardware keys… -- Otkrivanje hardverskih ključeva... -- -- -- No hardware keys detected -- Nijedan hardverski ključ otkrivene -- -- -- Select hardware key… -- Odaberite hardverski ključ... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Lozinke -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Napredne Postavke -- -- -- General -- Generalno -- -- -- Security -- Sigurnost -- -- -- Encryption Settings -- Postavke Šifriranja -- -- -- Browser Integration -- Integracija preglednika -- -- -- Database Credentials -- Vjerodajnice baze podataka -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Postavke preglednika -- -- -- Stored keys -- Spremljeni ključevi -- -- -- Remove -- Ukloni -- -- -- Delete the selected key? -- Izbriši odabrani ključ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Želite li zaista izbrisati odabrani ključ? --To može spriječiti vezu sa priključkom preglednika -- -- -- Key -- Ključ -- -- -- Value -- Vrijednost -- -- -- Enable Browser Integration to access these settings. -- Omogući Integraciji Preglednika pristup ovim postavkama -- -- -- Disconnect all browsers -- Odspoji sve preglednike... -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Želite li zaista odspojiti sve preglednike? --To može spriječiti vezu sa priključkom preglednika. -- -- -- KeePassXC: No keys found -- KeePassXC: Nijedan ključ nije pronađen -- -- -- No shared encryption keys found in KeePassXC settings. -- Nijedni dijeljeni ključevi za šifriranje nisu prronađeni u KeePassXC postavkama. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Uklonjeni ključevi iz baze podataka -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Uspješno uklonjen %n ključ za šifriranje iz KeePassXC postavki.Uspješno uklonjena %n ključa za šifriranje iz KeePassXC postavki.Uspješno uklonjeno %n ključeva za šifriranje iz KeePassXC postavki. -- -- -- Forget all site-specific settings on entries -- -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Želite li zaista zaboraviti sve specifične postavke stranice za svaku stavku? --Dozvole za pristup stavkama bit će opozvane. -- -- -- Removing stored permissions… -- Uklanjanje pohranjenih dozvola... -- -- -- Abort -- Prekini -- -- -- KeePassXC: Removed permissions -- KeePassXC: Uklonjene dozvole -- -- -- Successfully removed permissions from %n entry(s). -- Uspješno uklonjena dozvola od %n stavke.Uspješno uklonjene dozvole od %n stavke.Uspješno uklonjene dozvole od %n stavki. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nijedna stavka sa dozvolama nije pronađena! -- -- -- The active database does not contain an entry with permissions. -- Aktivna baza podataka nema stavki sa dozvolama. -- -- -- Move KeePassHTTP attributes to custom data -- Premjesti KeePassHTTP svojstva u prilagođene podatke -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- Pohranjeni ključevi preglednika -- -- -- Remove selected key -- Ukloni odabrani ključ -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Premjesti KeePassHTTP svojstva u prilagođene podatke KeePassXC-Preglednik-a -- -- -- Refresh database root group ID -- Osvježi ID izvorne grupe baze podataka -- -- -- Created -- Stvorio -- -- -- Refresh database ID -- Osvježi ID baze podataka -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Želite li zaista osvježiti ID baze podataka? --To je potrebno samo ako je vaša baza podataka kopija druge i dodaci preglednika se ne mogu povezati. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- -- -- -- No password set -- Lozinka nije postavljena -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- UPOZORENJE! Niste postavili lozinku. Korištenje baze podataka bez lozinke nije preporučeno -- --Želite li zaista nastaviti bez lozinke? -- -- -- Continue without password -- Nastavi bez lozinke -- -- -- No encryption key added -- Nijedan ključ za šifriranje nije dodan -- -- -- You must add at least one encryption key to secure your database! -- Morate dodati barem jedan ključ za šifriranje kako biste osigurali svoju bazu podataka! -- -- -- Unknown error -- Nepoznata pogreška -- -- -- Failed to change database credentials -- Neuspjela promjena vjerodajnica baze podataka -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritam šifriranja: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (zadano) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- -- -- -- Transform rounds: -- -- -- -- Memory Usage: -- -- -- -- Parallelism: -- Paralelizam: -- -- -- Decryption Time: -- Vrijeme dešifriranja: -- -- -- ?? s -- ?? s -- -- -- Change -- Promijni -- -- -- Higher values offer more protection, but opening the database will take longer. -- Veće vrijednosti nude veću zaštitu, ali otvaranje baze podataka trajat će dulje. -- -- -- Database format: -- Format baze podataka: -- -- -- This is only important if you need to use your database with other programs. -- Ovo je važno samo ako trebate koristiti svoju bazu podataka s drugim programima. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (preporučeno) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- nepromijenjeno -- -- -- Number of rounds too high -- Key transformation rounds -- -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- -- Understood, keep number -- -- -- -- Cancel -- Otkaži -- -- -- Number of rounds too low -- Key transformation rounds -- -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- -- KDF unchanged -- KDF nepromijenjen -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- Baza BazaMiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- konac(e) konac(e)Nit(i) -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- Vrijeme dešifriranja u sekundama -- -- -- Database format -- Format baze podataka -- -- -- Encryption algorithm -- Algoritam šifriranja -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- Iskorištenost memorije -- -- -- Parallelism -- Paralelizam -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Izložene stavke -- -- -- Don't expose this database -- Ne izlaži ovu bazu podataka -- -- -- Expose entries under this group: -- Izložene stavke unutar ove grupe: -- -- -- Enable Secret Service to access these settings. -- Omogućite Tajnu Službu za pristup ovim postavkama. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Meta Podaci Baze Podataka -- -- -- Database name: -- Naziv baze podataka: -- -- -- Database description: -- Opis baze podataka: -- -- -- Default username: -- Zadano korisničko ime: -- -- -- History Settings -- Postavke povijesti -- -- -- Max. history items: -- -- -- -- Max. history size: -- -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Koristi koš za smeće -- -- -- Additional Database Settings -- Dodatne Postavke Baze Podataka -- -- -- Database name field -- Polje naziva baze podataka -- -- -- Database description field -- Polje opisa baze podataka -- -- -- Default username field -- Polje zadanog korisničkog imena -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- Izbriši koš za smeće -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Želite li izbrisati trenutni koš za smeće i sav njezin sadržaj? --Ovu radnju nije moguće povratit. -- -- -- (old) -- (staro) -- -- -- Enable compression (recommended) -- Omogući sažimanje (preporučeno) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Dijeljenje -- -- -- Breadcrumb -- -- -- -- Type -- Vrsta -- -- -- Path -- Put -- -- -- Last Signer -- -- -- -- Certificates -- Certifikati -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Naziv baze podataka: -- -- -- Description: -- Opis: -- -- -- Database name field -- Polje naziva baze podataka -- -- -- Database description field -- Polje opisa baze podataka -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 Baza Podataka -- -- -- All files -- Sve datoteke -- -- -- Open database -- Otvori Bazu Podataka -- -- -- CSV file -- CSV datoteka -- -- -- Merge database -- Sjedini baze podataka -- -- -- Open KeePass 1 database -- Otvori KeePass 1 bazu podataka -- -- -- KeePass 1 database -- KeePass 1 Baza podataka -- -- -- Export database to CSV file -- Izvezi bazu podataka u CSV datoteku -- -- -- Writing the CSV file failed. -- Pisanje CSV datoteke nije uspjelo. -- -- -- Database creation error -- Pogreška pri stvaranju baze podataka -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Stvorena baza podataka nema ključ ili KDF, odbijam ju spremiti. --Ovo je definitivno pogreška, molimo prijavite to programerima. -- -- -- Select CSV file -- Odaberite CSV datoteku -- -- -- New Database -- Nova Baza Podataka -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nova Baza Podataka] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Zaključano] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Samo za čitanje] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Otvoranje %1 nije uspjelo. Ili ne postoji ili nije dostupno. -- -- -- Export database to HTML file -- Izvezi bazu podataka u HTML datoteku -- -- -- HTML file -- HTML datoteka -- -- -- Writing the HTML file failed. -- Pisanje HTML datoteke nije uspjelo. -- -- -- Export Confirmation -- Potvrda izvoza -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- Otvori OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Pretraživanje... -- -- -- Do you really want to delete the entry "%1" for good? -- Želite li zaista izbrisati stavku "%1"? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Želite li zaista premjestiti stavku "%1" u koš za smeće? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Želite li zaista premjestiti %n stavku u koš za smeće?Želite li zaista premjestiti %n stavke u koš za smeće?Želite li zaista premjestiti %n stavki u koš za smeće? -- -- -- Execute command? -- Izvrši naredbu? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Želite li zaista izvršiti sljedeću naredbu?<br><br>%1<br> -- -- -- Remember my choice -- Zapamti moj izbora. -- -- -- Do you really want to delete the group "%1" for good? -- Želite li zaista izbrisati grupu "%1"? -- -- -- No current database. -- Nema trenutne baze podataka. -- -- -- No source database, nothing to do. -- Nema izvorne baze podataka, nema ništa za raditi. -- -- -- Search Results (%1) -- Rezultati pretraživanja (%1) -- -- -- No Results -- Nema rezultata -- -- -- File has changed -- Datoteka se promijenila -- -- -- The database file has changed. Do you want to load the changes? -- Datoteka baze podataka se promijenila. Želite li učitati promjene? -- -- -- Merge Request -- Zahtjev za spajanje -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Datoteka baze podataka se promijenila i imate nespremljene promjene. --Želite li sjediniti svoje promjene? -- -- -- Empty recycle bin? -- Isprazni koš za smeće? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- -- -- -- Do you really want to delete %n entry(s) for good? -- Želite li zaista izbrisati %n stavku zauvijek?Želite li zaista izbrisati %n stavke zauvijek?Želite li zaista izbrisati %n stavki zauvijek? -- -- -- Delete entry(s)? -- Izbrisati unose(e)?Izbrisati unose(e)?Izbriši stavku(e)? -- -- -- Move entry(s) to recycle bin? -- Premjestiti unos(e) u koš za smeće?Premjestiti unos(e) u koš za smeće?Premjestiti stavku(e) u koš za smeće? -- -- -- Lock Database? -- Zaključaj Baza Podataka? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Uređujete stavku. Svejedno odbaci promjene i zaključaj? -- -- -- "%1" was modified. --Save changes? -- "%1" je izmijenjen. --Spremi promjene? -- -- -- Database was modified. --Save changes? -- Baza podataka je izmijenjena. --Spremi promjene? -- -- -- Save changes? -- Spremi promjene? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- -- Disable safe saves? -- Onemogući sigurno spremanje? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- -- Passwords -- Lozinke -- -- -- Save database as -- Spremi bazu podataka kao -- -- -- KeePass 2 Database -- KeePass 2 Baza Podataka -- -- -- Replace references to entry? -- -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Izbriši grupu -- -- -- Move group to recycle bin? -- Premjesti grupu u koš za smeće? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Želite li zaista premjestiti grupu "%1" u koš za smeće? -- -- -- Successfully merged the database files. -- Uspješno spojene datoteke baze podataka. -- -- -- Database was not modified by merge operation. -- Baza podataka nije izmijenjena operacijom sjedinjenja. -- -- -- Shared group... -- Zajednička grupa... -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Stavka -- -- -- Advanced -- Napredno -- -- -- Icon -- Ikona -- -- -- Auto-Type -- Auto-tipkanje -- -- -- Properties -- Svojstva -- -- -- History -- Povijest -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- n/d -- -- -- (encrypted) -- (šifrirano) -- -- -- Select private key -- Odaberite privatni ključ -- -- -- Entry history -- Povjest stavki -- -- -- Add entry -- Dodaj stavku -- -- -- Edit entry -- Uredi stavku -- -- -- New attribute -- Novo svojstvo -- -- -- Are you sure you want to remove this attribute? -- Jeste li sigurni da želite ukloniti ovo svojstvo? -- -- -- Tomorrow -- Sutra -- -- -- %n week(s) -- %n tjedan%n tjedana%n tjedana -- -- -- %n month(s) -- %n mjesec%n mjeseca%n mjeseci -- -- -- Entry updated successfully. -- Stavka uspješno nadopunjena. -- -- -- New attribute %1 -- Novo svojstvo %1 -- -- -- %n year(s) -- %n godina%n godine%n godina -- -- -- Confirm Removal -- Potvrdi brisanje -- -- -- Browser Integration -- Integracija preglednika -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Želite li zaista ukloniti ovaj URL? -- -- -- Reveal -- Otkrij -- -- -- Hide -- Sakrij -- -- -- Unsaved Changes -- Nespremljene promjene -- -- -- Would you like to save changes to this entry? -- Želite li spremiti promjene u ovom stavku? -- -- -- [PROTECTED] Press Reveal to view or edit -- [ZAŠTIĆENO] Pritisnite Otkrij za prikaz ili uređivanje -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Dodatna svojstava -- -- -- Add -- Dodaj -- -- -- Remove -- Ukloni -- -- -- Edit Name -- Uredi naziv -- -- -- Protect -- Zaštiti -- -- -- Reveal -- Otkrij -- -- -- Attachments -- Privitci -- -- -- Foreground Color: -- Prednja boja: -- -- -- Background Color: -- Pozadinska boja: -- -- -- Attribute selection -- Odabir svojstava -- -- -- Attribute value -- Vrijednost svojstva -- -- -- Add a new attribute -- Dodaj novo svojstvo -- -- -- Remove selected attribute -- Ukloni odabrana svojstva -- -- -- Edit attribute name -- Uredi ime svojstva -- -- -- Toggle attribute protection -- Uključi / isključi zaštitu svojstava -- -- -- Show a protected attribute -- Prikaži zaštićena svojstva -- -- -- Foreground color selection -- Odabir prednje boje -- -- -- Background color selection -- Odabir pozadinske boje -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- Izostavi iz izvješća baze podataka -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Omogućite Auto-Tipkanje za ovu stavku -- -- -- Window Associations -- -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Naslov prozora: -- -- -- Use a specific sequence for this association: -- Koristi specifičan redoslijed za ovu asocijaciju: -- -- -- Custom Auto-Type sequence -- Prilagođen redoslijed Auto-Tipkanja -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- Postavite naslov za asociranja prozora -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- Prilagođen redoslijed Auto-Tipkanja za ovaj prozor -- -- -- Inherit default Auto-Type sequence from the group -- Naslijedi zadani redoslijed Auto-Tipkanja od grupe -- -- -- Use custom Auto-Type sequence: -- Koristi pilagođen redoslijed Auto-Tipkanja: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- Generalno -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- Sakrij ovu stavku od proširenja preglednika -- -- -- Additional URL's -- Dodatni URL-ovi -- -- -- Add -- Dodaj -- -- -- Remove -- Ukloni -- -- -- Edit -- Uredi -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Samo pošaljite ovu postavku pregledniku za HTTP Auth dijaloge. Ako je omogućeno, normalni obrasci za prijavu neće prikazati ovu stavku za odabir. -- -- -- Use this entry only with HTTP Basic Auth -- Koristi ovu stavku samo s HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Prikaži -- -- -- Restore -- Vrati -- -- -- Delete -- Izbriši -- -- -- Delete all -- Obriši sve -- -- -- Entry history selection -- Odabir povijesti stavke -- -- -- Show entry at selected history state -- Prikaži stavku u odabranom trenutku povijesti -- -- -- Restore entry to selected history state -- Vrati stavku u odabranom trenutku vremena -- -- -- Delete selected history state -- -- -- -- Delete all history -- Obriši svu povijest -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Lozinka: -- -- -- Title: -- Naslov: -- -- -- Presets -- -- -- -- Toggle the checkbox to reveal the notes section. -- -- -- -- Username: -- Korisničko ime: -- -- -- Url field -- Polje URL-a -- -- -- Download favicon for URL -- Preuzmi favikonu za URL -- -- -- Password field -- Polje lozinke -- -- -- Toggle notes visible -- Uključi / Isključi vidljivost bilješki -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- Polje bilješki -- -- -- Title field -- Polje naslova -- -- -- Username field -- Polje korisničkog imena -- -- -- Toggle expiration -- Uključi / Isključi rok trajanja -- -- -- Notes: -- Bilješke: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Ističe: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Obrazac -- -- -- Remove key from agent after -- -- -- -- seconds -- sekunde -- -- -- Fingerprint -- Otisak -- -- -- Remove key from agent when database is closed/locked -- Ukloni ključ iz agenta kada je baza podataka zatvorena/zaključana -- -- -- Public key -- Javni ključ -- -- -- Add key to agent when database is opened/unlocked -- Dodajte ključ agentu kada se baza podataka otvori/otključa -- -- -- Comment -- Komentar -- -- -- Decrypt -- Dešifriraj -- -- -- n/a -- n/d -- -- -- Copy to clipboard -- Kopiraj u predmemoriju -- -- -- Private key -- Privatni ključ -- -- -- External file -- Vanjska datoteka -- -- -- Browse... -- Button for opening file dialog -- Pretraživanje... -- -- -- Attachment -- Privitak -- -- -- Add to agent -- Dodaj agentu -- -- -- Remove from agent -- Ukloni iz agenta -- -- -- Require user confirmation when this key is used -- Zahtijevaj potvrdu korisnika kada se ovaj ključ koristi -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- Preglednik za datoteku ključa -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Grupa -- -- -- Icon -- Ikona -- -- -- Properties -- Svojstva -- -- -- Add group -- Dodaj grupu -- -- -- Edit group -- Uredi grupu -- -- -- Enable -- Omogući -- -- -- Disable -- Onemogući -- -- -- Inherit from parent group (%1) -- -- -- -- Entry has unsaved changes -- Stavka ima nespremljene promjene -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Vrsta: -- -- -- Path: -- Put: -- -- -- Password: -- Lozinka: -- -- -- Inactive -- Neaktivna -- -- -- KeeShare unsigned container -- -- -- -- KeeShare signed container -- -- -- -- Select import source -- -- -- -- Select export target -- -- -- -- Select import/export file -- -- -- -- Clear -- Obriši -- -- -- Import -- Uvezi -- -- -- Export -- Izvezi -- -- -- Synchronize -- Sinkroniziraj -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Vaša KeePassXC verzija ne podržava dijeljenje ove vrste spremnika. --Podržana proširenja su: %1. -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- Polje lozinke -- -- -- Clear fields -- Obriši polja -- -- -- Browse for share file -- Potraži zajedničku datoteku -- -- -- Browse... -- Pretraživanje... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Polje naziva -- -- -- Notes field -- Polje bilješki -- -- -- Toggle expiration -- Uključi / Isključi rok trajanja -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- Polje zadanog redoslijeda auto-tipkanja -- -- -- Expires: -- Ističe: -- -- -- Use default Auto-Type sequence of parent group -- Koristi zadani redoslijed Auto-Tipkanja nadređene grupe -- -- -- Auto-Type: -- Auto-Tipkanje -- -- -- Search: -- Pretraživanje: -- -- -- Notes: -- Bilješke: -- -- -- Name: -- Naziv: -- -- -- Set default Auto-Type sequence -- Postavi zadani redoslijeda auto-tipkanja -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Dodaj prilagođenu ikonu -- -- -- Delete custom icon -- Obriši prilagođenu ikonu -- -- -- Download favicon -- Preuzmi favikone -- -- -- Unable to fetch favicon. -- -- -- -- Images -- Slike -- -- -- All files -- Sve datoteke -- -- -- Confirm Delete -- Potvrdi Brisanje -- -- -- Select Image(s) -- Odabir slike(a) -- -- -- Successfully loaded %1 of %n icon(s) -- Uspješno učitana %1 od %n ikoneUspješno učitane %1 od %n ikoneUspješno učitano %1 od %n ikona -- -- -- No icons were loaded -- Nijedna ikona nije učitana -- -- -- %n icon(s) already exist in the database -- %n ikona već postoji u bazi podataka%n ikone već postoje u bazi podataka%n ikona već postoji u bazi podataka -- -- -- The following icon(s) failed: -- -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ovu ikonu koristi %n stavka stoga će biti zamijenjena zadanom ikona. Želite li zaista ju izbrisati?Ovu ikonu koristi %n stavke stoga će biti zamijenjene zadanom ikona. Želite li zaista ju izbrisati?Ovu ikonu koristi %n stavki stoga će biti zamijenjene zadanim ikona. Želite li zaista ju izbrisati? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- Preuzmi favikonu za URL -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- Koristi zadanu ikonu -- -- -- Use custom icon -- Koristi prilagođenu ikonu -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Stvoreno: -- -- -- Modified: -- Izmijenjeno: -- -- -- Accessed: -- Pristupljeno: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- -- -- -- Remove -- Ukloni -- -- -- Delete plugin data? -- -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- -- Key -- Ključ -- -- -- Value -- Vrijednost -- -- -- Datetime created -- Datum i vrijeme stvaranja -- -- -- Datetime modified -- Datum i vrijeme izmijene -- -- -- Datetime accessed -- Datum i vrijeme pristupanja -- -- -- Unique ID -- Jedinstveni ID -- -- -- Plugin data -- Podaci priključka -- -- -- Remove selected plugin data -- Ukloni odabrane podataka priključka -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Naziv -- -- -- Size -- Veličina -- -- -- -- EntryAttachmentsWidget -- -- Form -- Obrazac -- -- -- Add -- Dodaj -- -- -- Remove -- Ukloni -- -- -- Open -- Otvori -- -- -- Save -- Spremi -- -- -- Select files -- Odaberi datoteke -- -- -- Are you sure you want to remove %n attachment(s)? -- Želite li zaista ukloniti %n privitak?Želite li zaista ukloniti %n privitaka?Želite li zaista ukloniti %n privitaka? -- -- -- Save attachments -- Spremi privitke -- -- -- Unable to create directory: --%1 -- -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- -- -- -- Confirm overwrite -- -- -- -- Unable to save attachments: --%1 -- -- -- -- Unable to open attachment: --%1 -- -- -- -- Unable to open attachments: --%1 -- -- -- -- Confirm remove -- -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Privitci -- -- -- Add new attachment -- Dodaj novi privitak -- -- -- Remove selected attachment -- Ukloni odabrani privitak -- -- -- Open selected attachment -- Otvori odabrani privitak -- -- -- Save selected attachment to disk -- Spremi odabrani privitak na disk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Naziv -- -- -- -- EntryHistoryModel -- -- Last modified -- Posljednja izmjena -- -- -- Title -- Naslov -- -- -- Username -- Korisničko ime -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- -- -- -- Group -- Grupa -- -- -- Title -- Naslov -- -- -- Username -- Korisničko ime -- -- -- URL -- URL -- -- -- Never -- Nikad -- -- -- Password -- Lozinka -- -- -- Notes -- Bilješke -- -- -- Expires -- Ističe -- -- -- Created -- Stvorio -- -- -- Modified -- Izmijenjeno -- -- -- Accessed -- Pristupljeno -- -- -- Attachments -- Privitci -- -- -- Size -- Veličina -- -- -- Group name -- Naziv grupe -- -- -- Entry title -- Ime stavke -- -- -- Entry notes -- Bilješke stavke -- -- -- Entry expires at -- Stavka ističe u -- -- -- Creation date -- Datum stvaranja -- -- -- Last modification date -- Datum zadnje izmjene -- -- -- Last access date -- Datum zadnjeg pristupa -- -- -- Attached files -- Priložene datoteke -- -- -- Entry size -- Veličina stavke -- -- -- Has attachments -- Ima privitke -- -- -- Has TOTP one-time password -- Ima TOTP jednokratnu lozinku -- -- -- -- EntryPreviewWidget -- -- Close -- Zatvori -- -- -- General -- Generalno -- -- -- Username -- Korisničko ime -- -- -- Password -- Lozinka -- -- -- Expiration -- Rok trajanja -- -- -- URL -- URL -- -- -- Attributes -- Svojstva -- -- -- Attachments -- Privitci -- -- -- Notes -- Bilješke -- -- -- Autotype -- Auto-Tipkanje -- -- -- Window -- Prozor -- -- -- Sequence -- Redoslijed -- -- -- Searching -- Pretraživanje -- -- -- Search -- Traži -- -- -- Clear -- Obriši -- -- -- Never -- Nikad -- -- -- [PROTECTED] -- [ZAŠTIĆENO] -- -- -- Enabled -- Omogućeno -- -- -- Disabled -- Onemogući -- -- -- Share -- Podijeli -- -- -- Display current TOTP value -- Prikaži trenutnu TOTP vrijednosti -- -- -- Advanced -- Napredno -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Nevaljan URL -- -- -- -- EntryView -- -- Fit to window -- -- -- -- Fit to contents -- -- -- -- Reset to defaults -- Vrati na zadano... -- -- -- Has attachments -- Entry attachment icon toggle -- Ima privitke -- -- -- Has TOTP -- Entry TOTP icon toggle -- Ima TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Naziv Datoteke -- -- -- Group -- Grupa -- -- -- Manage -- -- -- -- Unlock to show -- Otključajte za prikaz -- -- -- None -- Nijedan -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikacija -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Nepoznat -- -- -- Unknown -- Unknown executable path -- Nepoznat -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [prazno] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Preuzmi Favikone -- -- -- Cancel -- Otkaži -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Zatvori -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- Preuzimanje... -- -- -- Ok -- Ok -- -- -- Already Exists -- Već Postoji -- -- -- Download Failed -- Preuzimanje nije uspjelo -- -- -- Downloading favicons (%1/%2)... -- Preuzimanje favikona (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Zatvori -- -- -- Close message -- -- -- -- -- Kdbx3Reader -- -- missing database headers -- -- -- -- Header doesn't match hash -- -- -- -- Invalid header id size -- -- -- -- Invalid header field length -- -- -- -- Invalid header data length -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- -- -- -- Invalid header checksum size -- -- -- -- Header SHA256 mismatch -- -- -- -- Unknown cipher -- -- -- -- Invalid header id size -- -- -- -- Invalid header field length -- -- -- -- Invalid header data length -- -- -- -- Failed to open buffer for KDF parameters in header -- -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- -- Legacy header fields found in KDBX4 file. -- Zastarjela polja zaglavlje pronađena u KDBX4 datoteci. -- -- -- Invalid inner header id size -- -- -- -- Invalid inner header field length -- -- -- -- Invalid inner header binary size -- -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- -- -- -- Invalid compression flags length -- -- -- -- Unsupported compression algorithm -- -- -- -- Invalid master seed size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid transform rounds size -- -- -- -- Invalid start bytes size -- -- -- -- Invalid random stream id size -- -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- Nije KeePass baza podataka. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- -- -- -- Unsupported KeePass 2 database version. -- -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- -- -- -- Failed to read database file. -- -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- -- -- -- No root group -- -- -- -- Missing icon uuid or data -- -- -- -- Missing custom data key or value -- -- -- -- Multiple group elements -- -- -- -- Null group uuid -- -- -- -- Invalid group icon number -- -- -- -- Invalid EnableAutoType value -- -- -- -- Invalid EnableSearching value -- -- -- -- No group uuid found -- -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- -- -- -- History element in history entry -- -- -- -- No entry uuid found -- -- -- -- History element with different uuid -- -- -- -- Duplicate custom attribute found -- Pronađen duplikat prilagođenog svojstva -- -- -- Entry string key or value missing -- -- -- -- Entry binary key or value missing -- -- -- -- Auto-type association window or sequence missing -- Asocirani prozor ili redoslijed Auto-Tipkanja nedostaje -- -- -- Invalid bool value -- -- -- -- Invalid date time value -- Nevažeća vrijednost datuma i vremena -- -- -- Invalid color value -- -- -- -- Invalid color rgb part -- -- -- -- Invalid number value -- -- -- -- Invalid uuid value -- -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- -- -- -- XML error: --%1 --Line %2, column %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- -- -- -- Failed to open private key -- Otvaranja privatnog ključa nije uspjelo -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- -- -- -- Not a KeePass database. -- Nije KeePass baza podataka. -- -- -- Unsupported encryption algorithm. -- -- -- -- Unsupported KeePass database version. -- -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- -- -- -- Invalid number of groups -- -- -- -- Invalid number of entries -- -- -- -- Invalid content hash size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid number of transform rounds -- -- -- -- Unable to construct group tree -- -- -- -- Root -- Izvor -- -- -- Key transformation failed -- -- -- -- Invalid group field type number -- -- -- -- Invalid group field size -- -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- -- -- -- Incorrect group icon field size -- -- -- -- Incorrect group level field size -- -- -- -- Invalid group field type -- -- -- -- Missing group id or level -- -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- -- -- -- Read entry field data doesn't match size -- -- -- -- Invalid entry uuid field size -- -- -- -- Invalid entry group id field size -- -- -- -- Invalid entry icon field size -- -- -- -- Invalid entry creation time field size -- -- -- -- Invalid entry modification time field size -- -- -- -- Invalid entry expiry time field size -- -- -- -- Invalid entry field type -- -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Uvezeno iz %1 -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- -- -- -- Key Component Description -- -- -- -- Cancel -- Otkaži -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- Dodaj %1 -- -- -- Change %1 -- Change a key component -- Promijeni %1 -- -- -- Remove %1 -- Remove a key component -- Ukloni %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- -- -- -- -- KeyFileEditWidget -- -- Generate -- Proizvedi -- -- -- Key File -- Datoteka ključa -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Datoteke ključeva -- -- -- All files -- Sve datoteke -- -- -- Create Key File... -- Stvori Datoteku Ključa... -- -- -- Error creating key file -- -- -- -- Unable to create key file: %1 -- -- -- -- Select a key file -- Odaberite datoteku ključa -- -- -- Key file selection -- Odabir datoteke ključa -- -- -- Browse for key file -- Potraži datoteku ključa -- -- -- Browse... -- Pretraživanje... -- -- -- Generate a new key file -- Proizvedi novu datoteku ključa -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Ne možete koristiti trenutnu bazu podataka kao vlastitu datoteku ključa. Odaberite drugu datoteku ili prozvedite novu datoteku ključa . -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Odabrana datoteka ključa nalikuje datoteki baze podataka lozinki. Ključna datoteka mora biti statična datoteka koja se nikada ne mijenja ili ćete zauvijek izgubiti pristup svojoj bazi podataka. --Želite li zaista nastaviti s ovom datotekom? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Baza Podataka -- -- -- &Help -- &Pomoć -- -- -- &Groups -- &Grupe -- -- -- &Tools -- &Alati -- -- -- &Quit -- &Izlaz -- -- -- &About -- O programu -- -- -- Database settings -- Postavke baze podataka -- -- -- Copy username to clipboard -- Kopiraj korisničkog imena u međuspremnik -- -- -- Copy password to clipboard -- Kopiraj lozinku u međuspremnik -- -- -- &Settings -- &Postavke -- -- -- &Title -- &Naslov -- -- -- Copy title to clipboard -- Kopiraj naslov u međuspremnik -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopiraj URL-a u međuspremnik -- -- -- &Notes -- &Bilješke -- -- -- Copy notes to clipboard -- Kopiraj bilješke u međuspremnik -- -- -- Copy &TOTP -- Kopiraj &TOTP -- -- -- E&mpty recycle bin -- -- -- -- Clear history -- Obriši povijest -- -- -- Access error for config file %1 -- Pogreška pristupa za konfiguracijsku datoteku %1 -- -- -- Settings -- Postavke -- -- -- Toggle window -- -- -- -- Quit KeePassXC -- Izađi iz KeePassXC-a -- -- -- Please touch the button on your YubiKey! -- Molimo prritisnite gumb na svom YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- -- &Donate -- &Donirajte -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- &Uvezi -- -- -- Create a new database -- Stvari novu bazu podataka -- -- -- Merge from another KDBX database -- Sjedini iz druge KDBX baze podataka -- -- -- Add a new entry -- Dodaj novu stavku -- -- -- View or edit entry -- Pogledaj ili uredi stavku -- -- -- Add a new group -- Dodaj novu grupu -- -- -- Perform &Auto-Type -- Izvrši &Auto-Tipkanje -- -- -- Open &URL -- Otvori &URL -- -- -- Import a KeePass 1 database -- Uvezi KeePass 1 bazu podataka -- -- -- Import a CSV file -- Uvezi CSV datoteku -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- -- -- -- Would you like KeePassXC to check for updates on startup? -- -- -- -- You can always check for updates manually from the application menu. -- -- -- -- &Export -- &Izvezi -- -- -- Sort &A-Z -- Sortiraj &A-Ž -- -- -- Sort &Z-A -- Sortiraj &Ž-A -- -- -- &Password Generator -- &Proizvođač Lozinki -- -- -- Import a 1Password Vault -- Uvezi 1Password Sef -- -- -- &Getting Started -- &Prvi Koraci -- -- -- &User Guide -- &Korisnički vodič -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- &Nedavne Baze Podataka -- -- -- &Entries -- &Stavke -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- Tema -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- &Spremi Bazu Podataka -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- &Sjedini iz Baze Podataka... -- -- -- &New Entry… -- &Nova Stavka... -- -- -- &Edit Entry… -- &Uredi Stavku... -- -- -- &Delete Entry… -- -- -- -- &New Group… -- &Nova Grupa... -- -- -- &Edit Group… -- &Uredi Grupu... -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- Preuzmi Sve &Favikone... -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- Kopiraj &Korisničko ime -- -- -- Copy &Password -- -- -- -- Download &Favicon -- Preuzmi&Favikonu -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Prikaži TOTP -- -- -- Show QR Code -- Prikaži QR Kod -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- Otvori Korisnički Vodič -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- Automatska -- -- -- Light -- Svijetla -- -- -- Dark -- Tamna -- -- -- Classic (Platform-native) -- Klasična (ovisno o platformi) -- -- -- Show Toolbar -- Prikaži Alatnu traku -- -- -- Show Preview Panel -- Prikaži ploču za pregled -- -- -- Don't show again for this version -- Nemoj više prikazivati ovu verziju -- -- -- Restart Application? -- Ponovno Pokreni Aplikaciju? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Morate ponovno pokrenuti aplikaciju da biste primijenili tu postavku. Želite li ju ponovno pokrenuti sada? -- -- -- Perform Auto-Type Sequence -- Izvrši redoslijed Auto-Tipkanja -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Sakrij korisnička imena -- -- -- Hide Passwords -- Sakrij Lozinke -- -- -- -- ManageDatabase -- -- Database settings -- Postavke baze podataka -- -- -- Edit database settings -- -- -- -- Unlock database -- Otključaj bazu podataka -- -- -- Unlock database to show more information -- Otključajte bazu podataka kako biste vidjeli više informacija -- -- -- Lock database -- Zaključaj bazu podataka -- -- -- -- ManageSession -- -- Disconnect -- Odspoji -- -- -- Disconnect this application -- Odspoji ovu aplikaciju -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- starija stavka sjedinjena iz baze podataka "%1" -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Stvoi novu KeePassXC bazu podataka... -- -- -- Root -- Root group -- Izvor -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Ovdje možete podesiti postavke šifriranja baze podataka. Ne brinite, možete ih izmijeniti kasnije u postavkama baze podataka. -- -- -- Advanced Settings -- Napredne Postavke -- -- -- Simple Settings -- Osnovne Postavke -- -- -- Encryption Settings -- Postavke Šifriranja -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Vjerodajnice baze podataka -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Postavke Šifriranja -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Ovdje možete podesiti postavke šifriranja baze podataka. Ne brinite, možete ih izmijeniti kasnije u postavkama baze podataka. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Osnovne Inforrmacije Baze Podataka -- -- -- Please fill in the display name and an optional description for your new database: -- Unesite ime za prikaz i opcionalan opis za Vašu novu bazu podataka: -- -- -- -- NixUtils -- -- Password Manager -- Upravitelj Lozinki -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- -- -- -- PEM boundary mismatch -- -- -- -- Base64 decoding failed -- -- -- -- Key file way too small. -- -- -- -- Key file magic header id invalid -- -- -- -- Found zero keys -- -- -- -- Failed to read public key. -- -- -- -- Corrupted key file, reading private key failed -- -- -- -- No private key payload to decrypt -- -- -- -- Trying to run KDF without cipher -- -- -- -- Passphrase is required to decrypt this key -- -- -- -- Key derivation failed, key file corrupted? -- -- -- -- Decryption failed, wrong passphrase? -- -- -- -- Unexpected EOF while reading public key -- -- -- -- Unexpected EOF while reading private key -- -- -- -- Can't write public key as it is empty -- -- -- -- Unexpected EOF when writing public key -- -- -- -- Can't write private key as it is empty -- -- -- -- Unexpected EOF when writing private key -- -- -- -- Unsupported key type: %1 -- Nepodržana vrsta ključa: %1 -- -- -- Unknown cipher: %1 -- -- -- -- Cipher IV is too short for MD5 kdf -- -- -- -- Unknown KDF: %1 -- Nepoznati KDF: %1 -- -- -- Unknown key type: %1 -- Nepoznata vrsta ključa: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Lozinke se ne podudaraju -- -- -- Passwords match so far -- Lozinke se zasad podudaraju -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- Proizvedi Lozinku (%1) -- -- -- Warning: Caps Lock enabled! -- Upozorenje: Caps Lock uključen! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Unesite lozinku: -- -- -- Confirm password: -- Potvrdite lozinku: -- -- -- Password -- Lozinka -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Lozinka je primarna metoda za osiguravanje baze podataka.</p><p>Dobre lozinke su duge i jedinstvene. KeePassXC ju može proizvesti za vas.</p> -- -- -- Passwords do not match. -- Lozinke se ne podudaraju. -- -- -- Password field -- Polje lozinke -- -- -- Repeat password field -- Ponavljanje polja lozinke -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- jačina -- -- -- entropy -- entropija -- -- -- Password -- Lozinka -- -- -- Character Types -- Vrste znakova -- -- -- Numbers -- Brojevi -- -- -- Extended ASCII -- Prošireni ASCII -- -- -- Exclude look-alike characters -- Izostavi slične znakove -- -- -- Pick characters from every group -- Odaberi znakove iz svake grupe -- -- -- &Length: -- &Duljina: -- -- -- Passphrase -- Zaporku -- -- -- Wordlist: -- Popis riječi: -- -- -- Word Separator: -- -- -- -- Close -- Zatvori -- -- -- Entropy: %1 bit -- Entropija: %1 bit -- -- -- Password Quality: %1 -- Kvaliteta lozinke: %1 -- -- -- Poor -- Password quality -- Bijedna -- -- -- Weak -- Password quality -- Slaba -- -- -- Good -- Password quality -- Dobra -- -- -- Excellent -- Password quality -- Izvrsna -- -- -- Switch to advanced mode -- Prebaci na napredni način -- -- -- Advanced -- Napredno -- -- -- Braces -- Zagrade -- -- -- Punctuation -- Interpunkcije -- -- -- Quotes -- Navodnici -- -- -- Logograms -- Logogrami -- -- -- Character set to exclude from generated password -- Skup znakova za izostaviti iz proizvodnje lozinke -- -- -- Do not include: -- -- -- -- Add non-hex letters to "do not include" list -- -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Izostavi znakove: "0", "1", "l", "I", "O", "|", "". -- -- -- Generated password -- Proizvedena lozinka -- -- -- Upper-case letters -- Velika slova -- -- -- Lower-case letters -- Mala slova -- -- -- Special characters -- Posebni znakovi -- -- -- Math Symbols -- Matematički simboli -- -- -- Dashes and Slashes -- Crtice i kose crte -- -- -- Excluded characters -- Izostavi znakove -- -- -- Hex Passwords -- Hex lozinke -- -- -- Password length -- Duljina lozinke -- -- -- Word Case: -- -- -- -- Regenerate password -- Ponovo proizvedi lozinku -- -- -- Copy password -- Kopiraj lozinku -- -- -- lower case -- mala slova -- -- -- UPPER CASE -- VELIKA SLOVA -- -- -- Title Case -- Početno slovo -- -- -- Generate Password -- Proizvedi lozinku -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- Dodatni znakovi za korištenje pri proizvodnji lozinke -- -- -- Additional characters -- Dodatni znakovi -- -- -- Word Count: -- Broj riječi: -- -- -- Esc -- Esc -- -- -- Apply Password -- Primjeni Lozinku -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Ponovo proizvedi lozinku (%1) -- -- -- Special Characters -- Posebni znakovi -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistika -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- Entropija lozinke je %1 bitova -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- Lozinka je istekla -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- Lozinka samo što nije istekla -- -- -- Password expires in %1 days -- Lozinka istječe u %1 dana -- -- -- Password will expire soon -- Lozinka će uskoro isteći -- -- -- Password expires on %1 -- Lozinka istječe na %1 -- -- -- Health Check -- -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- -- -- -- Delete -- Izbriši -- -- -- Move -- Premjesti -- -- -- Empty -- Isprazni -- -- -- Remove -- Ukloni -- -- -- Skip -- Preskoči -- -- -- Disable -- Onemogući -- -- -- Merge -- Sjedini -- -- -- Continue -- Nastavi -- -- -- -- QObject -- -- Database not opened -- Baza podataka nije otvorena -- -- -- Database hash not available -- -- -- -- Client public key not received -- -- -- -- Cannot decrypt message -- -- -- -- Action cancelled or denied -- -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- Ključ za šifriranje nije prepoznat -- -- -- Incorrect action -- -- -- -- Empty message received -- -- -- -- No URL provided -- -- -- -- No logins found -- -- -- -- Unknown error -- Nepoznata pogreška -- -- -- Add a new entry to a database. -- -- -- -- Path of the database. -- -- -- -- Key file of the database. -- -- -- -- path -- -- -- -- Username for the entry. -- Korisničko ime za stavku. -- -- -- username -- korisničko ime -- -- -- URL for the entry. -- -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- -- -- -- Generate a password for the entry. -- Proizvedi lozinku za stavku. -- -- -- length -- duljina -- -- -- Path of the entry to add. -- -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- -- -- -- Timeout in seconds before clearing the clipboard. -- -- -- -- Edit an entry. -- Uredite stavku: -- -- -- Title for the entry. -- Naslov za stavku. -- -- -- title -- naslov -- -- -- Path of the entry to edit. -- -- -- -- Estimate the entropy of a password. -- Procijeni entropiju lozinke. -- -- -- Password for which to estimate the entropy. -- -- -- -- Perform advanced analysis on the password. -- -- -- -- -- --Available commands: -- -- -- --Dostupne naredbe: -- -- -- -- Name of the command to execute. -- Naziv naredbe za izvršenje. -- -- -- List database entries. -- Nabroji stavke iz baze podataka. -- -- -- Path of the group to list. Default is / -- -- -- -- Find entries quickly. -- Brzo pronađi stavke -- -- -- Search term. -- Pojam za pretraživanje. -- -- -- Merge two databases. -- Sjedini dvije baze podataka. -- -- -- Path of the database to merge from. -- Put baze podataka iz koje se treba sjediniti. -- -- -- Use the same credentials for both database files. -- -- -- -- Key file of the database to merge from. -- Datoteka ključ baze podataka za spajanje. -- -- -- Show an entry's information. -- Prikaži informacije o stavci. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nazivi svojstava za prikazati. Ova opcija može određena više puta, sa svakim svojstvom prikazanim jednom po liniji u danom redoslijedu. Ako nijedno svojstvo nije navedeno, sažetak zadanih je dan. -- -- -- attribute -- svojstvo -- -- -- Name of the entry to show. -- Naziv stavke za prikazat. -- -- -- NULL device -- -- -- -- error reading from device -- -- -- -- malformed string -- -- -- -- missing closing quote -- -- -- -- Group -- Grupa -- -- -- Title -- Naslov -- -- -- Username -- Korisničko ime -- -- -- Password -- Lozinka -- -- -- Notes -- Bilješke -- -- -- Last Modified -- Posljednja izmjena -- -- -- Created -- Stvorio -- -- -- Browser Integration -- Integracija preglednika -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- Proizvedi novu nasumičnu zaporku bacanjem kocke. -- -- -- Word count for the diceware passphrase. -- Broj riječi za zaporke bačene kockom. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Popis riječi za proizvođača bacanja kocki. --[Zadano: EFF Engleski] -- -- -- Generate a new random password. -- Proizvedi novu nasumičnu lozinku. -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- Unesite lozinku za novu stavku: -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- Uspješno dodana stavka %1. -- -- -- Invalid timeout value %1. -- Nevažeća vrijednost isteka vremena %1. -- -- -- Entry %1 not found. -- Stavka %1 nije pronađen. -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- Čišćenje međuspremnik u %1 sekundi(s)...Čišćenje međuspremnik u %1 sekundi(s)...Brisanje međuspremnik u %1 sekunde(i)... -- -- -- Clipboard cleared! -- Međuspremnik obrisan! -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- Duljina %1 -- -- -- Entropy %1 -- Entropija %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- Vrsta: Redoslijed -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- Vrsta: Redoslijed (Ponavljajući) -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- Entropija %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- Duljina porizvedene lozinke -- -- -- Use lowercase characters -- Koristi mala slova -- -- -- Use uppercase characters -- Koristi velika slova -- -- -- Use special characters -- Koristi posebne znakove -- -- -- Use extended ASCII -- Koristi prošireni ASCII -- -- -- Exclude character set -- Izostavi skup znakova -- -- -- chars -- znak -- -- -- Exclude similar looking characters -- Izostavi slične znakove -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- -- -- -- Show the entry's current TOTP. -- Prikaži trenutni TOTP stavke. -- -- -- ERROR: unknown attribute %1. -- POGREŠKA: nepoznato svojstvo %1. -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- datoteka prazna -- -- -- %1: (row, col) %2,%3 -- %1: (redak, stupac) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Nevažeće postavke -- -- -- Invalid Key -- TOTP -- Nevažeći ključ -- -- -- Message encryption failed. -- -- -- -- No groups found -- Nijedna grupa nije pronađene -- -- -- Create a new database. -- Stvori novu bazu podataka. -- -- -- File %1 already exists. -- Datoteka %1 već postoji. -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- Uspješno stvorena nova baza podataka. -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- -- The lock file could not be created. Single-instance mode disabled. -- -- -- -- KeePassXC - cross-platform password manager -- -- -- -- filenames of the password databases to open (*.kdbx) -- -- -- -- path to a custom config file -- -- -- -- key file of the database -- -- -- -- read password of the database from stdin -- -- -- -- Another instance of KeePassXC is already running. -- -- -- -- Fatal error while testing the cryptographic functions. -- -- -- -- KeePassXC - Error -- KeePassXC - Pogreška -- -- -- Database password: -- Lozinka baze podataka: -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Verzija %1 -- -- -- Build Type: %1 -- Vrsta gradnje: %1 -- -- -- Revision: %1 -- Revizija: %1 -- -- -- Distribution: %1 -- Distribucija: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- Način za otklanjanje pogrešaka je omogućen. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- -- -- -- Auto-Type -- Auto-tipkanje -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nijedan -- -- -- Enabled extensions: -- Omogućena proširenja: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- Nemoguće je proizvesti i zatražiti lozinku istovremeno! -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- Grupa %1 već postoji! -- -- -- Group %1 not found. -- Grupa %1 nije pronađena. -- -- -- Successfully added group %1. -- Uspješno dodana grupa %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- Otvaranja HIBP datoteke nije uspjelo %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- utor -- -- -- Invalid word count %1 -- Nevažeći broj riječi %1 -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- Nepodržan format %1 -- -- -- Use numbers -- Koristi brojeva -- -- -- Invalid password length %1 -- Nevažeća duljina lozinke %1 -- -- -- Display command help. -- Pogledaj pomoć za naredbe. -- -- -- Available commands: -- Dostupne naredbe: -- -- -- Import the contents of an XML database. -- Uvezite sadržaj XML baze podataka. -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- Uspješno uvezena baza podataka. -- -- -- Unknown command %1 -- Nepoznata naredba %1 -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- Uspješno sjedinio %1 u %2. -- -- -- Database was not modified by merge operation. -- Baza podataka nije izmijenjena operacijom spajanja. -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- Otvori bazu podataka. -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- Korisničko ime -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- Prikaži zaštićena svojstva u čitljivom tekstu. -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- Kopirajte svojstvo stavke u međuspremnik. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- POGREŠKA: Navedite jedan od --svojstvo ili --totp, a ne oboje. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- POGREŠKA: svojstvo %1 je dvosmisleno, odgovara %2. -- -- -- Attribute "%1" not found. -- Svojstvo "%1" nije pronađeno. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Svojstvo "%1" stavke kopirano u međuspremnik! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- vrijeme -- -- -- Set the key file for the database. -- Postavite datoteku ključa za bazu podataka. -- -- -- Set a password for the database. -- Postavite lozinku za bazu podataka. -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- Prikaži informacije o bazi podataka. -- -- -- UUID: -- UUID: -- -- -- Name: -- Naziv: -- -- -- Description: -- Opis: -- -- -- Cipher: -- -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Koš za smeće je omogućen. -- -- -- Recycle bin is not enabled. -- Koš za smeće nije omogućen. -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- Ponovite lozinku: -- -- -- Error: Passwords do not match. -- Pogreška: Lozinke se ne podudaraju. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- -- -- -- Error writing to underlying device: -- -- -- -- Error opening underlying device: -- -- -- -- Error reading data from underlying device: -- -- -- -- Internal zlib error when decompressing: -- -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- -- -- -- Internal zlib error: -- -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Prikaži stavke koje su zostavljene iz izvješća -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Zadržite pokazivač iznad razloga da biste prikazali dodatne pojedinosti. Dvaput kliknite stavke za uređivanje. -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- bijedna -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Slaba -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- (Izuzeto) -- -- -- This entry is being excluded from reports -- Ova stavka će biti izuzeta iz izvješća -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Naslov -- -- -- Path -- Put -- -- -- Score -- -- -- -- Reason -- Razlog -- -- -- Edit Entry... -- Uredi Stavku... -- -- -- Exclude from reports -- Izuzmi iz izvješća -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- Prikaži stavke koje su zostavljene iz izvješća -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Naslov -- -- -- Path -- Put -- -- -- Password exposed… -- Lozinka izložena... -- -- -- (Excluded) -- (Izuzeto) -- -- -- This entry is being excluded from reports -- Ova stavka će biti izuzeta iz izvješća -- -- -- once -- jednom -- -- -- up to 10 times -- do 10 puta -- -- -- up to 100 times -- do 100 puta -- -- -- up to 1000 times -- do 1000 puta -- -- -- up to 10,000 times -- do 10,000 puta -- -- -- up to 100,000 times -- do 100,000 puta -- -- -- up to a million times -- do milijun puta -- -- -- millions of times -- milijune puta -- -- -- Edit Entry... -- Uredi Stavku... -- -- -- Exclude from reports -- Izuzmi iz izvješća -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Naziv -- -- -- Value -- Vrijednost -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- Naziv baze podataka -- -- -- Description -- Opis -- -- -- Location -- Lokacija -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- da -- -- -- no -- ne -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Baza podataka je izmijenjena, ali promjene još nisu spremljene na disk. -- -- -- Number of groups -- Broj grupa -- -- -- Number of entries -- Broj stavki -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- Unikatne Lozinke -- -- -- Non-unique passwords -- Neunikatne lozinke -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Više of 10% lozinki je više puta upotrebljeno. Koistite unikatne lozinke ako je to moguće. -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- Minimalna preporučena duljina lozinke je barem 8 znakova. -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- Stavke izuzete iz izvješća -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- Prosječna duljina lozinke -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- Parametri -- -- -- exclude term from results -- izostavi pojam iz rezultata -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- Primjeri -- -- -- -- SearchWidget -- -- Search -- Traži -- -- -- Limit search to selected group -- -- -- -- Search Help -- -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- -- -- -- Case sensitive -- -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opcije -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- Generalno -- -- -- Show notification when credentials are requested -- Prikaži obavijest kada se zatraže podaci za prijavu -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- <b>Upozorenje:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktivni -- -- -- Allow export -- Dopusti izvoz -- -- -- Allow import -- Dopusti uvoz -- -- -- Own certificate -- -- -- -- Fingerprint: -- -- -- -- Certificate: -- -- -- -- Signer -- -- -- -- Key: -- Ključ: -- -- -- Generate -- Proizvedi -- -- -- Import -- Uvezi -- -- -- Export -- Izvezi -- -- -- Imported certificates -- Uvezeni certifikat -- -- -- Trust -- -- -- -- Ask -- Pitaj -- -- -- Untrust -- -- -- -- Remove -- Ukloni -- -- -- Path -- Put -- -- -- Status -- Status -- -- -- Fingerprint -- Otisak -- -- -- Certificate -- -- -- -- Trusted -- -- -- -- Untrusted -- -- -- -- Unknown -- Nepoznat -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- KeeShare datoteka ključa -- -- -- All files -- Sve datoteke -- -- -- Select path -- -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- Dopusti uvoz KeeShare-a -- -- -- Allow KeeShare exports -- Dopusti izvoz KeeShare-a -- -- -- Only show warnings and errors -- Prikaži samo upozorenja i pogreške -- -- -- Key -- Ključ -- -- -- Signer name field -- -- -- -- Generate new certificate -- Proizvedi novi cerrtifikat -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- Ovaj put ne -- -- -- Never -- Nikad -- -- -- Always -- Uvijek -- -- -- Just this time -- Samo ovaj put -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- Datoteka nije čitljiva -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- Datoteka ne postoji -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Uvoz iz %1 nije uspio (%2) -- -- -- Import from %1 successful (%2) -- Uvoz iz %1 uspješan (%2) -- -- -- Imported from %1 -- Uvezeno iz %1 -- -- -- Export to %1 failed (%2) -- Izvoz u %1 nije uspio (%2) -- -- -- Export to %1 successful (%2) -- Izvoz u %1 uspješan (%2) -- -- -- Export to %1 -- Izvezi u %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopiraj -- -- -- Expires in <b>%n</b> second(s) -- Istječe za <b>%n</b> sekunduIstječe za <b>%n</b> sekundeIstječe za <b>%n</b> sekundi -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopiraj -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- -- -- -- There was an error creating the QR code. -- -- -- -- Closing in %1 seconds. -- -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- -- -- -- Default RFC 6238 token settings -- -- -- -- Steam token settings -- -- -- -- Use custom settings -- -- -- -- Custom Settings -- -- -- -- Time step: -- -- -- -- sec -- Seconds -- sek -- -- -- Code size: -- -- -- -- Secret Key: -- Tajni ključ: -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritam: -- -- -- Time step field -- -- -- -- digits -- znamenke -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- Nevaljan URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Provjera dopuna -- -- -- Checking for updates... -- Provjera dopuna... -- -- -- Close -- Zatvori -- -- -- Update Error! -- -- -- -- An error occurred in retrieving update information. -- -- -- -- Please try again later. -- -- -- -- Software Update -- -- -- -- A new version of KeePassXC is available! -- Nova vezija KeePassXC-a je dostupna! -- -- -- KeePassXC %1 is now available — you have %2. -- -- -- -- Download it at keepassxc.org -- -- -- -- You're up-to-date! -- -- -- -- KeePassXC %1 is currently the newest version available -- -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- -- -- -- Create new database -- Stvori novu bazu podataka -- -- -- Open existing database -- Otvori postojeću bazu podataka -- -- -- Import from KeePass 1 -- Uvezi iz KeePass 1 -- -- -- Import from CSV -- -- -- -- Recent databases -- Nedavne baze podataka -- -- -- Welcome to KeePassXC %1 -- Dobrodošli u KeePassXC-e %1 -- -- -- Import from 1Password -- Uvezi iz 1Password -- -- -- Open a recent database -- Otvori nedavnu bazu podataka -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- -- -- -- Passive -- -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- YubiKey sučelje nije pokrenuto. -- -- -- Hardware key is currently in use. -- Hardverski ključ je trenutno u uporabi. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Došlo je do USB greške prilikom pristupa hardverskom ključu: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Osvježi -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- -- Refresh hardware tokens -- Osvježi hardverske tokene -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- Nijedan hardverski ključ nije pronađen! -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- Otkrivanje hardverskih ključeva... -- -- -- No hardware keys detected -- Nijedan hardverski ključ otkrivene -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_hu.ts keepassxc-2.6.4-patched/share/translations/keepassx_hu.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_hu.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_hu.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7894 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- A KeePassXC névjegye -- -- -- About -- Névjegy -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Hibajelentés: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- A KeePassXC a GNU General Public License (GPL) 2-es vagy (válaszhatóan) 3-as verziója szerint kerül terjesztésre. -- -- -- Contributors -- Közreműködők -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Közreműködők megtekintése a GitHubon</a> -- -- -- Debug Info -- Hibakeresési információk -- -- -- Include the following information whenever you report a bug: -- Minden hibajelentésnél legyenek mellékelve ezek az információk: -- -- -- Copy to clipboard -- Vágólapra másolás -- -- -- Project Maintainers: -- Projektkarbantartók: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- A KeePassXC fejlesztőcsapata ezúton külön köszönetet mond debfx-nek az eredetei KeePassX létrehozásáért. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- OpenSSH alkalmazása Windowson a Pageant helyett -- -- -- Enable SSH Agent integration -- SSH-ügynök engedélyezése -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK értéke -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK felülírása -- -- -- (empty) -- (üres) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Nincs elérhető foglalat az SSH-ügynök számára. Vagy győződjön meg arról, hogy létezik SSH_AUTH_SOCK környezeti változó, vagy állítson be egy felülírást. -- -- -- SSH Agent connection is working! -- Az SSH-ügynök kapcsolat működik! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Alkalmazásbeállítások -- -- -- General -- Általános -- -- -- Security -- Biztonság -- -- -- Access error for config file %1 -- Hozzáférési hiba a beállítási fájlhoz: %1 -- -- -- Icon only -- Csak ikonok -- -- -- Text only -- Csak szöveg -- -- -- Text beside icon -- Szöveg az ikonok mellett -- -- -- Text under icon -- Szöveg az ikonok alatt -- -- -- Follow style -- Stílus követése -- -- -- Reset Settings? -- Beállítások visszaállítása? -- -- -- Are you sure you want to reset all general and security settings to default? -- Biztos, hogy vissza akarja állítani az összes általános és biztonsági beállítást az alapértelmezésre? -- -- -- Monochrome (light) -- Monokróm (világos) -- -- -- Monochrome (dark) -- Monokróm (sötét) -- -- -- Colorful -- Színes -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Az új nyelv beállításának az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Alapvető beállítások -- -- -- Startup -- Indítás -- -- -- Start only a single instance of KeePassXC -- A KeePassXC többszörös indításának tiltása -- -- -- Minimize window at application startup -- Az ablak kicsinyítése indításkor -- -- -- File Management -- Fájlkezelés -- -- -- Backup database file before saving -- Készüljön biztonsági mentés az adatbázisról mentés előtt -- -- -- Automatically save after every change -- Automatikus mentés minden módosítás után -- -- -- Automatically reload the database when modified externally -- Külső módosításkor az adatbázis automatikus újratöltése -- -- -- Entry Management -- Bejegyzéskezelés -- -- -- Use group icon on entry creation -- A csoport ikonjának használata a bejegyzés létrehozásakor -- -- -- Minimize instead of app exit -- Kilépés helyett minimalizálás -- -- -- Show a system tray icon -- Rendszertálca-ikon megjelenítése -- -- -- Hide window to system tray when minimized -- Az ablak rendszertálcára rejtése kicsinyítéskor -- -- -- Auto-Type -- Automatikus beírás -- -- -- Use entry title to match windows for global Auto-Type -- Bejegyzések címének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. -- -- -- Use entry URL to match windows for global Auto-Type -- Bejegyzések URL-jének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. -- -- -- Always ask before performing Auto-Type -- Mindig kérdezzen az automatikus beírás megkezdése előtt -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Mozgatható eszköztár -- -- -- Remember previously used databases -- Az előzőleg használt adatbázisok megjegyzése -- -- -- Load previously open databases on startup -- Az előzőleg feloldott adatbázisok betöltése indításkor -- -- -- Remember database key files and security dongles -- Adatbázis-kulcsfájlok és biztonsági hardverkulcsok megjegyzése -- -- -- Check for updates at application startup once per week -- Frissítések keresése hetente egyszer az alkalmazás indulásakor -- -- -- Include beta releases when checking for updates -- A frissítések keresése a béta kiadásokra is terjedjen ki -- -- -- Language: -- Nyelv: -- -- -- (restart program to activate) -- (újraindítás után akitválódik) -- -- -- Minimize window after unlocking database -- Ablak kicsinyítése az adatbázis feloldása után -- -- -- Minimize when opening a URL -- Kicsinyítés URL megnyitásakor -- -- -- Hide window when copying to clipboard -- Ablak elrejtése a vágólapra történő másoláskor -- -- -- Minimize -- Kicsinyítés -- -- -- Drop to background -- Háttérbe dobás -- -- -- Favicon download timeout: -- Favicon letöltési időtúllépés: -- -- -- Website icon download timeout in seconds -- Weboldalikon letöltésének időtúllépése másodpercben -- -- -- sec -- Seconds -- mp -- -- -- Toolbar button style -- Eszköztár gombstílusa -- -- -- Language selection -- Nyelvválasztás -- -- -- Global auto-type shortcut -- Globális automatikus beírás gyorsbillentyűje -- -- -- Auto-type character typing delay milliseconds -- Automatikus karakterbeírás késleltetése milliszekundumban -- -- -- Auto-type start delay milliseconds -- Automatikus beírás indításának késleltetése milliszekundumban -- -- -- Automatically launch KeePassXC at system startup -- KeePassXC automatikus indítása a rendszer indulásakor -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Adatbázisok biztonságos mentése (Dropbox-szal és hasonlókkal való probléma esetén letiltandó) -- -- -- User Interface -- Felhasználói felület -- -- -- Toolbar button style: -- Eszköztár gombstílusa: -- -- -- Use monospaced font for notes -- Jegyzetek rögzített szélességű betűkészlettel -- -- -- Tray icon type: -- Tálcaikon stílusa: -- -- -- Reset settings to default… -- Beállítások visszaállítása az alapértelmezettre… -- -- -- Auto-Type typing delay: -- Automatikus beírás késleltetése: -- -- -- Global Auto-Type shortcut: -- Globális automatikus beírás gyorsbillentyűje: -- -- -- Auto-Type start delay: -- Automatikus beírás kezdésének késleltetése: -- -- -- Automatically save when locking database -- Automatikus mentés adatbázis zárolásakor -- -- -- Automatically save non-data changes when locking database -- Nem adatváltozások automatikus mentése adatbázis zárolásakor -- -- -- Tray icon type -- Tálcaikon stílusa -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Időtúllépések -- -- -- Clear clipboard after -- Vágólap törlése ennyi idő után -- -- -- sec -- Seconds -- mp -- -- -- Lock databases after inactivity of -- Adatbázis zárolása ennyi inaktivitás után -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- A TouchID elfelejtése ennyi tétlenség után: -- -- -- Convenience -- Kényelem -- -- -- Lock databases when session is locked or lid is closed -- Adatbázis zárolása munkamenet zárolásakor vagy a fedél lecsukásakor -- -- -- Forget TouchID when session is locked or lid is closed -- A TouchID elfelejtése a munkamenet zárolásakor vagy a fedél lehajtásakor -- -- -- Lock databases after minimizing the window -- Adatbázis zárolása az ablak lekicsinyítésekor -- -- -- Re-lock previously locked database after performing Auto-Type -- Az előzőleg zárolt adatbázis újbóli zárolása automatikus beírást követően -- -- -- Hide passwords in the entry preview panel -- Jelszavak elrejtése a bejegyzés előnézeti panelen -- -- -- Hide entry notes by default -- Bejegyzések jegyzeteinek elrejtése alapértelmezetten -- -- -- Privacy -- Adatvédelem -- -- -- Use DuckDuckGo service to download website icons -- A DuckDuckGo alkalmazása a webhelyikonok letöltésére -- -- -- Clipboard clear seconds -- Vágólap törlése másodpercben -- -- -- Touch ID inactivity reset -- A TouchID tétlenségi visszaállítás -- -- -- Database lock timeout seconds -- Adatbázis zárolási időtúllépése másodpercben -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Keresési kifejezés törlése ennyi idő után -- -- -- Require password repeat when it is visible -- Jelszóismétlés szükséges látható jelszó esetén -- -- -- Hide passwords when editing them -- Jelszavak elrejtése szerkesztés alatt -- -- -- Use placeholder for empty password fields -- Üres jelszómezőknél helykitöltő alkalmazása -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nem található olyan bejegyzés, amely illeszkedik az ablak címsorára: -- -- -- Auto-Type - KeePassXC -- Automatikus beírás – KeePassXC -- -- -- Auto-Type -- Automatikus beírás -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Az automatikus beírás utasításszintaxisa helytelen! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Ez az automatikus beírás parancs nagyon hosszú késleltetést tartalmaz. Valóban folytatható? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Ez az automatikus beírás parancs nagyon lassú billentyűlenyomásokat tartalmaz. Valóban folytatható? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Ez az automatikus beírás parancs nagyon gyakran ismétlődő paramétert tartalmaz. Valóban folytatható? -- -- -- Permission Required -- Engedély szükséges -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- A KeePassXC számára szükséges az elérhetőségi jogosultság biztosítása a bejegyzésszintű automatikus beírás végrehajtásához. Ha ez a jogosultság már meg van adva, újra kell indtani a KeePassXC-t. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Ablak -- -- -- Sequence -- Sorrend -- -- -- Default sequence -- Alapértelmezett sorrend -- -- -- -- AutoTypeMatchModel -- -- Group -- Csoport -- -- -- Title -- Cím -- -- -- Username -- Felhasználónév -- -- -- Sequence -- Sorrend -- -- -- -- AutoTypeMatchView -- -- Copy &username -- &Felhasználónév másolása -- -- -- Copy &password -- &Jelszó másolása -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Engedély szükséges -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- A KeePassXC számára szükséges az elérhetőségi és a képernyőolvasási jogosultság biztosítása a globális szintű automatikus beírás végrehajtásához. A képernyőolvasás az ablakok címének megtalálásához szükséges a bejegyzések között. Ha ezek a jogosultságok már meg van adva, újra kell indtani a KeePassXC-t. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automatikus beírás – KeePassXC -- -- -- Select entry to Auto-Type: -- Bejegyzés kijelölése automatikus beírásra: -- -- -- Search... -- Keresés… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC-böngésző hozzáférési kérés -- -- -- %1 is requesting access to the following entries: -- %1 hozzáférést kér az alábbi bejegyzésekhez: -- -- -- Remember access to checked entries -- Kijelölt bejegyzések hozzáférési engedélyezésének megjegyzése -- -- -- Remember -- Megjegyzés -- -- -- Allow access to entries -- Engedély megadása a bejegyzésekhez -- -- -- Allow Selected -- Kijelöltek engedélyezése -- -- -- Deny All -- Összes megtagadása -- -- -- Disable for this site -- Letiltás ezen az oldalon -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-böngésző bejegyzés mentése -- -- -- Ok -- Ok -- -- -- Cancel -- Mégse -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Több adatbázis van nyitva. --Válassza ki a helyes adatbázist a hitelesítő adatok mentéséhez. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Új kulcstársítási kérés -- -- -- Save and allow access -- Engedélyezési hozzáférés mentése -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Felülírja a létező kulcsot? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Létezik már egy megosztott titkosítási kulcs ezzel a névvel: „%1”. --Valóban felülírható? -- -- -- KeePassXC: Update Entry -- KeePassXC: Bejegyzés frissítése -- -- -- Do you want to update the information in %1 - %2? -- Frissíti az információt ebben: %1 – %2? -- -- -- Abort -- Megszakítás -- -- -- Converting attributes to custom data… -- Attribútumok átalakítása egyéni adatokká… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Átalakított KeePassHTTP attribútumok -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Attribútumok sikeresen átalakítva %1 bejegyzésből. --%2 kulcs áthelyezve az egyéni adatokhoz. -- -- -- Successfully moved %n keys to custom data. -- %n kulcs sikeresen áthelyezve az egyéni adatokhoz.%n kulcs sikeresen áthelyezve az egyéni adatokhoz. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Az aktív adatbázisban nincs egyetlen KeePassHTTP attribútumokat tartalmazó bejegyzés sem. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Örökölt böngészőintegrációs beállítások észlelve -- -- -- KeePassXC: Create a new group -- KeePassXC: Új csoport létrehozása -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Az új „%1” csoport létrehozási kérése fogadva. --Biztos, hogy létrehozza ezt a csoportot? -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba. --Ez szükséges a jelenlegi böngészőkapcsolatok fenntartásához. --Biztos, hogy migrálja most a meglévő beállításokat? -- -- -- Don't show this warning again -- Ne jelenjen meg többé a figyelmeztetés -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- A következő adatbázishoz társítási kérelem érkezett: --%1 -- --A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint amilyen pl. a „chrome-laptop”. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Párbeszédablak -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Ez szükséges az adatbázis KeePassXC-böngészőből történő eléréséhez -- -- -- Enable browser integration -- Böngészőintegráció engedélyezése -- -- -- General -- Általános -- -- -- Browsers installed as snaps are currently not supported. -- A snappal telepített böngészők jelenleg nem támogatottak. -- -- -- Enable integration for these browsers: -- Böngészőintegráció engedélyezése a következőkhöz: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor böngésző -- -- -- Brave -- Brave -- -- -- Google Chrome -- &Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Értesítés megjelenítése hitelesítési adatok kérésekor -- -- -- Request to unlock the database if it is locked -- Adatbázis feloldási kérelem, ha zárolva van -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Csak az azonos sémájú (http://, https://, …) bejegyzések visszaadása. -- -- -- Match URL scheme (e.g., https://...) -- URL sémákra illeszkedés (pl. https://…) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett. -- -- -- Return only best-matching credentials -- Csak a legjobb hitelesítési adatok visszaadása -- -- -- Returns expired credentials. String [expired] is added to the title. -- A lejárt hitelesítési adatok visszaadása. A [lejárt] szöveg hozzá lesz adva a címhez. -- -- -- Allow returning expired credentials -- Lejárt hitelesítési adatok visszaadásának engedélyezése -- -- -- All databases connected to the extension will return matching credentials. -- Minden a kiterjesztéshez csatlakoztatott böngésző visszaadja az illeszkedő hitelesítési adatokat. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Keresés minden megnyitott adatbázis hitelesítési adataiban -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Illeszkedő hitelesítési adatok rendezése cím szerint -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Illeszkedő hitelesítési adatok rendezése felhasználónév szerint -- -- -- Advanced -- Speciális -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Hozzáférési adatok elérése előtt soha ne kérdezzen -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Hozzáférési adatok frissítése előtt soha ne kérdezzen -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Ne kérjen engedélyt a HTTP Basic Auth számára -- -- -- Automatically creating or updating string fields is not supported. -- A karakterlánc mezők automatikus létrehozása vagy frissítése nem támogatott. -- -- -- Return advanced string fields which start with "KPH: " -- A „KPH:”-val kezdődő fejlett karakterlánc mezők visszaadása -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Ne jelenjen meg a felugró ablak a örökölt KeePassHTTP beállításokból való költözésről. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Ne kérdezzen a KeePassHTTP beállításokból való költözésről -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Indításkor automatikusan frissíti a KeePassXC vagy a keepassxc-proxy bináris útvonalát a natív üzenetküldő parancsfájlok felé. -- -- -- Update native messaging manifest files at startup -- Natív üzenetküldő manifest-fájlok frissítése indításkor -- -- -- Use a custom proxy location if you installed a proxy manually. -- Egyéni proxyhelyet kell beállítani manuálisan telepített proxy esetén. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Egyéni proxyhely alkalmazása: -- -- -- Custom proxy location field -- Egyéni proxyhely mező -- -- -- Browser for custom proxy file -- Egyéni proxyfájl böngészője -- -- -- Browse... -- Button for opening file dialog -- Tallózás… -- -- -- Use a custom browser configuration location: -- Egyéni böngészőbeállítási hely alkalmazása: -- -- -- Browser type: -- Böngészőtípus: -- -- -- Toolbar button style -- Eszköztár gombstílusa -- -- -- Config Location: -- Beállítási hely: -- -- -- Custom browser location field -- Egyéni böngésző helymező -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Böngésző egyéni eléri útvonalának tallózása -- -- -- Custom extension ID: -- Egyéni kiterjesztésazonosító: -- -- -- Custom extension ID -- Egyéni kiterjesztésazonosító -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészőintegráció engedélyezéséhez.<br />Ezt innen szerezheti be: %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. <br />Letölthető ezen böngészőkre: %1, %2, %3, 4% -- -- -- Please see special instructions for browser extension use below -- Olvassa el a böngészőkiegészítő használatáról szóló különleges utasításokat alább -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Hiba:</b> Az egyéni proxyhely nem található! --<br/>A böngészőintegráció NEM FOG MŰKÖDNI a proxy-alkalmazás nélkül. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Figyelmeztetés:</b> A következő beállítások veszélyesek lehetnek! -- -- -- Executable Files -- Végrehajtható fájlok -- -- -- All Files -- Minden fájl -- -- -- Select custom proxy location -- Egyéni proxyhely kijelölése -- -- -- Select native messaging host folder location -- Jelölje ki a natív üzenetküldési kiszolgálót tartalmazó mappát -- -- -- -- CloneDialog -- -- Clone Options -- Beállítások klónozása -- -- -- Append ' - Clone' to title -- „- klón” hozzáfűzése a címhez -- -- -- Replace username and password with references -- A felhasználónév és a jelszó cseréje hivatkozásokra -- -- -- Copy history -- Előzmények másolása -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV-mezők importálása -- -- -- filename -- fájlnév -- -- -- size, rows, columns -- méret, sorok, oszlopok -- -- -- Encoding -- Kódolás -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Szöveghatároló -- -- -- Fields are separated by -- Mezőhatároló -- -- -- Comments start with -- Megjegyzések kezdete -- -- -- Consider '\' an escape character -- „\” feloldójelnek értelmezve -- -- -- Preview -- Előnézet -- -- -- Imported from CSV file -- CSV-fájlból importálva -- -- -- Original data: -- Eredeti adatok: -- -- -- Error -- Hiba -- -- -- Error(s) detected in CSV file! -- Hibák találhatók a CSV-fájlban! -- -- -- [%n more message(s) skipped] -- [%n további üzenet mellőzve][%n további üzenet mellőzve] -- -- -- CSV import: writer has errors: --%1 -- CSV importálás: a mentés hibába ütközött: --%1 -- -- -- Text qualification -- Szöveghatároló -- -- -- Field separation -- Mezőhatároló -- -- -- Number of header lines to discard -- Kihagyandó fejléc sorok száma -- -- -- CSV import preview -- CSV-import előnézete -- -- -- Column Association -- Oszloptársítások -- -- -- Last Modified -- Legutóbb módosítva -- -- -- Password -- Jelszó -- -- -- Created -- Létrehozva -- -- -- Notes -- Jegyzetek -- -- -- Title -- Cím -- -- -- Group -- Csoport -- -- -- URL -- URL -- -- -- Username -- Felhasználónév -- -- -- Header lines skipped -- Fejlécsor kihagyva -- -- -- First line has field names -- Az első sor mezőnevek -- -- -- Not Present -- Nincs jelen -- -- -- Column %1 -- %1. oszlop -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n oszlop%n oszlop -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bájt%n bájt -- -- -- %n row(s) -- %n sor%n sor -- -- -- -- Database -- -- File %1 does not exist. -- A(z) %1 fájl nem létezik -- -- -- Unable to open file %1. -- A(z) %1 fájl nem nyitható meg. -- -- -- Error while reading the database: %1 -- Hiba az adatbázis megnyitásakor: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- A fájlba nem lehet írni, mert csak olvasható módban van megnyitva. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- A kulcs nincs átalakítva. Ez egy hiba, jelezze a fejlesztőknek! -- -- -- %1 --Backup database located at %2 -- %1 --Az adatbázis biztonsági másolata: %2 -- -- -- Could not save, database does not point to a valid file. -- Nem menthető, az adatbázis nem érvényes fájlra mutat. -- -- -- Could not save, database file is read-only. -- Nem menthető, az adatbázisfájl csak olvasható. -- -- -- Database file has unmerged changes. -- Az adatbázisfájlban nem egyesített változások vannak. -- -- -- Recycle Bin -- Kuka -- -- -- Passwords -- Root group name -- Jelszavak -- -- -- Database save is already in progress. -- Adatbázismentés már folyamatban van. -- -- -- Could not save, database has not been initialized! -- Nem menthető, az adatbázis nincs előkészítve. -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Adatbázis feloldása – KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Kulcsfájl: -- -- -- Refresh -- Frissítés -- -- -- Don't show this warning again -- Ne jelenjen meg többé a figyelmeztetés -- -- -- All files -- Minden fájl -- -- -- Key files -- Kulcsfájlok -- -- -- Select key file -- Kulcsfájl kiválasztása -- -- -- Failed to open key file: %1 -- A kulcsfájl megnyitása sikertelen: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC adatbázis feloldása -- -- -- Enter Password: -- Jelszó megadása: -- -- -- Password field -- Jelszó mező -- -- -- Hardware key slot selection -- Hardverkulcsfoglalat kijelölése -- -- -- Browse for key file -- Kulcsfájl böngészése -- -- -- Browse... -- Tallózás… -- -- -- Refresh hardware tokens -- Hardveres jelsorok frissítése -- -- -- Hardware Key: -- Hardverkulcs: -- -- -- Hardware key help -- Hardverkulcs súgó -- -- -- TouchID for Quick Unlock -- TouchID a Quick Unlockhoz -- -- -- Unlock failed and no password given -- Feloldás sikertelen, jelszót nem adott -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Az adatbázis feloldása sikertelen és jelszót nem lett megadva. --Próbáljuk meg inkább „üres” jelszóval? -- --Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság pontban a jelszó alapállapotba helyezésével. -- -- -- Retry with empty password -- Üres jelszó megpróbálása -- -- -- Enter Additional Credentials (if any): -- További hitelesítési adatok megadása (ha vannak): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>A <strong>YubiKey</strong> vagy az <strong>OnlyKey</strong> biztonsági hardverkulcsok alkalmazhatóak a HMAC-SHA1-re konfigurált foglalattal.</p> --<p>További információk…</p> -- -- -- Key file help -- Kulcsfájlok súgója -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Adatbázisfájl nem használható kulcsfájlként -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Nem használhatja az adatbázisfájlt kulcsfájlként. Ha nincs kulcsfájlja, akkor hagyja üresen a mezőt. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>A mesterkulcs mellett egy titkos fájlt is használhat, hogy javítsa az adatbázisa biztonságát. Ez a fájl az adatbázis biztonsági beállításaiban állítható elő.</p><p>Ez <strong>nem</strong> a *.kdbx adatbázisfájlja!<br>Ha nincs kulcsfájlja, akkor hagyja üresen ezt a mezőt.</p><p>Kattintson a további információkért…</p> -- -- -- Key file to unlock the database -- Adatbázis feloldására való kulcsfájl -- -- -- Please touch the button on your YubiKey! -- Meg kell érinteni a gombot a YubiKeyen! -- -- -- Detecting hardware keys… -- Hardverkulcsok felismerése… -- -- -- No hardware keys detected -- Nincsenek felismert hardverkulcsok. -- -- -- Select hardware key… -- Hardverkulcs kijelölése… -- -- -- Old key file format -- Régi kulcsfájl formátum -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet<br>hogy nem fog támogatni a jövőben.<br><br>Fontolja meg, hogy új kulcsfájl készít a következő menüben:<br><strong>Adatbázis / Adatbázis-biztonság / Kulcsfájl módosítása.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Jelszavak -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Speciális beállítások -- -- -- General -- Általános -- -- -- Security -- Biztonság -- -- -- Encryption Settings -- Titkosítási beállítások -- -- -- Browser Integration -- Böngészőintegráció -- -- -- Database Credentials -- Adatbázis hitelesítési adatai -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-böngésző beállítások -- -- -- Stored keys -- Tárolt kulcsok -- -- -- Remove -- Eltávolítás -- -- -- Delete the selected key? -- Törli a kiválasztott kulcsot? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Valóban törli a kiválasztott kulcsot? --Ez megakadályozhatja a böngésző bővítményhez történő kapcsolódást. -- -- -- Key -- Kulcs -- -- -- Value -- Érték -- -- -- Enable Browser Integration to access these settings. -- Engedélyezze a böngészőintegrációt ezekhez a beállításokhoz. -- -- -- Disconnect all browsers -- Minden böngésző leválasztása -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Valóban leválasztja az összes böngészőt? --Ez megakadályozhatja a böngésző bővítményhez történő kapcsolódást. -- -- -- KeePassXC: No keys found -- KeePassXC: Nincs találat a kulcsok között -- -- -- No shared encryption keys found in KeePassXC settings. -- Nem található megosztott titkosítási kulcs a KeePassXC beállításaiban. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Kulcsok eltávolítva az adatbázisból -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból. -- -- -- Forget all site-specific settings on entries -- A bejegyzések összes oldalfüggő beállításának elfelejtése -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Valóban elfelejti az összes oldalfüggő beállítást az összes bejegyzésnél? --A bejegyzések elérési engedélyei vissza lesznek vonva. -- -- -- Removing stored permissions… -- Tárolt jogosultságok törlése… -- -- -- Abort -- Megszakítás -- -- -- KeePassXC: Removed permissions -- KeePassXC: Jogosultságok eltávolítva -- -- -- Successfully removed permissions from %n entry(s). -- Sikeresen el lett távolítva a jogosultság %n elemről.Sikeresen el lett távolítva a jogosultság %n elemről. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nem található bejegyzés ilyen jogosultsággal! -- -- -- The active database does not contain an entry with permissions. -- Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. -- -- -- Move KeePassHTTP attributes to custom data -- HTTP attribútumok áthelyezése az egyéni adatokhoz -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Valóban átállítja az összes örökölt böngészőintegrációs adatot a legfrissebb szabványra? --Ez szükséges a böngészőbővítmény kompatibilitásának fenntartásához. -- -- -- Stored browser keys -- Tárolt böngészőkulcs -- -- -- Remove selected key -- Kijelölt kulcs eltávolítása -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- HTTP attribútumok áthelyezése a KeePassXC-böngésző egyéni adatokhoz -- -- -- Refresh database root group ID -- Adatbázis gyökércsoport-azonosítójának frissítése -- -- -- Created -- Létrehozva -- -- -- Refresh database ID -- Adatbázis-azonosító frissítése -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Valóban frissíthető az adatbázis-azonosító? --Erre csak akkor lehet szükség, ha az adatbázis egy másik másolata és a böngésző kiterjesztés nem tud kapcsolódni. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- További védelem hozzáadása… -- -- -- No password set -- Nincs jelszó megadva -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- FIGYELEM! Nem állított be jelszót! Az adatbázis jelszó nélküli használata erősen ellenjavallt! -- --Valóban jelszó nélkül folytatja? -- -- -- Continue without password -- Folytatás jelszó nélkül -- -- -- No encryption key added -- Nincs titkosítási kulcs hozzáadva -- -- -- You must add at least one encryption key to secure your database! -- Legalább egy titkosítási kulcsot hozzá kell adni, hogy megvédje az adatbázisát! -- -- -- Unknown error -- Ismeretlen hiba -- -- -- Failed to change database credentials -- Az adatbázis hitelesítési adatainak módosítása sikertelen -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Titkosítási algoritmus: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (alapértelmezett) -- -- -- Twofish: 256 Bit -- Twofish: 256 bit -- -- -- Key Derivation Function: -- Kulcsszármaztató függvény: -- -- -- Transform rounds: -- Átalakítási fordulók száma: -- -- -- Memory Usage: -- Memóriahasználat: -- -- -- Parallelism: -- Párhozamosság: -- -- -- Decryption Time: -- Visszafejtés ideje: -- -- -- ?? s -- ?? s -- -- -- Change -- Módosítása -- -- -- Higher values offer more protection, but opening the database will take longer. -- A magasabb értékek nagyobb védelmet adnak, de az adatbázis megnyitása tovább fog tartani. -- -- -- Database format: -- Adatbázis-formátum: -- -- -- This is only important if you need to use your database with other programs. -- Ez csak akkor fontos, ha más programokkal is kell használnia az adatbázisát. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (ajánlott) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- változatlan -- -- -- Number of rounds too high -- Key transformation rounds -- Fordulók száma túl magas -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Nagyon sok kulcsátalakítási forduló lett megadva az Argon2 számára. -- --Ezt a számot megtartva az adatbázis megnyitása órákba vagy napokba (vagy még több időbe) telhet! -- -- -- Understood, keep number -- Megértettem, maradjon a szám -- -- -- Cancel -- Mégse -- -- -- Number of rounds too low -- Key transformation rounds -- Fordulók száma túl alacsony -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Nagyon kevés kulcsátalakítási forduló lett megadva az AES-KDF számára. -- --Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz. -- -- -- KDF unchanged -- KDF változatlan -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- A kulcsátalakítás sikertelen az új KDF paraméterrel; KDF változatlan. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- szálszál -- -- -- Change existing decryption time -- Meglévő visszafejtése idő módosítása -- -- -- Decryption time in seconds -- Visszafejtési idő másodpercben -- -- -- Database format -- Adatbázis-formátum -- -- -- Encryption algorithm -- Titkosítási algoritmus -- -- -- Key derivation function -- Kulcsszármaztató függvény -- -- -- Transform rounds -- Átalakítási fordulók száma -- -- -- Memory usage -- Memóriahasználat -- -- -- Parallelism -- Párhuzamosság -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Nyitott bejegyzések -- -- -- Don't expose this database -- Ne legyen lenyitva ez az adatbázis -- -- -- Expose entries under this group: -- A csoport alatti bejegyzések legyenek lenyitva: -- -- -- Enable Secret Service to access these settings. -- A titkosító szolgáltatás engedélyezésével aktiválhatók ezek a beállítások. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Adatbázis metaadat -- -- -- Database name: -- Adatbázisnév: -- -- -- Database description: -- Adatbázis leírása: -- -- -- Default username: -- Alapértelmezett felhasználónév: -- -- -- History Settings -- Előzménybeállítások -- -- -- Max. history items: -- Előzmények legnagyobb száma: -- -- -- Max. history size: -- Előzmények legnagyobb mérete: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Kuka alkalmazása -- -- -- Additional Database Settings -- További adatbázis-beállítások -- -- -- Database name field -- Adatbázisnév mező -- -- -- Database description field -- Adatbázisleírás mező -- -- -- Default username field -- Alapértelmezett felhasználónév mező -- -- -- Maximum number of history items per entry -- Előzményelemek maximális száma bejegyzésenként -- -- -- Maximum size of history per entry -- Előzmények maximális mérete bejegyzésenként -- -- -- Delete Recycle Bin -- Kuka törlése -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Valóban törölhető az aktuális kuka minden elemével együtt? --Ez nem vonható vissza! -- -- -- (old) -- (régi) -- -- -- Enable compression (recommended) -- Tömörítés engedélyezése (ajánlott) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Megosztás -- -- -- Breadcrumb -- Morzsamenü -- -- -- Type -- Típus -- -- -- Path -- Útvonal -- -- -- Last Signer -- Legutóbbi aláíró -- -- -- Certificates -- Tanúsítványok -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Adatbázis neve: -- -- -- Description: -- Leírás: -- -- -- Database name field -- Adatbázisnév mező -- -- -- Database description field -- Adatbázisleírás mező -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 adatbázis -- -- -- All files -- Minden fájl -- -- -- Open database -- Adatbázis megnyitása -- -- -- CSV file -- CSV-fájl -- -- -- Merge database -- Adatbázis egyesítése -- -- -- Open KeePass 1 database -- KeePass 1 adatbázis megnyitása -- -- -- KeePass 1 database -- KeePass 1 adatbázis -- -- -- Export database to CSV file -- Adatbázis exportálása CSV-fájlba -- -- -- Writing the CSV file failed. -- A CSV-fájl mentése sikertelen. -- -- -- Database creation error -- Adatbázis létrehozási hiba -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- A létrehozott adatbázisnak nincs kulcsa vagy KDF-e, a mentés megtagadva. --Ez határozottan hiba, jelentse a fejlesztőknek. -- -- -- Select CSV file -- Válasszon CSV-fájlt -- -- -- New Database -- Új adatbázis -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Új adatbázis] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Zárolva] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Csak olvasható] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Az adatbázisfájl megnyitása sikertelen: %. Vagy nem létezik, vagy nem lehet hozzáférni. -- -- -- Export database to HTML file -- Adatbázis exportálása HTML-fájlba -- -- -- HTML file -- HTML-fájl -- -- -- Writing the HTML file failed. -- A HTML-fájl mentése sikertelen. -- -- -- Export Confirmation -- Exportálás megerősítése -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Az adatbázis nem titkosított fájlba lesz exportálva. Így sebezhetőek lesznek a jelszavak és más érzékeny információk. Valóban folytatható a művelet? -- -- -- Open OPVault -- OPVault megnyitása -- -- -- -- DatabaseWidget -- -- Searching... -- Keresés… -- -- -- Do you really want to delete the entry "%1" for good? -- Valóban végleg szeretné törölni a bejegyzést: „%1”? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Valóban kukába szeretné dobni a bejegyzést: „%1”? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Valóban a kukába szeretne dobni %n elemet?Valóban a kukába szeretne dobni %n elemet? -- -- -- Execute command? -- Végrehajtja a parancsot? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Valóban végrehajtja a következő parancsot? <br><br>%1<br> -- -- -- Remember my choice -- Válasz megjegyzése -- -- -- Do you really want to delete the group "%1" for good? -- Valóban végleg szeretné törölni a csoportot: „%1”? -- -- -- No current database. -- Nincs aktuális adatbázis. -- -- -- No source database, nothing to do. -- Nincs forrásadatbázis. Nincs további teendő. -- -- -- Search Results (%1) -- Találatok (%1) -- -- -- No Results -- Nincs találat -- -- -- File has changed -- A fájl módosult -- -- -- The database file has changed. Do you want to load the changes? -- Az adatbázisfájl módosult. Betölti a módosításokat? -- -- -- Merge Request -- Egyesítési kérelem -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Az adatbázisfájl módosult és vannak nem mentett változások. --Egyesíti a módosításokat? -- -- -- Empty recycle bin? -- Kuka ürítése? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Valóban minden véglegesen törölhető a kukából? -- -- -- Do you really want to delete %n entry(s) for good? -- Valóban végleg szeretné törölni a(z) %n bejegyzést?Valóban végleg szeretné törölni a(z) %n bejegyzést? -- -- -- Delete entry(s)? -- Törli a bejegyzést?Törli a bejegyzéseket? -- -- -- Move entry(s) to recycle bin? -- Kukába dobja a bejegyzést?Kukába dobja a bejegyzéseket? -- -- -- Lock Database? -- Zárolja az adatbázist? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Egy bejegyzést szerkeszt. Elveti a változásokat, és mindenképp zárolja? -- -- -- "%1" was modified. --Save changes? -- A(z) „%1” módosítva lett. --Menti a módosításokat? -- -- -- Database was modified. --Save changes? -- Az adatbázis módosítva lett. --Menti a változásokat? -- -- -- Save changes? -- Menti a módosításokat? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Nem lehet megnyitni az új adatbázisfájlt egy újranyitási kísérlet közben. --Hiba: %1 -- -- -- Disable safe saves? -- Letiltható a biztonságos mentés? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- A KeePassXC többször is hiába próbálta meg elmenteni az adatbázist. Ez jellemzően azért szokott előfordulni, mert egy szinkronizáló szolgáltatás zárolja a mentendő fájl. --Letiltható a biztonságos mentés és úgy megkísérelhető a mentés? -- -- -- Passwords -- Jelszavak -- -- -- Save database as -- Adatbázis mentése más néven -- -- -- KeePass 2 Database -- KeePass 2 adatbázis -- -- -- Replace references to entry? -- Lecseréli a bejegyzésre mutató hivatkozásokat? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- A(z) „%1” bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp?A(z) „%1” bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp? -- -- -- Delete group -- Csoport törlése -- -- -- Move group to recycle bin? -- Áthelyezi a csoportot a kukába? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Valóban áthelyezi a(z) „%1” csoportot a kukába? -- -- -- Successfully merged the database files. -- Az adatbázisfájlok sikeresen egyesítve lettek. -- -- -- Database was not modified by merge operation. -- Az adatbázis nem változott az összeolvasztási művelet során. -- -- -- Shared group... -- Megosztott csoport… -- -- -- Writing the database failed: %1 -- Az adatbázis kiírása sikertelen: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Az adatbázis csak olvasható módban lett megnyitva. Az automatikus mentés le van tiltva. -- -- -- Save database backup -- Biztonsági mentés készítése az adatbázisról -- -- -- Could not find database file: %1 -- Az adatbázis-fájl nem található: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Bejegyzés -- -- -- Advanced -- Speciális -- -- -- Icon -- Ikon -- -- -- Auto-Type -- Automatikus beírás -- -- -- Properties -- Tulajdonságok -- -- -- History -- Előzmények -- -- -- SSH Agent -- SSH-ügynök -- -- -- n/a -- nincs -- -- -- (encrypted) -- (titkosított) -- -- -- Select private key -- Személyes kulcs kijelölése -- -- -- Entry history -- Előzmény-bejegyzés -- -- -- Add entry -- Bejegyzés hozzáadása -- -- -- Edit entry -- Bejegyzés szerkesztése -- -- -- New attribute -- Új attribútum -- -- -- Are you sure you want to remove this attribute? -- Valóban eltávolítja ezt az attribútumot? -- -- -- Tomorrow -- Holnap -- -- -- %n week(s) -- %n hét%n hét -- -- -- %n month(s) -- %n hónap%n hónap -- -- -- Entry updated successfully. -- Bejegyzés sikeresen frissítve. -- -- -- New attribute %1 -- Új %1 attribútum -- -- -- %n year(s) -- %n év%n év -- -- -- Confirm Removal -- Törlés jóváhagyása -- -- -- Browser Integration -- Böngészőintegráció -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Valóban eltávolítja ezt az URL? -- -- -- Reveal -- Felfedés -- -- -- Hide -- Elrejtés -- -- -- Unsaved Changes -- Nem mentett módosítások -- -- -- Would you like to save changes to this entry? -- Valóban menthetőek a bejegyzés módosításai? -- -- -- [PROTECTED] Press Reveal to view or edit -- [VÉDETT] A megjelenítés vagy a szerkesztés a „Felfedés” gombbal érhető el -- -- -- Invalid Entry -- Érvénytelen bejegyzés -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Egy külső egyesítési művelet érvénytelenítette ezt a bejegyzést. --Sajnos az esetleges változások elvesztek. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- További attribútumok -- -- -- Add -- Hozzáadás -- -- -- Remove -- Eltávolítás -- -- -- Edit Name -- Név szerkesztése -- -- -- Protect -- Védelem -- -- -- Reveal -- Felfedés -- -- -- Attachments -- Mellékletek -- -- -- Foreground Color: -- Előtérszín -- -- -- Background Color: -- Háttérszín: -- -- -- Attribute selection -- Attribútumválasztó -- -- -- Attribute value -- Attribútum érték -- -- -- Add a new attribute -- Új attribútum hozzáadása -- -- -- Remove selected attribute -- Kijelölt attribútum törlése -- -- -- Edit attribute name -- Attribútumnév szerkesztése -- -- -- Toggle attribute protection -- Attribútumvédelem átváltása -- -- -- Show a protected attribute -- Védett attribútum megjelenítése -- -- -- Foreground color selection -- Előtérszínválasztás -- -- -- Background color selection -- Háttérszínválasztás -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Bejelölve, ez a bejegyzés nem fog szerepelni az állapotfelmérési jelentésben vagy HIBP ellenőrzésben, akkor sem, ha nem teljesíti a minőségi követelményeket (pl. jelszóentrópia vagy újrafelhasználás). Ez hasznos akkor, ha a jelszó nem áll az ellenőrzése alatt (pl. egy négyjegyű számból álló PIN kódnak kell lennie), hogy ne rontsa a jelentést.</p></body></html> -- -- -- Exclude from database reports -- Kizárás az adatbázis jelentésekből -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Automatikus beírás engedélyezése ennél a bejegyzésnél -- -- -- Window Associations -- Ablaktársítások -- -- -- + -- + -- -- -- - -- -- -- -- Window title: -- Ablakcím: -- -- -- Use a specific sequence for this association: -- Adjon meg egy jellemző sorozatot ehhez a társításhoz: -- -- -- Custom Auto-Type sequence -- Egyéni automatikus beírási sorrend -- -- -- Open Auto-Type help webpage -- Automatikus beírás súgó weboldalának megnyitása -- -- -- Existing window associations -- Létező ablaktársítások -- -- -- Add new window association -- Új ablaktársítás hozzáadása -- -- -- Remove selected window association -- Kijelölt ablaktársítás eltávolítása -- -- -- You can use an asterisk (*) to match everything -- Csillaggal(*) mindent ki lehet jelölni -- -- -- Set the window association title -- Ablaktársítás címének beállítása -- -- -- You can use an asterisk to match everything -- Csillaggal mindent ki lehet jelölni -- -- -- Custom Auto-Type sequence for this window -- Egyéni automatikus beírási sorrend ehhez az ablakhoz -- -- -- Inherit default Auto-Type sequence from the group -- Az alapértelmezett automatikus beírási sorrend öröklése a csoporttól -- -- -- Use custom Auto-Type sequence: -- Egyéni automatikus beírási sorrend használata: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Ezek a beállítások befolyásolják a bejegyzés viselkedését a böngésző kiterjesztésével. -- -- -- General -- Általános -- -- -- Skip Auto-Submit for this entry -- Automatikus küldés kihagyása ennél a bejegyzésnél -- -- -- Hide this entry from the browser extension -- Bejegyzés elrejtése a böngésző kiterjesztés elől -- -- -- Additional URL's -- További URL-ek -- -- -- Add -- Hozzáadás -- -- -- Remove -- Eltávolítás -- -- -- Edit -- Szerkesztés -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Ezt a beállítást csak a böngésző HTTP Auth párbeszédablakának küldje. Bejelölve a normál bejelentkezési űrlapokon ez a bejegyzés nem fog kiválaszthatóként feltűnni. -- -- -- Use this entry only with HTTP Basic Auth -- Bejegyzés alkalmazása csak HTTP Basic Auth-tal -- -- -- -- EditEntryWidgetHistory -- -- Show -- Megjelenítés -- -- -- Restore -- Visszaállítás -- -- -- Delete -- Törlés -- -- -- Delete all -- Összes törlése -- -- -- Entry history selection -- Előzmény-bejegyzés kijelölése -- -- -- Show entry at selected history state -- Bejegyzés és kijelölt előzményállapot megjelenítése -- -- -- Restore entry to selected history state -- Bejegyzés visszaállítása a kijelölt előzményállapotra -- -- -- Delete selected history state -- Kijelölt előzményállapot törlése -- -- -- Delete all history -- Minden előzmény törlése -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Jelszó: -- -- -- Title: -- Cím: -- -- -- Presets -- Előbeállítások -- -- -- Toggle the checkbox to reveal the notes section. -- Jelölőnégyzet átváltásával felfedhető a jegyzetek szalasz. -- -- -- Username: -- Felhasználónév: -- -- -- Url field -- URL mező -- -- -- Download favicon for URL -- URL faviconjának letöltése -- -- -- Password field -- Jelszó mező -- -- -- Toggle notes visible -- Jegyzetek láthatóságának átváltása -- -- -- Expiration field -- Lejárati mező -- -- -- Expiration Presets -- Lejárati előbeállítások -- -- -- Expiration presets -- Lejárati előbeállítások -- -- -- Notes field -- Jegyzetek mező -- -- -- Title field -- Cím mező -- -- -- Username field -- Felhasználónév mező -- -- -- Toggle expiration -- Lejárat átváltása -- -- -- Notes: -- Jegyzetek: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Lejárat: -- -- -- Edit Entry -- Bejegyzés szerkesztése -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Űrlap -- -- -- Remove key from agent after -- Kulcs eltávolítása az ügynöktől utána -- -- -- seconds -- másodperc -- -- -- Fingerprint -- Ujjlenyomat -- -- -- Remove key from agent when database is closed/locked -- Kulcs eltávolítása az ügynöktől, ha az adatbázis be vagy le van zárva -- -- -- Public key -- Nyilvános kulcs -- -- -- Add key to agent when database is opened/unlocked -- Kulcs hozzáadása az ügynökhöz, ha az adatbázis meg van nyitva vagy fel van oldva -- -- -- Comment -- Megjegyzés -- -- -- Decrypt -- Visszafejtés -- -- -- n/a -- nincs -- -- -- Copy to clipboard -- Vágólapra másolás -- -- -- Private key -- Személyes kulcs -- -- -- External file -- Külső fájl -- -- -- Browse... -- Button for opening file dialog -- Tallózás… -- -- -- Attachment -- Melléklet -- -- -- Add to agent -- Hozzáadás az ügynökhöz -- -- -- Remove from agent -- Eltávolítás az ügynöktől -- -- -- Require user confirmation when this key is used -- Felhasználói megerősítés szükséges a kulcs alkalmazásakor -- -- -- Remove key from agent after specified seconds -- Kulcs eltávolítása az ügynöktől a megadott másodperc után -- -- -- Browser for key file -- Kulcsfájl böngészése -- -- -- External key file -- Külső kulcsfájl -- -- -- Select attachment file -- Mellékletfájl kijelölése -- -- -- -- EditGroupWidget -- -- Group -- Csoport -- -- -- Icon -- Ikon -- -- -- Properties -- Tulajdonságok -- -- -- Add group -- Csoport hozzáadása -- -- -- Edit group -- Csoport szerkesztése -- -- -- Enable -- Engedélyezés -- -- -- Disable -- Letiltás -- -- -- Inherit from parent group (%1) -- Öröklés a szülőcsoporttól (%1) -- -- -- Entry has unsaved changes -- A bejegyzésnek mentetlen változásai vannak -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Típus: -- -- -- Path: -- Útvonal: -- -- -- Password: -- Jelszó: -- -- -- Inactive -- Inaktív -- -- -- KeeShare unsigned container -- KeeShare aláíratlan tároló -- -- -- KeeShare signed container -- KeeShare aláírt tároló -- -- -- Select import source -- Importálási forrás kijelölése -- -- -- Select export target -- Exportálási cél kijelölése -- -- -- Select import/export file -- Importálási vagy exportálási fájl kijelölése -- -- -- Clear -- Törlés -- -- -- Import -- Importálás -- -- -- Export -- Exportálás -- -- -- Synchronize -- Szinkronizálás -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- A KeePassXC jelen verziója nem támogatja ennek a tárolótípusnak a megosztását. --Támogatott kiterjesztések: %1. -- -- -- %1 is already being exported by this database. -- Ez az adatbázis már exportálja: %1. -- -- -- %1 is already being imported by this database. -- Ez az adatbázis már importálja: %1. -- -- -- %1 is being imported and exported by different groups in this database. -- Több csoport ebben adatbázisban már importálja és exportálja: %1. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- A KeeShare jelenleg le van tiltva. Az alkalmazás beállításai között az import, export szekcióban lehet engedélyezni. -- -- -- Database export is currently disabled by application settings. -- Az adatbázisok exportálása jelenleg le van tiltva az alkalmazás beállításaiban. -- -- -- Database import is currently disabled by application settings. -- Az adatbázisok importálása jelenleg le van tiltva az alkalmazás beállításaiban. -- -- -- Sharing mode field -- Megosztási mód mező -- -- -- Path to share file field -- Megosztási fájl mező útvonala -- -- -- Password field -- Jelszó mező -- -- -- Clear fields -- Mezők törlése -- -- -- Browse for share file -- Megosztási fájl böngészése -- -- -- Browse... -- Tallózás… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Névmező -- -- -- Notes field -- Jegyzetek mező -- -- -- Toggle expiration -- Lejárat átváltása -- -- -- Auto-Type toggle for this and sub groups -- Automatikus beírás átváltó ehhez a csoporthoz és alcsoportjaihoz -- -- -- Expiration field -- Lejárati mező -- -- -- Search toggle for this and sub groups -- Keresés átváltó ehhez a csoporthoz és alcsoportjaihoz -- -- -- Default auto-type sequence field -- Alapértelmezett automatikus beírási sorrend mező -- -- -- Expires: -- Lejárat: -- -- -- Use default Auto-Type sequence of parent group -- A szülőcsoport automatikus beírási sorrendjének alkalmazása -- -- -- Auto-Type: -- Automatikus beírás: -- -- -- Search: -- Keresés: -- -- -- Notes: -- Jegyzetek: -- -- -- Name: -- Név: -- -- -- Set default Auto-Type sequence -- Egyéni automatikus beírási sorrend beállítása -- -- -- Edit Group -- Csoport szerkesztése -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Egyéni ikon hozzáadása -- -- -- Delete custom icon -- Egyéni ikon törlése -- -- -- Download favicon -- Favicon letöltése -- -- -- Unable to fetch favicon. -- A favicon letöltése sikertelen. -- -- -- Images -- Képek -- -- -- All files -- Minden fájl -- -- -- Confirm Delete -- Törlés megerősítése -- -- -- Select Image(s) -- Kép kiválasztása -- -- -- Successfully loaded %1 of %n icon(s) -- %1 / %n ikon sikeresen betöltve%1 / %n ikon sikeresen betöltve -- -- -- No icons were loaded -- Egy ikon sem lett betöltve -- -- -- %n icon(s) already exist in the database -- %n ikon már létezik az adatbázisban%n ikon már létezik az adatbázisban -- -- -- The following icon(s) failed: -- A következő ikonnál hiba történt:A következő ikonoknál hiba történt: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli?Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- A DuckDuckGo weboldal ikon szolgáltatást az Eszközök → Beállítások → Biztonság pontban lehet engedélyezni -- -- -- Download favicon for URL -- URL faviconjának letöltése -- -- -- Apply selected icon to subgroups and entries -- Kijelölt ikon alkalmazása az alcsoportokra és bejegyzésekre -- -- -- Also apply to child groups -- Alkalmazás az alcsoportokra is -- -- -- Also apply to child entries -- Alkalmazás az albejegyzésekre is -- -- -- Also apply to all children -- Alkalmazás minden alegységre is -- -- -- Existing icon selected. -- Létező ikon kijelölve. -- -- -- Use default icon -- Alapértelmezett ikon alkalmazása -- -- -- Use custom icon -- Egyéni ikon alkalmazása -- -- -- Apply icon to... -- Ikon alkalmazása ehhez… -- -- -- Apply to this group only -- Alkalmazás csak ehhez a csoporthoz -- -- -- -- EditWidgetProperties -- -- Created: -- Létrehozva: -- -- -- Modified: -- Módosítva: -- -- -- Accessed: -- Elérve: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Beépülő adatai -- -- -- Remove -- Eltávolítás -- -- -- Delete plugin data? -- Törölhetők a bővítmény adatai? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Valóban törölhetők a kijelölt bővítmény adata? --Ez a kijelölt bővítmény hibás működését eredményezheti. -- -- -- Key -- Kulcs -- -- -- Value -- Érték -- -- -- Datetime created -- Dátum és idő létrehozva -- -- -- Datetime modified -- Dátum és idő módosítva -- -- -- Datetime accessed -- Hozzáférés történt a dátumhoz és időhöz -- -- -- Unique ID -- Unique ID -- -- -- Plugin data -- Bővítmény adatai -- -- -- Remove selected plugin data -- Kijelölt bővítményadat eltávolítása -- -- -- -- Entry -- -- %1 - Clone -- %1 – Klón -- -- -- -- EntryAttachmentsModel -- -- Name -- Név -- -- -- Size -- Méret -- -- -- -- EntryAttachmentsWidget -- -- Form -- Űrlap -- -- -- Add -- Hozzáadás -- -- -- Remove -- Eltávolítás -- -- -- Open -- Megnyitás -- -- -- Save -- Mentés -- -- -- Select files -- Fájl kijelölése -- -- -- Are you sure you want to remove %n attachment(s)? -- Valóban eltávolít %n mellékletet?Valóban eltávolít %n mellékletet? -- -- -- Save attachments -- Mellékletek mentése -- -- -- Unable to create directory: --%1 -- Nem hozható létre a mappa: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Valóban felül kívánja írni a meglévő „%1” fájl a melléklettel? -- -- -- Confirm overwrite -- Felülírás megerősítése -- -- -- Unable to save attachments: --%1 -- A melléklet nem menthető: --%1 -- -- -- Unable to open attachment: --%1 -- A melléklet nem megnyitható: --%1 -- -- -- Unable to open attachments: --%1 -- A mellékletek nem megnyithatóak: --%1 -- -- -- Confirm remove -- Törlés megerősítése -- -- -- Unable to open file(s): --%1 -- A fájl nem megnyitható: --%1A fájlok nem megnyithatóak: --%1 -- -- -- Attachments -- Mellékletek -- -- -- Add new attachment -- Új melléklet hozzáadása -- -- -- Remove selected attachment -- Kijelölt melléklet eltávolítása -- -- -- Open selected attachment -- Kijelölt melléklet megnyitása -- -- -- Save selected attachment to disk -- Kijelölt melléklet lemezre mentése -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 egy nagy fájl (%2 MB). --Az adatbázis így nagyon nagy lesz és rontani fogja a teljesítményt. -- --Biztosan hozzáadható ez a fájl? -- -- -- Confirm Attachment -- Melléklet megerősítése -- -- -- -- EntryAttributesModel -- -- Name -- Név -- -- -- -- EntryHistoryModel -- -- Last modified -- Legutóbb módosítva -- -- -- Title -- Cím -- -- -- Username -- Felhasználónév -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Hivatkozás: -- -- -- Group -- Csoport -- -- -- Title -- Cím -- -- -- Username -- Felhasználónév -- -- -- URL -- URL -- -- -- Never -- Soha -- -- -- Password -- Jelszó -- -- -- Notes -- Jegyzetek -- -- -- Expires -- Lejárat -- -- -- Created -- Létrehozva -- -- -- Modified -- Módosított -- -- -- Accessed -- Elérve -- -- -- Attachments -- Mellékletek -- -- -- Size -- Méret -- -- -- Group name -- Csoportnév -- -- -- Entry title -- Bejegyzés címe -- -- -- Entry notes -- Megjegyzés a bejegyzéshez -- -- -- Entry expires at -- Bejegyzés lejárata -- -- -- Creation date -- Létrehozási dátum -- -- -- Last modification date -- Utolsó módosítás dátuma -- -- -- Last access date -- Utolsó elérési dátum -- -- -- Attached files -- Mellékelt fájlok -- -- -- Entry size -- Bejegyzés mérete -- -- -- Has attachments -- Van melléklete -- -- -- Has TOTP one-time password -- Van időalapú, egyszer használatos jelszava (TOTP) -- -- -- -- EntryPreviewWidget -- -- Close -- Bezárás -- -- -- General -- Általános -- -- -- Username -- Felhasználónév -- -- -- Password -- Jelszó -- -- -- Expiration -- Lejárat -- -- -- URL -- URL -- -- -- Attributes -- Attribútumok -- -- -- Attachments -- Mellékletek -- -- -- Notes -- Jegyzetek -- -- -- Autotype -- Automatikus típus -- -- -- Window -- Ablak -- -- -- Sequence -- Sorrend -- -- -- Searching -- Keresés -- -- -- Search -- Keresés -- -- -- Clear -- Törlés -- -- -- Never -- Soha -- -- -- [PROTECTED] -- [VÉDETT] -- -- -- Enabled -- Engedélyezett -- -- -- Disabled -- Tiltott -- -- -- Share -- Megosztás -- -- -- Display current TOTP value -- Aktuális TOTP-érték megjelenítése -- -- -- Advanced -- Speciális -- -- -- Default Sequence -- Alapértelmezett sorrend -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Érvénytelen URL -- -- -- -- EntryView -- -- Fit to window -- Igazítás az ablakhoz -- -- -- Fit to contents -- Igazítás a tartalomhoz -- -- -- Reset to defaults -- Visszaállítás alapértelmezettre -- -- -- Has attachments -- Entry attachment icon toggle -- Van melléklete -- -- -- Has TOTP -- Entry TOTP icon toggle -- Van TOTP-je -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- %3 használta a(z) „%2” adatbázis bejegyzését: „%1”, -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Nem sikerült regisztrálni a DBus-szolgáltatást: %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n bejegyzést használ: %1%n bejegyzést használ: %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Fájlnév -- -- -- Group -- Csoport -- -- -- Manage -- Kezelés -- -- -- Unlock to show -- Feloldás a megjelenítéshez -- -- -- None -- Nincs -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Alkalmazás -- -- -- Manage -- Kezelés -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo titkosító szolgáltatás:</b> %1 -- -- -- Unknown -- Unknown PID -- Ismeretlen -- -- -- Unknown -- Unknown executable path -- Ismeretlen -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, futtatható: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Egy másik titkosító szolgáltatás is fut (%1).<br/>Állítsa le vagy távolítsa el, mielőtt újra engedélyezné a titkosító szolgáltatás integrációját. -- -- -- -- Group -- -- [empty] -- group has no children -- [üres] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Az online jelszó-érvényesítés sikertelen -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Faviconok letöltése -- -- -- Cancel -- Mégse -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Probléma van az ikonok letöltésével? --A DuckDuckGo weboldal ikon szolgáltatást az alkalmazás beállításai között a biztonság szekcióban lehet engedélyezni -- -- -- Close -- Bezárás -- -- -- URL -- URL -- -- -- Status -- Állapot -- -- -- Please wait, processing entry list... -- Türelem, a bejegyzéslista feldolgozás alatt áll… -- -- -- Downloading... -- Letöltés… -- -- -- Ok -- Ok -- -- -- Already Exists -- Már létezik -- -- -- Download Failed -- Letöltés sikertelen -- -- -- Downloading favicons (%1/%2)... -- Faviconok letöltése (%1/%2)… -- -- -- -- KMessageWidget -- -- &Close -- &Bezárás -- -- -- Close message -- Bezárási üzenet -- -- -- -- Kdbx3Reader -- -- missing database headers -- hiányzó adatbázis fejlécek -- -- -- Header doesn't match hash -- A fejléc nem egyezik meg a hasítóértékkel -- -- -- Invalid header id size -- Érvénytelen fejléc-azonosító méret -- -- -- Invalid header field length -- Érvénytelen fejlécmezőhossz -- -- -- Invalid header data length -- Érvénytelen fejlécadathossz -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. --Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült. -- -- -- Unable to calculate database key -- Nem lehet kiszámítani az adatbáziskulcsot -- -- -- Unable to issue challenge-response: %1 -- Nem lehet kiutalni a kihívás-választ: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Nem lehet kiutalni a kihívás-választ: %1 -- -- -- Unable to calculate database key -- Nem lehet kiszámítani az adatbáziskulcsot -- -- -- -- Kdbx4Reader -- -- missing database headers -- hiányzó adatbázis fejlécek -- -- -- Invalid header checksum size -- Érvénytelen fejlécellenőrző összeg -- -- -- Header SHA256 mismatch -- Fejléc SHA256 eltérés -- -- -- Unknown cipher -- Ismeretlen titkosító -- -- -- Invalid header id size -- Érvénytelen fejléc-azonosító méret -- -- -- Invalid header field length -- Érvénytelen fejlécmezőhossz -- -- -- Invalid header data length -- Érvénytelen fejlécadathossz -- -- -- Failed to open buffer for KDF parameters in header -- A puffer megnyitása sikertelen a KDF paraméterek számára a fejlécben -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nem támogatott kulcsszármaztató függvény (KDF) vagy érvénytelen paraméter -- -- -- Legacy header fields found in KDBX4 file. -- Régi, örökölt fejlécmezők találhatók a KDBX4-fájlban. -- -- -- Invalid inner header id size -- Érvénytelen belső fejléc-azonosító méret -- -- -- Invalid inner header field length -- Érvénytelen belső fejlécmezőhossz -- -- -- Invalid inner header binary size -- Érvénytelen belső fejléc bináris méret -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Nem támogatott KeePass változattérkép-verzió. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Érvénytelen változattérkép bejegyzésnévhossz -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Érvénytelen változattérkép bejegyzésnévadat -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen változattérkép bejegyzésértékhossz -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Érvénytelen változattérkép bejegyzésértékadat -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen Bool változattérkép bejegyzésértékhossz -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen Int32 változattérkép bejegyzésértékhossz -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen UInt32 változattérkép bejegyzésértékhossz -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen Int64 változattérkép bejegyzésértékhossz -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Érvénytelen UInt64 változattérkép bejegyzésértékhossz -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Érvénytelen változattérkép bejegyzéstípus -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Érvénytelen változattérkép mezőtípusméret -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. --Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült. -- -- -- (HMAC mismatch) -- (HMAC eltérés) -- -- -- Unable to calculate database key: %1 -- Nem lehet kiszámítani az adatbáziskulcsot: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Érvénytelen szimmetrikus titkosító algoritmus. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Érvénytelen szimmetrikus titkosító IV méret. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- A KDF-változattérkép-paraméterek sorbafejtése sikertelen. -- -- -- Unable to calculate database key: %1 -- Nem lehet kiszámítani az adatbáziskulcsot: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nem támogatott titkosító -- -- -- Invalid compression flags length -- Érvénytelen tömörítési jelzőhossz -- -- -- Unsupported compression algorithm -- Nem támogatott tömörítési algoritmus -- -- -- Invalid master seed size -- Érvénytelen mestermagméret -- -- -- Invalid transform seed size -- Érvénytelen átalakító magméret -- -- -- Invalid transform rounds size -- Érvénytelen átalakítási forduló méret -- -- -- Invalid start bytes size -- Érvénytelen kezdő bájtméret -- -- -- Invalid random stream id size -- Érvénytelen véletlenszerű adatfolyam-azonosító méret -- -- -- Invalid inner random stream cipher -- Érvénytelen belső véletlenszerű adatfolyamtitkosító -- -- -- Not a KeePass database. -- Nem KeePass adatbázis. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- A kijelölt fájl egy régi KeePass 1 adatbázis (.kdb). -- --Be lehet importálni az Adatbázis > „KeePass 1 adatbázis importálása…” menüpontban. --Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a régi KeePassX 0.4 verzióval. -- -- -- Unsupported KeePass 2 database version. -- Nem támogatott KeePass 2 adatbázis-verzió. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Érvénytelen titkosítási UUID hossz: %1 (hossz=%2) -- -- -- Unable to parse UUID: %1 -- A UUID nem dolgozható fel: %1 -- -- -- Failed to read database file. -- Az adatbázis olvasása sikertelen. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML értelmezési hiba: %1 -- -- -- No root group -- Nincs gyökércsoport -- -- -- Missing icon uuid or data -- Hiányzó ikon UUID vagy adat -- -- -- Missing custom data key or value -- Hiányzó egyéni adatkulcs vagy -érték -- -- -- Multiple group elements -- Többszörös csoportelemek -- -- -- Null group uuid -- Null csoport UUID -- -- -- Invalid group icon number -- Érvénytelen csoportikonszám -- -- -- Invalid EnableAutoType value -- Érvénytelen EnableAutoType érték -- -- -- Invalid EnableSearching value -- Érvénytelen EnableSearching érték -- -- -- No group uuid found -- Nem található a csoport UUID -- -- -- Null DeleteObject uuid -- Null DeleteObject UUID -- -- -- Missing DeletedObject uuid or time -- Hiányzó DeletedObject UUID vagy idő -- -- -- Null entry uuid -- Null bejegyzés UUID -- -- -- Invalid entry icon number -- Érvénytelen bejegyzésikonszám -- -- -- History element in history entry -- Előzményelem az előzménybejegyzésben -- -- -- No entry uuid found -- Nem található bejegyzés UUID -- -- -- History element with different uuid -- Előzményelem különböző UUID-vel -- -- -- Duplicate custom attribute found -- Kétszeres egyéni attribútum található -- -- -- Entry string key or value missing -- Hiányzik a bejegyzés karakterlánckulcsa vagy -értéke -- -- -- Entry binary key or value missing -- Hiányzik a bejegyzés bináris kulcsa vagy értéke -- -- -- Auto-type association window or sequence missing -- Hiányzik az automatikus beírás ablaktársítása vagy sorozata -- -- -- Invalid bool value -- Érvénytelen logikai érték -- -- -- Invalid date time value -- Érvénytelen dátum/idő érték -- -- -- Invalid color value -- Érvénytelen színérték -- -- -- Invalid color rgb part -- Érvénytelen RGB-színrész -- -- -- Invalid number value -- Érvénytelen számérték -- -- -- Invalid uuid value -- Érvénytelen UUID-érték -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- A bináris nem kibontható -- -- -- XML error: --%1 --Line %2, column %3 -- XML hiba --%1 --%2. sor, %3. oszlop -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- A KeeAgent beállítási fájl felépítése érvénytelen. -- -- -- Private key is an attachment but no attachments provided. -- A személyes kulcs egy melléklet lenne, de nincs melléklet. -- -- -- Private key is empty -- Üres a személyes kulcs -- -- -- File too large to be a private key -- A fájl túl nagy ahhoz, hogy személyes kulcs legyen -- -- -- Failed to open private key -- Személyes kulcs megnyitása meghiúsult -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Nem lehet megnyitni az adatbázist. -- -- -- Import KeePass1 Database -- KeePass1 adatbázis importálása -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- A kulcsfájl nem olvasható. -- -- -- Not a KeePass database. -- Nem KeePass adatbázis. -- -- -- Unsupported encryption algorithm. -- Nem támogatott titkosítási algoritmus. -- -- -- Unsupported KeePass database version. -- Nem támogatott KeePass adatbázis-verzió. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Nem olvasható a IV titkosítás -- -- -- Invalid number of groups -- Érvénytelen csoportszám -- -- -- Invalid number of entries -- Érvénytelen bejegyzésszám -- -- -- Invalid content hash size -- Érvénytelen a tartalom hasítóértékének mérete -- -- -- Invalid transform seed size -- Érvénytelen átalakító magméret -- -- -- Invalid number of transform rounds -- Érvénytelen átalakítási fordulószám -- -- -- Unable to construct group tree -- Nem lehet létrehozni a csoportfát -- -- -- Root -- Gyökér -- -- -- Key transformation failed -- Kulcsátalakítás sikertelen -- -- -- Invalid group field type number -- Érvénytelen csoportmezőtípus-szám -- -- -- Invalid group field size -- Érvénytelen csoportmezőméret -- -- -- Read group field data doesn't match size -- A csoportmezőadatok olvasása nem egyezik meg a mérettel -- -- -- Incorrect group id field size -- Helytelen csoportazonosítómező-méret -- -- -- Incorrect group creation time field size -- Helytelen csoportlétrehozási időmező-méret -- -- -- Incorrect group modification time field size -- Helytelen csoportmódosítási időmező-méret -- -- -- Incorrect group access time field size -- Helytelen csoporthozzáférési időmező-méret -- -- -- Incorrect group expiry time field size -- Helytelen csoportlejárati időmező-méret -- -- -- Incorrect group icon field size -- Helytelen csoportikonmező-méret -- -- -- Incorrect group level field size -- Helytelen csoportszintmező-méret -- -- -- Invalid group field type -- Érvénytelen csoportmezőtípus -- -- -- Missing group id or level -- Helytelen csoportazonosító vagy -szint -- -- -- Missing entry field type number -- Hiányzó bejegyzésmezőtípus-szám -- -- -- Invalid entry field size -- Érvénytelen bejegyzésmező-méret -- -- -- Read entry field data doesn't match size -- A bejegyzésmezőadatok olvasása nem egyezik meg a mérettel -- -- -- Invalid entry uuid field size -- Érvénytelen bejegyzés UUID-mező-méret -- -- -- Invalid entry group id field size -- Érvénytelen bejegyzéscsoportazonosítómező-méret -- -- -- Invalid entry icon field size -- Érvénytelen bejegyzésikonmező-méret -- -- -- Invalid entry creation time field size -- Érvénytelen bejegyzéslétrehozási időmező-méret -- -- -- Invalid entry modification time field size -- Érvénytelen bejegyzésmódosítási időmező-méret -- -- -- Invalid entry expiry time field size -- Érvénytelen bejegyzéslejárati időmező-méret -- -- -- Invalid entry field type -- Érvénytelen bejegyzésmező-típus -- -- -- unable to seek to content position -- nem lehet a tartalom pozíciójához lépni -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. --Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült. -- -- -- Unable to calculate database key -- Nem lehet kiszámítani az adatbáziskulcsot -- -- -- -- KeeShare -- -- Invalid sharing reference -- Érvénytelen megosztási hivatkozás -- -- -- Inactive share %1 -- Inaktív megosztás: %1 -- -- -- Imported from %1 -- Importálva innen: %1 -- -- -- Exported to %1 -- Exportálva ide: %1 -- -- -- Synchronized with %1 -- Szinkronizálva ezzel: %1 -- -- -- Import is disabled in settings -- Importálás letiltva a beállításokban -- -- -- Export is disabled in settings -- Exportálás letiltva a beállításokban -- -- -- Inactive share -- Inaktív megosztás -- -- -- Imported from -- Importálva innen -- -- -- Exported to -- Exportálva ide -- -- -- Synchronized with -- Szinkronizálva ezzel -- -- -- -- KeyComponentWidget -- -- Key Component -- Kulcs komponens -- -- -- Key Component Description -- Kulcs komponens leírása -- -- -- Cancel -- Mégse -- -- -- Key Component set, click to change or remove -- Kulcs komponens beállítva, kattintson a módosításhoz vagy eltávolításhoz -- -- -- Add %1 -- Add a key component -- %1 hozzáadása -- -- -- Change %1 -- Change a key component -- %1 módosítása -- -- -- Remove %1 -- Remove a key component -- %1 eltávolítása -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 beállítva, kattintson a módosításhoz vagy eltávolításhoz -- -- -- -- KeyFileEditWidget -- -- Generate -- Előállítás -- -- -- Key File -- Kulcsfájl -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Megadhat egy véletlenszerű bájtokat tartalmazó kulcsot a további biztonság érdekében.</p><p>Tartsa titokban, és ne veszítse el, nehogy kizárja magát!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Hiba a(z) „%1” kulcsfájl betöltésekor --Üzenet: %2 -- -- -- Key files -- Kulcsfájlok -- -- -- All files -- Minden fájl -- -- -- Create Key File... -- Kulcsfájl létrehozása… -- -- -- Error creating key file -- Hiba a kulcsfájl létrehozásakor -- -- -- Unable to create key file: %1 -- A kulcsfájl nem hozható létre: %1 -- -- -- Select a key file -- Kulcsfájl kiválasztása -- -- -- Key file selection -- Kulcsfájl kijelölése -- -- -- Browse for key file -- Kulcsfájl böngészése -- -- -- Browse... -- Tallózás… -- -- -- Generate a new key file -- Új kulcsfájl előállítása -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Megjegyzés: Nem szabad olyan fájlt használni, amely megváltozhat, mivel ez megakadályozza az adatbázis feloldását! -- -- -- Invalid Key File -- Érvénytelen kulcsfájl -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Nem lehet e jelenlegi adatbázist használnia saját kulcsfájljaként. Egy másik fájlt kell választani vagy egy kulcsfájlt előállítani. -- -- -- Suspicious Key File -- Gyanús kulcsfájl -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Úgy tűnik, hogy a kijelölt kulcsfájl egy jelszóadatbázis-fájl. A kulcsfájl egy statikus fájl kell legyen, ami sohasem változik, különben örökre el fog veszni az adatbázishoz való hozzáférés. --Valóban folytatható a művelet ezzel a fájllal? -- -- -- Old key file format -- Régi kulcsfájl formátum -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet<br>hogy nem fog támogatni a jövőben.<br><br>Fontolja meg, hogy új kulcsfájlt állítson elő. -- -- -- -- MainWindow -- -- &Database -- &Adatbázis -- -- -- &Help -- &Súgó -- -- -- &Groups -- &Csoportok -- -- -- &Tools -- &Eszközök -- -- -- &Quit -- &Kilépés -- -- -- &About -- &Névjegy -- -- -- Database settings -- Adatbázis-beállítások -- -- -- Copy username to clipboard -- Felhasználónév másolása a vágólapra -- -- -- Copy password to clipboard -- Jelszó másolása a vágólapra -- -- -- &Settings -- &Beállítások -- -- -- &Title -- &Cím -- -- -- Copy title to clipboard -- Cím másolása a vágólapra -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- URL másolása a vágólapra -- -- -- &Notes -- &Jegyzetek -- -- -- Copy notes to clipboard -- Jegyzetek másolása a vágólapra -- -- -- Copy &TOTP -- &TOTP másolása -- -- -- E&mpty recycle bin -- &Kuka ürítése -- -- -- Clear history -- Előzmények törlése -- -- -- Access error for config file %1 -- Hozzáférési hiba a beállítási fájlhoz: %1 -- -- -- Settings -- Beállítások -- -- -- Toggle window -- Ablak átváltása -- -- -- Quit KeePassXC -- Kilépés a KeePassXC-ből -- -- -- Please touch the button on your YubiKey! -- Meg kell érinteni a gombot a YubiKeyen! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- FIGYELEM: Egy instabil KeePassXC verziót használ! Mivel magas kockázata van az adatsérülésnek, feltétlenül érdemes biztonsági mentés készíteni az adatbázisról. --Ez a verzió nem felhasználóknak készült. -- -- -- &Donate -- &Támogatás -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- FIGYELMEZTETÉS: A Qt verziója miatt a KeePassXC összeomolhat egy képernyő-billentyűzettel! --Javasoljuk az AppImage alkalmazását, amely elérhető a letöltések oldalon. -- -- -- &Import -- &Importálás -- -- -- Create a new database -- Új adatbázis létrehozása -- -- -- Merge from another KDBX database -- Egyesítés egy másik KeePassX adatbázisból -- -- -- Add a new entry -- Új bejegyzés hozzáadása -- -- -- View or edit entry -- Bejegyzés megtekintése vagy szerkesztése -- -- -- Add a new group -- Új csoport hozzáadása -- -- -- Perform &Auto-Type -- &Automatikus beírás -- -- -- Open &URL -- &URL megnyitása -- -- -- Import a KeePass 1 database -- KeePass 1 adatbázis importálása -- -- -- Import a CSV file -- CSV-fájl importálása -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- MEGJEGYZÉS: Ez egy előzetes kiadású KeePassXC verzió! --Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem ajánlott éles használatra. -- -- -- Check for updates on startup? -- Keressen a program induláskor frissítéseket? -- -- -- Would you like KeePassXC to check for updates on startup? -- Valóban keressen a program induláskor frissítéseket? -- -- -- You can always check for updates manually from the application menu. -- A program menüjéből bármikor saját kezűleg is indítható a frissítések keresése. -- -- -- &Export -- &Exportálás -- -- -- Sort &A-Z -- Rendezés: &A–Z -- -- -- Sort &Z-A -- Rendezés: &Z–A -- -- -- &Password Generator -- &Jelszó-előállító -- -- -- Import a 1Password Vault -- 1Password Vault importálása -- -- -- &Getting Started -- &Kezdő lépések -- -- -- &User Guide -- Felhasználói &kézikönyv -- -- -- &Keyboard Shortcuts -- &Gyorsbillentyűk -- -- -- &Recent Databases -- &Friss adatbázisok -- -- -- &Entries -- &Bejegyzések -- -- -- Copy Att&ribute -- Att&ribútum másolása -- -- -- TOTP -- TOTP -- -- -- View -- Nézet -- -- -- Theme -- Téma -- -- -- &Check for Updates -- &Frissítések keresése -- -- -- &Open Database… -- Adatbázis &megnyitása… -- -- -- &Save Database -- Adatbázis &mentése -- -- -- &Close Database -- Adatbázis &bezárása -- -- -- &New Database… -- Ú&j adatbázis -- -- -- &Merge From Database… -- &Egyesítés adatbázisból… -- -- -- &New Entry… -- Új b&ejegyzés… -- -- -- &Edit Entry… -- Bejegyzés sze&rkesztése… -- -- -- &Delete Entry… -- Bejegyzés &törlése… -- -- -- &New Group… -- Ú&j csoport… -- -- -- &Edit Group… -- Csoport sz&erkesztése… -- -- -- &Delete Group… -- Csoport &törlése… -- -- -- Download All &Favicons… -- Minden favicon &letöltése… -- -- -- Sa&ve Database As… -- Adatbázis mentése más &néven… -- -- -- Database &Security… -- Adatbázis &biztonság… -- -- -- Database &Reports... -- Adatbázis &jelentések… -- -- -- Statistics, health check, etc. -- Statisztika, állapotfelmérés, stb. -- -- -- &Database Settings… -- Adatbázis-&beállítások… -- -- -- &Clone Entry… -- Bejegyzés &klónozása… -- -- -- Move u&p -- Mozgatás &fel -- -- -- Move entry one step up -- Bejegyzés mozgatása egy lépéssel feljebb -- -- -- Move do&wn -- Mozgatás &le -- -- -- Move entry one step down -- Bejegyzés mozgatása egy lépéssel lejebb -- -- -- Copy &Username -- &Felhasználónév másolása -- -- -- Copy &Password -- &Jelszó másolása -- -- -- Download &Favicon -- &Favicon letöltése -- -- -- &Lock Databases -- Adatbázisok &zárolása -- -- -- &CSV File… -- &CSV-fájl… -- -- -- &HTML File… -- &HTML-fájl -- -- -- KeePass 1 Database… -- KeePass 1 adatbázis… -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- CSV-fájl… -- -- -- Show TOTP -- TOTP megjelenítése -- -- -- Show QR Code -- QR-kód megjelenítése -- -- -- Set up TOTP… -- TOTP beállítása… -- -- -- Report a &Bug -- &Hiba jelentése -- -- -- Open Getting Started Guide -- Kezdő lépések kézikönyv megnyitása -- -- -- &Online Help -- &Online súgó -- -- -- Go to online documentation -- Ugrás az online dokumentációra -- -- -- Open User Guide -- Felhasználói kézikönyv megnyitása -- -- -- Save Database Backup... -- Biztonsági mentés az adatbázisról… -- -- -- Add key to SSH Agent -- Kulcs hozzáadása az SSH-ügynökhöz -- -- -- Remove key from SSH Agent -- Kulcs eltávolítása az SSH-ügynökből -- -- -- Compact Mode -- Kompakt mód -- -- -- Automatic -- Automatikus -- -- -- Light -- Világos -- -- -- Dark -- Sötét -- -- -- Classic (Platform-native) -- Klasszikus (platform natív) -- -- -- Show Toolbar -- Eszköztár megjelenítése -- -- -- Show Preview Panel -- Előnézet panel megjelenítése -- -- -- Don't show again for this version -- Ne jelenjen meg többé ehhez a verzióhoz -- -- -- Restart Application? -- Alkalmazás újraindítása? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? -- -- -- Perform Auto-Type Sequence -- Automatikus beírási sorrend végrehajtása -- -- -- {USERNAME} -- {FELHASZNÁLÓNÉV} -- -- -- {USERNAME}{ENTER} -- {FELHASZNÁLÓNÉV}{ENTER} -- -- -- {PASSWORD} -- {JELSZÓ} -- -- -- {PASSWORD}{ENTER} -- {JELSZÓ}{ENTER} -- -- -- Always on Top -- Mindig felül -- -- -- Hide Usernames -- Felhasználónevek elrejtése -- -- -- Hide Passwords -- Jelszavak elrejtése -- -- -- -- ManageDatabase -- -- Database settings -- Adatbázis-beállítások -- -- -- Edit database settings -- Adatbázis-beállítások szerkesztése -- -- -- Unlock database -- Adatbázis feloldása -- -- -- Unlock database to show more information -- Adatbázis feloldása a további információk megjelenítéséhez -- -- -- Lock database -- Adatbázis zárolása -- -- -- -- ManageSession -- -- Disconnect -- Leválasztás -- -- -- Disconnect this application -- Alkalmazás leválasztása -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Hiányzó %1 létrehozása [%2] -- -- -- Relocating %1 [%2] -- %1 áthelyezése [%2] -- -- -- Overwriting %1 [%2] -- %1 felülírása [%2] -- -- -- older entry merged from database "%1" -- régebbi bejegyzés összeolvasztva a(z) „%1” adatbázisból -- -- -- Adding backup for older target %1 [%2] -- Biztonsági mentés hozzáadása a régebbi %1 célhoz [%2] -- -- -- Adding backup for older source %1 [%2] -- Biztonsági mentés hozzáadása a régebbi %1 forráshoz [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- A régebbi cél újra alkalmazása az újabb %1 forráson [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- A régebbi forrás újra alkalmazása az újabb %1 célon [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Szinkronizálás az újabb %1 forrásból [%2] -- -- -- Synchronizing from older source %1 [%2] -- Szinkronizálás a régebbi %1 forrásból [%2] -- -- -- Deleting child %1 [%2] -- %1 gyermek törlése [%2] -- -- -- Deleting orphan %1 [%2] -- %1 elárvult bejegyzés törlése [%2] -- -- -- Changed deleted objects -- Törölt objektumok módosítva -- -- -- Adding missing icon %1 -- Hiányzó %1 ikon hozzáadása -- -- -- Removed custom data %1 [%2] -- Törölt egyéni adat: %1 [%2] -- -- -- Adding custom data %1 [%2] -- Egyéni adat hozzáadása: %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Új KeePassXC adatbázis létrehozása… -- -- -- Root -- Root group -- Gyökér -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Varázsló oldal -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban. -- -- -- Advanced Settings -- Speciális beállítások -- -- -- Simple Settings -- Egyszerű beállítások -- -- -- Encryption Settings -- Titkosítási beállítások -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Adatbázis hitelesítési adatai -- -- -- A set of credentials known only to you that protects your database. -- Csak Ön által ismert hitelesítési adatkészlet, mely védi az adatbázist. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Titkosítási beállítások -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Általános adatbázis-információk -- -- -- Please fill in the display name and an optional description for your new database: -- Töltse ki a megjelenítendő nevet és a nem kötelező leírást az új adatbázishoz: -- -- -- -- NixUtils -- -- Password Manager -- Jelszókezelő -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Érvénytelen OpData01, nem tartalmaz fejlécet -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Nem minden IV bájt olvasható, 16 a várt érték, a kapott pedig %1 -- -- -- Unable to init cipher for opdata01: %1 -- A titkosító nem indítható az opdata01 számára: %1 -- -- -- Unable to read all HMAC signature bytes -- Nem olvasható minden HMAC aláíróbájt -- -- -- Malformed OpData01 due to a failed HMAC -- A helytelenül formázott OpData01 miatt a HMAC sikertelen. -- -- -- Unable to process clearText in place -- A clearText feldolgozás sikertelen a helyén -- -- -- Expected %1 bytes of clear-text, found %2 -- %1 bájt egyszerű szöveg a várt, de ehelyett a talált: %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Az adatbázis olvasása nem hozott létre példányt: --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- A .opvault mappának léteznie kell -- -- -- Directory .opvault must be readable -- A .opvault mappa olvasható kell legyen -- -- -- Directory .opvault/default must exist -- A .opvault/default mappának léteznie kell -- -- -- Directory .opvault/default must be readable -- A .opvault/default mappa olvasható kell legyen -- -- -- Unable to decode masterKey: %1 -- Nem dekódolható a mesterkulcs: %1 -- -- -- Unable to derive master key: %1 -- A mesterkulcs nem származtatható: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Érvénytelen kulcsfájl, egy OpenSSh kulcs az elvált -- -- -- PEM boundary mismatch -- PEM-perem eltérés -- -- -- Base64 decoding failed -- Base64-dekódolás sikertelen -- -- -- Key file way too small. -- A kulcsfájl útja túl kicsi. -- -- -- Key file magic header id invalid -- Érvénytelen a kulcsfájl mágikus fejlécazonosítója -- -- -- Found zero keys -- Egyetlen kulcs sem található -- -- -- Failed to read public key. -- Nyilvános kulcs olvasása sikertelen. -- -- -- Corrupted key file, reading private key failed -- Sérült kulcsfájl, személyes kulcs olvasása sikertelen -- -- -- No private key payload to decrypt -- Nincs dekódolható adat a személyes kulcsból -- -- -- Trying to run KDF without cipher -- KDF futtatási kísérlet titkosító nélkül -- -- -- Passphrase is required to decrypt this key -- Jelmondat szükséges a kulcsfájl visszafejtéséhez -- -- -- Key derivation failed, key file corrupted? -- A kulcsszármaztatás sikertelen, megsérült a kulcsfájl? -- -- -- Decryption failed, wrong passphrase? -- Visszafejtés sikertelen, rossz a jelmondat? -- -- -- Unexpected EOF while reading public key -- Nem várt EOF a nyilvános kulcs olvasása közben -- -- -- Unexpected EOF while reading private key -- Nem várt EOF a személyes kulcs olvasása közben -- -- -- Can't write public key as it is empty -- Nem lehet írni a nyilvános kulcsot, mivel üres -- -- -- Unexpected EOF when writing public key -- Nem várt EOF a nyilvános kulcs írásakor -- -- -- Can't write private key as it is empty -- Nem lehet írni a személyes kulcs, mivel üres -- -- -- Unexpected EOF when writing private key -- Nem várt EOF a személyes kulcs írásakor -- -- -- Unsupported key type: %1 -- Nem támogatott kulcstípus: %1 -- -- -- Unknown cipher: %1 -- Ismeretlen titkosító: %1 -- -- -- Cipher IV is too short for MD5 kdf -- A IV titkosító túl rövid a MD5 KDF számára -- -- -- Unknown KDF: %1 -- Ismeretlen KDF: %1 -- -- -- Unknown key type: %1 -- Ismeretlen kulcstípus: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- A jelszavak nem egyeznek -- -- -- Passwords match so far -- A jelszavak eddig megegyeznek -- -- -- Toggle Password (%1) -- Jelszó átváltása (%1) -- -- -- Generate Password (%1) -- Jelszó előállítása (%1) -- -- -- Warning: Caps Lock enabled! -- Figyelem: a Caps Lock be van kapcsolva! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Jelszó megadása: -- -- -- Confirm password: -- Jelszó megerősítése: -- -- -- Password -- Jelszó -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>A jelszó az adatbázis biztonságban tartásának elsődleges módja.</p><p>A jó jelszavak hosszúak és egyediek. A KeePassXC elő tud állítani egyet Önnek.</p> -- -- -- Passwords do not match. -- A jelszavak nem egyeznek -- -- -- Password field -- Jelszó mező -- -- -- Repeat password field -- Jelszómező ismétlése -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- erősség -- -- -- entropy -- entrópia -- -- -- Password -- Jelszó -- -- -- Character Types -- Karaktertípusok -- -- -- Numbers -- Számok -- -- -- Extended ASCII -- Bővített ASCII -- -- -- Exclude look-alike characters -- Hasonlóan kinéző karakterek kizárása -- -- -- Pick characters from every group -- Karakterek minden csoportból -- -- -- &Length: -- &Hossz: -- -- -- Passphrase -- Jelmondat -- -- -- Wordlist: -- Szólista: -- -- -- Word Separator: -- Szóelválasztó: -- -- -- Close -- Bezárás -- -- -- Entropy: %1 bit -- Entrópia: %1 bit -- -- -- Password Quality: %1 -- Jelszóminőség: %1 -- -- -- Poor -- Password quality -- Silány -- -- -- Weak -- Password quality -- Gyenge -- -- -- Good -- Password quality -- -- -- -- Excellent -- Password quality -- Kiváló -- -- -- Switch to advanced mode -- Váltás speciális módba -- -- -- Advanced -- Speciális -- -- -- Braces -- Zárójelek -- -- -- Punctuation -- Központozás -- -- -- Quotes -- Idézőjelek -- -- -- Logograms -- Logogramok -- -- -- Character set to exclude from generated password -- A jelszó előállításnál kihagyandó karakterkészletek -- -- -- Do not include: -- Ne tartalmazza: -- -- -- Add non-hex letters to "do not include" list -- A nem hexadecimális betűk hozzáadása a „ne tartalmazza” listához -- -- -- Hex -- Hexadecimális -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” -- -- -- Generated password -- Előállított jelszó -- -- -- Upper-case letters -- Nagybetűk -- -- -- Lower-case letters -- Kisbetűk -- -- -- Special characters -- Speciális karakterek -- -- -- Math Symbols -- Matematikai szimbólumok -- -- -- Dashes and Slashes -- Kötőjelek és perjelek -- -- -- Excluded characters -- Kizárt karakterek -- -- -- Hex Passwords -- Hexadecimális jelszavak -- -- -- Password length -- Jelszóhossz -- -- -- Word Case: -- Minden Szó Nagybetűs -- -- -- Regenerate password -- Jelszó újraelőállítása -- -- -- Copy password -- Jelszó másolása -- -- -- lower case -- kisbetű -- -- -- UPPER CASE -- NAGYBETŰ -- -- -- Title Case -- Cím -- -- -- Generate Password -- Jelszó előállítása -- -- -- Also choose from: -- Tartalmazhat ezekből is: -- -- -- Additional characters to use for the generated password -- További karakterek az előállított jelszó számára -- -- -- Additional characters -- További karakterek -- -- -- Word Count: -- Szavak száma: -- -- -- Esc -- Esc -- -- -- Apply Password -- Jelszó alkalmazása -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Jelszó újraelőállítása (%1) -- -- -- Special Characters -- Speciális karakterek -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statisztika -- -- -- Very weak password -- Nagyon gyenge jelszó -- -- -- Password entropy is %1 bits -- A jelszóentrópia %1 bit -- -- -- Weak password -- Gyenge jelszó -- -- -- Used in %1/%2 -- Használatban itt: %1/%2 -- -- -- Password is used %1 times -- A jelszó már %1 alkalommal használatban van -- -- -- Password has expired -- A jelszó lejárt -- -- -- Password expiry was %1 -- A jelszó lejárt ekkor: %1 -- -- -- Password is about to expire -- A jelszó le fog járni -- -- -- Password expires in %1 days -- A jelszó lejár %1 nap múlva -- -- -- Password will expire soon -- A jelszó hamarosan lejár -- -- -- Password expires on %1 -- A jelszó ekkor jár le: %1 -- -- -- Health Check -- Állapotfelmérés -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Felülírás -- -- -- Delete -- Törlés -- -- -- Move -- Áthelyezés -- -- -- Empty -- Üres -- -- -- Remove -- Eltávolítás -- -- -- Skip -- Kihagyás -- -- -- Disable -- Letiltás -- -- -- Merge -- Egyesítés -- -- -- Continue -- Folytatás -- -- -- -- QObject -- -- Database not opened -- Az adatbázis nem lett megnyitva -- -- -- Database hash not available -- Az adatbázis hasítóértéke nem elérhető -- -- -- Client public key not received -- A kliens nyilvános kulcsa nem érkezett meg -- -- -- Cannot decrypt message -- Nem lehet visszafejteni az üzenetet -- -- -- Action cancelled or denied -- A műveletet megszakították vagy visszautasították -- -- -- KeePassXC association failed, try again -- A KeePassXC társítása sikertelen, próbálja újra -- -- -- Encryption key is not recognized -- A titkosítási kulcs nem lett felismerve -- -- -- Incorrect action -- Helytelen művelet -- -- -- Empty message received -- Üres üzenet érkezett -- -- -- No URL provided -- Nincs URL biztosítva -- -- -- No logins found -- Belépések nem találhatók -- -- -- Unknown error -- Ismeretlen hiba -- -- -- Add a new entry to a database. -- Új bejegyzés hozzáadása egy adatbázishoz. -- -- -- Path of the database. -- Adatbázis útvonala. -- -- -- Key file of the database. -- Adatbázis kulcsfájlja. -- -- -- path -- útvonal -- -- -- Username for the entry. -- Bejegyzés felhasználóneve. -- -- -- username -- felhasználónév -- -- -- URL for the entry. -- Bejegyzés URL-je. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Bejegyzés jelszavának bekérése. -- -- -- Generate a password for the entry. -- Jelszó előállítása a bejegyzés számára. -- -- -- length -- hosszúság -- -- -- Path of the entry to add. -- Hozzáadandó bejegyzés útvonala. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Levágandó bejegyzés útvonala. -- -- -- Timeout in seconds before clearing the clipboard. -- Késleltetés a vágólap törlése előtt (másodpercben). -- -- -- Edit an entry. -- Bejegyzés szerkesztése. -- -- -- Title for the entry. -- Bejegyzés címe. -- -- -- title -- cím -- -- -- Path of the entry to edit. -- Szerkesztendő bejegyzés útvonala. -- -- -- Estimate the entropy of a password. -- Jelszó entrópiájának becslése. -- -- -- Password for which to estimate the entropy. -- A jelszó, amelynek az entrópiája becslésre vár. -- -- -- Perform advanced analysis on the password. -- A jelszó speciális elemzése. -- -- -- -- --Available commands: -- -- -- --Elérhető parancsok: -- -- -- -- Name of the command to execute. -- Végrehajtandó parancs neve. -- -- -- List database entries. -- Adatbázis-bejegyzések felsorolása. -- -- -- Path of the group to list. Default is / -- Felsorolandó csoport útvonala. Az alapértelezett: / -- -- -- Find entries quickly. -- Bejegyzések gyors keresése. -- -- -- Search term. -- Kifejezés keresése. -- -- -- Merge two databases. -- Két adatbázis egyesítése. -- -- -- Path of the database to merge from. -- Az egyesítés forrásadatbázisának útvonala. -- -- -- Use the same credentials for both database files. -- Ugyanazon hitelesítési adatok alkalmazása mindkét adatbázisfájlhoz. -- -- -- Key file of the database to merge from. -- Az egyesítés forrásadatbázisának kulcsfájlja. -- -- -- Show an entry's information. -- Bejegyzés információinak megjelenítése. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Megjelenítendő attribútumnevek. Ez a beállítás többször is megadható, minden megjelenő attribútummal soronként a megadott sorrendben. Ha nincs meghatározva attribútum, akkor az alapértelmezett attribútumok összefoglalója lesz megadva. -- -- -- attribute -- attribútum -- -- -- Name of the entry to show. -- A megjelenítendő bejegyzés neve. -- -- -- NULL device -- NULL eszkösz -- -- -- error reading from device -- hiba az eszköz olvasása közben -- -- -- malformed string -- rosszul formázott karakterlánc -- -- -- missing closing quote -- hiányzó lezáró idézőjel -- -- -- Group -- Csoport -- -- -- Title -- Cím -- -- -- Username -- Felhasználónév -- -- -- Password -- Jelszó -- -- -- Notes -- Jegyzetek -- -- -- Last Modified -- Legutóbb módosítva -- -- -- Created -- Létrehozva -- -- -- Browser Integration -- Böngészőintegráció -- -- -- SSH Agent -- SSH-ügynök -- -- -- Generate a new random diceware passphrase. -- Véletlenszerű új diceware jelmondat előállítása. -- -- -- Word count for the diceware passphrase. -- Szavak számra a diceware jelmondat számára. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Szólista a diceware előállító számára. --[Alapértelmezett: EFF angol] -- -- -- Generate a new random password. -- Véletlenszerű új jelmondat előállítása. -- -- -- Could not create entry with path %1. -- Nem hozható létre bejegyzés a(z) %1 útvonallal. -- -- -- Enter password for new entry: -- Adja meg a jelszót az új bejegyzéshez: -- -- -- Writing the database failed %1. -- Az adatbázis kiírása sikertelen: %1. -- -- -- Successfully added entry %1. -- A(z) %1 bejegyzés sikeresen hozzáadva. -- -- -- Invalid timeout value %1. -- Érvénytelen időtúllépési érték: %1. -- -- -- Entry %1 not found. -- A(z) %1 bejegyzés nem található. -- -- -- Entry with path %1 has no TOTP set up. -- A(z) %1 útvonalú bejegyzéshez nincs TOTP beállítva. -- -- -- Clearing the clipboard in %1 second(s)... -- A vágólap törlése %1 másodperc múlva…A vágólap törlése %1 másodperc múlva… -- -- -- Clipboard cleared! -- Vágólap törölve! -- -- -- Silence password prompt and other secondary outputs. -- Jelszó bekérés és egyéb másodlagos kimenetek némítása. -- -- -- count -- CLI parameter -- szám -- -- -- Could not find entry with path %1. -- Nem található bejegyzés a(z) %1 útvonalon. -- -- -- Not changing any field for entry %1. -- A(z) %1 bejegyzés egyik mezője sem lesz változtatva. -- -- -- Enter new password for entry: -- Adja meg a bejegyzés új jelszavát: -- -- -- Writing the database failed: %1 -- Az adatbázis kiírása sikertelen: %1 -- -- -- Successfully edited entry %1. -- A(z) %1 bejegyzése sikeresen szerkesztve. -- -- -- Length %1 -- Hossz: %1 -- -- -- Entropy %1 -- Entrópia: %1 -- -- -- Log10 %1 -- Log10: %1 -- -- -- Multi-word extra bits %1 -- Több szavas extra bitek: %1 -- -- -- Type: Bruteforce -- Típus: Nyers erő -- -- -- Type: Dictionary -- Típus: Szótár -- -- -- Type: Dict+Leet -- Típus: Szótár+leet -- -- -- Type: User Words -- Típus: Felhasználói szavak -- -- -- Type: User+Leet -- Típus: Felhasználói+leet -- -- -- Type: Repeated -- Típus: Ismételt -- -- -- Type: Sequence -- Típus: Sorozat -- -- -- Type: Spatial -- Típus: Térbeli -- -- -- Type: Date -- Típus: Dátum -- -- -- Type: Bruteforce(Rep) -- Típus: Nyers erő (Ism.) -- -- -- Type: Dictionary(Rep) -- Típus: Szótár (Ism.) -- -- -- Type: Dict+Leet(Rep) -- Típus: Szótár+leet (Ism.) -- -- -- Type: User Words(Rep) -- Típus: Felhasználói szavak (Ism.) -- -- -- Type: User+Leet(Rep) -- Típus: Felhasználói+leet (Ism.) -- -- -- Type: Repeated(Rep) -- Típus: Ismételt (Ism.) -- -- -- Type: Sequence(Rep) -- Típus: Sorozat (Ism.) -- -- -- Type: Spatial(Rep) -- Típus: Térbeli (Ism.) -- -- -- Type: Date(Rep) -- Típus: Dátum (Ism.) -- -- -- Type: Unknown%1 -- Típus: Ismeretlen%1 -- -- -- Entropy %1 (%2) -- Entrópia: %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Jelszóhossz (%1) != részek hosszának össszege (%2) *** -- -- -- Failed to load key file %1: %2 -- A(z) %1 kulcsfájl betöltése sikertelen: %2 -- -- -- Length of the generated password -- Az előállított jelszó hossza -- -- -- Use lowercase characters -- Kisbetűs karakterek használata -- -- -- Use uppercase characters -- Nagybetűs karakterek használata -- -- -- Use special characters -- Különleges karakterek használata -- -- -- Use extended ASCII -- Bővített ASCII használata -- -- -- Exclude character set -- Karakterkészlet kizárása -- -- -- chars -- karakter -- -- -- Exclude similar looking characters -- Hasonlóan kinéző karakterek kizárása -- -- -- Include characters from every selected group -- Karakterek választása minden egyes csoportból -- -- -- Recursively list the elements of the group. -- A csoport elemeinek rekurzív listázása. -- -- -- Cannot find group %1. -- A(z) %1 csoport nem található. -- -- -- Error reading merge file: --%1 -- Hiba az összeolvasztási fájl olvasásakor: --%1 -- -- -- Unable to save database to file : %1 -- Az adatbázis nem menthető fájlba: %1 -- -- -- Unable to save database to file: %1 -- Az adatbázis nem menthető fájlba: %1 -- -- -- Successfully recycled entry %1. -- Sikeresen kukába dobva a bejegyzés: %1. -- -- -- Successfully deleted entry %1. -- A(z) %1 bejegyzés sikeresen törölve. -- -- -- Show the entry's current TOTP. -- A bejegyzés jelenlegi TOTP értékének megjelenítése. -- -- -- ERROR: unknown attribute %1. -- HIBA: ismeretlen %1 attribútum. -- -- -- No program defined for clipboard manipulation -- Nincs program megadva a vágólapkezeléshez -- -- -- file empty -- a fájl üres -- -- -- %1: (row, col) %2,%3 -- %1: (sor, oszlop) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Érvénytelen beállítások -- -- -- Invalid Key -- TOTP -- Érvénytelen kulcs -- -- -- Message encryption failed. -- Az üzenet titkosítása sikertelen. -- -- -- No groups found -- Nem találhatóak csoportok -- -- -- Create a new database. -- Új adatbázis létrehozása. -- -- -- File %1 already exists. -- A fájl már létezik: %1. -- -- -- Loading the key file failed -- Hiba a kulcsfájl betöltésekor -- -- -- No key is set. Aborting database creation. -- A kulcs nem lett megadva. Az adatbázis létrehozása megszakítva. -- -- -- Failed to save the database: %1. -- Az adatbázis nem menthető: %1. -- -- -- Successfully created new database. -- Az adatbázis sikeresen létre lett hozva. -- -- -- Creating KeyFile %1 failed: %2 -- A(z) %1 KeyFile létrehozása sikertelen: %2 -- -- -- Loading KeyFile %1 failed: %2 -- A(z) %1 KeyFile betöltése sikertelen: %2 -- -- -- Path of the entry to remove. -- Az eltávolítandó bejegyzés útvonala. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- A meglévő egypéldányos zárolási fájl érvénytelen. Új példány indítása. -- -- -- The lock file could not be created. Single-instance mode disabled. -- A zárolási fájlt nem lehet létrehozni. Egyedi példány mód letiltva. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC – keresztplatformos jelszókezelő -- -- -- filenames of the password databases to open (*.kdbx) -- megnyitandó jelszóadatbázisok fájlnevei (*.kdbx) -- -- -- path to a custom config file -- útvonal az egyéni beállítófájlhoz -- -- -- key file of the database -- adatbázis kulcsfájlja -- -- -- read password of the database from stdin -- adatbázis jelszó beolvasása az stdin-ről -- -- -- Another instance of KeePassXC is already running. -- A KeePassXC egy másik példánya is fut. -- -- -- Fatal error while testing the cryptographic functions. -- Végzetes hiba a kriptográfiai funkciók tesztelése közben. -- -- -- KeePassXC - Error -- KeePassXC – Hiba -- -- -- Database password: -- Adatbázis jelszava -- -- -- Cannot create new group -- Nem hozható létre új csoport -- -- -- Deactivate password key for the database. -- Jelszókulcs deaktiválása az adatbázishoz. -- -- -- Displays debugging information. -- Hibakeresési információk megjelenítése. -- -- -- Deactivate password key for the database to merge from. -- Jelszókulcs deaktiválása az adatbázishoz, amelyből az egyesítésre kerül. -- -- -- Version %1 -- Verzió: %1 -- -- -- Build Type: %1 -- Összeállítás típusa: %1 -- -- -- Revision: %1 -- Revízió: %1 -- -- -- Distribution: %1 -- Disztribúció: %1 -- -- -- Debugging mode is disabled. -- Hibakeresési mód letiltva. -- -- -- Debugging mode is enabled. -- Hibakeresési mód engedélyezve. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operációs rendszer: %1 --CPU architektúra: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Automatikus beírás -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (aláírt és nem aláírt megosztás) -- -- -- KeeShare (only signed sharing) -- KeeShare (csak aláírt megoszás) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (csak nem aláírt megosztás) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nincs -- -- -- Enabled extensions: -- Engedélyezett kiterjesztések: -- -- -- Cryptographic libraries: -- Kriptográfiai könyvtárak: -- -- -- Cannot generate a password and prompt at the same time! -- Jelszó előállítása és bekérése egyszerre nem lehetséges! -- -- -- Adds a new group to a database. -- Új csoport hozzáadása az adatbázishoz. -- -- -- Path of the group to add. -- A hozzáadandó csoport útvonala. -- -- -- Group %1 already exists! -- A csoport már létezik: %1! -- -- -- Group %1 not found. -- Nem található a csoport: %1. -- -- -- Successfully added group %1. -- A csoport sikeresen hozzáadva: %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Ajánlott ellenőrizni, hogy a jelszavak nem szivárogtak-e nyilvánosan. A(z) FILENAME fájlnak HIBP formátumban – a https://haveibeenpwned.com/Passwords oldalon elérhető formátum szerint – kell tartalmaznia a szivárgott jelszavak SHA-1 hasítóértékének listáját. -- -- -- FILENAME -- FÁJLNÉV -- -- -- Analyze passwords for weaknesses and problems. -- Jelszavak gyengeségi és problematikussági vizsgálata. -- -- -- Failed to open HIBP file %1: %2 -- HIBP-fájl megnyitása sikertelen: %1 %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Az adatbázis-bejegyzések kiértékelése a HIBP-fájl alapján egy ideig el fog tartani… -- -- -- Close the currently opened database. -- Pillanatnyilag megnyitott adatbázis bezárása. -- -- -- Display this help. -- Ezen súgó megjelenítése. -- -- -- slot -- foglalat -- -- -- Invalid word count %1 -- Érvénytelen a szavak száma: %1 -- -- -- The word list is too small (< 1000 items) -- A szavak listája túl rövid (< 1000 elem) -- -- -- Exit interactive mode. -- Kilépés az interaktív módból. -- -- -- Exports the content of a database to standard output in the specified format. -- Szabványos kimenetre exportálja az adatbázis tartalmát a meghatározott formátumban. -- -- -- Unable to export database to XML: %1 -- Az adatbázis nem exportálható XML-be: %1 -- -- -- Unsupported format %1 -- Nem támogatott formátum: %1 -- -- -- Use numbers -- Számok alkalmazása -- -- -- Invalid password length %1 -- Érvénytelen jelszóhossz: %1 -- -- -- Display command help. -- Parancsok súgójának megjelenítése. -- -- -- Available commands: -- Elérhető parancsok: -- -- -- Import the contents of an XML database. -- XML adatbázis tartalmának importálása. -- -- -- Path of the XML database export. -- Exportálandó XML adatbázis útvonala. -- -- -- Path of the new database. -- Új adatbázis útvonala. -- -- -- Successfully imported database. -- Sikeres adatbázis importálás. -- -- -- Unknown command %1 -- Ismeretlen parancs: %1 -- -- -- Flattens the output to single lines. -- Kimenet egyetlen sorrá való lapítása. -- -- -- Only print the changes detected by the merge operation. -- Az egyesítési művelet által talált módosítások kiíratása. -- -- -- Yubikey slot for the second database. -- A második adatbázis Yubikey foglalata. -- -- -- Successfully merged %1 into %2. -- %1 sikeresen egyesítve a következővel: %2. -- -- -- Database was not modified by merge operation. -- Az adatbázis nem változott az összeolvasztási művelet során. -- -- -- Moves an entry to a new group. -- Bejegyzés mozgatása egy új csoportba. -- -- -- Path of the entry to move. -- A mozgatandó bejegyzés útvonala. -- -- -- Path of the destination group. -- A célcsoport útvonala. -- -- -- Could not find group with path %1. -- Nem található csoport ezen az útvonalon: %1. -- -- -- Entry is already in group %1. -- A bejegyzés már a csoportban van: %1. -- -- -- Successfully moved entry %1 to group %2. -- A(z) %1 bejegyzés sikeresen átmozgatva a csoportba: %2. -- -- -- Open a database. -- Adatbázis megnyitása. -- -- -- Path of the group to remove. -- Egy törlendő csoport útvonala. -- -- -- Cannot remove root group from database. -- A gyökércsoport nem törölhető az adatbázisból. -- -- -- Successfully recycled group %1. -- Sikeresen kukába dobva a csoport: %1. -- -- -- Successfully deleted group %1. -- A csoport sikeresen törölve: %1. -- -- -- Failed to open database file %1: not found -- Az adatbázisfájl megnyitása sikertelen, mivel nem található: %1 -- -- -- Failed to open database file %1: not a plain file -- Az adatbázisfájl megnyitása sikertelen, mivel nem egyszerű fájl: %1 -- -- -- Failed to open database file %1: not readable -- Az adatbázisfájl megnyitása sikertelen, mivel nem olvasható: %1 -- -- -- Enter password to unlock %1: -- Jelszó megadása a feloldásához: %1 -- -- -- Invalid YubiKey slot %1 -- Érvénytelen YubiKey foglalat: %1 -- -- -- Enter password to encrypt database (optional): -- Adjon meg egy jelszót az adatbázis titkosításához (válaszható): -- -- -- HIBP file, line %1: parse error -- HIBP fájl, %1. sor: feldolgozási hiba -- -- -- Secret Service Integration -- Titkosító szolgáltatás integrációja -- -- -- User name -- Felhasználónév -- -- -- Password for '%1' has been leaked %2 time(s)! -- Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1”!Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1”! -- -- -- Invalid password generator after applying all options -- Érvénytelen jelszó-előállító az összes beállítás alkalmazása után -- -- -- Show the protected attributes in clear text. -- A védett attribútumok megjelenítése egyszerű szövegként. -- -- -- Browser Plugin Failure -- Hiba a böngészőbeépülőben -- -- -- Could not save the native messaging script file for %1. -- Nem lehet menteni a natív üzenetküldő parancsfájlt: %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- A megadott attribútum másolása a vágólapra. Ha nincs megadva, akkor a „password” az alapértelmezés. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- A jelenlegi TOTP másolása a vágólapra (a „-a totp”-vel megegyezően). -- -- -- Copy an entry's attribute to the clipboard. -- Egy bejegyzés attribútumának másolása a vágólapra. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- HIBA: Vagy a „--attribute” vagy a „--totp” adható meg egyszerre, mindkettő nem. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- HIBA: a(z) %1 attribútum kétértelmű, megeegyezik ezzel: %2. -- -- -- Attribute "%1" not found. -- Az attribútum nem található: „%1”. -- -- -- Entry's "%1" attribute copied to the clipboard! -- A bejegyzés attribútuma a vágólapra másolva: „%1”. -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- A Yubikey foglalattal és egy választható sorozatszámmal lehet az adatbázist elérni (pl. 1:7370001). -- -- -- slot[:serial] -- foglalat[:sorozatszám] -- -- -- Target decryption time in MS for the database. -- Megcélzott visszafejtési idő a ms-ban az adatbázis számára. -- -- -- time -- idő -- -- -- Set the key file for the database. -- Adja meg a kulcsfájlt az adatbázis számára. -- -- -- Set a password for the database. -- Adjon meg jelszót az adatbázis számára. -- -- -- Invalid decryption time %1. -- Érvénytelen visszafejtési idő: %1. -- -- -- Target decryption time must be between %1 and %2. -- A megcélzott visszafejtési idő %1 és %2 között kell legyen. -- -- -- Failed to set database password. -- Az adatbázisjelszó beállítása sikertelen. -- -- -- Benchmarking key derivation function for %1ms delay. -- Kulcsszármaztató függvény teljesítménymérése 1% ms-os késleltetéssel. -- -- -- Setting %1 rounds for key derivation function. -- %1 forduló beállítása a kulcsszármaztató függvény számára. -- -- -- error while setting database key derivation settings. -- Hiba az adatbázis kulcsszármaztató beállításainak módosítása közben. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Exportálási formátum. Lehetőségek: „xml” vagy „csv”. Az alapértelmezett az „xml”. -- -- -- Unable to import XML database: %1 -- Az XML adatbázis nem importálható: %1 -- -- -- Show a database's information. -- Adatbázis információinak megjelenítése. -- -- -- UUID: -- UUID: -- -- -- Name: -- Név: -- -- -- Description: -- Leírás: -- -- -- Cipher: -- Titkosító: -- -- -- KDF: -- Kulcsszármaztató függvény (KDF): -- -- -- Recycle bin is enabled. -- Kuka engedélyezve. -- -- -- Recycle bin is not enabled. -- A kuka nincs engedélyezve. -- -- -- Invalid command %1. -- Érvénytelen parancs: %1. -- -- -- Invalid YubiKey serial %1 -- Érvénytelen YubiKey sorozatszám: %1 -- -- -- Please touch the button on your YubiKey to continue… -- A folytatáshoz érintse meg a gombot a YubiKey-en… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Valóban üres jelszót szeretne megadni az adatbázis számára? [y/N]: -- -- -- Repeat password: -- Jelszó ismétlése: -- -- -- Error: Passwords do not match. -- Hiba: A jelszavak nem egyeznek. -- -- -- All clipping programs failed. Tried %1 -- -- Az összes vágóprogram sikertelen. Próbálkozás: %1 -- -- -- -- AES (%1 rounds) -- AES (%1 forduló) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Teljesítményvizsgálat: %1 késleltetés -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- útvonal az egyéni helyi beállítófájlhoz -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- FIGYELEM: Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet --hogy nem fog támogatni a jövőben. -- --Fontolja meg, hogy új kulcsfájlt állítson elő. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 forduló, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – ajánlott) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- Unsupported key file version: %1 -- Nem támogatott kulcsfájlverzió: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Nem egyezik az ellenőrzőösszeg. A kulcsfájl megsérülhetett. -- -- -- Unexpected key file data! Key file may be corrupt. -- Váratlan kulcsfájladatok. A kulcsfájl megsérülhetett. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Belső zlib hiba a tömörítés közben: -- -- -- Error writing to underlying device: -- Hiba az alárendelt eszközre való írás közben: -- -- -- Error opening underlying device: -- Hiba az alárendelt eszköz megnyitásakor: -- -- -- Error reading data from underlying device: -- Hiba az alárendelt eszközről történő adatolvasás során: -- -- -- Internal zlib error when decompressing: -- Belső zlib hiba kibontás közben: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- A gzip formátum nem támogatott a zlib ezen verziójában. -- -- -- Internal zlib error: -- Belső zlib hiba: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- A jelentésekből kizárt bejegyzések megjelenítése. -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Vigye az egérmutatót az ok felé a további részletek megjelenítéséhez. Kattintson duplán a bejegyzésekre a szerkesztéshez. -- -- -- Bad -- Password quality -- Rossz -- -- -- Bad — password must be changed -- Rossz – a jelszót meg kell változtatni -- -- -- Poor -- Password quality -- Silány -- -- -- Poor — password should be changed -- Silány – a jelszót meg kellene változtatni -- -- -- Weak -- Password quality -- Gyenge -- -- -- Weak — consider changing the password -- Gyenge - Megfontolandó a jelszó változtatása -- -- -- (Excluded) -- (Kizárva) -- -- -- This entry is being excluded from reports -- Ez a bejegyzés ki van zárva a jelentésekből. -- -- -- Please wait, health data is being calculated... -- Türelem, az állapotadatok kiszámítása folyamatban… -- -- -- Congratulations, everything is healthy! -- Gratulálunk, az állapotfelmérés mindent rendben talált! -- -- -- Title -- Cím -- -- -- Path -- Útvonal -- -- -- Score -- Pontszám -- -- -- Reason -- Ok -- -- -- Edit Entry... -- Bejegyzés szerkesztése… -- -- -- Exclude from reports -- Kizárás a jelentésekből -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- VIGYÁZAT: Ez a jelentés információkat küld a „Have I Been Pwned” online szolgáltatás számára (https://haveibeenpwned.com). Ha folytatja, az adatbázis jelszavai kriptográfiailag hasítva lesznek és ezen hasítóértékek első öt karaktere biztonságosan továbbítva lesz. Az adatbázis biztonságban marad és nem lehet felépíteni ezekből az információkból. De az elküldött jelszavak száma és a küldésre használt IP cím látható lesz e szolgáltatás számára. -- -- -- Perform Online Analysis -- Online vizsgálat vérehajtása -- -- -- Also show entries that have been excluded from reports -- A jelentésekből kizárt bejegyzések megjelenítése. -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Ez a KeePassXC build nem tartalmaz hálózati funkciókat. A jelszavak „Have I Been Pwned” szolgáltatással való ellenőrzéshez hálózati funkciókra van szükség. -- -- -- Congratulations, no exposed passwords! -- Gratulálunk, nincsenek felfedett jelszavak! -- -- -- Title -- Cím -- -- -- Path -- Útvonal -- -- -- Password exposed… -- Felfedett jelszavak… -- -- -- (Excluded) -- (Kizárva) -- -- -- This entry is being excluded from reports -- Ez a bejegyzés ki van zárva a jelentésekből. -- -- -- once -- egyszer -- -- -- up to 10 times -- 10 alatt -- -- -- up to 100 times -- 100 alatt -- -- -- up to 1000 times -- 1000 alatt -- -- -- up to 10,000 times -- 10.000 alatt -- -- -- up to 100,000 times -- 100.000 alatt -- -- -- up to a million times -- 1 millió alatt -- -- -- millions of times -- több millliószor -- -- -- Edit Entry... -- Bejegyzés szerkesztése… -- -- -- Exclude from reports -- Kizárás a jelentésekből -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- További információk a hibaikonokkal rendelkező vonalak fölé vitt egérrel nyerhetők. -- -- -- Name -- Név -- -- -- Value -- Érték -- -- -- Please wait, database statistics are being calculated... -- Türelem, az adatbázis-statisztikák kiszámítása folyamatban… -- -- -- Database name -- Adatbázisnév -- -- -- Description -- Leírás -- -- -- Location -- Hely -- -- -- Last saved -- Legutóbb mentve -- -- -- Unsaved changes -- Nem mentett módosítsok -- -- -- yes -- igen -- -- -- no -- nem -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Az adatbázis módosítva lett, de még nem lett lemezre mentve. -- -- -- Number of groups -- Csoportszám -- -- -- Number of entries -- Bejegyzésszám -- -- -- Number of expired entries -- Lejárt bejegyzések száma -- -- -- The database contains entries that have expired. -- Az adatbázis lejárt bejegyzéseket tartalmaz. -- -- -- Unique passwords -- Egyedi jelszavak -- -- -- Non-unique passwords -- Nem egyedi jelszavak -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- A jelszavak több, mint 10%-a újrahasznosított. Egyedi jelszavakat kellene használni, ahol csak lehetséges. -- -- -- Maximum password reuse -- Maximális jelszó-újrahasznosítás -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Néhány jelszó több, mint háromszor lett újrahasznosítva. Egyedi jelszavakat kellene használni, ahol csak lehetséges. -- -- -- Number of short passwords -- Rövid jelszavak száma -- -- -- Recommended minimum password length is at least 8 characters. -- A jelszavak javasolt minimális hosszúsága legalább 8 karakter. -- -- -- Number of weak passwords -- Gyenge jelszavak száma -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Olyan hosszú és véletlenszerű jelszavak használata javasolt, melyek besorolása „jó” és „kiváló”. -- -- -- Entries excluded from reports -- Jelentésekből kizárt bejegyzések -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- A bejegyzések jelentésekből való kizárása – mivel ismerten gyenge jelszavakat tartalmaznak – nem feltétlenül jelent problémát, de nem szabad szem elől veszteni őket. -- -- -- Average password length -- Átlagos jelszóhossz -- -- -- %1 characters -- %1 karakter -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Az átlagos jelszóhossz kevesebb, mint 10 karakter. A hosszabb jelszavak nagyobb biztonságot szavatolnak. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Ügynökkapcsolódás sikertelen. -- -- -- Agent protocol error. -- Ügynök protokoll hiba. -- -- -- No agent running, cannot add identity. -- Nincs működő ügynök, nem adható hozzá identitás. -- -- -- No agent running, cannot remove identity. -- Nincs működő ügynök, nem távolítható el identitás. -- -- -- Agent refused this identity. Possible reasons include: -- Az ügynök visszautasította ezt az identitást. Lehetséges okok: -- -- -- The key has already been added. -- A kulcs már hozzá lett adva. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Az ügynök nem támogatja a korlátozott élettartamot (lásd a lehetőségek). -- -- -- A confirmation request is not supported by the agent (check options). -- Az ügynök nem támogatja a visszaigazolási kérelmet (lásd a lehetőségeket). -- -- -- Key identity ownership conflict. Refusing to add. -- Kulcs-identitás tulajdonosi konfliktus. Hozzáadás visszautasítva. -- -- -- No agent running, cannot list identities. -- Nincs működő ügynök, identitások nem listázhatóak. -- -- -- -- SearchHelpWidget -- -- Search Help -- Keresés a súgóban -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- A keresési kifejezések a következőek: [módosítók][mező:]["]kifejezés["] -- -- -- Every search term must match (ie, logical AND) -- Az összes kifejezéssel egyeznie kell (azaz logikai ÉS) -- -- -- Modifiers -- Módosítók -- -- -- exclude term from results -- kifejezés kihagyása a találatok közül -- -- -- match term exactly -- pontos egyezés minden kifejezésre -- -- -- use regex in term -- regex használata a kifejezésben -- -- -- Fields -- Mezők -- -- -- Term Wildcards -- Kifejezés helyettesítő karakterei -- -- -- match anything -- illeszkedés bármire -- -- -- match one -- illeszkedés egyre -- -- -- logical OR -- logikai VAGY -- -- -- Examples -- Példák -- -- -- -- SearchWidget -- -- Search -- Keresés -- -- -- Limit search to selected group -- Keresés korlátozása a kijelölt csoportra -- -- -- Search Help -- Keresés a súgóban -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Keresés (%1)… -- -- -- Case sensitive -- Nagy- és kisbetű érzékeny -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Beállítások -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeepassXC Freedesktop.org titkosító szolgáltatás integrációjának engedélyezése -- -- -- General -- Általános -- -- -- Show notification when credentials are requested -- Értesítés megjelenítése hitelesítési adatok kérésekor -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Ha a kuka engedélyezve van az adatbázis számára, a bejegyzések a kukába lesznek mozgatva. Egyébként pedig megerősítés nélkül törlése kerülnek.</p><p>Továbbra is megerősítés szükséges az egymáshoz kapcsoló bejegyzések törléséhez.</p></body></html> -- -- -- Exposed database groups: -- Nyitott adatbáziscsoportok: -- -- -- Authorization -- Engedélyezés -- -- -- These applications are currently connected: -- Ezek az alkalmazások kapcsolódnak jelenleg: -- -- -- Don't confirm when entries are deleted by clients -- Nincs megerősítés a bejegyzések kliensek által végrehajtott törlésekor -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Hiba:</b> A DBus-hoz csatlakozás sikertelen. Ellenőrizze a DBus beállításokat. -- -- -- <b>Warning:</b> -- <b>Figyelem:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Mentse el a módosításokat a beépülő aktiválásához és ezen rész szerkesztésének engedélyezéséhez. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktív -- -- -- Allow export -- Exportálás engedélyezése -- -- -- Allow import -- Importálás engedélyezése -- -- -- Own certificate -- Saját tanúsítvány -- -- -- Fingerprint: -- Ujjlenyomat: -- -- -- Certificate: -- Tanúsítvány: -- -- -- Signer -- Aláíró -- -- -- Key: -- Kulcs: -- -- -- Generate -- Előállítás -- -- -- Import -- Importálás -- -- -- Export -- Exportálás -- -- -- Imported certificates -- Importált tanúsítványok -- -- -- Trust -- Megbízható -- -- -- Ask -- Kérdéses -- -- -- Untrust -- Megbízhatatlan -- -- -- Remove -- Eltávolítás -- -- -- Path -- Útvonal -- -- -- Status -- Állapot -- -- -- Fingerprint -- Ujjlenyomat -- -- -- Certificate -- Tanúsítvány -- -- -- Trusted -- Megbízható -- -- -- Untrusted -- Megbízhatatlan -- -- -- Unknown -- Ismeretlen -- -- -- key.share -- Filetype for KeeShare key -- kulcs.share -- -- -- KeeShare key file -- KeeShare kulcsfájl -- -- -- All files -- Minden fájl -- -- -- Select path -- Útvonal kijelölése -- -- -- Exporting changed certificate -- Módosult tanúsítványok exportálása -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Az exportált tanúsítvány nem egyezik meg a jelenleg használattal. Exportálható a jelenlegi? -- -- -- Signer: -- Aláíró: -- -- -- Allow KeeShare imports -- KeeShare importálás engedélyezése -- -- -- Allow KeeShare exports -- KeeShare exportálás engedélyezése -- -- -- Only show warnings and errors -- Csak figyelmeztetések és hibák megjelenítése -- -- -- Key -- Kulcs -- -- -- Signer name field -- Aláíró neve mező -- -- -- Generate new certificate -- Új tanúsítvány előállítása -- -- -- Import existing certificate -- Meglévő tanúsítvány importálása -- -- -- Export own certificate -- Saját tanúsítvány exportálása -- -- -- Known shares -- Ismert megosztások -- -- -- Trust selected certificate -- Kijelölt tanúsítvány megbízhatóvá minősítése -- -- -- Ask whether to trust the selected certificate every time -- Kérdés a kijelölt tanúsítvány megbízhatóságáról minden alkalommal -- -- -- Untrust selected certificate -- Kijelölt tanúsítvány megbízhatatlanná minősítése -- -- -- Remove selected certificate -- Kijelölt tanúsítvány törlése -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Az aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva -- -- -- Could not write export container (%1) -- Nem írható az exportálási tároló (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Az aláírás nem ágyazható be: A fájl nem nyitható meg írásra (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Az aláírás nem ágyazható be: A fájl nem írható (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Az adatbázis nem ágyazható be: A fájl nem nyitható meg írásra (%1) -- -- -- Could not embed database: Could not write file (%1) -- Az adatbázis nem ágyazható be: A fájl nem írható (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- A nem aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva -- -- -- Could not write export container -- Az exportálási tároló nem írható -- -- -- Unexpected export error occurred -- Váratlan exportálás hiba történt -- -- -- -- ShareImport -- -- Import from container without signature -- Importálás a tárolóból aláírás nélkül -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Nem ellenőrizhető a megosztott tároló forrása, mivel nincs aláírva. Valóban importálható: %1? -- -- -- Import from container with certificate -- Importálás a tárolóból aláírással -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Megbízhatónak minősíthető a(z) %1, melynek ujjlenyomata %2 / %3? {1 ?} {2 ?} -- -- -- Not this time -- Most nem -- -- -- Never -- Soha -- -- -- Always -- Mindig -- -- -- Just this time -- Csak most -- -- -- Signed share container are not supported - import prevented -- Az aláírt tárolók nem támogatottak – az importálás megakadályozva -- -- -- File is not readable -- A fájl nem olvasható -- -- -- Invalid sharing container -- Érvénytelen megosztási tároló -- -- -- Untrusted import prevented -- Nem megbízható importálás megakadályozva -- -- -- Successful signed import -- Sikeres aláírt importálás -- -- -- Unsigned share container are not supported - import prevented -- A nem aláírt tárolók nem támogatottak – az importálás megakadályozva -- -- -- Successful unsigned import -- Sikeres aláíratlan importálás -- -- -- File does not exist -- A fájl nem létezik -- -- -- Unknown share container type -- Ismeretlen megosztási tárolótípus -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- %1 importálása sikeretlen (%2) -- -- -- Import from %1 successful (%2) -- %1 importálása sikeres (%2) -- -- -- Imported from %1 -- Importálva innen: %1 -- -- -- Export to %1 failed (%2) -- %1 exportálása sikertelen (%2) -- -- -- Export to %1 successful (%2) -- Sikeres exportálás: %1 (%2) -- -- -- Export to %1 -- Exportálás: %1 -- -- -- Multiple import source path to %1 in %2 -- Több importálási forrásútvonal ehhez: %1, itt: %2 -- -- -- Conflicting export target path %1 in %2 -- Ütköző %1 exportálási célútvonal itt: %2 -- -- -- -- TotpDialog -- -- Timed Password -- Időalapú jelszó -- -- -- 000000 -- 000000 -- -- -- Copy -- Másolás -- -- -- Expires in <b>%n</b> second(s) -- <b>%n</b> másodperc múlva lejár<b>%n</b> másodperc múlva lejár -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Másolás -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- MEGJEGYZÉS: Ezek a TOTP beállítások egyéniek, és lehet hogy más hitelesítőkkel nem működnek. -- -- -- There was an error creating the QR code. -- Hiba történt a QR-kód létrehozásakor -- -- -- Closing in %1 seconds. -- Bezárás %1 másodperc után. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP beállítása -- -- -- Default RFC 6238 token settings -- Alapértelmezett RFC 6238-jelsor beállítás -- -- -- Steam token settings -- Adatfolyam jelsorbeállítás -- -- -- Use custom settings -- Egyéni beállítások alkalmazása -- -- -- Custom Settings -- Egyéni beállítások -- -- -- Time step: -- Időléptetés: -- -- -- sec -- Seconds -- mp -- -- -- Code size: -- Kódméret: -- -- -- Secret Key: -- Titkos kulcs: -- -- -- Secret key must be in Base32 format -- A titkos kulcs formátuma Base32 kell legyen -- -- -- Secret key field -- Titkos kulcs mező -- -- -- Algorithm: -- Algoritmus: -- -- -- Time step field -- Időlépés mező -- -- -- digits -- számok -- -- -- Invalid TOTP Secret -- Érvénytelen TOTP titok -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- A megadott kulcs érvénytelen. A kulcs Base32 formátumú kell legyen. --Példa: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- TOTP beállítások törlésének megerősítése -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Valóban törölhetőek a bejegyzés TOTP beállításai? -- -- -- -- URLEdit -- -- Invalid URL -- Érvénytelen URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Frissítések keresése -- -- -- Checking for updates... -- Frissítések keresése... -- -- -- Close -- Bezárás -- -- -- Update Error! -- Frissítési hiba! -- -- -- An error occurred in retrieving update information. -- Hiba történt a frissítési információk letöltése közben. -- -- -- Please try again later. -- Javasolt később újra megpróbálni. -- -- -- Software Update -- Szoftverfrissítés -- -- -- A new version of KeePassXC is available! -- Elérhető a KeePassXC egy újabb verziója! -- -- -- KeePassXC %1 is now available — you have %2. -- Elérhető a KeePassXC %1 verziója – a jenlegi verzió: %2. -- -- -- Download it at keepassxc.org -- Letöltés a keepassxc.org webhelyről. -- -- -- You're up-to-date! -- A jelenlegi verzió az aktuális. -- -- -- KeePassXC %1 is currently the newest version available -- A most elérhető legfrissebb KeePassXC verzió: %1 -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Máris elkezdhető a jelszavak titkosított tárolása a KeePassXC adatbázisban -- -- -- Create new database -- Új adatbázis létrehozása -- -- -- Open existing database -- Meglévő adatbázis megnyitása -- -- -- Import from KeePass 1 -- Importálás KeePass 1-ből -- -- -- Import from CSV -- Importálás CSV-ből -- -- -- Recent databases -- Legutóbb használt adatbázisok -- -- -- Welcome to KeePassXC %1 -- Üdvözöljük a KeePassXC %1 verzióban! -- -- -- Import from 1Password -- Importálás 1Password-ből -- -- -- Open a recent database -- Legutóbbi adatbázis megnyitása -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Beállított foglalat – %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] kihívás-válasz – foglalat %3 - %4 -- -- -- Press -- Lenyomás -- -- -- Passive -- Passzív -- -- -- %1 Invalid slot specified - %2 -- %1 Érvénytelen a megadott foglalat – %2 -- -- -- The YubiKey interface has not been initialized. -- A YubiKey csatolófelület nem lett elindítva. -- -- -- Hardware key is currently in use. -- A hardverkulcs jelenleg használatban van. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Nem található hardverkulcs ezzel a sorozatszámmal: %1. A folytatáshoz, kérjük, csatlakoztassa. -- -- -- Hardware key timed out waiting for user interaction. -- A hardverkulcs kifutott az időből a felhasználó interakcióra várva. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- USB-hiba történt a hardverkulcs elérése közben: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- A kihívás-válasz befejezése sikertelen. A pontos hiba: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Frissítés -- -- -- YubiKey Challenge-Response -- YubiKey kihívás-válasz -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Ha van <a href="https://www.yubico.com/">YubiKey</a> eszköze, akkor használhatja a további biztonság érdekében.</p><p>A YubiKey-hez szükséges, hogy az egyik foglalata <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 kihívás-válaszként</a> legyen beállítva.</p> -- -- -- Refresh hardware tokens -- Hardveres jelsorok frissítése -- -- -- Hardware key slot selection -- Hardverkulcsfoglalat kijelölése -- -- -- Could not find any hardware keys! -- Nem található semmilyen hardverkulcs. -- -- -- Selected hardware key slot does not support challenge-response! -- A kijelölt foglalatban lévő hardverkulcs nem támogatja a kihívás-választ. -- -- -- Detecting hardware keys… -- Hardverkulcsok felismerése… -- -- -- No hardware keys detected -- Nincsenek felismert hardverkulcsok. -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_id.ts keepassxc-2.6.4-patched/share/translations/keepassx_id.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_id.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_id.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7889 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Tentang KeePassXC -- -- -- About -- Tentang -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Laporkan bug di: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC didistribusikan di bawah Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan Anda) versi 3. -- -- -- Contributors -- Kontributor -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Lihat Semua Kontribusi di GitHub</a> -- -- -- Debug Info -- Info Awakutu -- -- -- Include the following information whenever you report a bug: -- Sertakan informasi berikut setiap Anda melaporkan bug: -- -- -- Copy to clipboard -- Salin ke papan klip -- -- -- Project Maintainers: -- Pengelola Proyek: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Terima kasih dari tim KeePassXC kepada debfx yang telah membuat KeepassX original. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Gunakan OpenSSH untuk Windows dari pada Pageant -- -- -- Enable SSH Agent integration -- Aktifkan Integrasi Agen SSH -- -- -- SSH_AUTH_SOCK value -- Nilai SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Timpa SSH_AUTH_SOCK -- -- -- (empty) -- (kosong) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Tidak ada soket Agen SSH yang ditemukan. Pastikan variabel sistem SSH_AUTH_SOCK ada atau atur timpaan. -- -- -- SSH Agent connection is working! -- Koneksi Agen SSH berhasil! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Pengaturan Aplikasi -- -- -- General -- Umum -- -- -- Security -- Keamanan -- -- -- Access error for config file %1 -- Galat akses untuk berkas konfigurasi %1 -- -- -- Icon only -- Hanya ikon -- -- -- Text only -- Hanya teks -- -- -- Text beside icon -- Teks di sebelah ikon -- -- -- Text under icon -- Teks di bawah ikon -- -- -- Follow style -- Ikuti gaya -- -- -- Reset Settings? -- Atur Ulang Pengaturan? -- -- -- Are you sure you want to reset all general and security settings to default? -- Apakah Anda yakin ingin mengatur ulang pengaturan umum dan keamanan ke nilai bawaan? -- -- -- Monochrome (light) -- Monokrom (terang) -- -- -- Monochrome (dark) -- Monokrom (gelap) -- -- -- Colorful -- Berwarna -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah Anda ingin memulai ulang sekarang? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Pengaturan Dasar -- -- -- Startup -- Memulai -- -- -- Start only a single instance of KeePassXC -- Hanya mulai satu aplikasi KeePassXC -- -- -- Minimize window at application startup -- Minimalkan jendela saat memulai aplikasi -- -- -- File Management -- Manajemen Berkas -- -- -- Backup database file before saving -- Cadangkan basisdata sebelum disimpan -- -- -- Automatically save after every change -- Otomatis simpan setelah setiap perubahan -- -- -- Automatically reload the database when modified externally -- Muat ulang basisdata secara otomatis ketika diubah secara eksternal -- -- -- Entry Management -- Manajemen Entri -- -- -- Use group icon on entry creation -- Gunakan ikon grup pada pembuatan entri -- -- -- Minimize instead of app exit -- sembunyikan jendela ke baki sistem -- -- -- Show a system tray icon -- Tampilkan ikon baki sistem -- -- -- Hide window to system tray when minimized -- Sembunyikan jendela ke baki sistem ketika diminimalkan -- -- -- Auto-Type -- Ketik-Otomatis -- -- -- Use entry title to match windows for global Auto-Type -- Gunakan judul entri untuk mencocokkan jendela untuk Ketik-Otomatis global -- -- -- Use entry URL to match windows for global Auto-Type -- Gunakan URL entri untuk mencocokkan jendela untuk Ketik-Otomatis global -- -- -- Always ask before performing Auto-Type -- Selalu bertanya sebelum menjalankan Ketik-Otomatis -- -- -- ms -- Milliseconds -- md -- -- -- Movable toolbar -- Bilah perkakas dapat dipindah -- -- -- Remember previously used databases -- Ingat basisdata yang sebelumnya digunakan -- -- -- Load previously open databases on startup -- Muat basisdata yang sebelumnya terbuka saat memulai -- -- -- Remember database key files and security dongles -- Ingat berkas kunci dan dongle kemanan -- -- -- Check for updates at application startup once per week -- Periksa pembaruan saat memulai aplikasi sekali seminggu -- -- -- Include beta releases when checking for updates -- Termasuk rilis beta saat memeriksa pembaruan -- -- -- Language: -- Bahasa: -- -- -- (restart program to activate) -- (mulai ulang program untuk mengaktifkan) -- -- -- Minimize window after unlocking database -- Minimalkan jendela setelah membuka basisdata -- -- -- Minimize when opening a URL -- Minimalkan saat membuka URL -- -- -- Hide window when copying to clipboard -- Sembunyikan jendela saat menyalin ke papan klip -- -- -- Minimize -- Minimalkan -- -- -- Drop to background -- Beralih ke latar belakang -- -- -- Favicon download timeout: -- Batas waktu mengunduh favicon: -- -- -- Website icon download timeout in seconds -- Batas waktu mengunduh ikon situs web dalam detik -- -- -- sec -- Seconds -- det -- -- -- Toolbar button style -- Gaya tombol bilah perkakas -- -- -- Language selection -- Pemilihan bahasa -- -- -- Global auto-type shortcut -- Pintasan ketik-otomatis global -- -- -- Auto-type character typing delay milliseconds -- Tundaan pengetikan karakter ketik-otomatis dalam milidetik -- -- -- Auto-type start delay milliseconds -- Tundaan mulai ketik-otomatis dalam milidetik -- -- -- Automatically launch KeePassXC at system startup -- Otomatis jalankan KeePassXC pada saat perangkat dinyalakan -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Simpan berkas basisdata secara aman (nonaktifkan jika Anda mengalami masalah dengan Dropbox, dll.) -- -- -- User Interface -- Antarmuka Pengguna -- -- -- Toolbar button style: -- Gaya tombol bilah alat: -- -- -- Use monospaced font for notes -- Gunakan fon monospace untuk catatan -- -- -- Tray icon type: -- Tipe ikon baki: -- -- -- Reset settings to default… -- Mengatur ulang pengaturan ke bawaan… -- -- -- Auto-Type typing delay: -- Tundaan pengetikan Ketik-Otomatis: -- -- -- Global Auto-Type shortcut: -- Pintasan Ketik-Otomatis global: -- -- -- Auto-Type start delay: -- Tundaan mulai Ketik-Otomatis: -- -- -- Automatically save when locking database -- Otomatis simpan saat mengunci basisdata -- -- -- Automatically save non-data changes when locking database -- Otomatis simpan perubahan non-data saat mengunci basisdata -- -- -- Tray icon type -- Tipe ikon baki -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Waktu Kedaluwarsa -- -- -- Clear clipboard after -- Kosongkan papan klip setelah -- -- -- sec -- Seconds -- det -- -- -- Lock databases after inactivity of -- Kunci basisdata setelah tidak aktif selama -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Lupakan TouchID setelah tidak aktif selama -- -- -- Convenience -- Kenyamanan -- -- -- Lock databases when session is locked or lid is closed -- Kunci basisdata ketika sesi dikunci atau lid ditutup -- -- -- Forget TouchID when session is locked or lid is closed -- Lupakan TouchID ketika sesi dikunci atau lid ditutup -- -- -- Lock databases after minimizing the window -- Kunci basisdata setelah meminimalkan jendela -- -- -- Re-lock previously locked database after performing Auto-Type -- Kunci ulang basisdata yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis -- -- -- Hide passwords in the entry preview panel -- Sembunyikan sandi di panel pratinjau entri -- -- -- Hide entry notes by default -- Sembunyikan catatan secara bawaan -- -- -- Privacy -- Privasi -- -- -- Use DuckDuckGo service to download website icons -- Gunakan layanan DuckDuckGo untuk mengunduh ikon situs web -- -- -- Clipboard clear seconds -- Detik menghapus papan klip -- -- -- Touch ID inactivity reset -- Atur ulang Touch ID setelah tidak aktif -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Hapus kueri pencarian setelah -- -- -- Require password repeat when it is visible -- Membutuhkan pengulangan sandi ketika ruas bisa dilihat -- -- -- Hide passwords when editing them -- Sembunyikan sandi saat penyuntingan -- -- -- Use placeholder for empty password fields -- Gunakan placeholder untuk ruas sandi yang kosong -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Tidak bisa menemukan entri yang cocok dengan judul jendela: -- -- -- Auto-Type - KeePassXC -- Ketik-Otomatis - KeePassXC -- -- -- Auto-Type -- Ketik-Otomatis -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Sintaksis perintah Ketik-Otomatis Anda salah! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Perintah Ketik-Otomatis ini berisi waktu tunda yang sangat lama. Apakah Anda yakin ingin melanjutkan? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Perintah Ktik-Otomatis ini berisi tindakan tekan tombol dengan durasi yang sangat lambat. Apakah Anda yakin ingin melanjutkan? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Perintah Ketik-Otomatis ini berisi argumen yang diulang berkali-kali. Apakah Anda yakin ingin melanjutkan? -- -- -- Permission Required -- Membutuhkan Izin -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC membutuhkan izin Aksesibilitas untuk menjalankan Ketik-Otomatis entri. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Jendela -- -- -- Sequence -- Urutan -- -- -- Default sequence -- Urutan baku -- -- -- -- AutoTypeMatchModel -- -- Group -- Grup -- -- -- Title -- Judul -- -- -- Username -- Nama pengguna -- -- -- Sequence -- Urutan -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Salin &nama pengguna -- -- -- Copy &password -- Salin &sandi -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Membutuhkan Izin -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC membutuhkan izin Aksesibilitas dan Perekaman Layar untuk menjalankan Ketik-Otomatis secara global. Perekaman Layar dibutuhkan untuk mengakses judul jendela dari entri terkait. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Ketik-Otomatis - KeePassXC -- -- -- Select entry to Auto-Type: -- Pilih entri untuk Ketik-Otomatis: -- -- -- Search... -- Cari... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Permintaan Akses Peramban -- -- -- %1 is requesting access to the following entries: -- %1 meminta akses ke entri berikut ini: -- -- -- Remember access to checked entries -- Ingat akses ke entri yang dipilih -- -- -- Remember -- Ingat -- -- -- Allow access to entries -- Izinkan akses ke entri -- -- -- Allow Selected -- Izinkan Yang Dipilih -- -- -- Deny All -- Tolak Semua -- -- -- Disable for this site -- Nonaktifkan untuk situs ini -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- -- -- -- Ok -- Ok -- -- -- Cancel -- Batal -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Ada beberapa basisdata yang terbuka. --Silakan pilih basisdata yang digunakan untuk menyimpan kredensial. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Permintaan asosiasi kunci baru -- -- -- Save and allow access -- Simpan dan izinkan akses -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Timpa kunci yang ada? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Kunci enkripsi bersama dengan nama "%1" sudah ada. --Apakah Anda ingin menimpanya ulang? -- -- -- KeePassXC: Update Entry -- KeePassXC: Perbarui Entri -- -- -- Do you want to update the information in %1 - %2? -- Apakah Anda ingin memperbarui informasi di dalam %1 - %2? -- -- -- Abort -- Batal -- -- -- Converting attributes to custom data… -- Mengkonversi atribut ke data khusus... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Konversi atribut KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Berhasil mengonversi atribut dari %1 entri. --Memindahkan %2 ke data khusus. -- -- -- Successfully moved %n keys to custom data. -- Berhasil memindahkan %n kunci ke data khusus. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Tidak ada entri dengan atribut KeePassHTTP yang ditemukan! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Basisdata yang aktif tidak berisi entri dengan atribut KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Mendeteksi pengaturan integrasi peramban lama -- -- -- KeePassXC: Create a new group -- KeePassXC: Buat grup baru -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Permintaan untuk membuat grup "%1" telah diterima. --Apakah Anda ingin membuat grup ini? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Pengaturan KeePassXC-Browser Anda perlu dipindahkan ke dalam pengaturan basisdata. --Hal ini diperlukan untuk mempertahankan koneksi peramban Anda saat ini. --Apakah Anda ingin memindahkan pengaturan yang ada sekarang? -- -- -- Don't show this warning again -- Jangan tampilkan peringatan ini lagi -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Anda telah menerima permintaan asosiasi untuk basisdata berikut: --%1 -- --Berikan koneksi nama yang unik atau ID, sebagai contoh: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Ini dibutuhkan untuk mengakses basisdata Anda menggunakan KeePassXC-Browser -- -- -- Enable browser integration -- Aktifkan integrasi peramban -- -- -- General -- Umum -- -- -- Browsers installed as snaps are currently not supported. -- Peramban yang dipasang sebagai snap saat ini tidak didukung. -- -- -- Enable integration for these browsers: -- Aktifkan integrasi untuk peramban ini: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Tampilkan notifikasi saat permintaan kredensial -- -- -- Request to unlock the database if it is locked -- Minta untuk membuka basisdata jika terkunci -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Hanya entri dengan skema yang sama (http://, https://, ...). -- -- -- Match URL scheme (e.g., https://...) -- Cocok skema URL (mis., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Hanya tampilkan kecocokan terbaik untuk URL tertentu bukan semua entri untuk keseluruhan domain. -- -- -- Return only best-matching credentials -- Hanya tampilkan kredensial dengan kecocokan terbaik -- -- -- Returns expired credentials. String [expired] is added to the title. -- Mengembalikan kredensial yang kedaluwarsa. Karakter [kedaluwarsa] ditambahkan ke judul. -- -- -- Allow returning expired credentials -- Izinkan pengembalian kredensial kedaluwarsa -- -- -- All databases connected to the extension will return matching credentials. -- Semua basisdata yang terhubung ke ekstensi akan mengembalikan kredensial yang cocok. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Cari kredensial yang cocok di semua basisdata yang terbuka -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Urutkan kredensial yang cocok berdasarkan judul -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Urutkan kredensial yang cocok berdasarkan nama pengguna -- -- -- Advanced -- Tingkat Lanjut -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Jangan pernah bertanya sebelum mengakses kredensial -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Jangan pernah bertanya sebelum memperbarui kredensial -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Jangan minta izin untuk Otentikasi Dasar HTTP -- -- -- Automatically creating or updating string fields is not supported. -- Membuat atau memperbarui ruas lema secara otomatis tidak didukung. -- -- -- Return advanced string fields which start with "KPH: " -- Tampilkan ruas lema tingkat lanjut yang dimulai dengan "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Jangan pernah tampilkan popup yang menyarankan migrasi pengaturan KeePassHTTP versi lama. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Jangan ingatkan untuk migrasi pengaturan KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Otomatis perbarui jalur binari KeePassXC atau keepassxc-proxy ke skrip perpesanan native saat memulai. -- -- -- Update native messaging manifest files at startup -- Perbarui berkas manifest perpesanan bawaan saat memulai -- -- -- Use a custom proxy location if you installed a proxy manually. -- Gunakan lokasi proksi khusus jika Anda memasang proksi secara manual. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Gunakan lokasi proksi khusus: -- -- -- Custom proxy location field -- Ruas lokasi proksi khusus -- -- -- Browser for custom proxy file -- Peramban untuk berkas proksi khusus -- -- -- Browse... -- Button for opening file dialog -- Telusuri... -- -- -- Use a custom browser configuration location: -- Gunakan lokasi konfigurasi peramban khusus: -- -- -- Browser type: -- Tipe peramban: -- -- -- Toolbar button style -- Gaya tombol bilah perkakas -- -- -- Config Location: -- Lokasi Konfigurasi: -- -- -- Custom browser location field -- Ruas lokasi peramban khusus -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Jelajahi jalur peramban khusus -- -- -- Custom extension ID: -- ID ekstensi khusus: -- -- -- Custom extension ID -- ID ekstensi khusus -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Karena adanya sandbox Snap, Anda harus menjalankan skrip untuk mengaktifkan integrasi peramban.<br />Anda bisa mendapatkan skrip ini dari %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Membutuhkan KeePassXC-Browser agar integrasi peramban bisa bekerja. <br />Silakan unduh untuk %1 dan %2 dan %3. %4 -- -- -- Please see special instructions for browser extension use below -- Lihat instruksi untuk penggunaan browser extension -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Error:</b>Lokasi proxy khusus tidak dapat ditemukan!<br/>Integrasi browser TIDAK DAPAT BEKERJA tanpa aplikasi proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Peringatan:</b> Opsi berikut bisa berbahaya! -- -- -- Executable Files -- Berkas Executable -- -- -- All Files -- Semua Berkas -- -- -- Select custom proxy location -- Pilih lokasi proksi khusus -- -- -- Select native messaging host folder location -- Pilih lokasi folder hos perpesanan bawaan -- -- -- -- CloneDialog -- -- Clone Options -- Opsi Penggandaan -- -- -- Append ' - Clone' to title -- Tambahkan ' - Salinan' ke judul -- -- -- Replace username and password with references -- Ganti nama pengguna dan sandi dengan referensi -- -- -- Copy history -- Salin riwayat -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Impor ruas CSV -- -- -- filename -- nama berkas -- -- -- size, rows, columns -- ukuran, baris, kolom -- -- -- Encoding -- Enkode -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Teks dikualifikasikan oleh -- -- -- Fields are separated by -- Ruas dipisahkan dengan -- -- -- Comments start with -- Komentar dimulai dengan -- -- -- Consider '\' an escape character -- Anggap '\' sebagai karakter escape -- -- -- Preview -- Pratinjau -- -- -- Imported from CSV file -- Diimpor dari berkas CSV -- -- -- Original data: -- Data original: -- -- -- Error -- Galat -- -- -- Error(s) detected in CSV file! -- Mendeteksi kesalahan di dalam berkas CSV! -- -- -- [%n more message(s) skipped] -- [%n pesan dilewati] -- -- -- CSV import: writer has errors: --%1 -- Impor CSV: galat penulis: --%1 -- -- -- Text qualification -- Kualifikasi teks -- -- -- Field separation -- Pemisahan ruas -- -- -- Number of header lines to discard -- Jumlah baris tajuk untuk dibuang -- -- -- CSV import preview -- Pratinjau impor CSV -- -- -- Column Association -- Asosiasi Kolom -- -- -- Last Modified -- Terakhir Diubah -- -- -- Password -- Sandi -- -- -- Created -- Dibuat -- -- -- Notes -- Catatan -- -- -- Title -- Judul -- -- -- Group -- Grup -- -- -- URL -- URL -- -- -- Username -- Nama pengguna -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- Kolom %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolom -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte -- -- -- %n row(s) -- %n baris -- -- -- -- Database -- -- File %1 does not exist. -- Berkas %1 tidak ada. -- -- -- Unable to open file %1. -- Tidak bisa membuka berkas %1. -- -- -- Error while reading the database: %1 -- Terjadi kesalahan saat membaca basisdata: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Berkas tidak bisa disimpan karena dibuka dalam mode baca-saja. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Kunci tidak ditransformasikan. Ini adalah bug, harap laporkan ke pengembang! -- -- -- %1 --Backup database located at %2 -- %1 --Lokasi cadangan basisdata ada di %2 -- -- -- Could not save, database does not point to a valid file. -- Tidak bisa menyimpan, basisdata tidak merujuk ke berkas yang valid. -- -- -- Could not save, database file is read-only. -- Tidak bisa menyimpan, basisdata memiliki atribut hanya-baca. -- -- -- Database file has unmerged changes. -- Berkas basisdata memiliki perubahan yang belum digabung. -- -- -- Recycle Bin -- Keranjang Sampah -- -- -- Passwords -- Root group name -- Sandi -- -- -- Database save is already in progress. -- Proses menyimpan basisdata sedang berjalan. -- -- -- Could not save, database has not been initialized! -- Tidak bisa menyimpan, basisdata belum aktif! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Buka Kunci Basisdata - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Berkas Kunci: -- -- -- Refresh -- Segarkan -- -- -- Don't show this warning again -- Jangan tampilkan peringatan ini lagi -- -- -- All files -- Semua Berkas -- -- -- Key files -- Berkas kunci -- -- -- Select key file -- Pilih berkas kunci -- -- -- Failed to open key file: %1 -- Gagal untuk membuka berkas kunci: %1 -- -- -- Unlock KeePassXC Database -- Buka Kunci Basisdata KeePassXC -- -- -- Enter Password: -- Masukkan Sandi: -- -- -- Password field -- Ruas sandi -- -- -- Hardware key slot selection -- Pemilihan slot kunci perangkat keras -- -- -- Browse for key file -- Telusuri berkas kunci -- -- -- Browse... -- Telusuri... -- -- -- Refresh hardware tokens -- Segarkan token perangkat keras -- -- -- Hardware Key: -- Kunci Perangkat Keras: -- -- -- Hardware key help -- Bantuan kunci perangkat keras -- -- -- TouchID for Quick Unlock -- TouchID untuk Buka Cepat -- -- -- Unlock failed and no password given -- Gagal membuka dan sandi tidak tersedia -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Membuka kunci basisdata gagal dan Anda tidak memasukkan kata sandi. --Apakah Anda ingin mencoba kembali dengan kata sandi "kosong"? --Untuk mencegah munculnya kesalahan ini, Anda harus ke "Pengaturan Basisdata / Keamanan" dan mengatur ulang kata sandi Anda. -- -- -- Retry with empty password -- Ulangi dengan sandi kosong -- -- -- Enter Additional Credentials (if any): -- Masukkan Kredensial Tambahan (jika ada): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Anda dapat menggunakan perangkat kunci keamanan seperti <strong>YubiKey</strong>atau<strong>OnlyKey</strong>dengan slot yang dikonfigurasi untuk HMAC-SHA1.</p> --<p>Klik untuk informasi lebih lanjut...</p> -- -- -- Key file help -- Bantuan berkas kunci -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Tidak bisa menggunakan berkas basisdata sebagai berkas kunci -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Anda tidak bisa menggunakan berkas basisdata Anda sebagai berkas kunci, --Jika Anda tidak memiliki berkas kunci, biarkan ruas tetap kosong. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- Berkas kunci untuk membuka basisdata -- -- -- Please touch the button on your YubiKey! -- Silakan sentuh tombol pada YubiKey Anda! -- -- -- Detecting hardware keys… -- Mendeteksi kunci perangkat keras… -- -- -- No hardware keys detected -- Tidak mendeteksi kunci perangkat keras -- -- -- Select hardware key… -- Pilih kunci perangkat keras… -- -- -- Old key file format -- Format berkas kunci lama -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Sandi -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Pengaturan Lanjutan -- -- -- General -- Umum -- -- -- Security -- Keamanan -- -- -- Encryption Settings -- Pengaturan Enkripsi -- -- -- Browser Integration -- Integrasi Peramban -- -- -- Database Credentials -- Kredensial Basisdata -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Pengaturan KeePassXC-Browser -- -- -- Stored keys -- Kunci tersimpan -- -- -- Remove -- Buang -- -- -- Delete the selected key? -- Hapus kunci yang dipilih? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Apakah Anda yakin ingin menghapus kunci yang dipilih? --Tindakan ini akan memutus koneksi ke pengaya peramban. -- -- -- Key -- Kunci -- -- -- Value -- Nilai -- -- -- Enable Browser Integration to access these settings. -- Aktifkan Integrasi Peramban untuk mengakses pengaturan ini. -- -- -- Disconnect all browsers -- Putuskan koneksi semua peramban -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Apakah Anda ingin memutus koneksi semua peramban? --Tindakan ini akan memutus koneksi ke pengaya peramban. -- -- -- KeePassXC: No keys found -- KeePassXC: Tidak ada kunci yang ditemukan -- -- -- No shared encryption keys found in KeePassXC settings. -- TIdak ada kunci enkripsi bersama yang ditemukan di dalam pengaturan KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Buang kunci dari basisdata -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC. -- -- -- Forget all site-specific settings on entries -- Lupakan semua pengaturan spesifik situs pada entri -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Apakah Anda ingin melupakan semua pengaturan spesifik situs pada semua entri? --Izin untuk mengakses entri akan dicabut. -- -- -- Removing stored permissions… -- Membuang perizinan yang disimpan... -- -- -- Abort -- Batal -- -- -- KeePassXC: Removed permissions -- KeePassXC: Buang izin -- -- -- Successfully removed permissions from %n entry(s). -- Berhasil membuang perizinan dari %n entri. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Tidak entri dengan izin yang ditemukan! -- -- -- The active database does not contain an entry with permissions. -- Basisdata aktif tidak berisi entri dengan izin. -- -- -- Move KeePassHTTP attributes to custom data -- Pindahkan atribut KeePassHTTP ke data khusus -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Apakah Anda ingin memindahkan semua data integrasi peramban lama ke standar baru? --Hal ini diperlukan untuk mempertahankan kompatibilitas dengan pengaya peramban. -- -- -- Stored browser keys -- Simpan kunci peramban -- -- -- Remove selected key -- Buang kunci yang dipilih -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Pindahkan atribut KeePassHTTP ke data khusus KeePassXC-Browser -- -- -- Refresh database root group ID -- Segarkan ID grup root basisdata -- -- -- Created -- Dibuat -- -- -- Refresh database ID -- Segarkan ID basisdata -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Apakah Anda yakin ingin menyegarkan ID basisdata? --Ini hanya diperlukan jika basisdata Anda adalah salinan dari basisdata yang lain dan ekstensi peramban tidak bisa tersambung. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Tambah proteksi tambahan... -- -- -- No password set -- Sandi belum di atur -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- PERINGATAN! Anda belum mengatur sandi. Menggunakan basisdata tanpa sandi amat sangat tidak disarankan! -- --Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? -- -- -- Continue without password -- Lanjutkan tanpa sandi -- -- -- No encryption key added -- Tidak ada kunci enkripsi yang ditambahkan -- -- -- You must add at least one encryption key to secure your database! -- Anda harus menambahkan paling tidak satu kunci enkripsi untuk mengamankan basisdata Anda! -- -- -- Unknown error -- Galat tidak diketahui -- -- -- Failed to change database credentials -- Gagal mengubah kredensial basisdata -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritma Enkripsi: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (bawaan) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Fungsi Derivasi Kunci: -- -- -- Transform rounds: -- Jumlah transformasi: -- -- -- Memory Usage: -- Penggunaan Memori: -- -- -- Parallelism: -- Paralelisme: -- -- -- Decryption Time: -- Waktu Dekripsi: -- -- -- ?? s -- ?? d -- -- -- Change -- Ubah -- -- -- Higher values offer more protection, but opening the database will take longer. -- Nilai yang lebih tinggi memberikan perlindungan lebih, tetapi membuka basisdata akan menjadi lebih lama. -- -- -- Database format: -- Format basisdata: -- -- -- This is only important if you need to use your database with other programs. -- Hal ini penting jika Anda ingin memuat basisdata menggunakan program lain. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (direkomendasikan) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- tidak berubah -- -- -- Number of rounds too high -- Key transformation rounds -- Jumlah transformasi terlalu tinggi -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Jumlah transformasi kunci yang Anda gunakan dengan Argon2 terlalu tinggi. -- --Jika Anda tetap mempertahankan jumlah setinggi ini, basisdata mungkin akan membutuhkan waktu berjam-jam, berhari-hari (atau bahkan lebih lama) untuk bisa dibuka! -- -- -- Understood, keep number -- Mengerti, tetap simpan -- -- -- Cancel -- Batal -- -- -- Number of rounds too low -- Key transformation rounds -- Jumlah transformasi terlalu rendah -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Jumlah transformasi kunci yang Anda gunakan dengan AES-KDF terlalu rendah. -- --Jika Anda tetap mempertahankan jumlah serendah ini, basisdata Anda mungkin akan menjadi terlalu mudah untuk diretas! -- -- -- KDF unchanged -- KDF tidak berubah -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Gagal mentransformasi kunci menggunakan parameter KDF baru; KDF tidak berubah. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- -- -- -- Change existing decryption time -- Ubah waktu dekripsi yang ada -- -- -- Decryption time in seconds -- Waktu dekripsi dalam detik -- -- -- Database format -- Format basisdata -- -- -- Encryption algorithm -- Algoritma enkripsi -- -- -- Key derivation function -- Fungi derivasi kunci -- -- -- Transform rounds -- -- -- -- Memory usage -- Penggunaan memori -- -- -- Parallelism -- Paralelisme -- -- -- ?? ms -- ?? md -- -- -- ? s -- ? d -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Entri Yang Diekspos -- -- -- Don't expose this database -- Jangan ekspos basisdata ini -- -- -- Expose entries under this group: -- Ekspos entri di bawah grup ini: -- -- -- Enable Secret Service to access these settings. -- Aktifkan Layanan Rahasia utnuk mengakses pengaturan ini. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Data Meta Basisdata -- -- -- Database name: -- Nama basisdata: -- -- -- Database description: -- Deskripsi basisdata: -- -- -- Default username: -- Nama pengguna baku: -- -- -- History Settings -- Pengaturan Riwayat -- -- -- Max. history items: -- Maks. item riwayat: -- -- -- Max. history size: -- Maks. ukuran riwayat: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Gunakan keranjang sampah -- -- -- Additional Database Settings -- Pengaturan Basisdata Tambahan -- -- -- Database name field -- Ruas nama basisdata -- -- -- Database description field -- Ruas deskripsi basisdata -- -- -- Default username field -- Ruas nama pengguna baku -- -- -- Maximum number of history items per entry -- Jumlah maksimum item riwayat per entri -- -- -- Maximum size of history per entry -- Ukuran maksimum riwayat per entri -- -- -- Delete Recycle Bin -- Hapus Keranjang Sampah -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Apakah Anda yakin ingin menghapus keranjang sampah dan semua isinya? --Tidakan ini tidak bisa diurungkan. -- -- -- (old) -- (lama) -- -- -- Enable compression (recommended) -- Aktifkan kompresi (direkomendasikan) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Berbagi -- -- -- Breadcrumb -- -- -- -- Type -- Tipe -- -- -- Path -- Jalur -- -- -- Last Signer -- Penanda Tangan Terakhir -- -- -- Certificates -- Sertifikat -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nama Basisdata: -- -- -- Description: -- Deskripsi: -- -- -- Database name field -- Ruas nama basisdata -- -- -- Database description field -- Ruas deskripsi basisdata -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Basisdata KeePass 2 -- -- -- All files -- Semua Berkas -- -- -- Open database -- Buka basisdata -- -- -- CSV file -- Berkas CSV -- -- -- Merge database -- Gabung basisdata -- -- -- Open KeePass 1 database -- Buka basisdata KeePass 1 -- -- -- KeePass 1 database -- Basisdata KeePass 1 -- -- -- Export database to CSV file -- Ekspor basisdata ke berkas CSV -- -- -- Writing the CSV file failed. -- Gagal membuat berkas CSV. -- -- -- Database creation error -- Kesalahan dalam membuat basisdata -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Basisdata yang dibuat tidak memiliki kunci atau KDF, aplikasi tidak bisa menyompannya. --Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. -- -- -- Select CSV file -- Pilih berkas CSV -- -- -- New Database -- Basisdata Baru -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Basisdata Baru] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Dikunci] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Hanya-baca] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Gagal untuk membuka %1. Mungkin tidak ada atau tidak bisa diakses. -- -- -- Export database to HTML file -- Ekspor basisdata ke berkas HTML -- -- -- HTML file -- Berkas HTML -- -- -- Writing the HTML file failed. -- Gagal menyimpan ke berkas HTML. -- -- -- Export Confirmation -- Konfirmasi Ekspor -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Anda akan mengekspor basisdata Anda ke berkas tanpa enkripsi. Ini akan membuat sandi dan informasi sensitif lainnya menjadi sangat rentan. Apakah Anda yakin ingin melanjutkan? -- -- -- Open OPVault -- Buka OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Mencari... -- -- -- Do you really want to delete the entry "%1" for good? -- Apakah Anda yakin ingin menghapus entri "%1" untuk selamanya? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Apakah Anda yakin ingin memindahkan "%1" ke keranjang sampah? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Apakah Anda yakin ingin memindahkan %n entri ke keranjang sampah? -- -- -- Execute command? -- Jalankan perintah? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Apakah Anda yakin ingin menjalankan perintah berikut?<br><br>%1<br> -- -- -- Remember my choice -- Ingat pilihan saya -- -- -- Do you really want to delete the group "%1" for good? -- Apakah Anda yakin ingin menghapus grup "%1" untuk selamanya? -- -- -- No current database. -- Tidak ada basisdata. -- -- -- No source database, nothing to do. -- Tidak ada sumber basisdata, tidak perlu melakukan apa-apa. -- -- -- Search Results (%1) -- Hasil Pencarian (%1) -- -- -- No Results -- Tidak Ada Hasil -- -- -- File has changed -- Berkas telah berubah -- -- -- The database file has changed. Do you want to load the changes? -- Berkas basisdata telah berubah. Apakah Anda ingin memuat perubahannya? -- -- -- Merge Request -- Permintaan Penggabungan -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Berkas basisdata telah berubah dan Anda memiliki ubahan yang belum disimpan. --Apakah Anda ingin menggabungkan ubahan Anda? -- -- -- Empty recycle bin? -- Kosongkan keranjang sampah? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Apakah Anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah? -- -- -- Do you really want to delete %n entry(s) for good? -- Apakah Anda yakin ingin menghapus %n entri selamanya? -- -- -- Delete entry(s)? -- Hapus entri? -- -- -- Move entry(s) to recycle bin? -- Pindahkan entri ke keranjang sampah? -- -- -- Lock Database? -- Kunci Basisdata? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Anda sedang menyunting entri. Abaikan ubahan dan tetap mengunci? -- -- -- "%1" was modified. --Save changes? -- "%1" telah dimodifikasi. --Simpan perubahan? -- -- -- Database was modified. --Save changes? -- Basisdata telah diubah. --Simpan perubahan? -- -- -- Save changes? -- Simpan perubahan? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Tidak bisa membuka berkas basisdata baru saat mencoba untuk memuat ulang. --Galat: %1 -- -- -- Disable safe saves? -- Nonaktifkan penyimpanan aman? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC telah beberapa kali gagal menyimpan basisdata. Hal ini mungkin disebabkan oleh layanan sinkronisasi berkas yang menghalangi berkas yang akan disimpan. --Nonaktifkan penyimpanan aman dan coba lagi? -- -- -- Passwords -- Sandi -- -- -- Save database as -- Simpan basisdata sebagai -- -- -- KeePass 2 Database -- Basisdata KeePass 2 -- -- -- Replace references to entry? -- Ganti referensi ke entri? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Entri "%1" memiliki %2 referensi. Apakah Anda ingin mengganti referensi dengan data baru, mengabaikan entri ini, atau mungkin menghapusnya? -- -- -- Delete group -- Hapus grup -- -- -- Move group to recycle bin? -- Pindahkan grup ke keranjang sampah? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Apakah Anda yakin ingin memindahkan grup "%1" ke keranjang sampah? -- -- -- Successfully merged the database files. -- Berhasil menggabungkan berkas basisdata. -- -- -- Database was not modified by merge operation. -- Basisdata tidak ada perubahan yang diakibatkan oleh proses penggabungan. -- -- -- Shared group... -- Grup bersama... -- -- -- Writing the database failed: %1 -- Gagal menyimpan basisdata: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Basisdata ini dibuka dalam mode baca-saja. Simpan otomatis dinonaktifkan. -- -- -- Save database backup -- Simpan cadangan basisdata -- -- -- Could not find database file: %1 -- Tidak bisa menemukan berkas basisdata: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Entri -- -- -- Advanced -- Tingkat Lanjut -- -- -- Icon -- Ikon -- -- -- Auto-Type -- Ketik-Otomatis -- -- -- Properties -- Properti -- -- -- History -- Riwayat -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- t/a -- -- -- (encrypted) -- (terenkripsi) -- -- -- Select private key -- Pilih kunci privat -- -- -- Entry history -- Riwayat entri -- -- -- Add entry -- Tambah entri -- -- -- Edit entry -- Sunting entri -- -- -- New attribute -- Atribut baru -- -- -- Are you sure you want to remove this attribute? -- Apakah Anda yakin ingin membuang atribut ini? -- -- -- Tomorrow -- Besok -- -- -- %n week(s) -- %n minggu -- -- -- %n month(s) -- %n bulan -- -- -- Entry updated successfully. -- Entri berhasil diperbarui. -- -- -- New attribute %1 -- Atribut baru %1 -- -- -- %n year(s) -- %n tahun -- -- -- Confirm Removal -- Konfirmasi Penghapusan -- -- -- Browser Integration -- Integrasi Peramban -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Apakah Anda yakin ingin membuang URL ini? -- -- -- Reveal -- Tampilkan -- -- -- Hide -- Sembunyikan -- -- -- Unsaved Changes -- Perubahan Belum Disimpan -- -- -- Would you like to save changes to this entry? -- Apakah Anda yakin ingin menyimpan perubahan ke entri ini? -- -- -- [PROTECTED] Press Reveal to view or edit -- [DILINDUNGI] Tekan Tampilkan untuk melihat atau menyunting -- -- -- Invalid Entry -- Entri Tidak Valid -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atribut tambahan -- -- -- Add -- Tambah -- -- -- Remove -- Buang -- -- -- Edit Name -- Sunting Nama -- -- -- Protect -- Proteksi -- -- -- Reveal -- Tampilkan -- -- -- Attachments -- Lampiran -- -- -- Foreground Color: -- Warna Latar Depan: -- -- -- Background Color: -- Warna Latar Belakang: -- -- -- Attribute selection -- Pemilihan atribut -- -- -- Attribute value -- Nilai atribut -- -- -- Add a new attribute -- Tambah atribut baru -- -- -- Remove selected attribute -- Buang atribut yang dipilih -- -- -- Edit attribute name -- Sunting nama atribut -- -- -- Toggle attribute protection -- Aktif/Nonaktifkan proteksi atribut -- -- -- Show a protected attribute -- Tampilkan atribut yang dilindungi -- -- -- Foreground color selection -- Pemilihan warna latar depan -- -- -- Background color selection -- Pemilihan warna latar belakang -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Jika dicentang, entri tidak akan muncul di laporan seperti Pemeriksaan Kesehatan (Health Check) dan HIBP walau jika tidak sesuai dengan persyaratan kualitas (mis. entropi kata sandi atau penggunaan kembali). Anda dapat menetapkan tanda centang jika kata sandi di luar kendali Anda (mis. jika perlu PIN empat digit) untuk mencegahnya mengacaukan laporan.</p></body></html> -- -- -- Exclude from database reports -- Kecualikan dari laporan basisdata -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Aktifkan Ketik-Otomatis untuk entri ini -- -- -- Window Associations -- Asosiasi Jendela -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Judul jendela: -- -- -- Use a specific sequence for this association: -- Gunakan sekuens spesifik untuk asosiasi ini: -- -- -- Custom Auto-Type sequence -- Urutan Ketik-Otomatis khusus -- -- -- Open Auto-Type help webpage -- Buka laman bantuan Ketik-Otomatis -- -- -- Existing window associations -- Asosiasi jendela yang ada -- -- -- Add new window association -- Tambah asosiasi jendela baru -- -- -- Remove selected window association -- Buang asosiasi jendela yang dipilih -- -- -- You can use an asterisk (*) to match everything -- Anda bisa menggunakan asterik (*) untuk mencocokkan semuanya -- -- -- Set the window association title -- Atur judul asosiasi jendela -- -- -- You can use an asterisk to match everything -- Anda bisa menggunakan asterik untuk mencocokkan semuanya -- -- -- Custom Auto-Type sequence for this window -- Urutan Ketik-Otomatis khusus untuk jendela ini -- -- -- Inherit default Auto-Type sequence from the group -- Mengikuti urutan Ketik-Otomatis baku grup -- -- -- Use custom Auto-Type sequence: -- Gunakan urutan Ketik-Otomatis ubahsuai: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Pengaturan ini mempengaruhi perilaku entri dengan ekstensi peramban. -- -- -- General -- Umum -- -- -- Skip Auto-Submit for this entry -- Lewati Kirim-Otomatis untuk entri ini -- -- -- Hide this entry from the browser extension -- Sembunyikan entri ini dari ekstensi peramban -- -- -- Additional URL's -- URL tambahan -- -- -- Add -- Tambah -- -- -- Remove -- Buang -- -- -- Edit -- Sunting -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Hanya kirim pengaturan ini ke peramban untuk dialog Otentikasi HTTP. Jika diaktifkan, formulir masuk yang normal tidak akan menampilkan entri ini untuk dipilih. -- -- -- Use this entry only with HTTP Basic Auth -- Hanya gunakan entri ini dengan Otentikasi Dasar HTTP -- -- -- -- EditEntryWidgetHistory -- -- Show -- Tampilkan -- -- -- Restore -- Kembalikan -- -- -- Delete -- Hapus -- -- -- Delete all -- Hapus semua -- -- -- Entry history selection -- Pemilihan riwayat entri -- -- -- Show entry at selected history state -- Tampilkan entri pada status riwayat yang dipilih -- -- -- Restore entry to selected history state -- Pulihkan entri ke status riwayat yang dipilih -- -- -- Delete selected history state -- Hapus status riwayat yang dipilih -- -- -- Delete all history -- Hapus semua riwayat -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Sandi: -- -- -- Title: -- Judul: -- -- -- Presets -- Prasetel -- -- -- Toggle the checkbox to reveal the notes section. -- Pilih kotak centang untuk mengungkap bagian catatan. -- -- -- Username: -- Nama pengguna: -- -- -- Url field -- Ruas url -- -- -- Download favicon for URL -- Untuk favicon untuk URL -- -- -- Password field -- Ruas sandi -- -- -- Toggle notes visible -- Aktif/Nonaktifkan visibilitas cacatan -- -- -- Expiration field -- Ruas kedaluwarsa -- -- -- Expiration Presets -- Prasetel Kedaluwarsa -- -- -- Expiration presets -- Prasetel kedaluwarsa -- -- -- Notes field -- Ruas catatan -- -- -- Title field -- Ruas judul -- -- -- Username field -- Ruas nama pengguna -- -- -- Toggle expiration -- Aktif/Nonaktifkan kedaluwarsa -- -- -- Notes: -- Catatan: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Kedaluwarsa: -- -- -- Edit Entry -- Sunting Entri -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulir -- -- -- Remove key from agent after -- Buang kunci dari agent setelah -- -- -- seconds -- detik -- -- -- Fingerprint -- Tanda tangan -- -- -- Remove key from agent when database is closed/locked -- Buang kunci dari agent saat basisdata ditutup/dikunci -- -- -- Public key -- Kunci publik -- -- -- Add key to agent when database is opened/unlocked -- Tambahkan kunci ke agent saat basisdata dibuka/tak terkunci -- -- -- Comment -- Komentar -- -- -- Decrypt -- Dekripsi -- -- -- n/a -- t/a -- -- -- Copy to clipboard -- Salin ke papan klip -- -- -- Private key -- Kunci privat -- -- -- External file -- Berkas eksternal -- -- -- Browse... -- Button for opening file dialog -- Telusuri... -- -- -- Attachment -- Lampiran -- -- -- Add to agent -- Tambahkan ke agent -- -- -- Remove from agent -- Buang dari agent -- -- -- Require user confirmation when this key is used -- Membutuhkan konfirmasi pengguna saat kunci ini digunakan -- -- -- Remove key from agent after specified seconds -- Hapus kunci dari agen setelah detik yang ditentukan -- -- -- Browser for key file -- Peramban untuk berkas kunci -- -- -- External key file -- Berkas kunci eksternal -- -- -- Select attachment file -- Pilih berkas lampiran -- -- -- -- EditGroupWidget -- -- Group -- Grup -- -- -- Icon -- Ikon -- -- -- Properties -- Properti -- -- -- Add group -- Tambah grup -- -- -- Edit group -- Sunting grup -- -- -- Enable -- Aktifkan -- -- -- Disable -- Nonaktifkan -- -- -- Inherit from parent group (%1) -- Mengikuti grup induk (%1) -- -- -- Entry has unsaved changes -- Entri memiliki perubahan yang belum disimpan -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipe: -- -- -- Path: -- Jalur: -- -- -- Password: -- Sandi: -- -- -- Inactive -- Tidak aktif -- -- -- KeeShare unsigned container -- Kontainer KeeShare tak bertanda tangan -- -- -- KeeShare signed container -- Kontainer KeeShare bertanda tangan -- -- -- Select import source -- Pilih sumber impor -- -- -- Select export target -- Pilih target ekspor -- -- -- Select import/export file -- Pilih berkas impor/ekspor -- -- -- Clear -- Bersihkan -- -- -- Import -- Impor -- -- -- Export -- Ekspor -- -- -- Synchronize -- Sinkronkan -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Versi KeePassXC Anda tidak mendukung fitur berbagi untuk tipe kontainer ini. --Ekstensi yang didukung adalah: %1. -- -- -- %1 is already being exported by this database. -- %1 telah diekspor oleh basisdata ini. -- -- -- %1 is already being imported by this database. -- %1 telah diimpor oleh basisdata ini. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 sedang diimpor dan diekspor oleh berbagai grup dalam basisdata ini. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- Saat ini KeeShare dinonaktifkan. Anda dapat mengaktifkan impor/ekspor di pengaturan aplikasi. -- -- -- Database export is currently disabled by application settings. -- Ekspor basisdata saat ini dinonaktifkan oleh pengaturan aplikasi. -- -- -- Database import is currently disabled by application settings. -- Impor basisdata saat ini dinonaktifkan oleh pengaturan aplikasi. -- -- -- Sharing mode field -- Ruas mode berbagi -- -- -- Path to share file field -- Ruas jalur ke berkas yang dibagikan -- -- -- Password field -- Ruas sandi -- -- -- Clear fields -- Kosongkan ruas -- -- -- Browse for share file -- Telusuri berkas berbagi -- -- -- Browse... -- Telusuri... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Ruas nama -- -- -- Notes field -- Ruas catatan -- -- -- Toggle expiration -- Aktif/Nonaktifkan kedaluwarsa -- -- -- Auto-Type toggle for this and sub groups -- Aktif/Nonaktifkan Ketik-Otomatis untuk ini dan sub grup -- -- -- Expiration field -- Ruas kedaluwarsa -- -- -- Search toggle for this and sub groups -- Aktif/Nonaktifkan pencarian untuk ini dan sub grup -- -- -- Default auto-type sequence field -- Ruas urutan ketik-otomatis baku -- -- -- Expires: -- Kedaluwarsa: -- -- -- Use default Auto-Type sequence of parent group -- Gunakan urutan Ketik-Otomatis bawaan dari grup induk -- -- -- Auto-Type: -- Ketik-Otomatis: -- -- -- Search: -- Cari: -- -- -- Notes: -- Catatan: -- -- -- Name: -- Nama: -- -- -- Set default Auto-Type sequence -- Tetapkan urutan Ketik-Otomatis yang baku -- -- -- Edit Group -- Sunting Grup -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Tambah ikon khusus -- -- -- Delete custom icon -- Hapus ikon khusus -- -- -- Download favicon -- Unduh favicon -- -- -- Unable to fetch favicon. -- Tidak bisa mengunduh favicon. -- -- -- Images -- Gambar -- -- -- All files -- Semua Berkas -- -- -- Confirm Delete -- Konfirmasi Hapus -- -- -- Select Image(s) -- Pilih Gambar -- -- -- Successfully loaded %1 of %n icon(s) -- Berhasil memuat %1 dari %n ikon -- -- -- No icons were loaded -- Tidak ada ikon yang dimuat -- -- -- %n icon(s) already exist in the database -- %n ikon sudah ada didalam basisdata -- -- -- The following icon(s) failed: -- Ikon berikut gagal: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ikon ini digunakan oleh %n entri, dan akan diganti dengan ikon bawaan. Apakah Anda yakin ingin menghapusnya? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Anda bisa mengaktifkan layanan ikon situs web oleh DuckDuckGo di Perkakas > Pengaturan > Keamanan -- -- -- Download favicon for URL -- Untuk favicon untuk URL -- -- -- Apply selected icon to subgroups and entries -- Terapkan ikon yang dipilih ke subgrup dan entri -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- Ikon yang sudah ada dipilih. -- -- -- Use default icon -- Gunakan ikon baku -- -- -- Use custom icon -- Gunakan ikon ubahsuai -- -- -- Apply icon to... -- Terapkan ikon ke... -- -- -- Apply to this group only -- Hanya terapkan ke grup ini -- -- -- -- EditWidgetProperties -- -- Created: -- Dibuat: -- -- -- Modified: -- Dimodifikasi: -- -- -- Accessed: -- Diakses: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Data Pengaya -- -- -- Remove -- Buang -- -- -- Delete plugin data? -- Hapus data pengaya? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Apakah Anda yakin ingin menghapus data pengaya? --Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. -- -- -- Key -- Kunci -- -- -- Value -- Nilai -- -- -- Datetime created -- Tanggal waktu dibuat -- -- -- Datetime modified -- Tanggal waktu dimodifikasi -- -- -- Datetime accessed -- Tanggal waktu diakses -- -- -- Unique ID -- ID Unik -- -- -- Plugin data -- Data pengaya -- -- -- Remove selected plugin data -- Buang data pengaya yang dipilih -- -- -- -- Entry -- -- %1 - Clone -- %1 - Salinan -- -- -- -- EntryAttachmentsModel -- -- Name -- Nama -- -- -- Size -- Ukuran -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulir -- -- -- Add -- Tambah -- -- -- Remove -- Buang -- -- -- Open -- Buka -- -- -- Save -- Simpan -- -- -- Select files -- Pilih berkas -- -- -- Are you sure you want to remove %n attachment(s)? -- Apakah Anda yakin ingin membuang %n lampiran? -- -- -- Save attachments -- Simpan lampiran -- -- -- Unable to create directory: --%1 -- Tidak bisa membuat direktori: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Apakah Anda yakin ingin menimpa ulang berkas "%1" yang ada dengan berkas lampiran? -- -- -- Confirm overwrite -- Konfirmasi menimpa ulang -- -- -- Unable to save attachments: --%1 -- Tidak bisa menyimpan lampiran: --%1 -- -- -- Unable to open attachment: --%1 -- Tidak bisa membuka lampiran: --%1 -- -- -- Unable to open attachments: --%1 -- Tidak bisa membuka lampiran: --%1 -- -- -- Confirm remove -- Konfirmasi buang -- -- -- Unable to open file(s): --%1 -- Tidak bisa membuka berkas: --%1 -- -- -- Attachments -- Lampiran -- -- -- Add new attachment -- Tambah lampiran baru -- -- -- Remove selected attachment -- Buang lampiran yang dipilih -- -- -- Open selected attachment -- Buka lampiran yang dipilih -- -- -- Save selected attachment to disk -- Simpan lampiran yang dipilih ke diska -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 adalah berkas yang sangat besar (%2 MB). --Basisdata Anda akan menjadi sangat besar dan akan mengurangi performa kinerja. -- --Apakah Anda yakin ingin menambahkan berkas ini? -- -- -- Confirm Attachment -- Konfirmasi Lampiran -- -- -- -- EntryAttributesModel -- -- Name -- Nama -- -- -- -- EntryHistoryModel -- -- Last modified -- Terakhir dimodifikasi -- -- -- Title -- Judul -- -- -- Username -- Nama pengguna -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grup -- -- -- Title -- Judul -- -- -- Username -- Nama pengguna -- -- -- URL -- URL -- -- -- Never -- Tidak Pernah -- -- -- Password -- Sandi -- -- -- Notes -- Catatan -- -- -- Expires -- Kedaluwarsa -- -- -- Created -- Dibuat -- -- -- Modified -- Diubah -- -- -- Accessed -- Diakses -- -- -- Attachments -- Lampiran -- -- -- Size -- Ukuran -- -- -- Group name -- Nama grup -- -- -- Entry title -- Judul entri -- -- -- Entry notes -- Catatan entri -- -- -- Entry expires at -- Entri kedaluwarsa pada -- -- -- Creation date -- Tanggal dibuat -- -- -- Last modification date -- Tanggal diubah terakhir -- -- -- Last access date -- Tanggal terakhir diakses -- -- -- Attached files -- Berkas terlampir -- -- -- Entry size -- Ukuran entri -- -- -- Has attachments -- Memiliki lampiran -- -- -- Has TOTP one-time password -- Memiliki sandi sekali TOTP -- -- -- -- EntryPreviewWidget -- -- Close -- Tutup -- -- -- General -- Umum -- -- -- Username -- Nama pengguna -- -- -- Password -- Sandi -- -- -- Expiration -- Kedaluwarsa -- -- -- URL -- URL -- -- -- Attributes -- Atribut -- -- -- Attachments -- Lampiran -- -- -- Notes -- Catatan -- -- -- Autotype -- KetikOtomatis -- -- -- Window -- Jendela -- -- -- Sequence -- Urutan -- -- -- Searching -- Pencarian -- -- -- Search -- Cari -- -- -- Clear -- Bersihkan -- -- -- Never -- Tidak Pernah -- -- -- [PROTECTED] -- [DILINDUNGI] -- -- -- Enabled -- Diaktifkan -- -- -- Disabled -- Dinonaktifkan -- -- -- Share -- Bagikan -- -- -- Display current TOTP value -- Tampilkan nilai TOTP saat ini -- -- -- Advanced -- Tingkat Lanjut -- -- -- Default Sequence -- Sekuens Bawaan -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- URL tidak valid -- -- -- -- EntryView -- -- Fit to window -- Paskan ke jendela -- -- -- Fit to contents -- Paskan ke konten -- -- -- Reset to defaults -- Kembalikan ke setelan bawaan -- -- -- Has attachments -- Entry attachment icon toggle -- Memiliki lampiran -- -- -- Has TOTP -- Entry TOTP icon toggle -- Memiliki TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Entri "%1" dari basisdata "%2" telah digunakan oleh %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Gagal mendaftarkan layanan DBus pada %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Entri telah digunakan oleh %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nama Berkas -- -- -- Group -- Grup -- -- -- Manage -- Kelola -- -- -- Unlock to show -- Buka kunci untuk menampilkan -- -- -- None -- Nihil -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikasi -- -- -- Manage -- Kelola -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Layanan Rahasia Fdo:</b> %1 -- -- -- Unknown -- Unknown PID -- Tidak diketahui -- -- -- Unknown -- Unknown executable path -- Tidak diketahui -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Layanan rahasia lain sedang berjalan (%1).<br/>Harap hentikan/hapus sebelum mengaktifkan kembali Integrasi Layanan Rahasia. -- -- -- -- Group -- -- [empty] -- group has no children -- [kosong] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Validasi sandi daring gagal -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Unduh Favicon -- -- -- Cancel -- Batal -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Mengalami masalah ketika mengunduh ikon? --Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo di bagian keamanan dalam pengaturan aplikasi. -- -- -- Close -- Tutup -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Silakan tunggu, sedang memproses daftar entri... -- -- -- Downloading... -- Mengunduh... -- -- -- Ok -- Ok -- -- -- Already Exists -- Sudah Ada -- -- -- Download Failed -- Gagal Mengunduh -- -- -- Downloading favicons (%1/%2)... -- Mengunduh favicon (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Tutup -- -- -- Close message -- Tutup pesan -- -- -- -- Kdbx3Reader -- -- missing database headers -- kehilangan tajuk basisdata -- -- -- Header doesn't match hash -- Header tidak cocok dengan hash -- -- -- Invalid header id size -- Ukuran id tajuk tidak valid -- -- -- Invalid header field length -- Panjang ruas tajuk tidak valid -- -- -- Invalid header data length -- Panjang data tajuk tidak valid -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Kredensial yang diberikan tidak valid, silakan coba lagi. --Jika terus berulang, maka basisdata Anda mungkin rusak. -- -- -- Unable to calculate database key -- TIdak bisa mengkalkulasi kunci basisdata -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- TIdak bisa mengkalkulasi kunci basisdata -- -- -- -- Kdbx4Reader -- -- missing database headers -- kehilangan tajuk basisdata -- -- -- Invalid header checksum size -- Ukuran checksum tajuk tidak valid -- -- -- Header SHA256 mismatch -- Tajuk SHA256 tidak cocok -- -- -- Unknown cipher -- Cipher tidak dikenal -- -- -- Invalid header id size -- Ukuran id tajuk tidak valid -- -- -- Invalid header field length -- Panjang ruas tajuk tidak valid -- -- -- Invalid header data length -- Panjang data tajuk tidak valid -- -- -- Failed to open buffer for KDF parameters in header -- Gagal membuka buffer untuk parameter KDF di dalam tajuk -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Fungsi derivasi kunci tidak didukung (KDF) atau parameter tidak valid -- -- -- Legacy header fields found in KDBX4 file. -- Ditemukan ruas tajuk legacy di dalam berkas KDBX4. -- -- -- Invalid inner header id size -- -- -- -- Invalid inner header field length -- -- -- -- Invalid inner header binary size -- -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Versi map variasi KeePass tidak didukung. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Panjang nama entri map variasi tidak valid -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Data nama entri map variasi tidak valid -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri map variasi tidak valid -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Data nilai entri map variasi tidak valid -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri Bool map variasi tidak valid -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri Int32 map variasi tidak valid -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri UInt32 map variasi tidak valid -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri Int64 map variasi tidak valid -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Panjang nilai entri UInt64 map variasi tidak valid -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Tipe entri map variasi tidak valid -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Ukuran tipe entri map variasi tidak valid -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Kredensial yang diberikan tidak valid, silakan coba lagi. --Jika terus berulang, maka basisdata Anda mungkin rusak. -- -- -- (HMAC mismatch) -- (HMAC tidak cocok) -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritma cipher simetrik tidak valid. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ukuran cipher IV simetrik tidak valid. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Gagal menserialisasi map variasi parameter KDF -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cipher tidak didukung -- -- -- Invalid compression flags length -- -- -- -- Unsupported compression algorithm -- Algoritma kompresi tidak didukung -- -- -- Invalid master seed size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid transform rounds size -- -- -- -- Invalid start bytes size -- Ukuran byte awal tidak valid -- -- -- Invalid random stream id size -- Ukuran id stream acak tidak valid -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- Bukan basisdata KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Berkas yang dipilih adalah basisdata lama KeePass 1 (.kdb). -- --Anda bisa mengimpornya dengan mengklik Basisdata > 'Impor basisdata KeePass 1...'. --Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basisdata yang diimpor dengan versi lama KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Versi basisdata KeePass 2 tidak didukung. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- Tidak bisa mengurai UUID: %1 -- -- -- Failed to read database file. -- Gagal membaca berkas basisdata. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Gagal mengurai XML: %1 -- -- -- No root group -- Tidak ada grup root -- -- -- Missing icon uuid or data -- Kehilangan data atau uuid ikon -- -- -- Missing custom data key or value -- Kehilangan nilai atau kunci data khusus -- -- -- Multiple group elements -- Beberapa elemen grup -- -- -- Null group uuid -- Uuid grup null -- -- -- Invalid group icon number -- Nomor ikon grup tidak valid -- -- -- Invalid EnableAutoType value -- Nilai EnableAutoType tidak valid -- -- -- Invalid EnableSearching value -- Nilai EnableSearching tidak valid -- -- -- No group uuid found -- Tidak ditemukan uuid grup -- -- -- Null DeleteObject uuid -- Uuid DeleteObject null -- -- -- Missing DeletedObject uuid or time -- Kehilangan waktu atau uuid DeletedObject -- -- -- Null entry uuid -- Uuid entri null -- -- -- Invalid entry icon number -- Nomor ikon entri tidak valid -- -- -- History element in history entry -- Elemen riwayat di dalam entri riwayat -- -- -- No entry uuid found -- Tidak ditemukan uuid entri -- -- -- History element with different uuid -- Elemen riwayat dengan uuid yang berbeda -- -- -- Duplicate custom attribute found -- Ditemukan atribut khusus ganda -- -- -- Entry string key or value missing -- Kehilangan nilai atau kunci lema entri -- -- -- Entry binary key or value missing -- Kehilangan nilai atau kunci binari entri -- -- -- Auto-type association window or sequence missing -- Kehilangan asosiasi jendela atau urutan ketik-otomatis -- -- -- Invalid bool value -- Nilai bool tidak valid -- -- -- Invalid date time value -- Waktu tanggal tidak valid -- -- -- Invalid color value -- Warna tidak valid -- -- -- Invalid color rgb part -- Warna rgb tidak valid -- -- -- Invalid number value -- Angka tidak valid -- -- -- Invalid uuid value -- Uuid tidak valid -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Tidak bisa mengurai kompresi binari -- -- -- XML error: --%1 --Line %2, column %3 -- Galat XML: --%1 --Baris %2, kolom %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- Kunci privat adalah lampiran tetapi tidak ada lampiran yang tersedia. -- -- -- Private key is empty -- Kunci privat kosong -- -- -- File too large to be a private key -- Berkas terlalu besar untuk jadi kunci privat -- -- -- Failed to open private key -- Gagal membuka kunci privat -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Tidak bisa membuka basisdata. -- -- -- Import KeePass1 Database -- Impor Basisdata KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Tidak bisa membaca berkas kunci. -- -- -- Not a KeePass database. -- Bukan basisdata KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritma enkripsi tidak didukung. -- -- -- Unsupported KeePass database version. -- Versi basisdata KeePass tidak didukung. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Tidak bisa membaca enkripsi IV -- -- -- Invalid number of groups -- Jumlah grup tidak valid -- -- -- Invalid number of entries -- Jumlah entri tidak valid -- -- -- Invalid content hash size -- Ukuran hash konten tidak valid -- -- -- Invalid transform seed size -- -- -- -- Invalid number of transform rounds -- -- -- -- Unable to construct group tree -- -- -- -- Root -- Root -- -- -- Key transformation failed -- Transformasi kunci gagal -- -- -- Invalid group field type number -- Angka tipe ruas grup tidak valid -- -- -- Invalid group field size -- Ukuran ruas grup tidak valid -- -- -- Read group field data doesn't match size -- Data ruas grup baca tidak cocok dengan ukurannya -- -- -- Incorrect group id field size -- Ukuran ruas id grup salah -- -- -- Incorrect group creation time field size -- Ukuran ruas waktu pembuatan grup salah -- -- -- Incorrect group modification time field size -- Ukuran ruas waktu perubahan grup salah -- -- -- Incorrect group access time field size -- Ukuran ruas waktu akses grup salah -- -- -- Incorrect group expiry time field size -- Ukuran ruas waktu kedaluwarsa grup salah -- -- -- Incorrect group icon field size -- Ukuran ruas ikon grup salah -- -- -- Incorrect group level field size -- Ukuran ruas level grup salah -- -- -- Invalid group field type -- Tipe ruas grup tidak valid -- -- -- Missing group id or level -- Kehilangan level atau id grup -- -- -- Missing entry field type number -- Kehilangan nomor tipe ruas entri -- -- -- Invalid entry field size -- Ukuran ruas entri tidak valid -- -- -- Read entry field data doesn't match size -- Data ruas entri baca tidak cocok dengan ukurannya -- -- -- Invalid entry uuid field size -- Ukuran ruas uuid entri tidak valid -- -- -- Invalid entry group id field size -- Ukuran ruas id grup entri tidak valid -- -- -- Invalid entry icon field size -- Ukuran ruas ikon entri tidak valid -- -- -- Invalid entry creation time field size -- Ukuran ruas waktu pembuatan entri tidak valid -- -- -- Invalid entry modification time field size -- Ukuran ruas waktu perubahan entri tidak valid -- -- -- Invalid entry expiry time field size -- Ukuran ruas waktu kedaluwarsa entri tidak valid -- -- -- Invalid entry field type -- Tipe ruas entri tidak valid -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Kredensial yang diberikan tidak valid, silakan coba lagi. --Jika terus berulang, maka basisdata Anda mungkin rusak. -- -- -- Unable to calculate database key -- TIdak bisa mengkalkulasi kunci basisdata -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Diimpor dari %1 -- -- -- Exported to %1 -- Diekspor ke %1 -- -- -- Synchronized with %1 -- Disinkronkan dengan %1 -- -- -- Import is disabled in settings -- Impor dinonaktifkan di dalam pengaturan -- -- -- Export is disabled in settings -- Ekspor dinonaktifkan di dalam pengaturan -- -- -- Inactive share -- -- -- -- Imported from -- Diimpor dari -- -- -- Exported to -- Diekspor dari -- -- -- Synchronized with -- Disinkronkan dengan -- -- -- -- KeyComponentWidget -- -- Key Component -- Komponen Kunci -- -- -- Key Component Description -- Deskripsi Komponen Kunci -- -- -- Cancel -- Batal -- -- -- Key Component set, click to change or remove -- Komponen Kunci sudah diatur, klik untuk mengubah atau buang -- -- -- Add %1 -- Add a key component -- Tambah %1 -- -- -- Change %1 -- Change a key component -- Ubah %1 -- -- -- Remove %1 -- Remove a key component -- Buang %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 telah diatur, klik untuk ganti atau hapus -- -- -- -- KeyFileEditWidget -- -- Generate -- Buat -- -- -- Key File -- Berkas Kunci -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Anda bisa menambahkan berkas kunci yang berisi byte acak untuk jaminan keamanan lebih.</p><p>Anda harus menjaga kerahasiannya dan jangan pernah menghilangkannya atau Anda akan terkunci dan dicekal selamanya!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Galat memuat berkas kunci '%1' --Pesan: %2 -- -- -- Key files -- Berkas kunci -- -- -- All files -- Semua Berkas -- -- -- Create Key File... -- Buat Berkas Kunci... -- -- -- Error creating key file -- Galat membuat berkas kunci -- -- -- Unable to create key file: %1 -- Tidak bisa membuat berkas: %1 -- -- -- Select a key file -- Pilih berkas kunci -- -- -- Key file selection -- Pemilihan berkas kunci -- -- -- Browse for key file -- Telusuri berkas kunci -- -- -- Browse... -- Telusuri... -- -- -- Generate a new key file -- Buat berkas kunci baru -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Catatan: Jangan gunakan berkas yang dapat berubah karena itu akan mencegah Anda membuka kunci basisdata Anda! -- -- -- Invalid Key File -- Berkas Kunci Tidak Valid -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Anda tidak dapat menggunakan basisdata sekarang sebagai kunci berkasnya sendiri. Harap pilih berkas berbeda atau hasilkan kunci berkas baru. -- -- -- Suspicious Key File -- Berkas Kunci Mencurigakan -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Kunci berkas yang dipilih terlihat seperti kata sandi basisdata. Kunci berkas harus berkas statis yang tidak pernah berubah atau Anda akan kehilangan akses ke basisdata Anda selamanya. --Apakah Anda yakin ingin melanjutkan dengan berkas ini? -- -- -- Old key file format -- Format berkas kunci lama -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- Basis&data -- -- -- &Help -- &Bantuan -- -- -- &Groups -- &Grup -- -- -- &Tools -- &Perkakas -- -- -- &Quit -- &Keluar -- -- -- &About -- &Tentang -- -- -- Database settings -- Pengaturan basisdata -- -- -- Copy username to clipboard -- Salin nama pengguna ke papan klip -- -- -- Copy password to clipboard -- Salin sandi ke papan klip -- -- -- &Settings -- &Pengaturan -- -- -- &Title -- &Judul -- -- -- Copy title to clipboard -- Salin judul ke papan klip -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Salin URL ke papan klip -- -- -- &Notes -- &Catatan -- -- -- Copy notes to clipboard -- Salin catatan ke papan klip -- -- -- Copy &TOTP -- Salin &TOTP -- -- -- E&mpty recycle bin -- Kosongkan keranjang sa&mpah -- -- -- Clear history -- Bersihkan riwayat -- -- -- Access error for config file %1 -- Galat akses untuk berkas konfigurasi %1 -- -- -- Settings -- Pengaturan -- -- -- Toggle window -- Jungkit jendela -- -- -- Quit KeePassXC -- Keluar KeePassXC -- -- -- Please touch the button on your YubiKey! -- Silakan sentuh tombol pada YubiKey Anda! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- PERINGATAN! Anda menggunakan versi tidak stabil dari KeePassXC! --Tinggi kemungkinan terjadi kerusakan, harap kelola salinan basisdata Anda dengan baik. --Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. -- -- -- &Donate -- &Donasi -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- PERINGATAN: Versi Qt Anda dapat menyebabkan KeePassXC mogok/tidak merespon dengan adanya On-Screen Keyboard! --Kami sarankan Anda menggunakan AppImage yang tersedia di halaman unduhan kami. -- -- -- &Import -- &Impor -- -- -- Create a new database -- Buat basisdata baru -- -- -- Merge from another KDBX database -- Gabung dari basisdata KDBX lainnya -- -- -- Add a new entry -- Tambahkan entri baru -- -- -- View or edit entry -- Lihat atau sunting entri -- -- -- Add a new group -- Tambahkan grup baru -- -- -- Perform &Auto-Type -- Jalankan &Ketik-Otomatis -- -- -- Open &URL -- Buka &URL -- -- -- Import a KeePass 1 database -- Impor basisdata KeePass 1 -- -- -- Import a CSV file -- Impor berkas CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- CATATAN: Anda menggunakan versi pra-rilis KeePassXC! -- --Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaan harian. -- -- -- Check for updates on startup? -- Periksa pembaruan saat memulai? -- -- -- Would you like KeePassXC to check for updates on startup? -- Apakah Anda ingin KeePassXC memeriksa pembaruan setiap memulai aplikasi? -- -- -- You can always check for updates manually from the application menu. -- Anda selalu bisa memeriksa pembaruan secara manual dari menu aplikasi. -- -- -- &Export -- &Ekspor -- -- -- Sort &A-Z -- Urutkan &A-Z -- -- -- Sort &Z-A -- Urutkan &Z-A -- -- -- &Password Generator -- &Pembuat Sandi -- -- -- Import a 1Password Vault -- Impor Brankas 1Password -- -- -- &Getting Started -- &Memulai -- -- -- &User Guide -- Pand&uan Pengguna -- -- -- &Keyboard Shortcuts -- Pintasan &Kibor -- -- -- &Recent Databases -- Basisdata Ba&ru-baru Ini -- -- -- &Entries -- &Entri -- -- -- Copy Att&ribute -- Salin At&ribut -- -- -- TOTP -- TOTP -- -- -- View -- Lihat -- -- -- Theme -- Tema -- -- -- &Check for Updates -- Periksa &Pembaruan -- -- -- &Open Database… -- &Buka Basisdata… -- -- -- &Save Database -- &Simpan Basisdata -- -- -- &Close Database -- &Tutup Basisdata -- -- -- &New Database… -- Basisdata &Baru… -- -- -- &Merge From Database… -- &Gabung Dari Basisdata… -- -- -- &New Entry… -- Entri &Baru… -- -- -- &Edit Entry… -- &Sunting Entri… -- -- -- &Delete Entry… -- &Hapus Entri… -- -- -- &New Group… -- Grup &Baru… -- -- -- &Edit Group… -- &Sunting Grup… -- -- -- &Delete Group… -- &Hapus Grup… -- -- -- Download All &Favicons… -- Unduh Semua &Favicon… -- -- -- Sa&ve Database As… -- Sim&pan Basisdata Sebagai… -- -- -- Database &Security… -- &Keamanan Basisdata… -- -- -- Database &Reports... -- &Laporan Basisdata... -- -- -- Statistics, health check, etc. -- Statistik, cek kesehatan, dll. -- -- -- &Database Settings… -- Pengaturan Basis&data… -- -- -- &Clone Entry… -- &Gandakan Entri… -- -- -- Move u&p -- Pindah ke &atas -- -- -- Move entry one step up -- Pindah entri 1 level ke atas -- -- -- Move do&wn -- Pindah ke &bawah -- -- -- Move entry one step down -- Pindah entri 1 level ke bawah -- -- -- Copy &Username -- Salin &Nama Pengguna -- -- -- Copy &Password -- Salin &Sandi -- -- -- Download &Favicon -- Unduh &Favicon -- -- -- &Lock Databases -- &Kunci Basisdata -- -- -- &CSV File… -- Berkas &CSV… -- -- -- &HTML File… -- Berkas &HTML… -- -- -- KeePass 1 Database… -- Basisdata KeePass 1… -- -- -- 1Password Vault… -- Brankas 1Password… -- -- -- CSV File… -- Berkas CSV… -- -- -- Show TOTP -- Tampilkan TOTP -- -- -- Show QR Code -- Tampilkan Kode QR -- -- -- Set up TOTP… -- Siapkan TOTP… -- -- -- Report a &Bug -- Laporkan &Bug -- -- -- Open Getting Started Guide -- Buka Panduan Memulai -- -- -- &Online Help -- &Bantuan Daring -- -- -- Go to online documentation -- Kunjungi dokumentasi daring -- -- -- Open User Guide -- Buka Panduan Pengguna -- -- -- Save Database Backup... -- Simpan Cadangan Basisdata... -- -- -- Add key to SSH Agent -- Tambahkan kunci ke Agen SSH -- -- -- Remove key from SSH Agent -- Buang kunci dari Agen SSH -- -- -- Compact Mode -- Mode Ringkas -- -- -- Automatic -- Otomatis -- -- -- Light -- Terang -- -- -- Dark -- Gelap -- -- -- Classic (Platform-native) -- Klasik (Native-platform) -- -- -- Show Toolbar -- Tampilkan Bilah Alat -- -- -- Show Preview Panel -- Tampilkan Panel Pratinjau -- -- -- Don't show again for this version -- Jangan tampilkan lagu untuk versi ini -- -- -- Restart Application? -- Mulai Ulang Aplikasi? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah Anda ingin memulai ulang sekarang? -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- {NAMA PENGGUNA} -- -- -- {USERNAME}{ENTER} -- {NAMA PENGGUNA}{ENTER} -- -- -- {PASSWORD} -- {SANDI} -- -- -- {PASSWORD}{ENTER} -- {SANDI}{ENTER} -- -- -- Always on Top -- Selalu di Atas -- -- -- Hide Usernames -- Sembunyikan Nama Pengguna -- -- -- Hide Passwords -- Sembunyikan Sandi -- -- -- -- ManageDatabase -- -- Database settings -- Pengaturan basisdata -- -- -- Edit database settings -- Sunting pengaturan basisdata -- -- -- Unlock database -- Buka kunci basisdata -- -- -- Unlock database to show more information -- Buka kunci basisdata untuk menampilkan lebih banyak informasi -- -- -- Lock database -- Kunci basisdata -- -- -- -- ManageSession -- -- Disconnect -- Putuskan koneksi -- -- -- Disconnect this application -- Putuskan koneksi aplikasi ini -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- Memindahkan %1 [%2] -- -- -- Overwriting %1 [%2] -- Menyimpan ulang %1 [%2] -- -- -- older entry merged from database "%1" -- entri lama yang digabung dari basisdata "%1" -- -- -- Adding backup for older target %1 [%2] -- Menambahkan cadangan untuk target lama %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Menambahkan cadangan untuk sumber lama %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- Menyinkronkan dengan sumber yang lebih baru %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Menyinkronkan dengan sumber yang lebih lama %1 [%2] -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- Mengubah objek yang telah dihapus -- -- -- Adding missing icon %1 -- Menambahkan ikon %1 yang hilang -- -- -- Removed custom data %1 [%2] -- Data khusus yang dihapus %1[%2] -- -- -- Adding custom data %1 [%2] -- Menambahkan data khusus %1[%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Buat basisdata KeePassXC baru... -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- LamanPemandu -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Di sini Anda bisa menyesuaikan pengaturan enkripsi basisdata. Jangan khawatir, Anda bisa mengubahnya lagi nanti di pengaturan basisdata. -- -- -- Advanced Settings -- Pengaturan Lanjutan -- -- -- Simple Settings -- Pengaturan Dasar -- -- -- Encryption Settings -- Pengaturan Enkripsi -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Kredensial Basisdata -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Pengaturan Enkripsi -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Di sini Anda bisa menyesuaikan pengaturan enkripsi basisdata. Jangan khawatir, Anda bisa mengubahnya lagi nanti di pengaturan basisdata. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informasi Basisdata Umum -- -- -- Please fill in the display name and an optional description for your new database: -- Silakan masukkan nama dan deskripsi opsional untuk basisdata Anda yang baru: -- -- -- -- NixUtils -- -- Password Manager -- Pengelola Sandi -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Tidak dapat membaca semua IV bytes, seharusnya 16 tetapi mendapat %1 -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- Tidak dapat membaca semua HMAC signature bytes -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- Tidak dapat mendekodekan kuncimaster: %1 -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Berkas kunci tidak valid, mengharapkan kunci OpenSSH -- -- -- PEM boundary mismatch -- PEM boundary tidak cocok. -- -- -- Base64 decoding failed -- Dekode base64 gagal -- -- -- Key file way too small. -- Berkas kunci terlalu kecil. -- -- -- Key file magic header id invalid -- -- -- -- Found zero keys -- Tidak ada key yang ditemukan -- -- -- Failed to read public key. -- Gagal membaca kunci publik. -- -- -- Corrupted key file, reading private key failed -- Berkas kunci rusak, gagal membaca kunci privat -- -- -- No private key payload to decrypt -- Tidak ada isi dari private key untuk didekripsi -- -- -- Trying to run KDF without cipher -- Mencoba menjalankan KDF tanpa cipher -- -- -- Passphrase is required to decrypt this key -- Membutuhkan frasa sandi untuk mendekripsi kunci ini -- -- -- Key derivation failed, key file corrupted? -- Derivasi kunci gagal, berkas kunci rusak? -- -- -- Decryption failed, wrong passphrase? -- Dekripsi gagal, frasa sandi salah? -- -- -- Unexpected EOF while reading public key -- EOF yang tidak terduga saat membaca kunci publik -- -- -- Unexpected EOF while reading private key -- EOF yang tidak terduga saat membaca kunci privat -- -- -- Can't write public key as it is empty -- Tidak bisa membuat public key karena tidak ada isinya -- -- -- Unexpected EOF when writing public key -- EOF yang tidak terduga saat menulis kunci publik -- -- -- Can't write private key as it is empty -- Tidak bisa membuat private key karena tidak ada isinya -- -- -- Unexpected EOF when writing private key -- EOF yang tidak terduga saat menulis kunci privat -- -- -- Unsupported key type: %1 -- Jenis key tidak didukung: %1 -- -- -- Unknown cipher: %1 -- Cipher tidak diketahui: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cipher IV terlalu pendek untuk MD5 kdf -- -- -- Unknown KDF: %1 -- KDF tidak diketahui: %1 -- -- -- Unknown key type: %1 -- Jenis key tidak diketahui: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Sandi tidak sama -- -- -- Passwords match so far -- Kata sandi cocok sejauh ini -- -- -- Toggle Password (%1) -- Aktif/Nonaktifkan Sandi (%1) -- -- -- Generate Password (%1) -- Buat Sandi (%1) -- -- -- Warning: Caps Lock enabled! -- Peringatan: Caps Lock aktif! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Masukkan sandi: -- -- -- Confirm password: -- Konfirmasi sandi: -- -- -- Password -- Sandi -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Kata sandi adalah metode utama untuk mengamankan basisdata Anda.</p><p>Kata sandi yang bagus adalah unik dan panjang. KeePassXC dapat menghasilkan satu untuk Anda.</p> -- -- -- Passwords do not match. -- Sandi tidak sama. -- -- -- Password field -- Ruas sandi -- -- -- Repeat password field -- Ruas pengulangan sandi -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- kekuatan -- -- -- entropy -- entropi -- -- -- Password -- Sandi -- -- -- Character Types -- Tipe Karakter -- -- -- Numbers -- Angka -- -- -- Extended ASCII -- ASCII Lanjutan -- -- -- Exclude look-alike characters -- Kecualikan karakter mirip -- -- -- Pick characters from every group -- Pilih karakter dari setiap grup -- -- -- &Length: -- &Panjang: -- -- -- Passphrase -- Frasa Sandi -- -- -- Wordlist: -- Daftar Kata: -- -- -- Word Separator: -- Pemisah Kata: -- -- -- Close -- Tutup -- -- -- Entropy: %1 bit -- Entropi: %1 bit -- -- -- Password Quality: %1 -- Kualitas Sandi: %1 -- -- -- Poor -- Password quality -- Buruk -- -- -- Weak -- Password quality -- Lemah -- -- -- Good -- Password quality -- Baik -- -- -- Excellent -- Password quality -- Sempurna -- -- -- Switch to advanced mode -- Beralih ke mode lanjutan -- -- -- Advanced -- Tingkat Lanjut -- -- -- Braces -- Tanda Kurung -- -- -- Punctuation -- Tanda Baca -- -- -- Quotes -- Tanda Petik -- -- -- Logograms -- Logogram -- -- -- Character set to exclude from generated password -- Karakter yang dikecualikan dari sandi yang dibuat -- -- -- Do not include: -- Jangan sertakan: -- -- -- Add non-hex letters to "do not include" list -- Tambahkan huruf bukan-hex ke daftar "jangan sertakan" -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Karakter yang dikecualikan: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Sandi yang dibuat -- -- -- Upper-case letters -- Huruf besar -- -- -- Lower-case letters -- Huruf kecil -- -- -- Special characters -- Karakter spesial -- -- -- Math Symbols -- Simbol Matematika -- -- -- Dashes and Slashes -- Garis Tengah dan Miring -- -- -- Excluded characters -- Karakter yang dikecualikan -- -- -- Hex Passwords -- Sandi Hex -- -- -- Password length -- Panjang sandi -- -- -- Word Case: -- -- -- -- Regenerate password -- Buat ulang sandi -- -- -- Copy password -- Salin sandi -- -- -- lower case -- huruf kecil -- -- -- UPPER CASE -- HURUF BESAR -- -- -- Title Case -- -- -- -- Generate Password -- Buat Sandi -- -- -- Also choose from: -- Juga pilih dari: -- -- -- Additional characters to use for the generated password -- Karakter tambahan yang digunakan untuk membuat sandi -- -- -- Additional characters -- Karakter tambahan -- -- -- Word Count: -- Jumlah Kata: -- -- -- Esc -- Esc -- -- -- Apply Password -- Terapkan kata sandi -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Buat ulang sandi (%1) -- -- -- Special Characters -- Karakter Spesial -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistik -- -- -- Very weak password -- Kata sandi sangat lemah -- -- -- Password entropy is %1 bits -- Entropi sandi adalah %1 bit -- -- -- Weak password -- Kata sandi lemah -- -- -- Used in %1/%2 -- Digunakan di %1/%2 -- -- -- Password is used %1 times -- Kata sandi sudah digunakan sebanyak %1 kali -- -- -- Password has expired -- Kata sandi kedaluwarsa -- -- -- Password expiry was %1 -- Sandi kedaluwarsa pada %1 -- -- -- Password is about to expire -- Kata sandi akan kedaluwarsa -- -- -- Password expires in %1 days -- Kata sandi akan kedaluwarsa dalam %1 hari -- -- -- Password will expire soon -- Kata sandi akan segera kedaluwarsa -- -- -- Password expires on %1 -- Kata sandi kedaluwarsa pada %1 -- -- -- Health Check -- Pemeriksaan Kesehatan -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Timpa -- -- -- Delete -- Hapus -- -- -- Move -- Pindah -- -- -- Empty -- Kosong -- -- -- Remove -- Buang -- -- -- Skip -- Lewati -- -- -- Disable -- Nonaktifkan -- -- -- Merge -- Gabung -- -- -- Continue -- Lanjutkan -- -- -- -- QObject -- -- Database not opened -- Basisdata tidak terbuka -- -- -- Database hash not available -- Hash basisdata tidak tersedia -- -- -- Client public key not received -- Kunci publik klien tidak diterima -- -- -- Cannot decrypt message -- Tidak bisa mendekripsi pesan -- -- -- Action cancelled or denied -- Tindakan dibatalkan atau ditolak -- -- -- KeePassXC association failed, try again -- Asosiasi KeePassXC gagal, coba lagi -- -- -- Encryption key is not recognized -- Kunci enkripsi tidak dikenali -- -- -- Incorrect action -- Tindakan salah -- -- -- Empty message received -- Pesan kosong diterima -- -- -- No URL provided -- URL tidak ada -- -- -- No logins found -- Tidak ditemukan log masuk -- -- -- Unknown error -- Galat tidak diketahui -- -- -- Add a new entry to a database. -- Tambahkan entri baru ke basisdata. -- -- -- Path of the database. -- Jalur ke basisdata. -- -- -- Key file of the database. -- Berkas kunci dari basisdata. -- -- -- path -- jalur -- -- -- Username for the entry. -- Nama pengguna untuk entri. -- -- -- username -- nama pengguna -- -- -- URL for the entry. -- URL untuk entri. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Ingatkan sandi entri. -- -- -- Generate a password for the entry. -- Buat sandi entri. -- -- -- length -- panjang -- -- -- Path of the entry to add. -- Jalur entri yang akan ditambahkan. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Jalur entri yang akan di salin. -- -- -- Timeout in seconds before clearing the clipboard. -- Waktu kedaluwarsa dalam detik sebelum mengosongkan papan klip. -- -- -- Edit an entry. -- Sunting sebuah entri. -- -- -- Title for the entry. -- Judul entri. -- -- -- title -- judul -- -- -- Path of the entry to edit. -- Jalur entri yang akan disunting. -- -- -- Estimate the entropy of a password. -- Estimasi entropi sandi. -- -- -- Password for which to estimate the entropy. -- Sandi untuk diestimasi entropinya. -- -- -- Perform advanced analysis on the password. -- Jalankan analisis tingkat lanjut pada sandi. -- -- -- -- --Available commands: -- -- -- --Perintah yang tersedia: -- -- -- -- Name of the command to execute. -- Nama perintah untuk dijalankan. -- -- -- List database entries. -- Daftar entri basisdata. -- -- -- Path of the group to list. Default is / -- Jalur grup untuk ditampilkan. Bawaan adalah / -- -- -- Find entries quickly. -- Temukan entri dengan cepat. -- -- -- Search term. -- Lema pencarian. -- -- -- Merge two databases. -- Gabungkan dua basisdata. -- -- -- Path of the database to merge from. -- Jalur sumber basisdata untuk digabungkan. -- -- -- Use the same credentials for both database files. -- Gunakan kredensial yang sama untuk kedua berkas basisdata. -- -- -- Key file of the database to merge from. -- Berkas kunci dari basisdata yang akan digabungkan. -- -- -- Show an entry's information. -- Tampilkan informasi entri. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nama atribut yang akan ditampilkan. Opsi ini bisa digunakan lebih dari sekali, dengan masing-masing atribut ditampilkan satu per baris sesuai dengan urutannya. Jika tidak ada atribut, ringkasan atribut bawaan akan ditampilkan. -- -- -- attribute -- atribut -- -- -- Name of the entry to show. -- Nama entri untuk ditampilkan. -- -- -- NULL device -- Perangkat NULL -- -- -- error reading from device -- galat membaca dari perangkat -- -- -- malformed string -- lema rusak -- -- -- missing closing quote -- kehilangan tanda kutip tutup -- -- -- Group -- Grup -- -- -- Title -- Judul -- -- -- Username -- Nama pengguna -- -- -- Password -- Sandi -- -- -- Notes -- Catatan -- -- -- Last Modified -- Terakhir Diubah -- -- -- Created -- Dibuat -- -- -- Browser Integration -- Integrasi Peramban -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- Buat frasa sandi diceware acak yang baru. -- -- -- Word count for the diceware passphrase. -- Jumlah kata untuk frasa sandi diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Daftar kata untuk generator diceware. --[Bawaan: Inggris EFF] -- -- -- Generate a new random password. -- Buat kata sandi baru secara acak. -- -- -- Could not create entry with path %1. -- Tidak bisa membuat entri dengan jalur %1. -- -- -- Enter password for new entry: -- Masukkan sandi untuk entri baru: -- -- -- Writing the database failed %1. -- Gagal menyimpan basisdata %1. -- -- -- Successfully added entry %1. -- Berhasil menambahkan entri %1. -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- Entri %1 tidak ditemukan. -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- Menghapus entri papan klip dalam %1 detik... -- -- -- Clipboard cleared! -- Entri papan klip dihapus! -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- Tidak bisa menemukan entri dengan jalur %1. -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- Masukkan sandi baru untuk entri: -- -- -- Writing the database failed: %1 -- Gagal menyimpan basisdata: %1 -- -- -- Successfully edited entry %1. -- Berhasil menyunting entri %1. -- -- -- Length %1 -- Panjang %1 -- -- -- Entropy %1 -- Entropi %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- Tipe: Bruteforce -- -- -- Type: Dictionary -- Tipe: Dictionary -- -- -- Type: Dict+Leet -- Tipe: Dict+Leet -- -- -- Type: User Words -- Tipe: User Words -- -- -- Type: User+Leet -- Tipe: User+Leet -- -- -- Type: Repeated -- Tipe: Repeated -- -- -- Type: Sequence -- Tipe: Sequence -- -- -- Type: Spatial -- Tipe: Spatial -- -- -- Type: Date -- Tipe: Tanggal -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- Tipe: Tidak diketahui%1 -- -- -- Entropy %1 (%2) -- Entropi %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Panjang kata sandi (%1) != jumlah panjang bagian (%2) *** -- -- -- Failed to load key file %1: %2 -- Gagal memuat berkas kunci %1: %2 -- -- -- Length of the generated password -- Panjang dari sandi yang dibuat -- -- -- Use lowercase characters -- Gunakan karakter huruf kecil -- -- -- Use uppercase characters -- Gunakan karakter huruf besar -- -- -- Use special characters -- Gunakan karakter spesial -- -- -- Use extended ASCII -- Gunakan ASCII lanjutan -- -- -- Exclude character set -- Kecualikan karakter -- -- -- chars -- karakter -- -- -- Exclude similar looking characters -- Kecualikan karakter yang mirip -- -- -- Include characters from every selected group -- Sertakan karakter dari setiap grup yang dipilih -- -- -- Recursively list the elements of the group. -- Tampilkan daftar semua elemen dari grup. -- -- -- Cannot find group %1. -- Tidak bisa menemukan grup %1. -- -- -- Error reading merge file: --%1 -- Terjadi kesalahan saat menggabungkan berkas: --%1 -- -- -- Unable to save database to file : %1 -- Tidak bisa menyimpan basisdata ke berkas : %1 -- -- -- Unable to save database to file: %1 -- Tidak bisa menyimpan basisdata ke berkas: %1 -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- Berhasil menghapus entri %1. -- -- -- Show the entry's current TOTP. -- Tampilkan TOTP entri. -- -- -- ERROR: unknown attribute %1. -- GALAT: atribut tidak diketahui %1. -- -- -- No program defined for clipboard manipulation -- Tidak ada program yang bisa digunakan untuk manipulasi papan klip -- -- -- file empty -- berkas kosong -- -- -- %1: (row, col) %2,%3 -- %1: (baris, kolom) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Pengaturan Tidak Valid -- -- -- Invalid Key -- TOTP -- Kunci Tidak Valid -- -- -- Message encryption failed. -- Enkripsi pesan gagal. -- -- -- No groups found -- Tidak ada grup yang ditemukan -- -- -- Create a new database. -- Buat basisdata baru. -- -- -- File %1 already exists. -- Berkas %1 sudah ada. -- -- -- Loading the key file failed -- Pemuatan berkas kunci gagal -- -- -- No key is set. Aborting database creation. -- Tidak ada kunci yang diatur. Membatalkan pembuatan basisdata. -- -- -- Failed to save the database: %1. -- Gagal menyimpan basisdata: %1. -- -- -- Successfully created new database. -- Berhasil membuat basisdata baru. -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- Jalur entri untuk dibuang. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- -- The lock file could not be created. Single-instance mode disabled. -- Berkas penguncian tidak bisa dibuat. Mode aplikasi tunggal dinonaktifkan. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - pengelola sandi lintas platform -- -- -- filenames of the password databases to open (*.kdbx) -- nama berkas basisdata sandi untuk dibuka (*.kdbx) -- -- -- path to a custom config file -- jalur ke berkas konfigurasi khusus -- -- -- key file of the database -- berkas kunci basisdata -- -- -- read password of the database from stdin -- baca sandi basisdata dari stdin -- -- -- Another instance of KeePassXC is already running. -- Aplikasi KeePassXC lainnya sudah berjalan. -- -- -- Fatal error while testing the cryptographic functions. -- Galat saat menguji fungsi kriptografi. -- -- -- KeePassXC - Error -- KeePassXC - Galat -- -- -- Database password: -- Sandi basisdata: -- -- -- Cannot create new group -- Tidak bisa membuat grup baru -- -- -- Deactivate password key for the database. -- Nonaktifkan kunci kata sandi untuk basisdata. -- -- -- Displays debugging information. -- Tampilkan informasi pengawakutuan. -- -- -- Deactivate password key for the database to merge from. -- Nonaktifkan kunci kata sandi untuk menggabungkan basisdata. -- -- -- Version %1 -- Versi %1 -- -- -- Build Type: %1 -- Tipe Build: %1 -- -- -- Revision: %1 -- Revisi: %1 -- -- -- Distribution: %1 -- Distribusi: %1 -- -- -- Debugging mode is disabled. -- Mode debugging dinonaktifkan. -- -- -- Debugging mode is enabled. -- Mode debugging diaktifkan. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistem operasi: %1 --Arsitektur CPU: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Ketik-Otomatis -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nihil -- -- -- Enabled extensions: -- Ekstensi aktif: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- Menambahkan grup baru ke basisdata. -- -- -- Path of the group to add. -- Jalur dari grup yang ingin ditambahkan. -- -- -- Group %1 already exists! -- Grup %1 sudah ada! -- -- -- Group %1 not found. -- Grup %1 tidak ditemukan. -- -- -- Successfully added group %1. -- Berhasil menambahkan grup %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Periksa apakah ada kata sandi yang dibocorkan secara publik. NAMABERKAS harus menjadi jalur dari daftar berkas kata sandi hash SHA-1 yang bocor dalam format HIBP, sebagaimana tersedia dari https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- NAMABERKAS -- -- -- Analyze passwords for weaknesses and problems. -- Menganalisa kata sandi untuk kelemahan dan masalah. -- -- -- Failed to open HIBP file %1: %2 -- Gagal membuka berkas HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Mengevaluasi entri basisdata terhadap berkas HIBP, ini akan memakan waktu cukup lama... -- -- -- Close the currently opened database. -- Tutup basisdata yang saat ini dibuka. -- -- -- Display this help. -- Tampilkan bantuan ini. -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- Daftar kata terlalu kecil (<1000 item) -- -- -- Exit interactive mode. -- Keluar dari mode interaktif. -- -- -- Exports the content of a database to standard output in the specified format. -- Ekspor konten dari basisdata ke keluaran standar dalam format yang ditentukan. -- -- -- Unable to export database to XML: %1 -- Tidak bisa mengekspor basisdata ke XML: %1 -- -- -- Unsupported format %1 -- Format tidak didukung %1 -- -- -- Use numbers -- Gunakan angka -- -- -- Invalid password length %1 -- Panjang sandi tidak valid %1 -- -- -- Display command help. -- Tampilkan bantuan perintah. -- -- -- Available commands: -- Perintah yang tersedia: -- -- -- Import the contents of an XML database. -- Impor konten dari basisdata XML. -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- Jalur dari basisdata baru. -- -- -- Successfully imported database. -- Berhasil mengimpor basisdata. -- -- -- Unknown command %1 -- Perintah tidak diketahui %1 -- -- -- Flattens the output to single lines. -- Ratakan keluaran menjadi satu baris. -- -- -- Only print the changes detected by the merge operation. -- Hanya cetak perubahan yang terdeteksi oleh operasi gabungan. -- -- -- Yubikey slot for the second database. -- Slot Yubikey untuk basisdata kedua. -- -- -- Successfully merged %1 into %2. -- Berhasil menggabungkan %1 ke %2. -- -- -- Database was not modified by merge operation. -- Basisdata tidak ada perubahan yang diakibatkan oleh proses penggabungan. -- -- -- Moves an entry to a new group. -- Pindah entri ke grup baru -- -- -- Path of the entry to move. -- Jalur dari entri yang ingin dipindahkan -- -- -- Path of the destination group. -- Jalur dari destinasi grup. -- -- -- Could not find group with path %1. -- Tidak bisa menemukan grup dengan jalur %1. -- -- -- Entry is already in group %1. -- Entri sudah ada di dalam grup %1. -- -- -- Successfully moved entry %1 to group %2. -- Berhasil memindahkan entri %1 ke grup %2 -- -- -- Open a database. -- Buka basisdata. -- -- -- Path of the group to remove. -- Jalur dari grup yang ingin dihapus. -- -- -- Cannot remove root group from database. -- Tidak dapat menghapus grup root dari basisdata. -- -- -- Successfully recycled group %1. -- Berhasil memulihkan grup %1. -- -- -- Successfully deleted group %1. -- Berhasil menghapus grup %1. -- -- -- Failed to open database file %1: not found -- Gagal membuka berkas basisdata %1: tidak ditemukan -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- Gagal membuka berkas basisdata %1: tidak terbaca -- -- -- Enter password to unlock %1: -- Masukkan sandi untuk membuka %1: -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- Masukkan sandi untuk mengenkripsi basisdata (opsional): -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- Integrasi Layanan Rahasia -- -- -- User name -- Nama pengguna -- -- -- Password for '%1' has been leaked %2 time(s)! -- Kata sandi untuk '%1' telah bocor %2 kali! -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- Tampilkan atribut yang dilindungi dalam teks yang jelas. -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERROR: Harap tentukan salah satu dari --attribute atau -totp, bukan keduanya. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- Atribut "%1" tidak ditemukan. -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- waktu -- -- -- Set the key file for the database. -- Atur berkas kunci untuk basisdata. -- -- -- Set a password for the database. -- Atur kata sandi untuk basisdata. -- -- -- Invalid decryption time %1. -- Waktu dekripsi tidak valid %1. -- -- -- Target decryption time must be between %1 and %2. -- Waktu dekripsi target harus antara %1 dan %2. -- -- -- Failed to set database password. -- Gagal mengatur kata sandi basisdata. -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Format yang digunakan ketika mengekspor. Pilihan yang tersedia adalah 'xml' atau 'csv'. Standarnya adalah 'xml'. -- -- -- Unable to import XML database: %1 -- Tidak bisa mengimpor basisdata XML: %1 -- -- -- Show a database's information. -- Tampilkan informasi basisdata. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nama: -- -- -- Description: -- Deskripsi: -- -- -- Cipher: -- Sandi Cipher: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Keranjang sampah diaktifkan. -- -- -- Recycle bin is not enabled. -- Keranjang sampah tidak diaktifkan. -- -- -- Invalid command %1. -- Perintah tidak valid %1. -- -- -- Invalid YubiKey serial %1 -- Serial YubiKey tidak valid %1 -- -- -- Please touch the button on your YubiKey to continue… -- Silakan sentuh tombol pada YubiKey Anda untuk melanjutkan... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Apakah Anda ingin membuat basisdata dengan kata sandi kosong? [y/N]: -- -- -- Repeat password: -- Ulangi kata sandi: -- -- -- Error: Passwords do not match. -- Error: kata sandi tidak sesuai. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- %1 mili detik -- -- -- %1 s -- seconds -- %1 detik -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Galat zlib internal ketika memampatkan: -- -- -- Error writing to underlying device: -- Terjadi kesalahan saat menyimpan ke perangkat: -- -- -- Error opening underlying device: -- Terjadi kesalahan saat membuka perangkat: -- -- -- Error reading data from underlying device: -- Terjadi kesalahan saat membaca data dari perangkat: -- -- -- Internal zlib error when decompressing: -- Galat zlib internal ketika dekompres: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Format gzip tidak didukung pada versi zlib ini. -- -- -- Internal zlib error: -- Galat zlib internal: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Tampilkan juga entri yang telah dikecualikan dari laporan -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- Buruk -- -- -- Bad — password must be changed -- Buruk — kata sandi harus diubah -- -- -- Poor -- Password quality -- Buruk -- -- -- Poor — password should be changed -- Kurang baik — kata sandi harus diubah -- -- -- Weak -- Password quality -- Lemah -- -- -- Weak — consider changing the password -- Lemah — pertimbangkan untuk mengubah kata sandi -- -- -- (Excluded) -- (Dikecualikan) -- -- -- This entry is being excluded from reports -- Entri ini sedang dikecualikan dari laporan -- -- -- Please wait, health data is being calculated... -- Harap tunggu, data kesehatan sedang dikalkulasi... -- -- -- Congratulations, everything is healthy! -- Selamat, semuanya sehat! -- -- -- Title -- Judul -- -- -- Path -- Jalur -- -- -- Score -- Skor -- -- -- Reason -- Alasan -- -- -- Edit Entry... -- Sunting Entri... -- -- -- Exclude from reports -- Kecualikan dari laporan -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- PERHATIAN: Laporan ini membutuhkan pengiriman informasi ke layanan online Have I Been Pwned (https://haveibeenpwned.com). Jika Anda melanjutkan, kata sandi basisdata Anda akan diacak secara kriptografis dan lima karakter pertama dari hash tersebut akan dikirim dengan aman ke layanan ini. Basisdata Anda tetap aman dan tidak dapat dibangun kembali dari informasi ini. Namun, jumlah kata sandi yang Anda kirim dan alamat IP Anda akan terpapar ke layanan ini. -- -- -- Perform Online Analysis -- Lakukan Analisis Online -- -- -- Also show entries that have been excluded from reports -- Tampilkan juga entri yang telah dikecualikan dari laporan -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Versi KeePassXC ini tidak memiliki fungsi konektivitas jaringan. Konektivitas jaringan diperlukan untuk memeriksa kata sandi Anda terhadap basisdata Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Judul -- -- -- Path -- Jalur -- -- -- Password exposed… -- -- -- -- (Excluded) -- (Dikecualikan) -- -- -- This entry is being excluded from reports -- Entri ini sedang dikecualikan dari laporan -- -- -- once -- sekali -- -- -- up to 10 times -- hingga 10 kali -- -- -- up to 100 times -- hingga 100 kali -- -- -- up to 1000 times -- hingga 1000 kali -- -- -- up to 10,000 times -- hingga 10,000 kali -- -- -- up to 100,000 times -- hingga 100,000 kali -- -- -- up to a million times -- hingga 1 juta kali -- -- -- millions of times -- jutaan kali -- -- -- Edit Entry... -- Sunting Entri... -- -- -- Exclude from reports -- Kecualikan dari laporan -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Nama -- -- -- Value -- Nilai -- -- -- Please wait, database statistics are being calculated... -- Harap tunggu, statistik basisdata sedang dikalkulasi... -- -- -- Database name -- Nama basisdata -- -- -- Description -- Deskripsi -- -- -- Location -- Lokasi -- -- -- Last saved -- Terakhir disimpan -- -- -- Unsaved changes -- Berubahan belum disimpan -- -- -- yes -- ya -- -- -- no -- tidak -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Basisdata telah dimodifikasi, tetapi perubahan belum disimpan ke penyimpanan. -- -- -- Number of groups -- Jumlah grup -- -- -- Number of entries -- Jumlah entri -- -- -- Number of expired entries -- Jumlah entri yang kedaluwarsa -- -- -- The database contains entries that have expired. -- Basisdata berisi entri yang sudah kedaluwarsa. -- -- -- Unique passwords -- Kata sandi unik -- -- -- Non-unique passwords -- Kata sandi tidak unik -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Lebih dari 10% kata sandi digunakan kembali. Gunakan kata sandi unik jika memungkinkan. -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Beberapa kata sandi digunakan lebih dari tiga kali. Gunakan kata sandi unik jika memungkinkan. -- -- -- Number of short passwords -- Jumlah kata sandi singkat -- -- -- Recommended minimum password length is at least 8 characters. -- Panjang kata sandi minimum yang disarankan minimal 8 karakter. -- -- -- Number of weak passwords -- Jumlah kata sandi yang lemah -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- Panjang rata-rata kata sandi -- -- -- %1 characters -- %1 karakter -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Panjang rata-rata kata sandi kurang dari sepuluh karakter. Kata sandi yang lebih panjang memberikan keamanan yang lebih. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Koneksi agen gagal. -- -- -- Agent protocol error. -- Galat protokol agen. -- -- -- No agent running, cannot add identity. -- Tidak ada agen yang berjalan, tidak dapat menambahkan identitas. -- -- -- No agent running, cannot remove identity. -- Tidak ada agen yang berjalan, tidak dapat menghapus identitas. -- -- -- Agent refused this identity. Possible reasons include: -- Agen menolak identitas ini. Alasan yang mungkin meliputi: -- -- -- The key has already been added. -- Kunci sudah ditambahkan. -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Cari Bantuan -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Kata pencarian seperti berikut ini: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- -- -- -- exclude term from results -- kecualikan kata dari hasil pencarian -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- Contoh -- -- -- -- SearchWidget -- -- Search -- Cari -- -- -- Limit search to selected group -- Batasi pencarian ke grup yang dipilih -- -- -- Search Help -- Cari Bantuan -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Cari (%1)... -- -- -- Case sensitive -- Sensitif besar kecil huruf -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Pilihan -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Aktifkan KeepassXC Freedesktop.org Integrasi Layanan Rahasia -- -- -- General -- Umum -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- Otorisasi -- -- -- These applications are currently connected: -- Aplikasi ini sedang terhubung: -- -- -- Don't confirm when entries are deleted by clients -- Jangan konfirmasi ketika entri dihapus oleh klien -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Error:</b>Gagal terhubung ke DBus. Harap periksa pengaturan DBus Anda. -- -- -- <b>Warning:</b> -- <b>Peringatan:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktif -- -- -- Allow export -- Izinkan ekspor -- -- -- Allow import -- Izinkan impor -- -- -- Own certificate -- Sertifikat milik pribadi -- -- -- Fingerprint: -- Sidik Jari: -- -- -- Certificate: -- Sertifikat: -- -- -- Signer -- -- -- -- Key: -- Kunci: -- -- -- Generate -- Buat -- -- -- Import -- Impor -- -- -- Export -- Ekspor -- -- -- Imported certificates -- Sertifikat yang diimpor -- -- -- Trust -- Percaya -- -- -- Ask -- Tanya -- -- -- Untrust -- -- -- -- Remove -- Buang -- -- -- Path -- Jalur -- -- -- Status -- Status -- -- -- Fingerprint -- Tanda tangan -- -- -- Certificate -- Sertifikat -- -- -- Trusted -- Dipercaya -- -- -- Untrusted -- Tidak dipercaya -- -- -- Unknown -- Tidak diketahui -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- Berkas kunci KeeShare -- -- -- All files -- Semua Berkas -- -- -- Select path -- Pilih jalur -- -- -- Exporting changed certificate -- Mengekspor sertifikat yang diubah -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- Izinkan impor KeeShare -- -- -- Allow KeeShare exports -- Izinkan ekspor KeeShare -- -- -- Only show warnings and errors -- Hanya tampilkan peringatan dan error -- -- -- Key -- Kunci -- -- -- Signer name field -- -- -- -- Generate new certificate -- Hasilkan sertifikat baru -- -- -- Import existing certificate -- Impor sertifikat yang sudah ada -- -- -- Export own certificate -- Ekspor sertifikat pribadi -- -- -- Known shares -- -- -- -- Trust selected certificate -- Percayakan sertifikat terpilih -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- Hapus sertifikat yang dipilih -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Apakah Anda ingin mempercayai %1 dengan sidik jari %2 dari %3? {1 ?} {2 ?} -- -- -- Not this time -- Tidak sekarang -- -- -- Never -- Tidak Pernah -- -- -- Always -- Selalu -- -- -- Just this time -- -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- Berkas tidak bisa dibaca -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- Berkas tidak ada -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Impor dari %1 gagal (%2) -- -- -- Import from %1 successful (%2) -- Impor dari %1 berhasil (%2) -- -- -- Imported from %1 -- Diimpor dari %1 -- -- -- Export to %1 failed (%2) -- Ekspor ke %1 gagal (%2) -- -- -- Export to %1 successful (%2) -- Ekspor ke %1 berhasil (%2) -- -- -- Export to %1 -- Ekspor ke %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Sandi Berwaktu -- -- -- 000000 -- 000000 -- -- -- Copy -- Salin -- -- -- Expires in <b>%n</b> second(s) -- Kedaluwarsa dalam <b>%n</b> detik -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Salin -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- CATATAN: Pengaturan TOTP ini sangat khusus dan mungkin tidak akan bekerja dengan otentikator lainnya. -- -- -- There was an error creating the QR code. -- Ada kesalahan saat membuat kode QR. -- -- -- Closing in %1 seconds. -- Akan ditutup dalam %1 detik. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Siapkan TOTP -- -- -- Default RFC 6238 token settings -- Pengaturan bawaan token RFC 6238 -- -- -- Steam token settings -- Pengaturan token steam -- -- -- Use custom settings -- Gunakan pengaturan khusus -- -- -- Custom Settings -- Pengaturan Khusus -- -- -- Time step: -- Interval waktu: -- -- -- sec -- Seconds -- det -- -- -- Code size: -- Ukuran kode: -- -- -- Secret Key: -- Kunci Rahasia: -- -- -- Secret key must be in Base32 format -- Kunci rahasia harus dalam format Base32 -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritma: -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- TOTP Secret tidak valid -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Anda telah memasukkan kunci rahasia yang tidak valid. Kuncinya harus dalam format Base32. --Contoh: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Konfirmasi Penghapusan Pengaturan TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Apakah Anda yakin ingin menghapus pengaturan TOTP untuk entri ini? -- -- -- -- URLEdit -- -- Invalid URL -- URL tidak valid -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Memeriksa pembaruan -- -- -- Checking for updates... -- Memeriksa pembaruan... -- -- -- Close -- Tutup -- -- -- Update Error! -- Pembaruan Gagal! -- -- -- An error occurred in retrieving update information. -- Terjadi kesalahan saat mengambil informasi pembaruan. -- -- -- Please try again later. -- Silakan coba lagi nanti. -- -- -- Software Update -- Pembaruan Perangkat Lunak -- -- -- A new version of KeePassXC is available! -- Versi baru KeePassXC telah tersedia! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 telah tersedia — yang Anda miliki %2. -- -- -- Download it at keepassxc.org -- Unduh di keepassxc.org -- -- -- You're up-to-date! -- Sudah yang paling baru! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 saat ini adalah versi yang paling baru -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Mulai menyimpan sandi Anda dengan aman di dalam basisdata KeePassXC -- -- -- Create new database -- Buat basisdata baru -- -- -- Open existing database -- Buka basisdata yang ada -- -- -- Import from KeePass 1 -- Impor dari KeePass 1 -- -- -- Import from CSV -- Impor dari CSV -- -- -- Recent databases -- Basisdata baru-baru ini -- -- -- Welcome to KeePassXC %1 -- Selamat datang di KeePassXC %1 -- -- -- Import from 1Password -- Impor dari 1Password -- -- -- Open a recent database -- Buka basisdata terbaru -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Tekan -- -- -- Passive -- Pasif -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Segarkan -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Jika Anda memiliki <a href="https://www.yubico.com/">YubiKey</a>, Anda dapat menggunakannya sebagai keamanan tambahan.</p><p>YubiKey membutuhkan salah satu slotnya untuk diprogram sebagai <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Segarkan token perangkat keras -- -- -- Hardware key slot selection -- Pemilihan slot kunci perangkat keras -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- Mendeteksi kunci perangkat keras… -- -- -- No hardware keys detected -- Tidak mendeteksi kunci perangkat keras -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_it.ts keepassxc-2.6.4-patched/share/translations/keepassx_it.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_it.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_it.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7895 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Informazioni su KeePassXC -- -- -- About -- Informazioni -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Segnala eventuali problemi su: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC è distribuito sotto i termini della licenza GNU General Public License (GPL) versione 2 o (come opzione) versione 3. -- -- -- Contributors -- Collaboratori -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"> vedere i contributi su GitHub</a> -- -- -- Debug Info -- Informazioni di debug -- -- -- Include the following information whenever you report a bug: -- Quando segnali un problema includi le seguenti informazioni: -- -- -- Copy to clipboard -- Copia negli appunti -- -- -- Project Maintainers: -- Responsabili del progetto: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Uno speciale ringraziamento dal team di KeePassXC va a debfx per la creazione del KeePassX originale. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Usa OpenSSH per Windows al posto di Pageant -- -- -- Enable SSH Agent integration -- Abilitare l'integrazione dell'agente SSH -- -- -- SSH_AUTH_SOCK value -- valore SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- sostituire SSH_AUTH_SOCK -- -- -- (empty) -- (vuoto) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Nessun collegamento SSH disponibile. Verificare che la variabile d'ambiente SSH_AUTH_SOCK esista oppure sovrascriverne il contenuto. -- -- -- SSH Agent connection is working! -- La connessione dell'agente SSH sta funzionando! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Impostazioni applicazione -- -- -- General -- Generale -- -- -- Security -- Sicurezza -- -- -- Access error for config file %1 -- Errore di accesso per il file di configurazione %1 -- -- -- Icon only -- Solo icone -- -- -- Text only -- Solo icone -- -- -- Text beside icon -- Testo accanto alle icone -- -- -- Text under icon -- Testo sotto le icone -- -- -- Follow style -- Segui stile -- -- -- Reset Settings? -- Ripristinare le impostazioni? -- -- -- Are you sure you want to reset all general and security settings to default? -- Sei sicuro di voler ripristinare tutte le impostazioni generali e di sicurezza predefinite? -- -- -- Monochrome (light) -- Monocromatico (chiaro) -- -- -- Monochrome (dark) -- Monocromatico (scuro) -- -- -- Colorful -- Colorato -- -- -- You must restart the application to set the new language. Would you like to restart now? -- È necessario riavviare l'applicazione per impostare la nuova lingua. Vuoi riavviare ora? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Impostazioni di base -- -- -- Startup -- Avvio -- -- -- Start only a single instance of KeePassXC -- Avvia una sola istanza di KeePassXC -- -- -- Minimize window at application startup -- Minimizza la finestra all'avvio della applicazione -- -- -- File Management -- Gestione dei file -- -- -- Backup database file before saving -- Effettua una copia di sicurezza del database prima di salvarlo -- -- -- Automatically save after every change -- Salva automaticamente dopo ogni modifica -- -- -- Automatically reload the database when modified externally -- Ricarica automaticamente il database quando ci sono modifiche esterne -- -- -- Entry Management -- Gestione dell'elemento -- -- -- Use group icon on entry creation -- Usa icona del gruppo alla creazione di una voce -- -- -- Minimize instead of app exit -- Minimizzare invece di uscire dall'app -- -- -- Show a system tray icon -- Visualizza un'icona nell'area di notifica di sistema -- -- -- Hide window to system tray when minimized -- Nascondi la finestra nell'area di notifica di sistema quando viene minimizzata -- -- -- Auto-Type -- Completamento automatico -- -- -- Use entry title to match windows for global Auto-Type -- Usa il titolo della voce per la corrispondenza con le finestre per il completamento automatico globale -- -- -- Use entry URL to match windows for global Auto-Type -- Usa URL della voce per la corrispondenza con le finestre per il completamento automatico globale -- -- -- Always ask before performing Auto-Type -- Chiedi sempre prima di effettuare il completamento automatico -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Barra degli strumenti spostabile -- -- -- Remember previously used databases -- Ricordare i database usati in precedenza -- -- -- Load previously open databases on startup -- Carica database aperti in precedenza all'avvio -- -- -- Remember database key files and security dongles -- Memorizzare i file di chiave del database e i dongle di sicurezza -- -- -- Check for updates at application startup once per week -- Verificare la disponibilità di aggiornamenti all'avvio dell'applicazione una volta alla settimana -- -- -- Include beta releases when checking for updates -- Includi versioni beta durante il controllo della disponibilità di aggiornamenti -- -- -- Language: -- Lingua: -- -- -- (restart program to activate) -- (riavviare il programma per attivare) -- -- -- Minimize window after unlocking database -- Riduci a icona la finestra dopo lo sblocco del database -- -- -- Minimize when opening a URL -- Riduci a icona all'apertura di un URL -- -- -- Hide window when copying to clipboard -- Nascondi la finestra durante la copia negli Appunti -- -- -- Minimize -- Minimizzare -- -- -- Drop to background -- Rilascia su sfondo -- -- -- Favicon download timeout: -- Timeout scaricamento Favicon: -- -- -- Website icon download timeout in seconds -- Timeout scaricamento icona sito Web in secondi -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- Stile pulsante della barra degli strumenti -- -- -- Language selection -- Selezione della lingua -- -- -- Global auto-type shortcut -- Scorciatoia globale per il completamento automatico -- -- -- Auto-type character typing delay milliseconds -- Ritardo in millisecondi del completamento automatico dei caratteri -- -- -- Auto-type start delay milliseconds -- Ritardo di avvio in millisecondi dell completamento automatico -- -- -- Automatically launch KeePassXC at system startup -- Avvia automaticamente KeePassXC all'avvio del sistema -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Salva in modo sicuro i file di database (disabilita se riscontra problemi con Dropbox, ecc.) -- -- -- User Interface -- Interfaccia utente -- -- -- Toolbar button style: -- Stile pulsanti della barra degli strumenti: -- -- -- Use monospaced font for notes -- Utilizzare un tipo di carattere monospazio per le note -- -- -- Tray icon type: -- Tipo di icona vassoio: -- -- -- Reset settings to default… -- Ripristina impostazioni predefinite... -- -- -- Auto-Type typing delay: -- Ritardo del completamento automatico: -- -- -- Global Auto-Type shortcut: -- Scorciatoia globale per l'auto-completamento -- -- -- Auto-Type start delay: -- Ritardo avvio auto-completamento: -- -- -- Automatically save when locking database -- Salva automaticamente durante il blocco del database -- -- -- Automatically save non-data changes when locking database -- Salva automaticamente le modifiche non apportate ai dati durante il blocco del database -- -- -- Tray icon type -- Tipo di icona vassoio -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeout -- -- -- Clear clipboard after -- Svuota gli appunti dopo -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Blocca i database dopo un'inattività di -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Dimentica TouchID dopo inattività di -- -- -- Convenience -- Comodità -- -- -- Lock databases when session is locked or lid is closed -- Blocca i database quando la sessione è bloccata o il coperchio è chiuso -- -- -- Forget TouchID when session is locked or lid is closed -- Dimentica TouchID quando la sessione è bloccata o il coperchio è chiuso -- -- -- Lock databases after minimizing the window -- Blocca il database dopo la minimizzazione della finestra -- -- -- Re-lock previously locked database after performing Auto-Type -- Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type -- -- -- Hide passwords in the entry preview panel -- Nascondi la password nel pannello di anteprima della voce -- -- -- Hide entry notes by default -- Nascondi le note della voce per impostazione predefinita -- -- -- Privacy -- Riservatezza -- -- -- Use DuckDuckGo service to download website icons -- Utilizzare il servizio DuckDuckGo per scaricare le icone del sito web -- -- -- Clipboard clear seconds -- Secondi per la cancellazione degli appunti -- -- -- Touch ID inactivity reset -- Ripristino per inattività del Touch ID -- -- -- Database lock timeout seconds -- Secondi di timeout per il blocco del database -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Cancella query di ricerca dopo -- -- -- Require password repeat when it is visible -- Richiedi ripetizione password quando è visibile -- -- -- Hide passwords when editing them -- Nascondi la password quando viene modificata -- -- -- Use placeholder for empty password fields -- Usa segnaposti per campi password vuoti -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Impossibile trovare una voce che corrisponda al titolo della finestra: -- -- -- Auto-Type - KeePassXC -- KeePassXC - Completamento automatico -- -- -- Auto-Type -- Completamento automatico -- -- -- The Syntax of your Auto-Type statement is incorrect! -- La sintassi del tuo comando di auto-completamento non è corretta! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Questo comando di auto-completamento contiene un ritardo molto lungo. Si desidera veramente procedere? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Questo comando di auto-completamento contiene pressioni dei tasti molto lente. Si desidera veramente procedere? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Questo comando di auto-completamento contiene argomenti che molto spesso si ripetono. Si desidera veramente procedere? -- -- -- Permission Required -- Permesso richiesto -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC richiede il permesso di Accessibilità per effettuare l'auto-completamento di livello base. Se hai già concesso il permesso, riavvia KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Finestra -- -- -- Sequence -- Sequenza -- -- -- Default sequence -- Sequenza predefinita -- -- -- -- AutoTypeMatchModel -- -- Group -- Gruppo -- -- -- Title -- Titolo -- -- -- Username -- Nome utente -- -- -- Sequence -- Sequenza -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copia &nome utente -- -- -- Copy &password -- Copia &password -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permesso richiesto -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l'auto-completamento globale. La registrazione dello schermo è necessaria per usare il titolo della finestra al fine di trovare le voci corrispondenti. Se hai già concesso il permesso, riavvia KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- KeePassXC - Completamento automatico -- -- -- Select entry to Auto-Type: -- Seleziona una voce per il completamento automatico: -- -- -- Search... -- Ricerca... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Browser accesso richiesto -- -- -- %1 is requesting access to the following entries: -- %1 sta chiedendo l'accesso alle seguenti voci: -- -- -- Remember access to checked entries -- Ricorda le impostazioni di accesso per le voci selezionate -- -- -- Remember -- Ricorda -- -- -- Allow access to entries -- Permetti di accedere alle voci -- -- -- Allow Selected -- Consenti selezionati -- -- -- Deny All -- Nega tutto -- -- -- Disable for this site -- Disabilita per questo sito -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- Voce di salvataggio del browser KeePassXC -- -- -- Ok -- Ok -- -- -- Cancel -- Annulla -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- C'è più di un database aperto --Selezionare il database corretto dove salvare le credenziali -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: nuova richiesta di associazione chiave -- -- -- Save and allow access -- Salva e permetti l'accesso -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Vuoi sovrascrivere la chiave esistente? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Esiste già una chiave crittografica condivisa con il nome "%1"- Vuoi sovrascriverla? -- -- -- KeePassXC: Update Entry -- KeePassXC: aggiorna voce -- -- -- Do you want to update the information in %1 - %2? -- Vuoi aggiornare le informazioni in %1 - %2? -- -- -- Abort -- Interrompi -- -- -- Converting attributes to custom data… -- Conversione di attributi in dati personalizzati in corso... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: attributi KeePassHTTP convertiti -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Attributi convertiti correttamente da %1 voce(i). --Sono stati spostati %2 chiavi nei dati personalizzati. -- -- -- Successfully moved %n keys to custom data. -- Sono stati spostati %n chiavi in dati personalizzati.Sono state spostate %n chiavi in dati personalizzati. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nessuna voce trovata con gli attributi KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Il database attivo non contiene una voce con attributi KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: rilevate le impostazioni di integrazione del browser legacy -- -- -- KeePassXC: Create a new group -- KeePassXC: Creare un nuovo gruppo -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- È stata ricevuta una richiesta di creazione di un nuovo gruppo "%1". --Si desidera creare questo gruppo? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Le impostazioni di KeePassXC-Browser devono essere spostate nelle impostazioni del database. --Ciò è necessario per mantenere le connessioni del browser corrente. --Si desidera eseguire ora la migrazione delle impostazioni esistenti? -- -- -- Don't show this warning again -- Non mostrare nuovamente questo avviso -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Hai ricevuto una richiesta di associazione per il segguente database: --%1 -- --Assegnagli un nome univoco o un ID, per esempio: --laptop-chrome -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Finestra -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Questo è necessario per accedere al tuo database con KeePassXC-Browser -- -- -- Enable browser integration -- Abilitare l'integrazione del browser -- -- -- General -- Generale -- -- -- Browsers installed as snaps are currently not supported. -- I browser installati come snap non sono attualmente supportati. -- -- -- Enable integration for these browsers: -- Abilita l'integrazione per i seguenti browser: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Mostra una notifica quando le credenziali sono richieste -- -- -- Request to unlock the database if it is locked -- Richiedi di sbloccare il database se è bloccato -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Vengono restituiti solo voci con lo stesso schema (http://, https://, ...) -- -- -- Match URL scheme (e.g., https://...) -- Schema di corrispondenza URL (ad esempio, https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Restituisci solo le corrispondenze migliori per un'URL specifica invece di tutte le voci per l'intero dominio. -- -- -- Return only best-matching credentials -- Restituisci solo le credenziali che corrispondono maggiormente -- -- -- Returns expired credentials. String [expired] is added to the title. -- Restituisce le credenziali scadute. La stringa [scaduto] viene aggiunta al titolo. -- -- -- Allow returning expired credentials -- Restituisci le credenziali scadute -- -- -- All databases connected to the extension will return matching credentials. -- Tutti i database connessi all'estensione restituiranno le credenziali corrispondenti. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Cerca le credenziali corrispondenti in tutti i database aperti -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Ordina le credenziali corrispondenti per titolo -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Ordina le credenziali corrispondenti per nome utente -- -- -- Advanced -- Avanzate -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Non chiedere conferma prima di accedere alle credenziali -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Non chiedere conferma prima di aggiornare le credenziali -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Non chiedere l'autorizzazione per l'autenticazione HTTP e basic -- -- -- Automatically creating or updating string fields is not supported. -- La creazione o l'aggiornamento automatico dei campi stringa non è supportato. -- -- -- Return advanced string fields which start with "KPH: " -- Restituisci campi di stringa avanzati che iniziano per "KPH:" -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Non visualizzare il popup che suggerisce la migrazione delle impostazioni KeePassHTTP legacy. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Non richiedere la migrazione delle impostazioni KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Aggiorna automaticamente all'avvio il percorso dei binari di KeePassXC o keepassxc-proxy per gli script di messaggistica nativa -- -- -- Update native messaging manifest files at startup -- Aggiorna all'avvio il manifesto della messaggeria nativa -- -- -- Use a custom proxy location if you installed a proxy manually. -- Usa un indirizzo proxy personalizzato se hai installato manualmente un proxy -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Utilizza un proxy personalizzato -- -- -- Custom proxy location field -- Campo percorso proxy personalizzato -- -- -- Browser for custom proxy file -- Browser per file proxy personalizzato -- -- -- Browse... -- Button for opening file dialog -- Sfoglia... -- -- -- Use a custom browser configuration location: -- Usare un percorso personalizzato per la configurazione del browser: -- -- -- Browser type: -- Tipologia di browser: -- -- -- Toolbar button style -- Stile pulsante della barra degli strumenti -- -- -- Config Location: -- Percorso di configurazione: -- -- -- Custom browser location field -- Campo percorso browser personalizzato -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Cerca un percorso personalizzato per il browser -- -- -- Custom extension ID: -- ID estensione personalizzata: -- -- -- Custom extension ID -- ID estensione personalizzata -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- A causa del sandboxing di Snap, è necessario eseguire uno script per abilitare l'integrazione del browser. <br />È possibile ottenere questo script da %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser è necessario per far funzionare l'integrazione del browser. <br />Scaricarlo per %1, %2 e %3. %4 -- -- -- Please see special instructions for browser extension use below -- Si prega di consultare le istruzioni speciali per l'uso dell'estensione del browser di seguito -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Errore:</b> Il percorso personalizzato per il proxy non può essere trovato!<br/>L'estensione del browser NON PUO' LAVORARE senza l'utilizzo di un proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Avviso:</b> le seguenti opzioni possono essere pericolose. -- -- -- Executable Files -- File eseguibili -- -- -- All Files -- Tutti i file -- -- -- Select custom proxy location -- Selezionare una posizione personalizzata per il proxy -- -- -- Select native messaging host folder location -- Selezionare il percorso per la cartella principale della messaggistica -- -- -- -- CloneDialog -- -- Clone Options -- Opzioni clonazione -- -- -- Append ' - Clone' to title -- Aggiungi ' - Clone' al titolo -- -- -- Replace username and password with references -- Sostituisci nome utente e password con riferimenti -- -- -- Copy history -- Copia cronologia -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importa campi CSV -- -- -- filename -- nomefile -- -- -- size, rows, columns -- dimensione, righe, colonne -- -- -- Encoding -- Codifica -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Il testo è qualificato da -- -- -- Fields are separated by -- I campi sono separati da -- -- -- Comments start with -- I commenti iniziano con -- -- -- Consider '\' an escape character -- Considera '\' un carattere escape -- -- -- Preview -- Anteprima -- -- -- Imported from CSV file -- Importati da file CSV -- -- -- Original data: -- Dati originali: -- -- -- Error -- Errore -- -- -- Error(s) detected in CSV file! -- Errore(i) rilevati nel file CSV! -- -- -- [%n more message(s) skipped] -- [%n altro messaggio saltato][altri %n messaggi saltati] -- -- -- CSV import: writer has errors: --%1 -- Importazione CSV: lo scrittore ha errori: --%1 -- -- -- Text qualification -- Qualifica del testo -- -- -- Field separation -- Separazione dei campi -- -- -- Number of header lines to discard -- Numero di righe di intestazione da eliminare -- -- -- CSV import preview -- Anteprima importazione CSV -- -- -- Column Association -- Associazione colonne -- -- -- Last Modified -- Ultima modifica -- -- -- Password -- Password -- -- -- Created -- Creazione -- -- -- Notes -- Note -- -- -- Title -- Titolo -- -- -- Group -- Gruppo -- -- -- URL -- URL -- -- -- Username -- Nome utente -- -- -- Header lines skipped -- Righe di intestazione ignorate -- -- -- First line has field names -- La prima riga ha nomi di campo -- -- -- Not Present -- Non presente -- -- -- Column %1 -- Colonna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Icona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n colonna%n colonne -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte (s)%n byte(s) -- -- -- %n row(s) -- righe: %n%n riga(e) -- -- -- -- Database -- -- File %1 does not exist. -- File %1 non esiste. -- -- -- Unable to open file %1. -- Impossibile aprire il file %1. -- -- -- Error while reading the database: %1 -- Errore durante la lettura del database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Il file non può essere scritto perché aperto in modalità di sola lettura. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Chiave non trasformata. Questo è un bug, si prega di segnalarlo agli sviluppatori! -- -- -- %1 --Backup database located at %2 -- %1 --Database di backup che si trova in %2 -- -- -- Could not save, database does not point to a valid file. -- Impossibile salvare, il database non punta a un file valido. -- -- -- Could not save, database file is read-only. -- Impossibile salvare, il file di database è di sola lettura. -- -- -- Database file has unmerged changes. -- Il file di database ha apportato modifiche non unite. -- -- -- Recycle Bin -- Cestino -- -- -- Passwords -- Root group name -- Password -- -- -- Database save is already in progress. -- Salvataggio del database già avviato -- -- -- Could not save, database has not been initialized! -- Impossibile salvare, il database non è stato inizializzato! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Sbloccare Database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- File chiave: -- -- -- Refresh -- Aggiorna -- -- -- Don't show this warning again -- Non mostrare nuovamente questo avviso -- -- -- All files -- Tutti i file -- -- -- Key files -- File chiave -- -- -- Select key file -- Seleziona file chiave -- -- -- Failed to open key file: %1 -- Impossibile aprire il file di chiave: %1 -- -- -- Unlock KeePassXC Database -- Sblocca il database KeePassXC -- -- -- Enter Password: -- Inserisci password: -- -- -- Password field -- Campo password -- -- -- Hardware key slot selection -- Selezione degli slot dei tasti hardware -- -- -- Browse for key file -- Cercare il file chiave -- -- -- Browse... -- Sfoglia... -- -- -- Refresh hardware tokens -- Aggiornare i token hardware -- -- -- Hardware Key: -- Chiave hardware: -- -- -- Hardware key help -- Guida alla chiave hardware -- -- -- TouchID for Quick Unlock -- TouchID per lo sblocco rapido -- -- -- Unlock failed and no password given -- Sblocco non riuscito e nessuna password specificata -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Sblocco del database non riuscito e non è stata immessa una password. --Si desidera riprovare con una password "vuota"? -- --Per evitare che questo errore venga visualizzato, è necessario andare alle "Impostazioni database / Sicurezza" e reimpostare la password. -- -- -- Retry with empty password -- Riprova con password vuota -- -- -- Enter Additional Credentials (if any): -- Inserisci credenziali aggiuntive (se presenti): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Puoi usare una chiave di sicurezza hardware come una <strong>YubiKey</strong> o una <strong>OnlyKey</strong> con gli slot configurati per HMAC-SHA1. --<p>Clicca per ulteriori informazioni...</p> -- -- -- Key file help -- Aiuto relativo al file chiave -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Impossibile usare il file database come file chiave -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Non puoi usare il tuo file database come file chiave. --Se non possiedi un file chiave, lascia vuoto questo campo. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Oltre a una password, è possibile utilizzare un file segreto per migliorare la sicurezza del database. Questo file può essere generato nelle impostazioni di sicurezza del database.</p><p>Questo <strong>non</strong> è il tuo file *.kdbx!<br>Se non si dispone di un file chiave, lasciare vuoto questo campo.</p><p>Clicca per maggiori informazioni...</p> -- -- -- Key file to unlock the database -- File chiave per sbloccare il database -- -- -- Please touch the button on your YubiKey! -- Premi il pulsante della YubiKey! -- -- -- Detecting hardware keys… -- Rilevamento delle chiavi hardware in corso... -- -- -- No hardware keys detected -- Nessuna chiave hardware rilevata -- -- -- Select hardware key… -- Seleziona chiave hardware... -- -- -- Old key file format -- Vecchio formato di file chiave -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Stai utilizzando un vecchio formato di file chiave che KeePassXC può<br>smettere di supportare in futuro.<br><br>Prendere in considerazione la possibilità di generare un nuovo file di chiave andando a:<br><strong>Database / Sicurezza database / Cambiare file chiave.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Password -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Impostazioni avanzate -- -- -- General -- Generale -- -- -- Security -- Sicurezza -- -- -- Encryption Settings -- Impostazioni di crittografia -- -- -- Browser Integration -- Integrazione con i browser -- -- -- Database Credentials -- Credenziali database -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Impostazioni di KeePassXC-Browser -- -- -- Stored keys -- Chiavi memorizzate -- -- -- Remove -- Rimuovi -- -- -- Delete the selected key? -- Eliminare la chiave selezionata? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Vuoi davvero eliminare la chiave selezionata? --Ciò potrebbe impedire la connessione al plug-in del browser. -- -- -- Key -- Chiave -- -- -- Value -- Valore -- -- -- Enable Browser Integration to access these settings. -- Abilita l'integrazione con i browser per accedere a queste impostazioni. -- -- -- Disconnect all browsers -- Scollega tutti i browser -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Vuoi davvero scollegare tutti i browser? --Ciò potrebbe impedire la connessione al plug-in del browser. -- -- -- KeePassXC: No keys found -- KeePassXC: nessuna chiave trovata -- -- -- No shared encryption keys found in KeePassXC settings. -- Nessuna chiave di crittografia condivisa trovata nelle impostazioni KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: chiavi rimosse dal database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Rimossa con successo %n chiave di cifratura dalle impostazioni di KeePassXC. Rimosse con successo %n chiavi di cifratura dalle impostazioni di KeePassXC. -- -- -- Forget all site-specific settings on entries -- Dimenticare tutte le impostazioni specifiche del sito nelle voci -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Vuoi davvero dimenticare tutte le impostazioni specifiche del sito su ogni voce? --Le autorizzazioni per accedere alle voci verranno revocate. -- -- -- Removing stored permissions… -- Rimozione dei permessi salvati... -- -- -- Abort -- Interrompi -- -- -- KeePassXC: Removed permissions -- KeePassXC: permessi rimossi -- -- -- Successfully removed permissions from %n entry(s). -- Permessi rimossi con successo da %n voce.Permessi rimossi con successo da %n voci. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: nessuna voce con permessi trovata! -- -- -- The active database does not contain an entry with permissions. -- Il database attivo non contiene una voce con permessi. -- -- -- Move KeePassHTTP attributes to custom data -- Spostare gli attributi KeePassHTTP in dati personalizzati -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Vuoi davvero spostare tutti i dati di integrazione del browser legacy allo standard più recente? --Questo è necessario per mantenere la compatibilità con il plugin del browser. -- -- -- Stored browser keys -- Chiavi del browser archiviate -- -- -- Remove selected key -- Rimuovere la chiave selezionata -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Spostare gli attributi KeePassHTTP ai dati personalizzati di KeePassXC-Browser -- -- -- Refresh database root group ID -- Aggiornare l'ID gruppo radice del database -- -- -- Created -- Creazione -- -- -- Refresh database ID -- Aggiorna ID database -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Si vuole davvero aggiornare l'ID del database? --Questo è necessario solo se il database è una copia e l'estensione del browser non riesce a connettersi. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Aggiungere ulteriore protezione... -- -- -- No password set -- Nessuna password impostata -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- ATTENZIONE! Non è stata impostata una password. Utilizzare un database senza password è fortemente sconsigliato! -- --Siete sicuri di voler continuare senza password? -- -- -- Continue without password -- Continua senza password -- -- -- No encryption key added -- Nessuna chiave di crittografia aggiunta -- -- -- You must add at least one encryption key to secure your database! -- Bisogna aggiungere almeno un'altra chiave di cifratura per rendere sicuro il database. -- -- -- Unknown error -- Errore sconosciuto -- -- -- Failed to change database credentials -- Impossibile modificare le credenziali del database -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritmo di cifratura: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (impostazione predefinita) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Funzione di derivazione di chiave: -- -- -- Transform rounds: -- Arrotondamenti trasformazione: -- -- -- Memory Usage: -- Uso della memoria: -- -- -- Parallelism: -- Parallelismo: -- -- -- Decryption Time: -- Tempo di de-crittografia: -- -- -- ?? s -- ?? s -- -- -- Change -- Modifica -- -- -- Higher values offer more protection, but opening the database will take longer. -- I valori più elevati offrono una maggiore protezione, ma l'apertura del database richiederà più tempo. -- -- -- Database format: -- Formato di database: -- -- -- This is only important if you need to use your database with other programs. -- Questo è importante solo se si vuole usare il database con altri programmi. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (raccomandato) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- invariato -- -- -- Number of rounds too high -- Key transformation rounds -- Numero di giri troppo elevato -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Stai utilizzando un numero molto elevato di fasi di trasformazione della chiave con Argon 2 -- --Se continui con questo numero, il tuo database si potrebbe aprire in ore o giorni (o anche più a lungo) -- -- -- Understood, keep number -- D'accordo, mantieni il valore -- -- -- Cancel -- Annulla -- -- -- Number of rounds too low -- Key transformation rounds -- Numero di giri troppo basso -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Stai utilizzando un numero molto basso di fasi di trasformazione della chiave con AES-KDF -- --Se continui con questo numero, il tuo database potrebbe essere decifrato molto facilmente -- -- -- KDF unchanged -- KDF invariato -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- La trasformazione della chiave con i nuovi parametri KDF e' fallita; KDF immutato -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- iscritto (i)thread(s) -- -- -- Change existing decryption time -- Modificare il tempo di decrittografia esistente -- -- -- Decryption time in seconds -- Tempo di decrittografia in secondi -- -- -- Database format -- Formato del database -- -- -- Encryption algorithm -- Algoritmo di crittografia -- -- -- Key derivation function -- Funzione di derivazione della chiave -- -- -- Transform rounds -- Giri di trasformazione -- -- -- Memory usage -- Utilizzo della memoria -- -- -- Parallelism -- Parallelismo -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Voci esposte -- -- -- Don't expose this database -- Non esporre questo database -- -- -- Expose entries under this group: -- Esporre le voci in questo gruppo: -- -- -- Enable Secret Service to access these settings. -- Consentire ai Servizi Segreti di accedere a queste impostazioni. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadati del database -- -- -- Database name: -- Nome database: -- -- -- Database description: -- Descrizione database: -- -- -- Default username: -- Nome utente predefinito: -- -- -- History Settings -- Impostazioni cronologia -- -- -- Max. history items: -- Oggetti max. nella cronologia: -- -- -- Max. history size: -- Grandezza max. cronologia: -- -- -- MiB -- MB -- -- -- Use recycle bin -- Usa il cestino -- -- -- Additional Database Settings -- Ulteriori impostazioni del database -- -- -- Database name field -- Campo nome database -- -- -- Database description field -- Campo descrizione database -- -- -- Default username field -- Campo nome utente predefinito -- -- -- Maximum number of history items per entry -- Numero massimo di elementi della cronologia per voce -- -- -- Maximum size of history per entry -- Dimensione massima della cronologia per voce -- -- -- Delete Recycle Bin -- Elimina Cestino -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Vuoi eliminare il cestino corrente e tutto il suo contenuto? --Questa azione non è reversibile. -- -- -- (old) -- (vecchio) -- -- -- Enable compression (recommended) -- Abilita compressione (consigliato) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Condivisione -- -- -- Breadcrumb -- Percorso di navigazione -- -- -- Type -- Tipo -- -- -- Path -- Percorso -- -- -- Last Signer -- Ultimo firmatario -- -- -- Certificates -- Certificati -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nome del database: -- -- -- Description: -- Descrizione: -- -- -- Database name field -- Campo nome database -- -- -- Database description field -- Campo descrizione database -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Database KeePass 2 -- -- -- All files -- Tutti i file -- -- -- Open database -- Apri database -- -- -- CSV file -- File CSV -- -- -- Merge database -- Unisci database -- -- -- Open KeePass 1 database -- Apri database KeePass 1 -- -- -- KeePass 1 database -- Database KeePass 1 -- -- -- Export database to CSV file -- Esporta database come file CSV -- -- -- Writing the CSV file failed. -- Scrittura file CSV non riuscita. -- -- -- Database creation error -- Errore di creazione del database -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Il database creato non ha chiave o KDF, rifiutando di salvarlo. --Questo è sicuramente un bug, si prega di segnalarlo agli sviluppatori. -- -- -- Select CSV file -- Selezionare il file CSV -- -- -- New Database -- Nuovo Database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [nuovo database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [bloccato] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [sola lettura] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Impossibile aprire %1. Non esiste o non è accessibile. -- -- -- Export database to HTML file -- Esportare il database in un file HTML -- -- -- HTML file -- File HTML -- -- -- Writing the HTML file failed. -- Scrittura del file HTML non riuscita. -- -- -- Export Confirmation -- Conferma esportazione -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Si sta per esportare il database in un file non crittografato. Questo lascerà le password e le informazioni sensibili vulnerabili! Sei sicuro di voler continuare? -- -- -- Open OPVault -- Apri OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Ricerca... -- -- -- Do you really want to delete the entry "%1" for good? -- Vuoi veramente eliminare la voce "%1"? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Vuoi davvero cestinare la voce "%1"? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Vuoi veramente cestinare %n voce?Vuoi veramente cestinare %n voci? -- -- -- Execute command? -- Vuoi eseguire il comando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Sei sicuro di voler eseguire il seguente comando?<br><br>%1<br> -- -- -- Remember my choice -- Ricorda la mia scelta -- -- -- Do you really want to delete the group "%1" for good? -- Vuoi veramente eliminare il gruppo "%1"? -- -- -- No current database. -- Nessun database attuale. -- -- -- No source database, nothing to do. -- Nessun database sorgente. Nessuna operazione da fare. -- -- -- Search Results (%1) -- Risultati ricerca (%1) -- -- -- No Results -- Nessun risultato -- -- -- File has changed -- Il file è stato modificato -- -- -- The database file has changed. Do you want to load the changes? -- Il file del database è stato modificato. Vuoi caricare le modifiche? -- -- -- Merge Request -- Richiesta di unione -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Il file del database e' stato cambiato e ci sono cambiamenti non salvati --Vuoi fondere i cambiamenti? -- -- -- Empty recycle bin? -- Svuotare il cestino? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Sei sicuro di voler eliminare definitivamente tutto dal cestino? -- -- -- Do you really want to delete %n entry(s) for good? -- Vuoi davvero eliminare %n voci per sempre?Vuoi davvero eliminare %n voce(i) per sempre? -- -- -- Delete entry(s)? -- Elimina ha?Cancellare la voce(i)? -- -- -- Move entry(s) to recycle bin? -- Spostare la creazione nel cestino?Spostare la voce(i) nel cestino? -- -- -- Lock Database? -- Bloccare il database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Si sta modificando una voce. Eliminare le modifiche e bloccare comunque? -- -- -- "%1" was modified. --Save changes? -- "%1" è stata modificato. --Vuoi salvare le modifiche? -- -- -- Database was modified. --Save changes? -- Il database è stato modificato. --Salvare le modifiche? -- -- -- Save changes? -- Salvare le modifiche? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Impossibile aprire il nuovo file di database durante il tentativo di ricaricamento. --Errore: %1 -- -- -- Disable safe saves? -- Disabilita i salvataggi sicuri? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- Nonostante ripetuti tentativi, KeePassXC non è riuscito a salvare il database. Probabilmente la causa risiede in un file di lock bloccato da qualche servizio di sincronizzazione file. --Disabilitare i salvataggi sicuri e riprovare? -- -- -- Passwords -- Password -- -- -- Save database as -- Salva database come -- -- -- KeePass 2 Database -- Database KeePass 2 -- -- -- Replace references to entry? -- Sostituire i riferimenti alla voce? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- La voce "%1" ha %2 riferimento/i. Sovrascrivere i riferimenti con i valori, ignorare questa voce o eliminare comunque?La voce "%1" ha %2 riferimento/i. Sovrascrivere i riferimenti con i valori, ignorare questa voce o eliminare comunque? -- -- -- Delete group -- Elimina gruppo -- -- -- Move group to recycle bin? -- Cestinare il gruppo? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Vuoi davvero cestinare il gruppo "%1"? -- -- -- Successfully merged the database files. -- I file di database sono uniti correttamente. -- -- -- Database was not modified by merge operation. -- Il database non è stato modificato dall'operazione di unione. -- -- -- Shared group... -- Gruppo condiviso... -- -- -- Writing the database failed: %1 -- Scrittura del database non riuscita: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Questo database viene aperto in modalità di sola lettura. Il salvataggio automatico è disabilitato. -- -- -- Save database backup -- Salva il backup del database -- -- -- Could not find database file: %1 -- Impossibile trovare il file di database: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Voce -- -- -- Advanced -- Avanzate -- -- -- Icon -- Icona -- -- -- Auto-Type -- Completamento automatico -- -- -- Properties -- Proprietà -- -- -- History -- Cronologia -- -- -- SSH Agent -- Agente SSH -- -- -- n/a -- n/a -- -- -- (encrypted) -- (cifrato) -- -- -- Select private key -- Seleziona chiave privata -- -- -- Entry history -- Cronologia voce -- -- -- Add entry -- Aggiungi voce -- -- -- Edit entry -- Modifica voce -- -- -- New attribute -- Nuovo attributo -- -- -- Are you sure you want to remove this attribute? -- Sei sicuro di voler rimuovere questo attributo? -- -- -- Tomorrow -- Domani -- -- -- %n week(s) -- %n settimana%n settimane -- -- -- %n month(s) -- %n mese%n mesi -- -- -- Entry updated successfully. -- Voce aggiornata correttamente. -- -- -- New attribute %1 -- Nuovo attributo %1 -- -- -- %n year(s) -- anno (i) %n%n anno(i) -- -- -- Confirm Removal -- Conferma rimozione -- -- -- Browser Integration -- Integrazione con i browser -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Sei sicuro di voler rimuovere questo URL? -- -- -- Reveal -- Rivela -- -- -- Hide -- Nascondi -- -- -- Unsaved Changes -- Modifiche non salvate -- -- -- Would you like to save changes to this entry? -- Salvare le modifiche a questa voce? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTETTO] Premere Mostra per visualizzare o modificare -- -- -- Invalid Entry -- Voce non valida -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Questa voce è stata invalidata da un'operazione di unione esterna. --Purtroppo, le modifiche apportate sono state perse. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Attributi aggiuntivi -- -- -- Add -- Aggiungi -- -- -- Remove -- Rimuovi -- -- -- Edit Name -- Modifica nome -- -- -- Protect -- Proteggi -- -- -- Reveal -- Rivela -- -- -- Attachments -- Allegati -- -- -- Foreground Color: -- Colore di primo piano: -- -- -- Background Color: -- Colore di sfondo: -- -- -- Attribute selection -- Selezione degli attributi -- -- -- Attribute value -- Valore attributo -- -- -- Add a new attribute -- Aggiungere un nuovo attributo -- -- -- Remove selected attribute -- Rimuovi attributo selezionato -- -- -- Edit attribute name -- Modifica nome attributo -- -- -- Toggle attribute protection -- Attivare o disattivare la protezione degli attributi -- -- -- Show a protected attribute -- Visualizzare un attributo protetto -- -- -- Foreground color selection -- Selezione del colore di primo piano -- -- -- Background color selection -- Selezione del colore di sfondo -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Se abilitata, questa voce non apparirà nei rapporti di integrità e HIBP anche se non soddisfa le condizioni richieste(es. entropia della password o riutilizzo). È possibile includere la password se essa si trova al di là del vostro controllo (es. se è necessario inserire un PIN a quattro cifre) per evitare che essa vada a ingombrare i rapporti.</p></body></html> -- -- -- Exclude from database reports -- Escludere dal rapporto del database -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Abilita completamento automatico per questa voce -- -- -- Window Associations -- Associazioni finestra -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Titolo finestra: -- -- -- Use a specific sequence for this association: -- Usa una sequenza specifica per questa associazione: -- -- -- Custom Auto-Type sequence -- Sequenza personalizzata di completamento automatico -- -- -- Open Auto-Type help webpage -- Aprire la pagina Web di aiuto per i completamenti automatici -- -- -- Existing window associations -- Associazioni delle finestre esistenti -- -- -- Add new window association -- Aggiungi nuova associazione finestra -- -- -- Remove selected window association -- Rimuovere l'associazione della finestra selezionata -- -- -- You can use an asterisk (*) to match everything -- È possibile utilizzare un asterisco (*) per abbinare tutto -- -- -- Set the window association title -- Impostare il titolo dell'associazione della finestra -- -- -- You can use an asterisk to match everything -- È possibile utilizzare un asterisco per abbinare tutto -- -- -- Custom Auto-Type sequence for this window -- Sequenza personalizzata del completamento automatico per questa finestra -- -- -- Inherit default Auto-Type sequence from the group -- Eredita la sequenza predefinita di auto-completamento dal gruppo -- -- -- Use custom Auto-Type sequence: -- Usa sequenza personalizzata di auto-completamento: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Queste impostazioni influiscono sul comportamento della voce con l'estensione del browser. -- -- -- General -- Generale -- -- -- Skip Auto-Submit for this entry -- Ignora invio automatico per questa voce -- -- -- Hide this entry from the browser extension -- Nascondi questa voce dall'estensione del browser -- -- -- Additional URL's -- URL aggiuntivi -- -- -- Add -- Aggiungi -- -- -- Remove -- Rimuovi -- -- -- Edit -- Modifica -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Manda queste impostazioni al browser solo solo per l'autenticazione HTTP. Se abilitata, la pagina di login non mostrerà questa voce disponibile per la selezione. -- -- -- Use this entry only with HTTP Basic Auth -- Utilizza questa voce solo con l'autenticazione HTTP Basic -- -- -- -- EditEntryWidgetHistory -- -- Show -- Visualizza -- -- -- Restore -- Ripristina -- -- -- Delete -- Elimina -- -- -- Delete all -- Elimina tutti -- -- -- Entry history selection -- Selezione della cronologia delle voci -- -- -- Show entry at selected history state -- Mostra voce nello stato della cronologia selezionato -- -- -- Restore entry to selected history state -- Ripristinare la voce allo stato della cronologia selezionato -- -- -- Delete selected history state -- Eliminare lo stato della cronologia selezionato -- -- -- Delete all history -- Elimina tutta la cronologia -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Password: -- -- -- Title: -- Titolo: -- -- -- Presets -- Preimpostazioni -- -- -- Toggle the checkbox to reveal the notes section. -- Attivare o disattivare la casella di controllo per rivelare la sezione note. -- -- -- Username: -- Nome utente: -- -- -- Url field -- Campo Url -- -- -- Download favicon for URL -- Scarica favicon per URL -- -- -- Password field -- Campo password -- -- -- Toggle notes visible -- Attiva/disattiva visibilità delle note -- -- -- Expiration field -- Campo scadenza -- -- -- Expiration Presets -- Scadenza delle preimpostazioni -- -- -- Expiration presets -- Scadenza delle preimpostazioni -- -- -- Notes field -- Campo note -- -- -- Title field -- Campo del titolo -- -- -- Username field -- Campo nome utente -- -- -- Toggle expiration -- Attiva/disattiva scadenza -- -- -- Notes: -- Note: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Scade: -- -- -- Edit Entry -- Modifica voce -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Modulo -- -- -- Remove key from agent after -- Rimuovi chiave dall'agente dopo -- -- -- seconds -- secondi -- -- -- Fingerprint -- Impronta digitale -- -- -- Remove key from agent when database is closed/locked -- Rimuovi chiave dall'agente quando il database viene chiuso/bloccato -- -- -- Public key -- Chiave pubblica -- -- -- Add key to agent when database is opened/unlocked -- Aggiungi chiave all'agente quando il database viene aperto/sbloccato -- -- -- Comment -- Commento -- -- -- Decrypt -- Decifra -- -- -- n/a -- n/a -- -- -- Copy to clipboard -- Copia negli appunti -- -- -- Private key -- Chiave privata -- -- -- External file -- File esterno -- -- -- Browse... -- Button for opening file dialog -- Sfoglia... -- -- -- Attachment -- Allegato -- -- -- Add to agent -- Aggiungi all'agente -- -- -- Remove from agent -- Rimuovi dall'agente -- -- -- Require user confirmation when this key is used -- Richiesta conferma dell'utente quando questa chiave è usata -- -- -- Remove key from agent after specified seconds -- Rimuovi chiave dall'agente dopo i secondi specificati -- -- -- Browser for key file -- Ricerca del file di chiave -- -- -- External key file -- File di chiave esterna -- -- -- Select attachment file -- Seleziona file allegato -- -- -- -- EditGroupWidget -- -- Group -- Gruppo -- -- -- Icon -- Icona -- -- -- Properties -- Proprietà -- -- -- Add group -- Aggiungi gruppo -- -- -- Edit group -- Modifica gruppo -- -- -- Enable -- Abilita -- -- -- Disable -- Disabilita -- -- -- Inherit from parent group (%1) -- Eredita dal gruppo genitore (%1) -- -- -- Entry has unsaved changes -- La voce contiene modifiche non salvate -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipo: -- -- -- Path: -- Percorso: -- -- -- Password: -- Password: -- -- -- Inactive -- Inattivo -- -- -- KeeShare unsigned container -- Contenitore non firmato KeeShare -- -- -- KeeShare signed container -- Contenitore firmato KeeShare -- -- -- Select import source -- Selezionare l'origine di importazione -- -- -- Select export target -- Seleziona destinazione di esportazione -- -- -- Select import/export file -- Selezionare il file di importazione/esportazione -- -- -- Clear -- Azzera -- -- -- Import -- Importazione -- -- -- Export -- Esporta -- -- -- Synchronize -- Sincronizzare -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- La tua versione di KeePassXC non supporta la condivisione di questo tipo di contenitore. --Le estensioni supportate sono: %1. -- -- -- %1 is already being exported by this database. -- %1 è già stato esportato da questo database. -- -- -- %1 is already being imported by this database. -- %1 è già stato importato da questo database. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 viene importato ed esportato da gruppi diversi in questo database. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare è attualmente disabilitato. È possibile abilitare l'importazione/esportazione nelle impostazioni dell'applicazione. -- -- -- Database export is currently disabled by application settings. -- L'esportazione del database è attualmente disabilitata dalle impostazioni dell'applicazione. -- -- -- Database import is currently disabled by application settings. -- L'importazione del database è attualmente disabilitata dalle impostazioni dell'applicazione. -- -- -- Sharing mode field -- Campo modalità di condivisione -- -- -- Path to share file field -- Campo percorso per condividere il file -- -- -- Password field -- Campo password -- -- -- Clear fields -- Cancellare i campi -- -- -- Browse for share file -- Cerca file per condivisione -- -- -- Browse... -- Sfoglia... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Campo nome -- -- -- Notes field -- Campo note -- -- -- Toggle expiration -- Attiva/disattiva scadenza -- -- -- Auto-Type toggle for this and sub groups -- Attiva/disattiva il completamento automatico per questo e i sottogruppi -- -- -- Expiration field -- Campo scadenza -- -- -- Search toggle for this and sub groups -- Attiva/disattiva ricerca per questo e per i sottogruppi -- -- -- Default auto-type sequence field -- Campo della sequenza del completamento automatico predefinito -- -- -- Expires: -- Scade: -- -- -- Use default Auto-Type sequence of parent group -- Usa la sequenza di completamento automatico predefinita del gruppo genitore -- -- -- Auto-Type: -- Completamento automatico: -- -- -- Search: -- Ricerca: -- -- -- Notes: -- Note: -- -- -- Name: -- Nome: -- -- -- Set default Auto-Type sequence -- Impostare la sequenza predefinita del completamento automatico -- -- -- Edit Group -- Modifica gruppo -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Aggiungi icona personalizzata -- -- -- Delete custom icon -- Rimuovi icona personalizzata -- -- -- Download favicon -- Scarica favicon -- -- -- Unable to fetch favicon. -- Impossibile scaricare favicon. -- -- -- Images -- Immagini -- -- -- All files -- Tutti i file -- -- -- Confirm Delete -- Conferma eliminazione -- -- -- Select Image(s) -- Selezionare immagine(i) -- -- -- Successfully loaded %1 of %n icon(s) -- Caricate con successo %1 di %n icona.Caricate con successo %1 di %n icone. -- -- -- No icons were loaded -- Nessuna icona è stata caricata -- -- -- %n icon(s) already exist in the database -- %n icona esiste già nel database%n icone esistono già nel database -- -- -- The following icon(s) failed: -- La seguente icona presenta degli errori:Le seguenti icone presentano degli errori: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Questa icona viene utilizzata da %n voci e verrà sostituita dall'icona predefinita. Sei sicuro di volerlo eliminare?Questa icona viene utilizzata da %n voce(i) e verrà sostituita dall'icona predefinita. Sei sicuro di volerla eliminare? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- È possibile attivare il servizio per le icone del sito Web DuckDuckGo in Strumenti -> Impostazioni -> Sicurezza -- -- -- Download favicon for URL -- Scarica favicon per URL -- -- -- Apply selected icon to subgroups and entries -- Applicare l'icona selezionata a sottogruppi e voci -- -- -- Also apply to child groups -- Applica anche ai gruppi figli -- -- -- Also apply to child entries -- Si applicano anche alle voci figlio -- -- -- Also apply to all children -- Si applicano anche a tutti i figli -- -- -- Existing icon selected. -- Icona esistente selezionata. -- -- -- Use default icon -- Usa icona predefinita -- -- -- Use custom icon -- Usa icona personalizzata -- -- -- Apply icon to... -- Applicare l'icona a... -- -- -- Apply to this group only -- Applica solo a questo gruppo -- -- -- -- EditWidgetProperties -- -- Created: -- Creazione: -- -- -- Modified: -- Modifica: -- -- -- Accessed: -- Accesso: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Dati del plugin -- -- -- Remove -- Rimuovi -- -- -- Delete plugin data? -- Eliminare i dati del plugin? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Vuoi davvero eliminare i dati del plugin selezionato? --Ciò potrebbe causare malfunzionamenti ai plugin interessati. -- -- -- Key -- Chiave -- -- -- Value -- Valore -- -- -- Datetime created -- Data e ora di creazione -- -- -- Datetime modified -- Data/ora di modifica -- -- -- Datetime accessed -- Data/ora acceduto -- -- -- Unique ID -- ID univoco -- -- -- Plugin data -- Dati del plug-in -- -- -- Remove selected plugin data -- Rimuovere i dati selezionati del plug-in -- -- -- -- Entry -- -- %1 - Clone -- %1 - clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Nome -- -- -- Size -- Dimensione -- -- -- -- EntryAttachmentsWidget -- -- Form -- Modulo -- -- -- Add -- Aggiungi -- -- -- Remove -- Rimuovi -- -- -- Open -- Apri -- -- -- Save -- Salva -- -- -- Select files -- Seleziona file -- -- -- Are you sure you want to remove %n attachment(s)? -- Sei sicuro di voler rimuovere %n allegato?Sei sicuro di voler rimuovere %n allegati? -- -- -- Save attachments -- Salva allegati -- -- -- Unable to create directory: --%1 -- Impossibile creare la directory: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Sei sicuro di sovrascrivere il file "%1" esistente con l'allegato? -- -- -- Confirm overwrite -- Confermare la sovrascrittura -- -- -- Unable to save attachments: --%1 -- Impossibile salvare l'allegato: --%1 -- -- -- Unable to open attachment: --%1 -- Impossibile aprire l'allegato: --%1 -- -- -- Unable to open attachments: --%1 -- Impossibile aprire gli allegati: --%1 -- -- -- Confirm remove -- Confermare la rimozione -- -- -- Unable to open file(s): --%1 -- Impossibile aprire il file: --%1Impossibile aprire i file: --%1 -- -- -- Attachments -- Allegati -- -- -- Add new attachment -- Aggiungi nuovo allegato -- -- -- Remove selected attachment -- Rimuovere l'allegato selezionato -- -- -- Open selected attachment -- Aprire l'allegato selezionato -- -- -- Save selected attachment to disk -- Salva l'allegato selezionato su disco -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 Ha dimensioni elevate (%2 MB). --Il database potrebbe occupare più spazio e ridurre le sue performance. -- --Siete sicuri di voler aggiungere questo file? -- -- -- Confirm Attachment -- Conferma l'allegato -- -- -- -- EntryAttributesModel -- -- Name -- Nome -- -- -- -- EntryHistoryModel -- -- Last modified -- Ultima modifica -- -- -- Title -- Titolo -- -- -- Username -- Nome utente -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Rif.: -- -- -- Group -- Gruppo -- -- -- Title -- Titolo -- -- -- Username -- Nome utente -- -- -- URL -- URL -- -- -- Never -- Mai -- -- -- Password -- Password -- -- -- Notes -- Note -- -- -- Expires -- Scade -- -- -- Created -- Creazione -- -- -- Modified -- Modifica -- -- -- Accessed -- Accesso -- -- -- Attachments -- Allegati -- -- -- Size -- Dimensione -- -- -- Group name -- Nome del gruppo -- -- -- Entry title -- Titolo della voce -- -- -- Entry notes -- Note della voce -- -- -- Entry expires at -- La voce scade il -- -- -- Creation date -- Data di creazione -- -- -- Last modification date -- Ultima modifica -- -- -- Last access date -- Ultimo accesso -- -- -- Attached files -- Allegati -- -- -- Entry size -- Dimensioni della voce -- -- -- Has attachments -- Ha allegati -- -- -- Has TOTP one-time password -- Ha una password monouso TOTP -- -- -- -- EntryPreviewWidget -- -- Close -- Chiudi -- -- -- General -- Generale -- -- -- Username -- Nome utente -- -- -- Password -- Password -- -- -- Expiration -- Scadenza -- -- -- URL -- URL -- -- -- Attributes -- Attributi -- -- -- Attachments -- Allegati -- -- -- Notes -- Note -- -- -- Autotype -- Completamento automatico -- -- -- Window -- Finestra -- -- -- Sequence -- Sequenza -- -- -- Searching -- Ricerca -- -- -- Search -- Cerca -- -- -- Clear -- Azzera -- -- -- Never -- Mai -- -- -- [PROTECTED] -- [PROTETTO] -- -- -- Enabled -- Abilitato -- -- -- Disabled -- Disabilitato -- -- -- Share -- Condividi -- -- -- Display current TOTP value -- Visualizza il valore TOTP corrente -- -- -- Advanced -- Avanzate -- -- -- Default Sequence -- Sequenza predefinita -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- URL non corretto -- -- -- -- EntryView -- -- Fit to window -- Adatta alla finestra -- -- -- Fit to contents -- Adatta ai contenuti -- -- -- Reset to defaults -- Ripristina valori predefiniti -- -- -- Has attachments -- Entry attachment icon toggle -- Ha allegati -- -- -- Has TOTP -- Entry TOTP icon toggle -- Ha TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- La voce "%1" dal database "%2" è stata utilizzata da %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Impossibile registrare il servizio DBus a %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Voce utilizzata da %1%n Voci utilizzate da %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nome file -- -- -- Group -- Gruppo -- -- -- Manage -- Gestire -- -- -- Unlock to show -- Sblocca per mostrare -- -- -- None -- Nessuno -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Applicazione -- -- -- Manage -- Gestire -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Sconosciuto -- -- -- Unknown -- Unknown executable path -- Sconosciuto -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Eseguibile: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Un altro servizio segreto è già in esecuzione (%1).<br/>Fermarlo o rimuoverlo prima di abilitare l'integrazione dei servizi segreti. -- -- -- -- Group -- -- [empty] -- group has no children -- [vuoto] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Validazione online della password fallita -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Scarica Favicons -- -- -- Cancel -- Annulla -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Hai problemi a scaricare le icone? --È possibile attivare il servizio per le icone del sito Web DuckDuckGo nella sezione relativa alla sicurezza delle impostazioni dell'applicazione. -- -- -- Close -- Chiudi -- -- -- URL -- URL -- -- -- Status -- Stato -- -- -- Please wait, processing entry list... -- Si prega di attendere, elenco delle voci in elaborazione... -- -- -- Downloading... -- Scaricamento... -- -- -- Ok -- Ok -- -- -- Already Exists -- Esiste già -- -- -- Download Failed -- Download non riuscito -- -- -- Downloading favicons (%1/%2)... -- Scaricamento delle favicon (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Chiudi -- -- -- Close message -- Chiudi messaggio -- -- -- -- Kdbx3Reader -- -- missing database headers -- intestazioni del database mancanti -- -- -- Header doesn't match hash -- L'intestazione non corrisponde all'hash -- -- -- Invalid header id size -- Dimensione dell'id dell'intestazione non valida -- -- -- Invalid header field length -- Lunghezza del campo di intestazione non valida -- -- -- Invalid header data length -- Lunghezza dei dati di intestazione non valida -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Sono state fornite credenziali non valide, riprovare. --Se ciò si ripresenta, il file di database potrebbe essere danneggiato. -- -- -- Unable to calculate database key -- Impossibile calcolare la chiave del database -- -- -- Unable to issue challenge-response: %1 -- Impossibile stabilire un collegamento challenge-response: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Impossibile stabilire un collegamento challenge-response: %1 -- -- -- Unable to calculate database key -- Impossibile calcolare la chiave del database -- -- -- -- Kdbx4Reader -- -- missing database headers -- intestazioni del database mancanti -- -- -- Invalid header checksum size -- Dimensione di checksum dell'intestazione non valida -- -- -- Header SHA256 mismatch -- Corrispondenza errata dell'intestazione SHA256 -- -- -- Unknown cipher -- Cifrario sconosciuto -- -- -- Invalid header id size -- Dimensione dell'id dell'intestazione non valida -- -- -- Invalid header field length -- Lunghezza del campo di intestazione non valida -- -- -- Invalid header data length -- Lunghezza dei dati di intestazione non valida -- -- -- Failed to open buffer for KDF parameters in header -- Fallimento dell'apertura del buffer per i parametri KDF nell'header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Funzione di derivazione della chiave (KDF) non supportata o parametri non validi -- -- -- Legacy header fields found in KDBX4 file. -- Sono stati trovati dei campi obsloleti nell'header del file KDBX4 -- -- -- Invalid inner header id size -- Dimensione dell'id dell'intestazione interna non valida -- -- -- Invalid inner header field length -- Lunghezza del campo di intestazione interna non valida -- -- -- Invalid inner header binary size -- Dimensione binaria dell'intestazione interna non valida -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Variante di mappa KeePass non supportata. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Il nome della voce per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Il nome della voce per la mappa di variazione presenta dati non validi -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Il valore della voce per la mappa di variazione presenta dati non validi -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce Bool per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce Int32 per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce UInt32 per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce Int64 per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Il valore della voce UInt64 per la mappa di variazione ha una lunghezza non valida -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Il tipo della voce per la mappa di variazione non è valido -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Dimensione non valida per il tipo di campo della mappa di variazione -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Sono state fornite credenziali non valide, riprovare. --Se ciò si ripresenta, il file di database potrebbe essere danneggiato. -- -- -- (HMAC mismatch) -- (mancata corrispondenza HMAC) -- -- -- Unable to calculate database key: %1 -- Impossibile calcolare la chiave del database: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritmo di cifratura simmetrica non valido. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Dimensione non valida del vettore di inizializzazione dell'algoritmo di cifratura simmetrica. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Fallita serializzazione della mappa di variazione dei parametri per la funzione di derivazione della chiave di cifratura (KDF) -- -- -- Unable to calculate database key: %1 -- Impossibile calcolare la chiave del database: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cifrario non supportato -- -- -- Invalid compression flags length -- Lunghezza dei flag di compressione non valida -- -- -- Unsupported compression algorithm -- Algoritmo di compressione non supportato -- -- -- Invalid master seed size -- Dimensione del seme principale non valido -- -- -- Invalid transform seed size -- Dimensione non valida del seme di trasformazione -- -- -- Invalid transform rounds size -- Dimensione non valida del numero di ripetizioni per la trasformazione -- -- -- Invalid start bytes size -- Dimensione non valida del byte di inizio -- -- -- Invalid random stream id size -- Dimensione non valida dell'ID per il flusso di dati casuale -- -- -- Invalid inner random stream cipher -- Cifrario non valido per il flusso interno di dati casuale -- -- -- Not a KeePass database. -- Non è un database KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Il file selezionato è un vecchio database di KeePass 1 (.kdb). -- --È possibile importarlo facendo clic su 'Database' > 'Importa database KeePass 1...'. --Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il database importato con la vecchia versione di KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Versione di database KeePass 2 non supportata. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Lunghezza dell'uuid cifrato non valida: %1 (lunghezza=%2) -- -- -- Unable to parse UUID: %1 -- Impossibile analizzare UUID: %1 -- -- -- Failed to read database file. -- Impossibile leggere il file di database. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Errore nell'analisi XML: %1 -- -- -- No root group -- Nessun gruppo radice -- -- -- Missing icon uuid or data -- UUID mancante per l'icona o dati -- -- -- Missing custom data key or value -- Chiave individuale o valore mancante -- -- -- Multiple group elements -- Elementi appartenenti a gruppi diversi -- -- -- Null group uuid -- UUID di gruppo nullo -- -- -- Invalid group icon number -- Numero di gruppo di icone non valido -- -- -- Invalid EnableAutoType value -- Valore di EnableAutoType non valido -- -- -- Invalid EnableSearching value -- Valore EnableSearching non valido -- -- -- No group uuid found -- UUID di gruppo non trovato -- -- -- Null DeleteObject uuid -- DeleteObject: UUID nullo -- -- -- Missing DeletedObject uuid or time -- DeleteObject: UUID o marca temporale mancante -- -- -- Null entry uuid -- UUID nulla per la voce -- -- -- Invalid entry icon number -- Numero non valido per l'icona della voce -- -- -- History element in history entry -- Elemento della cronistoria nella voce della cronistoria -- -- -- No entry uuid found -- Nessun UUID trovato per la voce -- -- -- History element with different uuid -- Elemento della cronistoria con diverso UUID -- -- -- Duplicate custom attribute found -- Trovato attributo personalizzato duplicato -- -- -- Entry string key or value missing -- Chiave alfanumerica o valore mancante per la voce -- -- -- Entry binary key or value missing -- Chiave binaria o valore mancante per la voce -- -- -- Auto-type association window or sequence missing -- Finestra associata al completamento automatico o sequenza mancante -- -- -- Invalid bool value -- Valore booleano non valido -- -- -- Invalid date time value -- Valore di data e tempo non valido -- -- -- Invalid color value -- Valore di colore non valido -- -- -- Invalid color rgb part -- Colore RGB non valido -- -- -- Invalid number value -- Valore numerico non valido -- -- -- Invalid uuid value -- Valore non valido per UUID -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Impossibile decomprimere il binario -- -- -- XML error: --%1 --Line %2, column %3 -- Errore XML: --%1 --Riga %2, colonna %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- KeeAgent non valido nel file. -- -- -- Private key is an attachment but no attachments provided. -- La chiave privata è un allegato ma nessun allegato è stato inserito. -- -- -- Private key is empty -- La chiave privata è vuota -- -- -- File too large to be a private key -- File troppo grande per essere una chiave privata -- -- -- Failed to open private key -- Impossibile aprire la chiave privata -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Impossibile aprire il database. -- -- -- Import KeePass1 Database -- Importa database KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Impossibile leggere il file della chiave. -- -- -- Not a KeePass database. -- Non è un database KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritmo di cifratura non supportato. -- -- -- Unsupported KeePass database version. -- Versione database KeePass non supportata. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Impossibile leggere il vettore di inizializzazione per la cifratura -- -- -- Invalid number of groups -- Numero di gruppi non valido -- -- -- Invalid number of entries -- Numero di voci non valido -- -- -- Invalid content hash size -- DImensione dell'hash non valida per questo contenuto -- -- -- Invalid transform seed size -- Dimensione non valida del seme di trasformazione -- -- -- Invalid number of transform rounds -- Numero di cicli di trasformazione non valido -- -- -- Unable to construct group tree -- Impossibile costruire la struttura ad albero dei gruppi -- -- -- Root -- Radice -- -- -- Key transformation failed -- Trasformazione della chiave non riuscita -- -- -- Invalid group field type number -- Numero del tipo di gruppo non valido -- -- -- Invalid group field size -- Dimensione del campo di gruppo non valida -- -- -- Read group field data doesn't match size -- I dati letti non coincidono con la dimensione del gruppo -- -- -- Incorrect group id field size -- Dimensione dell'ID di gruppo non corretta -- -- -- Incorrect group creation time field size -- Dimensione della data di creazione del gruppo non corretta -- -- -- Incorrect group modification time field size -- Dimensione della data di modifica del gruppo non corretta -- -- -- Incorrect group access time field size -- Dimensione della data di accesso del gruppo non corretta -- -- -- Incorrect group expiry time field size -- Dimensione della data di scadenza del gruppo non corretta -- -- -- Incorrect group icon field size -- Dimensione dell'icona del gruppo non corretta -- -- -- Incorrect group level field size -- Dimensione del livello del gruppo non corretta -- -- -- Invalid group field type -- Tipo di gruppo non corretto -- -- -- Missing group id or level -- ID di gruppo o livello mancante -- -- -- Missing entry field type number -- Numero mancante per il tipo della voce corrente -- -- -- Invalid entry field size -- Dimensione del campo di immissione non valida -- -- -- Read entry field data doesn't match size -- I dati letti per la voce corrente non coincidono con la dimensione -- -- -- Invalid entry uuid field size -- Dimensione dell'UUID della voce corrente non valida -- -- -- Invalid entry group id field size -- Dimensione dell'ID di gruppo della voce corrente non valida -- -- -- Invalid entry icon field size -- Dimensione dell'icona della voce corrente non valida -- -- -- Invalid entry creation time field size -- Dimensione della data di creazione della voce corrente non valida -- -- -- Invalid entry modification time field size -- Dimensione della data di modifica della voce corrente non valida -- -- -- Invalid entry expiry time field size -- Dimensione della data di scadenza della voce corrente non valida -- -- -- Invalid entry field type -- Tipo di dato non valido -- -- -- unable to seek to content position -- Non in grado di cercare nella posizione del contenuto -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Sono state fornite credenziali non valide, riprovare. --Se ciò si ripresenta, il file di database potrebbe essere danneggiato. -- -- -- Unable to calculate database key -- Impossibile calcolare la chiave del database -- -- -- -- KeeShare -- -- Invalid sharing reference -- Riferimento di condivisione non valido -- -- -- Inactive share %1 -- Condivisione inattiva %1 -- -- -- Imported from %1 -- Importato da %1 -- -- -- Exported to %1 -- Esportato in %1 -- -- -- Synchronized with %1 -- Sincronizzato con %1 -- -- -- Import is disabled in settings -- L'importazione è disabilitata nelle impostazioni -- -- -- Export is disabled in settings -- L'esportazione è disabilitata nelle impostazioni -- -- -- Inactive share -- Condivisione inattiva -- -- -- Imported from -- Importato da -- -- -- Exported to -- Esportato in -- -- -- Synchronized with -- Sincronizzato con -- -- -- -- KeyComponentWidget -- -- Key Component -- Componente chiave -- -- -- Key Component Description -- Descrizione del componente chiave -- -- -- Cancel -- Annulla -- -- -- Key Component set, click to change or remove -- Set di componenti chiave, fare clic per modificare o rimuovere -- -- -- Add %1 -- Add a key component -- Aggiungere %1 -- -- -- Change %1 -- Change a key component -- Modificare %1 -- -- -- Remove %1 -- Remove a key component -- Rimuovere %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 impostato, fare clic per modificare o rimuovere -- -- -- -- KeyFileEditWidget -- -- Generate -- Genera -- -- -- Key File -- File chiave -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>È possibile aggiungere un file chiave contenente byte casuali per una maggiore sicurezza.</p><p>Devi tenerlo segreto e non perderlo mai o sarai bloccato!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Errore nel caricamento del file chiave '%1' --Messaggio: %2 -- -- -- Key files -- File chiave -- -- -- All files -- Tutti i file -- -- -- Create Key File... -- Crea file chiave... -- -- -- Error creating key file -- Errore nella creazione del file chiave -- -- -- Unable to create key file: %1 -- Impossibile creare il file chiave: %1 -- -- -- Select a key file -- Seleziona un file chiave -- -- -- Key file selection -- Selezione del file chiave -- -- -- Browse for key file -- Cercare il file chiave -- -- -- Browse... -- Sfoglia... -- -- -- Generate a new key file -- Generare un nuovo file chiave -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Nota: non utilizzare un file che potrebbe cambiare in quanto ciò impedirà di sbloccare il database! -- -- -- Invalid Key File -- File chiave non valido -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Non è possibile utilizzare il database corrente come proprio file chiave. Scegliere un file diverso o generare un nuovo file chiave. -- -- -- Suspicious Key File -- File chiave sospetto -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Il file chiave scelto ha l'aspetto di un file database delle password. Un file chiave deve essere un file statico che non cambia mai o si perderà l'accesso al database per sempre. --Sei sicuro di voler continuare con questo file? -- -- -- Old key file format -- Vecchio formato di file chiave -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- È stato selezionato un file di chiave in un vecchio formato che KeePassXC<br>potrebbe smettere di supportare in futuro.<br><br>Prendere in considerazione la possibilità di generare un nuovo file di chiave. -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Aiuto -- -- -- &Groups -- &Gruppi -- -- -- &Tools -- S&trumenti -- -- -- &Quit -- &Esci -- -- -- &About -- &Informazioni -- -- -- Database settings -- Impostazioni database -- -- -- Copy username to clipboard -- Copia nome utente negli appunti -- -- -- Copy password to clipboard -- Copia password negli appunti -- -- -- &Settings -- &Impostazioni -- -- -- &Title -- &Titolo -- -- -- Copy title to clipboard -- Copia titolo negli appunti -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copia URL negli appunti -- -- -- &Notes -- &Note -- -- -- Copy notes to clipboard -- Copia note negli appunti -- -- -- Copy &TOTP -- Copia &TOTP -- -- -- E&mpty recycle bin -- Svuota il cesti&no -- -- -- Clear history -- Azzera cronologia -- -- -- Access error for config file %1 -- Errore di accesso per il file di configurazione %1 -- -- -- Settings -- Impostazioni -- -- -- Toggle window -- Abilita/disabilita finestra -- -- -- Quit KeePassXC -- Esci da KeePassXC -- -- -- Please touch the button on your YubiKey! -- Premi il pulsante della YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ATTENZIONE: stai utilizzando una versione non stabile di KeePassXC! --Vi è il rischio concreto di danneggiamenti ai database utilizzati, si consiglia di predisporre per una loro copia di sicurezza. --Questa versione non è pensata per essere utilizzata in ambito di produzione. -- -- -- &Donate -- &Donare -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- AVVISO: la tua versione di Qt può causare dei crash di KeePassXC con una tastiera sullo schermo! --Si consiglia di utilizzare l'AppImage disponibile sulla nostra pagina di download. -- -- -- &Import -- &Importare -- -- -- Create a new database -- Creare un nuovo database -- -- -- Merge from another KDBX database -- Unire da un altro database KDBX -- -- -- Add a new entry -- Aggiungere una nuova voce -- -- -- View or edit entry -- Visualizzare o modificare voce -- -- -- Add a new group -- Aggiungere un nuovo gruppo -- -- -- Perform &Auto-Type -- Eseguire completamento &automatico -- -- -- Open &URL -- Aprire &URL -- -- -- Import a KeePass 1 database -- Importare un database KeePass 1 -- -- -- Import a CSV file -- Importare un file CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTA: si sta utilizzando una versione non definitiva di KeePassXC! --Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all'uso in produzione. -- -- -- Check for updates on startup? -- Controllare gli aggiornamenti all'avvio? -- -- -- Would you like KeePassXC to check for updates on startup? -- Volete che KeePassXC controlli eventuali aggiornamenti all'avvio? -- -- -- You can always check for updates manually from the application menu. -- È sempre possibile controllare gli aggiornamenti manualmente tramite i menu dell'applicazione. -- -- -- &Export -- &Esporta -- -- -- Sort &A-Z -- Ordina &A-Z -- -- -- Sort &Z-A -- Ordina &Z-A -- -- -- &Password Generator -- Generatore di &password -- -- -- Import a 1Password Vault -- Importare un 1Password Vault -- -- -- &Getting Started -- &Guida introduttiva -- -- -- &User Guide -- &Guida per l'utente -- -- -- &Keyboard Shortcuts -- &Tasti di scelta rapida -- -- -- &Recent Databases -- &Database recenti -- -- -- &Entries -- &Voci -- -- -- Copy Att&ribute -- Copia att&ributo -- -- -- TOTP -- TOTP -- -- -- View -- Visualizza -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Controlla aggiornamenti -- -- -- &Open Database… -- &Apri database… -- -- -- &Save Database -- &Salva database -- -- -- &Close Database -- &Chiudi database -- -- -- &New Database… -- &Nuovo database -- -- -- &Merge From Database… -- &Unire dal database... -- -- -- &New Entry… -- &Nuova voce -- -- -- &Edit Entry… -- &Modifica voce -- -- -- &Delete Entry… -- &Elimina voce -- -- -- &New Group… -- &Nuovo gruppo -- -- -- &Edit Group… -- &Modifica gruppo -- -- -- &Delete Group… -- &Elimina gruppo -- -- -- Download All &Favicons… -- Scarica tutte le &Favicons -- -- -- Sa&ve Database As… -- Sal&va database come -- -- -- Database &Security… -- Database &Sicurezza... -- -- -- Database &Reports... -- Database &Report... -- -- -- Statistics, health check, etc. -- Statistiche, controllo dello stato, ecc. -- -- -- &Database Settings… -- Impostazioni &database -- -- -- &Clone Entry… -- &Clona voce -- -- -- Move u&p -- Sposta in s&ù -- -- -- Move entry one step up -- Sposta la voce una posizione in alto -- -- -- Move do&wn -- Sposta in gi&ù -- -- -- Move entry one step down -- Sposta la voce una posizione in basso -- -- -- Copy &Username -- Copia &nome utente -- -- -- Copy &Password -- Copia &password -- -- -- Download &Favicon -- Scarica &Favicon -- -- -- &Lock Databases -- &Blocca database -- -- -- &CSV File… -- &File CSV... -- -- -- &HTML File… -- File &HTML... -- -- -- KeePass 1 Database… -- Database KeePass 1 -- -- -- 1Password Vault… -- 1Password Vault -- -- -- CSV File… -- File CSV -- -- -- Show TOTP -- Visualizza TOTP -- -- -- Show QR Code -- Mostra codice QR -- -- -- Set up TOTP… -- Configura TOTP... -- -- -- Report a &Bug -- Segnala un &bug -- -- -- Open Getting Started Guide -- Apri la guida introduttiva -- -- -- &Online Help -- &Guida in linea -- -- -- Go to online documentation -- Vai alla documentazione online -- -- -- Open User Guide -- Apri il manuale dell'utente -- -- -- Save Database Backup... -- Salva il backup del database -- -- -- Add key to SSH Agent -- Aggiungi chiave all'agente SSH -- -- -- Remove key from SSH Agent -- Rimuovi chiave dall'agente SSH -- -- -- Compact Mode -- Modalità compatta -- -- -- Automatic -- Automatico -- -- -- Light -- Chiaro -- -- -- Dark -- Scuro -- -- -- Classic (Platform-native) -- Classico (nativo della piattaforma) -- -- -- Show Toolbar -- Mostra barra degli strumenti -- -- -- Show Preview Panel -- Mostra pannello anteprima -- -- -- Don't show again for this version -- Non mostrare più per questa versione -- -- -- Restart Application? -- Riavviare l'applicazione? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- È necessario riavviare l'applicazione per applicare questa impostazione. Vuoi riavviare ora? -- -- -- Perform Auto-Type Sequence -- Esegui la sequenza di completamento automatico -- -- -- {USERNAME} -- {NOMEUSER) -- -- -- {USERNAME}{ENTER} -- {NOMEUSER}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- Sempre sopra -- -- -- Hide Usernames -- Nascondi nome utente -- -- -- Hide Passwords -- Nascondi password -- -- -- -- ManageDatabase -- -- Database settings -- Impostazioni database -- -- -- Edit database settings -- Modificare le impostazioni del database -- -- -- Unlock database -- Sblocca database -- -- -- Unlock database to show more information -- Sblocca il database per mostrare ulteriori informazioni -- -- -- Lock database -- Blocca database -- -- -- -- ManageSession -- -- Disconnect -- Scollegare -- -- -- Disconnect this application -- Scollega questa applicazione -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Creazione mancante %1 [%2] -- -- -- Relocating %1 [%2] -- Rilocazione di %1 [%2] -- -- -- Overwriting %1 [%2] -- Sovrascrittura %1 [%2] -- -- -- older entry merged from database "%1" -- voce precedente unita dal database "%1" -- -- -- Adding backup for older target %1 [%2] -- Aggiunto backup per la destinazione precedente %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Aggiunto backup per l'origine precedente %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Riapplicare la voce di destinazione precedente all'origine più recente %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Riapplicare la voce di origine precedente alla destinazione più recente %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Sincronizzazione dall'origine più recente %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Sincronizzazione dall'origine precedente %1 [%2] -- -- -- Deleting child %1 [%2] -- Eliminazione dell'elemento figlio %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Eliminazione orfano %1 [%2] -- -- -- Changed deleted objects -- Oggetti eliminati modificati -- -- -- Adding missing icon %1 -- Aggiungere l'icona mancante %1 -- -- -- Removed custom data %1 [%2] -- Dati personalizzati rimossi %1 [%2] -- -- -- Adding custom data %1 [%2] -- Aggiunta di dati personalizzati %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Creazione di un nuovo database KeePassXC... -- -- -- Root -- Root group -- Radice -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Pagina della procedura guidata -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database. -- -- -- Advanced Settings -- Impostazioni avanzate -- -- -- Simple Settings -- Impostazioni semplici -- -- -- Encryption Settings -- Impostazioni di crittografia -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Credenziali database -- -- -- A set of credentials known only to you that protects your database. -- Un set di credenziali note solo a te che protegge il database. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Impostazioni di crittografia -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informazioni generali sul database -- -- -- Please fill in the display name and an optional description for your new database: -- Si prega di compilare il nome visualizzato e una descrizione facoltativa per il nuovo database: -- -- -- -- NixUtils -- -- Password Manager -- Gestione password -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 non valido, non contiene l'intestazione -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Impossibile leggere tutti i byte IV, desiderati 16 ma ottenuti %1 -- -- -- Unable to init cipher for opdata01: %1 -- Impossibile inizializzare la crittografia per opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Impossibile leggere tutti i byte della firma HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 non valido a causa di un HMAC non riuscito -- -- -- Unable to process clearText in place -- Impossibile elaborare clearText sul posto -- -- -- Expected %1 bytes of clear-text, found %2 -- Previsto %1 byte di testo non crittografato, trovato %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Lettura del database non ha prodotto un'istanza --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- La directory .opvault deve esistere -- -- -- Directory .opvault must be readable -- La directory .opvault deve essere leggibile -- -- -- Directory .opvault/default must exist -- Directory .opvault/default deve esistere -- -- -- Directory .opvault/default must be readable -- Directory .opvault/default deve essere leggibile -- -- -- Unable to decode masterKey: %1 -- Impossibile decodificare masterKey: %1 -- -- -- Unable to derive master key: %1 -- Impossibile derivare la chiave master: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- File di chiave non valido, era attesa una chiave OpenSSH -- -- -- PEM boundary mismatch -- Mancata corrispondenza del marigne PEM -- -- -- Base64 decoding failed -- Decodifica base64 non riuscita -- -- -- Key file way too small. -- File chiave decisamente troppo piccolo. -- -- -- Key file magic header id invalid -- Id dell'intestazione magica del file chiave non valido -- -- -- Found zero keys -- Trovate zero chiavi -- -- -- Failed to read public key. -- Impossibile leggere la chiave privata. -- -- -- Corrupted key file, reading private key failed -- File della chiave rovinato, impossibile leggere la chiave privata -- -- -- No private key payload to decrypt -- Nessuna chiave privata da decifrare nel contenuto -- -- -- Trying to run KDF without cipher -- Sto cercando di eseguire KDF senza cifratura -- -- -- Passphrase is required to decrypt this key -- La decifrazione di questa chiave richiede una frase segreta -- -- -- Key derivation failed, key file corrupted? -- Derivazione della chiave non riuscita, file della chiave rovinato? -- -- -- Decryption failed, wrong passphrase? -- Decifrazione non riuscita, frase segreta non corretta? -- -- -- Unexpected EOF while reading public key -- EOF imprevisto durante la lettura della chiave pubblica -- -- -- Unexpected EOF while reading private key -- EOF imprevisto durante la lettura della chiave privata -- -- -- Can't write public key as it is empty -- Impossibile scrivere la chiave pubblica perché è vuota -- -- -- Unexpected EOF when writing public key -- EOF imprevisto durante la scrittura di chiave pubblica -- -- -- Can't write private key as it is empty -- Impossibile scrivere la chiave privata perché è vuota -- -- -- Unexpected EOF when writing private key -- EOF imprevisto durante la scrittura di una chiave privata -- -- -- Unsupported key type: %1 -- Tipo di chiave non supportato: %1 -- -- -- Unknown cipher: %1 -- Tipo di cifrario non supportato: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Il vettore di inizializzazione del cifrario è troppo corto per la derivazione della chiave crittografica tramite MD5 -- -- -- Unknown KDF: %1 -- KDF sconosciuto: %1 -- -- -- Unknown key type: %1 -- Tipo di chiave sconosciuta: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Le password non corrispondono -- -- -- Passwords match so far -- Le password corrispondono finora -- -- -- Toggle Password (%1) -- Attiva/disattiva password (%1) -- -- -- Generate Password (%1) -- Genera password (%1) -- -- -- Warning: Caps Lock enabled! -- Attenzione: Caps Lock abilitato! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Inserisci password: -- -- -- Confirm password: -- Conferma password: -- -- -- Password -- Password -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Una password è il metodo principale per mantenere sicuro il vostro database.</p><p>Una buona password dev'essere lunga ed unica. KeePassXC può generarne una per voi.</p> -- -- -- Passwords do not match. -- Le password non corrispondono. -- -- -- Password field -- Campo password -- -- -- Repeat password field -- Campo ripeti password -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- affidabilità -- -- -- entropy -- entropia -- -- -- Password -- Password -- -- -- Character Types -- Tipi di carattere -- -- -- Numbers -- Numeri -- -- -- Extended ASCII -- ASCII esteso -- -- -- Exclude look-alike characters -- Escludi caratteri simili -- -- -- Pick characters from every group -- Seleziona caratteri da ogni gruppo -- -- -- &Length: -- &Lunghezza: -- -- -- Passphrase -- Frase segreta -- -- -- Wordlist: -- Elenco termini: -- -- -- Word Separator: -- Separatore parole: -- -- -- Close -- Chiudi -- -- -- Entropy: %1 bit -- Entropia: %1 bit -- -- -- Password Quality: %1 -- Qualità password: %1 -- -- -- Poor -- Password quality -- Debole -- -- -- Weak -- Password quality -- Intermedia -- -- -- Good -- Password quality -- Buona -- -- -- Excellent -- Password quality -- Eccellente -- -- -- Switch to advanced mode -- Passare alla modalità avanzata -- -- -- Advanced -- Avanzate -- -- -- Braces -- Parentesi graffe -- -- -- Punctuation -- Punteggiatura -- -- -- Quotes -- Citazioni -- -- -- Logograms -- Logogrammi -- -- -- Character set to exclude from generated password -- Set di caratteri da escludere dalla password generata -- -- -- Do not include: -- Non includere: -- -- -- Add non-hex letters to "do not include" list -- Aggiungere lettere non esadecimali all'elenco "non includere" -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Escludere i caratteri: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Password generata -- -- -- Upper-case letters -- Lettere maiuscole -- -- -- Lower-case letters -- Lettere minuscole -- -- -- Special characters -- Caratteri speciali -- -- -- Math Symbols -- Simboli matematici -- -- -- Dashes and Slashes -- Trattini e barre -- -- -- Excluded characters -- Caratteri esclusi -- -- -- Hex Passwords -- Password esadecimali -- -- -- Password length -- Lunghezza password -- -- -- Word Case: -- Parole maiuscole/minuscole: -- -- -- Regenerate password -- Rigenera password -- -- -- Copy password -- Copia password -- -- -- lower case -- carattere minuscolo -- -- -- UPPER CASE -- MAIUSCOLO -- -- -- Title Case -- Titolo maiuscolo/minuscolo -- -- -- Generate Password -- Genera password -- -- -- Also choose from: -- Scegli anche tra: -- -- -- Additional characters to use for the generated password -- Caratteri aggiuntivi da utilizzare nella generazione delle password -- -- -- Additional characters -- Caratteri aggiuntivi -- -- -- Word Count: -- Conteggio parole: -- -- -- Esc -- Esc -- -- -- Apply Password -- Applica password -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Rigenera password (%1) -- -- -- Special Characters -- Caratteri speciali -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistiche -- -- -- Very weak password -- Password molto debole -- -- -- Password entropy is %1 bits -- L'entropia della password è %1 bits -- -- -- Weak password -- Password debole -- -- -- Used in %1/%2 -- Utilizzato in %1/%2 -- -- -- Password is used %1 times -- La password è stata utilizzata %1 volte -- -- -- Password has expired -- La password è scaduta -- -- -- Password expiry was %1 -- La password è scaduta il %1 -- -- -- Password is about to expire -- La password è in scadenza -- -- -- Password expires in %1 days -- La password scade tra %1 giorni -- -- -- Password will expire soon -- La password scadrà presto -- -- -- Password expires on %1 -- La password scade il %1 -- -- -- Health Check -- Controllo dell'integrità -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Sovrascrivi -- -- -- Delete -- Elimina -- -- -- Move -- Sposta -- -- -- Empty -- Vuoto -- -- -- Remove -- Rimuovi -- -- -- Skip -- Salta -- -- -- Disable -- Disabilita -- -- -- Merge -- Incorpora -- -- -- Continue -- continuare -- -- -- -- QObject -- -- Database not opened -- Database non aperto -- -- -- Database hash not available -- Hash del database non disponibile -- -- -- Client public key not received -- Chiave pubblica del client non ricevuta -- -- -- Cannot decrypt message -- Impossibile decrittografare il messaggio -- -- -- Action cancelled or denied -- Azione annullata o negata -- -- -- KeePassXC association failed, try again -- Associazione KeePassXC fallita, riprova -- -- -- Encryption key is not recognized -- Chiave di crittografia non riconosciuta -- -- -- Incorrect action -- Azione non corretta -- -- -- Empty message received -- Ricevuto un messaggio vuoto -- -- -- No URL provided -- Nessun URL fornito -- -- -- No logins found -- Nessun login trovato -- -- -- Unknown error -- Errore sconosciuto -- -- -- Add a new entry to a database. -- Aggiungi una nuova voce al database. -- -- -- Path of the database. -- Percorso del database. -- -- -- Key file of the database. -- File chiave del database. -- -- -- path -- percorso -- -- -- Username for the entry. -- Nome utente della voce. -- -- -- username -- nome utente -- -- -- URL for the entry. -- URL della voce. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Richiedi la password della voce. -- -- -- Generate a password for the entry. -- Genera una password per questa voce. -- -- -- length -- lunghezza -- -- -- Path of the entry to add. -- Percorso della voce da aggiungere. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Percorso della voce da tagliare. -- -- -- Timeout in seconds before clearing the clipboard. -- Intervallo di tempo in secondi prima di ripulire gli appunti. -- -- -- Edit an entry. -- Modifica una voce. -- -- -- Title for the entry. -- Titolo di una voce. -- -- -- title -- titolo -- -- -- Path of the entry to edit. -- Percorso della voce da modificare. -- -- -- Estimate the entropy of a password. -- Stima l'entropia di una password. -- -- -- Password for which to estimate the entropy. -- Password di cui stimare l'entropia. -- -- -- Perform advanced analysis on the password. -- Esegui un'analisi avanzata sulla password. -- -- -- -- --Available commands: -- -- -- --Comandi disponibili: -- -- -- -- Name of the command to execute. -- Nome del comando da eseguire. -- -- -- List database entries. -- Elenco delle voci del database. -- -- -- Path of the group to list. Default is / -- Percorso del gruppo da elencare. L'impostazione predefinita è / -- -- -- Find entries quickly. -- Cerca voci rapidamente. -- -- -- Search term. -- Termine di ricerca. -- -- -- Merge two databases. -- Unisci due database. -- -- -- Path of the database to merge from. -- Percorso del database sorgente da unire. -- -- -- Use the same credentials for both database files. -- Usa le stesse credenziali per entrambi i file di database. -- -- -- Key file of the database to merge from. -- File chiave del database da unire -- -- -- Show an entry's information. -- Mostra la informazioni di una voce. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Numero di attributi da mostrare. Questa opzione può essere specificata più di una volta, con ogni attributo mostrato in una riga separata nell'ordine dato. Se nessun attributo è specificato verrà dato un riassunto degli attributi predefiniti. -- -- -- attribute -- attributo -- -- -- Name of the entry to show. -- Nome della voce da visualizzare. -- -- -- NULL device -- Periferica NULL -- -- -- error reading from device -- errore di lettura dal dispositivo -- -- -- malformed string -- stringa non valida -- -- -- missing closing quote -- virgoletta di chiusura mancante -- -- -- Group -- Gruppo -- -- -- Title -- Titolo -- -- -- Username -- Nome utente -- -- -- Password -- Password -- -- -- Notes -- Note -- -- -- Last Modified -- Ultima modifica -- -- -- Created -- Creazione -- -- -- Browser Integration -- Integrazione con i browser -- -- -- SSH Agent -- Agente SSH -- -- -- Generate a new random diceware passphrase. -- Genera una nuova passphrase casuale simulando un lancio di dadi. -- -- -- Word count for the diceware passphrase. -- Numero di parole per la passphrase con lancio dei dadi -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista di parole per il generatore con lancio di dadi. --[Predefinito: inglese EFF] -- -- -- Generate a new random password. -- Genera una nuova password casuale. -- -- -- Could not create entry with path %1. -- Impossibile creare la voce con il percorso %1. -- -- -- Enter password for new entry: -- Immettere la password per la nuova voce: -- -- -- Writing the database failed %1. -- Scrittura del database non riuscita %1. -- -- -- Successfully added entry %1. -- Aggiunta con successo la voce %1. -- -- -- Invalid timeout value %1. -- Valore di timeout %1 non valido. -- -- -- Entry %1 not found. -- Voce %1 non trovata. -- -- -- Entry with path %1 has no TOTP set up. -- La voce con percorso %1 non ha impostato TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- Cancellazione degli Appunti in %1 secondi...Cancellazione degli appunti in %1 secondo(i)... -- -- -- Clipboard cleared! -- Appunti cancellati! -- -- -- Silence password prompt and other secondary outputs. -- Silenziare la richiesta di password e altri output secondari. -- -- -- count -- CLI parameter -- conteggio -- -- -- Could not find entry with path %1. -- Impossibile trovare la voce con percorso %1. -- -- -- Not changing any field for entry %1. -- Non modificare nessun campo per la voce %1. -- -- -- Enter new password for entry: -- Immettere la nuova password per la voce: -- -- -- Writing the database failed: %1 -- Scrittura del database non riuscita: %1 -- -- -- Successfully edited entry %1. -- Voce %1 modificata correttamente. -- -- -- Length %1 -- Lunghezza %1 -- -- -- Entropy %1 -- Entropia %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-parola extra bit %1 -- -- -- Type: Bruteforce -- Tipo: Bruteforce -- -- -- Type: Dictionary -- Tipo: dizionario -- -- -- Type: Dict+Leet -- Type: Dict+Leet -- -- -- Type: User Words -- Tipo: parole utente -- -- -- Type: User+Leet -- Tipo: Utente+Leet -- -- -- Type: Repeated -- Tipo: ripetute -- -- -- Type: Sequence -- Tipo: sequenza -- -- -- Type: Spatial -- Tipo: spaziale -- -- -- Type: Date -- Tipo: data -- -- -- Type: Bruteforce(Rep) -- Tipo: Bruteforce(Rep) -- -- -- Type: Dictionary(Rep) -- Tipo: dizionario(Rep) -- -- -- Type: Dict+Leet(Rep) -- Tipo: Dict+Leet(Rep) -- -- -- Type: User Words(Rep) -- Tipo: Parole utente (Rep) -- -- -- Type: User+Leet(Rep) -- Tipo: Utente+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Tipo: Ripetuto(Rep) -- -- -- Type: Sequence(Rep) -- Tipo: Sequenza(Rep) -- -- -- Type: Spatial(Rep) -- Tipo: Spaziale(Rep) -- -- -- Type: Date(Rep) -- Tipo: Data(Rep) -- -- -- Type: Unknown%1 -- Tipo: Sconosciuto %1 -- -- -- Entropy %1 (%2) -- Entropia %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Lunghezza della password (%1) != somma della lunghezza delle parti (%2) *** -- -- -- Failed to load key file %1: %2 -- Impossibile caricare il file di chiave %1: %2 -- -- -- Length of the generated password -- Lunghezza della password generata -- -- -- Use lowercase characters -- Utilizzare caratteri minuscoli -- -- -- Use uppercase characters -- Utilizzare caratteri maiuscoli -- -- -- Use special characters -- Utilizzare caratteri speciali -- -- -- Use extended ASCII -- Usare ASCII esteso -- -- -- Exclude character set -- Escludere il set di caratteri -- -- -- chars -- chars -- -- -- Exclude similar looking characters -- Escludere i caratteri dall'aspetto simile -- -- -- Include characters from every selected group -- Includere i caratteri da ogni gruppo selezionato -- -- -- Recursively list the elements of the group. -- Elencare gli elementi del gruppo in modo ricorsivo. -- -- -- Cannot find group %1. -- Impossibile trovare il gruppo %1. -- -- -- Error reading merge file: --%1 -- Errore durante la lettura del file di unione: --%1 -- -- -- Unable to save database to file : %1 -- Impossibile salvare il database nel file : %1 -- -- -- Unable to save database to file: %1 -- Impossibile salvare il database nel file: %1 -- -- -- Successfully recycled entry %1. -- Riciclata con successo la voce %1. -- -- -- Successfully deleted entry %1. -- Eliminata la voce %1. -- -- -- Show the entry's current TOTP. -- Mostra il TOTP corrente della voce. -- -- -- ERROR: unknown attribute %1. -- ERRORE: attributo sconosciuto %1. -- -- -- No program defined for clipboard manipulation -- Nessun programma definito per la manipolazione degli appunti -- -- -- file empty -- file vuoto -- -- -- %1: (row, col) %2,%3 -- %1: (riga, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Impostazioni non valide -- -- -- Invalid Key -- TOTP -- Chiave non valida -- -- -- Message encryption failed. -- Crittografia del messaggio non riuscita. -- -- -- No groups found -- Nessun gruppo trovato -- -- -- Create a new database. -- Crea un nuovo database. -- -- -- File %1 already exists. -- Il file %1 esiste già. -- -- -- Loading the key file failed -- Caricamento del key-file fallito. -- -- -- No key is set. Aborting database creation. -- Chiave non impostata. Annullamento creazione database. -- -- -- Failed to save the database: %1. -- Impossibile salvare il database: %1. -- -- -- Successfully created new database. -- Nuovo database creato con successo. -- -- -- Creating KeyFile %1 failed: %2 -- Creazione di KeyFile %1 non riuscita: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Caricamento del KeyFile %1 non riuscito: %2 -- -- -- Path of the entry to remove. -- Percorso della voce da rimuovere. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Il file di blocco singola istanza non è valido. Viene eseguita una nuova istanza. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Il file di blocco non può essere creato. La modalità a istanza singola è disattivata. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - gestore di password multipiattaforma -- -- -- filenames of the password databases to open (*.kdbx) -- i nomi dei file di database delle password da aprire (*.kdbx) -- -- -- path to a custom config file -- percorso ad un file di configurazione personalizzato -- -- -- key file of the database -- file chiave del database -- -- -- read password of the database from stdin -- leggi la password del database da stdin -- -- -- Another instance of KeePassXC is already running. -- È già in esecuzione un'altra istanza di KeePassXC. -- -- -- Fatal error while testing the cryptographic functions. -- Errore fatale durante il test delle funzioni di crittografia. -- -- -- KeePassXC - Error -- KeePassXC - Errore -- -- -- Database password: -- Password del database: -- -- -- Cannot create new group -- Impossibile creare un nuovo gruppo -- -- -- Deactivate password key for the database. -- Disattivare la chiave della password per il database. -- -- -- Displays debugging information. -- Visualizza le informazioni di debug. -- -- -- Deactivate password key for the database to merge from. -- Disattivare la chiave della password per il database da cui eseguire l'unione. -- -- -- Version %1 -- Versione %1 -- -- -- Build Type: %1 -- Tipo di compilazione: %1 -- -- -- Revision: %1 -- Revisione: %1 -- -- -- Distribution: %1 -- Distribuzione: %1 -- -- -- Debugging mode is disabled. -- La modalità di debug è disabilitata. -- -- -- Debugging mode is enabled. -- La modalità di debug è abilitata. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistema operativo: %1 --Architettura CPU: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Completamento automatico -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (condivisione firmata e non firmata) -- -- -- KeeShare (only signed sharing) -- KeeShare (solo condivisione firmata) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (solo condivisione non firmata) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nessuno -- -- -- Enabled extensions: -- Estensioni abilitate: -- -- -- Cryptographic libraries: -- Librerie crittografiche: -- -- -- Cannot generate a password and prompt at the same time! -- Impossibile generare una password e richiederla contemporaneamente! -- -- -- Adds a new group to a database. -- Aggiunge un nuovo gruppo a un database. -- -- -- Path of the group to add. -- Percorso del gruppo da aggiungere. -- -- -- Group %1 already exists! -- Il gruppo %1 esiste già! -- -- -- Group %1 not found. -- Gruppo %1 non trovato. -- -- -- Successfully added group %1. -- Aggiunta del gruppo %1 completata. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Verificare se le password sono state rivelate pubblicamente. FILENAME deve essere il percorso di un file che elenca gli hashe SHA-1 delle password rivelate in formato HIBP, come disponibile da https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- Filename -- -- -- Analyze passwords for weaknesses and problems. -- Analizzare le password per trovare punti deboli e problemi. -- -- -- Failed to open HIBP file %1: %2 -- Impossibile aprire il file HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Valutare le voci del database rispetto al file HIBP, questo richiederà un po' di tempo... -- -- -- Close the currently opened database. -- Chiudere il database attualmente aperto. -- -- -- Display this help. -- Visualizza questa guida. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Conteggio parole non valido %1 -- -- -- The word list is too small (< 1000 items) -- L'elenco delle parole è troppo piccolo (< 1000 voci) -- -- -- Exit interactive mode. -- Uscire dalla modalità interattiva. -- -- -- Exports the content of a database to standard output in the specified format. -- Esporta il contenuto di un database nell'output standard nel formato specificato. -- -- -- Unable to export database to XML: %1 -- Impossibile esportare il database in XML: %1 -- -- -- Unsupported format %1 -- Formato non supportato %1 -- -- -- Use numbers -- Utilizzare i numeri -- -- -- Invalid password length %1 -- Lunghezza password non valida %1 -- -- -- Display command help. -- Visualizzare la guida del comando. -- -- -- Available commands: -- Comandi disponibili: -- -- -- Import the contents of an XML database. -- Importare il contenuto di un database XML. -- -- -- Path of the XML database export. -- Percorso dell'esportazione del database XML. -- -- -- Path of the new database. -- Percorso del nuovo database. -- -- -- Successfully imported database. -- Database importato correttamente. -- -- -- Unknown command %1 -- Comando sconosciuto %1 -- -- -- Flattens the output to single lines. -- Appiattisce l'output su singole linee. -- -- -- Only print the changes detected by the merge operation. -- Stampare solo le modifiche rilevate dall'operazione di unione. -- -- -- Yubikey slot for the second database. -- Slot Yubikey per il secondo database. -- -- -- Successfully merged %1 into %2. -- È stato possibile unire con successo %1 in %2. -- -- -- Database was not modified by merge operation. -- Il database non è stato modificato dall'operazione di unione. -- -- -- Moves an entry to a new group. -- Sposta una voce in un nuovo gruppo. -- -- -- Path of the entry to move. -- Percorso della voce da spostare. -- -- -- Path of the destination group. -- Percorso del gruppo di destinazione. -- -- -- Could not find group with path %1. -- Impossibile trovare il gruppo con percorso %1. -- -- -- Entry is already in group %1. -- La voce è già nel gruppo %1. -- -- -- Successfully moved entry %1 to group %2. -- È stata spostata correttamente la voce %1 nel gruppo %2. -- -- -- Open a database. -- Aprire un database. -- -- -- Path of the group to remove. -- Percorso del gruppo da rimuovere. -- -- -- Cannot remove root group from database. -- Impossibile rimuovere il gruppo radice dal database. -- -- -- Successfully recycled group %1. -- Riciclato con successo il gruppo %1. -- -- -- Successfully deleted group %1. -- Eliminazione del gruppo %1 completata. -- -- -- Failed to open database file %1: not found -- Impossibile aprire il file di database %1: non trovato -- -- -- Failed to open database file %1: not a plain file -- Impossibile aprire il file di database %1: non un file piatto -- -- -- Failed to open database file %1: not readable -- Impossibile aprire il file di database %1: non leggibile -- -- -- Enter password to unlock %1: -- Immettere la password per sbloccare %1: -- -- -- Invalid YubiKey slot %1 -- Slot YubiKey non valido %1 -- -- -- Enter password to encrypt database (optional): -- Immettere la password per crittografare il database (facoltativo): -- -- -- HIBP file, line %1: parse error -- File HIBP, riga %1: errore di analisi -- -- -- Secret Service Integration -- Integrazione del servizio segreto -- -- -- User name -- Nome utente -- -- -- Password for '%1' has been leaked %2 time(s)! -- La password per '%1' è trapelata %2 volta!La password per '%1' è trapelata %2 volte! -- -- -- Invalid password generator after applying all options -- Generatore di password non valido dopo l'applicazione di tutte le opzioni -- -- -- Show the protected attributes in clear text. -- Mostra in chiaro gli attributi protetti -- -- -- Browser Plugin Failure -- Errore del plug-in del browser -- -- -- Could not save the native messaging script file for %1. -- Impossibile salvare il file di script nativo di messaggistica per %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copia l'attributo negli appunti. L'impostazione predefinita è "password" se non specificato. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copiare il TOTP negli appunti. (analogo a "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Copia l'attributo della voce negli appunti. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERRORE: Specificare uno solo tra attributo o TOTOP, non entrambi. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERRORE: l'attributo %1 è ambiguo, corrisponde con %2. -- -- -- Attribute "%1" not found. -- Attributo "%1" non trovato. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Attributo della voce "%1" copiato negli appunti! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Slot Yubikey e porta seriale opzionale utilizzata per l'accesso al database (es. 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Il tempo di decrittazione del database in MS. -- -- -- time -- orario -- -- -- Set the key file for the database. -- Imposta un file chiave per il database -- -- -- Set a password for the database. -- Imposta una password per il database -- -- -- Invalid decryption time %1. -- Tempo di decrittazione non valido %1. -- -- -- Target decryption time must be between %1 and %2. -- Il tempo di decrittazione deve essere compreso tra %1 e %2. -- -- -- Failed to set database password. -- Impossibile salvare la password del database. -- -- -- Benchmarking key derivation function for %1ms delay. -- Test delle prestazioni della chiave di derivazione per %1ms di ritardo. -- -- -- Setting %1 rounds for key derivation function. -- Impostare %1 iterazioni per la funzione di derivazione della chiave. -- -- -- error while setting database key derivation settings. -- Errore durante il salvataggio delle impostazioni della chiave di derivazione. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formati utilizzabile per l'esportazione. E' possibile scegliere tra 'xml' e 'csv'. L'impostazione predefinita è 'xml'. -- -- -- Unable to import XML database: %1 -- Impossibile importare il database XML: %1 -- -- -- Show a database's information. -- Mostra le informazioni di un database. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nome: -- -- -- Description: -- Descrizione: -- -- -- Cipher: -- Cifrario: -- -- -- KDF: -- Kdf: -- -- -- Recycle bin is enabled. -- Il cestino è abilitato -- -- -- Recycle bin is not enabled. -- Il cestino non è abilitato -- -- -- Invalid command %1. -- Comando non valido %1. -- -- -- Invalid YubiKey serial %1 -- Seriale YubiKey %1 non valido -- -- -- Please touch the button on your YubiKey to continue… -- Premere il pulsante della YubiKey per continuare -- -- -- Do you want to create a database with an empty password? [y/N]: -- Si vuole davvero creare un database senza una password? [y/N]: -- -- -- Repeat password: -- Ripeti password: -- -- -- Error: Passwords do not match. -- Errore: le password non corrispondono -- -- -- All clipping programs failed. Tried %1 -- -- Tutti i programmi di ritaglio hanno riscontrato errori. Provati %1 -- -- -- -- AES (%1 rounds) -- AES (%1 turni) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Test delle prestazioni %1 ritardo -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- Percorso di un file di configurazione locale personalizzato -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- ATTENZIONE: stai utilizzando un vecchio formato di file chiave che KeePassXC potrebbe --smettere di supportare in futuro. -- --Prendere in considerazione la possibilità di generare un nuovo file di chiave. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 passaggi, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – consigliato) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Icona -- -- -- Unsupported key file version: %1 -- Versione del file chiave non supportata: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Checksum non corrispondente! Il file chiave potrebbe essere danneggiato. -- -- -- Unexpected key file data! Key file may be corrupt. -- Dati di file chiave imprevisti! Il file chiave potrebbe essere danneggiato. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Errore interno di zlib durante la compressione: -- -- -- Error writing to underlying device: -- Errore durante la scrittura nel dispositivo: -- -- -- Error opening underlying device: -- Errore durante l'apertura del dispositivo: -- -- -- Error reading data from underlying device: -- Errore durante la lettura dal dispositivo: -- -- -- Internal zlib error when decompressing: -- Errore interno di zlib durante la decompressione: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Formato gzip non supportato da questa versione di zlib. -- -- -- Internal zlib error: -- Errore interno di zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Mostra anche le voci escluse dai rapporti -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Spostare il cursore sulla notifica per vedere dettagli aggiuntivi. Doppio-click per modificare la voce. -- -- -- Bad -- Password quality -- Scadente -- -- -- Bad — password must be changed -- Scadente: la password deve essere modificata -- -- -- Poor -- Password quality -- Debole -- -- -- Poor — password should be changed -- Inefficace — la password dovrebbe essere cambiata -- -- -- Weak -- Password quality -- Intermedia -- -- -- Weak — consider changing the password -- Debole — considera di cambiare password -- -- -- (Excluded) -- (Esclusa) -- -- -- This entry is being excluded from reports -- Questa voce è stata esclusa dai rapporti -- -- -- Please wait, health data is being calculated... -- Attendere, controllo di integrità in corso -- -- -- Congratulations, everything is healthy! -- Congratulazioni, nessun problema rilevato! -- -- -- Title -- Titolo -- -- -- Path -- Percorso -- -- -- Score -- Punteggio -- -- -- Reason -- Motivo -- -- -- Edit Entry... -- Modifica voce -- -- -- Exclude from reports -- Escludere dal rapporto -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ATTENZIONE: Questo rapporto richiede l'invio di informazioni al servizio online Have I Been Pwned (https://haveibeenpwned.com). Se si procede le password verranno crittografate e i primi cinque caratteri verranno inviati in modo sicuro al servizio. Il tuo database rimane sicuro e non può essere ricostruito da queste informazioni. Tuttavia il numero di password inviate sarà esposto a questo servizio. -- -- -- Perform Online Analysis -- Esegui un'analisi online -- -- -- Also show entries that have been excluded from reports -- Mostra anche le voci escluse dai rapporti -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Questa versione di KeePassXC non possiede funzionalità di rete. La funzionalità di rete è richiesta per verificare la tua password con i database di Have I Been Pwned -- -- -- Congratulations, no exposed passwords! -- Congratulazioni, nessuna password esposta! -- -- -- Title -- Titolo -- -- -- Path -- Percorso -- -- -- Password exposed… -- Password esposta -- -- -- (Excluded) -- (Esclusa) -- -- -- This entry is being excluded from reports -- Questa voce è stata esclusa dai rapporti -- -- -- once -- una volta -- -- -- up to 10 times -- fino a 10 volte -- -- -- up to 100 times -- fino a 100 volte -- -- -- up to 1000 times -- fino a 1000 volte -- -- -- up to 10,000 times -- fino a 10,000 volte -- -- -- up to 100,000 times -- fino a 100,000 volte -- -- -- up to a million times -- fino ad un milione di volte -- -- -- millions of times -- milioni di volte -- -- -- Edit Entry... -- Modifica voce -- -- -- Exclude from reports -- Escludere dal rapporto -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Passare il mouse sulle righe con icone di errore per ulteriori informazioni. -- -- -- Name -- Nome -- -- -- Value -- Valore -- -- -- Please wait, database statistics are being calculated... -- Attendere, calcolo statistiche del database... -- -- -- Database name -- Nome del database -- -- -- Description -- descrizione -- -- -- Location -- Posizione -- -- -- Last saved -- Ultimo salvataggio -- -- -- Unsaved changes -- Modifiche non salvate -- -- -- yes -- -- -- -- no -- No -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Il database è stato modificato, ma le modifiche non sono ancora state salvate su disco. -- -- -- Number of groups -- Numero di gruppi -- -- -- Number of entries -- Numero di voci -- -- -- Number of expired entries -- Numero di voci scadute -- -- -- The database contains entries that have expired. -- Il database contiene voci scadute. -- -- -- Unique passwords -- Password univoche -- -- -- Non-unique passwords -- Password non univoche -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Più del 10% delle password vengono riutilizzate. Utilizzare password univoche quando possibile. -- -- -- Maximum password reuse -- Massimo riutilizzo della password -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Alcune password vengono utilizzate più di tre volte. Utilizzare password univoche quando possibile. -- -- -- Number of short passwords -- Numero di password brevi -- -- -- Recommended minimum password length is at least 8 characters. -- La lunghezza minima consigliata per la password è di almeno 8 caratteri. -- -- -- Number of weak passwords -- Numero di password deboli -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Consiglia di utilizzare password lunghe e randomizzate con una valutazione "buona" o "eccellente". -- -- -- Entries excluded from reports -- Voci escluse dal rapporto -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Escludere voci dal rapporto, ad esempio perché possiedono una password scadente, non è necessariamente un problema ma dovrebbero essere tenute sotto controllo. -- -- -- Average password length -- Lunghezza media password -- -- -- %1 characters -- %1 caratteri -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- La lunghezza media della password è inferiore a dieci caratteri. Le password più lunghe offrono maggiore sicurezza. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Connessione con l'agente non riuscita. -- -- -- Agent protocol error. -- Errore di protocollo dell'agente. -- -- -- No agent running, cannot add identity. -- Nessun agente in esecuzione, impossibile aggiungere un'identità. -- -- -- No agent running, cannot remove identity. -- Nessun agente in esecuzione, non è possibile rimuovere l'identità. -- -- -- Agent refused this identity. Possible reasons include: -- L'agente ha rifiutato questa identità. Motivi possibili sono: -- -- -- The key has already been added. -- La chiave è già stata aggiunta. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Durata limitata non è supportata dall'agente (controllare le opzioni). -- -- -- A confirmation request is not supported by the agent (check options). -- Una richiesta di conferma non è supportata dall'agente (controllare le opzioni). -- -- -- Key identity ownership conflict. Refusing to add. -- Identificativo del proprietario della chiave in conflitto. Aggiunta negata. -- -- -- No agent running, cannot list identities. -- Nessun agente in esecuzione non può elencare le identità. -- -- -- -- SearchHelpWidget -- -- Search Help -- Cercare nell'aiuto -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- I termini di ricerca sono i seguenti: [modificatori][campo:]["]termine["] -- -- -- Every search term must match (ie, logical AND) -- Ogni termine di ricerca deve corrispondere (per esempio AND logico) -- -- -- Modifiers -- Modificatori -- -- -- exclude term from results -- Escludere il termine dai risultati -- -- -- match term exactly -- Corrispondenza esatta dei termini -- -- -- use regex in term -- utilizzare regex nel termine -- -- -- Fields -- Campi -- -- -- Term Wildcards -- Termine caratteri jolly -- -- -- match anything -- corrispondenza con qualsiasi cosa -- -- -- match one -- corrisponde a uno -- -- -- logical OR -- OR logico -- -- -- Examples -- Esempi -- -- -- -- SearchWidget -- -- Search -- Cerca -- -- -- Limit search to selected group -- Limita la ricerca al gruppo selezionato -- -- -- Search Help -- Cercare nell'aiuto -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Ricerca (%1)... -- -- -- Case sensitive -- Riconoscimento di maiuscole e minuscole -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opzioni -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Abilitare l'integrazione di KeepassXC con Freedesktop.org Secret Service -- -- -- General -- Generale -- -- -- Show notification when credentials are requested -- Mostra notifica quando vengono richieste le credenziali -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Se il cestino è abilitato per il database, le voci verranno spostate direttamente nel cestino. In caso contrario, verranno eliminati senza conferma.</p><p>Continuerai a essere interpellato se qualsiasi voce fa riferimento ad altre.</p></body></html> -- -- -- Exposed database groups: -- Gruppi di database esposti: -- -- -- Authorization -- Autorizzazione -- -- -- These applications are currently connected: -- Queste applicazioni sono attualmente connesse: -- -- -- Don't confirm when entries are deleted by clients -- Non confermare quando le voci vengono eliminate dai client -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Errore:</b> Impossibile connettersi a DBus. Verificare le impostazioni di DBus. -- -- -- <b>Warning:</b> -- <b>Attenzione:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Salvare i cambiamenti per attivare il plugin e modificare questa sezione. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Attivo -- -- -- Allow export -- Consenti esportazione -- -- -- Allow import -- Consenti importazione -- -- -- Own certificate -- Certificato proprio -- -- -- Fingerprint: -- impronta digitale: -- -- -- Certificate: -- Certificato: -- -- -- Signer -- Firmatario -- -- -- Key: -- Chiave: -- -- -- Generate -- Genera -- -- -- Import -- Importazione -- -- -- Export -- Esportare -- -- -- Imported certificates -- Certificati importati -- -- -- Trust -- Attendibilità -- -- -- Ask -- Chiedere -- -- -- Untrust -- L'inattendibilità -- -- -- Remove -- Rimuovi -- -- -- Path -- Percorso -- -- -- Status -- Stato -- -- -- Fingerprint -- Impronta digitale -- -- -- Certificate -- Certificato -- -- -- Trusted -- Fidato -- -- -- Untrusted -- Non attendibile -- -- -- Unknown -- Sconosciuto -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- File chiave KeeShare -- -- -- All files -- Tutti i file -- -- -- Select path -- Seleziona tracciato -- -- -- Exporting changed certificate -- Esportazione del certificato modificato -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Il certificato esportato non corrisponde a quello in uso. Esportare il certificato corrente? -- -- -- Signer: -- Firmatario: -- -- -- Allow KeeShare imports -- Consenti importazioni KeeShare -- -- -- Allow KeeShare exports -- Consenti esportazioni KeeShare -- -- -- Only show warnings and errors -- Mostra solo avvisi ed errori -- -- -- Key -- Chiave -- -- -- Signer name field -- Campo nome firmatario -- -- -- Generate new certificate -- Genera nuovo certificato -- -- -- Import existing certificate -- Importa certificato esistente -- -- -- Export own certificate -- Esporta il proprio certificato -- -- -- Known shares -- Condivisioni conosciute -- -- -- Trust selected certificate -- Considera attendibile il certificato selezionato -- -- -- Ask whether to trust the selected certificate every time -- Chiedere ogni volta se considerare attendibile il certificato selezionato -- -- -- Untrust selected certificate -- Certificato selezionato non attendibile -- -- -- Remove selected certificate -- Rimuovere il certificato selezionato -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- La sovrascrittura del contenitore di condivisioni con firma non è supportata - l'esportazione non è consentita -- -- -- Could not write export container (%1) -- Impossibile scrivere il contenitore di esportazione (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Impossibile incorporare la firma: Impossibile aprire il file da scrivere (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Impossibile incorporare la firma: Impossibile scrivere il file (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Impossibile incorporare il database: Impossibile aprire il file da scrivere (%1) -- -- -- Could not embed database: Could not write file (%1) -- Impossibile incorporare il database: impossibile scrivere il file (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- La sovrascrittura del contenitore di condivisione non firmato non è supportata - l'esportazione non è consentita -- -- -- Could not write export container -- Impossibile scrivere il contenitore di esportazione -- -- -- Unexpected export error occurred -- Si è verificato un errore di esportazione imprevisto -- -- -- -- ShareImport -- -- Import from container without signature -- Importa da contenitore senza firma -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Non è possibile verificare l'origine del contenitore condiviso perché non è firmato. Si desidera davvero importare da %1? -- -- -- Import from container with certificate -- Importa dal contenitore con certificato -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Si desidera considerare attendibile %1 con l'impronta digitale di %2 da %3? {1 ?} {2 ?} -- -- -- Not this time -- Non questa volta -- -- -- Never -- Mai -- -- -- Always -- Sempre -- -- -- Just this time -- Solo questa volta -- -- -- Signed share container are not supported - import prevented -- Contenitori di condivisione firmati non supportati - importazione non consentita -- -- -- File is not readable -- Il file non è leggibile -- -- -- Invalid sharing container -- Contenitore di condivisione non valido -- -- -- Untrusted import prevented -- Importazione non attendibile impedita -- -- -- Successful signed import -- Importazione firmata correttamente -- -- -- Unsigned share container are not supported - import prevented -- Contenitori di condivisione non firmati non sono supportati - importazione non consentita -- -- -- Successful unsigned import -- Importazione non firmata riuscita -- -- -- File does not exist -- Il file non esiste -- -- -- Unknown share container type -- Tipo di contenitore di condivisione sconosciuto -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importazione da %1 non riuscita (%2) -- -- -- Import from %1 successful (%2) -- Importazione da %1 riuscita (%2) -- -- -- Imported from %1 -- Importato da %1 -- -- -- Export to %1 failed (%2) -- Esportazione in %1 non riuscita (%2) -- -- -- Export to %1 successful (%2) -- Esportazione in %1 riuscita (%2) -- -- -- Export to %1 -- Esporta in %1 -- -- -- Multiple import source path to %1 in %2 -- Percorso multiplo di sorgente di importazione a %1 in %2 -- -- -- Conflicting export target path %1 in %2 -- Percorso di destinazione esportazione in conflitto %1 in %2 -- -- -- -- TotpDialog -- -- Timed Password -- Password temporizzata -- -- -- 000000 -- 000000 -- -- -- Copy -- Copia -- -- -- Expires in <b>%n</b> second(s) -- Scadenza tra <b>%n</b> secondiScadenza tra <b>%n</b> secondo(i) -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copia -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTA: queste impostazioni TOTP sono personalizzate e potrebbero non funzionare con altri autenticatori. -- -- -- There was an error creating the QR code. -- Si è verificato un errore durante la creazione del codice QR. -- -- -- Closing in %1 seconds. -- Chiusura tra %1 secondi. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Imposta TOTP -- -- -- Default RFC 6238 token settings -- Impostazioni predefinite per il token RFC 6238 -- -- -- Steam token settings -- Impostazioni del token di Steam -- -- -- Use custom settings -- Usa le impostazioni personalizzate -- -- -- Custom Settings -- Impostazioni personalizzate -- -- -- Time step: -- Passo temporale: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Dimensioni codice: -- -- -- Secret Key: -- Chiave segreta: -- -- -- Secret key must be in Base32 format -- La chiave segreta deve essere in formato Base32 -- -- -- Secret key field -- Campo chiave segreta -- -- -- Algorithm: -- Algoritmo: -- -- -- Time step field -- Campo del passo temporale -- -- -- digits -- cifre -- -- -- Invalid TOTP Secret -- Segreto TOTP non valido -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- È stata immessa una chiave segreta non valida. La chiave deve essere in formato Base32. --Esempio: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Conferma rimozione impostazioni TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Sei sicuro di voler eliminare le impostazioni TOTP per questa voce? -- -- -- -- URLEdit -- -- Invalid URL -- URL non corretto -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Verifica della disponibilità di aggiornamenti -- -- -- Checking for updates... -- Verifica disponibilità aggiornamenti in corso... -- -- -- Close -- Chiudi -- -- -- Update Error! -- Errore di aggiornamento! -- -- -- An error occurred in retrieving update information. -- Si è verificato un errore durante il recupero delle informazioni sull'aggiornamento. -- -- -- Please try again later. -- Riprova più tardi. -- -- -- Software Update -- Aggiornamento software -- -- -- A new version of KeePassXC is available! -- È disponibile una nuova versione di KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 è ora disponibile — hai %2. -- -- -- Download it at keepassxc.org -- Scaricalo da keepassxc.org -- -- -- You're up-to-date! -- Sei aggiornato! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 è attualmente la versione più recente disponibile -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Inizia ad archiviare le tue password in modo sicuro in un database di KeePassXC -- -- -- Create new database -- Crea un nuovo database -- -- -- Open existing database -- Apri un database esistente -- -- -- Import from KeePass 1 -- Importa da KeePass 1 -- -- -- Import from CSV -- Importa da CSV -- -- -- Recent databases -- Database recenti -- -- -- Welcome to KeePassXC %1 -- Benvenuto in KeePassXC %1 -- -- -- Import from 1Password -- Importa da 1Password -- -- -- Open a recent database -- Aprire un database recente -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Configurazione Slot - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- Press -- Premi -- -- -- Passive -- Passiva -- -- -- %1 Invalid slot specified - %2 -- %1 Slot specificato non valido - %2 -- -- -- The YubiKey interface has not been initialized. -- L'interfaccia YubiKey non è stata inizializzata. -- -- -- Hardware key is currently in use. -- La chiave hardware è già in uso. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Non è stato possibile trovare una chiave hardware nello slot numero %1. Per favore collegarne una per procedere. -- -- -- Hardware key timed out waiting for user interaction. -- Sessione della chiave hardware scaduta aspettando un interazione da parte dell'utente. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Si è verificato un errore USB durante l'accesso alla chiave hardware: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Impossibile completare challenge-response, l'errore specifico è: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Aggiorna -- -- -- YubiKey Challenge-Response -- YubiKey Risposta di verifica -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Se si possiede un <a href="https://www.yubico.com/">YubiKey</a>, è possibile utilizzarlo per una maggiore sicurezza.</p><p>YubiKey richiede che uno dei suoi slot sia programmato come <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Risposta di verifica HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Aggiornare i token hardware -- -- -- Hardware key slot selection -- Selezione degli slot dei tasti hardware -- -- -- Could not find any hardware keys! -- Impossibile trovare le chiavi hardware! -- -- -- Selected hardware key slot does not support challenge-response! -- La porta USB selezionata non supporta il protocollo challenge-response! -- -- -- Detecting hardware keys… -- Rilevamento delle chiavi hardware in corso... -- -- -- No hardware keys detected -- Nessuna chiave hardware rilevata -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ja.ts keepassxc-2.6.4-patched/share/translations/keepassx_ja.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ja.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ja.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7894 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- KeePassXC について -- -- -- About -- このソフトウェアについて -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- バグ報告先: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC は GNU General Public License (GPL) version 2 または version 3 のいずれかを選択可能な条件のもとで配布されています。 -- -- -- Contributors -- 貢献者 -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">GitHub で貢献を確認する</a> -- -- -- Debug Info -- デバッグ情報 -- -- -- Include the following information whenever you report a bug: -- バグを報告する際に下記の情報を含めてください: -- -- -- Copy to clipboard -- クリップボードにコピー -- -- -- Project Maintainers: -- プロジェクトメンテナ: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC チームはオリジナルの KeePassX を作成した debfx に心から感謝します。 -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Pageant の代わりに OpenSSH for Windows を使用する -- -- -- Enable SSH Agent integration -- SSH エージェント統合を有効にする -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK 値 -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK のオーバーライド -- -- -- (empty) -- (空) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- SSH エージェントソケットが利用できません。SSH_AUTH_SOCK 環境変数の存在を確認するか、オーバーライドしてください。 -- -- -- SSH Agent connection is working! -- SSH エージェント接続が動作中です! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- アプリケーション設定 -- -- -- General -- 全般 -- -- -- Security -- セキュリティ -- -- -- Access error for config file %1 -- 設定ファイル %1 へのアクセスエラー -- -- -- Icon only -- アイコンのみ -- -- -- Text only -- テキストのみ -- -- -- Text beside icon -- アイコンの横にテキスト -- -- -- Text under icon -- アイコンの下にテキスト -- -- -- Follow style -- スタイルに準拠 -- -- -- Reset Settings? -- 設定をリセットしますか? -- -- -- Are you sure you want to reset all general and security settings to default? -- 全ての全般設定とセキュリティ設定を初期設定に戻してもよろしいですか? -- -- -- Monochrome (light) -- モノクロ (ライト) -- -- -- Monochrome (dark) -- モノクロ (ダーク) -- -- -- Colorful -- カラフル -- -- -- You must restart the application to set the new language. Would you like to restart now? -- 新しい言語を設定するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- 基本設定 -- -- -- Startup -- 起動 -- -- -- Start only a single instance of KeePassXC -- KeePassXC のインスタンスを一つだけ起動する -- -- -- Minimize window at application startup -- ウィンドウを最小化して起動する -- -- -- File Management -- ファイル管理 -- -- -- Backup database file before saving -- 保存する前にデータベースファイルをバックアップする -- -- -- Automatically save after every change -- 変更するたびに自動的に保存する -- -- -- Automatically reload the database when modified externally -- 外部で編集された際に自動でデータベースを再読み込みする -- -- -- Entry Management -- エントリー管理 -- -- -- Use group icon on entry creation -- エントリー作成時にグループのアイコンを使用する -- -- -- Minimize instead of app exit -- 終了せずに最小化する -- -- -- Show a system tray icon -- システムトレイアイコンを表示する -- -- -- Hide window to system tray when minimized -- 最小化した際にシステムトレイへ格納する -- -- -- Auto-Type -- 自動入力 -- -- -- Use entry title to match windows for global Auto-Type -- グローバル自動入力のウィンドウ照合にエントリーのタイトルを使用する -- -- -- Use entry URL to match windows for global Auto-Type -- グローバル自動入力のウィンドウ照合にエントリーの URL を使用する -- -- -- Always ask before performing Auto-Type -- 自動入力を行う前に毎回確認する -- -- -- ms -- Milliseconds -- ミリ秒 -- -- -- Movable toolbar -- ツールバーを移動可能にする -- -- -- Remember previously used databases -- 以前使用したデータベースを記憶する -- -- -- Load previously open databases on startup -- 起動時に前回開いたデータベースを読み込む -- -- -- Remember database key files and security dongles -- データベースキーファイルとセキュリティドングルを記憶する -- -- -- Check for updates at application startup once per week -- 起動時に更新を確認する (週一回) -- -- -- Include beta releases when checking for updates -- ベータ版も確認対象にする -- -- -- Language: -- 言語: -- -- -- (restart program to activate) -- (再起動が必要) -- -- -- Minimize window after unlocking database -- データベースのロック解除後にウィンドウを最小化する -- -- -- Minimize when opening a URL -- URL を開いたら最小化する -- -- -- Hide window when copying to clipboard -- クリップボードにコピーしたらウィンドウを非表示にする -- -- -- Minimize -- 最小化 -- -- -- Drop to background -- 背後に移動 -- -- -- Favicon download timeout: -- ファビコンダウンロードのタイムアウト: -- -- -- Website icon download timeout in seconds -- ウェブサイトアイコンダウンロードのタイムアウトまでの秒 -- -- -- sec -- Seconds -- -- -- -- Toolbar button style -- ツールバーのボタンのスタイル -- -- -- Language selection -- 言語の選択 -- -- -- Global auto-type shortcut -- グローバル自動入力のショートカット -- -- -- Auto-type character typing delay milliseconds -- 自動入力の文字入力時の遅延 (ミリ秒) -- -- -- Auto-type start delay milliseconds -- 自動入力開始までの遅延 (ミリ秒) -- -- -- Automatically launch KeePassXC at system startup -- システム起動時に KeePassXC を自動的に起動する -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- データベースファイルを安全に保存する (Dropbox などで問題が発生した場合は無効にしてください) -- -- -- User Interface -- ユーザーインターフェース -- -- -- Toolbar button style: -- ツールバーのボタンのスタイル: -- -- -- Use monospaced font for notes -- メモに等幅フォントを使用する -- -- -- Tray icon type: -- トレイアイコンの種類: -- -- -- Reset settings to default… -- 設定を初期値に戻す… -- -- -- Auto-Type typing delay: -- 自動入力の入力時の遅延: -- -- -- Global Auto-Type shortcut: -- グローバル自動入力のショートカット: -- -- -- Auto-Type start delay: -- 自動入力開始までの遅延: -- -- -- Automatically save when locking database -- データベースロック時に自動的に保存する -- -- -- Automatically save non-data changes when locking database -- データベースロック時にデータ以外の変更を自動的に保存する -- -- -- Tray icon type -- トレイアイコンの種類 -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- タイムアウト -- -- -- Clear clipboard after -- 指定時間経過後にクリップボードを消去する -- -- -- sec -- Seconds -- -- -- -- Lock databases after inactivity of -- 未操作の時間が続いたらデータベースをロックする -- -- -- min -- -- -- -- Forget TouchID after inactivity of -- 未操作の時間が続いたら TouchID を消去する -- -- -- Convenience -- 利便性 -- -- -- Lock databases when session is locked or lid is closed -- セッションをロックしたりラップトップを閉じた際にデータベースをロックする -- -- -- Forget TouchID when session is locked or lid is closed -- セッションをロックしたりラップトップを閉じた際に TouchID を消去する -- -- -- Lock databases after minimizing the window -- ウィンドウを最小化したらデータベースをロックする -- -- -- Re-lock previously locked database after performing Auto-Type -- 自動入力実行後に以前ロックしていたデータベースを再ロックする -- -- -- Hide passwords in the entry preview panel -- エントリーのプレビューパネルのパスワードを非表示にする -- -- -- Hide entry notes by default -- エントリーのメモを既定で非表示にする -- -- -- Privacy -- プライバシー -- -- -- Use DuckDuckGo service to download website icons -- ウェブサイトアイコンのダウンロードに DuckDuckGo のサービスを使用する -- -- -- Clipboard clear seconds -- クリップボード消去までの時間 (秒) -- -- -- Touch ID inactivity reset -- 未操作時の Touch ID リセット -- -- -- Database lock timeout seconds -- データベースロックまでのタイムアウト (秒) -- -- -- min -- Minutes -- -- -- -- Clear search query after -- 指定時間経過後に検索クエリを消去する -- -- -- Require password repeat when it is visible -- パスワードが表示されていても再入力を要求する -- -- -- Hide passwords when editing them -- 編集時にパスワードを非表示にする -- -- -- Use placeholder for empty password fields -- 空のパスワードフィールドでプレースホルダーを使用する -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- ウィンドウタイトルに一致するエントリーが見つかりませんでした: -- -- -- Auto-Type - KeePassXC -- 自動入力 - KeePassXC -- -- -- Auto-Type -- 自動入力 -- -- -- The Syntax of your Auto-Type statement is incorrect! -- 自動入力ステートメントの構文が正しくありません。 -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- この自動入力コマンドは非常に長い遅延を含みます。本当に続行しますか? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- この自動入力コマンドは非常に遅いキー押下を含みます。本当に続行しますか? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- この自動入力コマンドは何度も繰り返される引数が含まれています。本当に続行しますか? -- -- -- Permission Required -- 許可が必要です -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC がエントリーの自動入力を行うにはアクセス許可が必要です。既に許可してある場合は KeePassXC を再起動する必要があります。 -- -- -- -- AutoTypeAssociationsModel -- -- Window -- ウィンドウ -- -- -- Sequence -- シーケンス -- -- -- Default sequence -- 既定のシーケンス -- -- -- -- AutoTypeMatchModel -- -- Group -- グループ -- -- -- Title -- タイトル -- -- -- Username -- ユーザー名 -- -- -- Sequence -- シーケンス -- -- -- -- AutoTypeMatchView -- -- Copy &username -- ユーザー名をコピー(&U) -- -- -- Copy &password -- パスワードをコピー(&P) -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- 許可が必要です -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC のグローバル自動入力にはアクセス許可と画面記録許可が必要です。画面記録はウィンドウタイトルを使用してエントリーを見つけるために必要です。既に許可してある場合は KeePassXC を再起動する必要があります。 -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- 自動入力 - KeePassXC -- -- -- Select entry to Auto-Type: -- 自動入力するエントリーを選択してください: -- -- -- Search... -- 検索... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - ブラウザーのアクセス要求 -- -- -- %1 is requesting access to the following entries: -- %1 が次のエントリーへのアクセスを要求しています: -- -- -- Remember access to checked entries -- チェックしたエントリーへのアクセスを記憶する -- -- -- Remember -- 記憶する -- -- -- Allow access to entries -- エントリーへのアクセスを許可する -- -- -- Allow Selected -- 選択したものを許可 -- -- -- Deny All -- 全て拒否 -- -- -- Disable for this site -- このサイトを無効化 -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser エントリーを保存 -- -- -- Ok -- OK -- -- -- Cancel -- キャンセル -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- 複数のデータベースを開いています。 --資格情報を保存する適切なデータベースを選択してください。 -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: 新しいキーのアソシエーション要求 -- -- -- Save and allow access -- アクセスを許可して保存 -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: 既存のキーを上書きしますか? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- 共有暗号化キー "%1" は既に存在します。 --上書きしますか? -- -- -- KeePassXC: Update Entry -- KeePassXC: エントリーを更新 -- -- -- Do you want to update the information in %1 - %2? -- %1 - %2 の情報を更新しますか? -- -- -- Abort -- 中止 -- -- -- Converting attributes to custom data… -- 属性をカスタムデータに変換しています… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: KeePassHTTP の属性を変換しました -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- %1 個のエントリーから属性を正常に変換しました。 --%2 個のキーをカスタムデータに移行しました。 -- -- -- Successfully moved %n keys to custom data. -- %n 個のキーを正常にカスタムデータに移行しました。 -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。 -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: レガシーなブラウザー統合の設定を検出しました -- -- -- KeePassXC: Create a new group -- KeePassXC: 新しいグループを作成 -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- 新しいグループ "%1" の作成要求を受け取りました。 --このグループを作成しますか? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- KeePassXC-Browser の設定をデータベース設定に移行する必要があります。 --これはブラウザーとの接続を維持するために必要です。 --既存の設定を移行しますか? -- -- -- Don't show this warning again -- 今後この警告を表示しない -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- 次のデータベースのアソシエーション要求を受け取りました: --%1 -- --次のような、接続用の一意な名前または ID を付けてください: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- ダイアログ -- -- -- This is required for accessing your databases with KeePassXC-Browser -- このオプションは KeePassXC-Browser からデータベースにアクセスするために必要です -- -- -- Enable browser integration -- ブラウザー統合を有効にする -- -- -- General -- 全般 -- -- -- Browsers installed as snaps are currently not supported. -- Snap 形式のブラウザーは現在サポートしていません。 -- -- -- Enable integration for these browsers: -- これらのブラウザーの統合を有効にする: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- 資格情報を要求された際に通知を表示する -- -- -- Request to unlock the database if it is locked -- データベースがロックされている場合はロックの解除を要求する -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- 同じスキーム (http://, https://, ...) を持つエントリーのみが返されます。 -- -- -- Match URL scheme (e.g., https://...) -- URL スキーム (例えば https://...) の一致 -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- ドメイン全体に一致する全てのエントリーの代わりに、特定の URL に最も一致するエントリーのみが返されます。 -- -- -- Return only best-matching credentials -- 最も一致する資格情報のみを返す -- -- -- Returns expired credentials. String [expired] is added to the title. -- 期限切れの資格情報を返します。タイトルに [期限切れ] という文字列が追加されます。 -- -- -- Allow returning expired credentials -- 期限切れの資格情報を返すことを許可する -- -- -- All databases connected to the extension will return matching credentials. -- 拡張機能に接続された全てのデータベースが一致する資格情報を返します。 -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- 開いている全てのデータベースから一致する資格情報を検索する -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- 一致する資格情報をタイトルで並べ替える -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- 一致する資格情報をユーザー名で並べ替える -- -- -- Advanced -- 詳細設定 -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- 資格情報にアクセスする前に確認しない -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- 資格情報を更新する前に確認しない -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- HTTP ベーシック認証でアクセス許可を確認しない -- -- -- Automatically creating or updating string fields is not supported. -- 文字列フィールドの自動作成や自動更新はサポートしていません。 -- -- -- Return advanced string fields which start with "KPH: " -- "KPH: " から始まる拡張された文字列フィールドを返す -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- レガシーな KeePassHTTP の設定を移行するためのポップアップを表示しないようにします。 -- -- -- Do not prompt for KeePassHTTP settings migration. -- KeePassHTTP の設定移行を確認しない -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- 起動時に、KeePassXC または keepassxc-proxy のバイナリーパスを自動的に Native messaging スクリプトに更新します。 -- -- -- Update native messaging manifest files at startup -- 起動時に Native messaging のマニフェストファイルを更新する -- -- -- Use a custom proxy location if you installed a proxy manually. -- 手動でプロキシをインストールした場合は、カスタムプロキシを使用してください。 -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- カスタムプロキシを使用する: -- -- -- Custom proxy location field -- カスタムプロキシの場所フィールド -- -- -- Browser for custom proxy file -- カスタムプロキシファイルブラウザー -- -- -- Browse... -- Button for opening file dialog -- 参照... -- -- -- Use a custom browser configuration location: -- ブラウザーの設定の場所を変更する: -- -- -- Browser type: -- ブラウザーの種類: -- -- -- Toolbar button style -- ツールバーのボタンのスタイル -- -- -- Config Location: -- 設定の場所: -- -- -- Custom browser location field -- ブラウザーの場所指定フィールド -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- 指定するブラウザーパスを参照する -- -- -- Custom extension ID: -- カスタム拡張機能 ID: -- -- -- Custom extension ID -- カスタム拡張機能 ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Snap によってサンドボックス化されているため、<br />ブラウザー統合を有効にするにはスクリプトを実行する必要があります。<br />スクリプトは次の場所から入手できます: %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- ブラウザー統合の動作には KeePassXC-Browser が必要です。<br />KeePassXC-Browser は %1 用、%2 用、%3 用の 3 種類あります。%4 -- -- -- Please see special instructions for browser extension use below -- ブラウザー拡張機能を使用するには以下の手順を参照してください -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>エラー:</b> カスタムプロキシの場所が見つかりませんでした。<br/>ブラウザー統合はプロキシアプリケーションなしでは動作しません。 -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>警告:</b> 以下は危険なオプションです。 -- -- -- Executable Files -- 実行ファイル -- -- -- All Files -- 全てのファイル -- -- -- Select custom proxy location -- カスタムプロキシを選択 -- -- -- Select native messaging host folder location -- Native messaging のホストフォルダーの場所を選択 -- -- -- -- CloneDialog -- -- Clone Options -- 複製のオプション -- -- -- Append ' - Clone' to title -- タイトルに ' - 複製' を追加 -- -- -- Replace username and password with references -- ユーザー名とパスワードを参照で置き換える -- -- -- Copy history -- 履歴をコピー -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV フィールドをインポート -- -- -- filename -- ファイル名 -- -- -- size, rows, columns -- サイズ、行、列 -- -- -- Encoding -- エンコーディング -- -- -- Codec -- コーデック -- -- -- Text is qualified by -- テキスト修飾子 -- -- -- Fields are separated by -- 区切り文字 -- -- -- Comments start with -- コメントの行頭 -- -- -- Consider '\' an escape character -- エスケープ文字 '\' を考慮する -- -- -- Preview -- プレビュー -- -- -- Imported from CSV file -- CSV ファイルからインポート -- -- -- Original data: -- 元データ: -- -- -- Error -- エラー -- -- -- Error(s) detected in CSV file! -- CSV ファイル内でエラーを検出しました! -- -- -- [%n more message(s) skipped] -- [%n 個のメッセージをスキップしました] -- -- -- CSV import: writer has errors: --%1 -- CSV のインポート: ライターにエラーがあります: --%1 -- -- -- Text qualification -- テキスト修飾 -- -- -- Field separation -- フィールドの区切り -- -- -- Number of header lines to discard -- 破棄するヘッダー行数 -- -- -- CSV import preview -- CSV インポートプレビュー -- -- -- Column Association -- 列の関連付け -- -- -- Last Modified -- 最終更新日時 -- -- -- Password -- パスワード -- -- -- Created -- 作成日時 -- -- -- Notes -- メモ -- -- -- Title -- タイトル -- -- -- Group -- グループ -- -- -- URL -- URL -- -- -- Username -- ユーザー名 -- -- -- Header lines skipped -- スキップするヘッダー行数 -- -- -- First line has field names -- 先頭行がフィールド名を含む -- -- -- Not Present -- 存在しません -- -- -- Column %1 -- 列 %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- アイコン -- -- -- -- CsvParserModel -- -- %n column(s) -- %n 列 -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1、%2、%3 -- -- -- %n byte(s) -- %n バイト -- -- -- %n row(s) -- %n 行 -- -- -- -- Database -- -- File %1 does not exist. -- ファイル %1 は存在しません。 -- -- -- Unable to open file %1. -- ファイル %1 を開けません。 -- -- -- Error while reading the database: %1 -- データベースの読み込み中にエラーが発生しました: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- 読み取り専用モードでファイルを開いているため書き込むことはできません。 -- -- -- Key not transformed. This is a bug, please report it to the developers! -- キーは変換されません。これはバグなので、開発者への報告をお願いします。 -- -- -- %1 --Backup database located at %2 -- %1 --データベースのバックアップ場所: %2 -- -- -- Could not save, database does not point to a valid file. -- 対象のデータベースファイルは正常ではないため、保存できませんでした。 -- -- -- Could not save, database file is read-only. -- 対象のデータベースファイルは読み取り専用なため、保存できませんでした。 -- -- -- Database file has unmerged changes. -- データベースファイルにマージしていない変更があります。 -- -- -- Recycle Bin -- ゴミ箱 -- -- -- Passwords -- Root group name -- パスワード -- -- -- Database save is already in progress. -- 既にデータベースの保存作業中です。 -- -- -- Could not save, database has not been initialized! -- データベースが初期化されていないため、保存できませんでした。 -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- データベースのロックを解除 - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- キーファイル: -- -- -- Refresh -- 再読み込み -- -- -- Don't show this warning again -- 今後この警告を表示しない -- -- -- All files -- 全てのファイル -- -- -- Key files -- キーファイル -- -- -- Select key file -- キーファイルを選択 -- -- -- Failed to open key file: %1 -- キーファイルを開くのに失敗しました: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC データベースのロック解除 -- -- -- Enter Password: -- パスワードを入力してください: -- -- -- Password field -- パスワードフィールド -- -- -- Hardware key slot selection -- ハードウェアキースロットの選択 -- -- -- Browse for key file -- キーファイルを探す -- -- -- Browse... -- 参照... -- -- -- Refresh hardware tokens -- ハードウェアトークンを更新 -- -- -- Hardware Key: -- ハードウェアキー: -- -- -- Hardware key help -- ハードウェアキーのヘルプ -- -- -- TouchID for Quick Unlock -- TouchID で素早くロックを解除する -- -- -- Unlock failed and no password given -- パスワードが未指定なためロックの解除に失敗しました -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- パスワードを入力しなかったため、データベースのロック解除に失敗しました。再試行しますか? -- --このエラーを防ぐには、"データベースの設定" を開き、"セキュリティ" でパスワードをリセットする必要があります。 -- -- -- Retry with empty password -- 空のパスワードで再試行 -- -- -- Enter Additional Credentials (if any): -- 追加の資格情報を入力してください (ある場合のみ): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>スロットを HMAC-SHA1 用に設定した <strong>YubiKey</strong> や <strong>OnlyKey</strong> をハードウェアセキュリティキーとして使用できます。</p> --<p>詳細についてはクリックしてください...</p> -- -- -- Key file help -- キーファイルのヘルプ -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- データベースファイルをキーファイルとして使用することはできません -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- データベースファイルをキーファイルとして使用することはできません。 --キーファイルがない場合は、フィールドを空のままにしてください。 -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>パスワードだけでなくシークレットファイルを使用することで、データベースのセキュリティを向上させることができます。シークレットファイルはデータベースのセキュリティ設定で生成できます。</p><p>*.kdbx データベースファイルはシークレットファイル<strong>ではありません</strong>!<br>キーファイルがない場合、このフィールドは空のままにしてください。</p><p>詳細についてはクリックしてください...</p> -- -- -- Key file to unlock the database -- データベースのロックを解除するキーファイル -- -- -- Please touch the button on your YubiKey! -- YubiKey のボタンにタッチしてください -- -- -- Detecting hardware keys… -- ハードウェアキーを検出中… -- -- -- No hardware keys detected -- 検出したハードウェアキーはありません -- -- -- Select hardware key… -- ハードウェアキーを選択… -- -- -- Old key file format -- 古いキーファイル形式 -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- KeePassXC は将来的に、現在使用中の古いキーファイル形式を<br>サポートしなくなる可能性があります。<br><br><strong>データベース -> データベースのセキュリティ</strong>メニューから<br>新しいキーファイルを生成することを検討してください。<br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- パスワード -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- 詳細設定 -- -- -- General -- 全般 -- -- -- Security -- セキュリティ -- -- -- Encryption Settings -- 暗号化の設定 -- -- -- Browser Integration -- ブラウザー統合 -- -- -- Database Credentials -- データベースの資格情報 -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser 設定 -- -- -- Stored keys -- 保存されたキー -- -- -- Remove -- 削除 -- -- -- Delete the selected key? -- 選択したキーを削除しますか? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- 本当に選択したキーを削除しますか? --ブラウザープラグインに接続できなくなります。 -- -- -- Key -- キー -- -- -- Value -- -- -- -- Enable Browser Integration to access these settings. -- これらの設定にアクセスするには、ブラウザー統合を有効にしてください。 -- -- -- Disconnect all browsers -- 全てのブラウザーの接続を断つ -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- 本当に全てのブラウザーを切断しますか? --ブラウザープラグインに接続できなくなります。 -- -- -- KeePassXC: No keys found -- KeePassXC: キーが見つかりません -- -- -- No shared encryption keys found in KeePassXC settings. -- KeePassXC の設定内に共有暗号化キーは見つかりませんでした。 -- -- -- KeePassXC: Removed keys from database -- KeePassXC: データベースからキーを削除しました -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- KeePassXC の設定から %n 個の暗号化キーを正常に削除しました。 -- -- -- Forget all site-specific settings on entries -- エントリーのサイト固有の設定を全て消去する -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- 本当にエントリー毎のサイト固有の設定を全て消去しますか? --エントリーへのアクセス権が取り消されます。 -- -- -- Removing stored permissions… -- 保存されているアクセス許可を削除しています… -- -- -- Abort -- 中止 -- -- -- KeePassXC: Removed permissions -- KeePassXC: アクセス許可を削除しました -- -- -- Successfully removed permissions from %n entry(s). -- %n 個のエントリーからアクセス許可を正常に削除しました。 -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: アクセス許可があるエントリーは見つかりません -- -- -- The active database does not contain an entry with permissions. -- アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP の属性をカスタムデータに移行する -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- 本当にレガシーなブラウザー統合のデータを最新の標準に移行しますか? --これはブラウザープラグインとの互換性維持に必要です。 -- -- -- Stored browser keys -- 保存されたブラウザーキー -- -- -- Remove selected key -- 選択したキーを削除 -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移行する -- -- -- Refresh database root group ID -- データベースのルートグループ ID を更新する -- -- -- Created -- 作成日時 -- -- -- Refresh database ID -- データベース ID を更新 -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- 本当にデータベース ID を更新しますか? --これはデータベースが別のデータベースのコピーで、ブラウザー拡張機能が接続できない場合にのみ必要です。 -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- 保護を追加... -- -- -- No password set -- パスワードを設定していません -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- [警告] パスワードを設定していません。パスワードなしでのデータベースの使用は極力避けるべきです。 -- --パスワードなしで続行してもよろしいですか? -- -- -- Continue without password -- パスワードなしで続行 -- -- -- No encryption key added -- 追加した暗号化キーはありません -- -- -- You must add at least one encryption key to secure your database! -- データベースをセキュアにするには、暗号化キーを少なくとも一つ追加する必要があります。 -- -- -- Unknown error -- 不明なエラーです -- -- -- Failed to change database credentials -- データベースの資格情報の変更に失敗しました -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- 暗号化アルゴリズム: -- -- -- AES: 256 Bit (default) -- AES: 256 ビット (既定) -- -- -- Twofish: 256 Bit -- Twofish: 256 ビット -- -- -- Key Derivation Function: -- 鍵導出関数: -- -- -- Transform rounds: -- 変換回数: -- -- -- Memory Usage: -- メモリ使用量: -- -- -- Parallelism: -- 並列処理: -- -- -- Decryption Time: -- 復号化時間: -- -- -- ?? s -- ?? 秒 -- -- -- Change -- 変更 -- -- -- Higher values offer more protection, but opening the database will take longer. -- 値が大きいほど保護力が増しますが、データベースを開くのに時間がかかるようになります。 -- -- -- Database format: -- データベースの形式: -- -- -- This is only important if you need to use your database with other programs. -- これはデータベースを他のプログラムで使用する必要がある場合のみ重要になります。 -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (推奨) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- 変更なし -- -- -- Number of rounds too high -- Key transformation rounds -- ラウンド数が大きすぎます -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Argon2 のキー変換ラウンド数に非常に大きな値を使用しています。 -- --この値を維持すると、データベースを開くのに数時間または数日 (あるいはそれ以上) かかる可能性があります。 -- -- -- Understood, keep number -- 理解した上で値を維持する -- -- -- Cancel -- キャンセル -- -- -- Number of rounds too low -- Key transformation rounds -- ラウンド数が小さすぎます -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- AES-KDF のキー変換ラウンド数に非常に小さな値を使用しています。 -- --この値を維持すると、データベースが簡単にクラックされる可能性があります。 -- -- -- KDF unchanged -- KDF は変更しません -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- 新しい KDF のパラメーターでのキー変換に失敗しました。KDF を変更しません。 -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- スレッド -- -- -- Change existing decryption time -- 既存の復号化時間を変更 -- -- -- Decryption time in seconds -- 復号化時間 (秒) -- -- -- Database format -- データベースの形式 -- -- -- Encryption algorithm -- 暗号化アルゴリズム -- -- -- Key derivation function -- 鍵導出関数 -- -- -- Transform rounds -- 変換回数 -- -- -- Memory usage -- メモリ使用量 -- -- -- Parallelism -- 並列処理 -- -- -- ?? ms -- ?? ミリ秒 -- -- -- ? s -- ? 秒 -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- 公開するエントリー -- -- -- Don't expose this database -- このデータベースを公開しない -- -- -- Expose entries under this group: -- このグループ下のエントリーを公開する: -- -- -- Enable Secret Service to access these settings. -- これらの設定にアクセスするには、シークレットサービスを有効にしてください。 -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- データベースのメタデータ -- -- -- Database name: -- データベース名: -- -- -- Database description: -- データベースの概要: -- -- -- Default username: -- 既定のユーザー名: -- -- -- History Settings -- 履歴の設定 -- -- -- Max. history items: -- 最大履歴数: -- -- -- Max. history size: -- 最大履歴データサイズ: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- ゴミ箱を使用する -- -- -- Additional Database Settings -- 追加のデータベース設定 -- -- -- Database name field -- データベース名フィールド -- -- -- Database description field -- データベースの概要フィールド -- -- -- Default username field -- 既定のユーザー名フィールド -- -- -- Maximum number of history items per entry -- エントリー毎の履歴アイテムの最大数 -- -- -- Maximum size of history per entry -- エントリー毎の履歴の最大サイズ -- -- -- Delete Recycle Bin -- ゴミ箱を削除 -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- ゴミ箱とその内容を削除しますか? --これは元に戻すことができません。 -- -- -- (old) -- (旧) -- -- -- Enable compression (recommended) -- 圧縮を有効にする (推奨) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- 共有 -- -- -- Breadcrumb -- 階層リンク -- -- -- Type -- 種類 -- -- -- Path -- パス -- -- -- Last Signer -- 最終署名者 -- -- -- Certificates -- 証明書 -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- データベース名: -- -- -- Description: -- 概要: -- -- -- Database name field -- データベース名フィールド -- -- -- Database description field -- データベースの概要フィールド -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 データベース -- -- -- All files -- 全てのファイル -- -- -- Open database -- データベースを開く -- -- -- CSV file -- CSV ファイル -- -- -- Merge database -- データベースをマージする -- -- -- Open KeePass 1 database -- KeePass 1 データベースを開く -- -- -- KeePass 1 database -- KeePass 1 データベース -- -- -- Export database to CSV file -- データベースを CSV ファイルへエクスポート -- -- -- Writing the CSV file failed. -- CSV ファイルへの書き込みに失敗しました。 -- -- -- Database creation error -- データベース作成エラー -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- 作成したデータベースはキーや KDF がないため保存しません。 --これは確実にバグなので、開発者への報告をお願いします。 -- -- -- Select CSV file -- CSV ファイルを選択 -- -- -- New Database -- 新しいデータベース -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [新しいデータベース] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [ロック] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [読み取り専用] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- %1 は存在しないかアクセス可能ではないため、開くのに失敗しました。 -- -- -- Export database to HTML file -- データベースを HTML ファイルへエクスポート -- -- -- HTML file -- HTML ファイル -- -- -- Writing the HTML file failed. -- HTML ファイルへの書き込みに失敗しました。 -- -- -- Export Confirmation -- エクスポートの確認 -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- データベースを暗号化せずにファイルへエクスポートしようとしています。これはパスワードや機密情報が脆弱な状態に置かれることを意味します。続行してもよろしいですか? -- -- -- Open OPVault -- OPVault を開く -- -- -- -- DatabaseWidget -- -- Searching... -- 検索中… -- -- -- Do you really want to delete the entry "%1" for good? -- 本当にエントリー "%1" を永久に削除しますか? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- 本当にエントリー "%1" をゴミ箱に移動しますか? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- 本当に %n 個のエントリーをゴミ箱に移動しますか? -- -- -- Execute command? -- コマンドを実行しますか? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- 本当に次のコマンドを実行しますか?<br><br>%1<br> -- -- -- Remember my choice -- 選択を記憶する -- -- -- Do you really want to delete the group "%1" for good? -- 本当にグループ "%1" を永久に削除しますか? -- -- -- No current database. -- 現在のデータベースはありません。 -- -- -- No source database, nothing to do. -- ソースデータベースはありません。行うべきことはありません。 -- -- -- Search Results (%1) -- 検索結果 (%1) -- -- -- No Results -- 見つかりません -- -- -- File has changed -- ファイルが変更されました -- -- -- The database file has changed. Do you want to load the changes? -- データベースファイルが変更されました。変更を読み込みますか? -- -- -- Merge Request -- マージリクエスト -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- データベースファイルが変更され、保存されていません。 --変更をマージしますか? -- -- -- Empty recycle bin? -- ゴミ箱を空にしますか? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- ゴミ箱にある全項目を永久に削除してもよろしいですか? -- -- -- Do you really want to delete %n entry(s) for good? -- 本当に %n 個のエントリーを永久に削除しますか? -- -- -- Delete entry(s)? -- エントリーを削除しますか? -- -- -- Move entry(s) to recycle bin? -- エントリーをゴミ箱に移動しますか? -- -- -- Lock Database? -- データベースをロックしますか? -- -- -- You are editing an entry. Discard changes and lock anyway? -- エントリーを編集中です。変更を破棄してロックしてもよろしいですか? -- -- -- "%1" was modified. --Save changes? -- "%1" が更新されました。 --変更を保存しますか? -- -- -- Database was modified. --Save changes? -- データベースが更新されました。 --変更を保存しますか? -- -- -- Save changes? -- 変更を保存しますか? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- 自動再読み込みしようとした際に、新しいデータベースファイルを開くことができませんでした。 --エラー: %1 -- -- -- Disable safe saves? -- 安全な保存を無効にしますか? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC はデータベースの多段階保存に失敗しました。これは恐らく、保存するファイルをロックしているファイル同期サービスが原因だと思われます。 --安全な保存を無効にして再試行しますか? -- -- -- Passwords -- パスワード -- -- -- Save database as -- ファイル名をつけてデータベースを保存 -- -- -- KeePass 2 Database -- KeePass 2 データベース -- -- -- Replace references to entry? -- エントリーの参照を置き換えますか? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- エントリー "%1" には %2 個の参照があります。上書き、スキップ、削除のどれを行いますか? -- -- -- Delete group -- グループを削除 -- -- -- Move group to recycle bin? -- グループをゴミ箱に移動しますか? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- 本当にグループ "%1" をゴミ箱に移動しますか? -- -- -- Successfully merged the database files. -- データベースファイルを正常にマージしました。 -- -- -- Database was not modified by merge operation. -- データベースはマージ処理で更新されませんでした。 -- -- -- Shared group... -- 共有グループ... -- -- -- Writing the database failed: %1 -- データベースへの書き込みに失敗しました: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- このデータベースは読み取り専用モードで開いています。自動保存は無効です。 -- -- -- Save database backup -- データベースのバックアップを保存 -- -- -- Could not find database file: %1 -- データベースファイルが見つかりませんでした: %1 -- -- -- -- EditEntryWidget -- -- Entry -- エントリー -- -- -- Advanced -- 詳細設定 -- -- -- Icon -- アイコン -- -- -- Auto-Type -- 自動入力 -- -- -- Properties -- プロパティ -- -- -- History -- 履歴 -- -- -- SSH Agent -- SSH エージェント -- -- -- n/a -- N/A -- -- -- (encrypted) -- (暗号化) -- -- -- Select private key -- 秘密鍵を選択 -- -- -- Entry history -- エントリーの履歴 -- -- -- Add entry -- エントリーを追加 -- -- -- Edit entry -- エントリーを編集 -- -- -- New attribute -- 新しい属性 -- -- -- Are you sure you want to remove this attribute? -- この属性を削除してもよろしいですか? -- -- -- Tomorrow -- 明日 -- -- -- %n week(s) -- %n 週間 -- -- -- %n month(s) -- %n ヶ月 -- -- -- Entry updated successfully. -- エントリーを正常に更新しました。 -- -- -- New attribute %1 -- 新しい属性 %1 -- -- -- %n year(s) -- %n 年 -- -- -- Confirm Removal -- 削除の確認 -- -- -- Browser Integration -- ブラウザー統合 -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- この URL を削除してもよろしいですか? -- -- -- Reveal -- 開示 -- -- -- Hide -- 隠す -- -- -- Unsaved Changes -- 未保存の変更 -- -- -- Would you like to save changes to this entry? -- このエントリーの変更を保存しますか? -- -- -- [PROTECTED] Press Reveal to view or edit -- [保護] 表示または編集する場合は開示をクリックしてください -- -- -- Invalid Entry -- 不正なエントリー -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- 外部でのマージ処理によって、このエントリーは無効化されました。 --申し訳ありませんが、行った変更は全て失われました。 -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- 追加属性 -- -- -- Add -- 追加 -- -- -- Remove -- 削除 -- -- -- Edit Name -- 名前を編集 -- -- -- Protect -- 保護 -- -- -- Reveal -- 開示 -- -- -- Attachments -- 添付ファイル -- -- -- Foreground Color: -- 文字色: -- -- -- Background Color: -- 背景色: -- -- -- Attribute selection -- 属性の選択 -- -- -- Attribute value -- 属性値 -- -- -- Add a new attribute -- 新しい属性を追加 -- -- -- Remove selected attribute -- 選択した属性を削除 -- -- -- Edit attribute name -- 属性名を編集 -- -- -- Toggle attribute protection -- 属性の保護を切り替え -- -- -- Show a protected attribute -- 保護された属性を表示 -- -- -- Foreground color selection -- 前景色の選択 -- -- -- Background color selection -- 背景色の選択 -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>チェックを入れると、エントリーが品質要件を満たさなかった (例えばパスワードのエントロピーが低かったり何度も使い回されていた) としても、安全性の確認や HIBP のレポートにエントリーを表示しません。パスワードの決定権が自身にない (例えば必要なパスワードが四桁の PIN である) 場合などに、レポートのノイズになるのを防ぐことができます。</p></body></html> -- -- -- Exclude from database reports -- データベースのレポートから除外する -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- このエントリーの自動入力を有効にする -- -- -- Window Associations -- ウィンドウの関連付け -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- ウィンドウタイトル: -- -- -- Use a specific sequence for this association: -- この関連付けに特定のシーケンスを使用する: -- -- -- Custom Auto-Type sequence -- カスタム自動入力シーケンス -- -- -- Open Auto-Type help webpage -- 自動入力のヘルプウェブページを開く -- -- -- Existing window associations -- 既存のウィンドウ関連付け -- -- -- Add new window association -- 新しいウィンドウ関連付けを追加 -- -- -- Remove selected window association -- 選択したウィンドウ関連付けを削除 -- -- -- You can use an asterisk (*) to match everything -- アスタリスク (*) を使用すると全てに一致させることができます -- -- -- Set the window association title -- ウィンドウ関連付けのタイトルを設定 -- -- -- You can use an asterisk to match everything -- アスタリスクを使用すると全てに一致させることができます -- -- -- Custom Auto-Type sequence for this window -- このウィンドウのカスタム自動入力シーケンス -- -- -- Inherit default Auto-Type sequence from the group -- 自動入力シーケンスをグループから引き継ぐ -- -- -- Use custom Auto-Type sequence: -- カスタム自動入力シーケンスを使用する: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- これらの設定はエントリーの挙動 (ブラウザー拡張機能) に影響します。 -- -- -- General -- 全般 -- -- -- Skip Auto-Submit for this entry -- このエントリーの自動送信をスキップする -- -- -- Hide this entry from the browser extension -- このエントリーをブラウザー拡張機能から隠す -- -- -- Additional URL's -- 追加の URL -- -- -- Add -- 追加 -- -- -- Remove -- 削除 -- -- -- Edit -- 編集 -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- この設定をブラウザーの HTTP 認証ダイアログにのみ送信します。有効になっている場合、このエントリーは通常のログインフォームには表示されません。 -- -- -- Use this entry only with HTTP Basic Auth -- このエントリーは HTTP ベーシック認証でのみ使用する -- -- -- -- EditEntryWidgetHistory -- -- Show -- 表示 -- -- -- Restore -- 復元 -- -- -- Delete -- 削除 -- -- -- Delete all -- 全て削除 -- -- -- Entry history selection -- エントリーの履歴の選択 -- -- -- Show entry at selected history state -- 選択した履歴の時点でのエントリーの状態を表示 -- -- -- Restore entry to selected history state -- エントリーを選択した履歴の状態に復元 -- -- -- Delete selected history state -- 選択した履歴を削除 -- -- -- Delete all history -- 全ての履歴を削除 -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- パスワード: -- -- -- Title: -- タイトル: -- -- -- Presets -- プリセット -- -- -- Toggle the checkbox to reveal the notes section. -- チェックボックスにチェックを入れるとメモが表示されます。 -- -- -- Username: -- ユーザー名: -- -- -- Url field -- URL フィールド -- -- -- Download favicon for URL -- URL 用のファビコンをダウンロード -- -- -- Password field -- パスワードフィールド -- -- -- Toggle notes visible -- メモの表示を切り替え -- -- -- Expiration field -- 有効期限フィールド -- -- -- Expiration Presets -- 有効期限のプリセット -- -- -- Expiration presets -- 有効期限のプリセット -- -- -- Notes field -- メモフィールド -- -- -- Title field -- タイトルフィールド -- -- -- Username field -- ユーザー名フィールド -- -- -- Toggle expiration -- 有効期限を切り替え -- -- -- Notes: -- メモ: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- 期限: -- -- -- Edit Entry -- エントリーを編集 -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- フォーム -- -- -- Remove key from agent after -- 次の時間が過ぎたらエージェントからキーを削除 -- -- -- seconds -- -- -- -- Fingerprint -- フィンガープリント -- -- -- Remove key from agent when database is closed/locked -- データベースを閉じたりロックした際にエージェントからキーを削除する -- -- -- Public key -- 公開鍵 -- -- -- Add key to agent when database is opened/unlocked -- データベースを開いたりロックを解除した際にエージェントにキーを追加する -- -- -- Comment -- コメント -- -- -- Decrypt -- 復号 -- -- -- n/a -- N/A -- -- -- Copy to clipboard -- クリップボードにコピー -- -- -- Private key -- 秘密鍵 -- -- -- External file -- 外部ファイル -- -- -- Browse... -- Button for opening file dialog -- 参照... -- -- -- Attachment -- 添付ファイル -- -- -- Add to agent -- エージェントに追加 -- -- -- Remove from agent -- エージェントから削除 -- -- -- Require user confirmation when this key is used -- このキーを使用する際に必ずユーザーに確認する -- -- -- Remove key from agent after specified seconds -- 指定秒経過後にエージェントからキーを削除 -- -- -- Browser for key file -- キーファイルブラウザー -- -- -- External key file -- 外部キーファイル -- -- -- Select attachment file -- 添付ファイルを選択 -- -- -- -- EditGroupWidget -- -- Group -- グループ -- -- -- Icon -- アイコン -- -- -- Properties -- プロパティ -- -- -- Add group -- グループを追加 -- -- -- Edit group -- グループを編集 -- -- -- Enable -- 有効 -- -- -- Disable -- 無効 -- -- -- Inherit from parent group (%1) -- 親グループ "(%1)" から引き継ぐ -- -- -- Entry has unsaved changes -- エントリーに未保存の変更があります -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- 種類: -- -- -- Path: -- パス: -- -- -- Password: -- パスワード: -- -- -- Inactive -- 非アクティブ -- -- -- KeeShare unsigned container -- KeeShare 未署名コンテナ -- -- -- KeeShare signed container -- KeeShare 署名コンテナ -- -- -- Select import source -- インポートソースを選択 -- -- -- Select export target -- エクスポート対象を選択 -- -- -- Select import/export file -- インポート/エクスポートファイルを選択 -- -- -- Clear -- 消去 -- -- -- Import -- インポート -- -- -- Export -- エクスポート -- -- -- Synchronize -- 同期 -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- このバージョンの KeePassXC はこのコンテナ形式の共有をサポートしていません。 --サポートしている拡張機能: %1. -- -- -- %1 is already being exported by this database. -- %1 は既にこのデータベースでエクスポート済みです。 -- -- -- %1 is already being imported by this database. -- %1 は既にこのデータベースでインポート済みです。 -- -- -- %1 is being imported and exported by different groups in this database. -- %1 は既にこのデータベースの他のグループでインポート/エクスポート済みです。 -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare は現在無効です。設定でインポートとエクスポートを有効にできます。 -- -- -- Database export is currently disabled by application settings. -- 現在データベースのエクスポートは設定で無効になっています。 -- -- -- Database import is currently disabled by application settings. -- 現在データベースのインポートは設定で無効になっています。 -- -- -- Sharing mode field -- 共有モードフィールド -- -- -- Path to share file field -- 共有ファイルパスフィールド -- -- -- Password field -- パスワードフィールド -- -- -- Clear fields -- フィールドを消去 -- -- -- Browse for share file -- 共有ファイルを探す -- -- -- Browse... -- 参照... -- -- -- -- EditGroupWidgetMain -- -- Name field -- 名前フィールド -- -- -- Notes field -- メモフィールド -- -- -- Toggle expiration -- 有効期限を切り替え -- -- -- Auto-Type toggle for this and sub groups -- これとサブグループの自動入力を切り替え -- -- -- Expiration field -- 有効期限フィールド -- -- -- Search toggle for this and sub groups -- これとサブグループの検索を切り替え -- -- -- Default auto-type sequence field -- 既定の自動入力シーケンスフィールド -- -- -- Expires: -- 期限: -- -- -- Use default Auto-Type sequence of parent group -- 親グループの既定の自動入力シーケンスを使用する -- -- -- Auto-Type: -- 自動入力: -- -- -- Search: -- 検索: -- -- -- Notes: -- メモ: -- -- -- Name: -- 名前: -- -- -- Set default Auto-Type sequence -- 既定の自動入力シーケンスを設定する -- -- -- Edit Group -- グループを編集 -- -- -- -- EditWidgetIcons -- -- Add custom icon -- カスタムアイコンを追加 -- -- -- Delete custom icon -- カスタムアイコンを削除 -- -- -- Download favicon -- ファビコンをダウンロード -- -- -- Unable to fetch favicon. -- ファビコンを取得できません。 -- -- -- Images -- 画像 -- -- -- All files -- 全てのファイル -- -- -- Confirm Delete -- 削除の確認 -- -- -- Select Image(s) -- 画像を選択 -- -- -- Successfully loaded %1 of %n icon(s) -- %1 / %n 個のアイコンが正常に読み込まれました -- -- -- No icons were loaded -- アイコンが読み込まれていません -- -- -- %n icon(s) already exist in the database -- %n 個のアイコンがデータベース内に既に存在します -- -- -- The following icon(s) failed: -- 次のアイコンの読み込みに失敗しました: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- このアイコンは %n 個のエントリーで使用されており、既定のアイコンに置き換えられます。本当に削除してもよろしいですか? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- ツール -> 設定 -> セキュリティで DuckDuckGo ウェブサイトアイコンサービスを有効にできます -- -- -- Download favicon for URL -- URL 用のファビコンをダウンロード -- -- -- Apply selected icon to subgroups and entries -- 選択したアイコンをサブグループとエントリーに適用 -- -- -- Also apply to child groups -- 子グループにも適用 -- -- -- Also apply to child entries -- 子エントリーにも適用 -- -- -- Also apply to all children -- 全ての子にも適用 -- -- -- Existing icon selected. -- 選択したアイコンは既存です。 -- -- -- Use default icon -- 既定のアイコンから選択 -- -- -- Use custom icon -- カスタムアイコンから選択 -- -- -- Apply icon to... -- アイコンを適用... -- -- -- Apply to this group only -- このグループにのみ適用 -- -- -- -- EditWidgetProperties -- -- Created: -- 作成日時: -- -- -- Modified: -- 編集日時: -- -- -- Accessed: -- アクセス日時: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- プラグインデータ -- -- -- Remove -- 削除 -- -- -- Delete plugin data? -- プラグインデータを削除しますか? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- 本当に選択したプラグインデータを削除しますか? --プラグインの動作に影響を及ぼす可能性があります。 -- -- -- Key -- キー -- -- -- Value -- -- -- -- Datetime created -- 作成日時 -- -- -- Datetime modified -- 更新日時 -- -- -- Datetime accessed -- アクセス日時 -- -- -- Unique ID -- 固有 ID -- -- -- Plugin data -- プラグインデータ -- -- -- Remove selected plugin data -- 選択したプラグインデータを削除 -- -- -- -- Entry -- -- %1 - Clone -- %1 - 複製 -- -- -- -- EntryAttachmentsModel -- -- Name -- 名前 -- -- -- Size -- サイズ -- -- -- -- EntryAttachmentsWidget -- -- Form -- フォーム -- -- -- Add -- 追加 -- -- -- Remove -- 削除 -- -- -- Open -- 開く -- -- -- Save -- 保存 -- -- -- Select files -- ファイルを選択 -- -- -- Are you sure you want to remove %n attachment(s)? -- %n 個の添付ファイルを削除してもよろしいですか? -- -- -- Save attachments -- 添付ファイルを保存 -- -- -- Unable to create directory: --%1 -- ディレクトリを作成できません: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- 既存のファイル "%1" を上書きしてもよろしいですか? -- -- -- Confirm overwrite -- 上書きの確認 -- -- -- Unable to save attachments: --%1 -- 添付ファイルを保存できません: --%1 -- -- -- Unable to open attachment: --%1 -- 添付ファイルを開けません: --%1 -- -- -- Unable to open attachments: --%1 -- 添付ファイルを開けません: --%1 -- -- -- Confirm remove -- 削除の確認 -- -- -- Unable to open file(s): --%1 -- ファイルを開けません: --%1 -- -- -- Attachments -- 添付ファイル -- -- -- Add new attachment -- 新しい添付ファイルを追加 -- -- -- Remove selected attachment -- 選択した添付ファイルを削除 -- -- -- Open selected attachment -- 選択した添付ファイルを開く -- -- -- Save selected attachment to disk -- 選択した添付ファイルをディスクに保存 -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 は大きいファイル (%2 MB) です。 --データベースが非常に大きくなりパフォーマンスが低下する可能性があります。 -- --このファイルを追加しますか? -- -- -- Confirm Attachment -- 添付の確認 -- -- -- -- EntryAttributesModel -- -- Name -- 名前 -- -- -- -- EntryHistoryModel -- -- Last modified -- 最終更新日時 -- -- -- Title -- タイトル -- -- -- Username -- ユーザー名 -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- 参照: -- -- -- Group -- グループ -- -- -- Title -- タイトル -- -- -- Username -- ユーザー名 -- -- -- URL -- URL -- -- -- Never -- なし -- -- -- Password -- パスワード -- -- -- Notes -- メモ -- -- -- Expires -- 期限 -- -- -- Created -- 作成日時 -- -- -- Modified -- 編集日時 -- -- -- Accessed -- アクセス日時 -- -- -- Attachments -- 添付ファイル -- -- -- Size -- サイズ -- -- -- Group name -- グループ名 -- -- -- Entry title -- エントリーのタイトル -- -- -- Entry notes -- エントリーのメモ -- -- -- Entry expires at -- エントリーの期限 -- -- -- Creation date -- 作成日時 -- -- -- Last modification date -- 最終更新日時 -- -- -- Last access date -- 最終アクセス日時 -- -- -- Attached files -- 添付ファイル -- -- -- Entry size -- エントリーのサイズ -- -- -- Has attachments -- 添付ファイルの有無 -- -- -- Has TOTP one-time password -- TOTP ワンタイムパスワードの有無 -- -- -- -- EntryPreviewWidget -- -- Close -- 閉じる -- -- -- General -- 全般 -- -- -- Username -- ユーザー名 -- -- -- Password -- パスワード -- -- -- Expiration -- 有効期限 -- -- -- URL -- URL -- -- -- Attributes -- 属性 -- -- -- Attachments -- 添付ファイル -- -- -- Notes -- メモ -- -- -- Autotype -- 自動入力 -- -- -- Window -- ウィンドウ -- -- -- Sequence -- シーケンス -- -- -- Searching -- 検索 -- -- -- Search -- 検索 -- -- -- Clear -- 消去 -- -- -- Never -- なし -- -- -- [PROTECTED] -- [保護] -- -- -- Enabled -- 有効 -- -- -- Disabled -- 無効 -- -- -- Share -- 共有 -- -- -- Display current TOTP value -- 現在の TOTP 値を表示 -- -- -- Advanced -- 詳細設定 -- -- -- Default Sequence -- 既定のシーケンス -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- 無効な URL -- -- -- -- EntryView -- -- Fit to window -- ウィンドウに合わせる -- -- -- Fit to contents -- 内容に合わせる -- -- -- Reset to defaults -- 規定値に戻す -- -- -- Has attachments -- Entry attachment icon toggle -- 添付ファイルの有無 -- -- -- Has TOTP -- Entry TOTP icon toggle -- TOTP の有無 -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- データベース "%2" のエントリー "%1" が %3 に使用されました -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- %1 で DBus サービスの登録に失敗しました。<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n 個のエントリーが %1 に使用されました -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- ファイル名 -- -- -- Group -- グループ -- -- -- Manage -- 管理 -- -- -- Unlock to show -- ロックを解除して表示 -- -- -- None -- なし -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- アプリケーション -- -- -- Manage -- 管理 -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo シークレットサービス:</b> %1 -- -- -- Unknown -- Unknown PID -- 不明 -- -- -- Unknown -- Unknown executable path -- 不明 -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, 実行ファイル: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- 別のシークレットサービスが実行中です (%1)。<br/>シークレットサービス統合を再有効化する前に実行中のものを停止/削除してください。 -- -- -- -- Group -- -- [empty] -- group has no children -- [空] -- -- -- -- HibpDownloader -- -- Online password validation failed -- オンラインパスワード検証に失敗しました -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- ファビコンをダウンロード -- -- -- Cancel -- キャンセル -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- アイコンのダウンロードに問題がありましたか? --設定のセキュリティセクションで DuckDuckGo ウェブサイトアイコンサービスを有効にできます。 -- -- -- Close -- 閉じる -- -- -- URL -- URL -- -- -- Status -- ステータス -- -- -- Please wait, processing entry list... -- エントリー一覧を処理中です、しばらくお待ちください... -- -- -- Downloading... -- ダウンロード中... -- -- -- Ok -- OK -- -- -- Already Exists -- 既に存在します -- -- -- Download Failed -- ダウンロードに失敗しました -- -- -- Downloading favicons (%1/%2)... -- ファビコンをダウンロード中 (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- 閉じる(&C) -- -- -- Close message -- メッセージを閉じる -- -- -- -- Kdbx3Reader -- -- missing database headers -- データベースのヘッダーがありません -- -- -- Header doesn't match hash -- ヘッダーがハッシュと一致しません -- -- -- Invalid header id size -- ヘッダー ID サイズが不正です -- -- -- Invalid header field length -- ヘッダーフィールド長が不正です -- -- -- Invalid header data length -- ヘッダーデータ長が不正です -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 不正な資格情報です。再試行してください。 --これが再発した場合は、データベースファイルが破損している可能性があります。 -- -- -- Unable to calculate database key -- データベースキーを計算できません -- -- -- Unable to issue challenge-response: %1 -- チャレンジレスポンスを発行できません: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- チャレンジレスポンスを発行できません: %1 -- -- -- Unable to calculate database key -- データベースキーを計算できません -- -- -- -- Kdbx4Reader -- -- missing database headers -- データベースのヘッダーがありません -- -- -- Invalid header checksum size -- ヘッダーのチェックサムサイズが不正です -- -- -- Header SHA256 mismatch -- ヘッダー SHA256 が一致しません -- -- -- Unknown cipher -- 不明な暗号です -- -- -- Invalid header id size -- ヘッダー ID サイズが不正です -- -- -- Invalid header field length -- ヘッダーフィールド長が不正です -- -- -- Invalid header data length -- ヘッダーデータ長が不正です -- -- -- Failed to open buffer for KDF parameters in header -- ヘッダーの KDF パラメーターのバッファーを開くのに失敗しました -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- サポートしていない鍵導出関数 (KDF) または不正なパラメーターです -- -- -- Legacy header fields found in KDBX4 file. -- KDBX4 ファイル内にレガシーなヘッダーフィールドが見つかりました。 -- -- -- Invalid inner header id size -- 内部ヘッダー ID サイズが不正です -- -- -- Invalid inner header field length -- 内部ヘッダーフィールド長が不正です -- -- -- Invalid inner header binary size -- 内部ヘッダーバイナリーサイズが不正です -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- サポートしていないバージョンの KeePass VariantMap です。 -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- VariantMap のエントリー名の長さが不正です -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- VariantMap のエントリー名データが不正です -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap のエントリー値の長さが不正です -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- VariantMap のエントリー値データが不正です -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap の Bool エントリー値の長さが不正です -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap の Int32 エントリー値の長さが不正です -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap の UInt32 エントリー値の長さが不正です -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap の Int64 エントリー値の長さが不正です -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- VariantMap の UInt64 エントリー値の長さが不正です -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- VariantMap のエントリータイプが不正です -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- VariantMap のフィールドタイプのサイズが不正です -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 不正な資格情報です。再試行してください。 --これが再発した場合は、データベースファイルが破損している可能性があります。 -- -- -- (HMAC mismatch) -- (HMAC が一致しません) -- -- -- Unable to calculate database key: %1 -- データベースキーを計算できません: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- 対称暗号アルゴリズムが不正です。 -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- 対称暗号の初期化ベクトルのサイズが不正です。 -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- KDF パラメーター VariantMap のシリアル化に失敗しました -- -- -- Unable to calculate database key: %1 -- データベースキーを計算できません: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- サポートしていない暗号です -- -- -- Invalid compression flags length -- 圧縮フラグの長さが不正です -- -- -- Unsupported compression algorithm -- サポートしていない圧縮アルゴリズムです -- -- -- Invalid master seed size -- Master Seed のサイズが不正です -- -- -- Invalid transform seed size -- Transform Seed のサイズが不正です -- -- -- Invalid transform rounds size -- 変換回数のサイズが不正です -- -- -- Invalid start bytes size -- StreamStartBytes のサイズが不正です -- -- -- Invalid random stream id size -- Random Stream ID のサイズが不正です -- -- -- Invalid inner random stream cipher -- 内部 Random Stream 暗号が不正です -- -- -- Not a KeePass database. -- KeePass データベースではありません。 -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- 選択したファイルは古い KeePass 1 のデータベース (.kdb) です。 -- --データベース > 'KeePass 1 データベースをインポート...' をクリックすることでインポートできます。 --これは一方向の移行操作であり、インポートしたデータベースは古いバージョンである KeePassX 0.4 では開くことはできません。 -- -- -- Unsupported KeePass 2 database version. -- サポートしていないバージョンの KeePass 2 データベースです。 -- -- -- Invalid cipher uuid length: %1 (length=%2) -- 暗号の UUID の長さが不正です: %1 (長さ = %2) -- -- -- Unable to parse UUID: %1 -- UUID を解析できません: %1 -- -- -- Failed to read database file. -- データベースファイルの読み取りに失敗しました。 -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML の構文解析エラー: %1 -- -- -- No root group -- ルートグループがありません -- -- -- Missing icon uuid or data -- アイコンの UUID またはデータがありません -- -- -- Missing custom data key or value -- カスタムデータの Key または Value がありません -- -- -- Multiple group elements -- グループ要素が複数あります -- -- -- Null group uuid -- グループの UUID が NULL です -- -- -- Invalid group icon number -- グループのアイコン番号が不正です -- -- -- Invalid EnableAutoType value -- EnableAutoType の値が不正です -- -- -- Invalid EnableSearching value -- EnableSearching の値が不正です -- -- -- No group uuid found -- グループの UUID が見つかりません -- -- -- Null DeleteObject uuid -- DeleteObject の UUID が NULL です -- -- -- Missing DeletedObject uuid or time -- DeletedObject の UUID または DeletionTime がありません -- -- -- Null entry uuid -- エントリーの UUID が NULL です -- -- -- Invalid entry icon number -- エントリーのアイコン番号が不正です -- -- -- History element in history entry -- 履歴エントリー内に履歴要素が存在します -- -- -- No entry uuid found -- エントリーの UUID が見つかりません -- -- -- History element with different uuid -- 履歴要素の UUID が異なります -- -- -- Duplicate custom attribute found -- 重複したカスタム属性が見つかりました -- -- -- Entry string key or value missing -- エントリーの文字列 Key または Value がありません -- -- -- Entry binary key or value missing -- エントリーのバイナリー Key または Value がありません -- -- -- Auto-type association window or sequence missing -- 自動入力の関連付けウィンドウまたは自動入力シーケンスがありません -- -- -- Invalid bool value -- 真偽値が不正です -- -- -- Invalid date time value -- 日時が不正です -- -- -- Invalid color value -- 色が不正です -- -- -- Invalid color rgb part -- 色の RGB が不正です -- -- -- Invalid number value -- 数値が不正です -- -- -- Invalid uuid value -- UUID の値が不正です -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- バイナリーを展開できません -- -- -- XML error: --%1 --Line %2, column %3 -- XML エラー: --%1 --%2 行、%3 列 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- KeeAgent の設定ファイル構造が不正です。 -- -- -- Private key is an attachment but no attachments provided. -- 秘密鍵は添付ファイルですが、添付ファイルは提供されていません。 -- -- -- Private key is empty -- 秘密鍵が空です -- -- -- File too large to be a private key -- ファイルが大きすぎるため秘密鍵にできません -- -- -- Failed to open private key -- 秘密鍵を開くのに失敗しました -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- データベースを開けません。 -- -- -- Import KeePass1 Database -- KeePass1 データベースをインポート -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- キーファイルを読み取れません。 -- -- -- Not a KeePass database. -- KeePass データベースではありません。 -- -- -- Unsupported encryption algorithm. -- サポートしていない暗号化アルゴリズムです。 -- -- -- Unsupported KeePass database version. -- サポートしていないバージョンの KeePass データベースです。 -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Encryption IV (暗号化初期化ベクトル) を読み取れません -- -- -- Invalid number of groups -- グループの数が不正です -- -- -- Invalid number of entries -- エントリーの数が不正です -- -- -- Invalid content hash size -- コンテンツハッシュサイズが不正です -- -- -- Invalid transform seed size -- Transform Seed のサイズが不正です -- -- -- Invalid number of transform rounds -- 変換回数が不正です -- -- -- Unable to construct group tree -- グループツリーを構成できません -- -- -- Root -- ルート -- -- -- Key transformation failed -- キー変換に失敗しました -- -- -- Invalid group field type number -- グループのフィールドタイプ数が不正です -- -- -- Invalid group field size -- グループのフィールドサイズが不正です -- -- -- Read group field data doesn't match size -- 読み込んだグループのフィールドデータはサイズが一致しません -- -- -- Incorrect group id field size -- グループの ID フィールドサイズが正しくありません -- -- -- Incorrect group creation time field size -- グループの作成日時フィールドサイズが正しくありません -- -- -- Incorrect group modification time field size -- グループの編集日時フィールドサイズが正しくありません -- -- -- Incorrect group access time field size -- グループのアクセス日時フィールドサイズが正しくありません -- -- -- Incorrect group expiry time field size -- グループの有効期限フィールドサイズが正しくありません -- -- -- Incorrect group icon field size -- グループのアイコンフィールドサイズが正しくありません -- -- -- Incorrect group level field size -- グループのレベルフィールドサイズが正しくありません -- -- -- Invalid group field type -- グループのフィールドタイプが不正です -- -- -- Missing group id or level -- グループの ID またはレベルがありません -- -- -- Missing entry field type number -- エントリーのフィールドタイプ番号がありません -- -- -- Invalid entry field size -- エントリーのフィールドサイズが不正です -- -- -- Read entry field data doesn't match size -- 読み込んだエントリーのフィールドデータはサイズが一致しません -- -- -- Invalid entry uuid field size -- エントリーの UUID フィールドサイズが不正です -- -- -- Invalid entry group id field size -- エントリーのグループ ID フィールドサイズが不正です -- -- -- Invalid entry icon field size -- エントリーのアイコンフィールドサイズが不正です -- -- -- Invalid entry creation time field size -- エントリーの作成日時フィールドサイズが不正です -- -- -- Invalid entry modification time field size -- エントリーの編集日時フィールドサイズが不正です -- -- -- Invalid entry expiry time field size -- エントリーの期限日時フィールドサイズが不正です -- -- -- Invalid entry field type -- エントリーのフィールドタイプが不正です -- -- -- unable to seek to content position -- 内容の位置にシークできません -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 不正な資格情報です。再試行してください。 --これが再発した場合は、データベースファイルが破損している可能性があります。 -- -- -- Unable to calculate database key -- データベースキーを計算できません -- -- -- -- KeeShare -- -- Invalid sharing reference -- 共有の参照が不正です -- -- -- Inactive share %1 -- 共有 %1 は非アクティブです -- -- -- Imported from %1 -- %1 からインポートしました -- -- -- Exported to %1 -- %1 にエクスポートしました -- -- -- Synchronized with %1 -- %1 と同期しました -- -- -- Import is disabled in settings -- インポートは設定で無効になっています -- -- -- Export is disabled in settings -- エクスポートは設定で無効になっています -- -- -- Inactive share -- 非アクティブな共有 -- -- -- Imported from -- インポート元 -- -- -- Exported to -- エクスポート先 -- -- -- Synchronized with -- 同期 -- -- -- -- KeyComponentWidget -- -- Key Component -- キーコンポーネント -- -- -- Key Component Description -- キーコンポーネントの概要 -- -- -- Cancel -- キャンセル -- -- -- Key Component set, click to change or remove -- キーコンポーネントの設定 (変更か削除をクリックしてください) -- -- -- Add %1 -- Add a key component -- %1 を追加 -- -- -- Change %1 -- Change a key component -- %1 を変更 -- -- -- Remove %1 -- Remove a key component -- %1 を削除 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 の設定 (変更か削除をクリックしてください) -- -- -- -- KeyFileEditWidget -- -- Generate -- 生成 -- -- -- Key File -- キーファイル -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>セキュリティ対策でランダムバイトを含むキーファイルを追加できます。</p><p>キーファイルは誰にも知られず、絶対になくさないよう注意してください。</p> -- -- -- Error loading the key file '%1' --Message: %2 -- キーファイル '%1' の読み込み時にエラーが発生しました --メッセージ: %2 -- -- -- Key files -- キーファイル -- -- -- All files -- 全てのファイル -- -- -- Create Key File... -- キーファイルを作成... -- -- -- Error creating key file -- キーファイル作成時にエラーが発生しました -- -- -- Unable to create key file: %1 -- キーファイルを作成できません: %1 -- -- -- Select a key file -- キーファイルを選択 -- -- -- Key file selection -- キーファイルの選択 -- -- -- Browse for key file -- キーファイルを探す -- -- -- Browse... -- 参照... -- -- -- Generate a new key file -- 新しいキーファイルを生成 -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- 備考: 内容が変更される可能性があるファイルを使用すると、データベースのロックを解除できなくなる恐れがあります。 -- -- -- Invalid Key File -- 不正なキーファイルです -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- 現在のデータベース自身をキーファイルにすることはできません。他のファイルを選択するか、新しいキーファイルを生成してください。 -- -- -- Suspicious Key File -- 怪しいキーファイルです -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- 選択したキーファイルはパスワードデータベースファイルだと思われます。キーファイルは絶対に変更されることがない、静的なファイルである必要があります。変更される可能性があるファイルでは、データベースに永久にアクセスできなくなる恐れがあります。 --このファイルで続行してもよろしいですか? -- -- -- Old key file format -- 古いキーファイル形式 -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- KeePassXC は将来的に、選択した古い形式のキーファイルを<br>サポートしなくなる可能性があります。<br><br>代わりに新しいキーファイルを生成することを検討してください。 -- -- -- -- MainWindow -- -- &Database -- データベース(&D) -- -- -- &Help -- ヘルプ(&H) -- -- -- &Groups -- グループ(&G) -- -- -- &Tools -- ツール(&T) -- -- -- &Quit -- 終了(&Q) -- -- -- &About -- このソフトウェアについて(&A) -- -- -- Database settings -- データベースの設定 -- -- -- Copy username to clipboard -- ユーザー名をクリップボードにコピー -- -- -- Copy password to clipboard -- パスワードをクリップボードにコピー -- -- -- &Settings -- 設定(&S) -- -- -- &Title -- タイトル(&T) -- -- -- Copy title to clipboard -- タイトルをクリップボードにコピー -- -- -- &URL -- URL(&U) -- -- -- Copy URL to clipboard -- URL をクリップボードにコピー -- -- -- &Notes -- メモ(&N) -- -- -- Copy notes to clipboard -- メモをクリップボードにコピー -- -- -- Copy &TOTP -- TOTP をコピー(&T) -- -- -- E&mpty recycle bin -- ゴミ箱を空にする(&M) -- -- -- Clear history -- 履歴を消去 -- -- -- Access error for config file %1 -- 設定ファイル %1 へのアクセスエラー -- -- -- Settings -- 設定 -- -- -- Toggle window -- ウィンドウ切替 -- -- -- Quit KeePassXC -- KeePassXC を終了 -- -- -- Please touch the button on your YubiKey! -- YubiKey のボタンにタッチしてください -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- 警告: KeePassXC の開発版を使用しています。 --データベース破損の危険性が高いため、バックアップを維持します。 --このバージョンは正式版ではありません。 -- -- -- &Donate -- 寄付(&D) -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- 警告: オンスクリーンキーボード使用時に、Qt のバージョンが原因で KeePassXC がクラッシュする可能性があります。 --KeePassXC の配布ページから AppImage をダウンロードして使用することをお勧めします。 -- -- -- &Import -- インポート(&I) -- -- -- Create a new database -- 新しいデータベースを作成 -- -- -- Merge from another KDBX database -- 別の KDBX データベースからマージ -- -- -- Add a new entry -- 新しいエントリーを追加 -- -- -- View or edit entry -- エントリーを編集または表示 -- -- -- Add a new group -- 新しいグループを追加 -- -- -- Perform &Auto-Type -- 自動入力を実行(&A) -- -- -- Open &URL -- URL を開く(&U) -- -- -- Import a KeePass 1 database -- KeePass 1 データベースをインポート -- -- -- Import a CSV file -- CSV ファイルをインポート -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- 備考: KeePassXC のプレリリース版を使用しています。 --複数のバグや小さな問題点が残っている可能性があるため、このバージョンは実用的ではありません。 -- -- -- Check for updates on startup? -- 起動時に更新を確認しますか? -- -- -- Would you like KeePassXC to check for updates on startup? -- KeePassXC 起動時に更新を確認しますか? -- -- -- You can always check for updates manually from the application menu. -- 更新の確認はいつでもメニューから手動で実行できます。 -- -- -- &Export -- エクスポート(&E) -- -- -- Sort &A-Z -- 並べ替え (A-Z)(&A) -- -- -- Sort &Z-A -- 並べ替え (Z-A)(&Z) -- -- -- &Password Generator -- パスワード生成(&P) -- -- -- Import a 1Password Vault -- 1Password 保管庫をインポート -- -- -- &Getting Started -- スタートガイド(&G) -- -- -- &User Guide -- ユーザーガイド(&U) -- -- -- &Keyboard Shortcuts -- キーボードショートカット(&K) -- -- -- &Recent Databases -- 最近使用したデータベース(&R) -- -- -- &Entries -- エントリー(&E) -- -- -- Copy Att&ribute -- 属性をコピー(&R) -- -- -- TOTP -- TOTP -- -- -- View -- 表示 -- -- -- Theme -- テーマ -- -- -- &Check for Updates -- 更新を確認(&C) -- -- -- &Open Database… -- データベースを開く(&O)… -- -- -- &Save Database -- データベースを保存(&S) -- -- -- &Close Database -- データベースを閉じる(&C) -- -- -- &New Database… -- 新しいデータベース(&N)… -- -- -- &Merge From Database… -- データベースからマージ(&M)… -- -- -- &New Entry… -- 新しいエントリー(&N)… -- -- -- &Edit Entry… -- エントリーを編集(&E)… -- -- -- &Delete Entry… -- エントリーを削除(&D)… -- -- -- &New Group… -- 新しいグループ(&N)… -- -- -- &Edit Group… -- グループを編集(&E)… -- -- -- &Delete Group… -- グループを削除(&D)… -- -- -- Download All &Favicons… -- 全てのファビコンをダウンロード(&F)… -- -- -- Sa&ve Database As… -- データベースを別名で保存(&V)… -- -- -- Database &Security… -- データベースのセキュリティ(&S)… -- -- -- Database &Reports... -- データベースのレポート(&R)... -- -- -- Statistics, health check, etc. -- 統計や健全性の確認など。 -- -- -- &Database Settings… -- データベースの設定(&D)… -- -- -- &Clone Entry… -- エントリーを複製(&C)… -- -- -- Move u&p -- 上に移動(&P) -- -- -- Move entry one step up -- エントリーを一つ上に移動する -- -- -- Move do&wn -- 下に移動(&W) -- -- -- Move entry one step down -- エントリーを一つ下に移動する -- -- -- Copy &Username -- ユーザー名をコピー(&U) -- -- -- Copy &Password -- パスワードをコピー(&P) -- -- -- Download &Favicon -- ファビコンをダウンロード(&F) -- -- -- &Lock Databases -- データベースをロック(&L) -- -- -- &CSV File… -- CSV ファイル(&C)… -- -- -- &HTML File… -- HTML ファイル(&H)… -- -- -- KeePass 1 Database… -- KeePass 1 データベース… -- -- -- 1Password Vault… -- 1Password 保管庫… -- -- -- CSV File… -- CSV ファイル… -- -- -- Show TOTP -- TOTP を表示 -- -- -- Show QR Code -- QR コードを表示 -- -- -- Set up TOTP… -- TOTP の設定… -- -- -- Report a &Bug -- バグを報告(&B) -- -- -- Open Getting Started Guide -- スタートガイドを開く -- -- -- &Online Help -- オンラインヘルプ(&O) -- -- -- Go to online documentation -- オンラインドキュメントを開く -- -- -- Open User Guide -- ユーザーガイドを開く -- -- -- Save Database Backup... -- データベースのバックアップを保存... -- -- -- Add key to SSH Agent -- SSH エージェントに鍵を追加 -- -- -- Remove key from SSH Agent -- SSH エージェントから鍵を削除 -- -- -- Compact Mode -- コンパクトモード -- -- -- Automatic -- 自動 -- -- -- Light -- ライト -- -- -- Dark -- ダーク -- -- -- Classic (Platform-native) -- クラシック (プラットフォームネイティブ) -- -- -- Show Toolbar -- ツールバーを表示 -- -- -- Show Preview Panel -- プレビューパネルを表示 -- -- -- Don't show again for this version -- 今後このバージョンは表示しない -- -- -- Restart Application? -- アプリケーションを再起動しますか? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- 設定を適用するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? -- -- -- Perform Auto-Type Sequence -- 自動入力シーケンスを実行 -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- 常に最前面に表示 -- -- -- Hide Usernames -- ユーザー名を隠す -- -- -- Hide Passwords -- パスワードを隠す -- -- -- -- ManageDatabase -- -- Database settings -- データベースの設定 -- -- -- Edit database settings -- データベースの設定を編集 -- -- -- Unlock database -- データベースのロックを解除 -- -- -- Unlock database to show more information -- データベースのロックを解除してより詳しい情報を表示 -- -- -- Lock database -- データベースをロック -- -- -- -- ManageSession -- -- Disconnect -- 切断 -- -- -- Disconnect this application -- このアプリケーションを切断 -- -- -- -- Merger -- -- Creating missing %1 [%2] -- 存在しない %1 [%2] を作成 -- -- -- Relocating %1 [%2] -- %1 [%2] を移転 -- -- -- Overwriting %1 [%2] -- %1 [%2] を上書き -- -- -- older entry merged from database "%1" -- データベース "%1" からマージした古いエントリー -- -- -- Adding backup for older target %1 [%2] -- 古いターゲット %1 [%2] のバックアップを追加 -- -- -- Adding backup for older source %1 [%2] -- 古いソース %1 [%2] のバックアップを追加 -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- 古いターゲットのエントリーを新しいソース %1 [%2] のトップに再適用 -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- 古いソースのエントリーを新しいターゲット %1 [%2] のトップに再適用 -- -- -- Synchronizing from newer source %1 [%2] -- 新しいソース %1 [%2] から同期 -- -- -- Synchronizing from older source %1 [%2] -- 古いソース %1 [%2] から同期 -- -- -- Deleting child %1 [%2] -- 子要素 %1 [%2] を削除 -- -- -- Deleting orphan %1 [%2] -- 親要素がない %1 [%2] を削除 -- -- -- Changed deleted objects -- 削除したオブジェクトを変更 -- -- -- Adding missing icon %1 -- 存在しないアイコン %1 を追加 -- -- -- Removed custom data %1 [%2] -- カスタムデータ %1 [%2] を削除 -- -- -- Adding custom data %1 [%2] -- カスタムデータ %1 [%2] を追加 -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- 新しい KeePassXC データベースを作成... -- -- -- Root -- Root group -- ルート -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- ウィザードページ -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 -- -- -- Advanced Settings -- 詳細設定 -- -- -- Simple Settings -- 簡易設定 -- -- -- Encryption Settings -- 暗号化の設定 -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- データベースの資格情報 -- -- -- A set of credentials known only to you that protects your database. -- あなたしか知らない資格情報がデータベースを保護します。 -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- 暗号化の設定 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- データベースの全般情報 -- -- -- Please fill in the display name and an optional description for your new database: -- 新しいデータベースの名前と、必要な場合は説明文を入力してください: -- -- -- -- NixUtils -- -- Password Manager -- パスワードマネージャー -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- ヘッダーがない不正な OpData01 です -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- %1 / 16 しか取得できなかったため IV を読み取れません -- -- -- Unable to init cipher for opdata01: %1 -- opdata01 の暗号を init できません: %1 -- -- -- Unable to read all HMAC signature bytes -- HMAC 署名を読み取れません -- -- -- Malformed OpData01 due to a failed HMAC -- HMAC の失敗による不正な OpData01 です -- -- -- Unable to process clearText in place -- clearText をインプレース処理できません -- -- -- Expected %1 bytes of clear-text, found %2 -- 期待される clear-text のサイズは %1 バイトですが %2 バイトしかありませんでした -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- データベースの読み取りはインスタンスをプロデュースしませんでした --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- ディレクトリ .opvault が存在する必要があります -- -- -- Directory .opvault must be readable -- ディレクトリ .opvault は読み取り可能である必要があります -- -- -- Directory .opvault/default must exist -- ディレクトリ .opvault/default が存在する必要があります -- -- -- Directory .opvault/default must be readable -- ディレクトリ .opvault/default は読み取り可能である必要があります -- -- -- Unable to decode masterKey: %1 -- masterKey をデコードできません: %1 -- -- -- Unable to derive master key: %1 -- マスターキーを導出できません: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- OpenSSH の鍵ではない不正なキーファイルです -- -- -- PEM boundary mismatch -- PEM のバウンダリーが不一致です -- -- -- Base64 decoding failed -- Base64 のデコードに失敗しました -- -- -- Key file way too small. -- キーファイルが小さすぎます。 -- -- -- Key file magic header id invalid -- キーファイルのマジックヘッダー ID が不正です -- -- -- Found zero keys -- キーが 0 です -- -- -- Failed to read public key. -- 公開鍵の読み取りに失敗しました。 -- -- -- Corrupted key file, reading private key failed -- キーファイルが破損しているため秘密鍵の読み取りに失敗しました -- -- -- No private key payload to decrypt -- 復号する秘密鍵のデータがありません -- -- -- Trying to run KDF without cipher -- 暗号なしで KDF を実行しようとしています -- -- -- Passphrase is required to decrypt this key -- この鍵を復号するパスフレーズが必要です -- -- -- Key derivation failed, key file corrupted? -- 鍵の導出に失敗しました。キーファイルが壊れていませんか? -- -- -- Decryption failed, wrong passphrase? -- 復号化に失敗しました。パスフレーズが間違っていませんか? -- -- -- Unexpected EOF while reading public key -- 公開鍵の読み取り中に予期しない EOF がありました -- -- -- Unexpected EOF while reading private key -- 秘密鍵の読み取り中に予期しない EOF がありました -- -- -- Can't write public key as it is empty -- 公開鍵が空欄のままでは保存できません -- -- -- Unexpected EOF when writing public key -- 公開鍵の書き込み時に予期しない EOF がありました -- -- -- Can't write private key as it is empty -- 秘密鍵が空欄のままでは保存できません -- -- -- Unexpected EOF when writing private key -- 秘密鍵の書き込み時に予期しない EOF がありました -- -- -- Unsupported key type: %1 -- サポートしていない鍵の種類です: %1 -- -- -- Unknown cipher: %1 -- 不明な暗号です: %1 -- -- -- Cipher IV is too short for MD5 kdf -- 暗号初期化ベクトルが MD5 KDF に対して短すぎます -- -- -- Unknown KDF: %1 -- 不明な KDF です: %1 -- -- -- Unknown key type: %1 -- 不明な鍵の種類です: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- パスワードが一致しません -- -- -- Passwords match so far -- 今の所パスワードは一致しています -- -- -- Toggle Password (%1) -- パスワードを切り替え (%1) -- -- -- Generate Password (%1) -- パスワードを生成 (%1) -- -- -- Warning: Caps Lock enabled! -- 警告: Caps Lock が有効になっています! -- -- -- -- PasswordEditWidget -- -- Enter password: -- パスワードを入力してください: -- -- -- Confirm password: -- パスワードの確認: -- -- -- Password -- パスワード -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>パスワードはデータベースを保護するための基本的手段です。</p><p>長くて複雑なパスワードが良いパスワードとされています。KeePassXC に生成させることも可能です。</p> -- -- -- Passwords do not match. -- パスワードが一致しません。 -- -- -- Password field -- パスワードフィールド -- -- -- Repeat password field -- パスワード再入力フィールド -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- 強度 -- -- -- entropy -- エントロピー -- -- -- Password -- パスワード -- -- -- Character Types -- 文字種 -- -- -- Numbers -- 数字 -- -- -- Extended ASCII -- 拡張 ASCII -- -- -- Exclude look-alike characters -- よく似た文字を除外する -- -- -- Pick characters from every group -- 使用する全ての文字種から文字を選ぶ -- -- -- &Length: -- 長さ(&L): -- -- -- Passphrase -- パスフレーズ -- -- -- Wordlist: -- 単語リスト: -- -- -- Word Separator: -- 単語の区切り文字: -- -- -- Close -- 閉じる -- -- -- Entropy: %1 bit -- エントロピー: %1 ビット -- -- -- Password Quality: %1 -- パスワードの品質: %1 -- -- -- Poor -- Password quality -- 貧弱 -- -- -- Weak -- Password quality -- 弱い -- -- -- Good -- Password quality -- 良い -- -- -- Excellent -- Password quality -- すばらしい -- -- -- Switch to advanced mode -- 詳細モードに切り替え -- -- -- Advanced -- 詳細設定 -- -- -- Braces -- 括弧 -- -- -- Punctuation -- 句読点 -- -- -- Quotes -- 引用符 -- -- -- Logograms -- 表語文字 -- -- -- Character set to exclude from generated password -- 生成されたパスワードから文字集合を除外する -- -- -- Do not include: -- 次を除外: -- -- -- Add non-hex letters to "do not include" list -- "除外" リストに非16進数の文字列を追加 -- -- -- Hex -- 16進数 -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- 除外される文字: "0"、"1"、"l"、"I"、"O"、"|"、"﹒" -- -- -- Generated password -- 生成されたパスワード -- -- -- Upper-case letters -- 大文字 -- -- -- Lower-case letters -- 小文字 -- -- -- Special characters -- 特殊文字 -- -- -- Math Symbols -- 数式シンボル -- -- -- Dashes and Slashes -- ダッシュやスラッシュ -- -- -- Excluded characters -- 除外される文字 -- -- -- Hex Passwords -- 16進数パスワード -- -- -- Password length -- パスワード長 -- -- -- Word Case: -- 単語の大小文字: -- -- -- Regenerate password -- パスワードを再生成 -- -- -- Copy password -- パスワードをコピー -- -- -- lower case -- 小文字 -- -- -- UPPER CASE -- 大文字 -- -- -- Title Case -- 先頭文字のみ大文字 -- -- -- Generate Password -- パスワードを生成 -- -- -- Also choose from: -- 次からも選択: -- -- -- Additional characters to use for the generated password -- パスワード生成に使用する追加の文字 -- -- -- Additional characters -- 追加の文字 -- -- -- Word Count: -- 単語数: -- -- -- Esc -- Esc -- -- -- Apply Password -- パスワードを適用 -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- パスワードを再生成 (%1) -- -- -- Special Characters -- 特殊文字 -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- 統計 -- -- -- Very weak password -- 非常に弱いパスワード -- -- -- Password entropy is %1 bits -- パスワードのエントロピーは %1 ビットです -- -- -- Weak password -- 弱いパスワード -- -- -- Used in %1/%2 -- %1/%2 で使用 -- -- -- Password is used %1 times -- パスワードは %1 ヵ所で使用されています -- -- -- Password has expired -- パスワードの有効期限が切れています -- -- -- Password expiry was %1 -- パスワードの有効期限は %1 でした -- -- -- Password is about to expire -- パスワードの有効期限が切れそうです -- -- -- Password expires in %1 days -- パスワードの有効期限は %1 日後です -- -- -- Password will expire soon -- パスワードは間もなく期限切れになります -- -- -- Password expires on %1 -- パスワードの有効期限は %1 です -- -- -- Health Check -- 健全性の確認 -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- 上書き -- -- -- Delete -- 削除 -- -- -- Move -- 移動 -- -- -- Empty -- 空にする -- -- -- Remove -- 削除 -- -- -- Skip -- スキップ -- -- -- Disable -- 無効 -- -- -- Merge -- マージ -- -- -- Continue -- 続行 -- -- -- -- QObject -- -- Database not opened -- データベースを開いていません -- -- -- Database hash not available -- データベースハッシュが利用できません -- -- -- Client public key not received -- クライアントの公開鍵を受信しませんでした -- -- -- Cannot decrypt message -- メッセージを復号できません -- -- -- Action cancelled or denied -- アクションがキャンセルまたは拒否されました -- -- -- KeePassXC association failed, try again -- KeePassXC のアソシエーションに失敗しました。再試行してください。 -- -- -- Encryption key is not recognized -- 暗号化キーが認識されません -- -- -- Incorrect action -- 不正確なアクションです -- -- -- Empty message received -- 空のメッセージを受信しました -- -- -- No URL provided -- URL がありません -- -- -- No logins found -- ログイン情報が見つかりません -- -- -- Unknown error -- 不明なエラーです -- -- -- Add a new entry to a database. -- データベースに新しいエントリーを追加する。 -- -- -- Path of the database. -- データベースのパス。 -- -- -- Key file of the database. -- データベースのキーファイル。 -- -- -- path -- パス -- -- -- Username for the entry. -- エントリーのユーザー名。 -- -- -- username -- ユーザー名 -- -- -- URL for the entry. -- エントリーの URL。 -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- エントリーのパスワードを要求する。 -- -- -- Generate a password for the entry. -- エントリーのパスワードを生成する。 -- -- -- length -- 長さ -- -- -- Path of the entry to add. -- 追加するエントリーのパス。 -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- クリップボードにコピーするエントリーのパス。 -- -- -- Timeout in seconds before clearing the clipboard. -- クリップボードを消去するまでの時間 (秒) -- -- -- Edit an entry. -- エントリーを編集する。 -- -- -- Title for the entry. -- エントリーのタイトル。 -- -- -- title -- タイトル -- -- -- Path of the entry to edit. -- 編集するエントリーのパス。 -- -- -- Estimate the entropy of a password. -- パスワードのエントロピーの推定。 -- -- -- Password for which to estimate the entropy. -- エントロピーを推定するパスワード。 -- -- -- Perform advanced analysis on the password. -- パスワードの詳細な分析を実行する。 -- -- -- -- --Available commands: -- -- -- --利用可能なコマンド: -- -- -- -- Name of the command to execute. -- 実行するコマンドの名前。 -- -- -- List database entries. -- データベースのエントリーのリストを表示する。 -- -- -- Path of the group to list. Default is / -- リストを表示するグループのパス。既定の設定は / (ルート) -- -- -- Find entries quickly. -- 素早くエントリーを見つけ出す。 -- -- -- Search term. -- 検索語。 -- -- -- Merge two databases. -- 2つのデータベースをマージする。 -- -- -- Path of the database to merge from. -- マージ元のデータベースのパス。 -- -- -- Use the same credentials for both database files. -- 両方のデータベースファイルに対して同一の資格情報を使用する。 -- -- -- Key file of the database to merge from. -- マージ元のデータベースのキーファイル。 -- -- -- Show an entry's information. -- エントリーの情報を表示する。 -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- 表示する属性の名前。このオプションはいくつでも指定することができ、各属性は指定した順に一行に一つずつ表示されます。属性の指定がない場合は既定の属性の概要が表示されます。 -- -- -- attribute -- 属性 -- -- -- Name of the entry to show. -- 表示するエントリーの名前。 -- -- -- NULL device -- NULL デバイス -- -- -- error reading from device -- デバイス読み込みエラー -- -- -- malformed string -- 不正な形式の文字列 -- -- -- missing closing quote -- 閉じ引用符がありません -- -- -- Group -- グループ -- -- -- Title -- タイトル -- -- -- Username -- ユーザー名 -- -- -- Password -- パスワード -- -- -- Notes -- メモ -- -- -- Last Modified -- 最終更新日時 -- -- -- Created -- 作成日時 -- -- -- Browser Integration -- ブラウザー統合 -- -- -- SSH Agent -- SSH エージェント -- -- -- Generate a new random diceware passphrase. -- 新しいランダムなダイスウェアパスフレーズを生成する。 -- -- -- Word count for the diceware passphrase. -- ダイスウェアパスフレーズの単語数。 -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- ダイスウェアジェネレーターの単語リスト。 --[既定: EFF English] -- -- -- Generate a new random password. -- 新しいランダムなパスワードを生成する。 -- -- -- Could not create entry with path %1. -- パス %1 のエントリーを作成できませんでした。 -- -- -- Enter password for new entry: -- 新しいエントリーのパスワードを入力してください: -- -- -- Writing the database failed %1. -- データベースへの書き込みはエラー "%1" で失敗しました。 -- -- -- Successfully added entry %1. -- エントリー %1 を正常に追加しました。 -- -- -- Invalid timeout value %1. -- タイムアウトの値 %1 は不正です。 -- -- -- Entry %1 not found. -- エントリー %1 が見つかりません。 -- -- -- Entry with path %1 has no TOTP set up. -- パス %1 のエントリーには TOTP の設定がありません。 -- -- -- Clearing the clipboard in %1 second(s)... -- %1 秒後にクリップボードを消去します... -- -- -- Clipboard cleared! -- クリップボードを消去しました。 -- -- -- Silence password prompt and other secondary outputs. -- パスワードの要求やその他の様々な出力を抑制する。 -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- パス %1 のエントリーを見つけられませんでした。 -- -- -- Not changing any field for entry %1. -- エントリー %1 のフィールドは変更されていません。 -- -- -- Enter new password for entry: -- エントリーの新しいパスワードを入力してください: -- -- -- Writing the database failed: %1 -- データベースへの書き込みに失敗しました: %1 -- -- -- Successfully edited entry %1. -- エントリー %1 を正常に編集しました。 -- -- -- Length %1 -- 長さ %1 -- -- -- Entropy %1 -- エントロピー %1 -- -- -- Log10 %1 -- log10 %1 -- -- -- Multi-word extra bits %1 -- マルチワードエクストラビット %1 -- -- -- Type: Bruteforce -- 種類: ブルートフォース -- -- -- Type: Dictionary -- 種類: 辞書 -- -- -- Type: Dict+Leet -- 種類: 辞書 + Leet -- -- -- Type: User Words -- 種類: ユーザー辞書 -- -- -- Type: User+Leet -- 種類: ユーザー辞書 + Leet -- -- -- Type: Repeated -- 種類: リピート -- -- -- Type: Sequence -- 種類: 連続 -- -- -- Type: Spatial -- 種類: 空間 -- -- -- Type: Date -- 種類: 日付 -- -- -- Type: Bruteforce(Rep) -- 種類: ブルートフォース (反復) -- -- -- Type: Dictionary(Rep) -- 種類: 辞書 (反復) -- -- -- Type: Dict+Leet(Rep) -- 種類: 辞書 + Leet (反復) -- -- -- Type: User Words(Rep) -- 種類: ユーザー辞書 (反復) -- -- -- Type: User+Leet(Rep) -- 種類: ユーザー辞書 + Leet (反復) -- -- -- Type: Repeated(Rep) -- 種類: リピート (反復) -- -- -- Type: Sequence(Rep) -- 種類: 連続 (反復) -- -- -- Type: Spatial(Rep) -- 種類: 空間 (反復) -- -- -- Type: Date(Rep) -- 種類: 日付 (反復) -- -- -- Type: Unknown%1 -- 種類: 不明 (%1) -- -- -- Entropy %1 (%2) -- エントロピー %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** パスワードの長さ (%1) != 各長さの合計値 (%2) *** -- -- -- Failed to load key file %1: %2 -- キーファイル %1 の読み込みに失敗しました: %2 -- -- -- Length of the generated password -- 生成されるパスワードの長さ -- -- -- Use lowercase characters -- 小文字を使用する -- -- -- Use uppercase characters -- 大文字を使用する -- -- -- Use special characters -- 特殊文字を使用する -- -- -- Use extended ASCII -- 拡張 ASCII を使用する -- -- -- Exclude character set -- 文字集合を除外する -- -- -- chars -- 文字 -- -- -- Exclude similar looking characters -- よく似た文字を除外する -- -- -- Include characters from every selected group -- 選択した各グループの文字を含む -- -- -- Recursively list the elements of the group. -- グループの要素を再帰的にリスト化する。 -- -- -- Cannot find group %1. -- グループ %1 が見つかりません。 -- -- -- Error reading merge file: --%1 -- マージするファイルの読み込み時にエラーが発生しました: --%1 -- -- -- Unable to save database to file : %1 -- データベースをファイルに保存できません: %1 -- -- -- Unable to save database to file: %1 -- データベースをファイルに保存できません: %1 -- -- -- Successfully recycled entry %1. -- エントリー %1 を正常にゴミ箱へ移動しました。 -- -- -- Successfully deleted entry %1. -- エントリー %1 を正常に削除しました。 -- -- -- Show the entry's current TOTP. -- エントリーの現在の TOTP を表示する。 -- -- -- ERROR: unknown attribute %1. -- エラー: %1 は不明な属性です。 -- -- -- No program defined for clipboard manipulation -- クリップボード操作用プログラムを定義していません -- -- -- file empty -- ファイルが空です -- -- -- %1: (row, col) %2,%3 -- %1: (行, 列) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- 設定が不正です -- -- -- Invalid Key -- TOTP -- キーが不正です -- -- -- Message encryption failed. -- メッセージの暗号化に失敗しました。 -- -- -- No groups found -- グループが見つかりません -- -- -- Create a new database. -- 新しいデータベースを作成する。 -- -- -- File %1 already exists. -- ファイル %1 は既に存在します。 -- -- -- Loading the key file failed -- キーファイルの読み込みに失敗しました -- -- -- No key is set. Aborting database creation. -- キーを設定していません。データベースの作成を中止します。 -- -- -- Failed to save the database: %1. -- データベースの保存に失敗しました: %1. -- -- -- Successfully created new database. -- 新しいデータベースを正常に作成しました。 -- -- -- Creating KeyFile %1 failed: %2 -- キーファイル %1 の作成に失敗しました: %2 -- -- -- Loading KeyFile %1 failed: %2 -- キーファイル %1 の読み込みに失敗しました: %2 -- -- -- Path of the entry to remove. -- 削除するエントリーのパス。 -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- 既存のシングルインスタンスロックファイルは無効です。新しいインスタンスを起動します。 -- -- -- The lock file could not be created. Single-instance mode disabled. -- ロックファイルを作成できませんでした。シングルインスタンスモードは無効です。 -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - クロスプラットフォームのパスワードマネージャー -- -- -- filenames of the password databases to open (*.kdbx) -- 開くパスワードデータベースのファイル名 (*.kdbx) -- -- -- path to a custom config file -- カスタム設定ファイルへのパス -- -- -- key file of the database -- データベースのキーファイル -- -- -- read password of the database from stdin -- 標準入力からデータベースのパスワードを読み込む -- -- -- Another instance of KeePassXC is already running. -- KeePassXC の別インスタンスが既に起動しています。 -- -- -- Fatal error while testing the cryptographic functions. -- 暗号化機能のテスト中に致命的なエラーが発生しました。 -- -- -- KeePassXC - Error -- KeePassXC - エラー -- -- -- Database password: -- データベースのパスワード: -- -- -- Cannot create new group -- 新しいグループを作成できません -- -- -- Deactivate password key for the database. -- データベースのパスワードキーを無効にする。 -- -- -- Displays debugging information. -- デバッグ情報を表示する。 -- -- -- Deactivate password key for the database to merge from. -- マージ元データベースのパスワードキーを無効にする。 -- -- -- Version %1 -- バージョン %1 -- -- -- Build Type: %1 -- ビルド形式: %1 -- -- -- Revision: %1 -- リビジョン: %1 -- -- -- Distribution: %1 -- 配布形式: %1 -- -- -- Debugging mode is disabled. -- デバッグモードは無効です。 -- -- -- Debugging mode is enabled. -- デバッグモードが有効です。 -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- オペレーティングシステム: %1 --CPU アーキテクチャー: %2 --カーネル: %3 %4 -- -- -- Auto-Type -- 自動入力 -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (署名共有と未署名共有) -- -- -- KeeShare (only signed sharing) -- KeeShare (署名共有のみ) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (未署名共有のみ) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- なし -- -- -- Enabled extensions: -- 有効な拡張機能: -- -- -- Cryptographic libraries: -- 暗号化ライブラリ: -- -- -- Cannot generate a password and prompt at the same time! -- パスワードの生成とプロンプトの表示は同時使用できません。 -- -- -- Adds a new group to a database. -- データベースに新しいグループを追加する。 -- -- -- Path of the group to add. -- 追加するグループのパス。 -- -- -- Group %1 already exists! -- グループ %1 は既に存在します! -- -- -- Group %1 not found. -- グループ %1 が見つかりません。 -- -- -- Successfully added group %1. -- グループ %1 を正常に追加しました。 -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- パスワードが公に流出しているか確認する。FILENAME は、https://haveibeenpwned.com/Passwords で利用可能な HIBP 形式 (流出したパスワードの SHA-1 ハッシュのリスト) のファイルのパスである必要があります。 -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- パスワードの脆弱性や問題点を解析する。 -- -- -- Failed to open HIBP file %1: %2 -- HIBP ファイル %1 を開くのに失敗しました: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- HIBP ファイルを対象にデータベースのエントリーを評価中です。しばらく時間がかかります... -- -- -- Close the currently opened database. -- 現在開いているデータベースを閉じる。 -- -- -- Display this help. -- このヘルプを表示する。 -- -- -- slot -- スロット -- -- -- Invalid word count %1 -- 単語数 %1 は不正です -- -- -- The word list is too small (< 1000 items) -- 単語リストが小さすぎます (< 1000 アイテム) -- -- -- Exit interactive mode. -- 対話モードを終了する。 -- -- -- Exports the content of a database to standard output in the specified format. -- データベースの内容を指定した形式で標準出力にエクスポートする。 -- -- -- Unable to export database to XML: %1 -- データベースを XML にエクスポートできません: %1 -- -- -- Unsupported format %1 -- %1 はサポートしていないフォーマットです -- -- -- Use numbers -- 数字を使用する -- -- -- Invalid password length %1 -- %1 はパスワード長として適切ではありません -- -- -- Display command help. -- コマンドのヘルプを表示する。 -- -- -- Available commands: -- 利用可能なコマンド: -- -- -- Import the contents of an XML database. -- XML データベースの内容をインポートする。 -- -- -- Path of the XML database export. -- XML データベースエクスポートのパス。 -- -- -- Path of the new database. -- 新しいデータベースのパス。 -- -- -- Successfully imported database. -- データベースを正常にインポートしました。 -- -- -- Unknown command %1 -- %1 は不明なコマンドです -- -- -- Flattens the output to single lines. -- 出力をフラットな単一行にする。 -- -- -- Only print the changes detected by the merge operation. -- マージ処理で検出した変更のみを出力する。 -- -- -- Yubikey slot for the second database. -- 2つ目のデータベース用の Yubikey スロット。 -- -- -- Successfully merged %1 into %2. -- %1 を %2 へ正常にマージしました。 -- -- -- Database was not modified by merge operation. -- データベースはマージ処理で更新されませんでした。 -- -- -- Moves an entry to a new group. -- エントリーを新しいグループに移動する。 -- -- -- Path of the entry to move. -- 移動するエントリーのパス。 -- -- -- Path of the destination group. -- 移動先グループのパス。 -- -- -- Could not find group with path %1. -- パス %1 のグループが見つかりませんでした。 -- -- -- Entry is already in group %1. -- エントリーは既にグループ %1 に存在します。 -- -- -- Successfully moved entry %1 to group %2. -- エントリー %1 を正常にグループ %2 へ移動しました。 -- -- -- Open a database. -- データベースを開く。 -- -- -- Path of the group to remove. -- 削除するグループのパス。 -- -- -- Cannot remove root group from database. -- データベースからルートグループを削除することはできません。 -- -- -- Successfully recycled group %1. -- グループ %1 を正常にゴミ箱へ移動しました。 -- -- -- Successfully deleted group %1. -- グループ %1 を正常に削除しました。 -- -- -- Failed to open database file %1: not found -- データベースファイル %1 を開くのに失敗しました: 見つかりません -- -- -- Failed to open database file %1: not a plain file -- データベースファイル %1 を開くのに失敗しました: プレーンなファイルではありません -- -- -- Failed to open database file %1: not readable -- データベースファイル %1 を開くのに失敗しました: 読み取り可能ではありません -- -- -- Enter password to unlock %1: -- %1 のロックを解除するためのパスワードを入力してください: -- -- -- Invalid YubiKey slot %1 -- YubiKey のスロット %1 は不正です -- -- -- Enter password to encrypt database (optional): -- データベースを暗号化するためのパスワードを入力してください (オプション): -- -- -- HIBP file, line %1: parse error -- HIBP ファイルの %1 行目: パースエラー -- -- -- Secret Service Integration -- シークレットサービス統合 -- -- -- User name -- ユーザー名 -- -- -- Password for '%1' has been leaked %2 time(s)! -- '%1' のパスワードは %2 回流出しています! -- -- -- Invalid password generator after applying all options -- 全てのオプションを適用したパスワード生成は無効です -- -- -- Show the protected attributes in clear text. -- クリアテキストの保護された属性を表示する。 -- -- -- Browser Plugin Failure -- ブラウザープラグインエラー -- -- -- Could not save the native messaging script file for %1. -- %1 用の Native messaging スクリプトファイルを保存できませんでした。 -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- 指定した属性をクリップボードにコピーする。指定しない場合は "パスワード" になります。 -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- 現在の TOTP をクリップボードにコピーする ("-a totp" と同じ)。 -- -- -- Copy an entry's attribute to the clipboard. -- エントリーの属性をクリップボードにコピーする。 -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- エラー: --attribute または --totp を一つ指定してください (両方は不可)。 -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- エラー: 属性 %1 は不明瞭です。%2 と一致します。 -- -- -- Attribute "%1" not found. -- 属性 "%1" が見つかりません。 -- -- -- Entry's "%1" attribute copied to the clipboard! -- エントリーの "%1" 属性をクリップボードにコピーしました。 -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- データベースへのアクセスに使用する Yubikey のスロット番号とオプションのシリアル番号 (例: 1:7370001)。 -- -- -- slot[:serial] -- スロット[:シリアル] -- -- -- Target decryption time in MS for the database. -- データベースの目標復号時間 (ミリ秒)。 -- -- -- time -- 時間 -- -- -- Set the key file for the database. -- データベースのキーファイルを設定する。 -- -- -- Set a password for the database. -- データベースのパスワードを設定する。 -- -- -- Invalid decryption time %1. -- %1 は復号時間として不適切です。 -- -- -- Target decryption time must be between %1 and %2. -- 目標復号時間の範囲は %1 から %2 である必要があります。 -- -- -- Failed to set database password. -- データベースパスワードの設定に失敗しました。 -- -- -- Benchmarking key derivation function for %1ms delay. -- 鍵導出関数を %1ms の遅延でベンチマーク中。 -- -- -- Setting %1 rounds for key derivation function. -- 鍵導出関数を %1 回設定中。 -- -- -- error while setting database key derivation settings. -- データベースの鍵導出設定中にエラーが発生しました。 -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- エクスポート時に使用するフォーマット。'xml' が既定で、'csv' も選択可能です。 -- -- -- Unable to import XML database: %1 -- XML データベースをインポートできません: %1 -- -- -- Show a database's information. -- データベースの情報を表示する。 -- -- -- UUID: -- UUID: -- -- -- Name: -- 名前: -- -- -- Description: -- 概要: -- -- -- Cipher: -- 暗号: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- ゴミ箱が有効です。 -- -- -- Recycle bin is not enabled. -- ゴミ箱は有効になっていません。 -- -- -- Invalid command %1. -- %1 は無効なコマンドです。 -- -- -- Invalid YubiKey serial %1 -- YubiKey のシリアル %1 は不正です -- -- -- Please touch the button on your YubiKey to continue… -- 続行するために YubiKey のボタンにタッチしてください… -- -- -- Do you want to create a database with an empty password? [y/N]: -- 空のパスワードでデータベースを作成しますか?[y/N]: -- -- -- Repeat password: -- パスワードを再入力: -- -- -- Error: Passwords do not match. -- エラー: パスワードが一致しません。 -- -- -- All clipping programs failed. Tried %1 -- -- 全てのクリッピングプログラムが失敗しました。試行: %1 -- -- -- -- AES (%1 rounds) -- AES (%1 回) -- -- -- AES 256-bit -- AES 256 ビット -- -- -- Twofish 256-bit -- Twofish 256 ビット -- -- -- ChaCha20 256-bit -- ChaCha20: 256 ビット {20 256-?} -- -- -- Benchmark %1 delay -- ベンチマーク (遅延: %1) -- -- -- %1 ms -- milliseconds -- %1 ミリ秒 -- -- -- %1 s -- seconds -- %1 秒 -- -- -- path to a custom local config file -- カスタムローカル設定ファイルへのパス -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- 警告: KeePassXC は将来的に、古いキーファイル --形式をサポートしなくなる可能性があります。 -- --新しいキーファイルの生成を検討してください。 -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 回, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – 推奨) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- アイコン -- -- -- Unsupported key file version: %1 -- サポートしていないバージョンのキーファイルです: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- チェックサムが一致しません!キーファイルが破損している可能性があります。 -- -- -- Unexpected key file data! Key file may be corrupt. -- 予期しないキーファイルデータです!キーファイルが破損している可能性があります。 -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- 圧縮時に内部 zlib エラーが発生しました: -- -- -- Error writing to underlying device: -- 基本デバイスへの書き込み時にエラーが発生しました: -- -- -- Error opening underlying device: -- 基本デバイスを開く際にエラーが発生しました: -- -- -- Error reading data from underlying device: -- 基本デバイスからの読み取り時にエラーが発生しました: -- -- -- Internal zlib error when decompressing: -- 展開時に内部 zlib エラーが発生しました: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- 現在のバージョンの zlib は、その gzip 形式をサポートしていません。 -- -- -- Internal zlib error: -- 内部 zlib エラー: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- レポートから除外されているエントリーも表示する -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- 理由にマウスオーバーすると追加の詳細が表示されます。エントリーをダブルクリックすると編集できます。 -- -- -- Bad -- Password quality -- 悪い -- -- -- Bad — password must be changed -- 悪い — パスワードを変更する必要があります -- -- -- Poor -- Password quality -- 貧弱 -- -- -- Poor — password should be changed -- 貧弱 — パスワードを変更する必要があります -- -- -- Weak -- Password quality -- 弱い -- -- -- Weak — consider changing the password -- 弱い — パスワードの変更を検討してください -- -- -- (Excluded) -- (除外) -- -- -- This entry is being excluded from reports -- このエントリーはレポートから除外されています -- -- -- Please wait, health data is being calculated... -- 健全性データを計算中です、お待ちください... -- -- -- Congratulations, everything is healthy! -- 全て健全です。おめでとうございます! -- -- -- Title -- タイトル -- -- -- Path -- パス -- -- -- Score -- スコア -- -- -- Reason -- 理由 -- -- -- Edit Entry... -- エントリーを編集... -- -- -- Exclude from reports -- レポートから除外 -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- 注意: このレポートはオンラインサービスの Have I Been Pwned (https://haveibeenpwned.com) に情報を送信する必要があります。続行した場合、データベースのパスワードは暗号学的ハッシュ化が施され、それらのハッシュの最初の5文字が、このサービスへ安全に送信されます。この情報からデータベースが再構成されることはなく、データベースが安全であることに変わりはありません。しかしながら、あなたの IP アドレスや送信するパスワードの数は、このサービスに公開されます。 -- -- -- Perform Online Analysis -- オンライン分析を実行 -- -- -- Also show entries that have been excluded from reports -- レポートから除外されているエントリーも表示する -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- このビルドの KeePassXC はネットワーク機能がありません。パスワードを Have I Been Pwned のデータベースで照合するにはネットワーク機能が必要です。 -- -- -- Congratulations, no exposed passwords! -- パスワードは流出していません。おめでとうございます! -- -- -- Title -- タイトル -- -- -- Path -- パス -- -- -- Password exposed… -- パスワードが流出しています… -- -- -- (Excluded) -- (除外) -- -- -- This entry is being excluded from reports -- このエントリーはレポートから除外されています -- -- -- once -- 1 回 -- -- -- up to 10 times -- 10 回以下 -- -- -- up to 100 times -- 100 回以下 -- -- -- up to 1000 times -- 1000 回以下 -- -- -- up to 10,000 times -- 10,000 回以下 -- -- -- up to 100,000 times -- 100,000 回以下 -- -- -- up to a million times -- 1,000,000 回以下 -- -- -- millions of times -- 数百万回 -- -- -- Edit Entry... -- エントリーを編集... -- -- -- Exclude from reports -- レポートから除外 -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- エラーアイコンがある行にマウスオーバーすると詳細が表示されます。 -- -- -- Name -- 名前 -- -- -- Value -- -- -- -- Please wait, database statistics are being calculated... -- データベースの統計を算出しているため、しばらくお待ちください... -- -- -- Database name -- データベース名 -- -- -- Description -- 概要 -- -- -- Location -- 場所 -- -- -- Last saved -- 最終更新日時 -- -- -- Unsaved changes -- 未保存の変更 -- -- -- yes -- はい -- -- -- no -- いいえ -- -- -- The database was modified, but the changes have not yet been saved to disk. -- データベースは変更済みですが、まだディスクに保存していません。 -- -- -- Number of groups -- グループ数 -- -- -- Number of entries -- エントリー数 -- -- -- Number of expired entries -- 期限切れエントリー数 -- -- -- The database contains entries that have expired. -- データベースに期限切れのエントリーが含まれています。 -- -- -- Unique passwords -- 固有パスワード -- -- -- Non-unique passwords -- 非固有パスワード -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- 10% 以上のパスワードが使い回されています。可能な限り、それ専用のパスワードを使用してください。 -- -- -- Maximum password reuse -- パスワード使い回しの最大数 -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- 一部のパスワードが3回以上使い回されています。可能な限り、それ専用のパスワードを使用してください。 -- -- -- Number of short passwords -- 短いパスワードの数 -- -- -- Recommended minimum password length is at least 8 characters. -- 推奨最小パスワード長は最低8文字です。 -- -- -- Number of weak passwords -- 脆弱なパスワードの数 -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- 「良い」または「すばらしい」評価の長くてランダムなパスワードの使用を推奨します。 -- -- -- Entries excluded from reports -- レポートから除外されたエントリー -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- レポートから除外されたエントリー。パスワードに問題があることが分かっているため、必ずしも問題ではありませんが、それらのエントリーのことを忘れないようにしておく必要はあるかもしれません。 -- -- -- Average password length -- 平均パスワード長 -- -- -- %1 characters -- %1文字 -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- パスワード長の平均値が10文字以下です。パスワードは長いほどセキュリティが向上します。 -- -- -- -- SSHAgent -- -- Agent connection failed. -- エージェントの接続に失敗しました。 -- -- -- Agent protocol error. -- エージェントのプロトコルエラーです。 -- -- -- No agent running, cannot add identity. -- エージェントが実行されていないため、ID を追加できません。 -- -- -- No agent running, cannot remove identity. -- エージェントが実行されていないため、ID を削除できません。 -- -- -- Agent refused this identity. Possible reasons include: -- エージェントがこの ID を拒否しました。次の理由が考えられます: -- -- -- The key has already been added. -- キーが既に追加されている。 -- -- -- Restricted lifetime is not supported by the agent (check options). -- エージェントが有効期間の制限をサポートしていない (オプションを確認)。 -- -- -- A confirmation request is not supported by the agent (check options). -- エージェントが確認要求をサポートしていない (オプションを確認)。 -- -- -- Key identity ownership conflict. Refusing to add. -- 鍵の ID の所有権が競合しているため追加を拒否しています。 -- -- -- No agent running, cannot list identities. -- エージェントが実行されていないため、ID の一覧を取得できません。 -- -- -- -- SearchHelpWidget -- -- Search Help -- 検索のヘルプ -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- 検索語は次の通りです: [修飾子][フィールド:]["]用語["] -- -- -- Every search term must match (ie, logical AND) -- 用語は全て一致する必要があります (つまり論理積) -- -- -- Modifiers -- 修飾子 -- -- -- exclude term from results -- 結果から用語を除外 -- -- -- match term exactly -- 用語が完全に一致 -- -- -- use regex in term -- 用語に正規表現を使用 -- -- -- Fields -- フィールド -- -- -- Term Wildcards -- 用語のワイルドカード -- -- -- match anything -- 何れかが一致 -- -- -- match one -- 一文字一致 -- -- -- logical OR -- 論理和 -- -- -- Examples -- -- -- -- -- SearchWidget -- -- Search -- 検索 -- -- -- Limit search to selected group -- 選択したグループに検索対象を制限 -- -- -- Search Help -- 検索のヘルプ -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- 検索 (%1)... -- -- -- Case sensitive -- 大文字と小文字を区別 -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- オプション -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeepassXC Freedesktop.org シークレットサービス統合を有効にする -- -- -- General -- 全般 -- -- -- Show notification when credentials are requested -- 資格情報が要求された際に通知を表示する -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>データベースのゴミ箱が有効になっている場合は、エントリーをゴミ箱に直接移動し、そうでない場合は確認なしで削除します。</p><p>エントリーが他から参照されている場合はプロンプトを表示します。</p></body></html> -- -- -- Exposed database groups: -- 公開するデータベースのグループ: -- -- -- Authorization -- 認証 -- -- -- These applications are currently connected: -- これらのアプリケーションが現在接続済みです: -- -- -- Don't confirm when entries are deleted by clients -- クライアントによってエントリーが削除される際に確認しない -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>エラー:</b> DBus への接続に失敗しました。DBus の設定を確認してください。 -- -- -- <b>Warning:</b> -- <b>警告:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- プラグインをアクティブにするために現在の変更を保存し、このセクションの編集を有効にしてください。 -- -- -- -- SettingsWidgetKeeShare -- -- Active -- アクティブ -- -- -- Allow export -- エクスポートを許可する -- -- -- Allow import -- インポートを許可する -- -- -- Own certificate -- 自身の証明書 -- -- -- Fingerprint: -- フィンガープリント: -- -- -- Certificate: -- 証明書: -- -- -- Signer -- 署名者 -- -- -- Key: -- キー: -- -- -- Generate -- 生成 -- -- -- Import -- インポート -- -- -- Export -- エクスポート -- -- -- Imported certificates -- インポートした証明書 -- -- -- Trust -- 信用 -- -- -- Ask -- 確認 -- -- -- Untrust -- 不信 -- -- -- Remove -- 削除 -- -- -- Path -- パス -- -- -- Status -- ステータス -- -- -- Fingerprint -- フィンガープリント -- -- -- Certificate -- 証明書 -- -- -- Trusted -- 信用 -- -- -- Untrusted -- 不信 -- -- -- Unknown -- 不明 -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare キーファイル -- -- -- All files -- 全てのファイル -- -- -- Select path -- パスを選択 -- -- -- Exporting changed certificate -- 変更した証明書をエクスポートしています -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- エクスポートされる証明書は使用中の証明書と同一ではありません。現在の証明書をエクスポートしますか? -- -- -- Signer: -- 署名者: -- -- -- Allow KeeShare imports -- KeeShare のインポートを許可 -- -- -- Allow KeeShare exports -- KeeShare のエクスポートを許可 -- -- -- Only show warnings and errors -- 警告とエラーのみ表示する -- -- -- Key -- キー -- -- -- Signer name field -- 署名者名フィールド -- -- -- Generate new certificate -- 新しい証明書を生成 -- -- -- Import existing certificate -- 既存の証明書をインポート -- -- -- Export own certificate -- 自身の証明書をエクスポート -- -- -- Known shares -- 既知の共有 -- -- -- Trust selected certificate -- 選択した証明書を信用 -- -- -- Ask whether to trust the selected certificate every time -- 選択した証明書を信用するかどうか毎回確認 -- -- -- Untrust selected certificate -- 選択した証明書を信用しない -- -- -- Remove selected certificate -- 選択した証明書を削除 -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- 署名共有コンテナの上書きはサポートしていません - エクスポートを阻害しました -- -- -- Could not write export container (%1) -- コンテナを書き込めませんでした (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- 署名を埋め込めませんでした: ファイルを書き込み用に開くことができません (%1) -- -- -- Could not embed signature: Could not write file (%1) -- 署名を埋め込めませんでした: ファイルに書き込むことができません (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- データベースを埋め込めませんでした: ファイルを書き込み用に開くことができません (%1) -- -- -- Could not embed database: Could not write file (%1) -- データベースを埋め込めませんでした: ファイルに書き込むことができません (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- 未署名共有コンテナの上書きはサポートしていません - エクスポートを阻害しました -- -- -- Could not write export container -- コンテナを書き込めませんでした -- -- -- Unexpected export error occurred -- 予期しないエクスポートエラーが発生しました -- -- -- -- ShareImport -- -- Import from container without signature -- 署名なしコンテナからインポート -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- 共有コンテナは署名されていないため、ソースを確認できません。本当に %1 からインポートしますか? -- -- -- Import from container with certificate -- 証明書付きコンテナからインポート -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- %3 の %1 (フィンガープリント %2) を信用しますか?{1 ?} {2 ?} -- -- -- Not this time -- 今回はしない -- -- -- Never -- 常にしない -- -- -- Always -- 常にする -- -- -- Just this time -- 今回はする -- -- -- Signed share container are not supported - import prevented -- 署名共有コンテナはサポートしていません - インポートを阻害しました -- -- -- File is not readable -- ファイルが読み取り可能ではありません -- -- -- Invalid sharing container -- 共有コンテナが不正です -- -- -- Untrusted import prevented -- 不信なインポートを阻害しました -- -- -- Successful signed import -- 署名付きのもののインポートに成功しました -- -- -- Unsigned share container are not supported - import prevented -- 未署名共有コンテナはサポートしていません - インポートを阻害しました -- -- -- Successful unsigned import -- 未署名のもののインポートに成功しました -- -- -- File does not exist -- ファイルが存在しません -- -- -- Unknown share container type -- 不明な共有コンテナ形式です -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- %1 からのインポートに失敗しました (%2) -- -- -- Import from %1 successful (%2) -- %1 からのインポートに成功しました (%2) -- -- -- Imported from %1 -- %1 からインポートしました -- -- -- Export to %1 failed (%2) -- %1 へのエクスポートに失敗しました (%2) -- -- -- Export to %1 successful (%2) -- %1 へのエクスポートに成功しました (%2) -- -- -- Export to %1 -- %1 にエクスポート -- -- -- Multiple import source path to %1 in %2 -- %2 の %1 への複数のインポートソースパス -- -- -- Conflicting export target path %1 in %2 -- %2 のエクスポートターゲットパス %1 が競合しています -- -- -- -- TotpDialog -- -- Timed Password -- 時限パスワード -- -- -- 000000 -- 000000 -- -- -- Copy -- コピー -- -- -- Expires in <b>%n</b> second(s) -- 期限切れまで <b>%n</b> 秒 -- -- -- -- TotpExportSettingsDialog -- -- Copy -- コピー -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- 備考: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。 -- -- -- There was an error creating the QR code. -- QR コードの作成中にエラーが発生しました。 -- -- -- Closing in %1 seconds. -- %1 秒後に閉じます。 -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP の設定 -- -- -- Default RFC 6238 token settings -- 既定の RFC 6238 トークン設定 -- -- -- Steam token settings -- Steam トークン設定 -- -- -- Use custom settings -- カスタム設定を使用する -- -- -- Custom Settings -- カスタム設定 -- -- -- Time step: -- タイムステップ: -- -- -- sec -- Seconds -- -- -- -- Code size: -- コードサイズ: -- -- -- Secret Key: -- 秘密鍵: -- -- -- Secret key must be in Base32 format -- 秘密鍵は Base32 形式である必要があります -- -- -- Secret key field -- 秘密鍵フィールド -- -- -- Algorithm: -- アルゴリズム: -- -- -- Time step field -- タイムステップフィールド -- -- -- digits -- -- -- -- Invalid TOTP Secret -- 不正な TOTP -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- 入力した秘密鍵は不正です。鍵は Base32 形式である必要があります。 --例: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- TOTP 設定の削除確認 -- -- -- Are you sure you want to delete TOTP settings for this entry? -- このエントリーの TOTP 設定を削除してもよろしいですか? -- -- -- -- URLEdit -- -- Invalid URL -- 無効な URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- 更新を確認中 -- -- -- Checking for updates... -- 更新を確認中... -- -- -- Close -- 閉じる -- -- -- Update Error! -- 更新エラー! -- -- -- An error occurred in retrieving update information. -- 更新情報の確認中にエラーが発生しました。 -- -- -- Please try again later. -- 後で再試行してください。 -- -- -- Software Update -- ソフトウェアの更新 -- -- -- A new version of KeePassXC is available! -- KeePassXC の新しいバージョンが利用可能です。 -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 が利用可能です (現在のバージョンは %2)。 -- -- -- Download it at keepassxc.org -- keepassxc.org からダウンロードしてください -- -- -- You're up-to-date! -- 最新です! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 は現在利用可能な最新バージョンです -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- KeePassXC データベースに安全にパスワードを保管する -- -- -- Create new database -- 新しいデータベースを作成する -- -- -- Open existing database -- 既存のデータベースを開く -- -- -- Import from KeePass 1 -- KeePass 1 からインポートする -- -- -- Import from CSV -- CSV からインポートする -- -- -- Recent databases -- 最近使用したデータベース -- -- -- Welcome to KeePassXC %1 -- KeePassXC %1 へようこそ -- -- -- Import from 1Password -- 1Password からインポートする -- -- -- Open a recent database -- 最近使用したデータベースを開く -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] 設定済みスロット - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] チャレンジレスポンス - スロット %3 - %4 -- -- -- Press -- Press -- -- -- Passive -- Passive -- -- -- %1 Invalid slot specified - %2 -- 不正なスロットが指定されました: %1 - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey のインスタンスが初期化されていません。 -- -- -- Hardware key is currently in use. -- ハードウェアキーは現在使用中です。 -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- シリアルナンバー %1 のハードウェアキーが見つかりませんでした。続行するにはハードウェアキーを接続してください。 -- -- -- Hardware key timed out waiting for user interaction. -- ユーザーとの対話の待機中にハードウェアキーがタイムアウトしました。 -- -- -- A USB error ocurred when accessing the hardware key: %1 -- ハードウェアキーへのアクセス時に USB のエラーが発生しました: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- チャレンジレスポンスでエラーが発生しました: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- 再読み込み -- -- -- YubiKey Challenge-Response -- YubiKey のチャレンジレスポンス -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>セキュリティ対策として <a href="https://www.yubico.com/">YubiKey</a> を使用できます。</p><p>YubiKey のスロットの1つを <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 チャレンジレスポンス</a> に設定する必要があります。</p> -- -- -- Refresh hardware tokens -- ハードウェアトークンを更新 -- -- -- Hardware key slot selection -- ハードウェアキースロットの選択 -- -- -- Could not find any hardware keys! -- ハードウェアキーが見つかりませんでした。 -- -- -- Selected hardware key slot does not support challenge-response! -- 選択したハードウェアキーのスロットはチャレンジレスポンスをサポートしていません。 -- -- -- Detecting hardware keys… -- ハードウェアキーを検出中… -- -- -- No hardware keys detected -- 検出したハードウェアキーはありません -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ko.ts keepassxc-2.6.4-patched/share/translations/keepassx_ko.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ko.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ko.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7890 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- KeePassXC 정보 -- -- -- About -- 정보 -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> 사이트에 버그를 보고해 주십시오 -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC는 GNU 일반 공중 라이선스(GPL) 버전 2 및 (선택적으로) 버전 3으로 배포됩니다. -- -- -- Contributors -- 기여자 -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">GitHub에서 기여자 보기</a> -- -- -- Debug Info -- 디버그 정보 -- -- -- Include the following information whenever you report a bug: -- 버그를 보고할 때 다음 정보를 포함하십시오: -- -- -- Copy to clipboard -- 클립보드에 복사 -- -- -- Project Maintainers: -- 프로젝트 관리자: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC 팀은 원 프로젝트인 KeePassX의 개발자 debfx에게 특별한 감사를 전합니다. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Pageant 대신 OpenSSH for Windows 사용 -- -- -- Enable SSH Agent integration -- SSH 에이전트 통합 활성화 -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK 값 -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK 재정의 -- -- -- (empty) -- (비어 있음) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- SSH 에이전트 소켓을 사용할 수 없습니다. SSH_AUTH_SOCK 환경 변수가 설정되어 있는지 확인하시고, 없다면 재정의할 수 있습니다. -- -- -- SSH Agent connection is working! -- SSH 에이전트에 연결할 수 있습니다! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- 프로그램 설정 -- -- -- General -- 일반 -- -- -- Security -- 보안 -- -- -- Access error for config file %1 -- 설정 파일 %1에 접근할 수 없음 -- -- -- Icon only -- 아이콘만 -- -- -- Text only -- 텍스트만 -- -- -- Text beside icon -- 아이콘 옆에 텍스트 -- -- -- Text under icon -- 아이콘 밑에 텍스트 -- -- -- Follow style -- 스타일 따르기 -- -- -- Reset Settings? -- 설정을 초기화하시겠습니까? -- -- -- Are you sure you want to reset all general and security settings to default? -- 모든 일반 설정과 보안 설정을 초기화하시겠습니까? -- -- -- Monochrome (light) -- 단색(밝음) -- -- -- Monochrome (dark) -- 단색(어두움) -- -- -- Colorful -- 컬러풀 -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- 기본 설정 -- -- -- Startup -- 시작 -- -- -- Start only a single instance of KeePassXC -- KeePassXC 단일 인스턴스만 사용 -- -- -- Minimize window at application startup -- 프로그램 시작 시 창 최소화 -- -- -- File Management -- 파일 관리 -- -- -- Backup database file before saving -- 저장하기 전에 데이터베이스 파일 백업 -- -- -- Automatically save after every change -- 항목을 변경할 때 자동 저장 -- -- -- Automatically reload the database when modified externally -- 외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침 -- -- -- Entry Management -- 항목 관리 -- -- -- Use group icon on entry creation -- 항목을 만들 때 그룹 아이콘 사용 -- -- -- Minimize instead of app exit -- 프로그램을 끝내지 않고 최소화 -- -- -- Show a system tray icon -- 시스템 트레이 아이콘 표시 -- -- -- Hide window to system tray when minimized -- 시스템 트레이로 최소화 -- -- -- Auto-Type -- 자동 입력 -- -- -- Use entry title to match windows for global Auto-Type -- 전역 자동 입력 시 창 제목을 항목 제목에서 검색 -- -- -- Use entry URL to match windows for global Auto-Type -- 전역 자동 입력 시 창 제목을 항목 URL에서 검색 -- -- -- Always ask before performing Auto-Type -- 자동 입력 시 항상 묻기 -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- 이동 가능한 도구 모음 -- -- -- Remember previously used databases -- 과거 데이터베이스 기억 -- -- -- Load previously open databases on startup -- 시작할 때 이전에 사용한 데이터베이스 열기 -- -- -- Remember database key files and security dongles -- 데이터베이스 키 파일과 보안 동글 기억 -- -- -- Check for updates at application startup once per week -- 프로그램을 시작할 때 1주일에 1번 업데이트 확인 -- -- -- Include beta releases when checking for updates -- 업데이트를 확인할 때 베타 릴리스 포함 -- -- -- Language: -- 언어: -- -- -- (restart program to activate) -- (다시 시작 후 적용됨) -- -- -- Minimize window after unlocking database -- 데이터베이스 잠금 해제 후 창 최소화 -- -- -- Minimize when opening a URL -- URL을 열 때 창 최소화 -- -- -- Hide window when copying to clipboard -- 클립보드에 복사할 때 창 숨기기 -- -- -- Minimize -- 최소화 -- -- -- Drop to background -- 백그라운드로 전환 -- -- -- Favicon download timeout: -- 파비콘 다운로드 시간 제한: -- -- -- Website icon download timeout in seconds -- 웹 사이트 아이콘 다운로드 시간 제한(초 단위) -- -- -- sec -- Seconds -- -- -- -- Toolbar button style -- 도구 모음 단추 스타일 -- -- -- Language selection -- 언어 선택 -- -- -- Global auto-type shortcut -- 전역 자동 입력 단축키 -- -- -- Auto-type character typing delay milliseconds -- 글자당 자동 입력 지연 시간(밀리초 단위) -- -- -- Auto-type start delay milliseconds -- 자동 입력 시작 지연 시간(밀리초 단위) -- -- -- Automatically launch KeePassXC at system startup -- 시스템 시작 시 KeePassXC 자동 시작 -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- 데이터베이스 파일 안전 저장(Dropbox 등에서 문제 발생 시 비활성화) -- -- -- User Interface -- 사용자 인터페이스 -- -- -- Toolbar button style: -- 도구 모음 단추 스타일: -- -- -- Use monospaced font for notes -- 메모에 고정폭 글꼴 사용 -- -- -- Tray icon type: -- 트레이 아이콘 형식: -- -- -- Reset settings to default… -- 기본값으로 설정 복원... -- -- -- Auto-Type typing delay: -- 자동 입력 지연 시간: -- -- -- Global Auto-Type shortcut: -- 전역 자동 입력 단축키: -- -- -- Auto-Type start delay: -- 자동 입력 시작 지연 시간: -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- 시간 제한 -- -- -- Clear clipboard after -- 다음 시간 이후 클립보드 비우기 -- -- -- sec -- Seconds -- -- -- -- Lock databases after inactivity of -- 다음 시간 동안 활동이 없을 때 데이터베이스 잠금 -- -- -- min -- -- -- -- Forget TouchID after inactivity of -- 다음 시간 동안 활동이 없을 때 TouchID 잊기 -- -- -- Convenience -- 편의성 -- -- -- Lock databases when session is locked or lid is closed -- 세션이 잠겼을 때나 덮개를 닫았을 때 데이터베이스 잠금 -- -- -- Forget TouchID when session is locked or lid is closed -- 세션을 잠그거나 덮개를 닫았을 때 TouchID 잊기 -- -- -- Lock databases after minimizing the window -- 창을 최소화할 때 데이터베이스 잠금 -- -- -- Re-lock previously locked database after performing Auto-Type -- 자동 입력 이후 이전에 잠긴 데이터베이스 다시 잠그기 -- -- -- Hide passwords in the entry preview panel -- 항목 미리 보기 패널에서 암호 숨기기 -- -- -- Hide entry notes by default -- 기본값으로 암호 숨기기 -- -- -- Privacy -- 개인 정보 -- -- -- Use DuckDuckGo service to download website icons -- 웹 사이트 아이콘을 다운로드할 때 DuckDuckGo 서비스 사용 -- -- -- Clipboard clear seconds -- 클립보드를 지울 시간 -- -- -- Touch ID inactivity reset -- 사용하지 않을 때 Touch ID 초기화 -- -- -- Database lock timeout seconds -- 데이터베이스 잠금 시간 제한(초 단위) -- -- -- min -- Minutes -- -- -- -- Clear search query after -- 다음 시간 이후 검색어 비우기 -- -- -- Require password repeat when it is visible -- 암호가 보일 때 반복 필요 -- -- -- Hide passwords when editing them -- 암호를 편집할 때 숨기기 -- -- -- Use placeholder for empty password fields -- 빈 암호 필드에 자리 비움자 사용 -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- 창 제목과 일치하는 항목을 찾을 수 없습니다: -- -- -- Auto-Type - KeePassXC -- 자동 입력 - KeePassXC -- -- -- Auto-Type -- 자동 입력 -- -- -- The Syntax of your Auto-Type statement is incorrect! -- 자동 입력 구문 문법이 잘못되었습니다! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- 자동 입력 명령에 긴 지연 시간이 포함되어 있습니다. 계속 진행하시겠습니까? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- 자동 입력 명령에 느린 키 입력이 포함되어 있습니다. 계속 진행하시겠습니까? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- 자동 입력 명령에 많이 반복되는 인자가 포함되어 있습니다. 계속 진행하시겠습니까? -- -- -- Permission Required -- 권한이 필요함 -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- 항목별 자동 입력을 사용하려면 KeePassXC에 접근성 권한을 허용해야 합니다. 권한을 이미 허용했다면 KeePassXC를 다시 시작해 보십시오. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- -- -- -- Sequence -- 순서 -- -- -- Default sequence -- 기본 순서 -- -- -- -- AutoTypeMatchModel -- -- Group -- 그룹 -- -- -- Title -- 제목 -- -- -- Username -- 사용자 이름 -- -- -- Sequence -- 순서 -- -- -- -- AutoTypeMatchView -- -- Copy &username -- 사용자 이름 복사(&U) -- -- -- Copy &password -- 암호 복사(&P) -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- 권한이 필요합니다. -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- 항목별 자동 입력을 사용하려면 KeePassXC에 접근성 및 화면 녹화 권한을 허용해야 합니다. 화면 녹화 권한은 창 제목과 항목을 찾기 위해서 필요합니다. 권한을 이미 허용했다면 KeePassXC를 다시 시작해 보십시오. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- 자동 입력 - KeePassXC -- -- -- Select entry to Auto-Type: -- 자동으로 입력할 항목 선택: -- -- -- Search... -- 찾기... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - 브라우저 접근 확인 -- -- -- %1 is requesting access to the following entries: -- %1에서 다음 항목에 접근하려고 합니다: -- -- -- Remember access to checked entries -- 선택한 항목 접근 여부 기억 -- -- -- Remember -- 기억 -- -- -- Allow access to entries -- 항목 접근 허용 -- -- -- Allow Selected -- 선택 허용 -- -- -- Deny All -- 모두 거부 -- -- -- Disable for this site -- 이 사이트에서는 거부 -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-브라우저 항목 저장 -- -- -- Ok -- 확인 -- -- -- Cancel -- 취소 -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- 여러 개의 데이터베이스를 열었습니다. --인증 정보를 저장할 데이터베이스를 선택하십시오. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: 새 키 연결 요청 -- -- -- Save and allow access -- 저장하고 접근 허용 -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: 기존 키를 덮어쓰시겠습니까? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- 이름이 "%1"인 공유 암호화 키가 이미 있습니다. --덮어쓰시겠습니까? -- -- -- KeePassXC: Update Entry -- KeePassXC: 항목 업데이트 -- -- -- Do you want to update the information in %1 - %2? -- %1 - %2의 정보를 업데이트하시겠습니까? -- -- -- Abort -- 중지 -- -- -- Converting attributes to custom data… -- 속성을 사용자 정의 데이터로 변환 중… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: KeePassHTTP 속성 변환됨 -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- %1개 항목의 속성을 변환했습니다. --키 %2개를 사용자 정의 데이터로 이동했습니다. -- -- -- Successfully moved %n keys to custom data. -- 키 %n개를 사용자 정의 데이터로 이동했습니다. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: KeePassHTTP 속성이 있는 항목을 찾을 수 없습니다! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- 현재 활성화된 데이터베이스에 KeePassHTTP 속성이 있는 항목이 없습니다. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: 레거시 브라우저 통합 설정 감지됨 -- -- -- KeePassXC: Create a new group -- KeePassXC: 새 그룹 생성 -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- 새 그룹 "%1"을(를) 생성하는 요청을 받았습니다. --이 그룹을 생성하시겠습니까? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- KeePassXC-브라우저 설정을 데이터베이스 설정으로 이동해야 합니다. --현재 브라우저 연결을 유지하려면 이 작업이 필요합니다. --존재하는 설정을 이전하시겠습니까? -- -- -- Don't show this warning again -- 더 이상 이 경고 표시하지 않기 -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- 다음 데이터베이스 연결 요청을 받았습니다: --%1 -- --데이터베이스 연결을 식별할 수 있는 이름이나 ID를 입력하십시오. 예: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- 대화 상자 -- -- -- This is required for accessing your databases with KeePassXC-Browser -- KeePassXC-브라우저에서 데이터베이스에 접근하려면 필요합니다 -- -- -- Enable browser integration -- 브라우저 통합 활성화 -- -- -- General -- 일반 -- -- -- Browsers installed as snaps are currently not supported. -- Snap으로 설치한 브라우저는 지원하지 않습니다. -- -- -- Enable integration for these browsers: -- 다음 브라우저에 통합: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- Edge(&E) -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor 브라우저 -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- 인증 정보가 필요할 때 알림 표시 -- -- -- Request to unlock the database if it is locked -- 데이터베이스가 잠겼을 때 잠금 해제 요청 -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- 같은 스키마(http://, https://, ftp://)를 사용하는 항목만 반환합니다. -- -- -- Match URL scheme (e.g., https://...) -- URL 스키마 일치(예: https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- 도메인이 일치하는 모든 항목 대신 지정한 URL과 일치하는 항목만 반환합니다. -- -- -- Return only best-matching credentials -- 가장 잘 일치하는 인증 정보 항목만 반환 -- -- -- Returns expired credentials. String [expired] is added to the title. -- 만료된 인증 정보도 반환합니다. 제목에 [만료됨] 문자열이 추가됩니다. -- -- -- Allow returning expired credentials -- 만료된 인증 정보 반환 허용 -- -- -- All databases connected to the extension will return matching credentials. -- 확장 기능에 연결된 모든 데이터베이스에서 일치하는 인증 정보를 반환합니다. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- 모든 열린 데이터베이스에서 저장된 인증 정보 검색 -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- 제목 순으로 일치하는 인증 정보 정렬 -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- 사용자 이름 순으로 일치하는 인증 정보 정렬 -- -- -- Advanced -- 고급 -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- 저장된 인증 정보에 접근하기 전에 묻지 않기 -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- 저장된 인증 정보를 업데이트하기 전에 묻지 않기 -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- HTTP Basic 인증 권한 묻지 않기 -- -- -- Automatically creating or updating string fields is not supported. -- 문자열 필드를 자동으로 만들거나 업데이트하는 것은 지원되지 않습니다. -- -- -- Return advanced string fields which start with "KPH: " -- "KPH: "로 시작하는 고급 문자열 필드 반환 -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- 레거시 KeePassHTTP 설정을 이전하는 대화 상자를 표시하지 않습니다. -- -- -- Do not prompt for KeePassHTTP settings migration. -- KeePassHTTP 설정 이전 묻지 않기 -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- 네이티브 메시징 스크립트에서 사용하는 KeePassXC 및 keepassxc-proxy 실행 파일 경로를 시작할 때 자동으로 업데이트합니다. -- -- -- Update native messaging manifest files at startup -- 시작할 때 네이티브 메시징 선언 파일 업데이트 -- -- -- Use a custom proxy location if you installed a proxy manually. -- 프록시를 직접 설치했으면 사용자 정의 프록시 위치를 지정하십시오. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- 사용자 정의 프록시 위치 사용: -- -- -- Custom proxy location field -- 사용자 정의 프록시 위치 필드 -- -- -- Browser for custom proxy file -- 사용자 정의 프록시 파일 찾아보기 -- -- -- Browse... -- Button for opening file dialog -- 찾아보기... -- -- -- Use a custom browser configuration location: -- 사용자 정의 브라우저 설정 위치 사용: -- -- -- Browser type: -- 브라우저 종류: -- -- -- Toolbar button style -- 도구 모음 단추 스타일 -- -- -- Config Location: -- 설정 위치: -- -- -- Custom browser location field -- 사용자 정의 브라우저 위치 필드 -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- 사용자 정의 브라우저 경로 찾아보기 -- -- -- Custom extension ID: -- 사용자 정의 확장 기능 ID: -- -- -- Custom extension ID -- 사용자 정의 확장 기능 ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Snap 샌드박스로 인하여 브라우저 확장 기능을 사용하려면 스크립트를 실행해야 합니다.<br />%1에서 스크립트를 확인할 수 있습니다 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- 브라우저 통합 기능을 사용하려면 KeePassXC-브라우저가 필요합니다.<br />%1, %2, %3, %4용으로 다운로드할 수 있습니다. -- -- -- Please see special instructions for browser extension use below -- 브라우저 확장 기능을 위한 추가 절차를 참조하십시오 -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>오류:</b> 사용자 정의 프록시 위치를 찾을 수 없습니다!<br/>브라우저 통합 기능을 사용하려면 프록시 프로그램이 필요합니다. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! -- -- -- Executable Files -- 실행 파일 -- -- -- All Files -- 모든 파일 -- -- -- Select custom proxy location -- 사용자 정의 프록시 위치 지정 -- -- -- Select native messaging host folder location -- 네이티브 메시징 호스트 폴더 위치 선택 -- -- -- -- CloneDialog -- -- Clone Options -- 복제 옵션 -- -- -- Append ' - Clone' to title -- 제목에 ' - 사본' 추가 -- -- -- Replace username and password with references -- 사용자 이름과 암호를 참조로 대체 -- -- -- Copy history -- 과거 기록 복사 -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV 필드 가져오기 -- -- -- filename -- 파일 이름 -- -- -- size, rows, columns -- 크기, 줄, 칸 -- -- -- Encoding -- 인코딩 -- -- -- Codec -- 인코딩 -- -- -- Text is qualified by -- 문자열 구분자 -- -- -- Fields are separated by -- 필드 구분자 -- -- -- Comments start with -- 주석 시작 글자 -- -- -- Consider '\' an escape character -- '\' 글자를 탈출 문자로 간주 -- -- -- Preview -- 미리 보기 -- -- -- Imported from CSV file -- CSV 파일에서 가져옴 -- -- -- Original data: -- 원본 데이터: -- -- -- Error -- 오류 -- -- -- Error(s) detected in CSV file! -- CSV 파일에 오류가 있습니다! -- -- -- [%n more message(s) skipped] -- [추가 메시지 %n개 건너뜀] -- -- -- CSV import: writer has errors: --%1 -- CSV 가져오기: 기록 도구에 오류가 있습니다: --%1 -- -- -- Text qualification -- 문자열 구분 -- -- -- Field separation -- 필드 구분 -- -- -- Number of header lines to discard -- 무시할 머리글 줄 수 -- -- -- CSV import preview -- CSV 가져오기 미리 보기 -- -- -- Column Association -- 열 연결 -- -- -- Last Modified -- 마지막 수정 -- -- -- Password -- 암호 -- -- -- Created -- 생성 -- -- -- Notes -- 메모 -- -- -- Title -- 제목 -- -- -- Group -- 그룹 -- -- -- URL -- URL -- -- -- Username -- 사용자 이름 -- -- -- Header lines skipped -- 머리글 줄 건너뜀 -- -- -- First line has field names -- 첫 줄에 필드 이름이 있음 -- -- -- Not Present -- 없음 -- -- -- Column %1 -- 열 %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- 아이콘 -- -- -- -- CsvParserModel -- -- %n column(s) -- %n칸 -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n바이트 -- -- -- %n row(s) -- %n줄 -- -- -- -- Database -- -- File %1 does not exist. -- 파일 %1이(가) 존재하지 않습니다. -- -- -- Unable to open file %1. -- 파일 %1을(를) 열 수 없습니다. -- -- -- Error while reading the database: %1 -- 데이터베이스 읽기 오류: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- 읽기 전용 모드로 파일을 열었기 때문에 저장할 수 없습니다. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- 키 변형 과정이 일어나지 않았습니다. 버그이므로 개발자에게 보고해 주십시오! -- -- -- %1 --Backup database located at %2 -- %1 --백업 데이터베이스 위치: %2 -- -- -- Could not save, database does not point to a valid file. -- 데이터베이스가 올바른 파일을 가리키지 않아서 저장할 수 없습니다. -- -- -- Could not save, database file is read-only. -- 데이터베이스 파일이 읽기 전용이어서 저장할 수 없습니다. -- -- -- Database file has unmerged changes. -- 데이터베이스 파일에 병합되지 않은 변경 사항이 있습니다. -- -- -- Recycle Bin -- 휴지통 -- -- -- Passwords -- Root group name -- 암호 -- -- -- Database save is already in progress. -- 데이터베이스 저장이 진행 중입니다. -- -- -- Could not save, database has not been initialized! -- 데이터베이스 파일이 초기화되지 않아서 저장할 수 없습니다! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- 데이터베이스 잠금 해제 - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- 키 파일: -- -- -- Refresh -- 새로 고침 -- -- -- Don't show this warning again -- 더 이상 이 경고 표시하지 않기 -- -- -- All files -- 모든 파일 -- -- -- Key files -- 키 파일 -- -- -- Select key file -- 키 파일 선택 -- -- -- Failed to open key file: %1 -- 키 파일을 열 수 없음: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC 데이터베이스 잠금 해제 -- -- -- Enter Password: -- 암호 입력: -- -- -- Password field -- 암호 필드 -- -- -- Hardware key slot selection -- 하드웨어 키 슬롯 선택 -- -- -- Browse for key file -- 키 파일 찾아보기 -- -- -- Browse... -- 찾아보기... -- -- -- Refresh hardware tokens -- 하드웨어 토큰 새로 고침 -- -- -- Hardware Key: -- 하드웨어 키: -- -- -- Hardware key help -- 하드웨어 키 도움말 -- -- -- TouchID for Quick Unlock -- 빠른 잠금 해제용 Touch ID -- -- -- Unlock failed and no password given -- 잠금 해제 실패, 지정한 암호 없음 -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- 데이터베이스 잠금 해제가 실패했고 암호를 입력하지 않았습니다. --"빈" 암호로 다시 시도하시겠습니까? -- --이 오류가 표시되지 않도록 하려면 "데이터베이스 설정/보안"에서 암호를 초기화해야 합니다. -- -- -- Retry with empty password -- 빈 암호로 다시 시도 -- -- -- Enter Additional Credentials (if any): -- 추가 인증 정보 입력(해당되는 경우): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p><strong>YubiKey</strong>나 <strong>OnlyKey</strong>와 같은 하드웨어 키의 슬롯을 HMAC-SHA1로 설정 시 사용할 수 있습니다.</p> --<p>더 많은 정보를 보려면 누르십시오...</p> -- -- -- Key file help -- 키 파일 도움말 -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- 데이터베이스 파일은 키 파일로 사용할 수 없습니다. -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- 데이터베이스 파일을 자기 자신의 키 파일로 사용할 수 없습니다. --키 파일이 없는 경우, 해당 필드를 비워두십시오. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>암호 외에도 비밀 파일을 사용하여 데이터베이스 보안을 강화할 수 있습니다. 이 파일은 데이터베이스 보안 설정에서 생성할 수 있습니다.</p><p>이 파일은 *.kdbx 데이터베이스 파일과 <strong>별개의 파일</strong>입니다!<br>키 파일이 없다면 이 필드를 비워 두십시오.</p><p>자세한 정보를 보려면 누르십시오...</p> -- -- -- Key file to unlock the database -- 데이터베이스 잠금 해제 키 파일 -- -- -- Please touch the button on your YubiKey! -- YubiKey의 단추를 누르십시오! -- -- -- Detecting hardware keys… -- 하드웨어 키 인식 중... -- -- -- No hardware keys detected -- 인식된 하드웨어 키 없음 -- -- -- Select hardware key… -- 하드웨어 키 선택... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- 암호 -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- 고급 설정 -- -- -- General -- 일반 -- -- -- Security -- 보안 -- -- -- Encryption Settings -- 암호화 설정 -- -- -- Browser Integration -- 브라우저 통합 -- -- -- Database Credentials -- 데이터베이스 인증 정보 -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-브라우저 설정 -- -- -- Stored keys -- 저장된 키 -- -- -- Remove -- 삭제 -- -- -- Delete the selected key? -- 선택한 키를 삭제하시겠습니까? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- 선택한 키를 삭제하시겠습니까? --브라우저 플러그인에 연결하지 못할 수도 있습니다. -- -- -- Key -- -- -- -- Value -- -- -- -- Enable Browser Integration to access these settings. -- 이 설정을 변경하려면 브라우저 통합을 활성화하십시오. -- -- -- Disconnect all browsers -- 모든 브라우저 연결 끊기 -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- 모든 브라우저 연결을 끊으시겠습니까? --브라우저 플러그인에 연결하지 못할 수도 있습니다. -- -- -- KeePassXC: No keys found -- KeePassXC: 키를 찾을 수 없음 -- -- -- No shared encryption keys found in KeePassXC settings. -- KeePassXC 설정에서 공유된 암호화 키를 찾을 수 없습니다. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: 데이터베이스에서 키 삭제됨 -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- KeePassXC 설정에서 암호화 키 %n개를 삭제했습니다. -- -- -- Forget all site-specific settings on entries -- 항목의 모든 사이트별 설정 삭제 -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- 모든 항목의 사이트별 설정을 삭제하시겠습니까? --항목에 접근할 권한이 취소됩니다. -- -- -- Removing stored permissions… -- 저장된 권한 삭제 중... -- -- -- Abort -- 중지 -- -- -- KeePassXC: Removed permissions -- KeePassXC: 권한 삭제됨 -- -- -- Successfully removed permissions from %n entry(s). -- 항목 %n개에서 권한을 삭제했습니다. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: 권한이 있는 항목을 찾을 수 없음! -- -- -- The active database does not contain an entry with permissions. -- 활성 데이터베이스에 권한이 부여된 항목이 없습니다. -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP 속성을 사용자 정의 데이터로 이동 -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- 모든 레거시 브라우저 통합 데이터를 최신 표준으로 이전하시겠습니까? --브라우저 통합 플러그인과 호환성을 유지하기 위해서 필요합니다. -- -- -- Stored browser keys -- 저장된 브라우저 키 -- -- -- Remove selected key -- 선택한 키 삭제 -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- KeePassHTTP 속성을 사용자 정의 KeePassXC-브라우저 데이터로 이동 -- -- -- Refresh database root group ID -- 데이터베이스 루트 그룹 ID 새로 고침 -- -- -- Created -- 생성 -- -- -- Refresh database ID -- 데이터베이스 ID 새로 고침 -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- 데이터베이스 ID를 새로 고치시겠습니까? --데이터베이스가 다른 데이터베이스의 복제본이고 브라우저 확장 기능에서 연결할 수 없을 때에만 사용하십시오. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- 추가 보호 추가... -- -- -- No password set -- 암호가 설정되지 않았음 -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- 경고! 암호를 설정하지 않았습니다. 데이터베이스 암호를 설정하지 않는 것은 추천하지 않습니다! -- --암호를 지정하지 않고 계속 진행하시겠습니까? -- -- -- Continue without password -- 암호 없이 계속 -- -- -- No encryption key added -- 암호화 키가 추가되지 않았음 -- -- -- You must add at least one encryption key to secure your database! -- 데이터베이스를 보호할 암호화 키를 최소 하나 추가해야 합니다! -- -- -- Unknown error -- 알 수 없는 오류 -- -- -- Failed to change database credentials -- 데이터베이스 인증 정보를 변경할 수 없음 -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- 암호화 알고리즘: -- -- -- AES: 256 Bit (default) -- AES: 256비트(기본값) -- -- -- Twofish: 256 Bit -- Twofish: 256비트 -- -- -- Key Derivation Function: -- 키 유도 함수: -- -- -- Transform rounds: -- 변환 횟수: -- -- -- Memory Usage: -- 메모리 사용량: -- -- -- Parallelism: -- 스레드 수: -- -- -- Decryption Time: -- 복호화 시간: -- -- -- ?? s -- ??초 -- -- -- Change -- 변경 -- -- -- Higher values offer more protection, but opening the database will take longer. -- 시간을 더 늘리면 보호 정도를 높일 수 있지만 데이터베이스를 여는 데 더 오랜 시간이 걸릴 것입니다. -- -- -- Database format: -- 데이터베이스 형식: -- -- -- This is only important if you need to use your database with other programs. -- 데이터베이스를 다른 프로그램에서 사용할 일이 있을 때 중요합니다. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0(추천) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- 변경되지 않음 -- -- -- Number of rounds too high -- Key transformation rounds -- 라운드 수가 너무 높음 -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Argon2 키 변형 라운드 수가 너무 높습니다. -- --해당 수치를 사용하면 데이터베이스를 열 때 수 시간이나 수 일 이상 소요될 수 있습니다! -- -- -- Understood, keep number -- 이해함, 숫자 유지 -- -- -- Cancel -- 취소 -- -- -- Number of rounds too low -- Key transformation rounds -- 라운드 수가 너무 낮음 -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- AES-KDF 키 변형 라운드 수가 너무 낮습니다. -- --해당 수치를 계속 사용하면 데이터베이스의 보안을 쉽게 해제할 수 있습니다! -- -- -- KDF unchanged -- 키 유도 함수 변경되지 않음 -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- 새로운 키 유도 함수 인자로 키를 변경할 수 없어서 키 유도 함수를 변경하지 않았습니다. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- 개 스레드 -- -- -- Change existing decryption time -- 기존 복호화 시간 변경 -- -- -- Decryption time in seconds -- 초 단위의 복호화 시간 -- -- -- Database format -- 데이터베이스 형식 -- -- -- Encryption algorithm -- 암호화 알고리즘 -- -- -- Key derivation function -- 키 유도 함수 -- -- -- Transform rounds -- 변환 횟수 -- -- -- Memory usage -- 메모리 사용 -- -- -- Parallelism -- 병렬화 -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ?초 -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- 내보낼 항목 -- -- -- Don't expose this database -- 이 데이터베이스 내보내지 않기 -- -- -- Expose entries under this group: -- 다음 그룹에 속한 항목 내보내기: -- -- -- Enable Secret Service to access these settings. -- 이 설정에 접근하려면 비밀 서비스를 활성화하십시오. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- 데이터베이스 메타데이터 -- -- -- Database name: -- 데이터베이스 이름: -- -- -- Database description: -- 데이터베이스 설명: -- -- -- Default username: -- 기본 사용자 이름: -- -- -- History Settings -- 과거 기록 설정 -- -- -- Max. history items: -- 최대 과거 항목 수: -- -- -- Max. history size: -- 최대 과거 항목 크기: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- 휴지통 사용 -- -- -- Additional Database Settings -- 추가 데이터베이스 설정 -- -- -- Database name field -- 데이터베이스 이름 필드 -- -- -- Database description field -- 데이터베이스 설명 필드 -- -- -- Default username field -- 기본 사용자 이름 필드 -- -- -- Maximum number of history items per entry -- 항목당 최대 과거 기록 개수 -- -- -- Maximum size of history per entry -- 항목당 최대 과거 기록 크기 -- -- -- Delete Recycle Bin -- 휴지통 지우기 -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- 현재 휴지통과 포함된 모든 내용을 삭제하시겠습니까? --이 작업은 취소할 수 없습니다. -- -- -- (old) -- (이전) -- -- -- Enable compression (recommended) -- 압축 사용(추천) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- 공유 -- -- -- Breadcrumb -- 단계 -- -- -- Type -- 형식 -- -- -- Path -- 경로 -- -- -- Last Signer -- 마지막 서명자 -- -- -- Certificates -- 인증서 -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- 데이터베이스 이름: -- -- -- Description: -- 설명: -- -- -- Database name field -- 데이터베이스 이름 필드 -- -- -- Database description field -- 데이터베이스 설명 필드 -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 데이터베이스 -- -- -- All files -- 모든 파일 -- -- -- Open database -- 데이터베이스 열기 -- -- -- CSV file -- CSV 파일 -- -- -- Merge database -- 데이터베이스 합치기 -- -- -- Open KeePass 1 database -- KeePass 1 데이터베이스 열기 -- -- -- KeePass 1 database -- KeePass 1 데이터베이스 -- -- -- Export database to CSV file -- 데이터베이스를 CSV 파일로 내보내기 -- -- -- Writing the CSV file failed. -- CSV 파일에 기록할 수 없습니다. -- -- -- Database creation error -- Database creation error -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- 이 생성된 데이터베이스에 키나 KDF가 없어서 저장하지 않을 것입니다. --버그이므로 개발자에게 보고해 주십시오. -- -- -- Select CSV file -- CSV 파일 선택 -- -- -- New Database -- 새 데이터베이스 -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [새 데이터베이스] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [잠김] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [읽기 전용] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- %1을(를) 열 수 없습니다. 더 이상 존재하지 않거나 접근할 수 없습니다. -- -- -- Export database to HTML file -- 데이터베이스를 HTML 파일로 내보내기 -- -- -- HTML file -- HTML 파일 -- -- -- Writing the HTML file failed. -- HTML 파일에 쓸 수 없습니다. -- -- -- Export Confirmation -- 내보내기 확인 -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- 데이터베이스를 암호화되지 않은 파일로 내보냅니다. 암호와 기타 민감 정보를 노출시킬 수 있습니다! 계속 진행하시겠습니까? -- -- -- Open OPVault -- OPVault 열기 -- -- -- -- DatabaseWidget -- -- Searching... -- 찾는 중... -- -- -- Do you really want to delete the entry "%1" for good? -- 정말 항목 "%1"을(를) 삭제하시겠습니까? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- 항목 "%1"을(를) 휴지통으로 이동하시겠습니까? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- 항목 %n개를 휴지통으로 이동하시겠습니까? -- -- -- Execute command? -- 명령을 실행하시겠습니까? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- 다음 명령을 실행하시겠습니까?<br><br>%1<br> -- -- -- Remember my choice -- 이 선택 기억하기 -- -- -- Do you really want to delete the group "%1" for good? -- 정말 그룹 "%1"을(를) 삭제하시겠습니까? -- -- -- No current database. -- 현재 데이터베이스가 없습니다. -- -- -- No source database, nothing to do. -- 원본 데이터베이스가 없습니다. -- -- -- Search Results (%1) -- 검색 결과(%1) -- -- -- No Results -- 결과 없음 -- -- -- File has changed -- 파일 변경됨 -- -- -- The database file has changed. Do you want to load the changes? -- 데이터베이스 파일이 변경되었습니다. 변경 사항을 불러오시겠습니까? -- -- -- Merge Request -- 요청 합치기 -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- 데이터베이스 파일이 변경되었고 저장하지 않은 변경 사항이 있습니다. --변경 사항을 합치겠습니까? -- -- -- Empty recycle bin? -- 휴지통을 비우시겠습니까? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- 휴지통에 있는 항목을 영원히 삭제하시겠습니까? -- -- -- Do you really want to delete %n entry(s) for good? -- 항목 %n개를 영원히 삭제하시겠습니까? -- -- -- Delete entry(s)? -- 항목을 삭제하시겠습니까? -- -- -- Move entry(s) to recycle bin? -- 항목을 휴지통으로 이동하시겠습니까? -- -- -- Lock Database? -- 데이터베이스를 잠그시겠습니까? -- -- -- You are editing an entry. Discard changes and lock anyway? -- 항목을 편집하고 있습니다. 변경 사항을 무시하고 잠그시겠습니까? -- -- -- "%1" was modified. --Save changes? -- "%1"이(가) 변경되었습니다. 저장하시겠습니까? -- -- -- Database was modified. --Save changes? -- 데이터베이스가 변경되었습니다. --저장하시겠습니까? -- -- -- Save changes? -- 변경 사항 저장 확인? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- 자동으로 다시 불러오려는 중 새 데이터베이스 파일을 열 수 없었습니다. --오류: %1 -- -- -- Disable safe saves? -- 안전 저장을 비활성화 하시겠습니까? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC에서 데이터베이스를 여러 번 저장하려고 시도했으나 실패했습니다. 파일 동기화 서비스에서 데이터베이스 파일을 잠근 것 같습니다. --안전 저장을 비활성화 한 다음 다시 시도하시겠습니까? -- -- -- Passwords -- 암호 -- -- -- Save database as -- 다른 이름으로 데이터베이스 저장 -- -- -- KeePass 2 Database -- KeePass 2 데이터베이스 -- -- -- Replace references to entry? -- 항목에 대한 참조를 변경하시겠습니까? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- 항목 "%1"에 참조 %2개가 있습니다. 해당 참조를 값으로 덮어 쓰거나, 항목을 건너뛰거나, 그래도 삭제하시겠습니까? -- -- -- Delete group -- 그룹 삭제 -- -- -- Move group to recycle bin? -- 그룹을 휴지통으로 이동하시겠습니까? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- 그룹 "%1"을(를) 휴지통으로 이동하시겠습니까? -- -- -- Successfully merged the database files. -- 데이터베이스 파일을 합쳤습니다. -- -- -- Database was not modified by merge operation. -- 수정 작업으로 데이터베이스가 변경되지 않았습니다. -- -- -- Shared group... -- 공유된 그룹... -- -- -- Writing the database failed: %1 -- 데이터베이스에기록할 수 없음: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- 데이터베이스가 읽기 전용 모드로 열렸습니다. 자동 저장을 비활성화합니다. -- -- -- Save database backup -- 데이터베이스 백업 저장 -- -- -- Could not find database file: %1 -- 데이터베이스 파일을 찾을 수 없음: %1 -- -- -- -- EditEntryWidget -- -- Entry -- 항목 -- -- -- Advanced -- 고급 -- -- -- Icon -- 아이콘 -- -- -- Auto-Type -- 자동 입력 -- -- -- Properties -- 속성 -- -- -- History -- 과거 기록 -- -- -- SSH Agent -- SSH 에이전트 -- -- -- n/a -- 없음 -- -- -- (encrypted) -- (암호화됨) -- -- -- Select private key -- 비밀 키 선택 -- -- -- Entry history -- 항목 과거 기록 -- -- -- Add entry -- 항목 추가 -- -- -- Edit entry -- 항목 편집 -- -- -- New attribute -- 새 속성 -- -- -- Are you sure you want to remove this attribute? -- 이 속성을 삭제하시겠습니까? -- -- -- Tomorrow -- 내일 -- -- -- %n week(s) -- %n주 -- -- -- %n month(s) -- %n개월 -- -- -- Entry updated successfully. -- 항목을 업데이트했습니다. -- -- -- New attribute %1 -- 새 속성 %1 -- -- -- %n year(s) -- %n년 -- -- -- Confirm Removal -- 삭제 확인 -- -- -- Browser Integration -- 브라우저 통합 -- -- -- <empty URL> -- <빈 URL> -- -- -- Are you sure you want to remove this URL? -- 이 URL을 삭제하시겠습니까? -- -- -- Reveal -- 보이기 -- -- -- Hide -- 숨기기 -- -- -- Unsaved Changes -- 저장하지 않은 변경 사항 -- -- -- Would you like to save changes to this entry? -- 이 항목의 변경 사항을 저장하시겠습니까? -- -- -- [PROTECTED] Press Reveal to view or edit -- [보호됨] 보거나 편집하려면 "보이기"를 누르십시오 -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- 추가 속성 -- -- -- Add -- 추가 -- -- -- Remove -- 삭제 -- -- -- Edit Name -- 이름 편집 -- -- -- Protect -- 보호 -- -- -- Reveal -- 보이기 -- -- -- Attachments -- 첨부 -- -- -- Foreground Color: -- 글자색: -- -- -- Background Color: -- 배경색: -- -- -- Attribute selection -- 속성 선택 -- -- -- Attribute value -- 속성 값 -- -- -- Add a new attribute -- 새 속성 추가 -- -- -- Remove selected attribute -- 선택한 속성 삭제 -- -- -- Edit attribute name -- 속성 이름 편집 -- -- -- Toggle attribute protection -- 속성 보호 전환 -- -- -- Show a protected attribute -- 보호된 속성 표시 -- -- -- Foreground color selection -- 글자색 선택 -- -- -- Background color selection -- 배경색 선택 -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>이 옵션을 사용하면 기준을 만족하지 못하더라도(예: 암호 엔트로피나 재사용) 안전성 검사나 HIBP와 같은 보고서에 이 항목을 표시하지 않습니다. 암호에 사용할 수 있는 문자열에 제약 사항이 있다면(예: 4자리 PIN) 이 옵션을 선택하여 보고서에 표시되지 않도록 할 수 있습니다.</p></body></html> -- -- -- Exclude from database reports -- 데이터베이스 보고서에서 제외 -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- 이 항목 자동 입력 사용 -- -- -- Window Associations -- 창 연결 -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- 창 제목: -- -- -- Use a specific sequence for this association: -- 이 조합에 지정된 순서 사용: -- -- -- Custom Auto-Type sequence -- 사용자 정의 자동 입력 순서 -- -- -- Open Auto-Type help webpage -- 자동 입력 도움말 웹 페이지 열기 -- -- -- Existing window associations -- 기존 창 연결 -- -- -- Add new window association -- 새 창 연결 추가 -- -- -- Remove selected window association -- 선택한 창 연결 삭제 -- -- -- You can use an asterisk (*) to match everything -- 모든 것과 일치하려면 별표(*)를 사용하십시오 -- -- -- Set the window association title -- 창 연결 제목 설정 -- -- -- You can use an asterisk to match everything -- 모든 것과 일치하려면 별표(*)를 사용하십시오 -- -- -- Custom Auto-Type sequence for this window -- 이 창의 사용자 정의 자동 입력 순서 -- -- -- Inherit default Auto-Type sequence from the group -- 그룹의 기본 자동 입력 순서 사용 -- -- -- Use custom Auto-Type sequence: -- 사용자 정의 자동 입력 순서 사용: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- 이 설정은 브라우저 확장 기능에서 해당 항목을 처리하는 방법을 변경합니다. -- -- -- General -- 일반 -- -- -- Skip Auto-Submit for this entry -- 이 항목 자동 제출 건너뛰기 -- -- -- Hide this entry from the browser extension -- 이 항목을 브라우저 확장 기능에서 숨기기 -- -- -- Additional URL's -- 추가 URL -- -- -- Add -- 추가 -- -- -- Remove -- 삭제 -- -- -- Edit -- 편집 -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- 웹 브라우저의 HTTP 인증 대화 상자에만 이 설정을 사용합니다. 활성화하면 일반 로그인 폼 선택 목록에 이 항목을 표시하지 않습니다. -- -- -- Use this entry only with HTTP Basic Auth -- HTTP Basic 인증에만 이 항목 사용 -- -- -- -- EditEntryWidgetHistory -- -- Show -- 표시 -- -- -- Restore -- 복원 -- -- -- Delete -- 삭제 -- -- -- Delete all -- 모두 삭제 -- -- -- Entry history selection -- 항목 과거 기록 선택 -- -- -- Show entry at selected history state -- 선택한 과거 기록 시점에서의 항목 표시 -- -- -- Restore entry to selected history state -- 선택한 과거 기록 시점으로 항목 되돌리기 -- -- -- Delete selected history state -- 선택한 과거 기록 시점 삭제 -- -- -- Delete all history -- 모든 과거 기록 삭제 -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- 암호: -- -- -- Title: -- 제목: -- -- -- Presets -- 사전 설정 -- -- -- Toggle the checkbox to reveal the notes section. -- 메모 부분을 표시하려면 체크 상자를 전환하십시오. -- -- -- Username: -- 사용자 이름: -- -- -- Url field -- URL 필드 -- -- -- Download favicon for URL -- URL의 파비콘 다운로드 -- -- -- Password field -- 암호 필드 -- -- -- Toggle notes visible -- 메모 표시 여부 전환 -- -- -- Expiration field -- 만료 필드 -- -- -- Expiration Presets -- 만료 사전 설정 -- -- -- Expiration presets -- 만료 사전 설정 -- -- -- Notes field -- 메모 필드 -- -- -- Title field -- 제목 필드 -- -- -- Username field -- 사용자 이름 필드 -- -- -- Toggle expiration -- 만료 여부 전환 -- -- -- Notes: -- 메모: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- 만료: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- -- -- -- Remove key from agent after -- 다음 시간 이후에 에이전트에서 키 삭제 -- -- -- seconds -- -- -- -- Fingerprint -- 지문 -- -- -- Remove key from agent when database is closed/locked -- 데이터베이스를 잠그거나 닫을 때 에이전트에서 키 삭제 -- -- -- Public key -- 공개 키 -- -- -- Add key to agent when database is opened/unlocked -- 데이터베이스를 열거나 잠금 해제할 때 에이전트에 키 추가 -- -- -- Comment -- 주석 -- -- -- Decrypt -- 복호화 -- -- -- n/a -- 없음 -- -- -- Copy to clipboard -- 클립보드에 복사 -- -- -- Private key -- 비밀 키 -- -- -- External file -- 외부 파일 -- -- -- Browse... -- Button for opening file dialog -- 찾아보기... -- -- -- Attachment -- 첨부 -- -- -- Add to agent -- 에이전트에 추가 -- -- -- Remove from agent -- 에이전트에서 삭제 -- -- -- Require user confirmation when this key is used -- 이 키를 사용할 때 사용자에게 묻기 -- -- -- Remove key from agent after specified seconds -- 다음 시간 이후에 에이전트에서 키 삭제 -- -- -- Browser for key file -- 키 파일 찾아보기 -- -- -- External key file -- 외부 키 파일 -- -- -- Select attachment file -- 첨부 파일 선택 -- -- -- -- EditGroupWidget -- -- Group -- 그룹 -- -- -- Icon -- 아이콘 -- -- -- Properties -- 속성 -- -- -- Add group -- 그룹 추가 -- -- -- Edit group -- 그룹 편집 -- -- -- Enable -- 활성화 -- -- -- Disable -- 비활성화 -- -- -- Inherit from parent group (%1) -- 부모 그룹에서 상속(%1) -- -- -- Entry has unsaved changes -- 항목에 저장되지 않은 변경 사항이 있음 -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- 형식: -- -- -- Path: -- 경로: -- -- -- Password: -- 암호: -- -- -- Inactive -- 비활성 -- -- -- KeeShare unsigned container -- KeeShare 서명되지 않은 컨테이너 -- -- -- KeeShare signed container -- KeeShare 서명된 컨테이너 -- -- -- Select import source -- 가져올 원본 선택 -- -- -- Select export target -- 내보낼 대상 선택 -- -- -- Select import/export file -- 가져올/내보낼 파일 선택 -- -- -- Clear -- 비우기 -- -- -- Import -- 가져오기 -- -- -- Export -- 내보내기 -- -- -- Synchronize -- 동기화 -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- KeePassXC 현재 버전에서 현재 컨테이너 형식을 공유할 수 없습니다. --지원하는 확장 형식: %1. -- -- -- %1 is already being exported by this database. -- 이 데이터베이스에서 %1을(를) 이미 내보내고 있습니다. -- -- -- %1 is already being imported by this database. -- 이 데이터베이스에서 %1을(를) 이미 가져오고 있습니다. -- -- -- %1 is being imported and exported by different groups in this database. -- 이 데이터베이스의 다른 그룹에서 %1을(를) 가져오거나 내보내고 있습니다. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare가 비활성화되어 있습니다. 프로그램 설정에서 가져오기/내보내기를 활성화할 수 있습니다. -- -- -- Database export is currently disabled by application settings. -- 프로그램 설정에서 데이터베이스 내보내기가 비활성화되어 있습니다. -- -- -- Database import is currently disabled by application settings. -- 프로그램 설정에서 데이터베이스 가져오기가 비활성화되어 있습니다. -- -- -- Sharing mode field -- 공유 모드 필드 -- -- -- Path to share file field -- 공유할 파일 경로 필드 -- -- -- Password field -- 암호 필드 -- -- -- Clear fields -- 필드 비우기 -- -- -- Browse for share file -- 공유 파일 찾아보기 -- -- -- Browse... -- 찾아보기... -- -- -- -- EditGroupWidgetMain -- -- Name field -- 이름 필드 -- -- -- Notes field -- 메모 필드 -- -- -- Toggle expiration -- 만료 여부 전환 -- -- -- Auto-Type toggle for this and sub groups -- 이 그룹과 하위 그룹의 자동 입력 전환 -- -- -- Expiration field -- 만료 필드 -- -- -- Search toggle for this and sub groups -- 이 그룹과 하위 그룹의 검색 전환 -- -- -- Default auto-type sequence field -- 기본 자동 입력 순서 필드 -- -- -- Expires: -- 만료: -- -- -- Use default Auto-Type sequence of parent group -- 부모 그룹의 기본 자동 입력 순서 사용 -- -- -- Auto-Type: -- 자동 입력: -- -- -- Search: -- 찾기: -- -- -- Notes: -- 메모: -- -- -- Name: -- 이름: -- -- -- Set default Auto-Type sequence -- 기본 자동 입력 순서 설정 -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- 사용자 정의 아이콘 추가 -- -- -- Delete custom icon -- 사용자 정의 아이콘 삭제 -- -- -- Download favicon -- 파비콘 다운로드 -- -- -- Unable to fetch favicon. -- 파비콘을 다운로드할 수 없습니다. -- -- -- Images -- 그림 -- -- -- All files -- 모든 파일 -- -- -- Confirm Delete -- 삭제 확인 -- -- -- Select Image(s) -- 이미지 선택 -- -- -- Successfully loaded %1 of %n icon(s) -- 아이콘 %n개 중 %1개 불러옴 -- -- -- No icons were loaded -- 아이콘을 불러오지 않았음 -- -- -- %n icon(s) already exist in the database -- 데이터베이스에 아이콘 %n개가 이미 존재함 -- -- -- The following icon(s) failed: -- 다음 아이콘에서 오류가 발생했습니다: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- %n개 항목에서 이 아이콘을 사용하고 있으며 기본 아이콘으로 대체됩니다. 삭제하시겠습니까? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- 도구 -> 설정 -> 보안에서 DuckDuckGo 웹 사이트 아이콘 서비스를 활성화할 수 있습니다 -- -- -- Download favicon for URL -- URL의 파비콘 다운로드 -- -- -- Apply selected icon to subgroups and entries -- 선택한 아이콘을 하위 그룹과 항목에 적용 -- -- -- Also apply to child groups -- 하위 그룹에도 적용 -- -- -- Also apply to child entries -- 하위 항목에도 적용 -- -- -- Also apply to all children -- 모든 하위 항목에도 적용 -- -- -- Existing icon selected. -- 기존 아이콘을 선택했습니다. -- -- -- Use default icon -- 기본 아이콘 사용 -- -- -- Use custom icon -- 사용자 정의 아이콘 사용 -- -- -- Apply icon to... -- 다음에 아이콘 적용... -- -- -- Apply to this group only -- 이 그룹에만 적용 -- -- -- -- EditWidgetProperties -- -- Created: -- 만든 날짜: -- -- -- Modified: -- 수정한 날짜: -- -- -- Accessed: -- 접근한 날짜: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- 플러그인 데이터 -- -- -- Remove -- 삭제 -- -- -- Delete plugin data? -- 플러그인 데이터를 삭제하시겠습니까? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- 선택한 플러그인 데이터를 삭제하시겠습니까? --영향받는 플러그인이 제대로 동작하지 않을 수도 있습니다. -- -- -- Key -- -- -- -- Value -- -- -- -- Datetime created -- 만든 날짜 -- -- -- Datetime modified -- 수정한 날짜 -- -- -- Datetime accessed -- 접근한 날짜 -- -- -- Unique ID -- 고유 ID -- -- -- Plugin data -- 플러그인 데이터 -- -- -- Remove selected plugin data -- 선택한 플러그인 데이터 삭제 -- -- -- -- Entry -- -- %1 - Clone -- %1 - 사본 -- -- -- -- EntryAttachmentsModel -- -- Name -- 이름 -- -- -- Size -- 크기 -- -- -- -- EntryAttachmentsWidget -- -- Form -- -- -- -- Add -- 추가 -- -- -- Remove -- 삭제 -- -- -- Open -- 열기 -- -- -- Save -- 저장 -- -- -- Select files -- 파일 선택 -- -- -- Are you sure you want to remove %n attachment(s)? -- 첨부 항목 %n개를 삭제하시겠습니까? -- -- -- Save attachments -- 첨부 항목 저장 -- -- -- Unable to create directory: --%1 -- 디렉터리를 만들 수 없음: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- 기존 파일 "%1"의 내용을 첨부 항목으로 덮어 쓰시겠습니까? -- -- -- Confirm overwrite -- 덮어쓰기 확인 -- -- -- Unable to save attachments: --%1 -- 첨부 항목을 저장할 수 없음: --%1 -- -- -- Unable to open attachment: --%1 -- 첨부 항목을 열 수 없음: --%1 -- -- -- Unable to open attachments: --%1 -- 첨부 항목을 열 수 없음: --%1 -- -- -- Confirm remove -- 삭제 확인 -- -- -- Unable to open file(s): --%1 -- 파일을 열 수 없음: --%1 -- -- -- Attachments -- 첨부 -- -- -- Add new attachment -- 새 첨부 파일 추가 -- -- -- Remove selected attachment -- 선택한 첨부 파일 삭제 -- -- -- Open selected attachment -- 선택한 첨부 파일 열기 -- -- -- Save selected attachment to disk -- 선택한 첨부 파일 저장 -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- 파일 %1이(가) 큽니다(%2 MB). --데이터베이스 크기가 커질 수도 있으며 성능이 저하될 수도 있습니다. -- --이 파일을 추가하시겠습니까? -- -- -- Confirm Attachment -- 첨부 확인 -- -- -- -- EntryAttributesModel -- -- Name -- 이름 -- -- -- -- EntryHistoryModel -- -- Last modified -- 마지막 수정 -- -- -- Title -- 제목 -- -- -- Username -- 사용자 이름 -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- 참조: -- -- -- Group -- 그룹 -- -- -- Title -- 제목 -- -- -- Username -- 사용자 이름 -- -- -- URL -- URL -- -- -- Never -- 하지 않음 -- -- -- Password -- 암호 -- -- -- Notes -- 메모 -- -- -- Expires -- 만료 기간 -- -- -- Created -- 생성 -- -- -- Modified -- 수정됨 -- -- -- Accessed -- 접근함 -- -- -- Attachments -- 첨부 -- -- -- Size -- 크기 -- -- -- Group name -- 그룹 이름 -- -- -- Entry title -- 항목 이름 -- -- -- Entry notes -- 항목 메모 -- -- -- Entry expires at -- 항목 만료 시간 -- -- -- Creation date -- 만든 날짜 -- -- -- Last modification date -- 마지막 수정한 날짜 -- -- -- Last access date -- 마지막 접근한 날짜 -- -- -- Attached files -- 첨부된 파일 -- -- -- Entry size -- 항목 크기 -- -- -- Has attachments -- 첨부 항목 있음 -- -- -- Has TOTP one-time password -- TOTP 일회용 암호 있음 -- -- -- -- EntryPreviewWidget -- -- Close -- 닫기 -- -- -- General -- 일반 -- -- -- Username -- 사용자 이름 -- -- -- Password -- 암호 -- -- -- Expiration -- 만료 -- -- -- URL -- URL -- -- -- Attributes -- 속성 -- -- -- Attachments -- 첨부 -- -- -- Notes -- 메모 -- -- -- Autotype -- 자동 입력 -- -- -- Window -- -- -- -- Sequence -- 순서 -- -- -- Searching -- 찾기 -- -- -- Search -- 찾기 -- -- -- Clear -- 비우기 -- -- -- Never -- 하지 않음 -- -- -- [PROTECTED] -- [보호됨] -- -- -- Enabled -- 사용함 -- -- -- Disabled -- 사용 안함 -- -- -- Share -- 공유 -- -- -- Display current TOTP value -- 현재 TOTP 값 표시 -- -- -- Advanced -- 고급 -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- 잘못된 URL -- -- -- -- EntryView -- -- Fit to window -- 창에 맞춤 -- -- -- Fit to contents -- 내용에 맞춤 -- -- -- Reset to defaults -- 기본값으로 복원 -- -- -- Has attachments -- Entry attachment icon toggle -- 첨부 있음 -- -- -- Has TOTP -- Entry TOTP icon toggle -- TOTP 있음 -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- %3이(가) 데이터베이스 "%2"의 항목 "%1"을(를) 사용함 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- %1에 DBus 서비스를 등록할 수 없습니다.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %1에서 항목 %n개 사용함 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- 파일 이름 -- -- -- Group -- 그룹 -- -- -- Manage -- 관리 -- -- -- Unlock to show -- 잠금 해제해서 보기 -- -- -- None -- 없음 -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- 프로그램 -- -- -- Manage -- 관리 -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo 비밀 서비스:</b> %1 -- -- -- Unknown -- Unknown PID -- 알 수 없음 -- -- -- Unknown -- Unknown executable path -- 알 수 없음 -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, 실행 파일: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- 다른 비밀 서비스(%1)가 실행 중입니다.<br/>비밀 서비스 통합을 다시 활성화하기 전에 정지/삭제하십시오. -- -- -- -- Group -- -- [empty] -- group has no children -- [비어 있음] -- -- -- -- HibpDownloader -- -- Online password validation failed -- 온라인 암호 검증 실패 -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- 파비콘 다운로드 -- -- -- Cancel -- 취소 -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- 다운로드에 문제가 있나요? --프로그램 설정의 보안 부분에서 DuckDuckGo 웹 사이트 아이콘 서비스를 활성화할 수 있습니다. -- -- -- Close -- 닫기 -- -- -- URL -- URL -- -- -- Status -- 상태 -- -- -- Please wait, processing entry list... -- 기다려 주십시오. 항목 목록 처리 중... -- -- -- Downloading... -- 다운로드 중... -- -- -- Ok -- 확인 -- -- -- Already Exists -- 이미 존재함 -- -- -- Download Failed -- 다운로드 실패 -- -- -- Downloading favicons (%1/%2)... -- 파비콘 다운로드 중(%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- 닫기(&C) -- -- -- Close message -- 메시지 닫기 -- -- -- -- Kdbx3Reader -- -- missing database headers -- 데이터베이스 헤더 없음 -- -- -- Header doesn't match hash -- 헤더의 해시가 일치하지 않음 -- -- -- Invalid header id size -- 잘못된 헤더 ID 크기 -- -- -- Invalid header field length -- 잘못된 헤더 필드 길이 -- -- -- Invalid header data length -- 잘못된 헤더 데이터 길이 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 인증 정보가 잘못되었습니다. 다시 시도하십시오. --같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. -- -- -- Unable to calculate database key -- 데이터베이스 키를 계산할 수 없음 -- -- -- Unable to issue challenge-response: %1 -- Challenge-Response를 생성할 수 없음: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Challenge-Response를 생성할 수 없음: %1 -- -- -- Unable to calculate database key -- 데이터베이스 키를 계산할 수 없음 -- -- -- -- Kdbx4Reader -- -- missing database headers -- 데이터베이스 헤더 없음 -- -- -- Invalid header checksum size -- 잘못된 헤더 체크섬 크기 -- -- -- Header SHA256 mismatch -- 헤더 SHA256이 일치하지 않음 -- -- -- Unknown cipher -- 알 수 없는 암호화 -- -- -- Invalid header id size -- 잘못된 헤더 ID 크기 -- -- -- Invalid header field length -- 잘못된 헤더 필드 길이 -- -- -- Invalid header data length -- 잘못된 헤더 데이터 길이 -- -- -- Failed to open buffer for KDF parameters in header -- 헤더에 있는 키 유도 함수 인자에 필요한 버퍼를 열 수 없음 -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- 지원하지 않는 키 유도 함수(KDF) 및 잘못된 인자 -- -- -- Legacy header fields found in KDBX4 file. -- KDBX4 파일에 레거시 헤더 필드가 있습니다. -- -- -- Invalid inner header id size -- 잘못된 내부 헤더 ID 크기 -- -- -- Invalid inner header field length -- 잘못된 내부 헤더 필드 길이 -- -- -- Invalid inner header binary size -- 잘못된 내부 헤더 바이너리 크기 -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- 지원하지 않는 KeePass 메타데이터 저장소 버전입니다. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 항목 이름 길이 -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 이름 데이터 -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 값 길이 -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 값 데이터 -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 Bool 항목 값 길이 -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 Int32 항목 값 길이 -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 UInt32 항목 값 길이 -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 Int64 항목 값 길이 -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 UInt64 항목 값 길이 -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 항목 형식 -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- 잘못된 메타데이터 저장소 필드 형식 크기 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 인증 정보가 잘못되었습니다. 다시 시도하십시오. --같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. -- -- -- (HMAC mismatch) -- (HMAC 일치하지 않음) -- -- -- Unable to calculate database key: %1 -- 데이터베이스 키를 계산할 수 없음: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- 잘못된 대칭 키 암호화 알고리즘입니다. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- 잘못된 대칭 키 암호화 IV 크기입니다. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- 키 유도 함수 인자 메타데이터 저장소를 직렬화할 수 없음 -- -- -- Unable to calculate database key: %1 -- 데이터베이스 키를 계산할 수 없음: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- 지원하지 않는 암호화 -- -- -- Invalid compression flags length -- 잘못된 압축 플래그 길이 -- -- -- Unsupported compression algorithm -- 지원하지 않는 압축 알고리즘 -- -- -- Invalid master seed size -- 잘못된 마스터 시드 크기 -- -- -- Invalid transform seed size -- 잘못된 변형 시드 크기 -- -- -- Invalid transform rounds size -- 잘못된 변형 라운드 크기 -- -- -- Invalid start bytes size -- 잘못된 시작 바이트 크기 -- -- -- Invalid random stream id size -- 잘못된 무작위 스트림 ID 크기 -- -- -- Invalid inner random stream cipher -- 잘못된 내부 무작위 스트림 암호화 -- -- -- Not a KeePass database. -- KeePass 데이터베이스가 아닙니다. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- 선택한 파일은 KeePass 1 데이터베이스(.kdb)입니다. -- --데이터베이스 > 'KeePass 1 데이터베이스 가져오기...' 메뉴에서 항목을 가져올 수 있습니다. --이 작업은 한 방향으로만 이뤄집니다. 가져온 데이터베이스는 KeePassX 0.4 버전에서 열 수 없습니다. -- -- -- Unsupported KeePass 2 database version. -- 지원하지 않는 KeePass 2 데이터베이스 버전입니다. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- 잘못된 암호화 UUID 길이: %1(length=%2) -- -- -- Unable to parse UUID: %1 -- UUID를 처리할 수 없음: %1 -- -- -- Failed to read database file. -- 데이터베이스 파일을 읽을 수 없습니다. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML 처리 실패: %1 -- -- -- No root group -- 루트 그룹 없음 -- -- -- Missing icon uuid or data -- 아이콘 UUID나 데이터 없음 -- -- -- Missing custom data key or value -- 사용자 정의 데이터 키나 값이 없음 -- -- -- Multiple group elements -- 여러 개의 그룹 원소 -- -- -- Null group uuid -- 빈 그룹 UUID -- -- -- Invalid group icon number -- 잘못된 그룹 아이콘 번호 -- -- -- Invalid EnableAutoType value -- 잘못된 EnableAutoType 값 -- -- -- Invalid EnableSearching value -- 잘못된 EnableSearching 값 -- -- -- No group uuid found -- 그룹 UUID를 찾을 수 없음 -- -- -- Null DeleteObject uuid -- 비어 있는 DeleteObject UUID -- -- -- Missing DeletedObject uuid or time -- DeletedObject UUID나 시간이 없음 -- -- -- Null entry uuid -- 빈 항목 UUID -- -- -- Invalid entry icon number -- 잘못된 항목 아이콘 번호 -- -- -- History element in history entry -- 과거 기록 항목의 과거 기록 원소 -- -- -- No entry uuid found -- 항목 UUID를 찾을 수 없음 -- -- -- History element with different uuid -- 다른 UUID를 사용하는 과거 기록 원소 -- -- -- Duplicate custom attribute found -- 중복된 사용자 정의 속성이 있음 -- -- -- Entry string key or value missing -- 항목 문자열 키나 값이 없음 -- -- -- Entry binary key or value missing -- 항목 바이너리 키나 값이 없음 -- -- -- Auto-type association window or sequence missing -- 자동 입력 연결 창이나 순서가 없음 -- -- -- Invalid bool value -- 잘못된 이진값 -- -- -- Invalid date time value -- 잘못된 날짜/시간 값 -- -- -- Invalid color value -- 잘못된 색상 값 -- -- -- Invalid color rgb part -- 잘못된 색상 RGB 부분 -- -- -- Invalid number value -- 잘못된 숫자 값 -- -- -- Invalid uuid value -- 잘못된 UUID 값 -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- 바이너리 압축을 해제할 수 없음 -- -- -- XML error: --%1 --Line %2, column %3 -- XML 오류: --%1 --%2줄, %3칸 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- KeeAgent 설정 파일 구조가 잘못되었습니다. -- -- -- Private key is an attachment but no attachments provided. -- 비밀 키를 첨부된 항목에서 사용하기로 했으나 첨부된 항목을 지정하지 않았습니다. -- -- -- Private key is empty -- 비밀 키가 비어 있음 -- -- -- File too large to be a private key -- 비밀 키로 사용하기에 파일이 너무 큼 -- -- -- Failed to open private key -- 비밀 키를 열 수 없음 -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- 데이터베이스를 열 수 없습니다. -- -- -- Import KeePass1 Database -- KeePass1 데이터베이스 가져오기 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- 키 파일을 읽을 수 없습니다. -- -- -- Not a KeePass database. -- KeePass 데이터베이스가 아닙니다. -- -- -- Unsupported encryption algorithm. -- 지원하지 않는 암호화 알고리즘입니다. -- -- -- Unsupported KeePass database version. -- 지원하지 않는 KeePass 데이터베이스 버전입니다. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- 암호화 IV를 읽을 수 없음 -- -- -- Invalid number of groups -- 잘못된 그룹 개수 -- -- -- Invalid number of entries -- 잘못된 항목 개수 -- -- -- Invalid content hash size -- 잘못된 내용 해시 크기 -- -- -- Invalid transform seed size -- 잘못된 변형 시드 크기 -- -- -- Invalid number of transform rounds -- 잘못된 변형 라운드 크기 -- -- -- Unable to construct group tree -- 그룹 트리를 만들 수 없음 -- -- -- Root -- 루트 -- -- -- Key transformation failed -- 키 변형 실패 -- -- -- Invalid group field type number -- 잘못된 그룹 필드 형식 번호 -- -- -- Invalid group field size -- 잘못된 그룹 필드 크기 -- -- -- Read group field data doesn't match size -- 읽은 그룹 필드 데이터와 크기가 일치하지 않음 -- -- -- Incorrect group id field size -- 잘못된 그룹 ID 필드 크기 -- -- -- Incorrect group creation time field size -- 잘못된 그룹 생성 시간 필드 크기 -- -- -- Incorrect group modification time field size -- 잘못된 그룹 수정 시간 필드 크기 -- -- -- Incorrect group access time field size -- 잘못된 그룹 접근 시간 필드 크기 -- -- -- Incorrect group expiry time field size -- 잘못된 그룹 만료 시간 필드 크기 -- -- -- Incorrect group icon field size -- 잘못된 그룹 아이콘 필드 크기 -- -- -- Incorrect group level field size -- 잘못된 그룹 단계 필드 크기 -- -- -- Invalid group field type -- 잘못된 그룹 필드 형싞 -- -- -- Missing group id or level -- 그룹 ID나 단계가 없음 -- -- -- Missing entry field type number -- 그룹 항목 형식 번호가 없음 -- -- -- Invalid entry field size -- 잘못된 항목 필드 크기 -- -- -- Read entry field data doesn't match size -- 읽은 항목 필드 데이터와 크기가 일치하지 않음 -- -- -- Invalid entry uuid field size -- 잘못된 항목 UUID 필드 크기 -- -- -- Invalid entry group id field size -- 잘못된 항목 그룹 ID 필드 크기 -- -- -- Invalid entry icon field size -- 잘못된 항목 아이콘 필드 크기 -- -- -- Invalid entry creation time field size -- 잘못된 항목 생성 시간 필드 크기 -- -- -- Invalid entry modification time field size -- 잘못된 항목 수정 시간 필드 크기 -- -- -- Invalid entry expiry time field size -- 잘못된 항목 만료 시간 필드 크기 -- -- -- Invalid entry field type -- 잘못된 항목 필드 크기 -- -- -- unable to seek to content position -- 내용 위치로 이동할 수 없음 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 인증 정보가 잘못되었습니다. 다시 시도하십시오. --같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. -- -- -- Unable to calculate database key -- 데이터베이스 키를 계산할 수 없음 -- -- -- -- KeeShare -- -- Invalid sharing reference -- 잘못된 공유 참조 -- -- -- Inactive share %1 -- 비활성 공유 %1 -- -- -- Imported from %1 -- %1에서 가져옴 -- -- -- Exported to %1 -- %1(으)로 내보냄 -- -- -- Synchronized with %1 -- %1와(과) 동기화됨 -- -- -- Import is disabled in settings -- 설정에서 가져오기가 비활성화됨 -- -- -- Export is disabled in settings -- 설정에서 내보내기가 비활성화됨 -- -- -- Inactive share -- 비활성 공유 -- -- -- Imported from -- 가져온 위치: -- -- -- Exported to -- 내보낸 위치: -- -- -- Synchronized with -- 동기화 대상: -- -- -- -- KeyComponentWidget -- -- Key Component -- 키 구성 요소 -- -- -- Key Component Description -- 키 구성 요소 설명 -- -- -- Cancel -- 취소 -- -- -- Key Component set, click to change or remove -- 키 구성 요소 집합, 눌러서 변경하거나 삭제 -- -- -- Add %1 -- Add a key component -- %1 추가 -- -- -- Change %1 -- Change a key component -- %1 변경 -- -- -- Remove %1 -- Remove a key component -- %1 삭제 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 설정됨, 눌러서 변경 및 삭제 -- -- -- -- KeyFileEditWidget -- -- Generate -- 생성 -- -- -- Key File -- 키 파일 -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>무작위 바이트가 들어 있는 키 파일을 추가하여 보안을 향상시킬 수 있습니다.</p><p>키 파일을 안전한 곳에 보관해야 하며 키 파일을 잃어버리면 데이터베이스에 접근할 수 없습니다!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- 키 파일 '%1'을(를) 불러올 수 없음 --메시지: %2 -- -- -- Key files -- 키 파일 -- -- -- All files -- 모든 파일 -- -- -- Create Key File... -- 키 파일 만들기... -- -- -- Error creating key file -- 키 파일 생성 오류 -- -- -- Unable to create key file: %1 -- 키 파일을 만들 수 없음: %1 -- -- -- Select a key file -- 키 파일 선택 -- -- -- Key file selection -- 키 파일 선택 -- -- -- Browse for key file -- 키 파일 찾아보기 -- -- -- Browse... -- 찾아보기... -- -- -- Generate a new key file -- 새 키 파일 생성 -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- 메모: 변경될 수 있는 파일을 사용하면 나중에 데이터베이스의 잠금을 해제하지 못할 수도 있습니다! -- -- -- Invalid Key File -- 잘못된 키 파일 -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- 데이터베이스 파일을 자기 자신의 키 파일로 사용할 수 없습니다. 다른 파일을 선택하거나 새 키 파일을 생성하십시오. -- -- -- Suspicious Key File -- 의심되는 키 파일 -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- 선택한 키 파일이 암호 데이터베이스 파일 같습니다. 키 파일은 변경되지 않을 파일이어야 하며 파일이 변경되면 데이터베이스에 더 이상 접근할 수 없습니다. --이 파일을 그래도 사용하시겠습니까? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- 데이터베이스(&D) -- -- -- &Help -- 도움말(&H) -- -- -- &Groups -- 그룹(&G) -- -- -- &Tools -- 도구(&T) -- -- -- &Quit -- 끝내기(&Q) -- -- -- &About -- 정보(&A) -- -- -- Database settings -- 데이터베이스 설정 -- -- -- Copy username to clipboard -- 클립보드에 사용자 이름 복사 -- -- -- Copy password to clipboard -- 클립보드에 암호 복사 -- -- -- &Settings -- 설정(&S) -- -- -- &Title -- 제목(&T) -- -- -- Copy title to clipboard -- 클립보드에 제목 복사 -- -- -- &URL -- URL(&U) -- -- -- Copy URL to clipboard -- 클립보드에 URL 복사 -- -- -- &Notes -- 메모(&N) -- -- -- Copy notes to clipboard -- 클립보드에 메모 복사 -- -- -- Copy &TOTP -- TOTP 복사(&T) -- -- -- E&mpty recycle bin -- 휴지통 비우기(&M) -- -- -- Clear history -- 과거 기록 삭제 -- -- -- Access error for config file %1 -- 설정 파일 %1에 접근할 수 없음 -- -- -- Settings -- 설정 -- -- -- Toggle window -- 창 전환 -- -- -- Quit KeePassXC -- KeePassXC 끝내기 -- -- -- Please touch the button on your YubiKey! -- YubiKey의 단추를 누르십시오! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- 경고: KeePassXC 불안정 빌드를 사용하고 있습니다! --데이터베이스 파일이 잘못될 가능성이 높으므로 항상 데이터베이스를 백업하십시오. --이 버전은 실제 환경에서 사용을 가정하지 않습니다. -- -- -- &Donate -- 기부(&D) -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- 경고: 사용 중인 Qt 버전에서 KeePassXC를 화상 키보드와 사용했을 때 충돌할 수 있습니다! --다운로드 페이지에 있는 AppImage 사용을 추천합니다. -- -- -- &Import -- 가져오기(&I) -- -- -- Create a new database -- 새 데이터베이스 만들기 -- -- -- Merge from another KDBX database -- 다른 KDBX 데이터베이스에서 합치기 -- -- -- Add a new entry -- 새 항목 추가하기 -- -- -- View or edit entry -- 항목을 보거나 편집하기 -- -- -- Add a new group -- 새 그룹 추가하기 -- -- -- Perform &Auto-Type -- 자동 입력 실행(&A) -- -- -- Open &URL -- URL 열기(&U) -- -- -- Import a KeePass 1 database -- KeePass 1 데이터베이스 가져오기 -- -- -- Import a CSV file -- CSV 파일 가져오기 -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- 알림: KeePassXC의 미리 보기 버전을 사용하고 있습니다! --이 버전은 일반 사용자 대상 버전이 아니므로 버그나 사소한 문제가 발생할 수 있습니다. -- -- -- Check for updates on startup? -- 시작할 때 업데이트를 확인하시겠습니까? -- -- -- Would you like KeePassXC to check for updates on startup? -- KeePassXC를 시작할 때 업데이트를 확인하시겠습니까? -- -- -- You can always check for updates manually from the application menu. -- 언제든지 프로그램 메뉴에서 수동으로 업데이트를 확인할 수 있습니다. -- -- -- &Export -- 내보내기(&E) -- -- -- Sort &A-Z -- 가나다순 정렬(&A) -- -- -- Sort &Z-A -- 가나다 역순 정렬(&Z) -- -- -- &Password Generator -- 암호 생성기(&P) -- -- -- Import a 1Password Vault -- 1Password Vault 가져오기 -- -- -- &Getting Started -- 시작하기(&G) -- -- -- &User Guide -- 사용자 가이드(&U) -- -- -- &Keyboard Shortcuts -- 키보드 단축키(&K) -- -- -- &Recent Databases -- 최근 데이터베이스(&R) -- -- -- &Entries -- 항목(&E) -- -- -- Copy Att&ribute -- 속성 복사(&R) -- -- -- TOTP -- TOTP -- -- -- View -- 보기 -- -- -- Theme -- 테마 -- -- -- &Check for Updates -- 업데이트 확인(&C) -- -- -- &Open Database… -- 데이터베이스 열기(&O)... -- -- -- &Save Database -- 데이터베이스 저장(&S) -- -- -- &Close Database -- 데이터베이스 닫기(&C) -- -- -- &New Database… -- 새 데이터베이스(&N)... -- -- -- &Merge From Database… -- 데이터베이스에서 합치기(&M)... -- -- -- &New Entry… -- 새 항목(&N)... -- -- -- &Edit Entry… -- 항목 편집(&E)... -- -- -- &Delete Entry… -- 항목 삭제(&D)... -- -- -- &New Group… -- 새 그룹(&N)... -- -- -- &Edit Group… -- 그룹 편집(&E)... -- -- -- &Delete Group… -- 그룹 삭제(&D)... -- -- -- Download All &Favicons… -- 모든 파비콘 다운로드(&F)... -- -- -- Sa&ve Database As… -- 다른 이름으로 데이터베이스 저장(&V)... -- -- -- Database &Security… -- 데이터베이스 보안(&S)... -- -- -- Database &Reports... -- 데이터베이스 보고서(&R)... -- -- -- Statistics, health check, etc. -- 통계, 안전성 검사 등. -- -- -- &Database Settings… -- 데이터베이스 설정(&D)... -- -- -- &Clone Entry… -- 항목 복제(&C)... -- -- -- Move u&p -- 위로 이동(&P) -- -- -- Move entry one step up -- 한 단계 위로 항목 이동 -- -- -- Move do&wn -- 아래로 이동(&W) -- -- -- Move entry one step down -- 한 단계 아래로 항목 이동 -- -- -- Copy &Username -- 사용자 이름 복사(&U) -- -- -- Copy &Password -- 암호 복사(&P) -- -- -- Download &Favicon -- 파비콘 다운로드(&F) -- -- -- &Lock Databases -- 데이터베이스 잠금(&L) -- -- -- &CSV File… -- CSV 파일(&C)... -- -- -- &HTML File… -- HTML 파일(&H)... -- -- -- KeePass 1 Database… -- KeePass 1 데이터베이스... -- -- -- 1Password Vault… -- 1Password Vault... -- -- -- CSV File… -- CSV 파일... -- -- -- Show TOTP -- TOTP 표시 -- -- -- Show QR Code -- QR 코드 표시 -- -- -- Set up TOTP… -- TOTP 설정... -- -- -- Report a &Bug -- 버그 보고(&B) -- -- -- Open Getting Started Guide -- 시작하기 도움말 열기 -- -- -- &Online Help -- 온라인 도움말(&O) -- -- -- Go to online documentation -- 온라인 문서로 이동 -- -- -- Open User Guide -- 사용자 가이드 열기 -- -- -- Save Database Backup... -- 데이터베이스 백업 저장... -- -- -- Add key to SSH Agent -- SSH 에이전트에 키 추가 -- -- -- Remove key from SSH Agent -- SSH 에이전트에서 키 삭제 -- -- -- Compact Mode -- 축소 모드 -- -- -- Automatic -- 자동 -- -- -- Light -- 밝음 -- -- -- Dark -- 어두움 -- -- -- Classic (Platform-native) -- 고전(플랫폼 네이티브) -- -- -- Show Toolbar -- 도구 모음 표시 -- -- -- Show Preview Panel -- 미리 보기 패널 표시 -- -- -- Don't show again for this version -- 이 버전에서 다시 표시하지 않기 -- -- -- Restart Application? -- 프로그램을 다시 시작하시겠습니까? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- 이 설정을 적용하려면 프로그램을 다시 시작해야 합니다. 지금 다시 시작하시겠습니까? -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- 사용자 이름 숨기기 -- -- -- Hide Passwords -- 암호 숨기기 -- -- -- -- ManageDatabase -- -- Database settings -- 데이터베이스 설정 -- -- -- Edit database settings -- 데이터베이스 설정 편집 -- -- -- Unlock database -- 데이터베이스 잠금 해제 -- -- -- Unlock database to show more information -- 더 많은 정보를 보려면 데이터베이스 잠금을 해제하십시오 -- -- -- Lock database -- 데이터베이스 잠금 -- -- -- -- ManageSession -- -- Disconnect -- 연결 해제 -- -- -- Disconnect this application -- 이 프로그램 연결 해제 -- -- -- -- Merger -- -- Creating missing %1 [%2] -- 존재하지 않는 %1 [%2] 생성 중 -- -- -- Relocating %1 [%2] -- %1 [%2] 위치 변경 중 -- -- -- Overwriting %1 [%2] -- %1 [%2] 덮어쓰는 중 -- -- -- older entry merged from database "%1" -- 데이터베이스 "%1"에서 합쳐진 이전 항목 -- -- -- Adding backup for older target %1 [%2] -- 오래된 대상 %1 [%2]의 백업 추가 중 -- -- -- Adding backup for older source %1 [%2] -- 오래된 원본 %1 [%2]의 백업 추가 중 -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- 새로운 원본 %1 [%2]에 오래된 대상 항목 다시 적용하는 중 -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- 새로운 대상 %1 [%2]에 오래된 원본 항목 다시 적용하는 중 -- -- -- Synchronizing from newer source %1 [%2] -- 새로운 원본 %1 [%2]에서 동기화하는 중 -- -- -- Synchronizing from older source %1 [%2] -- 오래된 원본 %1 [%2]에서 동기화하는 중 -- -- -- Deleting child %1 [%2] -- 자식 항목 %1 [%2] 삭제 중 -- -- -- Deleting orphan %1 [%2] -- 고립된 항목 %1 [%2] 삭제 중 -- -- -- Changed deleted objects -- 변경된 삭제된 개체 -- -- -- Adding missing icon %1 -- 빠진 아이콘 %1 추가하는 중 -- -- -- Removed custom data %1 [%2] -- 사용자 정의 데이터 %1[%2] 삭제됨 -- -- -- Adding custom data %1 [%2] -- 사용자 정의 데이터 %1[%2] 추가 중 -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- 새 KeePassXC 데이터베이스 만들기... -- -- -- Root -- Root group -- 루트 -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- 마법사페이지 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다. -- -- -- Advanced Settings -- 고급 설정 -- -- -- Simple Settings -- 간단한 설정 -- -- -- Encryption Settings -- 암호화 설정 -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- 데이터베이스 인증 정보 -- -- -- A set of credentials known only to you that protects your database. -- 나만 알고 있는 데이터베이스를 보호할 인증 정보입니다. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- 암호화 설정 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- 일반 데이터베이스 정보 -- -- -- Please fill in the display name and an optional description for your new database: -- 새 데이터베이스 표시 이름과 추가 설명(선택)을 입력하십시오: -- -- -- -- NixUtils -- -- Password Manager -- 암호 관리자 -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- 잘못된 OpData01, 헤더 정보 없음 -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- 모든 IV 바이트를 읽을 수 없음, 16바이트가 필요하지만 %1바이트만 받음 -- -- -- Unable to init cipher for opdata01: %1 -- opdata01의 암호화를 초기화할 수 없음: %1 -- -- -- Unable to read all HMAC signature bytes -- 모든 HMAC 서명 바이트를 읽을 수 없음 -- -- -- Malformed OpData01 due to a failed HMAC -- 잘못된 OpData01, HMAC이 잘못됨 -- -- -- Unable to process clearText in place -- 위치에서 곧바로 clearText를 처리할 수 없음 -- -- -- Expected %1 bytes of clear-text, found %2 -- 평문 문자열 %1바이트가 필요하지만 %2바이트를 받음 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- 데이터베이스 읽기 명령이 인스턴스를 반환하지 않음 --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- .opvault 디렉터리가 존재해야 함 -- -- -- Directory .opvault must be readable -- .opvault 디렉터리를 읽을 수 있어야 함 -- -- -- Directory .opvault/default must exist -- .opvault/default 디렉터리가 존재해야 함 -- -- -- Directory .opvault/default must be readable -- .opvault/default 디렉터리를 읽을 수 있어야 함 -- -- -- Unable to decode masterKey: %1 -- masterKey를 디코드할 수 없음: %1 -- -- -- Unable to derive master key: %1 -- 마스터 키를 계산할 수 없음: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- 잘못된 키 파일, OpenSSH 키가 필요함 -- -- -- PEM boundary mismatch -- PEM 경계가 일치하지 않음 -- -- -- Base64 decoding failed -- Base64 디코드 실패 -- -- -- Key file way too small. -- 키 파일이 너무 작습니다. -- -- -- Key file magic header id invalid -- 키 파일 매직 헤더 ID가 잘못됨 -- -- -- Found zero keys -- 키를 찾을 수 없음 -- -- -- Failed to read public key. -- 공개 키를 읽을 수 없습니다. -- -- -- Corrupted key file, reading private key failed -- 키 파일이 잘못됨, 비밀 키를 읽을 수 없음 -- -- -- No private key payload to decrypt -- 암호화 해제할 비밀 키 페이로드가 없음 -- -- -- Trying to run KDF without cipher -- 키 유도 함수를 암호화 없이 실행하려고 함 -- -- -- Passphrase is required to decrypt this key -- 이 키를 복호화하려면 암호가 필요함 -- -- -- Key derivation failed, key file corrupted? -- 키 유도 실패, 키 파일이 유효합니까? -- -- -- Decryption failed, wrong passphrase? -- 복호화 실패, 암호가 올바릅니까? -- -- -- Unexpected EOF while reading public key -- 공개 키를 읽는 중 예상하지 못한 곳에서 파일이 끝남 -- -- -- Unexpected EOF while reading private key -- 비밀 키를 읽는 중 예상하지 못한 곳에서 파일이 끝남 -- -- -- Can't write public key as it is empty -- 공개 키가 비어 있어서 기록할 수 없음 -- -- -- Unexpected EOF when writing public key -- 공개 키를 기록하는 중 예상하지 못한 곳에서 파일이 끝남 -- -- -- Can't write private key as it is empty -- 비밀 키가 비어 있어서 기록할 수 없음 -- -- -- Unexpected EOF when writing private key -- 비밀 키를 기록하는 중 예상하지 못한 곳에서 파일이 끝남 -- -- -- Unsupported key type: %1 -- 지원하지 않는 키 형식: %1 -- -- -- Unknown cipher: %1 -- 알 수 없는 암호화: %1 -- -- -- Cipher IV is too short for MD5 kdf -- MD5 키 유도 함수에 IV가 너무 짧음 -- -- -- Unknown KDF: %1 -- 알 수 없는 KDF: %1 -- -- -- Unknown key type: %1 -- 알 수 없는 키 형식: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- 암호가 일치하지 않음 -- -- -- Passwords match so far -- 암호가 일치함 -- -- -- Toggle Password (%1) -- 암호 표시/숨기기(%1) -- -- -- Generate Password (%1) -- 암호 생성(%1) -- -- -- Warning: Caps Lock enabled! -- 경고: Caps Lock이 켜져 있습니다 -- -- -- -- PasswordEditWidget -- -- Enter password: -- 암호 입력: -- -- -- Confirm password: -- 암호 확인: -- -- -- Password -- 암호 -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>암호는 데이터베이스를 보호하는 주요 수단입니다.</p><p>좋은 암호는 길고 예측할 수 없어야 합니다. KeePassXC에서 암호를 생성할 수 있습니다.</p> -- -- -- Passwords do not match. -- 암호가 일치하지 않습니다. -- -- -- Password field -- 암호 필드 -- -- -- Repeat password field -- 암호 확인 필드 -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- 강도 -- -- -- entropy -- 엔트로피 -- -- -- Password -- 암호 -- -- -- Character Types -- 문자 종류 -- -- -- Numbers -- 숫자 -- -- -- Extended ASCII -- 확장 ASCII -- -- -- Exclude look-alike characters -- 비슷하게 생긴 문자 제외 -- -- -- Pick characters from every group -- 모든 그룹에서 글자 선택 -- -- -- &Length: -- 길이(&L): -- -- -- Passphrase -- 암구호 -- -- -- Wordlist: -- 단어 목록: -- -- -- Word Separator: -- 단어 구분자: -- -- -- Close -- 닫기 -- -- -- Entropy: %1 bit -- 엔트로피: %1비트 -- -- -- Password Quality: %1 -- 암호 강도: %1 -- -- -- Poor -- Password quality -- 매우 약함 -- -- -- Weak -- Password quality -- 약함 -- -- -- Good -- Password quality -- 좋음 -- -- -- Excellent -- Password quality -- 매우 좋음 -- -- -- Switch to advanced mode -- 고급 모드로 전환 -- -- -- Advanced -- 고급 -- -- -- Braces -- 괄호 -- -- -- Punctuation -- 구두점 -- -- -- Quotes -- 따옴표 -- -- -- Logograms -- 로고그램 -- -- -- Character set to exclude from generated password -- 생성된 암호에서 제외할 문자 집합 -- -- -- Do not include: -- 포함하지 않음: -- -- -- Add non-hex letters to "do not include" list -- "포함하지 않음" 목록에 16진수가 아닌 문자 추가 -- -- -- Hex -- 16진 -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- 제외할 글자: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- 생성된 암호 -- -- -- Upper-case letters -- 대문자 -- -- -- Lower-case letters -- 소문자 -- -- -- Special characters -- 특수문자 -- -- -- Math Symbols -- 수학 기호 -- -- -- Dashes and Slashes -- 대시와 슬래시 -- -- -- Excluded characters -- 제외할 문자 -- -- -- Hex Passwords -- 16진 암호 -- -- -- Password length -- 암호 길이 -- -- -- Word Case: -- 대소문자: -- -- -- Regenerate password -- 암호 다시 생성 -- -- -- Copy password -- 암호 복사 -- -- -- lower case -- 소문자 -- -- -- UPPER CASE -- 대문자 -- -- -- Title Case -- 제목 대문자(Title Case) -- -- -- Generate Password -- 암호 생성 -- -- -- Also choose from: -- 다음에서도 선택: -- -- -- Additional characters to use for the generated password -- 생성한 암호에 포함할 추가 문자 -- -- -- Additional characters -- 추가 문자 -- -- -- Word Count: -- 단어 개수: -- -- -- Esc -- Esc -- -- -- Apply Password -- 암호 적용 -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- 암호 다시 생성(%1) -- -- -- Special Characters -- 특수 문자 -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- 통계 -- -- -- Very weak password -- 매우 약한 암호 -- -- -- Password entropy is %1 bits -- 암호 엔트로피가 %1비트임 -- -- -- Weak password -- 약한 암호 -- -- -- Used in %1/%2 -- %1/%2에서 사용됨 -- -- -- Password is used %1 times -- 암호가 %1번 사용됨 -- -- -- Password has expired -- 암호가 만료됨 -- -- -- Password expiry was %1 -- 암호 만료: %1 -- -- -- Password is about to expire -- 암호가 빠른 시일 내 만료됨 -- -- -- Password expires in %1 days -- 암호가 %1일 후 만료됨 -- -- -- Password will expire soon -- 암호가 곧 만료됨 -- -- -- Password expires on %1 -- 암호가 %1에 만료됨 -- -- -- Health Check -- 안전성 검사 -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- 덮어쓰기 -- -- -- Delete -- 삭제 -- -- -- Move -- 이동 -- -- -- Empty -- 비어 있음 -- -- -- Remove -- 삭제 -- -- -- Skip -- 건너뛰기 -- -- -- Disable -- 비활성화 -- -- -- Merge -- 합치기 -- -- -- Continue -- 계속 -- -- -- -- QObject -- -- Database not opened -- 데이터베이스를 열지 않았음 -- -- -- Database hash not available -- 데이터베이스 해시를 사용할 수 없음 -- -- -- Client public key not received -- 클라이언트 공개 키를 받지 않았음 -- -- -- Cannot decrypt message -- 메시지를 복호화할 수 없음 -- -- -- Action cancelled or denied -- 접근이 취소되었거나 거부됨 -- -- -- KeePassXC association failed, try again -- KeePassXC 연결 실패, 다시 시도하십시오 -- -- -- Encryption key is not recognized -- 암호화 키를 인식할 수 없음 -- -- -- Incorrect action -- 잘못된 동작 -- -- -- Empty message received -- 빈 메시지 받음 -- -- -- No URL provided -- URL이 지정되지 않음 -- -- -- No logins found -- 로그인을 찾을 수 없음 -- -- -- Unknown error -- 알 수 없는 오류 -- -- -- Add a new entry to a database. -- 데이터베이스에 새 항목을 추가합니다. -- -- -- Path of the database. -- 데이터베이스의 경로입니다. -- -- -- Key file of the database. -- 데이터베이스의 키 파일입니다. -- -- -- path -- 경로 -- -- -- Username for the entry. -- 항목의 사용자 이름입니다. -- -- -- username -- 사용자 이름 -- -- -- URL for the entry. -- 항목의 URL입니다. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- 항목 암호의 프롬프트입니다. -- -- -- Generate a password for the entry. -- 항목 암호를 생성합니다. -- -- -- length -- 길이 -- -- -- Path of the entry to add. -- 추가할 항목의 경로입니다. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- 클립보드에 복사할 항목의 경로입니다. -- -- -- Timeout in seconds before clearing the clipboard. -- 클립보드를 지우기 전 대기할 초 단위 시간입니다. -- -- -- Edit an entry. -- 항목을 편집합니다. -- -- -- Title for the entry. -- 항목의 제목입니다. -- -- -- title -- 제목 -- -- -- Path of the entry to edit. -- 편집할 항목의 경로입니다. -- -- -- Estimate the entropy of a password. -- 암호의 예상 엔트로피를 계산합니다. -- -- -- Password for which to estimate the entropy. -- 엔트로피를 예상할 암호입니다. -- -- -- Perform advanced analysis on the password. -- 암호에 고급 분석을 시행합니다. -- -- -- -- --Available commands: -- -- -- --사용 가능한 명령: -- -- -- -- Name of the command to execute. -- 실행할 명령 이름입니다. -- -- -- List database entries. -- 데이터베이스 항목을 표시합니다. -- -- -- Path of the group to list. Default is / -- 표시할 그룹의 경로입니다. 기본값은 /입니다 -- -- -- Find entries quickly. -- 빠르게 항목을 찾습니다. -- -- -- Search term. -- 항목을 검색합니다. -- -- -- Merge two databases. -- 두 데이터베이스를 합칩니다. -- -- -- Path of the database to merge from. -- 합칠 원본 데이터베이스 경로입니다. -- -- -- Use the same credentials for both database files. -- 두 데이터베이스 파일에 같은 인증 정보를 사용합니다. -- -- -- Key file of the database to merge from. -- 합칠 데이터베이스 파일의 키 파일입니다. -- -- -- Show an entry's information. -- 항목 정보를 표시합니다. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- 표시할 속성 이름입니다. 이 옵션은 한 번 이상 사용할 수 있으며, 주어진 순서대로 각각 속성을 한 줄에 하나씩 표시합니다. 속성을 지정하지 않으면 기본 속성의 요약을 표시합니다. -- -- -- attribute -- 속성 -- -- -- Name of the entry to show. -- 표시할 항목 이름입니다. -- -- -- NULL device -- NULL 장치 -- -- -- error reading from device -- 장치에서 읽는 중 오류 발생 -- -- -- malformed string -- 잘못된 문자열 -- -- -- missing closing quote -- 닫는 따옴표 없음 -- -- -- Group -- 그룹 -- -- -- Title -- 제목 -- -- -- Username -- 사용자 이름 -- -- -- Password -- 암호 -- -- -- Notes -- 메모 -- -- -- Last Modified -- 마지막 수정 -- -- -- Created -- 생성 -- -- -- Browser Integration -- 브라우저 통합 -- -- -- SSH Agent -- SSH 에이전트 -- -- -- Generate a new random diceware passphrase. -- 새로운 주사위 암호를 생성합니다. -- -- -- Word count for the diceware passphrase. -- 주사위 암호 단어 개수입니다. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- 주사위 암호 생성 시 사용할 단어 목록입니다. --[기본값: EFF 영어] -- -- -- Generate a new random password. -- 새 무작위 암호를 생성합니다. -- -- -- Could not create entry with path %1. -- 경로 %1에 항목을 만들 수 없습니다. -- -- -- Enter password for new entry: -- 새 항목의 암호 입력: -- -- -- Writing the database failed %1. -- 데이터베이스에 기록할 수 없습니다 %1. -- -- -- Successfully added entry %1. -- 항목 %1을(를) 추가했습니다. -- -- -- Invalid timeout value %1. -- 시간 제한 값 %1이(가) 잘못되었습니다. -- -- -- Entry %1 not found. -- 항목 %1을(를) 찾을 수 없습니다. -- -- -- Entry with path %1 has no TOTP set up. -- 경로 %1에 있는 항목에 TOTP가 설정되지 않았습니다. -- -- -- Clearing the clipboard in %1 second(s)... -- %1초 후 클립보드를 지웁니다... -- -- -- Clipboard cleared! -- 클립보드를 지웠습니다! -- -- -- Silence password prompt and other secondary outputs. -- 암호 입력 프롬프트 및 추가 출력을 숨깁니다. -- -- -- count -- CLI parameter -- count -- -- -- Could not find entry with path %1. -- 경로 %1에서 항목을 찾을 수 없습니다. -- -- -- Not changing any field for entry %1. -- 항목 %1의 필드를 변경하지 않습니다. -- -- -- Enter new password for entry: -- 항목의 새로운 암호 입력: -- -- -- Writing the database failed: %1 -- 데이터베이스에기록할 수 없음: %1 -- -- -- Successfully edited entry %1. -- 항목 %1을(를) 편집했습니다. -- -- -- Length %1 -- 길이 %1 -- -- -- Entropy %1 -- 엔트로피 %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- 여러 단어 추가 비트 %1 -- -- -- Type: Bruteforce -- 형식: 무작위 대입 -- -- -- Type: Dictionary -- 형식: 사전 -- -- -- Type: Dict+Leet -- 형식: 사전+Leet -- -- -- Type: User Words -- 형식: 사용자 단어 -- -- -- Type: User+Leet -- 형식: 사용자+Leet -- -- -- Type: Repeated -- 형식: 반복됨 -- -- -- Type: Sequence -- 형식: 시퀀스 -- -- -- Type: Spatial -- 형식: 인접 -- -- -- Type: Date -- 형식: 날짜 -- -- -- Type: Bruteforce(Rep) -- 형식: 무작위 대입(반복) -- -- -- Type: Dictionary(Rep) -- 형식: 사전(반복) -- -- -- Type: Dict+Leet(Rep) -- 형식: 사전+Leet(반복) -- -- -- Type: User Words(Rep) -- 형식: 사용자 단어(반복) -- -- -- Type: User+Leet(Rep) -- 형식: 사용자+Leet(반복) -- -- -- Type: Repeated(Rep) -- 형식: 반복됨(반복) -- -- -- Type: Sequence(Rep) -- 형식: 시퀀스(반복) -- -- -- Type: Spatial(Rep) -- 형식: 인접(반복) -- -- -- Type: Date(Rep) -- 형식: 날짜(반복) -- -- -- Type: Unknown%1 -- 형식: 알 수 없음%1 -- -- -- Entropy %1 (%2) -- 엔트로피 %1(%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** 암호 길이 (%1) != 개별 부분 길이의 합 (%2) *** -- -- -- Failed to load key file %1: %2 -- 키 파일 %1을(를) 불러올 수 없음: %2 -- -- -- Length of the generated password -- 생성된 암호의 길이 -- -- -- Use lowercase characters -- 소문자 사용 -- -- -- Use uppercase characters -- 대문자 사용 -- -- -- Use special characters -- 특수 문자 사용 -- -- -- Use extended ASCII -- 확장 ASCII 사용 -- -- -- Exclude character set -- 제외할 문자 집합 -- -- -- chars -- 글자 -- -- -- Exclude similar looking characters -- 비슷하게 생긴 문자 제외 -- -- -- Include characters from every selected group -- 모든 그룹에서 글자 선택 -- -- -- Recursively list the elements of the group. -- 그룹의 구성 요소를 재귀적으로 표시합니다. -- -- -- Cannot find group %1. -- 그룹 %1을(를) 찾을 수 없습니다. -- -- -- Error reading merge file: --%1 -- 합칠 파일을 읽는 중 오류 발생: --%1 -- -- -- Unable to save database to file : %1 -- 데이터베이스를 파일로 저장할 수 없음: %1 -- -- -- Unable to save database to file: %1 -- 데이터베이스를 파일로 저장할 수 없음: %1 -- -- -- Successfully recycled entry %1. -- 항목 %1을(를) 휴지통으로 이동했습니다. -- -- -- Successfully deleted entry %1. -- 항목 %1을(를) 삭제했습니다. -- -- -- Show the entry's current TOTP. -- 항목의 현재 TOTP를 표시합니다. -- -- -- ERROR: unknown attribute %1. -- 오류: 알 수 없는 속성 %1. -- -- -- No program defined for clipboard manipulation -- 클립보드 변경 프로그램이 지정되지 않았음 -- -- -- file empty -- 파일이 비어 있음 -- -- -- %1: (row, col) %2,%3 -- %1: (줄, 칸) %2, %3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF(KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF(KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- 잘못된 설정 -- -- -- Invalid Key -- TOTP -- 잘못된 키 -- -- -- Message encryption failed. -- 메시지를 암호화할 수 없습니다. -- -- -- No groups found -- 그룹을 찾을 수 없음 -- -- -- Create a new database. -- 새 데이터베이스를 만듭니다. -- -- -- File %1 already exists. -- 파일 %1이(가) 이미 존재합니다. -- -- -- Loading the key file failed -- 키 파일을 불러올 수 없음 -- -- -- No key is set. Aborting database creation. -- 설정된 키가 없습니다. 데이터베이스 생성을 중단합니다. -- -- -- Failed to save the database: %1. -- 데이터베이스를 저장할 수 없음: %1. -- -- -- Successfully created new database. -- 새 데이터베이스를 만들었습니다. -- -- -- Creating KeyFile %1 failed: %2 -- 키 파일 %1 생성 실패: %2 -- -- -- Loading KeyFile %1 failed: %2 -- 키 파일 %1 불러오기 실패: %2 -- -- -- Path of the entry to remove. -- 삭제할 항목의 경로입니다. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- 존재하는 단일 인스턴스 잠금 파일이 잘못되었습니다. 새 인스턴스를 실행합니다. -- -- -- The lock file could not be created. Single-instance mode disabled. -- 잠금 파일을 만들 수 없습니다. 단일 인스턴스 모드가 비활성화되었습니다. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - 크로스 플랫폼 암호 관리자 -- -- -- filenames of the password databases to open (*.kdbx) -- 열 암호 데이터베이스 파일 이름(*.kdbx) -- -- -- path to a custom config file -- 사용자 정의 설정 파일 경로 -- -- -- key file of the database -- 데이터베이스 키 파일 -- -- -- read password of the database from stdin -- 표준 입력에서 데이터베이스 암호 읽기 -- -- -- Another instance of KeePassXC is already running. -- 다른 KeePassXC 인스턴스가 이미 실행 중입니다. -- -- -- Fatal error while testing the cryptographic functions. -- 암호화 함수를 시험하는 중 오류가 발생하였습니다. -- -- -- KeePassXC - Error -- KeePassXC - 오류 -- -- -- Database password: -- 데이터베이스 암호: -- -- -- Cannot create new group -- 새 그룹을 만들 수 없음 -- -- -- Deactivate password key for the database. -- 데이터베이스의 암호 키를 비활성화합니다. -- -- -- Displays debugging information. -- 디버그 정보를 표시합니다. -- -- -- Deactivate password key for the database to merge from. -- 합칠 데이터베이스의 암호 키를 비활성화합니다. -- -- -- Version %1 -- 버전 %1 -- -- -- Build Type: %1 -- 빌드 형식: %1 -- -- -- Revision: %1 -- 리비전: %1 -- -- -- Distribution: %1 -- 배포판: %1 -- -- -- Debugging mode is disabled. -- 디버그 모드가 비활성화되었습니다. -- -- -- Debugging mode is enabled. -- 디버그 모드가 활성화되었습니다. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- 운영 체제: %1 --CPU 아키텍처: %2 --커널: %3 %4 -- -- -- Auto-Type -- 자동 입력 -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare(서명된 공유 및 서명되지 않은 공유) -- -- -- KeeShare (only signed sharing) -- KeeShare(서명된 공유만) -- -- -- KeeShare (only unsigned sharing) -- KeeShare(서명되지 않은 공유만) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- 없음 -- -- -- Enabled extensions: -- 활성화된 확장 기능: -- -- -- Cryptographic libraries: -- 암호화 라이브러리: -- -- -- Cannot generate a password and prompt at the same time! -- 암호와 프롬프트를 동시에 생성할 수 없습니다! -- -- -- Adds a new group to a database. -- 데이터베이스에 새 그룹을 추가합니다. -- -- -- Path of the group to add. -- 추가할 그룹의 경로입니다. -- -- -- Group %1 already exists! -- 그룹 %1이(가) 이미 존재합니다! -- -- -- Group %1 not found. -- 그룹 %1을(를) 찾을 수 없습니다. -- -- -- Successfully added group %1. -- 그룹 %1을(를) 추가했습니다. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- 암호가 유출된 적이 있는지 검사합니다. 파일 이름에는 HIBP 형식으로 된 유출된 암호의 SHA-1 해시가 저장된 파일을 지정해야 합니다. https://haveibeenpwned.com/Passwords 사이트에서 다운로드할 수 있습니다. -- -- -- FILENAME -- 파일 이름 -- -- -- Analyze passwords for weaknesses and problems. -- 취약한 암호와 문제를 분석합니다. -- -- -- Failed to open HIBP file %1: %2 -- HIBP 파일 %1을(를) 열 수 없음: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- 데이터베이스 항목과 HIBP 파일을 분석하고 있습니다. 잠시 기다려 주십시오... -- -- -- Close the currently opened database. -- 현재 열린 데이터베이스를 닫습니다. -- -- -- Display this help. -- 이 도움말을 표시합니다. -- -- -- slot -- 슬롯 -- -- -- Invalid word count %1 -- 잘못된 단어 개수 %1 -- -- -- The word list is too small (< 1000 items) -- 단어 목록이 너무 작음(1000개 미만) -- -- -- Exit interactive mode. -- 대화형 모드를 종료합니다. -- -- -- Exports the content of a database to standard output in the specified format. -- 데이터베이스 내용을 지정한 형식으로 표준 출력으로 내보냅니다. -- -- -- Unable to export database to XML: %1 -- XML로 데이터베이스를 내보낼 수 없음: %1 -- -- -- Unsupported format %1 -- 지원하지 않는 형식: %1 -- -- -- Use numbers -- 숫자 사용 -- -- -- Invalid password length %1 -- 잘못된 암호 길이: %1 -- -- -- Display command help. -- 명령 도움말을 표시합니다. -- -- -- Available commands: -- 사용 가능한 명령: -- -- -- Import the contents of an XML database. -- XML 데이터베이스의 내용을 가져옵니다. -- -- -- Path of the XML database export. -- XML로 데이터베이스를 내보낼 경로입니다. -- -- -- Path of the new database. -- 새 데이터베이스의 경로입니다. -- -- -- Successfully imported database. -- 데이터베이스를 가져왔습니다. -- -- -- Unknown command %1 -- 알 수 없는 명령 %1 -- -- -- Flattens the output to single lines. -- 출력을 한 줄로 합칩니다. -- -- -- Only print the changes detected by the merge operation. -- 합치기 작업으로 변경할 사항만 출력합니다. -- -- -- Yubikey slot for the second database. -- 두 번째 데이터베이스의 YubiKey 슬롯입니다. -- -- -- Successfully merged %1 into %2. -- %1을(를) %2(으)로 합쳤습니다. -- -- -- Database was not modified by merge operation. -- 수정 작업으로 데이터베이스가 변경되지 않았습니다. -- -- -- Moves an entry to a new group. -- 항목을 새 그룹으로 이동합니다. -- -- -- Path of the entry to move. -- 이동할 항목의 경로입니다. -- -- -- Path of the destination group. -- 대상 그룹의 경로입니다. -- -- -- Could not find group with path %1. -- 경로 %1에서 그룹을 찾을 수 없습니다. -- -- -- Entry is already in group %1. -- 경로 %1에 항목이 이미 있습니다. -- -- -- Successfully moved entry %1 to group %2. -- 항목 %1을(를) 그룹 %2(으)로 이동했습니다. -- -- -- Open a database. -- 데이터베이스를 엽니다. -- -- -- Path of the group to remove. -- 삭제할 그룹의 경로입니다. -- -- -- Cannot remove root group from database. -- 데이터베이스 루트 그룹을 삭제할 수 없습니다. -- -- -- Successfully recycled group %1. -- 그룹 %1을(를) 휴지통으로 이동했습니다. -- -- -- Successfully deleted group %1. -- 그룹 %1을(를) 삭제했습니다. -- -- -- Failed to open database file %1: not found -- 데이터베이스 파일 %1을(를) 열 수 없음: 찾을 수 없음 -- -- -- Failed to open database file %1: not a plain file -- 데이터베이스 파일 %1을(를) 열 수 없음: 일반 파일이 아님 -- -- -- Failed to open database file %1: not readable -- 데이터베이스 파일 %1을(를) 열 수 없음: 읽을 수 없음 -- -- -- Enter password to unlock %1: -- %1의 잠금 해제 암호 입력: -- -- -- Invalid YubiKey slot %1 -- 잘못된 YubiKey 슬롯 %1 -- -- -- Enter password to encrypt database (optional): -- 데이터베이스를 암호화할 암호 입력(선택 사항): -- -- -- HIBP file, line %1: parse error -- HIBP 파일 %1줄: 처리 오류 -- -- -- Secret Service Integration -- 비밀 서비스 통합 -- -- -- User name -- 사용자 이름 -- -- -- Password for '%1' has been leaked %2 time(s)! -- '%1'의 암호가 %2번 유출되었습니다! -- -- -- Invalid password generator after applying all options -- 모든 옵션을 적용했을 때 암호 생성기가 잘못됨 -- -- -- Show the protected attributes in clear text. -- 보호된 속성을 평문으로 표시합니다. -- -- -- Browser Plugin Failure -- 브라우저 플러그인 오류 -- -- -- Could not save the native messaging script file for %1. -- %1의 네이티브 메시징 스크립트 파일을 저장할 수 없습니다. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- 지정한 속성을 클립보드에 복사합니다. 지정하지 않았을 때의 기본값은 "password"입니다. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- 현재 TOTP 값을 클립보드에 복사합니다("-a totp"와 동일함). -- -- -- Copy an entry's attribute to the clipboard. -- 항목의 속성을 클립보드에 복사합니다. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- 오류: --attribute나 --totp 둘 중 하나만 지정하십시오. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- 오류: 속성 %1이(가) 모호합니다. 일치하는 항목: %2. -- -- -- Attribute "%1" not found. -- 속성 "%1"을(를) 찾을 수 없습니다. -- -- -- Entry's "%1" attribute copied to the clipboard! -- 항목의 "%1" 속성을 클립보드에 복사했습니다! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- 데이터베이스에 접근할 때 사용할 YubiKey 슬롯과 선택적인 일련 번호입니다(예: 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- 밀리초 단위 데이터베이스 복호화 목표 시간입니다. -- -- -- time -- time -- -- -- Set the key file for the database. -- 데이터베이스 키 파일을 설정합니다. -- -- -- Set a password for the database. -- 데이터베이스 암호를 설정합니다. -- -- -- Invalid decryption time %1. -- 잘못된 복호화 시간: %1. -- -- -- Target decryption time must be between %1 and %2. -- 대상 복호화 시간은 %1 - %2 사이에 있어야 합니다. -- -- -- Failed to set database password. -- 데이터베이스 암호를 설정할 수 없습니다. -- -- -- Benchmarking key derivation function for %1ms delay. -- %1 ms 지연 시간 동안 키 유도 함수(KDF)를 벤치마크하고 있습니다. -- -- -- Setting %1 rounds for key derivation function. -- 키 유도 함수(KDF)의 라운드 수를 %1(으)로 설정합니다. -- -- -- error while setting database key derivation settings. -- 데이터베이스 키 유도 설정 중 오류가 발생했습니다. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- 내보낼 때 사용할 형식입니다. 'xml', 'csv'를 사용할 수 있으며 기본값은 'xml'입니다. -- -- -- Unable to import XML database: %1 -- XML 데이터베이스를 가져올 수 없음: %1 -- -- -- Show a database's information. -- 데이터베이스 정보를 표시합니다. -- -- -- UUID: -- UUID: -- -- -- Name: -- 이름: -- -- -- Description: -- 설명: -- -- -- Cipher: -- 암호화: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- 휴지통이 활성화되었습니다. -- -- -- Recycle bin is not enabled. -- 휴지통이 비활성화되었습니다. -- -- -- Invalid command %1. -- 잘못된 명령 %1. -- -- -- Invalid YubiKey serial %1 -- 잘못된 YubiKey 일련 번호 %1 -- -- -- Please touch the button on your YubiKey to continue… -- 계속 진행하려면 YubiKey의 단추를 누르십시오... -- -- -- Do you want to create a database with an empty password? [y/N]: -- 빈 암호를 사용해서 데이터베이스를 만드시겠습니까? [y/N]: -- -- -- Repeat password: -- 암호 반복: -- -- -- Error: Passwords do not match. -- 오류: 암호가 일치하지 않습니다. -- -- -- All clipping programs failed. Tried %1 -- -- 모든 클립보드 프로그램이 실패했습니다. 시도: %1 -- -- -- -- AES (%1 rounds) -- AES(%1라운드) -- -- -- AES 256-bit -- AES 256비트 -- -- -- Twofish 256-bit -- Twofish 256비트 -- -- -- ChaCha20 256-bit -- ChaCha20 256비트 -- -- -- Benchmark %1 delay -- %1 벤치마크 지연 시간 -- -- -- %1 ms -- milliseconds -- %1 ms -- -- -- %1 s -- seconds -- %1초 -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- 아이콘 -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- 압축 중 내부 zlib 오류 발생: -- -- -- Error writing to underlying device: -- 장치에 기록하는 중 오류 발생: -- -- -- Error opening underlying device: -- 장치를 여는 중 오류 발생: -- -- -- Error reading data from underlying device: -- 장치에서 읽는 중 오류 발생: -- -- -- Internal zlib error when decompressing: -- 압축 푸는 중 내부 zlib 오류 발생: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- 이 버전의 zlib에서 gzip 형식을 지원하지 않습니다. -- -- -- Internal zlib error: -- 내부 zlib 오류: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- 보고서에서 제외된 항목도 표시 -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- 이유 위에 마우스를 올려 두면 자세한 정보를 표시합니다. 항목을 두 번 클릭하면 편집할 수 있습니다. -- -- -- Bad -- Password quality -- 나쁨 -- -- -- Bad — password must be changed -- 나쁨 — 암호를 변경해야 함 -- -- -- Poor -- Password quality -- 매우 약함 -- -- -- Poor — password should be changed -- 매우 약함 — 암호 변경을 고려해야 함 -- -- -- Weak -- Password quality -- 약함 -- -- -- Weak — consider changing the password -- 약함 — 암호 변경을 권장함 -- -- -- (Excluded) -- (제외됨) -- -- -- This entry is being excluded from reports -- 이 항목은 보고서에서 제외됨 -- -- -- Please wait, health data is being calculated... -- 안전성 검사를 진행하는 동안 잠시 기다려 주십시오... -- -- -- Congratulations, everything is healthy! -- 축하합니다, 모든 항목이 안전합니다! -- -- -- Title -- 제목 -- -- -- Path -- 경로 -- -- -- Score -- 점수 -- -- -- Reason -- 이유 -- -- -- Edit Entry... -- 항목 편집... -- -- -- Exclude from reports -- 보고서에서 제외 -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- 경고: 이 보고서를 생성하려면 Have I Been Pwned 온라인 서비스(https://haveibeenpwned.com)로 정보를 보내야 합니다. 계속 진행하면 데이터베이스에 저장된 모든 암호의 암호학적 해시의 첫 5글자를 이 서비스로 안전하게 전송합니다. 데이터베이스는 안전하게 유지되며, 이 정보를 사용하여 데이터베이스에 저장된 원래 암호를 복원할 수는 없습니다. 그러나 해당 온라인 서비스에서는 암호를 보낸 횟수와 IP 주소를 알 수도 있습니다. -- -- -- Perform Online Analysis -- 온라인 분석 시행 -- -- -- Also show entries that have been excluded from reports -- 보고서에서 제외된 항목도 표시 -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- 현재 KeePassXC 빌드에서 네트워크 기능을 지원하지 않습니다. Have I Been Pwned 데이터베이스에 암호를 조회하려면 네트워크 기능이 필요합니다. -- -- -- Congratulations, no exposed passwords! -- 축하합니다, 유출된 암호가 없습니다! -- -- -- Title -- 제목 -- -- -- Path -- 경로 -- -- -- Password exposed… -- 암호 유출됨... -- -- -- (Excluded) -- (제외됨) -- -- -- This entry is being excluded from reports -- 이 항목은 보고서에서 제외됨 -- -- -- once -- 한 번 -- -- -- up to 10 times -- 최대 10번 -- -- -- up to 100 times -- 최대 100번 -- -- -- up to 1000 times -- 최대 1000번 -- -- -- up to 10,000 times -- 최대 10,000번 -- -- -- up to 100,000 times -- 최대 100,000번 -- -- -- up to a million times -- 최대 1,000,000번 -- -- -- millions of times -- 1,000,000번 이상 -- -- -- Edit Entry... -- 항목 편집... -- -- -- Exclude from reports -- 보고서에서 제외 -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- 오류 아이콘이 표시된 항목 위에 마우스를 올려 놓으면 자세한 정보를 표시합니다. -- -- -- Name -- 이름 -- -- -- Value -- -- -- -- Please wait, database statistics are being calculated... -- 데이터베이스 통계를 계산하는 동안 잠시 기다려 주십시오... -- -- -- Database name -- 데이터베이스 이름 -- -- -- Description -- 설명 -- -- -- Location -- 위치 -- -- -- Last saved -- 마지막 저장 -- -- -- Unsaved changes -- 저장하지 않은 변경 사항 -- -- -- yes -- -- -- -- no -- 아니요 -- -- -- The database was modified, but the changes have not yet been saved to disk. -- 데이터베이스가 수정되었지만 변경 사항을 디스크에 저장하지 않았습니다. -- -- -- Number of groups -- 그룹 개수 -- -- -- Number of entries -- 항목 개수 -- -- -- Number of expired entries -- 내보낸 항목 개수 -- -- -- The database contains entries that have expired. -- 데이터베이스에 만료된 항목이 포함되어 있습니다. -- -- -- Unique passwords -- 중복되지 않는 암호 -- -- -- Non-unique passwords -- 중복된 암호 -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- 전체 암호 중 10% 이상을 재사용하고 있습니다. 가능하다면 유일한 암호를 사용하십시오. -- -- -- Maximum password reuse -- 최대 암호 재사용 -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- 일부 암호가 3곳 이상에서 재사용되고 있습니다. 가능하다면 유일한 암호를 사용하십시오. -- -- -- Number of short passwords -- 짧은 암호 개수 -- -- -- Recommended minimum password length is at least 8 characters. -- 최소 8자 이상의 암호를 사용하십시오. -- -- -- Number of weak passwords -- 약한 암호 개수 -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- 암호 강도가 '좋음'이나 '매우 좋음' 등급으로 분류된 긴 무작위 암호를 사용하는 것을 추천합니다. -- -- -- Entries excluded from reports -- 보고서에서 제외된 항목 -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- 보안 강도가 낮은 암호를 사용하는 등의 항목을 보고서에서 제외할 수 있습니다. 항상 문제인 것은 아니지만 사용에 주의하십시오. -- -- -- Average password length -- 평균 암호 길이 -- -- -- %1 characters -- %1자 -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- 평균 암호 길이가 10자 이하입니다. 긴 암호를 사용할수록 더 안전합니다. -- -- -- -- SSHAgent -- -- Agent connection failed. -- 에이전트에 연결할 수 없습니다. -- -- -- Agent protocol error. -- 에이전트 프로토콜 오류입니다. -- -- -- No agent running, cannot add identity. -- 에이전트가 실행 중이지 않아서 식별자를 추가할 수 없습니다. -- -- -- No agent running, cannot remove identity. -- 에이전트가 실행 중이지 않아서 식별자를 삭제할 수 없습니다. -- -- -- Agent refused this identity. Possible reasons include: -- 에이전트에서 이 식별자를 거부했습니다. 가능한 이유: -- -- -- The key has already been added. -- 키가 이미 추가되었습니다. -- -- -- Restricted lifetime is not supported by the agent (check options). -- 에이전트에서 시간 제한을 지원하지 않습니다(옵션을 확인하십시오). -- -- -- A confirmation request is not supported by the agent (check options). -- 에이전트에서 확인 요청을 지원하지 않습니다(옵션을 확인하십시오). -- -- -- Key identity ownership conflict. Refusing to add. -- 키 식별자 소유권이 충돌합니다. 추가하지 않습니다. -- -- -- No agent running, cannot list identities. -- 에이전트가 실행 중이지 않아서 식별자 목록을 표시할 수 없습니다. -- -- -- -- SearchHelpWidget -- -- Search Help -- 검색 도움말 -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- 다음 검색어를 사용할 수 있습니다: [수정자][필드:]["]검색어["] -- -- -- Every search term must match (ie, logical AND) -- 모든 검색어가 일치해야 합니다(논리곱, AND) -- -- -- Modifiers -- 수정자 -- -- -- exclude term from results -- 결과에서 검색어 제외 -- -- -- match term exactly -- 검색어와 정확히 일치 -- -- -- use regex in term -- 검색어에 정규 표현식 사용 -- -- -- Fields -- 필드 -- -- -- Term Wildcards -- 항목 와일드카드 -- -- -- match anything -- 모든 것과 일치 -- -- -- match one -- 하나와 일치 -- -- -- logical OR -- 논리합(OR) -- -- -- Examples -- 예제 -- -- -- -- SearchWidget -- -- Search -- 찾기 -- -- -- Limit search to selected group -- 지정한 그룹에서만 찾기 -- -- -- Search Help -- 검색 도움말 -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- 검색(%1)... -- -- -- Case sensitive -- 대소문자 구분 -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- 옵션 -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeePassXC Freedesktop.org 비밀 서비스 통합 사용 -- -- -- General -- 일반 -- -- -- Show notification when credentials are requested -- 인증 정보가 필요할 때 알림 표시 -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>데이터베이스의 휴지통을 활성화하면 항목을 휴지통으로 이동합니다. 그렇지 않으면 확인하지 않고 삭제합니다.</p><p>다른 항목에서 삭제할 항목을 참조할 때에는 계속 확인 대화상자를 표시합니다.</p></body></html> -- -- -- Exposed database groups: -- 내보낼 데이터베이스 그룹: -- -- -- Authorization -- 인증 -- -- -- These applications are currently connected: -- 다음 프로그램이 연결되어 있습니다: -- -- -- Don't confirm when entries are deleted by clients -- 클라이언트에서 항목을 삭제할 때 확인하지 않기 -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>오류:</b> DBus에 연결할 수 없습니다. DBus 설치 상태를 확인하십시오. -- -- -- <b>Warning:</b> -- <b>경고:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- 플러그인을 활성화하고 이 부분 편집을 활성화하려면 변경 사항을 저장하십시오. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- 활성 -- -- -- Allow export -- 내보내기 허용 -- -- -- Allow import -- 가져오기 허용 -- -- -- Own certificate -- 자가 인증서 -- -- -- Fingerprint: -- 지문: -- -- -- Certificate: -- 인증서: -- -- -- Signer -- 서명자 -- -- -- Key: -- 키: -- -- -- Generate -- 생성 -- -- -- Import -- 가져오기 -- -- -- Export -- 내보내기 -- -- -- Imported certificates -- 가져온 인증서 -- -- -- Trust -- 신뢰 -- -- -- Ask -- 묻기 -- -- -- Untrust -- 믿지 않음 -- -- -- Remove -- 삭제 -- -- -- Path -- 경로 -- -- -- Status -- 상태 -- -- -- Fingerprint -- 지문 -- -- -- Certificate -- 인증서 -- -- -- Trusted -- 신뢰함 -- -- -- Untrusted -- 신뢰하지 않음 -- -- -- Unknown -- 알 수 없음 -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare 키 파일 -- -- -- All files -- 모든 파일 -- -- -- Select path -- 경로 선택 -- -- -- Exporting changed certificate -- 변경된 인증서 내보내기 -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- 내보낸 인증서가 사용 중인 인증서와 다릅니다. 현재 인증서를 내보내시겠습니까? -- -- -- Signer: -- 서명자: -- -- -- Allow KeeShare imports -- KeeShare 가져오기 허용 -- -- -- Allow KeeShare exports -- KeeShare 내보내기 허용 -- -- -- Only show warnings and errors -- 경고와 오류만 표시 -- -- -- Key -- -- -- -- Signer name field -- 서명자 이름 필드 -- -- -- Generate new certificate -- 새 인증서 생성 -- -- -- Import existing certificate -- 기존 인증서 가져오기 -- -- -- Export own certificate -- 내 인증서 내보내기 -- -- -- Known shares -- 알려진 공유 -- -- -- Trust selected certificate -- 선택한 인증서 신뢰 -- -- -- Ask whether to trust the selected certificate every time -- 선택한 인증서를 신뢰할지 항상 묻기 -- -- -- Untrust selected certificate -- 선택한 인증서 신뢰 해제 -- -- -- Remove selected certificate -- 선택한 인증서 삭제 -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- 서명된 공유 컨테이너에 덮어쓰기는 지원되지 않음 - 내보내기 중단됨 -- -- -- Could not write export container (%1) -- 내보내기 컨테이너에 기록할 수 없음 (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- 서명을 임베드할 수 없음: 쓰기 위해 파일을 열 수 없음 (%1) -- -- -- Could not embed signature: Could not write file (%1) -- 서명을 임베드할 수 없음: 파일에 쓸 수 없음 (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- 데이터베이스를 임베드할 수 없음: 쓰기 위해 파일을 열 수 없음 (%1) -- -- -- Could not embed database: Could not write file (%1) -- 데이터베이스를 임베드할 수 없음: 파일에 쓸 수 없음 (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- 서명되지 않은 공유 컨테이너에 덮어쓰기는 지원되지 않음 - 내보내기 중단됨 -- -- -- Could not write export container -- 내보내기 컨테이너에 기록할 수 없음 -- -- -- Unexpected export error occurred -- 예상하지 못한 내보내기 오류 -- -- -- -- ShareImport -- -- Import from container without signature -- 서명되지 않은 컨테이너에서 가져오기 -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- 공유된 컨테이너가 서명되어 있지 않아서 원본을 확인할 수 없습니다. %1에서 가져오시겠습니까? -- -- -- Import from container with certificate -- 서명된 컨테이너에서 가져오기 -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- %3에서 온 지문이 %2인 %1을(를) 신뢰하시겠습니까? -- -- -- Not this time -- 지금은 하지 않음 -- -- -- Never -- 하지 않음 -- -- -- Always -- 항상 -- -- -- Just this time -- 이번 한 번 -- -- -- Signed share container are not supported - import prevented -- 서명된 공유 컨테이너는 지원하지 않음 - 가져오기 중단됨 -- -- -- File is not readable -- 파일에서 읽을 수 없음 -- -- -- Invalid sharing container -- 잘못된 공유 컨테이너 -- -- -- Untrusted import prevented -- 신뢰할 수 없는 가져오기 중단됨 -- -- -- Successful signed import -- 서명된 가져오기 성공 -- -- -- Unsigned share container are not supported - import prevented -- 서명되지 않은 공유 컨테이너는 지원하지 않음 - 가져오기 중단됨 -- -- -- Successful unsigned import -- 서명되지 않은 가져오기 성공 -- -- -- File does not exist -- 파일이 존재하지 않음 -- -- -- Unknown share container type -- 알 수 없는 공유 컨테이너 형식 -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- %1에서 가져오기 실패 (%2) -- -- -- Import from %1 successful (%2) -- %1에서 가져오기 성공 (%2) -- -- -- Imported from %1 -- %1에서 가져옴 -- -- -- Export to %1 failed (%2) -- %1(으)로 내보내기 실패 (%2) -- -- -- Export to %1 successful (%2) -- %1(으)로 내보내기 성공 (%2) -- -- -- Export to %1 -- %1(으)로 내보내기 -- -- -- Multiple import source path to %1 in %2 -- %2의 %1(으)로 다중 가져오기 원본 경로 -- -- -- Conflicting export target path %1 in %2 -- %2의 내보내기 대상 경로 %1이(가) 충돌함 -- -- -- -- TotpDialog -- -- Timed Password -- 시간 제한된 암호 -- -- -- 000000 -- 000000 -- -- -- Copy -- 복사 -- -- -- Expires in <b>%n</b> second(s) -- <b>%n</b>초 후 만료됨 -- -- -- -- TotpExportSettingsDialog -- -- Copy -- 복사 -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- 메모: 이 TOTP 설정은 사용자 정의 설정이며 다른 인증기에서 동작하지 않을 수도 있습니다. -- -- -- There was an error creating the QR code. -- QR 코드를 생성하는 중 오류가 발생했습니다. -- -- -- Closing in %1 seconds. -- %1초 후 닫습니다. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP 설정 -- -- -- Default RFC 6238 token settings -- 기본 RFC 6238 토큰 설정 -- -- -- Steam token settings -- Steam 토큰 설정 -- -- -- Use custom settings -- 사용자 정의 설정 사용 -- -- -- Custom Settings -- 사용자 정의 설정 -- -- -- Time step: -- 시간 단계: -- -- -- sec -- Seconds -- -- -- -- Code size: -- 코드 크기: -- -- -- Secret Key: -- 비밀 키: -- -- -- Secret key must be in Base32 format -- 비밀 키는 Base32 형식이어야 함 -- -- -- Secret key field -- 비밀 키 필드 -- -- -- Algorithm: -- 알고리즘: -- -- -- Time step field -- 시간 단계 필드 -- -- -- digits -- 자리 -- -- -- Invalid TOTP Secret -- 잘못된 TOTP 비밀 값 -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- 잘못된 비밀 키를 입력했습니다. 키는 Base32 형식이어야 합니다. --예: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- TOTP 설정 삭제 확인 -- -- -- Are you sure you want to delete TOTP settings for this entry? -- 이 항목의 TOTP 설정을 삭제하시겠습니까? -- -- -- -- URLEdit -- -- Invalid URL -- 잘못된 URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- 업데이트 확인 중 -- -- -- Checking for updates... -- 업데이트 확인 중... -- -- -- Close -- 닫기 -- -- -- Update Error! -- 업데이트 오류! -- -- -- An error occurred in retrieving update information. -- 업데이트 정보를 가져오는 중 오류가 발생했습니다. -- -- -- Please try again later. -- 나중에 다시 시도하십시오. -- -- -- Software Update -- 소프트웨어 업데이트 -- -- -- A new version of KeePassXC is available! -- KeePassXC의 새로운 버전을 사용할 수 있습니다! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1을(를) 사용할 수 있습니다 — 사용 중인 버전은 %2입니다. -- -- -- Download it at keepassxc.org -- keepassxc.org에서 다운로드 -- -- -- You're up-to-date! -- 최신 버전을 사용하고 있습니다! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC의 현재 최신 버전은 %1입니다 -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- KeePassXC 데이터베이스에 암호를 안전하게 저장하십시오 -- -- -- Create new database -- 새 데이터베이스 만들기 -- -- -- Open existing database -- 기존 데이터베이스 열기 -- -- -- Import from KeePass 1 -- KeePass 1에서 가져오기 -- -- -- Import from CSV -- CSV에서 가져오기 -- -- -- Recent databases -- 최근 데이터베이스 -- -- -- Welcome to KeePassXC %1 -- KeePassXC %1에 오신 것을 환영합니다 -- -- -- Import from 1Password -- 1Password에서 가져오기 -- -- -- Open a recent database -- 최근 데이터베이스 열기 -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] 설정된 슬롯 - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] 질의 응답 - 슬롯 %3 - %4 -- -- -- Press -- 누르기 -- -- -- Passive -- 수동적 -- -- -- %1 Invalid slot specified - %2 -- %1 잘못된 슬롯 지정됨 - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey 인터페이스가 초기화되지 않았습니다. -- -- -- Hardware key is currently in use. -- 하드웨어 키가 사용 중입니다. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- 일련 번호가 %1인 하드웨어 키를 찾을 수 없습니다. 계속 진행하려면 연결하십시오. -- -- -- Hardware key timed out waiting for user interaction. -- 사용자 입력을 기다리는 중 하드웨어 키 시간이 초과되었습니다. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- 하드웨어 키에 접근하는 중 USB 오류가 발생했습니다: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- 질의 응답을 완료할 수 없습니다. 오류: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- 새로 고침 -- -- -- YubiKey Challenge-Response -- YubiKey 질의 응답 -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p><a href="https://www.yubico.com/">YubiKey</a>를 가지고 있다면 추가 보안에 사용할 수 있습니다.</p><p>YubiKey 슬롯 중 하나를 <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a> 모드로 프로그래밍해야 합니다.</p> -- -- -- Refresh hardware tokens -- 하드웨어 토큰 새로 고침 -- -- -- Hardware key slot selection -- 하드웨어 키 슬롯 선택 -- -- -- Could not find any hardware keys! -- 하드웨어 키를 찾을 수 없습니다! -- -- -- Selected hardware key slot does not support challenge-response! -- 선택한 하드웨어 키 슬롯에서 질의 응답을 지원하지 않습니다! -- -- -- Detecting hardware keys… -- 하드웨어 키 인식 중... -- -- -- No hardware keys detected -- 인식된 하드웨어 키 없음 -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_lt.ts keepassxc-2.6.4-patched/share/translations/keepassx_lt.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_lt.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_lt.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7839 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Apie KeePassXC -- -- -- About -- Apie -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Apie klaidas praneškite adresu: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis. -- -- -- Contributors -- Talkininkai -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Žiūrėti talkinimus GitHub puslapyje</a> -- -- -- Debug Info -- Derinimo informacija -- -- -- Include the following information whenever you report a bug: -- Pranešdami apie klaidą, visuomet pateikite ir šią informaciją: -- -- -- Copy to clipboard -- Kopijuoti į iškarpinę -- -- -- Project Maintainers: -- Projektą prižiūri: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Ypatinga padėka nuo KeePassXC komandos yra skiriama debfx už pradinės KeePassX programos sukūrimą. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Programos nustatymai -- -- -- General -- Bendra -- -- -- Security -- Saugumas -- -- -- Access error for config file %1 -- Konfigūracijos failo %1 prieigos klaida -- -- -- Icon only -- Tik piktograma -- -- -- Text only -- Tik tekstas -- -- -- Text beside icon -- Tekstas šalia piktogramos -- -- -- Text under icon -- Tekstas po piktograma -- -- -- Follow style -- Sekti stiliumi -- -- -- Reset Settings? -- Atstatyti nustatymus? -- -- -- Are you sure you want to reset all general and security settings to default? -- -- -- -- Monochrome (light) -- -- -- -- Monochrome (dark) -- -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Pagrindiniai nustatymai -- -- -- Startup -- Įjungimo -- -- -- Start only a single instance of KeePassXC -- Paleisti tik vieną KeePassXC egzempliorių -- -- -- Minimize window at application startup -- Paleidus programą, suskleisti langą -- -- -- File Management -- Failų tvarkymas -- -- -- Backup database file before saving -- Išsaugoti duomenų bazę prieš išsaugant -- -- -- Automatically save after every change -- Automatiškai įrašyti po kiekvieno pakeitimo -- -- -- Automatically reload the database when modified externally -- Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo -- -- -- Entry Management -- Įrašų tvarkymas -- -- -- Use group icon on entry creation -- Kuriant įrašus, naudoti grupės piktogramą -- -- -- Minimize instead of app exit -- -- -- -- Show a system tray icon -- Rodyti sistemos dėklo piktogramą -- -- -- Hide window to system tray when minimized -- Suskleidus langą, slėpti jį į sistemos dėklą -- -- -- Auto-Type -- Automatinis rinkimas -- -- -- Use entry title to match windows for global Auto-Type -- Naudoti įrašo antraštę, norint sutapatinti langus visuotiniam Automatiniam rinkimui -- -- -- Use entry URL to match windows for global Auto-Type -- Naudoti įrašo URL, norint sutapatinti langus visuotiniam Automatiniam rinkimui -- -- -- Always ask before performing Auto-Type -- Visada klausti prieš atliekant automatinį rinkimą -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Perkeliama įrankių juosta -- -- -- Remember previously used databases -- -- -- -- Load previously open databases on startup -- -- -- -- Remember database key files and security dongles -- -- -- -- Check for updates at application startup once per week -- -- -- -- Include beta releases when checking for updates -- -- -- -- Language: -- Kalba: -- -- -- (restart program to activate) -- -- -- -- Minimize window after unlocking database -- -- -- -- Minimize when opening a URL -- -- -- -- Hide window when copying to clipboard -- -- -- -- Minimize -- -- -- -- Drop to background -- -- -- -- Favicon download timeout: -- -- -- -- Website icon download timeout in seconds -- -- -- -- sec -- Seconds -- sek. -- -- -- Toolbar button style -- -- -- -- Language selection -- -- -- -- Global auto-type shortcut -- -- -- -- Auto-type character typing delay milliseconds -- -- -- -- Auto-type start delay milliseconds -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Laiko limitai -- -- -- Clear clipboard after -- Išvalyti iškarpinę po -- -- -- sec -- Seconds -- sek. -- -- -- Lock databases after inactivity of -- Užrakinti duomenų bazes, kai kompiuteris neaktyvus -- -- -- min -- min. -- -- -- Forget TouchID after inactivity of -- Pamiršti TouchID kai nėra jokios veiklos -- -- -- Convenience -- Patogumas -- -- -- Lock databases when session is locked or lid is closed -- Užrakinti duomenų bazes, kai yra užrakinamas seansas ar uždaromas nešiojamojo kompiuterio dangtis -- -- -- Forget TouchID when session is locked or lid is closed -- Pamiršti TouchID, kai yra užrakinamas seansas ar uždaromas nešiojamojo kompiuterio dangtis -- -- -- Lock databases after minimizing the window -- Suskleidus langą, užrakinti duomenų bazes -- -- -- Re-lock previously locked database after performing Auto-Type -- -- -- -- Hide passwords in the entry preview panel -- -- -- -- Hide entry notes by default -- Pagal numatymą, slėpti įrašo pastabas -- -- -- Privacy -- Privatumas -- -- -- Use DuckDuckGo service to download website icons -- -- -- -- Clipboard clear seconds -- -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min. -- -- -- Clear search query after -- -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nepavyko rasti įrašo, kuris atitiktų lango antraštę: -- -- -- Auto-Type - KeePassXC -- Automatinis rinkimas - KeePassXC -- -- -- Auto-Type -- Automatinis rinkimas -- -- -- The Syntax of your Auto-Type statement is incorrect! -- -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- -- -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Langas -- -- -- Sequence -- Seka -- -- -- Default sequence -- Numatytoji seka -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupė -- -- -- Title -- Antraštė -- -- -- Username -- Naudotojo vardas -- -- -- Sequence -- Seka -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopijuoti &naudotojo vardą -- -- -- Copy &password -- Kopijuoti sla&ptažodį -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automatinis rinkimas - KeePassXC -- -- -- Select entry to Auto-Type: -- Pasirinkite įrašą automatiniam rinkimui: -- -- -- Search... -- Ieškoti... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- -- -- -- Ok -- Gerai -- -- -- Cancel -- Atsisakyti -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Turite atvertas kelias duomenų bazes. --Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Naujo rakto susiejimo užklausa -- -- -- Save and allow access -- Įrašyti ir leisti prieigą -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Perrašyti esamą raktą? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Bendrinamas šifravimo raktas, pavadinimu "%1" jau yra. --Ar norite jį perrašyti? -- -- -- KeePassXC: Update Entry -- KeePassXC: Atnaujinti įrašą -- -- -- Do you want to update the information in %1 - %2? -- Ar norite atnaujinti informaciją ties %1 - %2? -- -- -- Abort -- Nutraukti -- -- -- Converting attributes to custom data… -- Konvertuojami požymiai į tinkintus duomenis… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Konvertuoti KeePassHTTP požymiai -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Sėkmingai konvertuoti požymiai iš %1 įrašo(-ų). --Perkelta %2 raktų į tinkintus duomenis. -- -- -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais. -- -- -- KeePassXC: Legacy browser integration settings detected -- -- -- -- KeePassXC: Create a new group -- -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- Daugiau neberodyti šio įspėjimo -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialogas -- -- -- This is required for accessing your databases with KeePassXC-Browser -- -- -- -- Enable browser integration -- -- -- -- General -- Bendra -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- Įjungti integraciją šioms naršyklėms: -- -- -- Vivaldi -- -- -- -- &Edge -- -- -- -- Firefox -- -- -- -- Tor Browser -- -- -- -- Brave -- -- -- -- Google Chrome -- -- -- -- Chromium -- -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ...). -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Vietoj visos srities visų įrašų, grąžina tik geriausiai tam tikrą URL atitinkančius įrašus. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Išplėstiniai -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- Automatinis eilutės laukų kūrimas ar atnaujinimas nėra palaikomas. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Naršyti... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! -- -- -- Executable Files -- Vykdomieji failai -- -- -- All Files -- Visi failai -- -- -- Select custom proxy location -- -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Dubliavimo parinktys -- -- -- Append ' - Clone' to title -- Pridėti prie pavadinimo " - Dublikatas" -- -- -- Replace username and password with references -- Pakeisti naudotojo vardą ir slaptažodį nuorodomis -- -- -- Copy history -- Kopijuoti istoriją -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importuoti CSV laukus -- -- -- filename -- failo pavadinimas -- -- -- size, rows, columns -- dydis, eilučių, stulpelių -- -- -- Encoding -- Koduotė -- -- -- Codec -- Kodekas -- -- -- Text is qualified by -- Tekstas yra parengtas pagal -- -- -- Fields are separated by -- Laukai yra atskirti -- -- -- Comments start with -- Komentarai prasideda su -- -- -- Consider '\' an escape character -- Laikyti "\" kaitos ženklu -- -- -- Preview -- Peržiūra -- -- -- Imported from CSV file -- Importuota iš CSV failo -- -- -- Original data: -- Pradiniai duomenys: -- -- -- Error -- Klaida -- -- -- Error(s) detected in CSV file! -- CSV faile aptikta klaida(-os)! -- -- -- [%n more message(s) skipped] -- -- -- -- CSV import: writer has errors: --%1 -- -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- Paskutinis keitimas -- -- -- Password -- Slaptažodis -- -- -- Created -- Sukurta -- -- -- Notes -- Pastabos -- -- -- Title -- Antraštė -- -- -- Group -- Grupė -- -- -- URL -- URL -- -- -- Username -- Naudotojo vardas -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- -- -- -- Icon -- Piktograma -- -- -- -- CsvParserModel -- -- %n column(s) -- %n stulpelis%n stulpeliai%n stulpelių%n stulpelių -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- -- -- -- %n row(s) -- -- -- -- -- Database -- -- File %1 does not exist. -- Failo %1 nėra. -- -- -- Unable to open file %1. -- Nepavyko atverti failą %1. -- -- -- Error while reading the database: %1 -- Klaida skaitant duomenų bazę: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Failas negali būti įrašytas, nes jis atvertas tik skaitymo veiksenoje. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- Šiukšlinė -- -- -- Passwords -- Root group name -- Slaptažodžiai -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Atrakinti duomenų bazę - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Rakto failas: -- -- -- Refresh -- Įkelti iš naujo -- -- -- Don't show this warning again -- Daugiau neberodyti šio įspėjimo -- -- -- All files -- Visi failai -- -- -- Key files -- Rakto failai -- -- -- Select key file -- Pasirinkite rakto failą -- -- -- Failed to open key file: %1 -- -- -- -- Unlock KeePassXC Database -- -- -- -- Enter Password: -- -- -- -- Password field -- -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Naršyti... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Prašome priliesti mygtuką ant savo YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Slaptažodžiai -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Išplėstiniai nustatymai -- -- -- General -- Bendra -- -- -- Security -- Saugumas -- -- -- Encryption Settings -- Šifravimo nustatymai -- -- -- Browser Integration -- Naršyklės integracija -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- -- -- -- Stored keys -- -- -- -- Remove -- Šalinti -- -- -- Delete the selected key? -- Ištrinti pasirinktą raktą? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- -- Key -- Raktas -- -- -- Value -- Reikšmė -- -- -- Enable Browser Integration to access these settings. -- -- -- -- Disconnect all browsers -- Atjungti visas naršykles -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- -- KeePassXC: No keys found -- KeePassXC: Raktų nerasta -- -- -- No shared encryption keys found in KeePassXC settings. -- -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Pašalinti raktai iš duomenų bazės -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- -- Removing stored permissions… -- Šalinami saugomi leidimai… -- -- -- Abort -- Nutraukti -- -- -- KeePassXC: Removed permissions -- KeePassXC: Pašalinti leidimai -- -- -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nerasta jokių įrašų su leidimais! -- -- -- The active database does not contain an entry with permissions. -- Aktyvioje duomenų bazėje nėra įrašo su leidimais. -- -- -- Move KeePassHTTP attributes to custom data -- Perkelti KeePassHTTP požymius į tinkintus duomenis -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Sukurta -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Pridėti papildomą apsaugą... -- -- -- No password set -- Nenustatytas joks slaptažodis -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- -- Continue without password -- -- -- -- No encryption key added -- Nepridėtas joks šifravimo raktas -- -- -- You must add at least one encryption key to secure your database! -- Norėdami apsaugoti savo duomenų bazę, privalote pridėti bent vieną šifravimo raktą! -- -- -- Unknown error -- Nežinoma klaida -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Šifravimo algoritmas: -- -- -- AES: 256 Bit (default) -- AES: 256 Bitų (numatytasis) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bitų -- -- -- Key Derivation Function: -- Rakto išvedimo funkcija: -- -- -- Transform rounds: -- Pasikeitimo ciklų: -- -- -- Memory Usage: -- Atminties naudojimas: -- -- -- Parallelism: -- -- -- -- Decryption Time: -- Iššifravimo laikas: -- -- -- ?? s -- ?? s -- -- -- Change -- Keisti -- -- -- Higher values offer more protection, but opening the database will take longer. -- -- -- -- Database format: -- Duomenų bazės formatas: -- -- -- This is only important if you need to use your database with other programs. -- Tai yra svarbu tik tuo atveju, jeigu jums reikia naudoti duomenų bazę su kitomis programomis. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (rekomenduojama) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- -- -- -- Number of rounds too high -- Key transformation rounds -- -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- -- Understood, keep number -- -- -- -- Cancel -- Atsisakyti -- -- -- Number of rounds too low -- Key transformation rounds -- -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- -- KDF unchanged -- -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- gija gijos gijų gija -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- -- -- -- Database format -- -- -- -- Encryption algorithm -- -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- -- -- -- Parallelism -- -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Duomenų bazės metaduomenys -- -- -- Database name: -- Duomenų bazės pavadinimas: -- -- -- Database description: -- Duomenų bazės aprašas: -- -- -- Default username: -- Numatytasis naudotojo vardas: -- -- -- History Settings -- Istorijos nustatymai -- -- -- Max. history items: -- Daugiausia istorijos elementų: -- -- -- Max. history size: -- Didžiausias istorijos dydis: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Naudoti šiukšlinę -- -- -- Additional Database Settings -- Papildomi duomenų bazės nustatymai -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- -- -- -- Breadcrumb -- -- -- -- Type -- Tipas -- -- -- Path -- Kelias -- -- -- Last Signer -- -- -- -- Certificates -- Liudijimai -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Duomenų bazės pavadinimas: -- -- -- Description: -- Aprašas: -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 duomenų bazė -- -- -- All files -- Visi failai -- -- -- Open database -- Atverti duomenų bazę -- -- -- CSV file -- CSV failas -- -- -- Merge database -- Sulieti duomenų bazę -- -- -- Open KeePass 1 database -- Atverkite KeePass 1 duomenų bazę -- -- -- KeePass 1 database -- KeePass 1 duomenų bazė -- -- -- Export database to CSV file -- Eksportuoti duomenų bazę į CSV failą -- -- -- Writing the CSV file failed. -- CSV failo įrašymas nepavyko. -- -- -- Database creation error -- Duomenų bazės sukūrimo klaida -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- -- Select CSV file -- -- -- -- New Database -- Nauja duomenų bazė -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nauja duomenų bazė] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Užrakinta] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Tik skaitymui] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Ieškoma... -- -- -- Do you really want to delete the entry "%1" for good? -- Ar tikrai norite ištrinti įrašą "%1"? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Ar tikrai norite perkelti įrašą "%1" į šiukšlinę? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- -- -- -- Execute command? -- Vykdyti komandą? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Ar tikrai norite vykdyti šią komandą?<br><br>%1<br> -- -- -- Remember my choice -- Prisiminti mano pasirinkimą -- -- -- Do you really want to delete the group "%1" for good? -- Ar tikrai norite ištrinti grupę "%1"? -- -- -- No current database. -- Nėra esamos duomenų bazės. -- -- -- No source database, nothing to do. -- Nėra šaltinio duomenų bazės, nėra ką atlikti. -- -- -- Search Results (%1) -- Paieškos rezultatai (%1) -- -- -- No Results -- Nėra rezultatų -- -- -- File has changed -- Failas pasikeitė -- -- -- The database file has changed. Do you want to load the changes? -- Duomenų bazės failas pasikeitė. Ar norite įkelti pakeitimus? -- -- -- Merge Request -- Suliejimo užklausa -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Duomenų bazės failas pasikeitė ir jūs turite neįrašytų pakeitimų. --Ar norite sulieti savo pakeitimus? -- -- -- Empty recycle bin? -- Išvalyti šiukšlinę? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Ar tikrai norite negrįžtamai viską ištrinti iš savo šiukšlinės? -- -- -- Do you really want to delete %n entry(s) for good? -- -- -- -- Delete entry(s)? -- -- -- -- Move entry(s) to recycle bin? -- -- -- -- Lock Database? -- Užrakinti duomenų bazę? -- -- -- You are editing an entry. Discard changes and lock anyway? -- -- -- -- "%1" was modified. --Save changes? -- "%1" buvo pakeista. --Įrašyti pakeitimus? -- -- -- Database was modified. --Save changes? -- -- -- -- Save changes? -- Įrašyti pakeitimus? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- -- Disable safe saves? -- -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- -- Passwords -- Slaptažodžiai -- -- -- Save database as -- Įrašyti duomenų bazę kaip -- -- -- KeePass 2 Database -- KeePass 2 duomenų bazė -- -- -- Replace references to entry? -- -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Ištrinti grupę -- -- -- Move group to recycle bin? -- Perkelti grupę į šiukšlinę? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Ar tikrai norite perkelti grupę "%1" į šiukšlinę? -- -- -- Successfully merged the database files. -- Duomenų bazės failai sėkmingai sulieti. -- -- -- Database was not modified by merge operation. -- -- -- -- Shared group... -- -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Įrašas -- -- -- Advanced -- Išplėstiniai -- -- -- Icon -- Piktograma -- -- -- Auto-Type -- Automatinis rinkimas -- -- -- Properties -- Savybės -- -- -- History -- Istorija -- -- -- SSH Agent -- SSH agentas -- -- -- n/a -- nėra -- -- -- (encrypted) -- (šifruota) -- -- -- Select private key -- Pasirinkti privatųjį raktą -- -- -- Entry history -- Įrašo istorija -- -- -- Add entry -- Pridėti įrašą -- -- -- Edit entry -- Keisti įrašą -- -- -- New attribute -- Naujas požymis -- -- -- Are you sure you want to remove this attribute? -- Ar tikrai norite pašalinti šį požymi? -- -- -- Tomorrow -- Rytoj -- -- -- %n week(s) -- %n savaitė%n savaitės%n savaičių%n savaičių -- -- -- %n month(s) -- %n mėnesis%n mėnesiai%n mėnesių%n mėnesių -- -- -- Entry updated successfully. -- Įrašas sėkmingai atnaujintas. -- -- -- New attribute %1 -- Naujas požymis %1 -- -- -- %n year(s) -- -- -- -- Confirm Removal -- -- -- -- Browser Integration -- Naršyklės integracija -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- Atskleisti -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Papildomi požymiai -- -- -- Add -- Pridėti -- -- -- Remove -- Šalinti -- -- -- Edit Name -- Taisyti pavadinimą -- -- -- Protect -- Apsaugoti -- -- -- Reveal -- Atskleisti -- -- -- Attachments -- Priedai -- -- -- Foreground Color: -- Priekinio plano spalva: -- -- -- Background Color: -- Fono spalva: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Įjungti šiam įrašui automatinį rinkimą -- -- -- Window Associations -- Lango asociacijos -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Lango antraštė: -- -- -- Use a specific sequence for this association: -- -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- Paveldėti numatytąją automatinio rinkimo seką iš grupės -- -- -- Use custom Auto-Type sequence: -- Naudoti tinkintą automatinio rinkimo seka: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- Bendra -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Pridėti -- -- -- Remove -- Šalinti -- -- -- Edit -- Keisti -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Rodyti -- -- -- Restore -- Atkurti -- -- -- Delete -- Ištrinti -- -- -- Delete all -- Ištrinti visus -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Slaptažodis: -- -- -- Title: -- Antraštė: -- -- -- Presets -- Parinktys -- -- -- Toggle the checkbox to reveal the notes section. -- Norėdami atskleisti pastabų sekciją, perjunkite žymimąjį langelį. -- -- -- Username: -- Naudotojo vardas: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- -- -- -- Toggle notes visible -- -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- -- -- -- Notes: -- Pastabos: -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Forma -- -- -- Remove key from agent after -- Šalinti raktą iš agento po -- -- -- seconds -- sekundžių -- -- -- Fingerprint -- Kontrolinis kodas -- -- -- Remove key from agent when database is closed/locked -- Užvėrus/užrakinus duomenų bazę, šalinti raktą iš agento -- -- -- Public key -- Viešasis raktas -- -- -- Add key to agent when database is opened/unlocked -- Atvėrus/atrakinus duomenų bazę, pridėti raktą į agentą -- -- -- Comment -- Komentaras -- -- -- Decrypt -- Iššifruoti -- -- -- n/a -- nėra -- -- -- Copy to clipboard -- Kopijuoti į iškarpinę -- -- -- Private key -- Privatusis raktas -- -- -- External file -- Išorinis failas -- -- -- Browse... -- Button for opening file dialog -- Naršyti... -- -- -- Attachment -- Priedas -- -- -- Add to agent -- Pridėti į agentą -- -- -- Remove from agent -- Šalinti iš agento -- -- -- Require user confirmation when this key is used -- Naudojant šį raktą, reikalauti naudotojo patvirtinimo -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Grupė -- -- -- Icon -- Piktograma -- -- -- Properties -- Savybės -- -- -- Add group -- Pridėti grupę -- -- -- Edit group -- Keisti grupę -- -- -- Enable -- Įjungti -- -- -- Disable -- Išjungti -- -- -- Inherit from parent group (%1) -- Paveldėti iš pirminės grupės (%1) -- -- -- Entry has unsaved changes -- Įraše yra neįrašytų pakeitimų -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipas: -- -- -- Path: -- Kelias: -- -- -- Password: -- Slaptažodis: -- -- -- Inactive -- -- -- -- KeeShare unsigned container -- -- -- -- KeeShare signed container -- -- -- -- Select import source -- -- -- -- Select export target -- -- -- -- Select import/export file -- -- -- -- Clear -- Išvalyti -- -- -- Import -- Importuoti -- -- -- Export -- -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Naršyti... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- Pastabos: -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Pridėti tinkintą piktogramą -- -- -- Delete custom icon -- Ištrinti tinkintą piktogramą -- -- -- Download favicon -- Atsisiųsti svetainės piktogramą -- -- -- Unable to fetch favicon. -- Nepavyko gauti svetainės piktogramos. -- -- -- Images -- Paveikslai -- -- -- All files -- Visi failai -- -- -- Confirm Delete -- Patvirtinti ištrynimą -- -- -- Select Image(s) -- -- -- -- Successfully loaded %1 of %n icon(s) -- -- -- -- No icons were loaded -- Neįkelta jokių piktogramų -- -- -- %n icon(s) already exist in the database -- -- -- -- The following icon(s) failed: -- Ši piktograma patyrė nesėkmę:Šios piktogramos patyrė nesėkmę:Šios piktogramos patyrė nesėkmę:Šios piktogramos patyrė nesėkmę: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- Naudoti numatytąją piktogramą -- -- -- Use custom icon -- Naudoti tinkintą piktogramą -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Sukurta: -- -- -- Modified: -- Keista: -- -- -- Accessed: -- Prieiga: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- -- -- -- Remove -- Šalinti -- -- -- Delete plugin data? -- -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- -- -- -- Key -- Raktas -- -- -- Value -- Reikšmė -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- -- -- -- -- EntryAttachmentsModel -- -- Name -- Pavadinimas -- -- -- Size -- Dydis -- -- -- -- EntryAttachmentsWidget -- -- Form -- Forma -- -- -- Add -- Pridėti -- -- -- Remove -- Šalinti -- -- -- Open -- Atverti -- -- -- Save -- Įrašyti -- -- -- Select files -- Pasirinkti failus -- -- -- Are you sure you want to remove %n attachment(s)? -- Ar tikrai norite pašalinti %n priedą?Ar tikrai norite pašalinti %n priedus?Ar tikrai norite pašalinti %n priedų?Ar tikrai norite pašalinti %n priedų? -- -- -- Save attachments -- Įrašyti priedus -- -- -- Unable to create directory: --%1 -- Nepavyko sukurti katalogą: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Ar tikrai norite perrašyti failą "%1" priedu? -- -- -- Confirm overwrite -- Patvirtinti perrašymą -- -- -- Unable to save attachments: --%1 -- Nepavyko įrašyti priedus: --%1 -- -- -- Unable to open attachment: --%1 -- Nepavyko atverti priedą: --%1 -- -- -- Unable to open attachments: --%1 -- Nepavyko atverti priedus: --%1 -- -- -- Confirm remove -- -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Priedai -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Pavadinimas -- -- -- -- EntryHistoryModel -- -- Last modified -- Paskutinis keitimas -- -- -- Title -- Antraštė -- -- -- Username -- Naudotojo vardas -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Nuoroda: -- -- -- Group -- Grupė -- -- -- Title -- Antraštė -- -- -- Username -- Naudotojo vardas -- -- -- URL -- URL -- -- -- Never -- Niekada -- -- -- Password -- Slaptažodis -- -- -- Notes -- Pastabos -- -- -- Expires -- Baigia galioti -- -- -- Created -- Sukurta -- -- -- Modified -- Keista -- -- -- Accessed -- Prieiga -- -- -- Attachments -- Priedai -- -- -- Size -- Dydis -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Užverti -- -- -- General -- Bendra -- -- -- Username -- Naudotojo vardas -- -- -- Password -- Slaptažodis -- -- -- Expiration -- Galiojimas -- -- -- URL -- URL -- -- -- Attributes -- Požymiai -- -- -- Attachments -- Priedai -- -- -- Notes -- Pastabos -- -- -- Autotype -- Automatinis rinkimas -- -- -- Window -- Langas -- -- -- Sequence -- Seka -- -- -- Searching -- Paieška -- -- -- Search -- Paieška -- -- -- Clear -- Išvalyti -- -- -- Never -- Niekada -- -- -- [PROTECTED] -- [APSAUGOTA] -- -- -- Enabled -- Įjungta -- -- -- Disabled -- Išjungta -- -- -- Share -- -- -- -- Display current TOTP value -- -- -- -- Advanced -- Išplėstiniai -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Priderinti prie lango -- -- -- Fit to contents -- Priderinti prie turinio -- -- -- Reset to defaults -- Atstatyti į numatytuosius -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Grupė -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- Nėra -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Nežinoma -- -- -- Unknown -- Unknown executable path -- Nežinoma -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [tuščia] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- Atsisakyti -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Užverti -- -- -- URL -- URL -- -- -- Status -- Būsena -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- -- -- -- Ok -- Gerai -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &Užverti -- -- -- Close message -- Užverti žinutę -- -- -- -- Kdbx3Reader -- -- missing database headers -- trūksta duomenų bazės antraščių -- -- -- Header doesn't match hash -- Antraštė neatitinka maišą -- -- -- Invalid header id size -- Neteisingas antraštės id dydis -- -- -- Invalid header field length -- Neteisingas antraštės lauko ilgis -- -- -- Invalid header data length -- Neteisingas antraštės duomenų ilgis -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- trūksta duomenų bazės antraščių -- -- -- Invalid header checksum size -- Neteisingas antraštės kontrolinės sumos dydis -- -- -- Header SHA256 mismatch -- Antraštės SHA256 neatitikimas -- -- -- Unknown cipher -- Nežinomas šifras -- -- -- Invalid header id size -- Neteisingas antraštės id dydis -- -- -- Invalid header field length -- Neteisingas antraštės lauko ilgis -- -- -- Invalid header data length -- Neteisingas antraštės duomenų ilgis -- -- -- Failed to open buffer for KDF parameters in header -- -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- -- Legacy header fields found in KDBX4 file. -- -- -- -- Invalid inner header id size -- Neteisingas vidinės antraštės id dydis -- -- -- Invalid inner header field length -- Neteisingas vidinės antraštės lauko ilgis -- -- -- Invalid inner header binary size -- -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nepalaikomas šifras -- -- -- Invalid compression flags length -- -- -- -- Unsupported compression algorithm -- Nepalaikomas glaudinimo algoritmas -- -- -- Invalid master seed size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid transform rounds size -- -- -- -- Invalid start bytes size -- -- -- -- Invalid random stream id size -- -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- Ne KeePass duomenų bazė. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Pasirinktas failas yra sena KeePass 1 duomenų bazė (.kdb). -- --Jūs galite ją importuoti, nuspausdami Duomenų bazė > "Importuoti KeePass 1 duomenų bazę...". --Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų bazės, naudodami senąją KeePassX 0.4 versija. -- -- -- Unsupported KeePass 2 database version. -- Nepalaikoma KeePass 2 duomenų bazės versija. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- -- -- -- Failed to read database file. -- -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML nagrinėjimo nesėkmė: %1 -- -- -- No root group -- -- -- -- Missing icon uuid or data -- Trūksta piktogramos uuid ar duomenų -- -- -- Missing custom data key or value -- -- -- -- Multiple group elements -- -- -- -- Null group uuid -- -- -- -- Invalid group icon number -- -- -- -- Invalid EnableAutoType value -- -- -- -- Invalid EnableSearching value -- -- -- -- No group uuid found -- Nerastas grupės uuid -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- -- -- -- Null entry uuid -- -- -- -- Invalid entry icon number -- -- -- -- History element in history entry -- Istorijos elementas istorijos įraše -- -- -- No entry uuid found -- Nerastas įrašo uuid -- -- -- History element with different uuid -- -- -- -- Duplicate custom attribute found -- Rastas dubliuotas tinkintas požymis -- -- -- Entry string key or value missing -- -- -- -- Entry binary key or value missing -- -- -- -- Auto-type association window or sequence missing -- -- -- -- Invalid bool value -- -- -- -- Invalid date time value -- Neteisinga datos laiko reikšmė -- -- -- Invalid color value -- Neteisinga spalvos reikšmė -- -- -- Invalid color rgb part -- Neteisinga spalvos rgb dalis -- -- -- Invalid number value -- Neteisinga skaitmeninė reikšmė -- -- -- Invalid uuid value -- Neteisinga uuid reikšmė -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- -- -- -- XML error: --%1 --Line %2, column %3 -- XML klaida: --%1 --%2 eilutė, %3 stulpelis -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Failas per didelis, kad būtų privatusis raktas -- -- -- Failed to open private key -- Nepavyko atverti privačiojo rakto -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Nepavyko atverti duomenų bazės. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Nepavyko perskaityti rakto failo. -- -- -- Not a KeePass database. -- Ne KeePass duomenų bazė. -- -- -- Unsupported encryption algorithm. -- Nepalaikomas šifravimo algoritmas. -- -- -- Unsupported KeePass database version. -- Nepalaikoma KeePass duomenų bazės versija. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Nepavyko perskaityti šifravimo IV -- -- -- Invalid number of groups -- Neteisingas grupių skaičius -- -- -- Invalid number of entries -- Neteisingas įrašų skaičius -- -- -- Invalid content hash size -- Neteisingas turinio maišos dydis -- -- -- Invalid transform seed size -- -- -- -- Invalid number of transform rounds -- -- -- -- Unable to construct group tree -- -- -- -- Root -- Šaknis -- -- -- Key transformation failed -- Rakto transformacija nepavyko -- -- -- Invalid group field type number -- -- -- -- Invalid group field size -- -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- -- -- -- Incorrect group icon field size -- -- -- -- Incorrect group level field size -- -- -- -- Invalid group field type -- Neteisingas grupės lauko tipas -- -- -- Missing group id or level -- -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- Neteisingas įrašo lauko dydis -- -- -- Read entry field data doesn't match size -- -- -- -- Invalid entry uuid field size -- Neteisingas įrašo uuid lauko dydis -- -- -- Invalid entry group id field size -- -- -- -- Invalid entry icon field size -- -- -- -- Invalid entry creation time field size -- -- -- -- Invalid entry modification time field size -- -- -- -- Invalid entry expiry time field size -- -- -- -- Invalid entry field type -- Neteisingas įrašo lauko tipas -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- Importuota iš %1 -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- -- -- -- Exported to -- -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- -- -- -- Key Component Description -- -- -- -- Cancel -- Atsisakyti -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- Pridėti %1 -- -- -- Change %1 -- Change a key component -- Keisti %1 -- -- -- Remove %1 -- Remove a key component -- Šalinti %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- -- -- -- -- KeyFileEditWidget -- -- Generate -- Generuoti -- -- -- Key File -- Rakto failas -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Rakto failai -- -- -- All files -- Visi failai -- -- -- Create Key File... -- Sukurti rakto failą... -- -- -- Error creating key file -- Klaida kuriant rakto failą -- -- -- Unable to create key file: %1 -- Nepavyko sukurti rakto failo: %1 -- -- -- Select a key file -- Pasirinkite rakto failą -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Naršyti... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Duomenų bazė -- -- -- &Help -- Ž&inynas -- -- -- &Groups -- &Grupės -- -- -- &Tools -- Į&rankiai -- -- -- &Quit -- &Baigti -- -- -- &About -- &Apie -- -- -- Database settings -- Duomenų bazės nustatymai -- -- -- Copy username to clipboard -- Kopijuoti naudotojo vardą į iškarpinę -- -- -- Copy password to clipboard -- Kopijuoti slaptažodį į iškarpinę -- -- -- &Settings -- &Nustatymai -- -- -- &Title -- &Antraštė -- -- -- Copy title to clipboard -- Kopijuoti pavadinimą į iškarpinę -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopijuoti URL į iškarpinę -- -- -- &Notes -- &Pastabos -- -- -- Copy notes to clipboard -- Kopijuoti pastabas į iškarpinę -- -- -- Copy &TOTP -- Kopijuoti &NTVS -- -- -- E&mpty recycle bin -- Iš&valyti šiukšlinę -- -- -- Clear history -- Išvalyti istoriją -- -- -- Access error for config file %1 -- Konfigūracijos failo %1 prieigos klaida -- -- -- Settings -- Nustatymai -- -- -- Toggle window -- Perjungti langą -- -- -- Quit KeePassXC -- Išeiti iš KeePassXC -- -- -- Please touch the button on your YubiKey! -- Prašome priliesti mygtuką ant savo YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- -- &Donate -- &Paaukoti -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- &Importuoti -- -- -- Create a new database -- Sukurti naują duomenų bazę -- -- -- Merge from another KDBX database -- Sulieti iš kitos KDBX duomenų bazės -- -- -- Add a new entry -- Pridėti naują įrašą -- -- -- View or edit entry -- Rodyti ar taisyti įrašą -- -- -- Add a new group -- Pridėti naują grupę -- -- -- Perform &Auto-Type -- -- -- -- Open &URL -- Atverti &URL -- -- -- Import a KeePass 1 database -- Importuoti KeePass 1 duomenų bazę -- -- -- Import a CSV file -- Importuoti CSV failą -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- -- -- -- Would you like KeePassXC to check for updates on startup? -- -- -- -- You can always check for updates manually from the application menu. -- -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- -- -- -- View -- Rodinys -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Rodyti NTVS -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Slėpti naudotojo vardus -- -- -- Hide Passwords -- Slėpti slaptažodžius -- -- -- -- ManageDatabase -- -- Database settings -- Duomenų bazės nustatymai -- -- -- Edit database settings -- -- -- -- Unlock database -- Atrakinti duomenų bazę -- -- -- Unlock database to show more information -- -- -- -- Lock database -- Užrakinti duomenų bazę -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- Pridedama trūkstama piktograma %1 -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Sukurti naują KeePassXC duomenų bazę... -- -- -- Root -- Root group -- Šaknis -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose. -- -- -- Advanced Settings -- Išplėstiniai nustatymai -- -- -- Simple Settings -- Paprasti nustatymai -- -- -- Encryption Settings -- Šifravimo nustatymai -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Šifravimo nustatymai -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Neteisingas rakto failas, tikimasi OpenSSH rakto -- -- -- PEM boundary mismatch -- PEM ribos neatitikimas -- -- -- Base64 decoding failed -- Base64 dekodavimas patyrė nesėkmę -- -- -- Key file way too small. -- Rakto failas buvo per mažas. -- -- -- Key file magic header id invalid -- Neteisingas rakto failo magiškosios antraštės id -- -- -- Found zero keys -- Rasta nulis raktų -- -- -- Failed to read public key. -- Nepavyko perskaityti viešojo rakto. -- -- -- Corrupted key file, reading private key failed -- Sugadintas rakto failas, privačiojo rakto skaitymas nepavyko -- -- -- No private key payload to decrypt -- Nėra jokios privačiojo rakto naudingosios apkrovos, kurią iššifruoti -- -- -- Trying to run KDF without cipher -- Bandoma paleisti KDF be šifro -- -- -- Passphrase is required to decrypt this key -- Norint iššifruoti šį raktą, reikalinga slaptafrazė -- -- -- Key derivation failed, key file corrupted? -- Rakto išvedimas nepavyko, pažeistas rakto failas? -- -- -- Decryption failed, wrong passphrase? -- Iššifravimas nepavyko, neteisinga slaptafrazė? -- -- -- Unexpected EOF while reading public key -- Netikėta failo pabaiga, skaitant viešąjį raktą -- -- -- Unexpected EOF while reading private key -- Netikėta failo pabaiga, skaitant privatųjį raktą -- -- -- Can't write public key as it is empty -- Nepavyksta rašyti viešojo rakto, nes jis tuščias -- -- -- Unexpected EOF when writing public key -- Netikėta failo pabaiga, rašant viešąjį raktą -- -- -- Can't write private key as it is empty -- Nepavyksta rašyti privačiojo rakto, nes jis tuščias -- -- -- Unexpected EOF when writing private key -- Netikėta failo pabaiga, rašant privatųjį raktą -- -- -- Unsupported key type: %1 -- Nepalaikomas rakto tipas: %1 -- -- -- Unknown cipher: %1 -- Nežinomas šifras: %1 -- -- -- Cipher IV is too short for MD5 kdf -- -- -- -- Unknown KDF: %1 -- Nežinomas KDF: %1 -- -- -- Unknown key type: %1 -- Nežinomas rakto tipas: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Įrašykite slaptažodį: -- -- -- Confirm password: -- -- -- -- Password -- Slaptažodis -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- Slaptažodžiai nesutampa. -- -- -- Password field -- -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- stiprumas -- -- -- entropy -- entropija -- -- -- Password -- Slaptažodis -- -- -- Character Types -- Simbolių tipai -- -- -- Numbers -- Skaičiai -- -- -- Extended ASCII -- Papildomi ASCII -- -- -- Exclude look-alike characters -- Pašalinti panašiai atrodančius simbolius -- -- -- Pick characters from every group -- Parinkti simbolius iš kiekvienos grupės -- -- -- &Length: -- &Ilgis: -- -- -- Passphrase -- Slaptafrazė -- -- -- Wordlist: -- Žodžių sąrašas: -- -- -- Word Separator: -- Žodžių skirtukas: -- -- -- Close -- Užverti -- -- -- Entropy: %1 bit -- Entropija: %1 bitų -- -- -- Password Quality: %1 -- Slaptažodžio kokybė: %1 -- -- -- Poor -- Password quality -- Blogas -- -- -- Weak -- Password quality -- Silpnas -- -- -- Good -- Password quality -- Geras -- -- -- Excellent -- Password quality -- Puikus -- -- -- Switch to advanced mode -- Perjungti į išplėstinę veikseną -- -- -- Advanced -- Išplėstiniai -- -- -- Braces -- -- -- -- Punctuation -- -- -- -- Quotes -- Kabutės -- -- -- Logograms -- -- -- -- Character set to exclude from generated password -- -- -- -- Do not include: -- Neįtraukti: -- -- -- Add non-hex letters to "do not include" list -- -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- Kopijuoti slaptažodį -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- Žodžių skaičius: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- Specialūs simboliai -- -- -- -- QApplication -- -- KeeShare -- -- -- -- Statistics -- -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- -- -- -- Delete -- Ištrinti -- -- -- Move -- -- -- -- Empty -- -- -- -- Remove -- Šalinti -- -- -- Skip -- -- -- -- Disable -- Išjungti -- -- -- Merge -- -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- Duomenų bazė neatverta -- -- -- Database hash not available -- Duomenų bazės maiša yra neprieinama -- -- -- Client public key not received -- -- -- -- Cannot decrypt message -- Nepavyksta iššifruoti žinutės -- -- -- Action cancelled or denied -- Veiksmo atsisakyta arba jis atmestas -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- Šifravimo raktas yra neatpažintas -- -- -- Incorrect action -- Neteisingas veiksmas -- -- -- Empty message received -- Gauta tuščia žinutė -- -- -- No URL provided -- Nepateiktas URL -- -- -- No logins found -- Nerasta prisijungimų -- -- -- Unknown error -- Nežinoma klaida -- -- -- Add a new entry to a database. -- Pridėti naują įrašą į duomenų bazę. -- -- -- Path of the database. -- Duomenų bazės kelias. -- -- -- Key file of the database. -- Duomenų bazės rakto failas. -- -- -- path -- kelias -- -- -- Username for the entry. -- Įrašo naudotojo vardas. -- -- -- username -- naudotojo vardas -- -- -- URL for the entry. -- Įrašo URL. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Klausti įrašo slaptažodžio. -- -- -- Generate a password for the entry. -- Generuoti įrašui slaptažodį. -- -- -- length -- ilgis -- -- -- Path of the entry to add. -- Įrašo, kurį pridėti, kelias. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Įrašo, kurį iškirpti, kelias. -- -- -- Timeout in seconds before clearing the clipboard. -- Skirtas laikas, sekundėmis, prieš išvalant iškarpinę. -- -- -- Edit an entry. -- Taisyti įrašą. -- -- -- Title for the entry. -- Įrašo pavadinimas. -- -- -- title -- antraštė -- -- -- Path of the entry to edit. -- Įrašo, kurį taisyti, kelias. -- -- -- Estimate the entropy of a password. -- Apskaičiuoti slaptažodžio entropiją. -- -- -- Password for which to estimate the entropy. -- Slaptažodis, kurio entropiją apskaičiuoti -- -- -- Perform advanced analysis on the password. -- Atlikti išplėstinę slaptažodžio analizę -- -- -- -- --Available commands: -- -- -- --Prieinamos komandos: -- -- -- -- Name of the command to execute. -- Komandos, kurią vykdyti, pavadinimas. -- -- -- List database entries. -- Išvardyti duomenų bazės įrašus. -- -- -- Path of the group to list. Default is / -- Grupės, kurią išvardyti, kelias. Numatytasis yra / -- -- -- Find entries quickly. -- Greitai rasti įrašus. -- -- -- Search term. -- Paieškos žodis. -- -- -- Merge two databases. -- Sulieti dvi duomenų bazes. -- -- -- Path of the database to merge from. -- Duomenų bazės, iš kurios sulieti, kelias. -- -- -- Use the same credentials for both database files. -- Abiems duomenų bazių failams naudoti tuos pačius prisijungimo duomenis. -- -- -- Key file of the database to merge from. -- Duomenų bazės, iš kurios sulieti, rakto failas. -- -- -- Show an entry's information. -- Rodyti įrašo informaciją. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Požymių, kuriuos rodyti, pavadinimai. Ši parinktis gali būti nurodyta daugiau nei vieną kartą, kiekvienoje eilutėje nurodyta tvarka rodant po atskirą požymį. Jei nėra nurodyti jokie požymiai, bus nurodyta numatytųjų požymių santrauka. -- -- -- attribute -- požymis -- -- -- Name of the entry to show. -- Įrašo, kurį rodyti, pavadinimas. -- -- -- NULL device -- NIEKINIS įrenginys -- -- -- error reading from device -- klaida skaitant iš įrenginio -- -- -- malformed string -- netaisyklinga eilutė -- -- -- missing closing quote -- trūksta užveriamosios kabutės -- -- -- Group -- Grupė -- -- -- Title -- Antraštė -- -- -- Username -- Naudotojo vardas -- -- -- Password -- Slaptažodis -- -- -- Notes -- Pastabos -- -- -- Last Modified -- Paskutinis keitimas -- -- -- Created -- Sukurta -- -- -- Browser Integration -- Naršyklės integracija -- -- -- SSH Agent -- SSH agentas -- -- -- Generate a new random diceware passphrase. -- -- -- -- Word count for the diceware passphrase. -- -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- -- Generate a new random password. -- Generuoti naują atsitiktinį slaptažodį. -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- Rašymas į duomenų bazę patyrė nesėkmę %1. -- -- -- Successfully added entry %1. -- Sėkmingai pridėtas įrašas %1. -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- Įrašas %1 nerastas. -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- Iškarpinė išvalyta! -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- kiekis -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- Ilgis %1 -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- Nepavyko įkelti rakto failo %1: %2 -- -- -- Length of the generated password -- -- -- -- Use lowercase characters -- -- -- -- Use uppercase characters -- -- -- -- Use special characters -- -- -- -- Use extended ASCII -- -- -- -- Exclude character set -- -- -- -- chars -- -- -- -- Exclude similar looking characters -- -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- Nepavyksta rasti grupės %1. -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- Nepavyko įrašyti duomenų bazę į failą : %1 -- -- -- Unable to save database to file: %1 -- Nepavyko įrašyti duomenų bazę į failą: %1 -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- Sėkmingai ištrintas įrašas %1. -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- KLAIDA: nežinomas požymis %1. -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- failas tuščias -- -- -- %1: (row, col) %2,%3 -- %1: (eil., stulp.) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Neteisingi nustatymai -- -- -- Invalid Key -- TOTP -- Neteisingas raktas -- -- -- Message encryption failed. -- -- -- -- No groups found -- Nerasta jokių grupių -- -- -- Create a new database. -- Sukurti naują duomenų bazę. -- -- -- File %1 already exists. -- Failas %1 jau yra. -- -- -- Loading the key file failed -- Rakto failo įkėlimas nepavyko -- -- -- No key is set. Aborting database creation. -- Nenustatytas joks raktas. Duomenų bazės sukūrimas nutraukiamas. -- -- -- Failed to save the database: %1. -- Nepavyko įrašyti duomenų bazės: %1. -- -- -- Successfully created new database. -- Nauja duomenų bazė sėkmingai sukurta. -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- Įrašo, kurį šalinti, kelias. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Esamas vieno egzemplioriaus užrakto failas yra neteisingas. Paleidžiamas naujas egzempliorius. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Nepavyko sukurti užrakto. Vieno egzemplioriaus veiksena išjungta. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė -- -- -- filenames of the password databases to open (*.kdbx) -- norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx) -- -- -- path to a custom config file -- kelias į tinkintą konfigūracijos failą -- -- -- key file of the database -- duomenų bazės rakto failas -- -- -- read password of the database from stdin -- nuskaityti duomenų bazės slaptažodį iš stdin -- -- -- Another instance of KeePassXC is already running. -- Jau yra paleistas kitas KeePassXC egzempliorius. -- -- -- Fatal error while testing the cryptographic functions. -- Lemtingoji klaida, testuojant šifravimo funkcijas. -- -- -- KeePassXC - Error -- KeePassXC - Klaida -- -- -- Database password: -- Duomenų bazės slaptažodis: -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Versija %1 -- -- -- Build Type: %1 -- Darinio tipas: %1 -- -- -- Revision: %1 -- Revizija: %1 -- -- -- Distribution: %1 -- Platinimas: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operacinė sistema: %1 --Procesoriaus architektūra: %2 --Branduolys: %3 %4 -- -- -- Auto-Type -- Automatinis rinkimas -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nėra -- -- -- Enabled extensions: -- Įjungti plėtiniai: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- -- -- -- Icon -- Piktograma -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Vidinė zlib klaida, glaudinant: -- -- -- Error writing to underlying device: -- Klaida, įrašant į bazinį įrenginį: -- -- -- Error opening underlying device: -- Klaida, atveriant bazinį įrenginį: -- -- -- Error reading data from underlying device: -- Klaida, skaitant iš bazinio įrenginio: -- -- -- Internal zlib error when decompressing: -- Vidinė zlib klaida, išskleidžiant: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Šioje zlib versijoje gzip formatas yra nepalaikomas. -- -- -- Internal zlib error: -- Vidinė zlib klaida: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Blogas -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Silpnas -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Antraštė -- -- -- Path -- Kelias -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Antraštė -- -- -- Path -- Kelias -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Pavadinimas -- -- -- Value -- Reikšmė -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- -- -- -- Description -- -- -- -- Location -- -- -- -- Last saved -- -- -- -- Unsaved changes -- -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- Agento protokolo klaida. -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- Raktas jau buvo pridėtas. -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- Modifikatoriai -- -- -- exclude term from results -- -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- Laukai -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- Pavyzdžiai -- -- -- -- SearchWidget -- -- Search -- Paieška -- -- -- Limit search to selected group -- Riboti paiešką iki pasirinktos grupės -- -- -- Search Help -- -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- -- -- -- Case sensitive -- Skiriant raidžių registrą -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- Bendra -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- -- -- -- Allow export -- -- -- -- Allow import -- -- -- -- Own certificate -- -- -- -- Fingerprint: -- Kontrolinis kodas: -- -- -- Certificate: -- Liudijimas: -- -- -- Signer -- -- -- -- Key: -- Raktas: -- -- -- Generate -- Generuoti -- -- -- Import -- Importuoti -- -- -- Export -- -- -- -- Imported certificates -- Importuoti liudijimai -- -- -- Trust -- -- -- -- Ask -- -- -- -- Untrust -- -- -- -- Remove -- Šalinti -- -- -- Path -- Kelias -- -- -- Status -- Būsena -- -- -- Fingerprint -- Kontrolinis kodas -- -- -- Certificate -- Liudijimas -- -- -- Trusted -- -- -- -- Untrusted -- -- -- -- Unknown -- Nežinoma -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- -- -- -- All files -- Visi failai -- -- -- Select path -- -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Raktas -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- Įvyko netikėta eksportavimo klaida -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- Ne šį kartą -- -- -- Never -- Niekada -- -- -- Always -- Visada -- -- -- Just this time -- Tik šį kartą -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- Failo nėra -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importavimas iš %1 nepavyko (%2) -- -- -- Import from %1 successful (%2) -- Importavimas iš %1 sėkmingas (%2) -- -- -- Imported from %1 -- Importuota iš %1 -- -- -- Export to %1 failed (%2) -- Eksportavimas į %1 nepavyko (%2) -- -- -- Export to %1 successful (%2) -- Eksportavimas į %1 sėkmingas (%2) -- -- -- Export to %1 -- -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Numatytosios trukmės slaptažodis -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopijuoti -- -- -- Expires in <b>%n</b> second(s) -- -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopijuoti -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- -- -- -- There was an error creating the QR code. -- -- -- -- Closing in %1 seconds. -- Užveriama po %1 sekundžių. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Nustatyti NTVS -- -- -- Default RFC 6238 token settings -- Numatytojo RFC 6238 prieigos rakto nustatymai -- -- -- Steam token settings -- Steam prieigos rakto nustatymai -- -- -- Use custom settings -- Naudoti tinkintus nustatymus -- -- -- Custom Settings -- -- -- -- Time step: -- Laiko žingsnis: -- -- -- sec -- Seconds -- sek. -- -- -- Code size: -- Kodo dydis: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritmas: -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- -- -- -- Checking for updates... -- -- -- -- Close -- Užverti -- -- -- Update Error! -- Atnaujinimo klaida! -- -- -- An error occurred in retrieving update information. -- Gaunant atnaujinimo informaciją, įvyko klaida. -- -- -- Please try again later. -- Bandykite dar kartą vėliau. -- -- -- Software Update -- Programinės įrangos atnaujinimas -- -- -- A new version of KeePassXC is available! -- Yra prieinama nauja KeePassXC versija! -- -- -- KeePassXC %1 is now available — you have %2. -- Dabar yra prieinama KeePassXC %1 — jūs naudojate %2. -- -- -- Download it at keepassxc.org -- Atsisiųskite ją iš keepassxc.org -- -- -- You're up-to-date! -- Naudojate naujausią versiją! -- -- -- KeePassXC %1 is currently the newest version available -- Šiuo metu KeePassXC %1 yra naujausia prieinama versija -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Pradėkite saugiai laikyti savo slaptažodžius KeePassXC duomenų bazėje -- -- -- Create new database -- Sukurti naują duomenų bazę -- -- -- Open existing database -- Atverti esamą duomenų bazę -- -- -- Import from KeePass 1 -- Importuoti iš KeePass -- -- -- Import from CSV -- Importuoti iš CSV -- -- -- Recent databases -- Paskiausios duomenų bazės -- -- -- Welcome to KeePassXC %1 -- Sveiki atvykę į KeePassXC %1 -- -- -- Import from 1Password -- -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Paspausti -- -- -- Passive -- Pasyvus -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Įkelti iš naujo -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_nb.ts keepassxc-2.6.4-patched/share/translations/keepassx_nb.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_nb.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_nb.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7850 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Om KeePassXC -- -- -- About -- Om -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Meld fra om feil på: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC er distribuert under vilkårene i GNU General Public License (GPL) versjon 2 eller (etter eget valg) versjon 3. -- -- -- Contributors -- Bidragsytere -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se Bidrag på GitHub</a> -- -- -- Debug Info -- Debuggingsinfo -- -- -- Include the following information whenever you report a bug: -- Hvis du vil rapportere en feil, inkluder følgende informasjon: -- -- -- Copy to clipboard -- Kopier til utklippstavle -- -- -- Project Maintainers: -- Prosjektets vedlikeholdere: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- En spesiell takk fra KeePassXC-laget går til debfx, utvikler av programmet KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Bruk OpenSSH for Windows i stedet for Pageant -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Applikasjonsinnstillinger -- -- -- General -- Generelt -- -- -- Security -- Sikkerhet -- -- -- Access error for config file %1 -- Feil ved tilgang til konfigurasjonsfilen %1 -- -- -- Icon only -- Kun ikon -- -- -- Text only -- Kun tekst -- -- -- Text beside icon -- Tekst ved siden av ikon -- -- -- Text under icon -- Tekst under ikon -- -- -- Follow style -- Følg stil -- -- -- Reset Settings? -- Tilbakestill innstillinger? -- -- -- Are you sure you want to reset all general and security settings to default? -- Er du sikker på at du vil tilbakestille alle generelle og sikkerhetsinnstillinger til standard? -- -- -- Monochrome (light) -- -- -- -- Monochrome (dark) -- -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Grunnleggende -- -- -- Startup -- Oppstart -- -- -- Start only a single instance of KeePassXC -- Kjør kun én instans av KeePassXC om gangen -- -- -- Minimize window at application startup -- Minimer ved programstart -- -- -- File Management -- Filhåndtering -- -- -- Backup database file before saving -- Sikkerhetskopier database-filen før lagring -- -- -- Automatically save after every change -- Lagre automatisk etter hver endring -- -- -- Automatically reload the database when modified externally -- Last databasen automatisk på nytt hvis den blir endret eksternt -- -- -- Entry Management -- Oppføringshåndtering -- -- -- Use group icon on entry creation -- Bruk gruppeikon ved ny oppføring -- -- -- Minimize instead of app exit -- Minimer istedenfor app-avslutning -- -- -- Show a system tray icon -- Vis et ikon i systemkurven -- -- -- Hide window to system tray when minimized -- Skjul vindu til systemkurven når minimert -- -- -- Auto-Type -- Autoskriv -- -- -- Use entry title to match windows for global Auto-Type -- Bruk tittel i oppføringa for å matche vindu ved global autoskriv -- -- -- Use entry URL to match windows for global Auto-Type -- Bruk URL i oppføringa for å matche vindu ved global autoskriv -- -- -- Always ask before performing Auto-Type -- Alltid spør før utførelse av autoskriv -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Bevegelig verktøylinje -- -- -- Remember previously used databases -- Husk tidligere brukte databaser -- -- -- Load previously open databases on startup -- Last tidligere åpne databaser ved oppstart -- -- -- Remember database key files and security dongles -- Husk database nøkkelfiler og sikkerhetsdongler -- -- -- Check for updates at application startup once per week -- Se etter oppdateringer ved oppstart av applikasjonen en gang per uke -- -- -- Include beta releases when checking for updates -- Ta med betaversjoner når du ser etter oppdateringer -- -- -- Language: -- Språk: -- -- -- (restart program to activate) -- (start programmet på nytt for å aktivere) -- -- -- Minimize window after unlocking database -- Minimer vinduet etter at du har låst opp database -- -- -- Minimize when opening a URL -- Minimer når du åpner en URL -- -- -- Hide window when copying to clipboard -- Skjul vindu når du kopierer til utklippstavle -- -- -- Minimize -- Minimer -- -- -- Drop to background -- Slipp til bakgrunnen -- -- -- Favicon download timeout: -- -- -- -- Website icon download timeout in seconds -- -- -- -- sec -- Seconds -- sek -- -- -- Toolbar button style -- -- -- -- Language selection -- Valg av språk -- -- -- Global auto-type shortcut -- -- -- -- Auto-type character typing delay milliseconds -- -- -- -- Auto-type start delay milliseconds -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Tidsavbrudd -- -- -- Clear clipboard after -- Slett utklippstavlen etter -- -- -- sec -- Seconds -- sek -- -- -- Lock databases after inactivity of -- Lås databaser etter inaktivitet i -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Glem berørings-id etter inaktivitet i -- -- -- Convenience -- Bekvemmelighet -- -- -- Lock databases when session is locked or lid is closed -- Lås databaser når økta låses eller lokket lukkes -- -- -- Forget TouchID when session is locked or lid is closed -- Glem berørings-id når økten er låst eller lokket er lukket -- -- -- Lock databases after minimizing the window -- Lås databaser når vinduet minimeres -- -- -- Re-lock previously locked database after performing Auto-Type -- Lås tidligere låst database etter utført autoskriv -- -- -- Hide passwords in the entry preview panel -- Skjul passord i oppføring panelet -- -- -- Hide entry notes by default -- Skjul notater i oppføringa som standard -- -- -- Privacy -- Personvern -- -- -- Use DuckDuckGo service to download website icons -- Bruk DuckDuckGo-tjenesten for å laste ned nettstedikoner -- -- -- Clipboard clear seconds -- -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Tøm søket etter -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Kunne ikke finne en oppføring som samsvarer med vindutittelen: -- -- -- Auto-Type - KeePassXC -- Autoskriv - KeePassXC -- -- -- Auto-Type -- Autoskriv -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Syntaksen til autoskrivuttrykket er galt. -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Denne autoskrivkommandoen inneholder en lang forsinkelse. Vil du fortsette? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Denne autoskriv-kommandoen inneholder svært sene tastetrykk. Vil du virkelig fortsette? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Denne autoskriv-kommandoen inneholder argument som gjentas svært hyppig. Vil du virkelig fortsette? -- -- -- Permission Required -- Tillatelse kreves -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Vindu -- -- -- Sequence -- Sekvens -- -- -- Default sequence -- Standard rekkefølge -- -- -- -- AutoTypeMatchModel -- -- Group -- Gruppe -- -- -- Title -- Tittel -- -- -- Username -- Brukernavn -- -- -- Sequence -- Rekkefølge -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopier &brukernavn -- -- -- Copy &password -- Kopier &passord -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Tillatelse kreves -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Autoskriv - KeePassXC -- -- -- Select entry to Auto-Type: -- Velg oppføring som skal autoskrives: -- -- -- Search... -- Søk... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- -- -- -- Ok -- Ok -- -- -- Cancel -- Avbryt -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Du har flere databaser åpne. --Vennligst velge riktig database for å lagre identifikasjon. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Tilknytningsforespørsel for ny nøkkel. -- -- -- Save and allow access -- Lagre og tillat aksess -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Overskrive eksisterende nøkkel? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- En delt krypteringsnøkkel med navn "%1" eksisterer fra før. --Vil du overskrive den? -- -- -- KeePassXC: Update Entry -- KeePassXC: Oppdater oppføring. -- -- -- Do you want to update the information in %1 - %2? -- Vil du oppdatere informasjonen i %1 - %2? -- -- -- Abort -- Avbryt -- -- -- Converting attributes to custom data… -- -- -- -- KeePassXC: Converted KeePassHTTP attributes -- -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Ingen oppføring med KeePassHTTP-attributter funnet! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Den aktiv database inneholder ikke en oppføring med KeePassHTTP-attributter. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Gammel nettleser integrasjon innstillinger oppdaget -- -- -- KeePassXC: Create a new group -- KeePassXC: Lag en ny gruppe -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- Ikke vis denne advarselen igjen -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Vindu -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Dette er nødvendig for å få tilgang til dine databaser med KeePassXC-Browser -- -- -- Enable browser integration -- Aktiver nettleser integrasjon -- -- -- General -- Generelt -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- Bruk tillegget i disse nettleserne: -- -- -- Vivaldi -- -- -- -- &Edge -- -- -- -- Firefox -- -- -- -- Tor Browser -- -- -- -- Brave -- -- -- -- Google Chrome -- -- -- -- Chromium -- -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Bare oppføringer med samme protokoll (http://, https://, ...) er returnert. -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Avansert -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- Automatisk registrering eller endring av tekstfelt er ikke støttet. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Oppgi en selvvalgt mellomtjener dersom du installerte mellomtjeneren manuelt. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Bla gjennom... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- Vennligst se spesielle instruksjoner for bruk av nettleserutvidelse nedenfor -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Advarsel:</b> Disse innstillingene kan medføre risiko. -- -- -- Executable Files -- Kjørbare filer -- -- -- All Files -- Alle Filer -- -- -- Select custom proxy location -- Oppgi en selvvalgt mellomtjerneradresse -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Klonevalg -- -- -- Append ' - Clone' to title -- Tilføy ' - Klone' til tittel -- -- -- Replace username and password with references -- Bytt ut brukernavn og passord med referansene -- -- -- Copy history -- Kopier historie -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importer CSV-felter -- -- -- filename -- filnavn -- -- -- size, rows, columns -- størrelse, rader, kolonner -- -- -- Encoding -- Koding -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Tekst er markert ved -- -- -- Fields are separated by -- Felt er separert av -- -- -- Comments start with -- Kommentarer starter med -- -- -- Consider '\' an escape character -- Betrakt '\' som en escape-sekvens -- -- -- Preview -- Forhåndsvis -- -- -- Imported from CSV file -- Importert fra CSV-fil -- -- -- Original data: -- Originale data: -- -- -- Error -- Feil -- -- -- Error(s) detected in CSV file! -- Feil(er) oppdaget i CSV-fil! -- -- -- [%n more message(s) skipped] -- -- -- -- CSV import: writer has errors: --%1 -- -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- Sist endra -- -- -- Password -- Passord -- -- -- Created -- Opprettet -- -- -- Notes -- Notater -- -- -- Title -- Tittel -- -- -- Group -- Gruppe -- -- -- URL -- Adresse -- -- -- Username -- Brukernavn -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolonne(r)%n kolonne(r) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- -- -- -- %n row(s) -- -- -- -- -- Database -- -- File %1 does not exist. -- Filen %1 eksisterer ikke. -- -- -- Unable to open file %1. -- Kan ikke åpne filen %1. -- -- -- Error while reading the database: %1 -- Feil under lesing av database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Filen kan ikke skrives da den åpnes i skrivebeskyttet modus. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Nøkkel ikke transformert. Dette er en feil, vennligst rapporter det til utviklerne! -- -- -- %1 --Backup database located at %2 -- -- -- -- Could not save, database does not point to a valid file. -- -- -- -- Could not save, database file is read-only. -- -- -- -- Database file has unmerged changes. -- -- -- -- Recycle Bin -- Papirkurv -- -- -- Passwords -- Root group name -- Passord -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Lås opp database - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Nøkkelfil: -- -- -- Refresh -- Last på ny -- -- -- Don't show this warning again -- Ikke vis denne advarselen igjen -- -- -- All files -- Alle filer -- -- -- Key files -- Nøkkelfiler -- -- -- Select key file -- Velg nøkkelfil -- -- -- Failed to open key file: %1 -- Kunne ikke åpne nøkkelfil: %1 -- -- -- Unlock KeePassXC Database -- Låse opp KeePassXC Database -- -- -- Enter Password: -- Oppgi passord: -- -- -- Password field -- Passord felt -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Bla gjennom... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- Maskinvarenøkkel: -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- Prøv igjen med tomt passord -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Kan ikke bruke database fil som nøkkelfil -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Vennligst trykk på knappen på din YubiKey! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Passord -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Avanserte Innstillinger -- -- -- General -- Generelt -- -- -- Security -- Sikkerhet -- -- -- Encryption Settings -- Krypteringsinnstillinger -- -- -- Browser Integration -- Nettlesertillegg -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC nettleser-innstillinger -- -- -- Stored keys -- Lagrede nøkler -- -- -- Remove -- Fjern -- -- -- Delete the selected key? -- Slette den valgte nøkkelen? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- -- -- -- Key -- Nøkkel -- -- -- Value -- Verdi -- -- -- Enable Browser Integration to access these settings. -- Aktiver nettleser integrasjon for å få tilgang til disse innstillingene. -- -- -- Disconnect all browsers -- Koble fra alle nettlesere -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- -- KeePassXC: No keys found -- KeePassXC: Ingen nøkler funnet -- -- -- No shared encryption keys found in KeePassXC settings. -- Ingen delte kryptering nøkkel funnet i KeePassXC-innstillingene. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Fjernet nøkler fra database -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- Glem alle side-spesifikke innstillinger og oppføringer -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- -- Removing stored permissions… -- Fjerner lagrede tillatelser... -- -- -- Abort -- Avbryt -- -- -- KeePassXC: Removed permissions -- KeePassXC: Fjernet tillatelser -- -- -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Ingen oppføring med tillatelser funnet! -- -- -- The active database does not contain an entry with permissions. -- Den aktive databasen inneholder ikke et oppsett med tillatelser. -- -- -- Move KeePassHTTP attributes to custom data -- -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- -- -- -- Remove selected key -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Opprettet -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Legg til ekstra beskyttelse -- -- -- No password set -- Passord ikke satt -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- ADVARSEL! Du har ikke angitt et passord. Å bruke en database uten passord frarådes sterkt! -- --Er du sikker på at du vil fortsette uten passord? -- -- -- Continue without password -- Fortsett uten passord -- -- -- No encryption key added -- Ingen krypteringsnøkkel lagt til -- -- -- You must add at least one encryption key to secure your database! -- Du må legge til minst en krypteringsnøkkel for å sikre databasen! -- -- -- Unknown error -- Ukjent feil -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Krypteringsalgoritme: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (standard) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Nøkkelavledningsfunksjon: -- -- -- Transform rounds: -- Transformasjonsrunder: -- -- -- Memory Usage: -- Minnebruk: -- -- -- Parallelism: -- Parallellitet: -- -- -- Decryption Time: -- Krypteringstid: -- -- -- ?? s -- ?? s -- -- -- Change -- Endring -- -- -- Higher values offer more protection, but opening the database will take longer. -- Høyere verdier gir mer beskyttelse, men å åpne database vil ta lengre tid. -- -- -- Database format: -- Databaseformat: -- -- -- This is only important if you need to use your database with other programs. -- Dette er bare viktig hvis du trenger å bruke database med andre programmer. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (anbefalt) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- uendret -- -- -- Number of rounds too high -- Key transformation rounds -- Antall runder er for høyt -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Du bruker et svært høyt antall nøkkeltransformasjons-runder med Argon2. -- --Dersom du beholder dette antallet så vil det ta timer eller dager (og kanskje lengre) å åpne databasen! -- -- -- Understood, keep number -- Forstått; behold antallet -- -- -- Cancel -- Avbryt -- -- -- Number of rounds too low -- Key transformation rounds -- Antall runder er for lavt -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Du bruker et svært lavt antall nøkkeltransformasjons-runder med AES-KDF. -- --Dersom du beholder dette antallet så kan databasen være for lett å knekke! -- -- -- KDF unchanged -- KDF uendret -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Kunne ikke omskape nøkkel med nye KDF-parametere; KDF uendret. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiBMiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- tråd(er)tråd(er) -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- Dekrypteringstid i sekunder -- -- -- Database format -- -- -- -- Encryption algorithm -- Kryptering algoritme -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- Minnebruk -- -- -- Parallelism -- -- -- -- ?? ms -- -- -- -- ? s -- -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database metadata -- -- -- Database name: -- Databasenavn: -- -- -- Database description: -- Databasens beskrivelse: -- -- -- Default username: -- Standard brukernavn: -- -- -- History Settings -- Historikk-innstillinger -- -- -- Max. history items: -- Maks. historikk-antall: -- -- -- Max. history size: -- Maks. historikk-størrelse: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Bruk søppelbøtte -- -- -- Additional Database Settings -- Ekstra database-innstillinger -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- Default username field -- -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- Slett søppelbøtte -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- (gammel) -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Deling -- -- -- Breadcrumb -- Brødsmule -- -- -- Type -- Type -- -- -- Path -- Sti -- -- -- Last Signer -- Siste Signatur -- -- -- Certificates -- Sertifikater -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Databasenavn: -- -- -- Description: -- Beskrivelse: -- -- -- Database name field -- -- -- -- Database description field -- -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass2-database -- -- -- All files -- Alle filer -- -- -- Open database -- Åpne database -- -- -- CSV file -- CSV fil -- -- -- Merge database -- Slå sammen database -- -- -- Open KeePass 1 database -- Åpne KeePass1-database -- -- -- KeePass 1 database -- KeePass1-database -- -- -- Export database to CSV file -- Eksporter database til CSV fil -- -- -- Writing the CSV file failed. -- Skriving av CSV fil feilet. -- -- -- Database creation error -- Database opprettelsesfeil -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Den opprettede database har ingen nøkkel eller KDF, og nekter å lagre den. --Dette er definitivt en feil, rapporter det til utviklerne. -- -- -- Select CSV file -- Velg CSV fil -- -- -- New Database -- Ny database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Ny Database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Låst] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Skrivebeskyttet] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Kunne ikke åpne %1. Enten eksisterer den ikke eller er ikke tilgjengelig. -- -- -- Export database to HTML file -- Eksporter database til HTML-fil -- -- -- HTML file -- HTML-fil -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Søker... -- -- -- Do you really want to delete the entry "%1" for good? -- Vil du virkelig slette oppføringen "%1" for godt? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Ønsker du virkelig å flytte oppføring "%1" til søppelkurven? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven?Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven? -- -- -- Execute command? -- Utfør kommando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Ønsker du virkelig å utføre følgende kommando?<br><br>%1<br> -- -- -- Remember my choice -- Husk mitt valg -- -- -- Do you really want to delete the group "%1" for good? -- Ønsker du virkelig å slette gruppen "%1" for godt? -- -- -- No current database. -- Ingen nåværende database. -- -- -- No source database, nothing to do. -- Ingen kilde-database, ingenting å gjøre. -- -- -- Search Results (%1) -- Søkeresultater (%1) -- -- -- No Results -- Ingen resultater -- -- -- File has changed -- Fil er endret -- -- -- The database file has changed. Do you want to load the changes? -- Databasen er endret. Ønsker du å laste inn endringene? -- -- -- Merge Request -- Forespørsel om sammenslåing -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Databasefila er endra og du har ulagra endringer. --Vil du slå sammen fila med endringene dine? -- -- -- Empty recycle bin? -- Tom papirkurv? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Er du sikker på at du ønsker å slette alt i papirkurven permanent? -- -- -- Do you really want to delete %n entry(s) for good? -- Ønsker du virkelig å slette %n oppføring(s) for godt (permanent)Ønsker du virkelig å slette %n oppføring(s) for godt (permanent) -- -- -- Delete entry(s)? -- Vil du slette oppføring?Vil du slette oppføringer? -- -- -- Move entry(s) to recycle bin? -- -- -- -- Lock Database? -- Låse database? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Du redigerer en oppføring. Kast endringer og låse likevel? -- -- -- "%1" was modified. --Save changes? -- "%1" er endet. --Lagre endringer? -- -- -- Database was modified. --Save changes? -- Database ble endret. --Lagre endringer? -- -- -- Save changes? -- Lagre endringer? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- -- Disable safe saves? -- Deaktivere sikker lagring? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC har mislykkes i å lagre databasen flere ganger. Dette er trolig forårsaket av at synkroniserings-tjenester har låst lagrings-filen. --Deaktivere sikker lagring og prøve igjen? -- -- -- Passwords -- Passord -- -- -- Save database as -- Lagre database som -- -- -- KeePass 2 Database -- KeePass2-database -- -- -- Replace references to entry? -- Erstatte referanser til oppføring? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Slett gruppe -- -- -- Move group to recycle bin? -- Flytt gruppe til søppelbøtte? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- -- -- -- Successfully merged the database files. -- -- -- -- Database was not modified by merge operation. -- -- -- -- Shared group... -- Delt gruppe... -- -- -- Writing the database failed: %1 -- -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Oppføring -- -- -- Advanced -- Avansert -- -- -- Icon -- Ikon -- -- -- Auto-Type -- Autoskriv -- -- -- Properties -- Egenskaper -- -- -- History -- Historie -- -- -- SSH Agent -- SSH-agent -- -- -- n/a -- i/a -- -- -- (encrypted) -- (kryptert) -- -- -- Select private key -- Velg privat nøkkel -- -- -- Entry history -- Oppførings-historikk -- -- -- Add entry -- Legg til oppføring -- -- -- Edit entry -- Rediger oppføring -- -- -- New attribute -- Ny attributt -- -- -- Are you sure you want to remove this attribute? -- Er du sikker på at du ønsker å fjerne denne attributten? -- -- -- Tomorrow -- I morgen -- -- -- %n week(s) -- %n uke(r)%n uke(r) -- -- -- %n month(s) -- %n måned(er)%n måned(er) -- -- -- Entry updated successfully. -- Oppføring oppdatert. -- -- -- New attribute %1 -- -- -- -- %n year(s) -- -- -- -- Confirm Removal -- Bekreft fjerning -- -- -- Browser Integration -- Nettlesertillegg -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Er du sikker på at du vil fjerne denne URL-en? -- -- -- Reveal -- Vis -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Ekstra attributter -- -- -- Add -- Legg til -- -- -- Remove -- Fjern -- -- -- Edit Name -- Rediger navn -- -- -- Protect -- Beskytt -- -- -- Reveal -- Vis -- -- -- Attachments -- Vedlegg -- -- -- Foreground Color: -- Forgrunnsfarge: -- -- -- Background Color: -- Bakgrunnsfarge: -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Aktiver autoskriv for denne oppføringa -- -- -- Window Associations -- Vindustilknytninger -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Vindustittel: -- -- -- Use a specific sequence for this association: -- Bruk en spesiell sekvens for denne tilknytningen: -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- Generelt -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- -- -- -- Add -- Legg til -- -- -- Remove -- Fjern -- -- -- Edit -- Endring -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Vis -- -- -- Restore -- Gjenopprett -- -- -- Delete -- Slett -- -- -- Delete all -- Slett alt -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Passord: -- -- -- Title: -- Tittel: -- -- -- Presets -- Hurtigvalg -- -- -- Toggle the checkbox to reveal the notes section. -- Veksle avkrysningsboksen for å vise notatdelen. -- -- -- Username: -- Brukernavn: -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- Passord felt -- -- -- Toggle notes visible -- -- -- -- Expiration field -- -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- -- -- -- Title field -- -- -- -- Username field -- -- -- -- Toggle expiration -- -- -- -- Notes: -- -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Skjema -- -- -- Remove key from agent after -- Fjern nøkkel fra agent etter -- -- -- seconds -- sekunder -- -- -- Fingerprint -- Fingeravtrykk -- -- -- Remove key from agent when database is closed/locked -- Fjern nøkkel fra agent når database er lukket/låst -- -- -- Public key -- Offentlig nøkkel -- -- -- Add key to agent when database is opened/unlocked -- Legg nøkkel til agent når database er åpnet/ulåst -- -- -- Comment -- Kommentar -- -- -- Decrypt -- Dekrypter -- -- -- n/a -- i/a -- -- -- Copy to clipboard -- Kopier til utklippstavle -- -- -- Private key -- Privat nøkkel -- -- -- External file -- Ekstern fil -- -- -- Browse... -- Button for opening file dialog -- Bla gjennom... -- -- -- Attachment -- Vedlegg -- -- -- Add to agent -- Legg til til agent -- -- -- Remove from agent -- Fjern fra agent -- -- -- Require user confirmation when this key is used -- Krev brukerbekreftelse når denne nøkkelen blir brukt -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- Gruppe -- -- -- Icon -- Ikon -- -- -- Properties -- Egenskaper -- -- -- Add group -- Lag ny gruppe -- -- -- Edit group -- Rediger gruppe -- -- -- Enable -- Aktiver -- -- -- Disable -- Deaktiver -- -- -- Inherit from parent group (%1) -- Arv fra foreldre-gruppe (%1) -- -- -- Entry has unsaved changes -- -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Sti: -- -- -- Password: -- Passord: -- -- -- Inactive -- Inaktiv -- -- -- KeeShare unsigned container -- -- -- -- KeeShare signed container -- -- -- -- Select import source -- Velg kilde for importering -- -- -- Select export target -- Velg eksporteringsmål -- -- -- Select import/export file -- -- -- -- Clear -- Tøm -- -- -- Import -- Importer -- -- -- Export -- Eksporter -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- Passord felt -- -- -- Clear fields -- -- -- -- Browse for share file -- -- -- -- Browse... -- Bla gjennom... -- -- -- -- EditGroupWidgetMain -- -- Name field -- -- -- -- Notes field -- -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Legg til selvvalgt ikon -- -- -- Delete custom icon -- Slett selvvalgt ikon -- -- -- Download favicon -- Last ned ikoner -- -- -- Unable to fetch favicon. -- Kan ikke hente favorittikon. -- -- -- Images -- Bilder -- -- -- All files -- Alle filer -- -- -- Confirm Delete -- Bekreft sletting -- -- -- Select Image(s) -- Velg Bilde(-r) -- -- -- Successfully loaded %1 of %n icon(s) -- -- -- -- No icons were loaded -- Ingen ikoner ble lastet -- -- -- %n icon(s) already exist in the database -- -- -- -- The following icon(s) failed: -- -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Du kan aktivere DuckDuckGo-ikonetjenesten under Verktøy -> Innstillinger -> Sikkerhet -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Opprettet: -- -- -- Modified: -- Endret: -- -- -- Accessed: -- Åpnet: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Data for programtillegg -- -- -- Remove -- Fjern -- -- -- Delete plugin data? -- Slett programtillegg-data? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Ønsker du virkelig å slette de valgte programtillegg-dataene? --Dette kan føre til feil for de berørte programtilleggene. -- -- -- Key -- Nøkkel -- -- -- Value -- Verdi -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- Unik ID -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- -- -- -- -- EntryAttachmentsModel -- -- Name -- Navn -- -- -- Size -- Størrelse -- -- -- -- EntryAttachmentsWidget -- -- Form -- Skjema -- -- -- Add -- Legg til -- -- -- Remove -- Fjern -- -- -- Open -- Åpne -- -- -- Save -- Lagre -- -- -- Select files -- Velg filer -- -- -- Are you sure you want to remove %n attachment(s)? -- Er du sikker på at du vil fjerne %n vedlegg?Er du sikker på at du vil fjerne %n vedlegg? -- -- -- Save attachments -- Lagre vedlegg -- -- -- Unable to create directory: --%1 -- Kan ikke opprette katalog: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Er du sikker på at du ønsker å overskrive eksisterende fil "%1" med vedlegget? -- -- -- Confirm overwrite -- Bekreft overskriving -- -- -- Unable to save attachments: --%1 -- Kan ikke lagre vedlegg: --%1 -- -- -- Unable to open attachment: --%1 -- Kan ikke åpne vedlegg: --%1 -- -- -- Unable to open attachments: --%1 -- Kan ikke åpne vedlegg: --%1 -- -- -- Confirm remove -- Bekreft fjerning -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Vedlegg -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Navn -- -- -- -- EntryHistoryModel -- -- Last modified -- Sist endret -- -- -- Title -- Tittel -- -- -- Username -- Brukernavn -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Gruppe -- -- -- Title -- Tittel -- -- -- Username -- Brukernavn -- -- -- URL -- URL -- -- -- Never -- Aldri -- -- -- Password -- Passord -- -- -- Notes -- Notater -- -- -- Expires -- Utløper -- -- -- Created -- Opprettet -- -- -- Modified -- Endret -- -- -- Accessed -- Brukt -- -- -- Attachments -- Vedlegg -- -- -- Size -- Størrelse -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Lukk -- -- -- General -- Generelt -- -- -- Username -- Brukernavn -- -- -- Password -- Passord -- -- -- Expiration -- Utløp -- -- -- URL -- Adresse -- -- -- Attributes -- Attributter -- -- -- Attachments -- Vedlegg -- -- -- Notes -- Notater -- -- -- Autotype -- Autoskriv -- -- -- Window -- Vindu -- -- -- Sequence -- Rekkefølge -- -- -- Searching -- Søking -- -- -- Search -- Søk -- -- -- Clear -- Tøm -- -- -- Never -- Aldri -- -- -- [PROTECTED] -- [BESKYTTET] -- -- -- Enabled -- Aktivert -- -- -- Disabled -- Deaktivert -- -- -- Share -- Del -- -- -- Display current TOTP value -- -- -- -- Advanced -- Avansert -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- Tilpass til vindu -- -- -- Fit to contents -- Tilpass til innhold -- -- -- Reset to defaults -- Resette til standard -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- -- -- -- Group -- Gruppe -- -- -- Manage -- -- -- -- Unlock to show -- -- -- -- None -- Ingen -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- -- -- -- Manage -- -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Ukjent -- -- -- Unknown -- Unknown executable path -- Ukjent -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [tom] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- Avbryt -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- Lukk -- -- -- URL -- Adresse -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- Laster ned... -- -- -- Ok -- Ok -- -- -- Already Exists -- -- -- -- Download Failed -- -- -- -- Downloading favicons (%1/%2)... -- -- -- -- -- KMessageWidget -- -- &Close -- &Lukk -- -- -- Close message -- Lukk melding -- -- -- -- Kdbx3Reader -- -- missing database headers -- manglende database-headere -- -- -- Header doesn't match hash -- -- -- -- Invalid header id size -- Ugyldig: Header id size -- -- -- Invalid header field length -- Ugyldig: Header field length -- -- -- Invalid header data length -- Ugyldig: Header data length -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- manglende database-headere -- -- -- Invalid header checksum size -- Ugyldig header-sjekksumstørrelse -- -- -- Header SHA256 mismatch -- Ikke samsvar med SHA256-header -- -- -- Unknown cipher -- Ukjent kryptering -- -- -- Invalid header id size -- Ugyldig: Header id size -- -- -- Invalid header field length -- Ugyldig: Header field length -- -- -- Invalid header data length -- Ugyldig: Header data length -- -- -- Failed to open buffer for KDF parameters in header -- Kunne ikke åpne buffer til KDF-parametere i header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Ikke støttet funksjon for nøkkelavledning (KDF) eller ugyldige parametre -- -- -- Legacy header fields found in KDBX4 file. -- Eldre header-felt funnet i KDBX4-fil. -- -- -- Invalid inner header id size -- Ugyldig: Inner header id size -- -- -- Invalid inner header field length -- Ugyldig: Inner header field length -- -- -- Invalid inner header binary size -- Ugyldig: Inner header binary size -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Ikke støttet KeePass variant-map versjon. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map entry name length -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map entry name data -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map entry value length -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Ugyldig: Variant map entry value data -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map Bool entry value length -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map Int32 entry value length -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map UInt32 entry value length -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map Int64 entry value length -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map UInt64 entry value length -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map entry type -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Ugyldig: Variant map field type size -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Ugyldig: Symmetric cipher algorithm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ugyldig: Symmetric cipher IV size. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Kunne ikke serialisere KDF-parametre variant-map -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Ikke støttet kryptering -- -- -- Invalid compression flags length -- Ugyldig: Compression flags length -- -- -- Unsupported compression algorithm -- Ikke støttet komprimeringsalgoritme -- -- -- Invalid master seed size -- Ugyldig: Master seed size -- -- -- Invalid transform seed size -- Ugyldig: Transform seed size -- -- -- Invalid transform rounds size -- Ugyldig: Transform rounds size -- -- -- Invalid start bytes size -- Ugyldig: Start bytes size -- -- -- Invalid random stream id size -- Ugyldig: Random stream id size -- -- -- Invalid inner random stream cipher -- Ugyldig: Inner random stream cipher -- -- -- Not a KeePass database. -- Ikke en KeePass-database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Den valgte fila er en gammel KeePass1-database (.kdb). -- --Du kan importere den ved å velge «Database → Importer KeePass1-database...» --Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med den gamle versjonen KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Ikke støttet KeePass2-databaseversjon. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- -- -- -- Unable to parse UUID: %1 -- -- -- -- Failed to read database file. -- Kunne ikke lese database filen. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML-parsingfeil: %1 -- -- -- No root group -- Ingen root-gruppe -- -- -- Missing icon uuid or data -- Mangler: Icon uuid or data -- -- -- Missing custom data key or value -- Mangler: Custom data key or value -- -- -- Multiple group elements -- Flere gruppe-elementer -- -- -- Null group uuid -- Null: Group uuid -- -- -- Invalid group icon number -- Ugyldig: Group icon number -- -- -- Invalid EnableAutoType value -- Ugyldig: EnableAutoType value -- -- -- Invalid EnableSearching value -- Ugyldig: EnableSearching value -- -- -- No group uuid found -- Ikke funnet: group uuid -- -- -- Null DeleteObject uuid -- Null: DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Mangler: DeletedObject uuid or time -- -- -- Null entry uuid -- Null: Entry uuid -- -- -- Invalid entry icon number -- Ugyldig: Entry icon number -- -- -- History element in history entry -- Historikkelement i historikkoppføring -- -- -- No entry uuid found -- Ikke funnet: Entry uuid -- -- -- History element with different uuid -- Historikkelement med forskjellig uuid -- -- -- Duplicate custom attribute found -- Duplikat: Custom attribute -- -- -- Entry string key or value missing -- Mangler: Entry string key or value -- -- -- Entry binary key or value missing -- Mangler: Entry binary key or value -- -- -- Auto-type association window or sequence missing -- Mangler: Auto-type association window or sequence -- -- -- Invalid bool value -- Ugyldig: Bool value -- -- -- Invalid date time value -- Ugyldig: date time value -- -- -- Invalid color value -- Ugyldig: Color value -- -- -- Invalid color rgb part -- Ugyldig: Color rgb part -- -- -- Invalid number value -- Ugyldig: Number value -- -- -- Invalid uuid value -- Ugyldig: Uuid value -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Kan ikke dekryptere binær -- -- -- XML error: --%1 --Line %2, column %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Fil for stor til å være privat nøkkel -- -- -- Failed to open private key -- Kunne ikke åpne den private nøkkelen -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Kan ikke åpne databasen. -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Kan ikke lese nøkkelfil. -- -- -- Not a KeePass database. -- Ikke en KeePass-database. -- -- -- Unsupported encryption algorithm. -- Ikke støttet krypteringsalgoritme. -- -- -- Unsupported KeePass database version. -- Ikke støttet KeePass databaseversion. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Kan ikke lese krypterings-IV -- -- -- Invalid number of groups -- Ugyldig antall grupper -- -- -- Invalid number of entries -- Ugyldig antall oppføringer -- -- -- Invalid content hash size -- Ugyldig: Content hash size -- -- -- Invalid transform seed size -- Ugyldig: Transform seed size -- -- -- Invalid number of transform rounds -- Ugyldig: Number of transform rounds -- -- -- Unable to construct group tree -- Kan ikke opprette gruppe-tre -- -- -- Root -- Rot -- -- -- Key transformation failed -- Nøkkeltransformasjon feila -- -- -- Invalid group field type number -- Ugyldig: Group field type number -- -- -- Invalid group field size -- Ugyldig: Group field size -- -- -- Read group field data doesn't match size -- Lest gruppefeltdata matcher ikke størrelsen -- -- -- Incorrect group id field size -- Feil: Group id field size -- -- -- Incorrect group creation time field size -- Feil: Group creation time field size -- -- -- Incorrect group modification time field size -- Feil: Group modification time field size -- -- -- Incorrect group access time field size -- Feil: Group access time field size -- -- -- Incorrect group expiry time field size -- Feil: Group expiry time field size -- -- -- Incorrect group icon field size -- Feil: Group icon field size -- -- -- Incorrect group level field size -- Feil: Group level field size -- -- -- Invalid group field type -- Ugyldig: Group field type -- -- -- Missing group id or level -- Mangler: group id or level -- -- -- Missing entry field type number -- Mangler: Entry field type number -- -- -- Invalid entry field size -- Ugyldig: Entry field size -- -- -- Read entry field data doesn't match size -- Lest felt i oppføring matcher ikke størrelse -- -- -- Invalid entry uuid field size -- Ugyldig: Entry uuid field size -- -- -- Invalid entry group id field size -- Ugyldig: Entry group id field size -- -- -- Invalid entry icon field size -- Ugyldig: Entry icon field size -- -- -- Invalid entry creation time field size -- Ugyldig: Entry creation time field size -- -- -- Invalid entry modification time field size -- Ugyldig: Entry modification time field size -- -- -- Invalid entry expiry time field size -- Ugyldig: Entry expiry time field size -- -- -- Invalid entry field type -- Ugyldig: Entry field type -- -- -- unable to seek to content position -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- Importert fra -- -- -- Exported to -- Eksportert til -- -- -- Synchronized with -- Synkronisert med -- -- -- -- KeyComponentWidget -- -- Key Component -- Nøkkelkomponent -- -- -- Key Component Description -- -- -- -- Cancel -- Avbryt -- -- -- Key Component set, click to change or remove -- -- -- -- Add %1 -- Add a key component -- Legg til %1 -- -- -- Change %1 -- Change a key component -- Endre %1 -- -- -- Remove %1 -- Remove a key component -- Fjern %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 sett, klikk for å endre eller fjerne -- -- -- -- KeyFileEditWidget -- -- Generate -- Lag passord -- -- -- Key File -- Nøkkelfil -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Nøkkelfiler -- -- -- All files -- Alle filer -- -- -- Create Key File... -- Opprett nøkkelfil ... -- -- -- Error creating key file -- Feil ved oppretting av nøkkelfil -- -- -- Unable to create key file: %1 -- Kunne ikke opprette nøkkelfil: %1 -- -- -- Select a key file -- Velg en nøkkelfil -- -- -- Key file selection -- -- -- -- Browse for key file -- -- -- -- Browse... -- Bla gjennom... -- -- -- Generate a new key file -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- Ugyldig nøkkelfil -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- Mistenkelig nøkkelfil -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Hjelp -- -- -- &Groups -- &Grupper -- -- -- &Tools -- &Verktøy -- -- -- &Quit -- &Avslutt -- -- -- &About -- &Om -- -- -- Database settings -- Databaseoppsett -- -- -- Copy username to clipboard -- Kopier brukernavn til utklippstavlen -- -- -- Copy password to clipboard -- Kopier passord til utklippstavlen -- -- -- &Settings -- &Oppsett -- -- -- &Title -- &Tittel -- -- -- Copy title to clipboard -- Kopier tittel til utklippstavlen -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopier URL til utklippstavlen -- -- -- &Notes -- &Notater -- -- -- Copy notes to clipboard -- Kopier notater til utklippstavle -- -- -- Copy &TOTP -- Kopier &TOTP -- -- -- E&mpty recycle bin -- &Tøm papirkurv -- -- -- Clear history -- Slett historikk -- -- -- Access error for config file %1 -- Feil ved tilgang for konfigurasjonsfilen %1 -- -- -- Settings -- Oppsett -- -- -- Toggle window -- Vis vinduet -- -- -- Quit KeePassXC -- Avslutt KeePassXC -- -- -- Please touch the button on your YubiKey! -- Vennligst trykk på knappen på din YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ADVARSEL: Du bruker en ustabil bygge-versjon av KeePassXC! --Det er stor risiko for inkonsistens, ha en sikkerhetskopi av databasene dine. --Denne versjonen er ikke ment for produksjonsmiljø. -- -- -- &Donate -- &Donér -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- ADVARSEL: Qt-versjon du bruker kan føre til at KeePassXC kræsjer med et skjermtastatur! --Vi anbefaler at du bruker det AppImage som er tilgjengelig på nedlastingssiden. -- -- -- &Import -- -- -- -- Create a new database -- Opprett en ny database -- -- -- Merge from another KDBX database -- -- -- -- Add a new entry -- -- -- -- View or edit entry -- Vis eller endring oppføring -- -- -- Add a new group -- Legg til ny gruppe -- -- -- Perform &Auto-Type -- -- -- -- Open &URL -- Åpne &URL -- -- -- Import a KeePass 1 database -- Importer en KeePass 1 database -- -- -- Import a CSV file -- Importer en CSV-fil -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- Sjekk etter oppdateringer ved oppstart? -- -- -- Would you like KeePassXC to check for updates on startup? -- Vil du at KeePassXC skal se etter oppdateringer ved oppstart? -- -- -- You can always check for updates manually from the application menu. -- Du kan alltid sjekke om oppdateringer manuelt fra programmenyen. -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- &Passord generator -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- Vis TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Masker brukernavn -- -- -- Hide Passwords -- Masker passord -- -- -- -- ManageDatabase -- -- Database settings -- Databaseoppsett -- -- -- Edit database settings -- -- -- -- Unlock database -- Lås opp databasen -- -- -- Unlock database to show more information -- -- -- -- Lock database -- Lås database -- -- -- -- ManageSession -- -- Disconnect -- -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- -- -- -- Relocating %1 [%2] -- -- -- -- Overwriting %1 [%2] -- -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Opprett en ny KeePassXC database... -- -- -- Root -- Root group -- Rot -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- Advanced Settings -- Avanserte Innstillinger -- -- -- Simple Settings -- Enkle innstillinger -- -- -- Encryption Settings -- Krypteringsinnstillinger -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Krypteringsinnstillinger -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Generell database informasjon -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel -- -- -- PEM boundary mismatch -- ‘PEM boundary’ samsvarer ikke -- -- -- Base64 decoding failed -- Base64 dekryptering feila -- -- -- Key file way too small. -- Nøkkelfil er alt for liten. -- -- -- Key file magic header id invalid -- ’Magic header id’ i nøkkelfil er ugyldig -- -- -- Found zero keys -- Fant null nøkler -- -- -- Failed to read public key. -- Lesing av offentlig nøkkel feilet. -- -- -- Corrupted key file, reading private key failed -- Skadet nøkkelfil. Lesing av privat nøkkel feilet -- -- -- No private key payload to decrypt -- Ingen private nøkkeldata å dekryptere -- -- -- Trying to run KDF without cipher -- Prøver å kjøre KDF uten kryptering -- -- -- Passphrase is required to decrypt this key -- Passordfrase er nødvendig for å dekryptere denne nøkkelen -- -- -- Key derivation failed, key file corrupted? -- Nøkkelavledning mislyktes. Nøkkelfil skadet? -- -- -- Decryption failed, wrong passphrase? -- Dekryptering feilet. Feil passordfrase? -- -- -- Unexpected EOF while reading public key -- Uventet EOF ved lesing av offentlig nøkkel -- -- -- Unexpected EOF while reading private key -- Uventet EOF ved lesing av privat nøkkel -- -- -- Can't write public key as it is empty -- Kan ikke skrive offentlig nøkkel fordi den er tom -- -- -- Unexpected EOF when writing public key -- Uventet EOF ved skriving av offentlig nøkkel -- -- -- Can't write private key as it is empty -- Kan ikke skrive privat nøkkel fordi den er tom -- -- -- Unexpected EOF when writing private key -- Uventet EOF ved skriving av privat nøkkel -- -- -- Unsupported key type: %1 -- Ikke støttet nøkkeltype: %1 -- -- -- Unknown cipher: %1 -- Ukjent kryptering: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Krypterings-IV er for kort for MD5 kdf -- -- -- Unknown KDF: %1 -- Ukjent KDF: %1 -- -- -- Unknown key type: %1 -- Ukjent nøkkeltype: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Passordene er ikke like -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Angi passord: -- -- -- Confirm password: -- Bekreft passord: -- -- -- Password -- Passord -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- Passordene er ikke like. -- -- -- Password field -- Passord felt -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- styrke -- -- -- entropy -- entropi -- -- -- Password -- Passord -- -- -- Character Types -- Tegntyper -- -- -- Numbers -- Tall -- -- -- Extended ASCII -- Utvida ASCII -- -- -- Exclude look-alike characters -- Ekskluder tegn som er nesten makne -- -- -- Pick characters from every group -- Velg tegn fra hver gruppe -- -- -- &Length: -- &Lengde -- -- -- Passphrase -- Passordfrase -- -- -- Wordlist: -- Ordliste: -- -- -- Word Separator: -- Ord-skilletegn: -- -- -- Close -- Lukk -- -- -- Entropy: %1 bit -- Entropi: %1 bit -- -- -- Password Quality: %1 -- Passordkvalitet: %1 -- -- -- Poor -- Password quality -- Dårlig -- -- -- Weak -- Password quality -- Svak -- -- -- Good -- Password quality -- Bra -- -- -- Excellent -- Password quality -- Utmerket -- -- -- Switch to advanced mode -- Bytt til avansert modus -- -- -- Advanced -- Avansert -- -- -- Braces -- -- -- -- Punctuation -- -- -- -- Quotes -- -- -- -- Logograms -- -- -- -- Character set to exclude from generated password -- -- -- -- Do not include: -- Ikke ta med: -- -- -- Add non-hex letters to "do not include" list -- -- -- -- Hex -- -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- -- Generated password -- Generert passord -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- Passord lengde -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- Kopier passord -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- Antall ord: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- Spesialtegn -- -- -- -- QApplication -- -- KeeShare -- -- -- -- Statistics -- Statistikk -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- Erstatte -- -- -- Delete -- Slett -- -- -- Move -- Flytt -- -- -- Empty -- Tom -- -- -- Remove -- Fjern -- -- -- Skip -- Hopp over -- -- -- Disable -- Deaktiver -- -- -- Merge -- -- -- -- Continue -- Fortsett -- -- -- -- QObject -- -- Database not opened -- Database ikke åpnet -- -- -- Database hash not available -- Database-hash er ikke tilgjengelig -- -- -- Client public key not received -- Klients offentlige nøkkel ikke mottatt -- -- -- Cannot decrypt message -- Kan ikke dekryptere melding -- -- -- Action cancelled or denied -- Handlingen er kansellert eller avvist -- -- -- KeePassXC association failed, try again -- Assosiering av KeePassXC mislyktes, prøv igjen -- -- -- Encryption key is not recognized -- Krypteringsnøkkel er ikke gjenkjent -- -- -- Incorrect action -- Feil handling -- -- -- Empty message received -- Tom melding mottatt -- -- -- No URL provided -- Ingen URL oppgitt -- -- -- No logins found -- Ingen innlogginger funnet -- -- -- Unknown error -- Ukjent feil -- -- -- Add a new entry to a database. -- Legg til en ny oppføring til en database. -- -- -- Path of the database. -- Database-sti. -- -- -- Key file of the database. -- Nøkkelfil til databasen. -- -- -- path -- sti -- -- -- Username for the entry. -- Brukernavn for oppføringen. -- -- -- username -- brukernavn -- -- -- URL for the entry. -- URL for oppføringa. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Spør etter oppføringens passord. -- -- -- Generate a password for the entry. -- Generer et passord til oppføringa. -- -- -- length -- lengde -- -- -- Path of the entry to add. -- Sti til oppføringa som skal legges til. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Sti til oppføring som skal klippes ut. -- -- -- Timeout in seconds before clearing the clipboard. -- Forsinkelse i sekund før tømming av utklippstavlen. -- -- -- Edit an entry. -- Rediger oppføring. -- -- -- Title for the entry. -- Tittel for oppføringa. -- -- -- title -- tittel -- -- -- Path of the entry to edit. -- Sti til oppføringa som skal redigeres. -- -- -- Estimate the entropy of a password. -- Beregn entropien til et passord. -- -- -- Password for which to estimate the entropy. -- Passord for beregning av entropi. -- -- -- Perform advanced analysis on the password. -- Utfør avansert analyse på passordet. -- -- -- -- --Available commands: -- -- -- --Tilgjengelige kommandoer: -- -- -- -- Name of the command to execute. -- Navn på kommandoen som skal utføres. -- -- -- List database entries. -- Liste databaseoppføringer. -- -- -- Path of the group to list. Default is / -- Sti til gruppen som skal listes. Standard er / -- -- -- Find entries quickly. -- Finn oppføring fort. -- -- -- Search term. -- Søkeord. -- -- -- Merge two databases. -- Slå sammen to databaser. -- -- -- Path of the database to merge from. -- Sti til databasen det skal slås sammen fra. -- -- -- Use the same credentials for both database files. -- Bruk samme identifikasjon for begge databasefilene. -- -- -- Key file of the database to merge from. -- Nøkkelfil til databasen det skal slås sammen fra. -- -- -- Show an entry's information. -- Vis informasjon i oppføringen. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Navn på attributtene som skal vises. Dette alternativet kan spesifiseres mer enn en gang, med hvert attributt vist ett per linje i den oppgitte rekkefølgen. Hvis ingen attributter er oppgitt, blir det gitt en oppsummering av standardattributtene. -- -- -- attribute -- attributt -- -- -- Name of the entry to show. -- Navn på oppføring som skal vises -- -- -- NULL device -- NULL-enhet -- -- -- error reading from device -- Feil ved lesing fra enhet -- -- -- malformed string -- Ugyldig streng -- -- -- missing closing quote -- Manglende avsluttende anførselstegn -- -- -- Group -- Gruppe -- -- -- Title -- Tittel -- -- -- Username -- Brukernavn -- -- -- Password -- Passord -- -- -- Notes -- Notater -- -- -- Last Modified -- Sist endra -- -- -- Created -- Opprettet -- -- -- Browser Integration -- Nettlesertillegg -- -- -- SSH Agent -- SSH-agent -- -- -- Generate a new random diceware passphrase. -- Generer en ny tilfeldig diceware passordfrase. -- -- -- Word count for the diceware passphrase. -- Antall ord i diceware-passordfrasen. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Ordliste for diceware-generatoren. --[Standard: EFF engelsk] -- -- -- Generate a new random password. -- Generer et nytt tilfeldig passord. -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- Utklippstavle ryddet! -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- Antall -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- Lengde %1 -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- Type: Dato -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- Type: Ukjent%1 -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- -- -- -- Use lowercase characters -- -- -- -- Use uppercase characters -- -- -- -- Use special characters -- -- -- -- Use extended ASCII -- -- -- -- Exclude character set -- -- -- -- chars -- -- -- -- Exclude similar looking characters -- -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- Kan ikke finne gruppe %1 . -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- -- -- -- No program defined for clipboard manipulation -- -- -- -- file empty -- -- -- -- %1: (row, col) %2,%3 -- -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ugyldige innstillinger -- -- -- Invalid Key -- TOTP -- -- -- -- Message encryption failed. -- -- -- -- No groups found -- Ingen grupper funnet -- -- -- Create a new database. -- Opprett en ny database. -- -- -- File %1 already exists. -- Filen %1 eksisterer allerede. -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- Vellykket oppretting ny database. -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- Sti til oppføring som skal fjernes. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - en multiplattforms passordhåndterer -- -- -- filenames of the password databases to open (*.kdbx) -- Filnavn på passord-databasene som skal åpnes (*.kdbx) -- -- -- path to a custom config file -- Sti til tilpasset konfigurasjonsfil -- -- -- key file of the database -- Database-nøkkelfil -- -- -- read password of the database from stdin -- Les database-passord fra standard input -- -- -- Another instance of KeePassXC is already running. -- En annen instans av KeePassXC kjører allerede. -- -- -- Fatal error while testing the cryptographic functions. -- Alvorlig feil ved testing av de kryptografiske funksjonene. -- -- -- KeePassXC - Error -- KeePassXC - Feil -- -- -- Database password: -- Databasepassord: -- -- -- Cannot create new group -- -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Versjon %1 -- -- -- Build Type: %1 -- Byggetype: %1 -- -- -- Revision: %1 -- Revisjon: %1 -- -- -- Distribution: %1 -- Distribusjon: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operativsystem: %1 --CPU-arkitektur: %2 --Kjerne: %3 %4 -- -- -- Auto-Type -- Autoskriv -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- Berørings-id -- -- -- None -- Ingen -- -- -- Enabled extensions: -- Aktive utvidelser: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- Gruppe %1 ikke funnet. -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- FILNAVN -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- Skriv inn passord for å låse opp %1: -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Intern zlib-feil under pakking: -- -- -- Error writing to underlying device: -- Feil ved skriving til underliggende enhet: -- -- -- Error opening underlying device: -- Feil ved åpning av underliggende enhet: -- -- -- Error reading data from underlying device: -- Feil ved lesing av data fra underliggende enhet: -- -- -- Internal zlib error when decompressing: -- Intern zlib-feil under utpakking: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Gzip-formatet er ikke støttet i denne versjonen av zlib. -- -- -- Internal zlib error: -- Intern zlib-feil: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Dårlig -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Svak -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Tittel -- -- -- Path -- Sti -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Tittel -- -- -- Path -- Sti -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Navn -- -- -- Value -- Verdi -- -- -- Please wait, database statistics are being calculated... -- Vent, database statistikk blir beregnet... -- -- -- Database name -- Database navn -- -- -- Description -- Beskrivelse -- -- -- Location -- -- -- -- Last saved -- Sist lagret -- -- -- Unsaved changes -- -- -- -- yes -- ja -- -- -- no -- nei -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- -- -- -- Number of entries -- -- -- -- Number of expired entries -- -- -- -- The database contains entries that have expired. -- -- -- -- Unique passwords -- Unike passord -- -- -- Non-unique passwords -- -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mer enn 10% av passordene brukes på nytt. Bruk unike passord når det er mulig. -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Noen passord brukes mer enn tre ganger. Bruk unike passord når det er mulig. -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Anbefaler å bruke lange, tilfeldige passord med en vurdering av 'bra' eller 'utmerket'. -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- Agentforbindelse mislyktes. -- -- -- Agent protocol error. -- Agent protokollfeil. -- -- -- No agent running, cannot add identity. -- Ingen agent kjører. Kan ikke identifisere. -- -- -- No agent running, cannot remove identity. -- Ingen agent kjører, kan ikke fjerne identitet. -- -- -- Agent refused this identity. Possible reasons include: -- Agent nektet denne identiteten. Mulige grunner er: -- -- -- The key has already been added. -- Nøkkelen er alt blitt lagt til. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Begrenset levetid støttes ikke av agenten (sjekk alternativene). -- -- -- A confirmation request is not supported by the agent (check options). -- En bekreftelsesforespørsel støttes ikke av agenten (sjekk alternativene). -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- -- -- -- exclude term from results -- -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- Eksempler -- -- -- -- SearchWidget -- -- Search -- Søk -- -- -- Limit search to selected group -- Avgrens søket til valgt gruppe -- -- -- Search Help -- -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Søk (%1)... -- -- -- Case sensitive -- -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Alternativer -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- Generelt -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktiv -- -- -- Allow export -- -- -- -- Allow import -- -- -- -- Own certificate -- Egne sertifikat -- -- -- Fingerprint: -- Fingeravtrykk: -- -- -- Certificate: -- Sertifikat -- -- -- Signer -- -- -- -- Key: -- Nøkkel: -- -- -- Generate -- Lag passord -- -- -- Import -- Importer -- -- -- Export -- Eksporter -- -- -- Imported certificates -- Importerte sertifikater -- -- -- Trust -- -- -- -- Ask -- Spør -- -- -- Untrust -- -- -- -- Remove -- Fjern -- -- -- Path -- Sti -- -- -- Status -- Status -- -- -- Fingerprint -- Fingeravtrykk -- -- -- Certificate -- Sertifikat -- -- -- Trusted -- Klarert -- -- -- Untrusted -- Uklarert -- -- -- Unknown -- Ukjent -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- -- -- -- All files -- Alle filer -- -- -- Select path -- Velg sti -- -- -- Exporting changed certificate -- Eksporterer endret sertifikat -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Eksportert sertifikat er ikke det samme som det som er i bruk. Vil du eksportere gjeldende sertifikat? -- -- -- Signer: -- -- -- -- Allow KeeShare imports -- -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Nøkkel -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- Kunne ikke skrive eksport-container -- -- -- Unexpected export error occurred -- Uventet feil oppstått -- -- -- -- ShareImport -- -- Import from container without signature -- -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- Ikke denne gangen -- -- -- Never -- Aldri -- -- -- Always -- Alltid -- -- -- Just this time -- Bare denne gangen -- -- -- Signed share container are not supported - import prevented -- -- -- -- File is not readable -- Filen er ikke lesbar -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- -- -- -- Unsigned share container are not supported - import prevented -- -- -- -- Successful unsigned import -- -- -- -- File does not exist -- Filen eksisterer ikke -- -- -- Unknown share container type -- -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- -- -- -- Import from %1 successful (%2) -- -- -- -- Imported from %1 -- -- -- -- Export to %1 failed (%2) -- Eksport til %1 feilet (%2) -- -- -- Export to %1 successful (%2) -- Eksport til %1 vellykket (%2) -- -- -- Export to %1 -- Eksporter til %1 -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- Tidsbasert passord -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopier -- -- -- Expires in <b>%n</b> second(s) -- Utløper om %n sekundUtløper om <b>%n</b> sekunder -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopier -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- MERK: Disse TOTP-innstillingene er egendefinerte og fungerer kanskje ikke med andre autentifikatorer. -- -- -- There was an error creating the QR code. -- Feil ved opprettelse av QR-koden. -- -- -- Closing in %1 seconds. -- Lukker om %1 sekunder. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Oppsett TOTP -- -- -- Default RFC 6238 token settings -- Standard RFC 6238 token-innstillinger -- -- -- Steam token settings -- Steam token-innstillinger -- -- -- Use custom settings -- Bruk egendefinerte innstillinger -- -- -- Custom Settings -- Egendefinerte innstillinger -- -- -- Time step: -- Tidsintervall: -- -- -- sec -- Seconds -- sek -- -- -- Code size: -- Kodestørrelse: -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritme: -- -- -- Time step field -- -- -- -- digits -- -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Sjekker for oppdateringer -- -- -- Checking for updates... -- Sjekker for oppdateringer... -- -- -- Close -- Lukk -- -- -- Update Error! -- Feil ved oppdatering! -- -- -- An error occurred in retrieving update information. -- En feil oppstod ved mottak av oppdateringsinformasjon. -- -- -- Please try again later. -- Prøv igjen senere. -- -- -- Software Update -- Programvareoppdatering -- -- -- A new version of KeePassXC is available! -- En ny versjon av KeePassXC er tilgjengelig! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 er nå tilgjengelig — du har %2. -- -- -- Download it at keepassxc.org -- Lastes ned fra keepassxc.org -- -- -- You're up-to-date! -- Du er oppdatert! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 er nå nyeste versjon som er tilgjengelig -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Begynn å lagre passordene dine i en trygg KeePassXC-database -- -- -- Create new database -- Opprett ny database -- -- -- Open existing database -- Åpne eksisterende database -- -- -- Import from KeePass 1 -- Importer KeePass1-database -- -- -- Import from CSV -- Importer fra CSV-fil -- -- -- Recent databases -- Nylige databaser -- -- -- Welcome to KeePassXC %1 -- Velkommen til KeePassXC %1 -- -- -- Import from 1Password -- Importer fra 1Password -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Trykk -- -- -- Passive -- Passiv -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Last på ny -- -- -- YubiKey Challenge-Response -- YubiKey utfordrings-respons -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Dersom du har en <a href="https://www.yubico.com/">YubiKey</a>, så kan du bruke den for økt sikkerhet.</p><p>Ett av sporene på YubiKey må programmeres med <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 utfordrings-respons</a>.</p> -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_nl_NL.ts keepassxc-2.6.4-patched/share/translations/keepassx_nl_NL.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_nl_NL.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_nl_NL.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7890 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Over KeePassXC -- -- -- About -- Over -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Meld problemen op: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;"> https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (desgewenst) versie 3. -- -- -- Contributors -- Bijdragen van -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Toon bijdragen op GitHub</a> -- -- -- Debug Info -- Foutinformatie -- -- -- Include the following information whenever you report a bug: -- Voeg de volgende informatie bij de foutrapportage: -- -- -- Copy to clipboard -- Naar klembord kopiëren -- -- -- Project Maintainers: -- Projectbeheerders: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Bijzondere dank van het KeePassXC-team gaat uit naar debfx voor het creëren van het oorspronkelijke KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Gebruik OpenSSH voor Windows in plaats van Pageant -- -- -- Enable SSH Agent integration -- SSH Agent-integratie inschakelen -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK waarde -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK overschrijven -- -- -- (empty) -- (leeg) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Geen SSH Agent-socket beschikbaar. Zorg ervoor dat de omgevingsvariabele SSH_AUTH_SOCK bestaat of stel een overschrijving in. -- -- -- SSH Agent connection is working! -- SSH Agent-verbinding werkt! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Programma-instellingen -- -- -- General -- Algemeen -- -- -- Security -- Beveiliging -- -- -- Access error for config file %1 -- Geen toegang tot configuratiebestand %1 -- -- -- Icon only -- Alleen pictogram -- -- -- Text only -- Alleen tekst -- -- -- Text beside icon -- Tekst naast pictogram -- -- -- Text under icon -- Tekst onder pictogram -- -- -- Follow style -- Volg stijl -- -- -- Reset Settings? -- Instellingen herstellen? -- -- -- Are you sure you want to reset all general and security settings to default? -- Weet je zeker dat je de algemene en beveiligingsinstellingen opnieuw wilt instellen? -- -- -- Monochrome (light) -- Monochroom (licht) -- -- -- Monochrome (dark) -- Monochroom (donker) -- -- -- Colorful -- Kleurrijk -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Je moet de toepassing opnieuw starten om de nieuwe taal in te stellen. Wil je dat nu doen? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Basisinstellingen -- -- -- Startup -- Opstarten -- -- -- Start only a single instance of KeePassXC -- Start niet meer dan één instantie van KeePassXC -- -- -- Minimize window at application startup -- Scherm minimaliseren bij het opstarten -- -- -- File Management -- Bestandsbeheer -- -- -- Backup database file before saving -- Back-up databasebestand voor het opslaan -- -- -- Automatically save after every change -- Automatisch opslaan na iedere wijziging -- -- -- Automatically reload the database when modified externally -- Database automatisch opnieuw laden als deze van buitenaf is gewijzigd -- -- -- Entry Management -- Itembeheer -- -- -- Use group icon on entry creation -- Groepspictogram toepassen bij nieuwe items -- -- -- Minimize instead of app exit -- Minimaliseren in plaats van app afsluiten -- -- -- Show a system tray icon -- Pictogram in het systeemvak weergeven -- -- -- Hide window to system tray when minimized -- Minimaliseren naar systeemvak -- -- -- Auto-Type -- Auto-type -- -- -- Use entry title to match windows for global Auto-Type -- Gebruik naam van item als vensternaam voor Auto-type -- -- -- Use entry URL to match windows for global Auto-Type -- Laat URL overeenkomen met item bij Auto-type -- -- -- Always ask before performing Auto-Type -- Altijd vragen voor toepassen Auto-type -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Verplaatsbare werkbalk -- -- -- Remember previously used databases -- Laatstgebruikte databases onthouden -- -- -- Load previously open databases on startup -- Laatstgebruikte databases openen bij het opstarten -- -- -- Remember database key files and security dongles -- Laatstgebruikte sleutelbestanden en beveiligingssticks onthouden -- -- -- Check for updates at application startup once per week -- Controleer eens per week op updates bij het opstarten van het programma -- -- -- Include beta releases when checking for updates -- Zoek ook naar bèta-releases bij het controleren op updates -- -- -- Language: -- Taal: -- -- -- (restart program to activate) -- (programma opnieuw starten om te activeren) -- -- -- Minimize window after unlocking database -- Venster minimaliseren na ontgrendelen van database -- -- -- Minimize when opening a URL -- Minimaliseren bij het openen van een URL -- -- -- Hide window when copying to clipboard -- Venster verbergen bij kopiëren naar klembord -- -- -- Minimize -- Minimaliseren -- -- -- Drop to background -- Naar achtergrond verplaatsen -- -- -- Favicon download timeout: -- Favicon download time-out: -- -- -- Website icon download timeout in seconds -- Websitepictogram download time-out in seconden -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- Knopstijl van de werkbalk -- -- -- Language selection -- Taalkeuze -- -- -- Global auto-type shortcut -- Globale sneltoets voor Auto-type -- -- -- Auto-type character typing delay milliseconds -- Auto-typevertraging milliseconden -- -- -- Auto-type start delay milliseconds -- Auto-type startvertraging milliseconden -- -- -- Automatically launch KeePassXC at system startup -- KeePassXC automatisch opstarten met het systeem -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Databasebestanden veilig opslaan (uitschakelen bij problemen met Dropbox, enz.) -- -- -- User Interface -- Gebruikersomgeving -- -- -- Toolbar button style: -- Knopstijl van de werkbalk: -- -- -- Use monospaced font for notes -- Mono-lettertype gebruiken voor notities -- -- -- Tray icon type: -- Systeemvak-pictogram: -- -- -- Reset settings to default… -- Standaardinstellingen terugzetten... -- -- -- Auto-Type typing delay: -- Auto-type typevertraging: -- -- -- Global Auto-Type shortcut: -- Algemene Auto-type sneltoets: -- -- -- Auto-Type start delay: -- Auto-type startvertraging: -- -- -- Automatically save when locking database -- Automatisch opslaan bij het vergrendelen van de database -- -- -- Automatically save non-data changes when locking database -- Automatisch niet-gegevens wijzigingen opslaan bij het vergrendelen van de database -- -- -- Tray icon type -- Systeemvak-pictogram -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Time-outs -- -- -- Clear clipboard after -- Klembord wissen na -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Databases vergrendelen na inactiviteit van -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Touch ID vergeten na inactiviteit van -- -- -- Convenience -- Gebruiksgemak -- -- -- Lock databases when session is locked or lid is closed -- Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van het deksel -- -- -- Forget TouchID when session is locked or lid is closed -- Touch ID vergeten wanneer sessie wordt vergrendeld of deksel wordt gesloten -- -- -- Lock databases after minimizing the window -- Databases vergrendelen bij het minimaliseren van het venster -- -- -- Re-lock previously locked database after performing Auto-Type -- Vergrendelde database na Auto-type weer vergrendelen -- -- -- Hide passwords in the entry preview panel -- Wachtwoorden in voorvertoning verbergen -- -- -- Hide entry notes by default -- Notities standaard verbergen -- -- -- Privacy -- Privacy -- -- -- Use DuckDuckGo service to download website icons -- DuckDuckGo gebruiken om websitepictogrammen te downloaden -- -- -- Clipboard clear seconds -- Klembord wissen in seconden -- -- -- Touch ID inactivity reset -- Touch ID inactiviteit herstellen -- -- -- Database lock timeout seconds -- Database vergrendeling wachttijd seconden -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Zoekopdracht wissen na -- -- -- Require password repeat when it is visible -- Herhaling vereisen wanneer het wachtwoord zichtbaar is -- -- -- Hide passwords when editing them -- Wachtwoord verbergen tijdens bewerken -- -- -- Use placeholder for empty password fields -- Tijdelijke aanduiding gebruiken voor lege wachtwoordvelden -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Kon geen item vinden dat overeenkomt met de vensternaam: -- -- -- Auto-Type - KeePassXC -- Auto-type - KeePassXC -- -- -- Auto-Type -- Auto-type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- De syntaxis van de Auto-type opdracht is onjuist! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Deze Auto-type opdracht bevat een zeer lange vertraging. Wil je echt doorgaan? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Deze Auto-type opdracht bevat zeer trage toetsaanslagen. Wil je echt doorgaan? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Deze Auto-type opdracht bevat elementen die zeer vaak worden herhaald. Wil je echt doorgaan? -- -- -- Permission Required -- Toestemming vereist -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC heeft de Toegankelijkheid-machtiging nodig om invoerniveau Auto-type te kunnen uitvoeren. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Venster -- -- -- Sequence -- Tekenreeks -- -- -- Default sequence -- Standaard tekenreeks -- -- -- -- AutoTypeMatchModel -- -- Group -- Groep -- -- -- Title -- Naam -- -- -- Username -- Gebruikersnaam -- -- -- Sequence -- Tekenreeks -- -- -- -- AutoTypeMatchView -- -- Copy &username -- &Gebruikersnaam kopiëren -- -- -- Copy &password -- &Wachtwoord kopiëren -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Toestemming vereist -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC heeft de Toegankelijkheid- en Schermopname-machtiging nodig om globale Auto-type te kunnen uitvoeren. Schermopname is benodigd om het venster te gebruiken om invoer te kunnen vinden. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-type - KeePassXC -- -- -- Select entry to Auto-Type: -- Kies item om automatisch in te vullen: -- -- -- Search... -- Zoeken… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Verzoek om browsertoegang -- -- -- %1 is requesting access to the following entries: -- %1 vraagt toegang tot de volgende vermeldingen: -- -- -- Remember access to checked entries -- Onthoud de toegang tot aangevinkte vermeldingen -- -- -- Remember -- Onthouden -- -- -- Allow access to entries -- Toegang tot vermeldingen toestaan -- -- -- Allow Selected -- Selectie toestaan -- -- -- Deny All -- Alles weigeren -- -- -- Disable for this site -- Uitschakelen voor deze website -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser: Item opslaan -- -- -- Ok -- Oké -- -- -- Cancel -- Annuleren -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Er zijn meerdere databases geopend. --Selecteer de database voor het opslaan van de inloggegevens. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nieuw verzoek voor sleutelkoppeling -- -- -- Save and allow access -- Opslaan en toegang verlenen -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Bestaande sleutel overschrijven? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Een gedeelde coderingssleutel met de naam "%1" bestaat al. --Wil je deze overschrijven? -- -- -- KeePassXC: Update Entry -- KeePassXC: Item bijwerken -- -- -- Do you want to update the information in %1 - %2? -- Wil je de gegevens in %1 - %2 bijwerken? -- -- -- Abort -- Afbreken -- -- -- Converting attributes to custom data… -- Kenmerken worden omgezet in aangepaste gegevens... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Omgezette KeePassHTTP-kenmerken -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Kenmerken van %1 item(s) is/zijn omgezet. --%2 sleutels naar aangepaste gegevens verplaatst. -- -- -- Successfully moved %n keys to custom data. -- Sleutel is verplaats naar speciale data.%n Sleutels zijn verplaatst naar aangepaste gegevens. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Geen item met KeePassHTTP-kenmerken gevonden! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- De actieve database bevat geen item met KeePassHTTP-kenmerken. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: instellingen voor oudere browserintegratie gedetecteerd -- -- -- KeePassXC: Create a new group -- KeePassXC: Een nieuwe groep aanmaken -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Een aanvraag voor het aanmaken van een nieuwe groep '%1' werd ontvangen. --Wil je deze groep aanmaken? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database. --Dit is nodig om de huidige browserverbindingen te behouden. --Wil je de bestaande instellingen nu migreren? -- -- -- Don't show this warning again -- Deze waarschuwing niet meer geven -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Je hebt een associatieverzoek ontvangen voor de volgende database: --%1 -- --Geef de verbinding een unieke naam of ID, voorbeeld: --chrome-laptop -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialoog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Dit is vereist voor toegang tot jouw databases met KeePassXC-Browser -- -- -- Enable browser integration -- Browserintegratie inschakelen -- -- -- General -- Algemeen -- -- -- Browsers installed as snaps are currently not supported. -- Browsers die als snaps zijn geïnstalleerd, worden momenteel niet ondersteund. -- -- -- Enable integration for these browsers: -- Activeer integratie voor deze browsers: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Toon een melding wanneer om referenties wordt gevraagd -- -- -- Request to unlock the database if it is locked -- Verzoek om ontgrendeling van de database als deze is vergrendeld -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Alleen items van hetzelfde schema (http://, https://, …) worden gegeven. -- -- -- Match URL scheme (e.g., https://...) -- Overeenkomstig URL-schema (bijv. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Geeft alleen de beste overeenkomsten terug voor een specifieke URL in plaats van alle items voor het hele domein. -- -- -- Return only best-matching credentials -- Geef alleen best overeenkomende inloggegevens -- -- -- Returns expired credentials. String [expired] is added to the title. -- Geeft verlopen inloggegevens. Woord [expired] is aan de titel toegevoegd. -- -- -- Allow returning expired credentials -- Verlopen inloggegevens toestaan -- -- -- All databases connected to the extension will return matching credentials. -- Alle databases verbonden met de extensie kunnen overeenkomende inloggegevens geven. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Zoek in alle geopende databases naar overeenkomende inloggegevens -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sorteer inloggegevens op titel -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sorteer inloggegevens op gebruikersnaam -- -- -- Advanced -- Geavanceerd -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nooit waarschuwen bij toegang tot logingegevens -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nooit waarschuwen bij bijwerken van inloggegevens -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Vraag geen toestemming voor HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund. -- -- -- Return advanced string fields which start with "KPH: " -- Lever geavanceerde tekenreeksvelden die beginnen met "KPH:" -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Laat de pop-up die de migratie van KeePassHTTP naar KeePassXC-Browser aanbiedt, niet meer zien. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Vraag niet om migratie van KeePassHTTP-instellingen. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Wijzig bij het opstarten automatisch het zoekpad van KeePassXC of keepassxc-proxy naar de native messaging scripts. -- -- -- Update native messaging manifest files at startup -- Native messaging-manifestbestanden bij het opstarten bijwerken -- -- -- Use a custom proxy location if you installed a proxy manually. -- Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Aangepaste proxy-locatie toepassen: -- -- -- Custom proxy location field -- Handmatig Proxy invulveld -- -- -- Browser for custom proxy file -- Blader naar eigen Proxy configuratiebestand -- -- -- Browse... -- Button for opening file dialog -- Bladeren… -- -- -- Use a custom browser configuration location: -- Aangepaste locatie voor de browserconfiguratie gebruiken: -- -- -- Browser type: -- Browser-type: -- -- -- Toolbar button style -- Knopstijl van de werkbalk -- -- -- Config Location: -- Locatie configuratiebestand: -- -- -- Custom browser location field -- Aangepast locatieveld van de browser -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Blader naar een aangepast browserpad -- -- -- Custom extension ID: -- Aangepast extensie-ID: -- -- -- Custom extension ID -- Aangepast extensie-ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Vanwege de Snap-sandboxing moet je een script uitvoeren waarmee browserintegratie mogelijk wordt. <br /> Je kunt dit script vinden op %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser is nodig om de integratie met de browser te laten werken. <br /> Download het voor %1 en %2 en %3. %4. -- -- -- Please see special instructions for browser extension use below -- Raadpleeg onderstaande speciale instructies voor gebruik van browserextensie -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- Fout:</b> De aangepaste proxy-locatie is niet gevonden!<br/>Browserintegratie WERKT NIET zonder de proxy-applicatie. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! -- -- -- Executable Files -- Uitvoerbare bestanden -- -- -- All Files -- Alle bestanden -- -- -- Select custom proxy location -- Selecteer aangepaste proxy-locatie -- -- -- Select native messaging host folder location -- Selecteer de locatie van de native messaging-hostmap -- -- -- -- CloneDialog -- -- Clone Options -- Opties dupliceren -- -- -- Append ' - Clone' to title -- Voeg ' - Duplicaat' toe aan naam -- -- -- Replace username and password with references -- Gebruikersnaam en wachtwoord vervangen door referenties -- -- -- Copy history -- Historie kopiëren -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV-velden importeren -- -- -- filename -- bestandsnaam -- -- -- size, rows, columns -- grootte, rijen, kolommen -- -- -- Encoding -- Codering -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Tekst staat tussen -- -- -- Fields are separated by -- Velden worden gescheiden door -- -- -- Comments start with -- Commentaar start met -- -- -- Consider '\' an escape character -- Beschouw '\' als escape-teken -- -- -- Preview -- Voorvertoning -- -- -- Imported from CSV file -- Geïmporteerd uit CSV-bestand -- -- -- Original data: -- Originele gegevens: -- -- -- Error -- Fout -- -- -- Error(s) detected in CSV file! -- Fout(en) gevonden in CSV-bestand! -- -- -- [%n more message(s) skipped] -- [%n meer bericht(en) overgeslagen][%n bericht(en) overgeslagen] -- -- -- CSV import: writer has errors: --%1 -- CSV importeren: schrijver heeft fouten: --%1 -- -- -- Text qualification -- Tekstkwalificatie -- -- -- Field separation -- Veldscheiding -- -- -- Number of header lines to discard -- Aantal te negeren kopregels -- -- -- CSV import preview -- CSV import voorbeeld -- -- -- Column Association -- Kolomverwijzing -- -- -- Last Modified -- Laatst bewerkt -- -- -- Password -- Wachtwoord -- -- -- Created -- Aangemaakt -- -- -- Notes -- Notities -- -- -- Title -- Naam -- -- -- Group -- Groep -- -- -- URL -- URL -- -- -- Username -- Gebruikersnaam -- -- -- Header lines skipped -- Koptekstregels overgeslagen -- -- -- First line has field names -- De eerste regel bevat veldnamen -- -- -- Not Present -- Niet aanwezig -- -- -- Column %1 -- Kolom %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Pictogram -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolom%n kolom(men) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte (s)%n byte(s) -- -- -- %n row(s) -- %n rij(en)%n rij(en) -- -- -- -- Database -- -- File %1 does not exist. -- Bestand %1 bestaat niet. -- -- -- Unable to open file %1. -- Kan bestand %1 niet openen. -- -- -- Error while reading the database: %1 -- Fout bij het lezen van de database: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Bestand kan niet worden geschreven omdat het in de alleen-lezen modus is geopend. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Sleutel is niet getransformeerd. Dit is een fout, rapporteer deze alsjeblieft aan de ontwikkelaars! -- -- -- %1 --Backup database located at %2 -- %1 --Back-up databestand op %2 -- -- -- Could not save, database does not point to a valid file. -- Kan niet opslaan. Database verwijst niet naar een geldig bestand. -- -- -- Could not save, database file is read-only. -- Kan niet opslaan. Databasebestand is alleen-lezen. -- -- -- Database file has unmerged changes. -- Databasebestand heeft niet opgeslagen gegevens. -- -- -- Recycle Bin -- Prullenbak -- -- -- Passwords -- Root group name -- Wachtwoorden -- -- -- Database save is already in progress. -- Database wordt opgeslagen. -- -- -- Could not save, database has not been initialized! -- Niet opgeslagen, database is niet geïnitialiseerd! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Database ontgrendelen - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Sleutelbestand: -- -- -- Refresh -- Vernieuwen -- -- -- Don't show this warning again -- Deze waarschuwing niet meer geven -- -- -- All files -- Alle bestanden -- -- -- Key files -- Sleutelbestanden -- -- -- Select key file -- Kies sleutelbestand -- -- -- Failed to open key file: %1 -- Kon sleutelbestand niet openen: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC-database ontgrendelen -- -- -- Enter Password: -- Geef wachtwoord: -- -- -- Password field -- Wachtwoord invulveld -- -- -- Hardware key slot selection -- Hardwaresleutel positie selectie -- -- -- Browse for key file -- Blader naar sleutelbestand -- -- -- Browse... -- Bladeren… -- -- -- Refresh hardware tokens -- Hardwaretoken verversen -- -- -- Hardware Key: -- Hardwaresleutel: -- -- -- Hardware key help -- Hardwaresleutelhulp -- -- -- TouchID for Quick Unlock -- Touch ID voor snelle ontgrendeling -- -- -- Unlock failed and no password given -- Ontgrendeling mislukt en geen wachtwoord ingevoerd -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Het ontgrendelen van de database is mislukt en je hebt geen wachtwoord ingevoerd. --Wil je het opnieuw proberen met een "leeg" wachtwoord? -- --Om deze fout te voorkomen ga je naar "Database instellingen.../Beveiliging" en herstel daar het wachtwoord. -- -- -- Retry with empty password -- Probeer opnieuw met leeg wachtwoord -- -- -- Enter Additional Credentials (if any): -- Voer eventuele aanvullende inloggegevens in: -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Je kunt een hardwarebeveiligingssleutel gebruiken, zoals een <strong>YubiKey</strong> of <strong>OnlyKey</strong> met posities (slots) geconfigureerd voor HMAC-SHA1.</p> --<p>Klik voor meer informatie...</p> -- -- -- Key file help -- Sleutelbestandhulp -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Kan database niet als sleutelbestand gebruiken -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Je kunt je database niet als sleutelbestand gebruiken. --Als je geen sleutelbestand hebt laat je het veld leeg. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Naast een wachtwoord kan je een geheim bestand gebruiken om de beveiliging van je database te verbeteren. Dit bestand kan worden gegenereerd in de beveiligingsinstellingen van je database.</p><p>Dit is <strong>niet</strong> jouw *.kdbx database-bestand!<br>Laat dit veld leeg als je geen sleutelbestand gebruikt.</p><p>Klik hier voor meer informatie...</p> -- -- -- Key file to unlock the database -- Sleutelbestand om de database te ontgrendelen -- -- -- Please touch the button on your YubiKey! -- Druk op de knop van je YubiKey! -- -- -- Detecting hardware keys… -- Hardwaresleutels detecteren... -- -- -- No hardware keys detected -- Geen hardwaresleutels gedetecteerd -- -- -- Select hardware key… -- Selecteer hardwaresleutel... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Wachtwoorden -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Geavanceerde instellingen -- -- -- General -- Algemeen -- -- -- Security -- Beveiliging -- -- -- Encryption Settings -- Versleutelingsinstellingen -- -- -- Browser Integration -- Browserintegratie -- -- -- Database Credentials -- Databasegegevens -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser instellingen -- -- -- Stored keys -- Opgeslagen sleutels -- -- -- Remove -- Verwijderen -- -- -- Delete the selected key? -- Geselecteerde sleutel verwijderen? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Wil je de geselecteerde sleutel echt verwijderen? --Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. -- -- -- Key -- Sleutel -- -- -- Value -- Waarde -- -- -- Enable Browser Integration to access these settings. -- Activeer browserintegratie om deze instellingen te kunnen wijzigen. -- -- -- Disconnect all browsers -- Verbreek de verbinding met alle browsers -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Wil je echt de verbinding met alle browsers verbreken? --Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. -- -- -- KeePassXC: No keys found -- KeePassXC: Geen sleutels gevonden -- -- -- No shared encryption keys found in KeePassXC settings. -- Geen gedeelde coderingssleutels gevonden in KeePassXC instellingen. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Sleutels uit database verwijderd -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n coderingssleutel uit KeePassXC instellingen verwijderd.Er zijn %n coderingssleutel(s) uit KeePassXC-instellingen verwijderd. -- -- -- Forget all site-specific settings on entries -- Vergeet alle site-specifieke instellingen bij items -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Wil je echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken. -- -- -- Removing stored permissions… -- Opgeslagen machtigingen verwijderen… -- -- -- Abort -- Afbreken -- -- -- KeePassXC: Removed permissions -- KeePassXC: machtigingen verwijderd -- -- -- Successfully removed permissions from %n entry(s). -- Machtigingen zijn verwijderd uit %n item(s).Machtigingen zijn verwijderd uit %n item(s). -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Geen item met machtigingen gevonden! -- -- -- The active database does not contain an entry with permissions. -- De actieve database bevat geen items met machtigingen. -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP-kenmerken naar aangepaste gegevens verplaasen -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Wil je echt alle instellingen voor de oudere browserintegratie veranderen naar de nieuwste standaard? --Dit is nodig om compatibiliteit met de browserextensie te behouden. -- -- -- Stored browser keys -- Opgeslagen browsersleutels -- -- -- Remove selected key -- Geselecteerde sleutel verwijderen -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Verplaats KeePassHTTP-kenmerken naar aangepaste KeePassXC-Browser-gegevens -- -- -- Refresh database root group ID -- Database-rootgroep-ID vernieuwen -- -- -- Created -- Aangemaakt -- -- -- Refresh database ID -- Database-ID vernieuwen -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Wilt je echt de database-ID vernieuwen? --Dit is alleen nodig als je database een kopie is van een andere en de browserextensie geen verbinding kan maken. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Aanvullende beveiliging toevoegen... -- -- -- No password set -- Geen wachtwoord ingesteld -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden! -- --Weet je zeker dat je door wilt gaan zonder een wachtwoord? -- -- -- Continue without password -- Doorgaan zonder wachtwoord -- -- -- No encryption key added -- Geen coderingssleutel toegevoegd -- -- -- You must add at least one encryption key to secure your database! -- Je moet minstens één coderingssleutel aan je database toevoegen om deze te beveiligen! -- -- -- Unknown error -- Onbekende fout -- -- -- Failed to change database credentials -- Veranderen van databasereferenties is mislukt -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Versleutelingsalgoritme: -- -- -- AES: 256 Bit (default) -- AES: 256 bit (standaard) -- -- -- Twofish: 256 Bit -- Twofish: 256 bit -- -- -- Key Derivation Function: -- Sleutel-afleidingsfunctie: -- -- -- Transform rounds: -- Transformatie-iteraties: -- -- -- Memory Usage: -- Geheugengebruik: -- -- -- Parallelism: -- Parallelliteit: -- -- -- Decryption Time: -- Decoderingstijd: -- -- -- ?? s -- ?? s -- -- -- Change -- Wijzigen -- -- -- Higher values offer more protection, but opening the database will take longer. -- Hogere waarden bieden meer bescherming, maar laten het openen van de database langer duren. -- -- -- Database format: -- Database-indeling: -- -- -- This is only important if you need to use your database with other programs. -- Dit is alleen van belang als je de database met andere programma's wil gebruiken. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (aanbevolen) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- ongewijzigd -- -- -- Number of rounds too high -- Key transformation rounds -- Aantal iteraties te hoog -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Je gebruikt een zeer groot aantal sleuteltransformatie-iteraties met Argon2. -- --Als je dit aantal aanhoudt, kan het uren, dagen (of zelfs langer) duren om de database te openen! -- -- -- Understood, keep number -- Begrepen, aantal aanhouden -- -- -- Cancel -- Annuleren -- -- -- Number of rounds too low -- Key transformation rounds -- Aantal iteraties te laag -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF. -- --Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kraken! -- -- -- KDF unchanged -- KDF ongewijzigd -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Het transformeren van de sleutel met de nieuwe KDF-parameters is mislukt; KDF is ongewijzigd. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- thread(s)thread(s) -- -- -- Change existing decryption time -- Huidige decoderingstijd wijzigen -- -- -- Decryption time in seconds -- Decoderingstijd in seconden -- -- -- Database format -- Database-indeling -- -- -- Encryption algorithm -- Versleutelingsalgoritme -- -- -- Key derivation function -- Sleutelafleidingsfunctie -- -- -- Transform rounds -- Transformatierondes -- -- -- Memory usage -- Geheugengebruik -- -- -- Parallelism -- Parallelliteit -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Beschikbare items -- -- -- Don't expose this database -- Deze database niet blootstellen -- -- -- Expose entries under this group: -- Items onder deze groep blootstellen: -- -- -- Enable Secret Service to access these settings. -- Schakel Secret Service in om toegang te krijgen tot deze instellingen. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Database meta-gegevens -- -- -- Database name: -- Naam van de database: -- -- -- Database description: -- Beschrijving van de database: -- -- -- Default username: -- Standaard gebruikersnaam: -- -- -- History Settings -- Geschiedenis-instellingen -- -- -- Max. history items: -- Max. geschiedenisitems: -- -- -- Max. history size: -- Max. geschiedenisgrootte: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Prullenbak gebruiken -- -- -- Additional Database Settings -- Aanvullende database-instellingen -- -- -- Database name field -- Databasenaamveld -- -- -- Database description field -- Databaseomschrijvingveld -- -- -- Default username field -- Standaardgebruikersnaamveld -- -- -- Maximum number of history items per entry -- Maximum aantal vorige versies per item -- -- -- Maximum size of history per entry -- Maximale grootte van vorige versies per item -- -- -- Delete Recycle Bin -- Verwijder prullenbak -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Wil je de huidige prullenbak en al zijn inhoud verwijderen? --Deze actie is onomkeerbaar. -- -- -- (old) -- (oud) -- -- -- Enable compression (recommended) -- Compressie inschakelen (aanbevolen) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Delen -- -- -- Breadcrumb -- Broodkruimel -- -- -- Type -- Type -- -- -- Path -- Pad -- -- -- Last Signer -- Laatste Ondertekenaar -- -- -- Certificates -- Certificaten -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Database naam: -- -- -- Description: -- Beschrijving: -- -- -- Database name field -- Databasenaamveld -- -- -- Database description field -- Databaseomschrijvingveld -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2-database -- -- -- All files -- Alle bestanden -- -- -- Open database -- Database openen -- -- -- CSV file -- CSV-bestand -- -- -- Merge database -- Database samenvoegen -- -- -- Open KeePass 1 database -- KeePass 1-database openen -- -- -- KeePass 1 database -- KeePass 1-database -- -- -- Export database to CSV file -- Database exporteren naar CSV-bestand -- -- -- Writing the CSV file failed. -- Schrijven van het CSV-bestand mislukt. -- -- -- Database creation error -- Fout bij het aanmaken van de database: -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- De aangemaakte database heeft geen sleutel of KDF en kan daarom niet worden opgeslagen. --Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. -- -- -- Select CSV file -- Selecteer CSV-bestand -- -- -- New Database -- Nieuwe database -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [nieuwe database] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [vergrendeld] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [alleen lezen] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Kon %1 niet openen. Het bestaat niet of is niet toegankelijk. -- -- -- Export database to HTML file -- Database exporteren naar HTML-bestand -- -- -- HTML file -- HTML-bestand -- -- -- Writing the HTML file failed. -- Schrijven van het HTML-bestand is mislukt. -- -- -- Export Confirmation -- Exporteerbevestiging -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Je gaat je database naar een niet-versleuteld bestand exporteren. Dit maakt je wachtwoorden en gevoelige informatie kwetsbaar! Weet je zeker dat je door wil gaan? -- -- -- Open OPVault -- OPVault openen -- -- -- -- DatabaseWidget -- -- Searching... -- Bezig met zoeken… -- -- -- Do you really want to delete the entry "%1" for good? -- Weet je zeker dat je item "%1" definitief wil verwijderen? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Weet je zeker dat je item "%1" naar de prullenbak wil verplaatsen? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Wil je echt %n item naar de Prullenbak verplaatsen?Wil je echt %n items naar de Prullenbak verplaatsen? -- -- -- Execute command? -- Opdracht uitvoeren? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Weet je zeker dat je de volgende opdracht wil uitvoeren? <br><br>%1<br> -- -- -- Remember my choice -- Mijn keuze onthouden -- -- -- Do you really want to delete the group "%1" for good? -- Weet je zeker dat je de groep "%1" wil verwijderen? -- -- -- No current database. -- Geen actuele database. -- -- -- No source database, nothing to do. -- Geen brondatabase; er valt niks te doen. -- -- -- Search Results (%1) -- Zoekresultaten (%1) -- -- -- No Results -- Geen resultaten -- -- -- File has changed -- Bestand is gewijzigd -- -- -- The database file has changed. Do you want to load the changes? -- Het database-bestand is gewijzigd. Wil je de aanpassingen inlezen? -- -- -- Merge Request -- Samenvoegingsverzoek -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Het databasebestand is veranderd en er zijn niet-opgeslagen wijzigingen. --Wil je de wijzigingen samenvoegen? -- -- -- Empty recycle bin? -- Prullenbak legen? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Weet je zeker dat je alles definitief uit de prullenbak wil verwijderen? -- -- -- Do you really want to delete %n entry(s) for good? -- Wilt u echt %n item(s) voorgoed verwijderen?Weet je zeker dat je %n item(s) definitief wilt verwijderen? -- -- -- Delete entry(s)? -- Verwijderen entry(s)?Item(s) verwijderen? -- -- -- Move entry(s) to recycle bin? -- Item(s) naar prullenbak verplaatsen?Item(s) naar prullenbak verplaatsen? -- -- -- Lock Database? -- Database vergrendelen? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Je bewerkt een item. De wijzigingen verwerpen en toch vergrendelen? -- -- -- "%1" was modified. --Save changes? -- "%1" is aangepast. --Wijzigingen opslaan? -- -- -- Database was modified. --Save changes? -- Database is gewijzigd. --Wijzigingen opslaan? -- -- -- Save changes? -- Wijzigingen opslaan? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Kan het nieuwe databasebestand niet openen tijdens het automatisch opnieuw laden. --Fout: %1 -- -- -- Disable safe saves? -- Veilig opslaan uitschakelen? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC heeft de database meerdere keren niet kunnen opslaan. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand vergrendeld houdt. --Veilig opslaan uitschakelen en opnieuw proberen? -- -- -- Passwords -- Wachtwoorden -- -- -- Save database as -- Database opslaan als -- -- -- KeePass 2 Database -- KeePass 2-database -- -- -- Replace references to entry? -- Referenties naar items vervangen? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Vermelding "%1" heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?Item "%1" heeft %2 referentie(s). Wil je de verwijzingen vervangen door waarden, dit bericht overslaan, of toch verwijderen ? -- -- -- Delete group -- Groep verwijderen -- -- -- Move group to recycle bin? -- Groep naar prullenbak verplaatsen? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Weet je zeker dat je de groep '%1' naar de prullenbak wilt verplaatsen? -- -- -- Successfully merged the database files. -- De databasebestanden zijn samengevoegd. -- -- -- Database was not modified by merge operation. -- Database werd niet gewijzigd door het samenvoegen. -- -- -- Shared group... -- Gedeelde groep... -- -- -- Writing the database failed: %1 -- Het schrijven van de database is mislukt: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- De database is in alleen-lezenmodus geopend. Automatisch opslaan is uitgeschakeld. -- -- -- Save database backup -- Database-backup opslaan -- -- -- Could not find database file: %1 -- Databasebestand is niet aangetroffen: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Item -- -- -- Advanced -- Geavanceerd -- -- -- Icon -- Pictogram -- -- -- Auto-Type -- Auto-type -- -- -- Properties -- Eigenschappen -- -- -- History -- Geschiedenis -- -- -- SSH Agent -- SSH-agent -- -- -- n/a -- n.v.t. -- -- -- (encrypted) -- (versleuteld) -- -- -- Select private key -- Kies persoonlijke sleutel -- -- -- Entry history -- Item geschiedenis -- -- -- Add entry -- Item toevoegen -- -- -- Edit entry -- Item bewerken -- -- -- New attribute -- Nieuw kenmerk -- -- -- Are you sure you want to remove this attribute? -- Weet je zeker dat je dit kenmerk wil verwijderen? -- -- -- Tomorrow -- Morgen -- -- -- %n week(s) -- %n week%n weken -- -- -- %n month(s) -- %n maand%n maanden -- -- -- Entry updated successfully. -- Het item is bijgewerkt. -- -- -- New attribute %1 -- Nieuw kenmerk %1 -- -- -- %n year(s) -- %n jaar%n jaren -- -- -- Confirm Removal -- Verwijdering bevestigen -- -- -- Browser Integration -- Browserintegratie -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Weet je zeker dat je dit URL wil verwijderen? -- -- -- Reveal -- Onthullen -- -- -- Hide -- Verbergen -- -- -- Unsaved Changes -- Niet-opgeslagen wijzigingen -- -- -- Would you like to save changes to this entry? -- Wil je de wijzigingen in dit item opslaan? -- -- -- [PROTECTED] Press Reveal to view or edit -- [BESCHERMD] Druk op Onthullen om te bekijken of te bewerken -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Aanvullende kenmerken -- -- -- Add -- Toevoegen -- -- -- Remove -- Verwijderen -- -- -- Edit Name -- Naam bewerken -- -- -- Protect -- Beveiligen -- -- -- Reveal -- Onthullen -- -- -- Attachments -- Bijlagen -- -- -- Foreground Color: -- Voorgrondkleur: -- -- -- Background Color: -- Achtergrondkleur: -- -- -- Attribute selection -- Kenmerkselectie -- -- -- Attribute value -- Kenmerkwaarde -- -- -- Add a new attribute -- Een nieuw kenmerk toevoegen -- -- -- Remove selected attribute -- Gekozen kenmerk verwijderen -- -- -- Edit attribute name -- Kenmerknaam bewerken -- -- -- Toggle attribute protection -- Kenmerkbescherming aan/uit -- -- -- Show a protected attribute -- Een beschermd kenmerk weergeven -- -- -- Foreground color selection -- Voorgrondkleurselectie -- -- -- Background color selection -- Achtergrondkleurselectie -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Indien aangevinkt, zal het item niet verschijnen in rapportages zoals Health Check en HIBP, zelfs als het niet voldoet aan de kwaliteitseisen (bijv. wachtwoord-entropie of -hergebruik). Je kunt het vinkje plaatsen als je geen controle hebt over het wachtwoord (bijvoorbeeld als het een viercijferige pincode moet zijn) om te voorkomen dat de rapportages onoverzichtelijk worden.</p></body></html> -- -- -- Exclude from database reports -- Uitsluiten van databaserapportage -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Auto-type inschakelen voor dit item -- -- -- Window Associations -- Scherm-koppelingen -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Vensternaam: -- -- -- Use a specific sequence for this association: -- Gebruik een specifieke tekenreeks voor deze associatie. -- -- -- Custom Auto-Type sequence -- Aangepaste Auto-type tekenreeks -- -- -- Open Auto-Type help webpage -- Open Auto-type help-webpagina -- -- -- Existing window associations -- Bestaande venster koppelingen -- -- -- Add new window association -- Voeg venster koppeling toe -- -- -- Remove selected window association -- Verwijder scherm koppeling -- -- -- You can use an asterisk (*) to match everything -- Je kunt een ster (*) gebruiken om alles te vinden -- -- -- Set the window association title -- Stel de venster koppeling titel in -- -- -- You can use an asterisk to match everything -- Je kunt een sterretje gebruiken om alles te vinden -- -- -- Custom Auto-Type sequence for this window -- Aangepaste Auto-type tekenreeks voor dit venster -- -- -- Inherit default Auto-Type sequence from the group -- Standaard auto-typevolgorde van de groep overnemen -- -- -- Use custom Auto-Type sequence: -- Gebruik aangepaste Auto-typevolgorde: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Deze instellingen beïnvloeden het gedrag van de browserextensie voor dit item. -- -- -- General -- Algemeen -- -- -- Skip Auto-Submit for this entry -- Automatisch indienen uitschakelen voor dit item -- -- -- Hide this entry from the browser extension -- Verberg dit item in de browserextensie -- -- -- Additional URL's -- Aanvullende URLs -- -- -- Add -- Toevoegen -- -- -- Remove -- Verwijderen -- -- -- Edit -- Bewerken -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Stuur deze instelling alleen naar de browser voor HTTP Auth-dialogen. Indien ingeschakeld, tonen normale aanmeldingsformulieren dit item niet voor selectie. -- -- -- Use this entry only with HTTP Basic Auth -- Gebruik dit item alleen met HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Tonen -- -- -- Restore -- Herstellen -- -- -- Delete -- Verwijderen -- -- -- Delete all -- Alles verwijderen -- -- -- Entry history selection -- Item geschiedenis selectie -- -- -- Show entry at selected history state -- Toon het item zoals in geselecteerde vorige versie -- -- -- Restore entry to selected history state -- Herstel het item naar de geselecteerde vorige versie -- -- -- Delete selected history state -- Verwijder geselecteerde vorige versie -- -- -- Delete all history -- Verwijder alle vorige versies -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Wachtwoord: -- -- -- Title: -- Naam: -- -- -- Presets -- Voorkeuze -- -- -- Toggle the checkbox to reveal the notes section. -- Inschakelen om de notities weer te geven. -- -- -- Username: -- Gebruikersnaam: -- -- -- Url field -- URL veld -- -- -- Download favicon for URL -- Favicon downloaden voor URL -- -- -- Password field -- Wachtwoord invulveld -- -- -- Toggle notes visible -- Laat notities wel/niet zien. -- -- -- Expiration field -- Vervaldatum veld -- -- -- Expiration Presets -- Vervaldatum voorinstellingen -- -- -- Expiration presets -- Vervaldatum voorinstellingen -- -- -- Notes field -- Notities veld -- -- -- Title field -- Titel veld -- -- -- Username field -- Gebruikersnaam veld -- -- -- Toggle expiration -- Vervaldatum wel/niet tonen -- -- -- Notes: -- Opmerkingen: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Verloopt: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulier -- -- -- Remove key from agent after -- Sleutel bij agent wegnemen na -- -- -- seconds -- seconden -- -- -- Fingerprint -- Vingerafdruk -- -- -- Remove key from agent when database is closed/locked -- Sleutel bij agent wegnemen als de database wordt gesloten/vergrendeld -- -- -- Public key -- Openbare sleutel -- -- -- Add key to agent when database is opened/unlocked -- Sleutel aan agent toevoegen wanneer de database wordt geopend/ontgrendeld -- -- -- Comment -- Opmerking -- -- -- Decrypt -- Decoderen -- -- -- n/a -- n.v.t. -- -- -- Copy to clipboard -- Naar klembord kopiëren -- -- -- Private key -- Persoonlijke sleutel -- -- -- External file -- Extern bestand -- -- -- Browse... -- Button for opening file dialog -- Bladeren… -- -- -- Attachment -- Bijlage -- -- -- Add to agent -- Aan agent toevoegen -- -- -- Remove from agent -- Van agent verwijderen -- -- -- Require user confirmation when this key is used -- Bevestiging van de gebruiker vragen als deze sleutel wordt gebruikt -- -- -- Remove key from agent after specified seconds -- Verwijder de sleutel van de agent na het opgegeven aantal seconden -- -- -- Browser for key file -- Blader naar sleutelbestand -- -- -- External key file -- Extern sleutelbestand -- -- -- Select attachment file -- Selecteer bijlage bestand -- -- -- -- EditGroupWidget -- -- Group -- Groep -- -- -- Icon -- Pictogram -- -- -- Properties -- Eigenschappen -- -- -- Add group -- Groep toevoegen -- -- -- Edit group -- Groep bewerken -- -- -- Enable -- Activeren -- -- -- Disable -- Uitschakelen -- -- -- Inherit from parent group (%1) -- Overnemen van bovenliggende groep (%1) -- -- -- Entry has unsaved changes -- Het item heeft niet-opgeslagen wijzigingen -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Type: -- -- -- Path: -- Pad: -- -- -- Password: -- Wachtwoord: -- -- -- Inactive -- Inactief -- -- -- KeeShare unsigned container -- KeeShare niet-ondertekende container -- -- -- KeeShare signed container -- KeeShare ondertekende container -- -- -- Select import source -- Selecteer bron voor import -- -- -- Select export target -- Selecteer doel voor export -- -- -- Select import/export file -- Selecteer import-/exportbestand -- -- -- Clear -- Wissen -- -- -- Import -- Importeren -- -- -- Export -- Exporteren -- -- -- Synchronize -- Synchroniseer -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Deze KeePassXC-versie biedt geen ondersteuning voor het delen van dit container type. --Ondersteund zijn: %1. -- -- -- %1 is already being exported by this database. -- %1 wordt al geëxporteerd door deze database. -- -- -- %1 is already being imported by this database. -- %1 wordt al geïmporteerd door deze database. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 wordt geïmporteerd en geëxporteerd door verschillende groepen in deze database. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare is momenteel uitgeschakeld. Je kunt importeren/exporteren inschakelen in de instellingen. -- -- -- Database export is currently disabled by application settings. -- Database export is momenteel uitgeschakeld in de programma instellingen. -- -- -- Database import is currently disabled by application settings. -- Database import is momenteel uitgeschakeld in de programma instellingen. -- -- -- Sharing mode field -- Delen modus veld -- -- -- Path to share file field -- Pad naar te delen bestand veld -- -- -- Password field -- Wachtwoord invulveld -- -- -- Clear fields -- Wis velden -- -- -- Browse for share file -- Blader naar deelbestand -- -- -- Browse... -- Bladeren… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Naam veld -- -- -- Notes field -- Notities veld -- -- -- Toggle expiration -- Vervaldatum wel/niet tonen -- -- -- Auto-Type toggle for this and sub groups -- Auto-type aan/uit voor deze en onderliggende groepen -- -- -- Expiration field -- Vervaldatum veld -- -- -- Search toggle for this and sub groups -- Zoeken aan/uit voor deze en onderliggende groepen -- -- -- Default auto-type sequence field -- Standaard Auto-type tekenreeks veld -- -- -- Expires: -- Verloopt: -- -- -- Use default Auto-Type sequence of parent group -- Gebruik standaard Auto-type volgorde van bovenliggende groep -- -- -- Auto-Type: -- Auto-type: -- -- -- Search: -- Zoeken: -- -- -- Notes: -- Opmerkingen: -- -- -- Name: -- Naam: -- -- -- Set default Auto-Type sequence -- Standaard Auto-type tekenreeks instellen -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Aangepast pictogram toevoegen -- -- -- Delete custom icon -- Aangepast pictogram verwijderen -- -- -- Download favicon -- Favicon downloaden -- -- -- Unable to fetch favicon. -- Kan favicon niet ophalen. -- -- -- Images -- Afbeeldingen -- -- -- All files -- Alle bestanden -- -- -- Confirm Delete -- Verwijdering bevestigen -- -- -- Select Image(s) -- Selecteer afbeelding(en) -- -- -- Successfully loaded %1 of %n icon(s) -- %1 van %n pictogram(men) geladen%1 van %n pictogram(men) geladen -- -- -- No icons were loaded -- Geen pictogrammen geladen -- -- -- %n icon(s) already exist in the database -- %n pictogram(men) al aanwezig in de database%n pictogram(men) al aanwezig in de database -- -- -- The following icon(s) failed: -- De volgende pictogram(men) mislukten:De volgende pictogram(men) mislukten: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen?Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Je kunt de DuckDuckGo website pictogram dienst inschakelen onder Extra>Instellingen>Beveiliging -- -- -- Download favicon for URL -- Favicon downloaden voor URL -- -- -- Apply selected icon to subgroups and entries -- Gebruik het geselecteerde pictogram voor onderliggende groepen en items -- -- -- Also apply to child groups -- Ook toepassen op onderliggende groepen -- -- -- Also apply to child entries -- Ook toepassen op onderliggende items -- -- -- Also apply to all children -- Ook toepassen op alle onderliggenden -- -- -- Existing icon selected. -- Bestaand pictogram geselecteerd. -- -- -- Use default icon -- Standaardpictogram gebruiken -- -- -- Use custom icon -- Aangepast pictogram gebruiken -- -- -- Apply icon to... -- Pictogram toepassen op... -- -- -- Apply to this group only -- Alleen op deze groep toepassen -- -- -- -- EditWidgetProperties -- -- Created: -- Aangemaakt: -- -- -- Modified: -- Gewijzigd: -- -- -- Accessed: -- Toegang: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Plugin-gegevens: -- -- -- Remove -- Verwijderen -- -- -- Delete plugin data? -- Plugin-gegevens verwijderen? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Weet je zeker dat je de geselecteerde plugin-gegevens wilt verwijderen? --Hierdoor werken de plugins mogelijk niet meer goed. -- -- -- Key -- Sleutel -- -- -- Value -- Waarde -- -- -- Datetime created -- Datum tijd gemaakt -- -- -- Datetime modified -- Datum tijd gewijzigd -- -- -- Datetime accessed -- Datum tijd laatste toegang -- -- -- Unique ID -- Uniek ID -- -- -- Plugin data -- Plugin-gegevens -- -- -- Remove selected plugin data -- Geselecteerde plugin-gegevens verwijderen -- -- -- -- Entry -- -- %1 - Clone -- %1 - Duplicaat -- -- -- -- EntryAttachmentsModel -- -- Name -- Naam -- -- -- Size -- Grootte -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulier -- -- -- Add -- Toevoegen -- -- -- Remove -- Verwijderen -- -- -- Open -- Openen -- -- -- Save -- Opslaan -- -- -- Select files -- Kies bestanden -- -- -- Are you sure you want to remove %n attachment(s)? -- Weet je zeker dat je %n bijlage wil verwijderen?Weet je zeker dat je %n bijlagen wil verwijderen? -- -- -- Save attachments -- Bijlagen opslaan -- -- -- Unable to create directory: --%1 -- Kan de map niet maken: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Weet je zeker dat je het bestaande bestand "%1" met de bijlage wil overschrijven? -- -- -- Confirm overwrite -- Overschrijving bevestigen -- -- -- Unable to save attachments: --%1 -- Kan de bijlagen niet opslaan: --%1 -- -- -- Unable to open attachment: --%1 -- Kan de bijlage niet openen: --%1 -- -- -- Unable to open attachments: --%1 -- Kan de bijlagen niet openen: --%1 -- -- -- Confirm remove -- Verwijdering bevestigen -- -- -- Unable to open file(s): --%1 -- Kan bestand niet openen: %1Kan bestand(en) niet openen: %1 -- -- -- Attachments -- Bijlagen -- -- -- Add new attachment -- Nieuwe bijlage toevoegen -- -- -- Remove selected attachment -- Geselecteerde bijlage verwijderen -- -- -- Open selected attachment -- Geselecteerde bijlage openen -- -- -- Save selected attachment to disk -- Geselecteerde bijlage opslaan -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 is een groot bestand (%2 MB). --De database kan erg groot worden en de prestaties verminderen. -- --Weet je zeker dat je dit bestand wilt toevoegen? -- -- -- Confirm Attachment -- Bijlage bevestigen -- -- -- -- EntryAttributesModel -- -- Name -- Naam -- -- -- -- EntryHistoryModel -- -- Last modified -- Laatst gewijzigd -- -- -- Title -- Naam -- -- -- Username -- Gebruikersnaam -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Groep -- -- -- Title -- Naam -- -- -- Username -- Gebruikersnaam -- -- -- URL -- URL -- -- -- Never -- Nooit -- -- -- Password -- Wachtwoord -- -- -- Notes -- Notities -- -- -- Expires -- Verloopt -- -- -- Created -- Aangemaakt -- -- -- Modified -- Gewijzigd -- -- -- Accessed -- Toegang -- -- -- Attachments -- Bijlagen -- -- -- Size -- Grootte -- -- -- Group name -- Groepnaam -- -- -- Entry title -- Titel van het item -- -- -- Entry notes -- Notities bij het item -- -- -- Entry expires at -- Item verloopt op -- -- -- Creation date -- Aanmaakdatum -- -- -- Last modification date -- Datum laatste wijziging -- -- -- Last access date -- Datum laatste toegang -- -- -- Attached files -- Bijgevoegde bestanden -- -- -- Entry size -- Grootte van het item -- -- -- Has attachments -- Heeft bijlagen -- -- -- Has TOTP one-time password -- Bevat TOTP eenmalig wachtwoord -- -- -- -- EntryPreviewWidget -- -- Close -- Sluiten -- -- -- General -- Algemeen -- -- -- Username -- Gebruikersnaam -- -- -- Password -- Wachtwoord -- -- -- Expiration -- Vervaldatum -- -- -- URL -- URL -- -- -- Attributes -- Kenmerken -- -- -- Attachments -- Bijlagen -- -- -- Notes -- Notities -- -- -- Autotype -- Auto-type -- -- -- Window -- Venster -- -- -- Sequence -- Tekenreeks -- -- -- Searching -- Zoeken -- -- -- Search -- Zoeken -- -- -- Clear -- Wissen -- -- -- Never -- Nooit -- -- -- [PROTECTED] -- [BEVEILIGD] -- -- -- Enabled -- Geactiveerd -- -- -- Disabled -- Uitgeschakeld -- -- -- Share -- Delen -- -- -- Display current TOTP value -- Toon huidige TOTP-waarde -- -- -- Advanced -- Geavanceerd -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Ongeldige URL -- -- -- -- EntryView -- -- Fit to window -- Aanpassen aan venstergrootte -- -- -- Fit to contents -- Aanpassen aan inhoud -- -- -- Reset to defaults -- Standaardwaarden opnieuw instellen -- -- -- Has attachments -- Entry attachment icon toggle -- Heeft bijlagen -- -- -- Has TOTP -- Entry TOTP icon toggle -- Heeft TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Het item "%1" van de database "%2" werd gebruikt door %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Kan DBus-service niet registreren op %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Item is gebruikt door %1%n Items zijn gebruikt door %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Bestandsnaam -- -- -- Group -- Groep -- -- -- Manage -- Beheren -- -- -- Unlock to show -- Ontgrendel voor deze informatie -- -- -- None -- Geen -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Programma -- -- -- Manage -- Beheren -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Onbekend -- -- -- Unknown -- Unknown executable path -- Onbekend -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Uitvoerbaar bestand: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Een andere secret service is actief (%1).<br/>Stop/verwijder deze en probeer de Secret Service-integratie opnieuw te activeren. -- -- -- -- Group -- -- [empty] -- group has no children -- [leeg] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Online validatie van wachtwoord is mislukt -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Favicons downloaden -- -- -- Cancel -- Annuleren -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Problemen met het downloaden van pictogrammen? --Je kunt de DuckDuckGo website pictogram dienst inschakelen in de sectie 'Beveiliging' in de instellingen. -- -- -- Close -- Sluiten -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Even wachten, de items worden verwerkt... -- -- -- Downloading... -- Downloaden... -- -- -- Ok -- Oké -- -- -- Already Exists -- Bestaat al -- -- -- Download Failed -- Download is mislukt -- -- -- Downloading favicons (%1/%2)... -- Favicons downloaden (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Sluiten -- -- -- Close message -- Bericht sluiten -- -- -- -- Kdbx3Reader -- -- missing database headers -- ontbrekende database-koppen -- -- -- Header doesn't match hash -- Header komt niet overeen met hash -- -- -- Invalid header id size -- Ongeldige grootte van header-ID -- -- -- Invalid header field length -- Ongeldige lengte van header-veld -- -- -- Invalid header data length -- Ongeldige lengte van header-data -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ongeldige inloggegevens, probeer het opnieuw. --Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. -- -- -- Unable to calculate database key -- Kan databasesleutel niet berekenen -- -- -- Unable to issue challenge-response: %1 -- Kan challenge-antwoord niet uitgeven: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Kan challenge-antwoord niet uitgeven: %1 -- -- -- Unable to calculate database key -- Kan databasesleutel niet berekenen -- -- -- -- Kdbx4Reader -- -- missing database headers -- ontbrekende database-koppen -- -- -- Invalid header checksum size -- Ongeldige grootte van header-controlecijfer -- -- -- Header SHA256 mismatch -- SHA256-kop komt niet overeen -- -- -- Unknown cipher -- Onbekend versleutelingsalgoritme -- -- -- Invalid header id size -- Ongeldige grootte van header-ID -- -- -- Invalid header field length -- Ongeldige lengte van header-veld -- -- -- Invalid header data length -- Ongeldige lengte van header-data -- -- -- Failed to open buffer for KDF parameters in header -- Fout bij het openen van de buffer voor KDF-parameters in header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Niet-ondersteunde sleutel-afleidingsfunctie (KDF) of ongeldige parameters -- -- -- Legacy header fields found in KDBX4 file. -- Verouderde header-velden gevonden in KDBX4 bestand. -- -- -- Invalid inner header id size -- Ongeldige grootte van inner header-id -- -- -- Invalid inner header field length -- Ongeldige lengte van inner header-veld -- -- -- Invalid inner header binary size -- Ongeldige binaire grootte van inner header -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Niet-ondersteunde versie van KeePass variant map. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map item naam -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Ongeldige data in een variant map item naam -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map waarde -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Ongeldige data in een variant map waarde -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map Boolean-waarde -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map Int32-waarde -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map UInt32-waarde -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map Int64-waarde -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Ongeldige lengte van een variant map UInt64-waarde -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Ongeldige item-type in variant map -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Ongeldige grootte van variant map veld-type -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ongeldige inloggegevens, probeer het opnieuw. --Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. -- -- -- (HMAC mismatch) -- (HMAC komt niet overeen) -- -- -- Unable to calculate database key: %1 -- Kan databasesleutel niet berekenen: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Ongeldig symmetrisch versleutelingsalgoritme. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ongeldige grootte van symmetrisch versleutelingsalgoritme IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Fout bij serialisering van KDF-parameters variant map -- -- -- Unable to calculate database key: %1 -- Kan databasesleutel niet berekenen: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Niet ondersteund versleutelingsalgoritme -- -- -- Invalid compression flags length -- Ongeldige lengte van compressie-opties -- -- -- Unsupported compression algorithm -- Niet ondersteund compressie-algoritme -- -- -- Invalid master seed size -- Ongeldige grootte van master-seed -- -- -- Invalid transform seed size -- Ongeldige grootte van transform-seed -- -- -- Invalid transform rounds size -- Ongeldig aantal transformatie-iteraties -- -- -- Invalid start bytes size -- Ongeldige grootte van start-bytes -- -- -- Invalid random stream id size -- Ongeldige grootte van random stream-id -- -- -- Invalid inner random stream cipher -- Ongeldig inner-random-stream versleutelingsalgoritme -- -- -- Not a KeePass database. -- Geen KeePass-database. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Het gekozen bestand is een oude KeePass 1 database (.kdb) -- --Je kunt het importeren door te klikken op Database>'KeePass 1-database importeren'. --Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer openen met de oude KeePassX 0.4 versie. -- -- -- Unsupported KeePass 2 database version. -- Niet-ondersteunde KeePass 2-databaseversie. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Ongeldige versleuteling uuid lengte: %1 (lengte=%2) -- -- -- Unable to parse UUID: %1 -- Geen geldige UUID: %1 -- -- -- Failed to read database file. -- Lezen van databasebestand is mislukt. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML leesfout: %1 -- -- -- No root group -- Geen hoofdgroep -- -- -- Missing icon uuid or data -- Ontbrekende pictogram-uuid of -gegevens -- -- -- Missing custom data key or value -- Ontbrekende aangepaste datasleutel of -waarde -- -- -- Multiple group elements -- Meerdere groepselementen -- -- -- Null group uuid -- Null groep uuid -- -- -- Invalid group icon number -- Ongeldig groepspictogramnummer -- -- -- Invalid EnableAutoType value -- Ongeldige EnableAutoType-waarde -- -- -- Invalid EnableSearching value -- Ongeldige EnableSearching-waarde -- -- -- No group uuid found -- Geen groep-uuid gevonden -- -- -- Null DeleteObject uuid -- Null DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Ontbrekende DeletedObject uuid of tijd -- -- -- Null entry uuid -- Null item uuid -- -- -- Invalid entry icon number -- Ongeldig pictogramnummer -- -- -- History element in history entry -- Geschiedenis element in geschiedenis item -- -- -- No entry uuid found -- Geen item-uuid gevonden -- -- -- History element with different uuid -- Geschiedenis element met ander uuid -- -- -- Duplicate custom attribute found -- Duplicaat aangepast kenmerk gevonden -- -- -- Entry string key or value missing -- Stringsleutel of -waarde ontbreekt in item -- -- -- Entry binary key or value missing -- Binaire sleutel of waarde ontbreekt in item -- -- -- Auto-type association window or sequence missing -- Auto-type vensterkoppeling of tekenreeks ontbreekt -- -- -- Invalid bool value -- Ongeldige boolean-waarde -- -- -- Invalid date time value -- Ongeldige datum-tijdwaarde -- -- -- Invalid color value -- Ongeldige kleurwaarde -- -- -- Invalid color rgb part -- Ongeldige kleur in rgb-deel -- -- -- Invalid number value -- Ongeldig getal -- -- -- Invalid uuid value -- Ongeldige uuid-waarde -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Kan binaire gegevens niet decomprimeren -- -- -- XML error: --%1 --Line %2, column %3 -- XML fout: --%1 --Lijn %2, kolom %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Ongeldige bestandsstructuur van KeeAgent-instellingen. -- -- -- Private key is an attachment but no attachments provided. -- Privésleutel is een bijlage maar er is geen bijlage verstrekt. -- -- -- Private key is empty -- Privésleutel is leeg -- -- -- File too large to be a private key -- Bestand te groot voor een persoonlijke sleutel -- -- -- Failed to open private key -- Persoonlijk sleutelbestand niet kunnen openen -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Kan database niet openen. -- -- -- Import KeePass1 Database -- Importeer KeePass1 database -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Kan sleutelbestand niet lezen. -- -- -- Not a KeePass database. -- Geen KeePass-database -- -- -- Unsupported encryption algorithm. -- Niet-ondersteund versleutelings-algoritme -- -- -- Unsupported KeePass database version. -- Niet-ondersteunde versie van KeePass-database. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Kan versleuteling IV niet lezen -- -- -- Invalid number of groups -- Ongeldig aantal groepen -- -- -- Invalid number of entries -- Ongeldig aantal items -- -- -- Invalid content hash size -- Ongeldige grootte van inhoud-hash -- -- -- Invalid transform seed size -- Ongeldige grootte van transform-seed -- -- -- Invalid number of transform rounds -- Ongeldig aantal transformatie-iteraties -- -- -- Unable to construct group tree -- Kan groepsstructuur niet opbouwen -- -- -- Root -- Alles -- -- -- Key transformation failed -- Sleuteltransformatie is mislukt -- -- -- Invalid group field type number -- Ongeldig veld typenummer van groep -- -- -- Invalid group field size -- Ongeldige veldgrootte van groep -- -- -- Read group field data doesn't match size -- Groep veld data komt niet overeen met grootte -- -- -- Incorrect group id field size -- Onjuiste veldgrootte van id -- -- -- Incorrect group creation time field size -- Onjuiste veldgrootte van aanmaaktijd -- -- -- Incorrect group modification time field size -- Onjuiste veldgrootte van wijzigingstijd -- -- -- Incorrect group access time field size -- Onjuiste veldgrootte van toegangstijd -- -- -- Incorrect group expiry time field size -- Onjuiste veldgrootte van verlooptijd -- -- -- Incorrect group icon field size -- Onjuiste veldgrootte groepspictogram -- -- -- Incorrect group level field size -- Onjuiste veldgrootte van groepsniveau -- -- -- Invalid group field type -- Ongeldig veldtype van groep -- -- -- Missing group id or level -- Ontbrekende groeps-id of -niveau -- -- -- Missing entry field type number -- Ontbrekend veldnummer van item -- -- -- Invalid entry field size -- Ongeldige veldgrootte van item -- -- -- Read entry field data doesn't match size -- Itemgegevens komen niet overeen met veldgrootte -- -- -- Invalid entry uuid field size -- Ongeldige veldgrootte van uuid -- -- -- Invalid entry group id field size -- Ongeldige veldgrootte van groepid -- -- -- Invalid entry icon field size -- Ongeldige veldgrootte van pictogram -- -- -- Invalid entry creation time field size -- Ongeldige veldgrootte van aanmaaktijd -- -- -- Invalid entry modification time field size -- Ongeldige veldgrootte van wijzigingstijd -- -- -- Invalid entry expiry time field size -- Ongeldige veldgrootte van verlooptijd -- -- -- Invalid entry field type -- Ongeldig item veldtype -- -- -- unable to seek to content position -- kan niet naar positie in inhoud springen -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ongeldige inloggegevens, probeer het opnieuw. --Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. -- -- -- Unable to calculate database key -- Kan databasesleutel niet berekenen -- -- -- -- KeeShare -- -- Invalid sharing reference -- Ongeldige verwijzing -- -- -- Inactive share %1 -- Niet actieve gedaalde database %1 -- -- -- Imported from %1 -- Geïmporteerd vanuit %1 -- -- -- Exported to %1 -- Geëxporteerd naar %1 -- -- -- Synchronized with %1 -- Gesynchroniseerd met %1 -- -- -- Import is disabled in settings -- Importeren is uitgeschakeld in instellingen -- -- -- Export is disabled in settings -- Exporteren is uitgeschakeld in instellingen -- -- -- Inactive share -- Niet actieve gedeelde database -- -- -- Imported from -- Geïmporteerd uit -- -- -- Exported to -- Geëxporteerd naar -- -- -- Synchronized with -- Gesynchroniseerd met -- -- -- -- KeyComponentWidget -- -- Key Component -- Sleutelcomponent -- -- -- Key Component Description -- Sleutelcomponent beschrijving -- -- -- Cancel -- Annuleren -- -- -- Key Component set, click to change or remove -- Sleutelcomponent verzameling, klik om te wijzigen of verwijderen -- -- -- Add %1 -- Add a key component -- %1 toevoegen -- -- -- Change %1 -- Change a key component -- %1 aanpassen -- -- -- Remove %1 -- Remove a key component -- %1 verwijderen -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 ingesteld, klik om te wijzigen of verwijderen -- -- -- -- KeyFileEditWidget -- -- Generate -- Genereren -- -- -- Key File -- Sleutelbestand -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Je kunt een sleutelbestand met willekeurige bytes toevoegen voor extra veiligheid.</p> <p>Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buitengesloten!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Er ging iets fout bij het laden van het sleutelbestand '%1' --Bericht: %2 -- -- -- Key files -- Sleutelbestanden -- -- -- All files -- Alle bestanden -- -- -- Create Key File... -- Sleutelbestand aanmaken… -- -- -- Error creating key file -- Er ging iets fout bij het maken van het sleutelbestand -- -- -- Unable to create key file: %1 -- Kan sleutelbestand niet maken: %1 -- -- -- Select a key file -- Kies een sleutelbestand -- -- -- Key file selection -- Sleutelbestand -- -- -- Browse for key file -- Blader naar sleutelbestand -- -- -- Browse... -- Bladeren… -- -- -- Generate a new key file -- Een nieuw sleutelbestand genereren -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Merk op: gebruik geen bestand dat kan veranderen; elke verandering maakt het ontgrendelen van je database onmogelijk! -- -- -- Invalid Key File -- Ongeldig sleutelbestand -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Je kunt de huidige database niet gebruiken als zijn eigen sleutelbestand. Kies een ander bestand of genereer een nieuw sleutelbestand. -- -- -- Suspicious Key File -- Verdacht sleutelbestand -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Het gekozen sleutelbestand ziet eruit als een wachtwoord databasebestand. Een sleutelbestand moet een statisch bestand zijn dat nooit wijzigt ander verlies je voor altijd toegang tot de database. --Weet je zeker dat je wilt doorgaan met dit bestand? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Database -- -- -- &Help -- &Help -- -- -- &Groups -- &Groepen -- -- -- &Tools -- E&xtra -- -- -- &Quit -- &Afsluiten -- -- -- &About -- &Over -- -- -- Database settings -- Database-instellingen -- -- -- Copy username to clipboard -- Gebruikersnaam naar klembord kopiëren -- -- -- Copy password to clipboard -- Wachtwoord naar klembord kopiëren -- -- -- &Settings -- &Instellingen -- -- -- &Title -- &Naam -- -- -- Copy title to clipboard -- Naam naar klembord kopiëren -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- URL naar klembord kopiëren -- -- -- &Notes -- &Notities -- -- -- Copy notes to clipboard -- Notities naar klembord kopiëren -- -- -- Copy &TOTP -- &TOTP kopiëren -- -- -- E&mpty recycle bin -- Prullenbak leegmaken -- -- -- Clear history -- Geschiedenislijst wissen -- -- -- Access error for config file %1 -- Geen toegang tot configuratiebestand %1 -- -- -- Settings -- Instellingen -- -- -- Toggle window -- Venster openen -- -- -- Quit KeePassXC -- KeePassXC afsluiten -- -- -- Please touch the button on your YubiKey! -- Druk op de knop van je YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- WAARSCHUWING: Je gebruikt een niet-stabiele versie van KeePassXC! --Deze versie is niet bedoeld voor dagelijks gebruik. --Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases. -- -- -- &Donate -- &Doneren -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- WAARSCHUWING: Jouw Qt-versie kan KeePassXC laten crashen bij gebruik van een schermtoetsenbord! --Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downloadpagina. -- -- -- &Import -- &Importeren -- -- -- Create a new database -- Een nieuwe database maken -- -- -- Merge from another KDBX database -- Samenvoegen uit een andere KDBX database -- -- -- Add a new entry -- Nieuw item toevoegen -- -- -- View or edit entry -- Item bekijken/bewerken -- -- -- Add a new group -- Een nieuwe groep toevoegen -- -- -- Perform &Auto-Type -- &Auto-type uitvoeren -- -- -- Open &URL -- &URL openen -- -- -- Import a KeePass 1 database -- Een KeePass 1-database importeren -- -- -- Import a CSV file -- Een CSV-bestand importeren -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- Opmerking: Je gebruikt een pre-release versie van KeePassXC! --Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor regulier gebruik. -- -- -- Check for updates on startup? -- Controleren op updates bij het opstarten? -- -- -- Would you like KeePassXC to check for updates on startup? -- Wil je dat KeePassXC bij het opstarten controleert op updates? -- -- -- You can always check for updates manually from the application menu. -- Je kunt altijd handmatig controleren of er updates zijn vanuit het programmamenu. -- -- -- &Export -- &Exporteren -- -- -- Sort &A-Z -- Sorteer &A-Z -- -- -- Sort &Z-A -- Sorteer &Z-A -- -- -- &Password Generator -- &Wachtwoordgenerator -- -- -- Import a 1Password Vault -- Importeer een 1Password vault -- -- -- &Getting Started -- &Aan de slag -- -- -- &User Guide -- &Gebruikershandleiding -- -- -- &Keyboard Shortcuts -- &Sneltoetsen -- -- -- &Recent Databases -- &Recente databases -- -- -- &Entries -- &Items -- -- -- Copy Att&ribute -- Ken&merk kopiëren -- -- -- TOTP -- TOTP -- -- -- View -- Beeld -- -- -- Theme -- Thema -- -- -- &Check for Updates -- &Controleer op updates -- -- -- &Open Database… -- Database &openen... -- -- -- &Save Database -- Database op&slaan... -- -- -- &Close Database -- Database s&luiten -- -- -- &New Database… -- &Nieuwe database... -- -- -- &Merge From Database… -- Database sa&menvoegen... -- -- -- &New Entry… -- &Nieuw item… -- -- -- &Edit Entry… -- Item &bewerken… -- -- -- &Delete Entry… -- Item &verwijderen… -- -- -- &New Group… -- &Nieuwe Groep… -- -- -- &Edit Group… -- Groep &bewerken… -- -- -- &Delete Group… -- &Verwijder Groep… -- -- -- Download All &Favicons… -- Alle &favicons downloaden... -- -- -- Sa&ve Database As… -- Database opslaan &als... -- -- -- Database &Security… -- Database-be&veiliging... -- -- -- Database &Reports... -- Database-&rapportage... -- -- -- Statistics, health check, etc. -- Statistieken, gezondheidscontrole, etc. -- -- -- &Database Settings… -- &Database-instellingen -- -- -- &Clone Entry… -- Item &dupliceren... -- -- -- Move u&p -- Om&hoog verplaatsen -- -- -- Move entry one step up -- Hiermee verplaats je een item een positie omhoog. -- -- -- Move do&wn -- Om&laag verplaatsen -- -- -- Move entry one step down -- Hiermee verplaats je een item een positie omlaag. -- -- -- Copy &Username -- &Gebruikersnaam kopiëren -- -- -- Copy &Password -- &Wachtwoord kopiëren -- -- -- Download &Favicon -- &Favicon downloaden -- -- -- &Lock Databases -- Databases vergrende&len -- -- -- &CSV File… -- &CSV-bestand... -- -- -- &HTML File… -- &HTML-bestand... -- -- -- KeePass 1 Database… -- KeePass 1 database... -- -- -- 1Password Vault… -- 1Password vault... -- -- -- CSV File… -- CSV-bestand... -- -- -- Show TOTP -- TOTP weergeven -- -- -- Show QR Code -- TOTP QR-code tonen -- -- -- Set up TOTP… -- TOTP instellen… -- -- -- Report a &Bug -- Meld een &fout -- -- -- Open Getting Started Guide -- Open de handleiding Aan de slag -- -- -- &Online Help -- &Online hulp -- -- -- Go to online documentation -- Online documentatie -- -- -- Open User Guide -- Open de gebruikershandleiding -- -- -- Save Database Backup... -- Database-backup opslaan... -- -- -- Add key to SSH Agent -- Sleutel toevoegen aan SSH-agent -- -- -- Remove key from SSH Agent -- Sleutel wegnemen van SSH-agent -- -- -- Compact Mode -- Compacte weergave -- -- -- Automatic -- Automatisch -- -- -- Light -- Licht -- -- -- Dark -- Donker -- -- -- Classic (Platform-native) -- Klassiek (platform-eigen) -- -- -- Show Toolbar -- Werkbalk weergeven -- -- -- Show Preview Panel -- Voorbeeldvenster weergeven -- -- -- Don't show again for this version -- Niet meer weergeven voor deze versie -- -- -- Restart Application? -- Programma opnieuw starten? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. --Wil je KeePassXC nu opnieuw opstarten? -- -- -- Perform Auto-Type Sequence -- Auto-type tekenreeks uitvoeren -- -- -- {USERNAME} -- {GEBRUIKERSNAAM} -- -- -- {USERNAME}{ENTER} -- {GEBRUIKERSNAAM}{ENTER} -- -- -- {PASSWORD} -- {WACHTWOORD} -- -- -- {PASSWORD}{ENTER} -- {WACHTWOORD}{ENTER} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Gebruikersnamen verbergen -- -- -- Hide Passwords -- Wachtwoorden verbergen -- -- -- -- ManageDatabase -- -- Database settings -- Database-instellingen -- -- -- Edit database settings -- Database instellingen bewerken -- -- -- Unlock database -- Database ontgrendelen -- -- -- Unlock database to show more information -- Ontgrendel de database voor meer informatie -- -- -- Lock database -- Database vergrendelen -- -- -- -- ManageSession -- -- Disconnect -- Verbreken -- -- -- Disconnect this application -- Deze applicatie loskoppelen -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Ontbrekende %1 [%2] aanmaken -- -- -- Relocating %1 [%2] -- %1 [%2] verplaatsen -- -- -- Overwriting %1 [%2] -- %1 [%2] overschrijven -- -- -- older entry merged from database "%1" -- ouder item samengevoegd uit database '%1' -- -- -- Adding backup for older target %1 [%2] -- Back-up toevoegen voor ouder doel %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Back-up toevoegen voor oudere bron %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Ouder doel item is opnieuw toegepast over nieuwer bron item %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Ouder bron item is opnieuw toegepast over nieuwer doel item %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchroniseren van nieuwere bron %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchroniseren van oudere bron %1 [%2] -- -- -- Deleting child %1 [%2] -- Verwijderen van kind %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Verwijderen wees %1 [%2] -- -- -- Changed deleted objects -- Verwijderde objecten gewijzigd -- -- -- Adding missing icon %1 -- Toevoegen van ontbrekend pictogram %1 -- -- -- Removed custom data %1 [%2] -- Gebruikersinstellingen verwijderd %1 [%2] -- -- -- Adding custom data %1 [%2] -- Gebruikersinstellingen toegevoegd %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Nieuwe KeePassXC database aanmaken... -- -- -- Root -- Root group -- Alles -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Assistent -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. -- -- -- Advanced Settings -- Geavanceerde instellingen -- -- -- Simple Settings -- Eenvoudige instellingen -- -- -- Encryption Settings -- Versleutelingsinstellingen -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Databasegegevens -- -- -- A set of credentials known only to you that protects your database. -- Een verzameling referenties die jij alleen kent en die je database beschermt. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Versleutelingsinstellingen -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Algemene database-informatie -- -- -- Please fill in the display name and an optional description for your new database: -- Geef de weergavenaam en een optionele beschrijving voor de nieuwe database: -- -- -- -- NixUtils -- -- Password Manager -- Wachtwoordbeheer -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Ongeldige OpData01, bevat geen header -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Kon niet alle IV bytes lezen, gewenst is 16 maar kreeg er %1 -- -- -- Unable to init cipher for opdata01: %1 -- Kan versleuteling niet initiëren voor opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Kan niet alle HMAC-handtekening bytes lezen -- -- -- Malformed OpData01 due to a failed HMAC -- Ongeldige OpData01 vanwege een mislukte HMAC -- -- -- Unable to process clearText in place -- Kan hier alleen versleutelde tekst verwerken -- -- -- Expected %1 bytes of clear-text, found %2 -- %1 bytes niet versleutelde tekst verwacht, %2 aangetroffen -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- De te lezen database heeft geen exemplaar geproduceerd --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Directory .opvault moet bestaan -- -- -- Directory .opvault must be readable -- Directory .opvault moet leesbaar zijn -- -- -- Directory .opvault/default must exist -- Directory .opvault/default moet bestaan -- -- -- Directory .opvault/default must be readable -- Directory .opvault/default moet leesbaar zijn -- -- -- Unable to decode masterKey: %1 -- Kan hoofdsleutel niet decoderen: %1 -- -- -- Unable to derive master key: %1 -- Kan hoofdsleutel niet afleiden: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Ongeldig sleutelbestand, er werd een OpenSSH-sleutel verwacht -- -- -- PEM boundary mismatch -- PEM-grens komt niet overeen -- -- -- Base64 decoding failed -- Base64-decodering mislukt -- -- -- Key file way too small. -- Sleutelbestand veel te klein. -- -- -- Key file magic header id invalid -- Ongeldig 'magic header id' in sleutelbestand -- -- -- Found zero keys -- Geen sleutels gevonden -- -- -- Failed to read public key. -- Lezen publieke sleutel mislukt. -- -- -- Corrupted key file, reading private key failed -- Beschadigd sleutelbestand, lezen persoonlijke sleutel mislukt -- -- -- No private key payload to decrypt -- Geen inhoud persoonlijke sleutel om te decoderen -- -- -- Trying to run KDF without cipher -- Probeer KDF uit te voeren zonder versleutelingsalgoritme -- -- -- Passphrase is required to decrypt this key -- Wachtwoord(-zin) nodig om deze sleutel te ontcijferen -- -- -- Key derivation failed, key file corrupted? -- Sleutelafleiding mislukt, beschadigd sleutelbestand? -- -- -- Decryption failed, wrong passphrase? -- Decodering mislukt, verkeerd wachtwoord(-zin)? -- -- -- Unexpected EOF while reading public key -- Onverwacht bestandseinde publieke sleutel -- -- -- Unexpected EOF while reading private key -- Onverwacht bestandseinde persoonlijke sleutel -- -- -- Can't write public key as it is empty -- Kan publieke sleutel niet opslaan, aangezien deze leeg is -- -- -- Unexpected EOF when writing public key -- Onverwacht bestandseinde bij schrijven publieke sleutel -- -- -- Can't write private key as it is empty -- Kan persoonlijke sleutel niet opslaan, aangezien deze leeg is -- -- -- Unexpected EOF when writing private key -- Onverwacht bestandseinde bij schrijven persoonlijke sleutel -- -- -- Unsupported key type: %1 -- Niet ondersteund sleuteltype: %1 -- -- -- Unknown cipher: %1 -- Onbekende versleuteling: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Versleuteilng IV is te kort om MD5-sleutel te verkrijgen. -- -- -- Unknown KDF: %1 -- Onbekende sleutelafleidings-functie: %1 -- -- -- Unknown key type: %1 -- Onbekend sleuteltype: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Wachtwoorden komen niet overeen -- -- -- Passwords match so far -- Wachtwoorden overeenkomst tot nu toe -- -- -- Toggle Password (%1) -- Wachtwoord schakelen (%1) -- -- -- Generate Password (%1) -- Wachtwoord genereren (%1) -- -- -- Warning: Caps Lock enabled! -- Let op: Caps Lock geactiveerd! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Wachtwoord invoeren: -- -- -- Confirm password: -- Wachtwoord bevestigen: -- -- -- Password -- Wachtwoord -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Een wachtwoord is de primaire methode voor het beveiligen van een database.</p> <p>Goede wachtwoorden zijn lang en uniek. KeePassXC kan er een voor je genereren.</p> -- -- -- Passwords do not match. -- Wachtwoorden komen niet overeen. -- -- -- Password field -- Wachtwoord invulveld -- -- -- Repeat password field -- Wachtwoord herhaling veld -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- sterkte -- -- -- entropy -- entropie -- -- -- Password -- Wachtwoord -- -- -- Character Types -- Tekens -- -- -- Numbers -- Cijfers -- -- -- Extended ASCII -- Uitgebreide ASCII -- -- -- Exclude look-alike characters -- Op elkaar lijkende tekens niet gebruiken -- -- -- Pick characters from every group -- Gebruik tekens uit iedere groep -- -- -- &Length: -- &Lengte: -- -- -- Passphrase -- Wachtwoordzin -- -- -- Wordlist: -- Woordenlijst: -- -- -- Word Separator: -- Scheidingsteken: -- -- -- Close -- Sluiten -- -- -- Entropy: %1 bit -- Entropie: %1 bit -- -- -- Password Quality: %1 -- Kwaliteit: %1 -- -- -- Poor -- Password quality -- Slecht -- -- -- Weak -- Password quality -- Zwak -- -- -- Good -- Password quality -- Goed -- -- -- Excellent -- Password quality -- Uitstekend -- -- -- Switch to advanced mode -- Overschakelen naar de geavanceerde modus -- -- -- Advanced -- Geavanceerd -- -- -- Braces -- Haakjes -- -- -- Punctuation -- Leestekens -- -- -- Quotes -- Aanhalingstekens -- -- -- Logograms -- Special tekens -- -- -- Character set to exclude from generated password -- Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord -- -- -- Do not include: -- Niet gebruiken: -- -- -- Add non-hex letters to "do not include" list -- Voeg niet-hex karakters toe aan de "niet gebruiken" lijst -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Niet te gebruiken karakters: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Gegenereerd wachtwoord -- -- -- Upper-case letters -- Hoofdletters -- -- -- Lower-case letters -- Kleine letters -- -- -- Special characters -- Speciale tekens -- -- -- Math Symbols -- Wiskunde tekens -- -- -- Dashes and Slashes -- Streepjes en schuine streepjes -- -- -- Excluded characters -- Niet te gebruiken tekens -- -- -- Hex Passwords -- Hex wachtwoord -- -- -- Password length -- Wachtwoordlengte -- -- -- Word Case: -- Teken grootte -- -- -- Regenerate password -- Opnieuw genereren -- -- -- Copy password -- Wachtwoord kopiëren -- -- -- lower case -- kleine letters -- -- -- UPPER CASE -- HOOFDLETTERS -- -- -- Title Case -- Eerste Letter Als Hoofdletter -- -- -- Generate Password -- Wachtwoord genereren -- -- -- Also choose from: -- Kies ook uit: -- -- -- Additional characters to use for the generated password -- Aanvullende tekens in het gegenereerde wachtwoord -- -- -- Additional characters -- Aanvullende tekens -- -- -- Word Count: -- Aantal woorden: -- -- -- Esc -- Esc -- -- -- Apply Password -- Wachtwoord gebruiken -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Òpnieuw genereren (%1) -- -- -- Special Characters -- Speciale tekens -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistieken -- -- -- Very weak password -- Zeer zwak wachtwoord -- -- -- Password entropy is %1 bits -- Wachtwoord-entropie is %1 bits -- -- -- Weak password -- Zwak wachtwoord -- -- -- Used in %1/%2 -- Gebruikt in %1/%2 -- -- -- Password is used %1 times -- Wachtwoord is %1 keer gebruikt -- -- -- Password has expired -- Wachtwoord is verlopen -- -- -- Password expiry was %1 -- Wachtwoord is %1 verlopen -- -- -- Password is about to expire -- Wachtwoord is bijna verlopen -- -- -- Password expires in %1 days -- Wachtwoord verloopt in %1 dagen -- -- -- Password will expire soon -- Wachtwoord verloopt snel -- -- -- Password expires on %1 -- Wachtwoord verloopt op %1 -- -- -- Health Check -- Gezondheid -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Overschrijven -- -- -- Delete -- Verwijderen -- -- -- Move -- Verplaatsen -- -- -- Empty -- Leeg -- -- -- Remove -- Verwijderen -- -- -- Skip -- Overslaan -- -- -- Disable -- Uitschakelen -- -- -- Merge -- Samenvoegen -- -- -- Continue -- Doorgaan -- -- -- -- QObject -- -- Database not opened -- Database niet geopend -- -- -- Database hash not available -- Database-hashwaarde is niet beschikbaar -- -- -- Client public key not received -- Openbare sleutel niet ontvangen -- -- -- Cannot decrypt message -- Kan bericht niet decoderen -- -- -- Action cancelled or denied -- Actie afgebroken of geweigerd -- -- -- KeePassXC association failed, try again -- KeePassXC-koppeling is mislukt, probeer het opnieuw -- -- -- Encryption key is not recognized -- De coderingssleutel is niet herkend -- -- -- Incorrect action -- Onjuiste actie -- -- -- Empty message received -- Leeg bericht ontvangen -- -- -- No URL provided -- Geen URL opgegeven -- -- -- No logins found -- Geen aanmeldingen gevonden -- -- -- Unknown error -- Onbekende fout -- -- -- Add a new entry to a database. -- Nieuw item toevoegen aan een database. -- -- -- Path of the database. -- Pad naar de database. -- -- -- Key file of the database. -- Sleutelbestand van de database. -- -- -- path -- pad -- -- -- Username for the entry. -- Gebruikersnaam voor het item. -- -- -- username -- gebruikersnaam -- -- -- URL for the entry. -- URL voor het item. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Vraag om het item's wachtwoord. -- -- -- Generate a password for the entry. -- Genereer een wachtwoord voor het item. -- -- -- length -- lengte -- -- -- Path of the entry to add. -- Pad van toe te voegen item. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Pad van het te kopiëren item. -- -- -- Timeout in seconds before clearing the clipboard. -- Wachttijd (sec) voor het wissen van het klembord. -- -- -- Edit an entry. -- Een item bewerken. -- -- -- Title for the entry. -- Naam voor deze entry. -- -- -- title -- naam -- -- -- Path of the entry to edit. -- Pad van het te bewerken item. -- -- -- Estimate the entropy of a password. -- De entropie van een wachtwoord inschatten. -- -- -- Password for which to estimate the entropy. -- Wachtwoord waarvoor de entropie geschat moet worden. -- -- -- Perform advanced analysis on the password. -- Geavanceerde analyse op het wachtwoord uitvoeren. -- -- -- -- --Available commands: -- -- -- --Beschikbare opdrachten: --: -- -- -- Name of the command to execute. -- Naam van de uit te voeren opdracht. -- -- -- List database entries. -- Lijst van database-items. -- -- -- Path of the group to list. Default is / -- Pad naar de groepslijst. Standaard is / -- -- -- Find entries quickly. -- Items snel zoeken. -- -- -- Search term. -- Zoekterm. -- -- -- Merge two databases. -- Twee databases samenvoegen. -- -- -- Path of the database to merge from. -- Pad naar de samen te voegen brondatabase. -- -- -- Use the same credentials for both database files. -- Gebruik dezelfde gegevens voor beide gegevensbestanden. -- -- -- Key file of the database to merge from. -- Sleutelbestand van gegevensbestand om samen te voegen. -- -- -- Show an entry's information. -- Toon de informatie die hoort bij een item. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Namen van de te tonen kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. -- -- -- attribute -- kenmerk -- -- -- Name of the entry to show. -- Naam van het item dat getoond moet worden. -- -- -- NULL device -- NULL-apparaat -- -- -- error reading from device -- fout bij het lezen van apparaat -- -- -- malformed string -- misvormde tekenreeks -- -- -- missing closing quote -- afsluitend aanhalingsteken ontbreekt -- -- -- Group -- Groep -- -- -- Title -- Naam -- -- -- Username -- Gebruikersnaam -- -- -- Password -- Wachtwoord -- -- -- Notes -- Notities -- -- -- Last Modified -- Laatst bewerkt -- -- -- Created -- Aangemaakt -- -- -- Browser Integration -- Browserintegratie -- -- -- SSH Agent -- SSH-agent -- -- -- Generate a new random diceware passphrase. -- Genereer een nieuwe willekeurige Diceware wachtwoordzin -- -- -- Word count for the diceware passphrase. -- Aantal woorden voor de Diceware wachtwoordzin. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Woordenlijst voor de Diceware-generator. --[Standaard: EFF Engels] -- -- -- Generate a new random password. -- Genereer een willekeurig wachtwoord -- -- -- Could not create entry with path %1. -- Kan geen item maken met pad %1. -- -- -- Enter password for new entry: -- Voer wachtwoord in voor nieuw item: -- -- -- Writing the database failed %1. -- Het schrijven van de database is mislukt %1. -- -- -- Successfully added entry %1. -- Item %1 toegevoegd. -- -- -- Invalid timeout value %1. -- Ongeldige time-out %1. -- -- -- Entry %1 not found. -- Item %1 niet gevonden. -- -- -- Entry with path %1 has no TOTP set up. -- Item met pad %1 heeft geen TOTP instellingen. -- -- -- Clearing the clipboard in %1 second(s)... -- Het klemboard wordt over %1 seconde(n) gewist...Het klembord wordt over %1 seconde(n) gewist... -- -- -- Clipboard cleared! -- Klembord gewist! -- -- -- Silence password prompt and other secondary outputs. -- Wachtwoordprompt en andere bijkomstige meldingen verbergen. -- -- -- count -- CLI parameter -- aantal -- -- -- Could not find entry with path %1. -- Kan item met pad %1 niet vinden. -- -- -- Not changing any field for entry %1. -- Geen enkel veld in item %1 is gewijzigd. -- -- -- Enter new password for entry: -- Voer nieuw wachtwoord in voor item: -- -- -- Writing the database failed: %1 -- Het schrijven van de database is mislukt: %1 -- -- -- Successfully edited entry %1. -- Item %1 is aangepast. -- -- -- Length %1 -- Lengte %1 -- -- -- Entropy %1 -- Entropie %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-word extra bits %1 -- -- -- Type: Bruteforce -- Type: Brute kracht -- -- -- Type: Dictionary -- Type: Woordenboek -- -- -- Type: Dict+Leet -- Type: Woordenboek + Leet -- -- -- Type: User Words -- Type: Gebruikerwoorden -- -- -- Type: User+Leet -- Type: Gebruikerwoorden + Leet -- -- -- Type: Repeated -- Type: Herhaald -- -- -- Type: Sequence -- Type: Reeks -- -- -- Type: Spatial -- Type: Ruimtelijk -- -- -- Type: Date -- Type: Datum -- -- -- Type: Bruteforce(Rep) -- Type: Brute kracht (herh) -- -- -- Type: Dictionary(Rep) -- Type: Woordenboek (herh) -- -- -- Type: Dict+Leet(Rep) -- Type: Woordenboek + Leet (herh) -- -- -- Type: User Words(Rep) -- Type: Gebruikerwoorden (herh) -- -- -- Type: User+Leet(Rep) -- Type: Gebruikerwoorden + Leet (herh) -- -- -- Type: Repeated(Rep) -- Type: Herhaald (herh) -- -- -- Type: Sequence(Rep) -- Type: Reeks (herh) -- -- -- Type: Spatial(Rep) -- Type: Ruimtelijk (herh) -- -- -- Type: Date(Rep) -- Type: Datum (herh) -- -- -- Type: Unknown%1 -- Type: Onbekend %1 -- -- -- Entropy %1 (%2) -- Entropie %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** -- -- -- Failed to load key file %1: %2 -- Er ging iets fout bij het laden van sleutelbestand %1: %2 -- -- -- Length of the generated password -- Lengte van het gegenereerde wachtwoord -- -- -- Use lowercase characters -- Kleine letters gebruiken -- -- -- Use uppercase characters -- Hoofdletters gebruiken -- -- -- Use special characters -- Speciale tekens gebruiken -- -- -- Use extended ASCII -- Uitgebreide ASCII-tekens gebruiken -- -- -- Exclude character set -- Tekenset uitsluiten -- -- -- chars -- Tekens -- -- -- Exclude similar looking characters -- Op elkaar lijkende tekens niet gebruiken -- -- -- Include characters from every selected group -- Tekens uit iedere geslecteerde groep opnemen -- -- -- Recursively list the elements of the group. -- De elementen van de groep recursief opsommen -- -- -- Cannot find group %1. -- Kan groep %1 niet vinden. -- -- -- Error reading merge file: --%1 -- Fout bij lezen van samenvoegbestand: --%1 -- -- -- Unable to save database to file : %1 -- Kan de database niet opslaan in bestand: %1 -- -- -- Unable to save database to file: %1 -- Kan de database niet opslaan in bestand: %1 -- -- -- Successfully recycled entry %1. -- Item %1 is hergebruikt. -- -- -- Successfully deleted entry %1. -- Item %1 is verwijderd. -- -- -- Show the entry's current TOTP. -- Toon de huidige TOTP van het item. -- -- -- ERROR: unknown attribute %1. -- FOUT: onbekend kenmerk %1. -- -- -- No program defined for clipboard manipulation -- Geen programma ingesteld voor klembord manipulatie -- -- -- file empty -- leeg bestand -- -- -- %1: (row, col) %2,%3 -- %1: (rij, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ongeldige instellingen -- -- -- Invalid Key -- TOTP -- Ongeldige sleutel -- -- -- Message encryption failed. -- Berichtcodering is mislukt. -- -- -- No groups found -- Geen groepen gevonden -- -- -- Create a new database. -- Nieuwe database aanmaken -- -- -- File %1 already exists. -- Bestand %1 bestaat al. -- -- -- Loading the key file failed -- Laden van het sleutelbestand is mislukt -- -- -- No key is set. Aborting database creation. -- Geen sleutel ingesteld. De aanmaak van de database is afgebroken. -- -- -- Failed to save the database: %1. -- Opslaan van de database is mislukt: %1 -- -- -- Successfully created new database. -- Nieuwe database is aangemaakt -- -- -- Creating KeyFile %1 failed: %2 -- Aanmaak van sleutelbestand %1 is mislukt: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Laden van sleutelbestand %1 is mislukt: %2 -- -- -- Path of the entry to remove. -- Pad van het te verwijderen item. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. -- -- -- KeePassXC - cross-platform password manager -- KeepassXC - multi-platform wachtwoordbeheerder -- -- -- filenames of the password databases to open (*.kdbx) -- bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) -- -- -- path to a custom config file -- pad naar aangepast configuratiebestand -- -- -- key file of the database -- sleutelbestand van de database -- -- -- read password of the database from stdin -- lees wachtwoord van de database uit stdin -- -- -- Another instance of KeePassXC is already running. -- Een andere instantie van KeePassXC is reeds actief. -- -- -- Fatal error while testing the cryptographic functions. -- Cruciale fout bij het testen van de cryptografische functies. -- -- -- KeePassXC - Error -- KeePassXC - Fout -- -- -- Database password: -- Databasewachtwoord: -- -- -- Cannot create new group -- Kan geen nieuwe groep aanmaken -- -- -- Deactivate password key for the database. -- Schakel de wachtwoordsleutel voor de database uit. -- -- -- Displays debugging information. -- Geeft foutopsporingsinformatie weer. -- -- -- Deactivate password key for the database to merge from. -- Deactiveer de wachtwoordsleutel voor de database waaruit je wil samenvoegen. -- -- -- Version %1 -- Versie %1 -- -- -- Build Type: %1 -- Bouwtype: %1 -- -- -- Revision: %1 -- Revisie: %1 -- -- -- Distribution: %1 -- Distributie: %1 -- -- -- Debugging mode is disabled. -- De foutopsporingsmodus is uitgeschakeld. -- -- -- Debugging mode is enabled. -- De foutopsporingsmodus is ingeschakeld. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Besturingssysteem: %1 --CPU-architectuur: %2 --Kernelversie: %3 %4 -- -- -- Auto-Type -- Auto-type -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (getekend en ongetekend delen) -- -- -- KeeShare (only signed sharing) -- KeeShare (alleen ondertekend delen) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (alleen niet-ondertekend delen) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Geen -- -- -- Enabled extensions: -- Geactiveerde extensies: -- -- -- Cryptographic libraries: -- Cryptografische bibliotheken: -- -- -- Cannot generate a password and prompt at the same time! -- Kan geen wachtwoord en prompt op hetzelfde moment genereren! -- -- -- Adds a new group to a database. -- Voegt een nieuwe groep toe aan een database. -- -- -- Path of the group to add. -- Pad van de toe te voegen groep. -- -- -- Group %1 already exists! -- Groep %1 bestaat al! -- -- -- Group %1 not found. -- Groep %1 niet gevonden. -- -- -- Successfully added group %1. -- Groep %1 toegevoegd. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Controleer of er wachtwoorden zijn gelekt en openbaar zijn gemaakt. BESTANDSNAAM moet het pad zijn van een bestand met SHA-1-hashes van gelekte wachtwoorden in HIBP-indeling, zoals beschikbaar op https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- BESTANDSNAAM -- -- -- Analyze passwords for weaknesses and problems. -- Analyseer wachtwoorden op zwakke punten en problemen. -- -- -- Failed to open HIBP file %1: %2 -- Kon HIBP bestand niet openen %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- De database items worden onderzocht met behulp van het HIBP-bestand, dit zal een tijdje duren... -- -- -- Close the currently opened database. -- Sluit de geopende database. -- -- -- Display this help. -- Toont deze helptekst. -- -- -- slot -- positie -- -- -- Invalid word count %1 -- Ongeldig aantal woorden %1 -- -- -- The word list is too small (< 1000 items) -- De woordenlijst is te klein (< 1000 items) -- -- -- Exit interactive mode. -- Interactieve modus afsluiten. -- -- -- Exports the content of a database to standard output in the specified format. -- Exporteert de inhoud van een database naar standaarduitvoer in de opgegeven indeling. -- -- -- Unable to export database to XML: %1 -- Kon de database niet exporteren naar XML: %1 -- -- -- Unsupported format %1 -- Niet-ondersteund formaat %1 -- -- -- Use numbers -- Getallen gebruiken. -- -- -- Invalid password length %1 -- Ongeldige wachtwoordlengte %1 -- -- -- Display command help. -- Toon helptekst voor opdracht. -- -- -- Available commands: -- Beschikbare opdrachten: -- -- -- Import the contents of an XML database. -- Importeer de inhoud van een XML-database. -- -- -- Path of the XML database export. -- Pad van de XML-database export. -- -- -- Path of the new database. -- Pad van de nieuwe database. -- -- -- Successfully imported database. -- Database is geïmporteerd. -- -- -- Unknown command %1 -- Onbekende opdracht %1 -- -- -- Flattens the output to single lines. -- Hiermee wordt de uitvoer samengevoegd tot enkele lijnen. -- -- -- Only print the changes detected by the merge operation. -- Alleen de wijzigingen afdrukken die zijn gedetecteerd door de samenvoegbewerking. -- -- -- Yubikey slot for the second database. -- YubiKey positie voor de tweede database. -- -- -- Successfully merged %1 into %2. -- %1 en %2 zijn samengevoegd. -- -- -- Database was not modified by merge operation. -- Database werd niet gewijzigd door het samenvoegen. -- -- -- Moves an entry to a new group. -- Hiermee verplaats je een item naar een nieuwe groep. -- -- -- Path of the entry to move. -- Pad van het te verplaatsen item. -- -- -- Path of the destination group. -- Pad van de doelgroep. -- -- -- Could not find group with path %1. -- Kan groep met pad %1 niet vinden. -- -- -- Entry is already in group %1. -- Het item is al in groep %1. -- -- -- Successfully moved entry %1 to group %2. -- Item %1 is verplaatst naar groep %2. -- -- -- Open a database. -- Open een gegevensbestand. -- -- -- Path of the group to remove. -- Pad van de te verwijderen groep. -- -- -- Cannot remove root group from database. -- Kan de hoofdgroep niet verwijderen uit de database. -- -- -- Successfully recycled group %1. -- Groep %1 is hergebruikt. -- -- -- Successfully deleted group %1. -- Groep %1 is verwijderd. -- -- -- Failed to open database file %1: not found -- Kan het databasebestand %1 niet openen: niet gevonden -- -- -- Failed to open database file %1: not a plain file -- Kan het databasebestand %1 niet openen: geen gewoon bestand -- -- -- Failed to open database file %1: not readable -- Kan het databasebestand %1 niet openen: niet leesbaar -- -- -- Enter password to unlock %1: -- Geef het wachtwoord om %1 te ontgrendelen: -- -- -- Invalid YubiKey slot %1 -- Ongeldige YubiKey positie %1 -- -- -- Enter password to encrypt database (optional): -- Voer een wachtwoord in om de database te versleutelen (optioneel): -- -- -- HIBP file, line %1: parse error -- HIBP-bestand, regel %1: fout bij interpreteren -- -- -- Secret Service Integration -- Integratie van geheime diensten -- -- -- User name -- Gebruikersnaam -- -- -- Password for '%1' has been leaked %2 time(s)! -- Wachtwoord voor '%1' is %2 keer gelekt!Wachtwoorden voor '%1' zijn %2 keer gelekt! -- -- -- Invalid password generator after applying all options -- Ongeldige wachtwoordgenerator na het toepassen van alle opties -- -- -- Show the protected attributes in clear text. -- Toon de beschermde kenmerken in tekst. -- -- -- Browser Plugin Failure -- Fout met browser-extensie -- -- -- Could not save the native messaging script file for %1. -- Kan het native messaging scriptbestand voor %1 niet opslaan. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Kopieer het gegeven kenmerk naar het klembord. Dit is "wachtwoord" tenzij anders gespecificeerd. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Kopieer de huidige TOTP naar het klembord (equivalent aan "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Kopieer het kenmerk van een item naar het klembord. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- FOUT: geef --attribute op OF --totp, niet beide. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- FOUT: kenmerk %1 is dubbelzinnig, het komt overeen met %2. -- -- -- Attribute "%1" not found. -- Kenmerk "%1" niet aangetroffen. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Kenmerk "%1" van het item is naar het klembord gekopieerd! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey-positie en optioneel serienummer dat wordt gebruikt om toegang te krijgen tot de database (bijv. 1: 7370001). -- -- -- slot[:serial] -- positie[:nummer] -- -- -- Target decryption time in MS for the database. -- Beoogde decoderingstijd voor de database [ms]. -- -- -- time -- tijd -- -- -- Set the key file for the database. -- Het sleutelbestand voor de database instellen. -- -- -- Set a password for the database. -- Stel een wachtwoord in voor de database. -- -- -- Invalid decryption time %1. -- Ongeldige decoderingstijd %1. -- -- -- Target decryption time must be between %1 and %2. -- Beoogde decoderingstijd moet tussen %1 en %2 liggen. -- -- -- Failed to set database password. -- Kan databasewachtwoord niet instellen. -- -- -- Benchmarking key derivation function for %1ms delay. -- Tijdmeting sleutel-afleidingsfunctie bij %1 ms vertraging. -- -- -- Setting %1 rounds for key derivation function. -- Sleutel-afleidingsfunctie instellen op %1 iteraties. -- -- -- error while setting database key derivation settings. -- fout bij het instellen van database-sleutelafleiding. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formaat om te gebruiken bij het exporteren. Beschikbare keuzes zijn 'xml' of 'csv'. Standaard ingesteld op 'xml'. -- -- -- Unable to import XML database: %1 -- Kan XML-database niet importeren: %1 -- -- -- Show a database's information. -- Toon de gegevens van een database. -- -- -- UUID: -- UUID: -- -- -- Name: -- Naam: -- -- -- Description: -- Beschrijving: -- -- -- Cipher: -- Versleuteling: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Prullenbak is ingeschakeld. -- -- -- Recycle bin is not enabled. -- Prullenbak is niet ingeschakeld. -- -- -- Invalid command %1. -- Ongeldige opdracht %1. -- -- -- Invalid YubiKey serial %1 -- Ongeldig YubiKey nummer %1 -- -- -- Please touch the button on your YubiKey to continue… -- Druk op de knop van je YubiKey om door te gaan... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Wil je een database aanmaken met een leeg wachtwoord? [j/N]: -- -- -- Repeat password: -- Herhaal wachtwoord: -- -- -- Error: Passwords do not match. -- Fout: wachtwoorden komen niet overeen. -- -- -- All clipping programs failed. Tried %1 -- -- Alle knipprogramma's zijn mislukt. Ik heb %1 geprobeerd -- -- -- -- AES (%1 rounds) -- AES (%1 iteraties) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Tijdmeting %1 vertraging -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Pictogram -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Interne fout in zlib bij inpakken: -- -- -- Error writing to underlying device: -- Fout bij schrijven naar onderliggend apparaat: -- -- -- Error opening underlying device: -- Fout bij openen van onderliggend apparaat: -- -- -- Error reading data from underlying device: -- Fout bij lezen van gegevens van onderliggend apparaat: -- -- -- Internal zlib error when decompressing: -- Interne fout in zlib bij uitpakken: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Gzip wordt niet ondersteund in deze versie van zlib. -- -- -- Internal zlib error: -- Interne fout in zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Toon ook vermeldingen die zijn uitgesloten van rapportage -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Positioneer de muis boven een item om aanvullende details weer te geven. Dubbelklik een items om het te bewerken. -- -- -- Bad -- Password quality -- Slecht -- -- -- Bad — password must be changed -- Slecht — wachtwoord moet worden gewijzigd -- -- -- Poor -- Password quality -- Slecht -- -- -- Poor — password should be changed -- Mager — wachtwoord moet worden gewijzigd -- -- -- Weak -- Password quality -- Zwak -- -- -- Weak — consider changing the password -- Zwak — overweeg het wachtwoord te wijzigen -- -- -- (Excluded) -- (Uitgesloten) -- -- -- This entry is being excluded from reports -- Dit item wordt uitgesloten van rapportage -- -- -- Please wait, health data is being calculated... -- Even geduld, gezondheidsgegevens worden verzameld... -- -- -- Congratulations, everything is healthy! -- Gefeliciteerd, alles ziet er goed uit! -- -- -- Title -- Naam -- -- -- Path -- Pad -- -- -- Score -- Score -- -- -- Reason -- Reden -- -- -- Edit Entry... -- Item bewerken... -- -- -- Exclude from reports -- Uitsluiten van rapportage -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- LET OP: Voor deze rapportage wordt informatie verzonden naar de online dienst Have I Been Pwned (HIBP) (https://haveibeenpwned.com). Als je doorgaat, worden je databasewachtwoorden cryptografisch gehasht en worden de eerste vijf tekens van die hashes op veilige wijze verzonden naar deze dienst. Jouw database blijft veilig en kan uit deze informatie niet worden samengesteld. Het aantal wachtwoorden dat je verzendt en je IP-adres worden wel blootgesteld aan deze dienst. -- -- -- Perform Online Analysis -- Online analyse uitvoeren -- -- -- Also show entries that have been excluded from reports -- Toon ook vermeldingen die zijn uitgesloten van rapportage -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Deze versie van KeePassXC biedt geen netwerkfunctionaliteit. Dit is nodig om jouw wachtwoorden te vergelijken met die in de databases van Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Gefeliciteerd, geen gelekte wachtwoorden! -- -- -- Title -- Naam -- -- -- Path -- Pad -- -- -- Password exposed… -- Gelekte wachtwoorden... -- -- -- (Excluded) -- (Uitgesloten) -- -- -- This entry is being excluded from reports -- Dit item wordt uitgesloten van rapportage -- -- -- once -- eenmalig -- -- -- up to 10 times -- tot 10 keer -- -- -- up to 100 times -- tot 100 keer -- -- -- up to 1000 times -- tot 1000 keer -- -- -- up to 10,000 times -- tot 10.000 keer -- -- -- up to 100,000 times -- tot 100.000 keer -- -- -- up to a million times -- tot miljoen keer -- -- -- millions of times -- miljoen keer -- -- -- Edit Entry... -- Item bewerken... -- -- -- Exclude from reports -- Uitsluiten van rapportage -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Beweeg de muis over regels met foutpictogrammen voor meer informatie. -- -- -- Name -- Naam -- -- -- Value -- Waarde -- -- -- Please wait, database statistics are being calculated... -- Even geduld, databasestatistieken worden berekend... -- -- -- Database name -- Databasenaam -- -- -- Description -- Beschrijving -- -- -- Location -- Locatie -- -- -- Last saved -- Laatst opgeslagen -- -- -- Unsaved changes -- Niet-opgeslagen wijzigingen -- -- -- yes -- ja -- -- -- no -- nee -- -- -- The database was modified, but the changes have not yet been saved to disk. -- De database is bewerkt, maar de wijzigingen zijn nog niet opgeslagen. -- -- -- Number of groups -- Aantal groepen -- -- -- Number of entries -- Aantal items -- -- -- Number of expired entries -- Aantal verlopen items -- -- -- The database contains entries that have expired. -- De database bevat items die verlopen zijn. -- -- -- Unique passwords -- Unieke wachtwoorden -- -- -- Non-unique passwords -- Niet-unieke wachtwoorden -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Meer dan 10% van de wachtwoorden zijn dubbel gebruikt. Gebruik waar mogelijk unieke wachtwoorden. -- -- -- Maximum password reuse -- Maximaal wachtwoordherbruik -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Verscheidene wachtwoorden worden meer dan drie keer gebruikt. Gebruik waar mogelijk unieke wachtwoorden. -- -- -- Number of short passwords -- Aantal korte wachtwoorden -- -- -- Recommended minimum password length is at least 8 characters. -- Aangeraden minimumlengte voor wachtwoorden is 8 tekens. -- -- -- Number of weak passwords -- Aantal zwakke wachtwoorden -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Het is aanbevolen om lange, willekeurige wachtwoorden te gebruiken met een beoordeling van 'goed' of 'uitstekend'. -- -- -- Entries excluded from reports -- Items die zijn uitgesloten van rapportage -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Het uitsluiten van vermeldingen uit rapportage, bijv. omdat al bekend is dat ze een slecht wachtwoord hebben, is niet per se een probleem, maar je moet ze wel in de gaten houden. -- -- -- Average password length -- Gemiddelde wachtwoordlengte -- -- -- %1 characters -- %1 tekens -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer veiligheid. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Verbinding met agent mislukt. -- -- -- Agent protocol error. -- Agent-protocolfout. -- -- -- No agent running, cannot add identity. -- Geen agent actief, kan geen identiteit toevoegen. -- -- -- No agent running, cannot remove identity. -- Geen agent actief, kan geen identiteit verwijderen. -- -- -- Agent refused this identity. Possible reasons include: -- Agent weigerde deze identiteit. Mogelijke redenen zijn onder andere: -- -- -- The key has already been added. -- De sleutel was al toegevoegd. -- -- -- Restricted lifetime is not supported by the agent (check options). -- De agent ondersteunt beperkte levensduur niet (zie opties). -- -- -- A confirmation request is not supported by the agent (check options). -- De agent ondersteunt aanvraag voor transactiebevestiging niet (zie opties). -- -- -- Key identity ownership conflict. Refusing to add. -- Conflict tussen sleutelidentiteit. Geweigerd. -- -- -- No agent running, cannot list identities. -- Geen agent actief, kan geen identiteiten opsommen. -- -- -- -- SearchHelpWidget -- -- Search Help -- Zoek hulp -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Zoektermen zijn als volgt: [parameters][veld:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Elke zoekterm moet overeenkomen (een logisch EN) -- -- -- Modifiers -- Modifiers -- -- -- exclude term from results -- zoekterm uit resultaten weglaten -- -- -- match term exactly -- zoekterm moet exact overeenkomen -- -- -- use regex in term -- expressies gebruiken in zoekopdracht -- -- -- Fields -- Velden -- -- -- Term Wildcards -- Zoekterm jokertekens -- -- -- match anything -- elke overeenkomst -- -- -- match one -- één overeenkomst -- -- -- logical OR -- logische OF -- -- -- Examples -- Voorbeelden -- -- -- -- SearchWidget -- -- Search -- Zoeken -- -- -- Limit search to selected group -- Beperk het zoeken tot de geselecteerde groep -- -- -- Search Help -- Zoek hulp -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Zoeken (%1)... -- -- -- Case sensitive -- Hoofdlettergevoelig -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opties -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- De integratie van KeepassXC Freedesktop.org Secret service inschakelen -- -- -- General -- Algemeen -- -- -- Show notification when credentials are requested -- Toon een melding wanneer inloggegevens worden gevraagd -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head></head><body><p>Als de prullenbak is ingeschakeld voor de database, worden items rechtstreeks naar de prullenbak verplaatst. Anders, zullen ze zonder bevestiging worden verwijderd.</p><p>Je wordt nog steeds gevraagd voor het verwijderen van items waarnaar wordt verwezen door andere items.</p></body></html> -- -- -- Exposed database groups: -- Blootgestelde databasegroepen: -- -- -- Authorization -- Autorisatie -- -- -- These applications are currently connected: -- Deze programma's zijn momenteel verbonden: -- -- -- Don't confirm when entries are deleted by clients -- Niet om bevestiging vragen wanneer items worden verwijderd door clients -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Fout:</b> Geen verbinding met DBus. Controleer de DBus-instellingen. -- -- -- <b>Warning:</b> -- <b>Waarschuwing:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Sla huidige wijzigingen op om de plug-in te activeren en het bewerken van deze sectie mogelijk te maken. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Activering -- -- -- Allow export -- Exporteren toestaan -- -- -- Allow import -- Importeren toestaan -- -- -- Own certificate -- Eigen certificaat -- -- -- Fingerprint: -- Vingerafdruk: -- -- -- Certificate: -- Certificaat: -- -- -- Signer -- Ondertekenaar -- -- -- Key: -- Sleutel: -- -- -- Generate -- Genereren -- -- -- Import -- Importeren -- -- -- Export -- Exporteren -- -- -- Imported certificates -- Geïmporteerde certificaten -- -- -- Trust -- Vertrouwen -- -- -- Ask -- Vragen -- -- -- Untrust -- Niet vertrouwen -- -- -- Remove -- Verwijderen -- -- -- Path -- Pad -- -- -- Status -- Status -- -- -- Fingerprint -- Vingerafdruk -- -- -- Certificate -- Certificaat -- -- -- Trusted -- Vertrouwd -- -- -- Untrusted -- Niet-vertrouwd -- -- -- Unknown -- Onbekend -- -- -- key.share -- Filetype for KeeShare key -- Key.share -- -- -- KeeShare key file -- KeeShare sleutelbestand -- -- -- All files -- Alle bestanden -- -- -- Select path -- Pad selecteren -- -- -- Exporting changed certificate -- Gewijzigd certificaat exporteren -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Het geëxporteerde certificaat is niet hetzelfde als die in gebruik is. Wil je het huidige certificaat exporteren? -- -- -- Signer: -- Ondertekenaar: -- -- -- Allow KeeShare imports -- Importeren van KeeShare toestaan -- -- -- Allow KeeShare exports -- Sta KeeShare exports toe -- -- -- Only show warnings and errors -- Alleen waarschuwingen en fouten weergeven -- -- -- Key -- Sleutel -- -- -- Signer name field -- Ondertekenaar naam veld -- -- -- Generate new certificate -- Nieuw certificaat genereren -- -- -- Import existing certificate -- Bestaand certificaat importeren -- -- -- Export own certificate -- Eigen certificaat exporteren -- -- -- Known shares -- Bekende gedeelde databases -- -- -- Trust selected certificate -- Geselecteerd certificaat vertrouwen -- -- -- Ask whether to trust the selected certificate every time -- Vraag elke keer of je het geselecteerde certificaat wilt vertrouwen -- -- -- Untrust selected certificate -- Geselecteerd certificaat niet vertrouwen -- -- -- Remove selected certificate -- Geselecteerd certificaat verwijderen -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Het overschrijven van een ondertekende container wordt niet ondersteund - export is niet uitgevoerd -- -- -- Could not write export container (%1) -- Kan geen export-container schrijven (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Kon handtekening niet insluiten: kan bestand niet openen om te schrijven (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Kon handtekening niet insluiten: kan niet schrijven naar bestand (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Kan database niet insluiten: kan bestand niet openen om te schrijven (%1) -- -- -- Could not embed database: Could not write file (%1) -- Kan database niet insluiten: kan niet schrijven naar bestand (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Het overschrijven van een niet-ondertekende container wordt niet ondersteund - export is niet uitgevoerd -- -- -- Could not write export container -- Kan niet schrijven naar export-container -- -- -- Unexpected export error occurred -- Onverwachte fout bij het exporteren -- -- -- -- ShareImport -- -- Import from container without signature -- Importeren vanuit een niet-ondertekende container -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- De bron van de gedeelde container kan niet worden gecontroleerd omdat deze niet ondertekend is. Weet je zeker dat je vanuit %1 wilt importeren? -- -- -- Import from container with certificate -- Importeren vanuit een container met certificaat -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Wil je %1 met vingerafdruk %2 vanaf %3 vertrouwen? {1 ?} {2 ?} -- -- -- Not this time -- Deze keer niet -- -- -- Never -- Nooit -- -- -- Always -- Altijd -- -- -- Just this time -- Alleen deze keer -- -- -- Signed share container are not supported - import prevented -- Ondertekende containers wordt niet ondersteund - import is niet uitgevoerd -- -- -- File is not readable -- Bestand is niet leesbaar -- -- -- Invalid sharing container -- Ongeldige deel-container -- -- -- Untrusted import prevented -- Onbetrouwbare import is niet uitgevoerd -- -- -- Successful signed import -- Ondertekende import is voltooid -- -- -- Unsigned share container are not supported - import prevented -- Niet-ondertekende container wordt niet ondersteund - import is niet uitgevoerd -- -- -- Successful unsigned import -- Niet-ondertekende import voltooid -- -- -- File does not exist -- Bestand bestaat niet -- -- -- Unknown share container type -- Type van deel-container is onbekend -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importeren vanuit %1 is mislukt (%2) -- -- -- Import from %1 successful (%2) -- Importeren vanuit %1 is voltooid (%2) -- -- -- Imported from %1 -- Geïmporteerd vanuit %1 -- -- -- Export to %1 failed (%2) -- Exporteren naar %1 is mislukt (%2) -- -- -- Export to %1 successful (%2) -- Exporteren naar %1 gelukt (%2) -- -- -- Export to %1 -- Exporteren naar %1 -- -- -- Multiple import source path to %1 in %2 -- Meerdere import-bronpaden naar %1 in %2 -- -- -- Conflicting export target path %1 in %2 -- Conflicterend export-doelpad %1 in %2 -- -- -- -- TotpDialog -- -- Timed Password -- Tijdgebonden wachtwoord -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopiëren -- -- -- Expires in <b>%n</b> second(s) -- Verloopt in <b>%n</b> seconde(n)Verloopt over <b>%n</b> seconde(n) -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopiëren -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Let op: deze TOTP-instellingen zijn applicatie-specifiek en werken mogelijk niet met andere authenticators. -- -- -- There was an error creating the QR code. -- Er ging iets fout bij het maken van de QR-code. -- -- -- Closing in %1 seconds. -- Sluiten in %1 seconden. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP-instellen -- -- -- Default RFC 6238 token settings -- Standaardinstellingen RFC 6238-token -- -- -- Steam token settings -- Steam-tokeninstellingen -- -- -- Use custom settings -- Aangepaste instellingen gebruiken -- -- -- Custom Settings -- Aangepaste instellingen -- -- -- Time step: -- Tijdsinterval: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Grootte van de code: -- -- -- Secret Key: -- Geheime sleutel: -- -- -- Secret key must be in Base32 format -- Geheime sleutel moet in Base32-indeling zijn -- -- -- Secret key field -- Geheime sleutel veld -- -- -- Algorithm: -- Algoritme: -- -- -- Time step field -- Tijd-stap veld -- -- -- digits -- cijfers -- -- -- Invalid TOTP Secret -- Ongeldig TOTP-geheim -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Je hebt een ongeldige geheime sleutel ingevoerd. De sleutel moet in Base32-indeling zijn. --Voorbeeld: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Bevestig het verwijderen van de TOTP instellingen -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Weet je zeker dat je de TOTP instellingen voor dit item wilt verwijderen? -- -- -- -- URLEdit -- -- Invalid URL -- Ongeldige URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Controleren op updates -- -- -- Checking for updates... -- Controleren op updates... -- -- -- Close -- Sluiten -- -- -- Update Error! -- Update-fout! -- -- -- An error occurred in retrieving update information. -- Er ging iets fout bij het ophalen van de update-informatie. -- -- -- Please try again later. -- Probeer het later nog eens. -- -- -- Software Update -- Software-update -- -- -- A new version of KeePassXC is available! -- Er is een nieuwe versie van KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 is nu beschikbaar — jij gebruikt %2. -- -- -- Download it at keepassxc.org -- Download het van keepassxc.org -- -- -- You're up-to-date! -- Je bent up-to-date! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 is de nieuwste versie -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Sla jouw wachtwoorden veilig op in een KeePassXC-database -- -- -- Create new database -- Nieuwe database aanmaken -- -- -- Open existing database -- Bestaande database openen -- -- -- Import from KeePass 1 -- Importeren vanuit Keepass 1-database -- -- -- Import from CSV -- Importeren vanuit CSV-bestand -- -- -- Recent databases -- Recente databases -- -- -- Welcome to KeePassXC %1 -- Welkom bij KeePassXC %1 -- -- -- Import from 1Password -- Van 1Password importeren -- -- -- Open a recent database -- Een recente database openen -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Ingestelde positie - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Challenge Response - Positie %3 - %4 -- -- -- Press -- Druk -- -- -- Passive -- Passief -- -- -- %1 Invalid slot specified - %2 -- %1 Ongeldige positie opgegeven - %2 -- -- -- The YubiKey interface has not been initialized. -- De YubiKey-interface is niet geïnitialiseerd. -- -- -- Hardware key is currently in use. -- Hardwaresleutel is momenteel in gebruik. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Hardwaresleutel met serienummer %1 niet gevonden. Sluit deze aan om door te gaan. -- -- -- Hardware key timed out waiting for user interaction. -- Er is een time-out opgetreden voor de hardwaresleutel tijdens het wachten op gebruikersinteractie. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Er is een USB-fout opgetreden bij het openen van de hardwaresleutel: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Challenge-response is niet voltooid, de specifieke fout was: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Vernieuwen -- -- -- YubiKey Challenge-Response -- YubiKey challenge/response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Als je zelf een <a href="https://www.yubico.com/"> YubiKey</a> hebt, kun je deze gebruiken voor extra beveiliging.</p> <p>De YubiKey vereist dat een van zijn posities (slots) wordt geprogrammeerd als <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Hardwaretoken verversen -- -- -- Hardware key slot selection -- Hardwaresleutel positie selectie -- -- -- Could not find any hardware keys! -- Geen hardwaresleutels aangetroffen! -- -- -- Selected hardware key slot does not support challenge-response! -- Geselecteerde hardwaresleutel-positie ondersteunt geen challenge-respons! -- -- -- Detecting hardware keys… -- Hardwaresleutels detecteren... -- -- -- No hardware keys detected -- Geen hardwaresleutels gedetecteerd -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pl.ts keepassxc-2.6.4-patched/share/translations/keepassx_pl.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_pl.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_pl.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7897 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- O programie KeePassXC -- -- -- About -- O programie -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Zgłoś błędy na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC jest dystrybuowany zgodnie z warunkami licencji GNU General Public License (GPL) w wersji 2 lub (opcjonalnie) w wersji 3. -- -- -- Contributors -- Współtwórcy -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Zobacz wkłady na GitHubie</a> -- -- -- Debug Info -- Informacje debugowania -- -- -- Include the following information whenever you report a bug: -- Przy zgłaszaniu błędów uwzględnij następujące informacje: -- -- -- Copy to clipboard -- Skopiuj do schowka -- -- -- Project Maintainers: -- Opiekunowie projektu: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Specjalne podziękowania od zespołu KeePassXC dla debfx za stworzenie oryginalnego KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Użyj OpenSSH dla Windows zamiast Pageanta -- -- -- Enable SSH Agent integration -- Włącz integrację agenta SSH -- -- -- SSH_AUTH_SOCK value -- Wartość SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Zastąpienie SSH_AUTH_SOCK -- -- -- (empty) -- (puste) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Brak dostępnego gniazda agenta SSH. Sprawdź, czy istnieje zmienna środowiskowa SSH_AUTH_SOCK, lub ustaw zastąpienie. -- -- -- SSH Agent connection is working! -- Połączenie agenta SSH działa! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Ustawienia aplikacji -- -- -- General -- Ogólne -- -- -- Security -- Bezpieczeństwo -- -- -- Access error for config file %1 -- Błąd dostępu pliku konfiguracyjnego %1 -- -- -- Icon only -- Tylko ikona -- -- -- Text only -- Tylko tekst -- -- -- Text beside icon -- Tekst obok ikony -- -- -- Text under icon -- Tekst pod ikoną -- -- -- Follow style -- Utrzymaj styl -- -- -- Reset Settings? -- Zresetować ustawienia? -- -- -- Are you sure you want to reset all general and security settings to default? -- Czy na pewno chcesz zresetować wszystkie ustawienia ogólne i zabezpieczeń do domyślnych? -- -- -- Monochrome (light) -- Monochromatyczny (jasny) -- -- -- Monochrome (dark) -- Monochromatyczny (ciemny) -- -- -- Colorful -- Kolorowy -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Musisz uruchomić ponownie aplikację, aby ustawić nowy język. Czy chcesz teraz to zrobić? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Ustawienia podstawowe -- -- -- Startup -- Uruchamianie -- -- -- Start only a single instance of KeePassXC -- Uruchom tylko jedną instancję KeePassXC -- -- -- Minimize window at application startup -- Minimalizuj okno podczas uruchamiania aplikacji -- -- -- File Management -- Zarządzanie plikami -- -- -- Backup database file before saving -- Utwórz kopię zapasową pliku bazy danych przed zapisaniem -- -- -- Automatically save after every change -- Automatycznie zapisz po każdej zmianie -- -- -- Automatically reload the database when modified externally -- Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie -- -- -- Entry Management -- Zarządzanie wpisami -- -- -- Use group icon on entry creation -- Użyj ikony grupy podczas tworzenia wpisu -- -- -- Minimize instead of app exit -- Zminimalizuj zamiast wyjść z aplikacji -- -- -- Show a system tray icon -- Pokaż ikonę w zasobniku systemowym -- -- -- Hide window to system tray when minimized -- Schowaj okno do zasobnika podczas minimalizacji -- -- -- Auto-Type -- Autowpisywanie -- -- -- Use entry title to match windows for global Auto-Type -- Użyj tytułu wpisy, aby dopasować okna dla globalnego autowpisywania -- -- -- Use entry URL to match windows for global Auto-Type -- Użyj adresu URL wpisu, aby dopasować okna dla globalnego autowpisywania -- -- -- Always ask before performing Auto-Type -- Zawsze pytaj przed wykonaniem autowpisywania -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Ruchomy pasek narzędzi -- -- -- Remember previously used databases -- Pamiętaj wcześniej używane bazy danych -- -- -- Load previously open databases on startup -- Załaduj wcześniej otwarte bazy danych podczas uruchamiania -- -- -- Remember database key files and security dongles -- Pamiętaj pliki kluczy bazy danych i klucze sprzętowe -- -- -- Check for updates at application startup once per week -- Sprawdzaj aktualizacje przy uruchamianiu aplikacji raz w tygodniu -- -- -- Include beta releases when checking for updates -- Uwzględnij wersje beta podczas sprawdzania aktualizacji -- -- -- Language: -- Język: -- -- -- (restart program to activate) -- (uruchom ponownie program, aby aktywować) -- -- -- Minimize window after unlocking database -- Minimalizuj okno po odblokowaniu bazy danych -- -- -- Minimize when opening a URL -- Minimalizuj podczas otwierania adresu URL -- -- -- Hide window when copying to clipboard -- Ukryj okno podczas kopiowania do schowka -- -- -- Minimize -- Minimalizuj -- -- -- Drop to background -- Upuść w tle -- -- -- Favicon download timeout: -- Limit czasu pobierania ikony ulubionych: -- -- -- Website icon download timeout in seconds -- Limit czasu pobierania ikony witryny w sekundach -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Styl przycisków paska narzędzi -- -- -- Language selection -- Wybór języka -- -- -- Global auto-type shortcut -- Skrót globalnego autowpisywania -- -- -- Auto-type character typing delay milliseconds -- Opóźnienie wpisywania znaków przez autowpisywanie w milisekundach -- -- -- Auto-type start delay milliseconds -- Opóźnienie rozpoczęcia autowpisywania w milisekundach -- -- -- Automatically launch KeePassXC at system startup -- Automatycznie uruchom KeePassXC podczas uruchamiania systemu -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Bezpiecznie zapisuj pliki bazy danych (wyłącz, jeśli występują problemy z Dropboksem itp.) -- -- -- User Interface -- Interfejs użytkownika -- -- -- Toolbar button style: -- Styl przycisków paska narzędzi: -- -- -- Use monospaced font for notes -- Użyj czcionek o stałej szerokości w notatkach -- -- -- Tray icon type: -- Typ ikony zasobnika: -- -- -- Reset settings to default… -- Zresetuj ustawienia do domyślnych… -- -- -- Auto-Type typing delay: -- Opóźnienie pisania autowpisywania: -- -- -- Global Auto-Type shortcut: -- Skrót globalnego autowpisywania: -- -- -- Auto-Type start delay: -- Opóźnienie rozpoczęcia autowpisywania: -- -- -- Automatically save when locking database -- Automatycznie zapisuj podczas blokowania bazy danych -- -- -- Automatically save non-data changes when locking database -- Automatycznie zapisuj zmiany niezwiązane z danymi podczas blokowania bazy danych -- -- -- Tray icon type -- Typ ikony zasobnika -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Limity czasowe -- -- -- Clear clipboard after -- Wyczyść schowek po -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Zablokuj bazę danych po nieaktywności -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Zapomnij TouchID po nieaktywności -- -- -- Convenience -- Poręczność -- -- -- Lock databases when session is locked or lid is closed -- Zablokuj bazy danych, gdy sesja jest zablokowana albo pokrywa jest zamknięta -- -- -- Forget TouchID when session is locked or lid is closed -- Zapomnij TouchID, gdy sesja jest zablokowana lub pokrywa jest zamknięta -- -- -- Lock databases after minimizing the window -- Zablokuj bazę danych po zminimalizowaniu okna -- -- -- Re-lock previously locked database after performing Auto-Type -- Ponownie zablokuj poprzednio zablokowaną bazę danych po wykonaniu autowpisywania -- -- -- Hide passwords in the entry preview panel -- Ukryj hasła w panelu podglądu wpisu -- -- -- Hide entry notes by default -- Domyślnie ukrywaj wpisy notatek -- -- -- Privacy -- Prywatność -- -- -- Use DuckDuckGo service to download website icons -- Użyj usługi DuckDuckGo do pobierania ikon witryn -- -- -- Clipboard clear seconds -- Wyczyszczenie schowka w sekundach -- -- -- Touch ID inactivity reset -- Reset nieaktywności Touch ID -- -- -- Database lock timeout seconds -- Limit czasu blokady bazy danych w sekundach -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Wyczyść wyszukaną frazę po -- -- -- Require password repeat when it is visible -- Wymagaj powtórzenia hasła, gdy jest widoczne -- -- -- Hide passwords when editing them -- Ukryj hasła podczas ich edycji -- -- -- Use placeholder for empty password fields -- Używaj symboli zastępczych w pustych polach hasła -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nie znaleziono wpisu pasującego do nazwy okna: -- -- -- Auto-Type - KeePassXC -- Autowpisywanie - KeePassXC -- -- -- Auto-Type -- Autowpisywanie -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Składnia instrukcji autowpisywania jest niepoprawna! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Polecenie autowpisywania zawiera bardzo długie opóźnienie. Czy chcesz kontynuować? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Polecenie autowpisywania zawiera bardzo wolne wciśnięcia klawiszy. Czy chcesz kontynuować? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Polecenie autowpisywania zawiera argumenty, które powtarzają się bardzo często. Czy chcesz kontynuować? -- -- -- Permission Required -- Wymagane uprawnienie -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC wymaga uprawnienia dostępności w celu wykonania podstawowego autowpisywania. Jeśli już udzielono uprawnienia, być może będzie wymagane ponowne uruchomienie KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Okno -- -- -- Sequence -- Sekwencja -- -- -- Default sequence -- Domyślna sekwencja -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupa -- -- -- Title -- Tytuł -- -- -- Username -- Użytkownik -- -- -- Sequence -- Sekwencja -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Skopi&uj nazwę użytkownika -- -- -- Copy &password -- Skopiuj &hasło -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Wymagane uprawnienie -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC wymaga uprawnień dostępności i rejestratora ekranu w celu wykonania globalnego autowpisywania. Nagrywanie ekranu jest konieczne, aby użyć tytułu okna do odnajdywania wpisów. Jeśli już udzielono uprawnień, być może będzie wymagane ponowne uruchomienie KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Autowpisywanie - KeePassXC -- -- -- Select entry to Auto-Type: -- Wybierz wpis do autowpisywania: -- -- -- Search... -- Szukaj... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Żądanie dostępu do przeglądarki -- -- -- %1 is requesting access to the following entries: -- %1 prosi o dostęp do następujących wpisów: -- -- -- Remember access to checked entries -- Zapamiętaj dostęp do zaznaczonych wpisów -- -- -- Remember -- Zapamiętaj -- -- -- Allow access to entries -- Zezwalaj na dostęp do wpisów -- -- -- Allow Selected -- Zezwalaj wybranym -- -- -- Deny All -- Odmów wszystkim -- -- -- Disable for this site -- Wyłącz dla tej witryny -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- Zapisz wpis KeePassXC-Browser -- -- -- Ok -- OK -- -- -- Cancel -- Anuluj -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Masz wiele otwartych baz danych. --Wybierz właściwą bazę danych do zapisania danych uwierzytelniających. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nowe żądanie skojarzenia klucza -- -- -- Save and allow access -- Zapisz i zezwól na dostęp -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Nadpisać istniejący klucz? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Współdzielony klucz szyfrujący o nazwie "%1" już istnieje. --Czy chcesz go nadpisać? -- -- -- KeePassXC: Update Entry -- KeePassXC: Aktualizacja wpisu -- -- -- Do you want to update the information in %1 - %2? -- Czy chcesz uaktualnić informację w %1 - %2? -- -- -- Abort -- Zaniechaj -- -- -- Converting attributes to custom data… -- Konwertowanie atrybutów na niestandardowe dane... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Przekonwertowane atrybuty KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Pomyślnie przekonwertowano atrybuty z %1 wpis(ów). --Przeniesiono %2 klucze do niestandardowych danych. -- -- -- Successfully moved %n keys to custom data. -- Pomyślnie przeniesiono %n klucz do niestandardowych danych.Pomyślnie przeniesiono %n klucze do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką -- -- -- KeePassXC: Create a new group -- KeePassXC: Utwórz nową grupę -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Otrzymano żądanie utworzenia nowej grupy "%1". --Czy chcesz stworzyć tę grupę? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Twoje ustawienia KeePassXC-Browser należy przenieść do ustawień bazy danych. --Jest to konieczne, aby utrzymać bieżące połączenia przeglądarki. --Czy chcesz teraz migrować istniejące ustawienia? -- -- -- Don't show this warning again -- Nie wyświetlaj ponownie tego ostrzeżenia -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Otrzymałeś żądanie skojarzenia następującej bazy danych: --%1 -- --Nadaj połączeniu unikatową nazwę lub identyfikator, na przykład: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Okno dialogowe -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Wymagane jest to aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser -- -- -- Enable browser integration -- Włącz integrację z przeglądarką -- -- -- General -- Ogólne -- -- -- Browsers installed as snaps are currently not supported. -- Przeglądarki zainstalowane jako snapy są obecnie nieobsługiwane. -- -- -- Enable integration for these browsers: -- Włącz integrację z tymi przeglądarkami: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Pokaż powiadomienie, gdy wymagane są dane uwierzytelniające -- -- -- Request to unlock the database if it is locked -- Żądaj odblokowania bazy danych, jeżeli jest zablokowana -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Tylko wpisy z tym samym schematem (http://, https://, ...) są zwracane. -- -- -- Match URL scheme (e.g., https://...) -- Dopasuj schemat adresu URL (np. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Zwracaj tylko najlepsze dopasowania wpisów dla adresu URL zamiast wszystkich wpisów domeny. -- -- -- Return only best-matching credentials -- Zwróć tylko najlepiej pasujące dane uwierzytelniające -- -- -- Returns expired credentials. String [expired] is added to the title. -- Zwraca wygasłe dane uwierzytelniające. Ciąg [wygasłe] jest dodawany do tytułu. -- -- -- Allow returning expired credentials -- Zezwalaj na zwrot wygasłych danych uwierzytelniających -- -- -- All databases connected to the extension will return matching credentials. -- Wszystkie bazy danych podłączone do rozszerzenia zwrócą pasujące dane uwierzytelniające. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Szukaj we wszystkich otwartych bazach danych dopasowanych danych uwierzytelniających -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sortuj dopasowane dane uwierzytelniające według tytułu -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sortuj dopasowane dane uwierzytelniające według nazwy użytkownika -- -- -- Advanced -- Zaawansowane -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nigdy nie pytaj przed uzyskaniem dostępu do danych uwierzytelniających -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nigdy nie pytaj przed aktualizacją danych uwierzytelniających -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Nie pytaj o uprawnienie dla podstawowego uwierzytelniania HTTP -- -- -- Automatically creating or updating string fields is not supported. -- Automatyczne tworzenie albo aktualizowanie pól ciągów znaków nie jest obsługiwane. -- -- -- Return advanced string fields which start with "KPH: " -- Zwracaj zaawansowane pola ciągów znaków, które zaczynają się od "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Nie wyświetlaj wyskakującego okienka sugerującego migrację przestarzałych ustawień KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Nie pytaj o migrację ustawień KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Aktualizuje automatycznie ścieżkę binarną KeePassXC albo keepassxc-proxy do skryptów wiadomości natywnych podczas uruchamiania. -- -- -- Update native messaging manifest files at startup -- Aktualizuj pliki manifestu wiadomości natywnych podczas uruchamiania -- -- -- Use a custom proxy location if you installed a proxy manually. -- Używaj niestandardowej lokalizacji proxy, jeżeli została zainstalowana ręcznie. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Używaj niestandardowej lokalizacji proxy: -- -- -- Custom proxy location field -- Niestandardowe pole lokalizacji proxy -- -- -- Browser for custom proxy file -- Przeglądarka niestandardowego pliku proxy -- -- -- Browse... -- Button for opening file dialog -- Przeglądaj... -- -- -- Use a custom browser configuration location: -- Używaj niestandardowej lokalizacji konfiguracji przeglądarki: -- -- -- Browser type: -- Typ przeglądarki: -- -- -- Toolbar button style -- Styl przycisku paska narzędzi -- -- -- Config Location: -- Lokalizacja konfiguracji: -- -- -- Custom browser location field -- Niestandardowe pole lokalizacji przeglądarki -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Wyszukaj niestandardową ścieżkę przeglądarki -- -- -- Custom extension ID: -- Identyfikator niestandardowego rozszerzenia: -- -- -- Custom extension ID -- Identyfikator niestandardowego rozszerzenia -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Ze względu na sandboxing Snap należy uruchomić skrypt, aby umożliwić integrację przeglądarki.<br />Możesz uzyskać ten skrypt z %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser jest niezbędny do integracji przeglądarki. <br />Pobierz go dla %1 oraz %2 i %3. %4 -- -- -- Please see special instructions for browser extension use below -- Zobacz poniżej specjalne instrukcje dotyczące używania rozszerzenia przeglądarki -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Błąd:</b> Nie można znaleźć niestandardowej lokalizacji proxy! Integracja przeglądarki NIE DZIAŁA bez aplikacji proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! -- -- -- Executable Files -- Pliki wykonywalne -- -- -- All Files -- Wszystkie pliki -- -- -- Select custom proxy location -- Wybierz niestandardową lokalizację proxy -- -- -- Select native messaging host folder location -- Wybierz lokalizację folderu hosta wiadomości natywnych -- -- -- -- CloneDialog -- -- Clone Options -- Opcje klonowania -- -- -- Append ' - Clone' to title -- Dodaj ' - Klon' do nazwy -- -- -- Replace username and password with references -- Wymień nazwę użytkownika i hasło z odniesieniami -- -- -- Copy history -- Skopiuj historię -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importuj pola CSV -- -- -- filename -- nazwa pliku -- -- -- size, rows, columns -- rozmiar, wiersze, kolumny -- -- -- Encoding -- Kodowanie -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Tekst jest klasyfikowany za pomocą -- -- -- Fields are separated by -- Pola są oddzielone za pomocą -- -- -- Comments start with -- Komentarze zaczynają się od -- -- -- Consider '\' an escape character -- Traktuj '\' jako znak ucieczki -- -- -- Preview -- Podgląd -- -- -- Imported from CSV file -- Importowane z pliku CSV -- -- -- Original data: -- Oryginalne dane: -- -- -- Error -- Błąd -- -- -- Error(s) detected in CSV file! -- Wykryto błąd lub błędy w pliku CSV! -- -- -- [%n more message(s) skipped] -- [%n więcej komunikat pominięto] [%n więcej komunikatów pominięto] [%n więcej komunikatów pominięto] [%n więcej komunikatów pominięto] -- -- -- CSV import: writer has errors: --%1 -- Import CSV: zapisywanie z błędami: --%1 -- -- -- Text qualification -- Kwalifikacja tekstu -- -- -- Field separation -- Separacja pola -- -- -- Number of header lines to discard -- Liczba wierszy nagłówka do odrzucenia -- -- -- CSV import preview -- Podgląd importu CSV -- -- -- Column Association -- Skojarzenie kolumny -- -- -- Last Modified -- Ostatnia modyfikacja -- -- -- Password -- Hasło -- -- -- Created -- Stworzone -- -- -- Notes -- Notatki -- -- -- Title -- Tytuł -- -- -- Group -- Grupa -- -- -- URL -- Adres URL -- -- -- Username -- Użytkownik -- -- -- Header lines skipped -- Wiersze nagłówka pominięto -- -- -- First line has field names -- Pierwszy wiersz ma nazwy pól -- -- -- Not Present -- Nieobecne -- -- -- Column %1 -- Kolumna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolumna%n kolumny%n kolumn%n kolumn -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bajt%n bajty%n bajtów%n bajtów -- -- -- %n row(s) -- %n rząd%n rzędy%n rzędów%n rzędów -- -- -- -- Database -- -- File %1 does not exist. -- Plik %1 nie istnieje. -- -- -- Unable to open file %1. -- Nie można otworzyć pliku %1. -- -- -- Error while reading the database: %1 -- Błąd podczas odczytu bazy danych: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Plik nie może zostać zapisany, ponieważ jest otwarty w trybie tylko do odczytu. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Klucz nie został przekształcony. To jest błąd, zgłoś go deweloperom! -- -- -- %1 --Backup database located at %2 -- %1 --Zapasowa baza danych znajduje się w %2 -- -- -- Could not save, database does not point to a valid file. -- Nie można zapisać, baza danych nie wskazuje poprawnego pliku. -- -- -- Could not save, database file is read-only. -- Nie można zapisać, plik bazy danych jest tylko do odczytu. -- -- -- Database file has unmerged changes. -- Plik bazy danych zawiera niescalone zmiany. -- -- -- Recycle Bin -- Kosz -- -- -- Passwords -- Root group name -- Hasła -- -- -- Database save is already in progress. -- Zapisywanie bazy danych jest już w toku. -- -- -- Could not save, database has not been initialized! -- Nie można zapisać, baza danych nie została zainicjowana! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Odblokuj bazę danych - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Plik klucza: -- -- -- Refresh -- Odśwież -- -- -- Don't show this warning again -- Nie wyświetlaj ponownie tego ostrzeżenia -- -- -- All files -- Wszystkie pliki -- -- -- Key files -- Pliki kluczy -- -- -- Select key file -- Wybierz plik klucza -- -- -- Failed to open key file: %1 -- Nie można otworzyć pliku klucza: %1 -- -- -- Unlock KeePassXC Database -- Odblokuj bazę danych KeePassXC -- -- -- Enter Password: -- Wprowadź hasło: -- -- -- Password field -- Pole hasła -- -- -- Hardware key slot selection -- Wybór gniazda klucza sprzętowego -- -- -- Browse for key file -- Przeglądaj plik klucza -- -- -- Browse... -- Przeglądaj... -- -- -- Refresh hardware tokens -- Odśwież tokeny sprzętowe -- -- -- Hardware Key: -- Klucz sprzętowy: -- -- -- Hardware key help -- Pomoc klucza sprzętowego -- -- -- TouchID for Quick Unlock -- TouchID do szybkiego odblokowania -- -- -- Unlock failed and no password given -- Odblokowanie nie powiodło się i nie podano hasła -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Odblokowanie bazy danych nie powiodło się i nie wprowadzono hasła. --Czy zamiast tego chcesz spróbować ponownie z "pustym" hasłem? -- --Aby zapobiec pojawianiu się tego błędu, musisz przejść do "Ustawienia bazy danych / Bezpieczeństwo" i zresetować hasło. -- -- -- Retry with empty password -- Spróbuj ponownie z pustym hasłem -- -- -- Enter Additional Credentials (if any): -- Wprowadź dodatkowe dane uwierzytelniające (jeśli istnieją): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak <strong>YubiKey</strong> albo <strong>OnlyKey</strong> z gniazdami skonfigurowanymi dla HMAC-SHA1.</p> --<p>Kliknij, aby uzyskać więcej informacji...</p> -- -- -- Key file help -- Pomoc dotycząca pliku klucza -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Nie można użyć pliku bazy danych jako pliku klucza -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Nie można użyć pliku bazy danych jako pliku klucza. --Jeśli nie masz pliku klucza, pozostaw puste pole. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Ten plik można wygenerować w ustawieniach zabezpieczeń bazy danych.</p><p>To <strong>nie</strong> jest plik bazy danych *. kdbx!<br>Jeśli nie masz pliku klucza, pozostaw to pole puste.</p><p>Kliknij, aby uzyskać więcej informacji...</p> -- -- -- Key file to unlock the database -- Plik klucza do odblokowania bazy danych -- -- -- Please touch the button on your YubiKey! -- Proszę dotknąć przycisku na twoim YubiKey! -- -- -- Detecting hardware keys… -- Wykrywanie kluczy sprzętowych… -- -- -- No hardware keys detected -- Nie wykryto kluczy sprzętowych -- -- -- Select hardware key… -- Wybierz klucz sprzętowy… -- -- -- Old key file format -- Stary format pliku klucza -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Używasz starego formatu pliku klucza, który KeePassXC może<br>przestać obsługiwać w przyszłości.<br><br>Rozważ wygenerowanie nowego pliku klucza, przechodząc do:<br><strong>Baza danych / Bezpieczeństwo bazy danych / Zmień plik klucza.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Hasła -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Ustawienia zaawansowane -- -- -- General -- Ogólne -- -- -- Security -- Bezpieczeństwo -- -- -- Encryption Settings -- Ustawienia szyfrowania -- -- -- Browser Integration -- Integracja z przeglądarką -- -- -- Database Credentials -- Dane uwierzytelniające bazy danych -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Ustawienia KeePassXC-Browser -- -- -- Stored keys -- Przechowywane klucze -- -- -- Remove -- Usuń -- -- -- Delete the selected key? -- Usunąć wybrany klucz? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Czy na pewno chcesz usunąć wybrany klucz? --Może to uniemożliwić połączenie z wtyczką przeglądarki. -- -- -- Key -- Klucz -- -- -- Value -- Wartość -- -- -- Enable Browser Integration to access these settings. -- Włącz integrację z przeglądarką, aby uzyskać dostęp do tych ustawień. -- -- -- Disconnect all browsers -- Rozłącz wszystkie przeglądarki -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Czy na pewno chcesz rozłączyć wszystkie przeglądarki? --Może to uniemożliwić połączenie z wtyczką przeglądarki. -- -- -- KeePassXC: No keys found -- KeePassXC: Nie znaleziono kluczy -- -- -- No shared encryption keys found in KeePassXC settings. -- Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Usunięto klucze z bazy danych -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Pomyślnie usunięto %n klucz szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n klucze szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC. -- -- -- Forget all site-specific settings on entries -- Zapomnij wszystkie ustawienia witryn dla wpisów -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Czy na pewno chcesz zapomnieć wszystkie ustawienia witryn dla każdego wpisu? --Uprawnienia dostępu do wpisów zostaną odwołane. -- -- -- Removing stored permissions… -- Usuwanie przechowywanych uprawnień... -- -- -- Abort -- Zaniechaj -- -- -- KeePassXC: Removed permissions -- KeePassXC: Usunięto uprawnienia -- -- -- Successfully removed permissions from %n entry(s). -- Pomyślnie usunięto uprawnienia z %n wpisu.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nie znaleziono wpisu z uprawnieniami! -- -- -- The active database does not contain an entry with permissions. -- Aktywna baza danych nie zawiera wpisu z uprawnieniami. -- -- -- Move KeePassHTTP attributes to custom data -- Przenieś atrybuty KeePassHTTP do niestandardowych danych -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Czy na pewno chcesz przenieść wszystkie dane przestarzałej integracji z przeglądarką do najnowszego standardu? --Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki. -- -- -- Stored browser keys -- Przechowywane klucze przeglądarki -- -- -- Remove selected key -- Usuń wybrany klucz -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Przenieś atrybuty KeePassHTTP do niestandardowych danych KeePassXC-Browser -- -- -- Refresh database root group ID -- Odśwież identyfikator grupy głównej bazy danych -- -- -- Created -- Stworzone -- -- -- Refresh database ID -- Odśwież identyfikator bazy danych -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Czy naprawdę chcesz odświeżyć identyfikator bazy danych? --Jest to konieczne tylko wtedy, gdy baza danych jest kopią innej, a rozszerzenie przeglądarki nie może się połączyć. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Dodaj dodatkową ochronę... -- -- -- No password set -- Nie ustawiono hasła -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- OSTRZEŻENIE! Nie ustawiłeś hasła. Używanie bazy danych bez hasła jest zdecydowanie odradzane! -- --Czy na pewno chcesz kontynuować bez hasła? -- -- -- Continue without password -- Kontynuuj bez hasła -- -- -- No encryption key added -- Nie dodano klucza szyfrowania -- -- -- You must add at least one encryption key to secure your database! -- Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazę danych! -- -- -- Unknown error -- Nieznany błąd -- -- -- Failed to change database credentials -- Nie udało się zmienić danych uwierzytelniających bazy danych -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algorytm szyfrowania: -- -- -- AES: 256 Bit (default) -- AES: 256-bitowy (domyślny) -- -- -- Twofish: 256 Bit -- Twofish: 256-bitowy -- -- -- Key Derivation Function: -- Funkcja derywacji klucza: -- -- -- Transform rounds: -- Liczba rund szyfrowania: -- -- -- Memory Usage: -- Zużycie pamięci: -- -- -- Parallelism: -- Paralelizm: -- -- -- Decryption Time: -- Czas odszyfrowania: -- -- -- ?? s -- ?? s -- -- -- Change -- Zmień -- -- -- Higher values offer more protection, but opening the database will take longer. -- Wyższe wartości zapewniają lepszą ochronę, ale otwarcie bazy danych potrwa dłużej. -- -- -- Database format: -- Format bazy danych: -- -- -- This is only important if you need to use your database with other programs. -- Jest to ważne tylko wtedy, gdy musisz korzystać z bazy danych z innymi programami. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (zalecany) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- niezmieniony -- -- -- Number of rounds too high -- Key transformation rounds -- Zbyt duża liczba rund -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Używasz bardzo dużej liczby rund transformacji klucza z Argon2. -- --Jeśli zachowasz ten numer, otworzenie twojej bazy danych może zająć kilka godzin lub dni (lub nawet dłużej)! -- -- -- Understood, keep number -- Zrozumiano, zachowaj numer -- -- -- Cancel -- Anuluj -- -- -- Number of rounds too low -- Key transformation rounds -- Za mała liczba rund -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Używasz bardzo małej liczby rund transformacji klucza z AES-KDF. -- --Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złamania! -- -- -- KDF unchanged -- KDF niezmieniona -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Nie udało się transformować klucza za pomocą nowych parametrów KDF; KDF bez zmian. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- wątek wątki wątków wątków -- -- -- Change existing decryption time -- Zmień istniejący czas odszyfrowywania -- -- -- Decryption time in seconds -- Czas odszyfrowania w sekundach -- -- -- Database format -- Format bazy danych -- -- -- Encryption algorithm -- Algorytm szyfrowania -- -- -- Key derivation function -- Funkcja derywacji klucza -- -- -- Transform rounds -- Liczba rund szyfrowania -- -- -- Memory usage -- Zużycie pamięci -- -- -- Parallelism -- Paralelizm -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Odsłonięte wpisy -- -- -- Don't expose this database -- Nie odsłaniaj tej bazy danych -- -- -- Expose entries under this group: -- Odsłoń wpisy w tej grupie: -- -- -- Enable Secret Service to access these settings. -- Włącz usługę sekretną, aby uzyskać dostęp do tych ustawień. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadane bazy danych -- -- -- Database name: -- Nazwa bazy danych: -- -- -- Database description: -- Opis bazy danych: -- -- -- Default username: -- Domyślny użytkownik: -- -- -- History Settings -- Ustawienia historii -- -- -- Max. history items: -- Maks. liczba wpisów w historii: -- -- -- Max. history size: -- Maks. rozmiar historii: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Użyj kosza -- -- -- Additional Database Settings -- Dodatkowe ustawienia bazy danych -- -- -- Database name field -- Pole nazwy bazy danych -- -- -- Database description field -- Pole opisu bazy danych -- -- -- Default username field -- Pole domyślnej nazwy użytkownika -- -- -- Maximum number of history items per entry -- Maksymalna liczba pozycji historii na wpis -- -- -- Maximum size of history per entry -- Maksymalny rozmiar historii na wpis -- -- -- Delete Recycle Bin -- Usuń kosz -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Czy chcesz usunąć bieżący kosz i całą jego zawartość? --To działanie jest nieodwracalne. -- -- -- (old) -- (stare) -- -- -- Enable compression (recommended) -- Włącz kompresję (zalecane) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Udostępnianie -- -- -- Breadcrumb -- Nawigacja okruszkowa -- -- -- Type -- Typ -- -- -- Path -- Ścieżka -- -- -- Last Signer -- Ostatni podpisujący -- -- -- Certificates -- Certyfikaty -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nazwa bazy danych: -- -- -- Description: -- Opis: -- -- -- Database name field -- Pole nazwy bazy danych -- -- -- Database description field -- Pole opisu bazy danych -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Baza danych KeePass 2 -- -- -- All files -- Wszystkie pliki -- -- -- Open database -- Otwórz bazę danych -- -- -- CSV file -- plik CSV -- -- -- Merge database -- Scal bazę danych -- -- -- Open KeePass 1 database -- Otwórz bazę danych KeePass 1 -- -- -- KeePass 1 database -- Baza danych KeePass 1 -- -- -- Export database to CSV file -- Eksportuj bazę danych do pliku CSV -- -- -- Writing the CSV file failed. -- Błąd przy zapisywaniu pliku CSV. -- -- -- Database creation error -- Błąd tworzenia bazy danych -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Utworzona baza danych nie ma klucza ani KDF, odmawiam jej zapisania. --Jest to z pewnością błąd, zgłoś go programistom. -- -- -- Select CSV file -- Wybierz plik CSV -- -- -- New Database -- Nowa baza danych -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nowa baza danych] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Zablokowana] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Tylko do odczytu] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Nie udało się otworzyć %1. To nie istnieje lub jest niedostępne. -- -- -- Export database to HTML file -- Eksportuj bazę danych do pliku HTML -- -- -- HTML file -- Plik HTML -- -- -- Writing the HTML file failed. -- Nie udało się zapisać pliku HTML. -- -- -- Export Confirmation -- Potwierdzenie eksportu -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Za chwilę wyeksportujesz bazę danych do niezaszyfrowanego pliku. To narazi twoje hasła i wrażliwe informacje! Jesteś pewien, że chcesz kontynuować? -- -- -- Open OPVault -- Otwórz OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Wyszukiwanie... -- -- -- Do you really want to delete the entry "%1" for good? -- Czy na pewno całkowicie usunąć wpis "%1" ? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Czy na pewno chcesz przenieść wpis "%1" do kosza? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Czy na pewno chcesz przenieść %n wpis do kosza?Czy na pewno chcesz przenieść %n wpisy do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza? -- -- -- Execute command? -- Wykonać polecenie? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Czy na pewno chcesz wykonać następujące polecenie?<br><br>%1<br> -- -- -- Remember my choice -- Zapamiętaj mój wybór -- -- -- Do you really want to delete the group "%1" for good? -- Czy na pewno całkowicie usunąć grupę "%1"? -- -- -- No current database. -- Brak bieżącej bazy danych. -- -- -- No source database, nothing to do. -- Brak źródłowej bazy danych, nic do zrobienia. -- -- -- Search Results (%1) -- Wyniki wyszukiwania (%1) -- -- -- No Results -- Brak wyników -- -- -- File has changed -- Plik się zmienił -- -- -- The database file has changed. Do you want to load the changes? -- Plik bazy danych uległ zmianie. Czy chcesz załadować zmiany? -- -- -- Merge Request -- Żądanie scalenia -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Plik bazy danych został zmieniony, a masz niezapisane zmiany. --Czy chcesz scalić twoje zmiany? -- -- -- Empty recycle bin? -- Opróżnić kosz? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Czy na pewno chcesz nieodwracalnie usunąć wszystko z twojego kosza? -- -- -- Do you really want to delete %n entry(s) for good? -- Czy naprawdę chcesz usunąć %n wpis na dobre?Czy naprawdę chcesz usunąć %n wpisy na dobre?Czy naprawdę chcesz usunąć %n wpisów na dobre?Czy naprawdę chcesz usunąć %n wpisów na dobre? -- -- -- Delete entry(s)? -- Usunąć wpis?Usunąć wpisy?Usunąć wpisy?Usunąć wpisy? -- -- -- Move entry(s) to recycle bin? -- Przenieść wpis do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza? -- -- -- Lock Database? -- Zablokować bazę danych? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Edytujesz wpis. Odrzucić zmiany i mimo to zablokować? -- -- -- "%1" was modified. --Save changes? -- "%1" został zmieniony. --Zapisać zmiany? -- -- -- Database was modified. --Save changes? -- Baza danych została zmodyfikowana. --Zapisać zmiany? -- -- -- Save changes? -- Zapisać zmiany? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Nie można otworzyć nowego pliku bazy danych podczas próby automatycznego przeładowania. --Błąd: %1 -- -- -- Disable safe saves? -- Wyłączyć bezpieczne zapisywanie? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC nie zdołał wielokrotnie zapisać bazy danych. Jest to prawdopodobnie spowodowane przez usługi synchronizacji plików, które blokują plik zapisu. --Wyłączyć bezpieczne zapisywanie i spróbować ponownie? -- -- -- Passwords -- Hasła -- -- -- Save database as -- Zapisz bazę danych jako -- -- -- KeePass 2 Database -- Baza danych KeePass 2 -- -- -- Replace references to entry? -- Zastąpić odniesienia do wpisu? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Wpis "%1" ma %2 odniesienie. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesienia. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesień. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesień. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to? -- -- -- Delete group -- Usuń grupę -- -- -- Move group to recycle bin? -- Przenieść grupę do kosza? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Czy na pewno chcesz przenieść grupę "%1" do kosza? -- -- -- Successfully merged the database files. -- Pomyślnie scalono pliki bazy danych. -- -- -- Database was not modified by merge operation. -- Baza danych nie została zmodyfikowana operacją scalania. -- -- -- Shared group... -- Grupa współdzielona... -- -- -- Writing the database failed: %1 -- Błąd zapisu bazy danych: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Ta baza danych jest otwarta w trybie tylko do odczytu. Automatyczne zapisywanie jest wyłączone. -- -- -- Save database backup -- Zapisz kopię zapasową bazy danych -- -- -- Could not find database file: %1 -- Nie można znaleźć pliku bazy danych: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Wpis -- -- -- Advanced -- Zaawansowane -- -- -- Icon -- Ikona -- -- -- Auto-Type -- Autowpisywanie -- -- -- Properties -- Właściwości -- -- -- History -- Historia -- -- -- SSH Agent -- Agent SSH -- -- -- n/a -- nie dotyczy -- -- -- (encrypted) -- (zaszyfrowane) -- -- -- Select private key -- Wybierz klucz prywatny -- -- -- Entry history -- Historia wpisu -- -- -- Add entry -- Dodaj wpis -- -- -- Edit entry -- Edycja wpisu -- -- -- New attribute -- Nowy atrybut -- -- -- Are you sure you want to remove this attribute? -- Czy na pewno chcesz usunąć ten atrybut? -- -- -- Tomorrow -- Jutro -- -- -- %n week(s) -- %n tydzień%n tygodnie%n tygodni%n tygodni -- -- -- %n month(s) -- %n miesiąc%n miesiące%n miesięcy%n miesięcy -- -- -- Entry updated successfully. -- Wpis został pomyślnie zaktualizowany. -- -- -- New attribute %1 -- Nowy atrybut %1 -- -- -- %n year(s) -- %n rok%n lata%n lat%n lat -- -- -- Confirm Removal -- Potwierdź usunięcie -- -- -- Browser Integration -- Integracja z przeglądarką -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Czy na pewno chcesz usunąć ten adres URL? -- -- -- Reveal -- Odsłoń -- -- -- Hide -- Ukryj -- -- -- Unsaved Changes -- Niezapisane zmiany -- -- -- Would you like to save changes to this entry? -- Czy chcesz zapisać zmiany w tym wpisie? -- -- -- [PROTECTED] Press Reveal to view or edit -- [CHRONIONE] Wciśnij Odsłoń, aby zobaczyć albo edytować -- -- -- Invalid Entry -- Nieprawidłowy wpis -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Zewnętrzna operacja scalania unieważniła ten wpis. --Niestety, wszelkie wprowadzone zmiany zostały utracone. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Dodatkowe atrybuty -- -- -- Add -- Dodaj -- -- -- Remove -- Usuń -- -- -- Edit Name -- Edytuj nazwę -- -- -- Protect -- Chroń -- -- -- Reveal -- Odsłoń -- -- -- Attachments -- Załączniki -- -- -- Foreground Color: -- Kolor pierwszego planu: -- -- -- Background Color: -- Kolor tła: -- -- -- Attribute selection -- Wybór atrybutu -- -- -- Attribute value -- Wartość atrybutu -- -- -- Add a new attribute -- Dodaj nowy atrybut -- -- -- Remove selected attribute -- Usuń wybrany atrybut -- -- -- Edit attribute name -- Edytuj nazwę atrybutu -- -- -- Toggle attribute protection -- Przełącz ochronę atrybutu -- -- -- Show a protected attribute -- Pokaż chroniony atrybut -- -- -- Foreground color selection -- Wybór koloru pierwszego planu -- -- -- Background color selection -- Wybór koloru tła -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Jeśli zaznaczone, wpis nie pojawi się w raportach takich jak kontrola zdrowia i HIBP, nawet jeśli nie spełnia wymagań jakościowych (np. entropia hasła lub ponowne użycie). Możesz ustawić znacznik wyboru, jeśli hasło jest poza twoją kontrolą (np. jeśli musi to być czterocyfrowy kod PIN), aby zapobiec zaśmiecaniu raportów.</p></body></html> -- -- -- Exclude from database reports -- Wyklucz z raportów bazy danych -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Włącz autowpisywanie dla tego wpisu -- -- -- Window Associations -- Skojarzenia okna -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Tytuł okna: -- -- -- Use a specific sequence for this association: -- Użyj określonej sekwencji dla tego powiązania: -- -- -- Custom Auto-Type sequence -- Niestandardowa sekwencja autowpisywania -- -- -- Open Auto-Type help webpage -- Otwórz stronę pomocy autowpisywania -- -- -- Existing window associations -- Istniejące skojarzenia okien -- -- -- Add new window association -- Dodaj nowe skojarzenie okna -- -- -- Remove selected window association -- Usuń wybrane skojarzenie okna -- -- -- You can use an asterisk (*) to match everything -- Możesz użyć gwiazdki (*), aby dopasować wszystko -- -- -- Set the window association title -- Ustaw tytuł skojarzonego okna -- -- -- You can use an asterisk to match everything -- Możesz użyć gwiazdki, aby dopasować wszystko -- -- -- Custom Auto-Type sequence for this window -- Niestandardowa sekwencja autowpisywania dla tego okna -- -- -- Inherit default Auto-Type sequence from the group -- Dziedzicz domyślną sekwencję autowpisywania z grupy -- -- -- Use custom Auto-Type sequence: -- Używaj niestandardowej sekwencji autowpisywania: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Te ustawienia wpływają na zachowanie wpisu z rozszerzeniem przeglądarki. -- -- -- General -- Ogólne -- -- -- Skip Auto-Submit for this entry -- Pomiń autoprzesyłanie dla tego wpisu -- -- -- Hide this entry from the browser extension -- Ukryj ten wpis przed rozszerzeniem przeglądarki -- -- -- Additional URL's -- Dodatkowe adresy URL -- -- -- Add -- Dodaj -- -- -- Remove -- Usuń -- -- -- Edit -- Edytuj -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Wyślij to ustawienie do przeglądarki tylko w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli ta opcja jest włączona, zwykłe formularze logowania nie będą wyświetlać tego wpisu do wyboru. -- -- -- Use this entry only with HTTP Basic Auth -- Użyj tego wpisu tylko w przypadku podstawowego uwierzytelniania HTTP -- -- -- -- EditEntryWidgetHistory -- -- Show -- Pokaż -- -- -- Restore -- Przywróć -- -- -- Delete -- Usuń -- -- -- Delete all -- Usuń wszystkie -- -- -- Entry history selection -- Wybór historii wpisów -- -- -- Show entry at selected history state -- Pokaż wpis w wybranym stanie historii -- -- -- Restore entry to selected history state -- Przywróć wpis do wybranego stanu historii -- -- -- Delete selected history state -- Usuń wybrany stan historii -- -- -- Delete all history -- Usuń całą historię -- -- -- -- EditEntryWidgetMain -- -- URL: -- Adres URL: -- -- -- Password: -- Hasło: -- -- -- Title: -- Tytuł: -- -- -- Presets -- Ustawienia -- -- -- Toggle the checkbox to reveal the notes section. -- Przełącz pole wyboru, aby wyświetlić sekcję notatek. -- -- -- Username: -- Użytkownik: -- -- -- Url field -- Pole adresu URL -- -- -- Download favicon for URL -- Pobierz ikonę ulubionych dla adresu URL -- -- -- Password field -- Pole hasła -- -- -- Toggle notes visible -- Przełącz widoczność notatek -- -- -- Expiration field -- Pole wygaśnięcia -- -- -- Expiration Presets -- Presety wygaśnięcia -- -- -- Expiration presets -- Presety wygaśnięcia -- -- -- Notes field -- Pole notatek -- -- -- Title field -- Pole tytułu -- -- -- Username field -- Pole nazwy użytkownika -- -- -- Toggle expiration -- Przełącz wygasanie -- -- -- Notes: -- Notatki: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Wygasa: -- -- -- Edit Entry -- Edytuj wpis -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formularz -- -- -- Remove key from agent after -- Usuń klucz z agenta po jego wygaśnięciu -- -- -- seconds -- sekundy -- -- -- Fingerprint -- Odcisk palca -- -- -- Remove key from agent when database is closed/locked -- Usuń klucz z agenta po zamknięciu/zablokowaniu bazy danych -- -- -- Public key -- Klucz publiczny -- -- -- Add key to agent when database is opened/unlocked -- Dodaj klucz do agenta podczas otwierania/odblokowywania bazy danych -- -- -- Comment -- Komentarz -- -- -- Decrypt -- Odszyfruj -- -- -- n/a -- nie dotyczy -- -- -- Copy to clipboard -- Skopiuj do schowka -- -- -- Private key -- Klucz prywatny -- -- -- External file -- Plik zewnętrzny -- -- -- Browse... -- Button for opening file dialog -- Przeglądaj... -- -- -- Attachment -- Załącznik -- -- -- Add to agent -- Dodaj do agenta -- -- -- Remove from agent -- Usuń z agenta -- -- -- Require user confirmation when this key is used -- Wymagaj potwierdzenia użytkownika, gdy ten klucz jest używany -- -- -- Remove key from agent after specified seconds -- Usuń klucz z agenta po określonych sekundach -- -- -- Browser for key file -- Przeglądaj plik klucza -- -- -- External key file -- Zewnętrzny plik klucza -- -- -- Select attachment file -- Wybierz plik załącznika -- -- -- -- EditGroupWidget -- -- Group -- Grupa -- -- -- Icon -- Ikona -- -- -- Properties -- Właściwości -- -- -- Add group -- Dodaj grupę -- -- -- Edit group -- Edytuj grupę -- -- -- Enable -- Włącz -- -- -- Disable -- Wyłącz -- -- -- Inherit from parent group (%1) -- Dziedzicz z nadrzędnej grupy (%1) -- -- -- Entry has unsaved changes -- Wpis ma niezapisane zmiany -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Typ: -- -- -- Path: -- Ścieżka: -- -- -- Password: -- Hasło: -- -- -- Inactive -- Nieaktywne -- -- -- KeeShare unsigned container -- Niepodpisany kontener KeeShare -- -- -- KeeShare signed container -- Podpisany kontener KeeShare -- -- -- Select import source -- Wybierz cel importu -- -- -- Select export target -- Wybierz cel eksportu -- -- -- Select import/export file -- Wybierz plik importu/eksportu -- -- -- Clear -- Wyczyść -- -- -- Import -- Importuj -- -- -- Export -- Eksportuj -- -- -- Synchronize -- Synchronizuj -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Twoja wersja KeePassXC nie obsługuje udostępniania tego typu kontenera. --Obsługiwane rozszerzenia to: %1. -- -- -- %1 is already being exported by this database. -- %1 jest już eksportowany przez tę bazę danych. -- -- -- %1 is already being imported by this database. -- %1 jest już importowany przez tę bazę danych. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 jest importowany i eksportowany przez różne grupy w tej bazie danych. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare jest obecnie wyłączony. Możesz włączyć import/eksport w ustawieniach aplikacji. -- -- -- Database export is currently disabled by application settings. -- Eksport bazy danych jest obecnie wyłączony przez ustawienia aplikacji. -- -- -- Database import is currently disabled by application settings. -- Import danych jest obecnie wyłączony przez ustawienia aplikacji. -- -- -- Sharing mode field -- Pole trybu udostępniania -- -- -- Path to share file field -- Ścieżka do pola udostępniania pliku -- -- -- Password field -- Pole hasła -- -- -- Clear fields -- Wyczyść pola -- -- -- Browse for share file -- Przeglądaj plik udostępniania -- -- -- Browse... -- Przeglądaj... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Pole nazwy -- -- -- Notes field -- Pole notatek -- -- -- Toggle expiration -- Przełącz wygasanie -- -- -- Auto-Type toggle for this and sub groups -- Przełączenie autowpisywania dla tej i podgrup -- -- -- Expiration field -- Pole wygaśnięcia -- -- -- Search toggle for this and sub groups -- Przełączenie wyszukiwania dla tej i podgrup -- -- -- Default auto-type sequence field -- Pole domyślnej sekwencji autowpisywnaia -- -- -- Expires: -- Wygasa: -- -- -- Use default Auto-Type sequence of parent group -- Korzystaj z domyślnej sekwencji autowpisywania z nadrzędnej grupy -- -- -- Auto-Type: -- Autowpisywanie: -- -- -- Search: -- Szukaj: -- -- -- Notes: -- Notatki: -- -- -- Name: -- Nazwa: -- -- -- Set default Auto-Type sequence -- Ustaw domyślną sekwencję autowpisywania -- -- -- Edit Group -- Edytuj grupę -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Dodaj niestandardową ikonę -- -- -- Delete custom icon -- Usuń niestandardową ikonę -- -- -- Download favicon -- Pobierz ikonę ulubionych -- -- -- Unable to fetch favicon. -- Nie można pobrać ikony ulubionych. -- -- -- Images -- Obrazy -- -- -- All files -- Wszystkie pliki -- -- -- Confirm Delete -- Potwierdź usunięcie -- -- -- Select Image(s) -- Wybierz obraz(y) -- -- -- Successfully loaded %1 of %n icon(s) -- Pomyślnie załadowano %1 z %n ikonyPomyślnie załadowano %1 z %n ikonPomyślnie załadowano %1 z %n ikonPomyślnie załadowano %1 z %n ikon -- -- -- No icons were loaded -- Żadne ikony nie zostały załadowane -- -- -- %n icon(s) already exist in the database -- %n ikona już istnieje w bazie danych%n ikony już istnieją w bazie danych%n ikon już istnieje w bazie danych%n ikon już istnieje w bazie danych -- -- -- The following icon(s) failed: -- Niepowodzenie następującej ikony:Niepowodzenie następujących ikon:Niepowodzenie następujących ikon:Niepowodzenie następujących ikon: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Ta ikona używana jest przez %n wpis i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisy i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Możesz włączyć usługę ikon witryn DuckDuckGo w menu Narzędzia -> Ustawienia -> Bezpieczeństwo -- -- -- Download favicon for URL -- Pobierz ikonę ulubionych dla adresu URL -- -- -- Apply selected icon to subgroups and entries -- Zastosuj wybraną ikonę do podgrup i wpisów -- -- -- Also apply to child groups -- Zastosuj również do grup podrzędnych -- -- -- Also apply to child entries -- Zastosuj również do wpisów podrzędnych -- -- -- Also apply to all children -- Zastosuj również do wszystkich podrzędnych -- -- -- Existing icon selected. -- Wybrano istniejącą ikonę. -- -- -- Use default icon -- Ustaw domyślną ikonę -- -- -- Use custom icon -- Ustaw niestandardową ikonę -- -- -- Apply icon to... -- Zastosuj ikonę do... -- -- -- Apply to this group only -- Zastosuj tylko do tej grupy -- -- -- -- EditWidgetProperties -- -- Created: -- Stworzone: -- -- -- Modified: -- Modyfikowane: -- -- -- Accessed: -- Ostatnio używane: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Dane wtyczki -- -- -- Remove -- Usuń -- -- -- Delete plugin data? -- Usunąć dane wtyczki? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Czy na pewno chcesz usunąć wybrane dane wtyczki? --Może to spowodować nieprawidłowe działanie wtyczek. -- -- -- Key -- Klucz -- -- -- Value -- Wartość -- -- -- Datetime created -- Utworzono datę i godzinę -- -- -- Datetime modified -- Zmodyfikowano datę i godzinę -- -- -- Datetime accessed -- Ostatnio używano datę i godzinę -- -- -- Unique ID -- Niepowtarzalny identyfikator -- -- -- Plugin data -- Dane wtyczki -- -- -- Remove selected plugin data -- Usuń wybrane dane wtyczki -- -- -- -- Entry -- -- %1 - Clone -- %1 - klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Nazwa -- -- -- Size -- Rozmiar -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formularz -- -- -- Add -- Dodaj -- -- -- Remove -- Usuń -- -- -- Open -- Otwórz -- -- -- Save -- Zapisz -- -- -- Select files -- Wybierz pliki -- -- -- Are you sure you want to remove %n attachment(s)? -- Czy na pewno chcesz usunąć %n załącznik?Czy na pewno chcesz usunąć %n załączniki?Czy na pewno chcesz usunąć %n załączników?Czy na pewno chcesz usunąć %n załączników? -- -- -- Save attachments -- Zapisz załączniki -- -- -- Unable to create directory: --%1 -- Nie można utworzyć katalogu: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Czy na pewno chcesz zastąpić istniejący plik "%1" załącznikiem? -- -- -- Confirm overwrite -- Potwierdź zastąpienie -- -- -- Unable to save attachments: --%1 -- Nie można zapisać załączników: --%1 -- -- -- Unable to open attachment: --%1 -- Nie można otworzyć załącznika: --%1 -- -- -- Unable to open attachments: --%1 -- Nie można otworzyć załączników: --%1 -- -- -- Confirm remove -- Potwierdź usunięcie -- -- -- Unable to open file(s): --%1 -- Nie można otworzyć pliku: --%1Nie można otworzyć plików: --%1Nie można otworzyć plików: --%1Nie można otworzyć plików: --%1 -- -- -- Attachments -- Załączniki -- -- -- Add new attachment -- Dodaj nowy załącznik -- -- -- Remove selected attachment -- Usuń wybrany załącznik -- -- -- Open selected attachment -- Otwórz wybrany załącznik -- -- -- Save selected attachment to disk -- Zapisz wybrany załącznik na dysk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 to duży plik (%2 MB). --Twoja baza danych może być bardzo duża i zmniejszać wydajność. -- --Czy na pewno chcesz dodać ten plik? -- -- -- Confirm Attachment -- Potwierdź załącznik -- -- -- -- EntryAttributesModel -- -- Name -- Nazwa -- -- -- -- EntryHistoryModel -- -- Last modified -- Ostatnia modyfikacja -- -- -- Title -- Tytuł -- -- -- Username -- Użytkownik -- -- -- URL -- Adres URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Odniesienie: -- -- -- Group -- Grupa -- -- -- Title -- Tytuł -- -- -- Username -- Użytkownik -- -- -- URL -- Adres URL -- -- -- Never -- Nigdy -- -- -- Password -- Hasło -- -- -- Notes -- Notatki -- -- -- Expires -- Wygasa -- -- -- Created -- Stworzone -- -- -- Modified -- Modyfikowane -- -- -- Accessed -- Ostatnio używane -- -- -- Attachments -- Załączniki -- -- -- Size -- Rozmiar -- -- -- Group name -- Nazwa grupy -- -- -- Entry title -- Tytuł wpisu -- -- -- Entry notes -- Notatki wpisu -- -- -- Entry expires at -- Wpis wygasa -- -- -- Creation date -- Data utworzenia -- -- -- Last modification date -- Data ostatniej modyfikacji -- -- -- Last access date -- Data ostatniego dostępu -- -- -- Attached files -- Załączone pliki -- -- -- Entry size -- Rozmiar wpisu -- -- -- Has attachments -- Ma załączniki -- -- -- Has TOTP one-time password -- Ma hasło jednorazowe TOTP -- -- -- -- EntryPreviewWidget -- -- Close -- Zamknij -- -- -- General -- Ogólne -- -- -- Username -- Użytkownik -- -- -- Password -- Hasło -- -- -- Expiration -- Wygaśnięcie -- -- -- URL -- Adres URL -- -- -- Attributes -- Atrybuty -- -- -- Attachments -- Załączniki -- -- -- Notes -- Notatki -- -- -- Autotype -- Autowpisywanie -- -- -- Window -- Okno -- -- -- Sequence -- Sekwencja -- -- -- Searching -- Wyszukiwanie -- -- -- Search -- Szukaj -- -- -- Clear -- Wyczyść -- -- -- Never -- Nigdy -- -- -- [PROTECTED] -- [CHRONIONE] -- -- -- Enabled -- Włączone -- -- -- Disabled -- Wyłączone -- -- -- Share -- Udział -- -- -- Display current TOTP value -- Wyświetl bieżącą wartość TOTP -- -- -- Advanced -- Zaawansowane -- -- -- Default Sequence -- Sekwencja domyślna -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Nieprawidłowy adres URL -- -- -- -- EntryView -- -- Fit to window -- Dopasuj do okna -- -- -- Fit to contents -- Dopasuj do treści -- -- -- Reset to defaults -- Przywróć domyślne -- -- -- Has attachments -- Entry attachment icon toggle -- Ma załączniki -- -- -- Has TOTP -- Entry TOTP icon toggle -- Ma TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Wpis "%1" z bazy danych "%2" został użyty przez %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Rejestracja usługi DBus w %1 nie powiodła się.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n wpis był używany przez %1%n wpisy były używane przez %1%n wpisów było używanych przez %1%n wpisów było używanych przez %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nazwa pliku -- -- -- Group -- Grupa -- -- -- Manage -- Zarządzaj -- -- -- Unlock to show -- Odblokuj, aby pokazać -- -- -- None -- Żaden -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikacja -- -- -- Manage -- Zarządzaj -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Usługa sekretna Fdo:</b> %1 -- -- -- Unknown -- Unknown PID -- Nieznany -- -- -- Unknown -- Unknown executable path -- Nieznany -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, plik wykonywalny: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Uruchomiona jest inna usługa sekretna (%1). Zatrzymaj ją/usuń przed ponownym włączeniem Integracji usługi sekretnej. -- -- -- -- Group -- -- [empty] -- group has no children -- [pusty] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Sprawdzanie hasła online nie powiodło się -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Pobierz ikony ulubionych -- -- -- Cancel -- Anuluj -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Masz problem z pobraniem ikon? --Możesz włączyć usługę ikon witryn DuckDuckGo w sekcji bezpieczeństwa ustawień aplikacji. -- -- -- Close -- Zamknij -- -- -- URL -- Adres URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Proszę czekać, przetwarzanie listy wpisów... -- -- -- Downloading... -- Pobieranie... -- -- -- Ok -- OK -- -- -- Already Exists -- Już istnieje -- -- -- Download Failed -- Pobieranie nie powiodło się -- -- -- Downloading favicons (%1/%2)... -- Pobieranie ikon ulubionych (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Zamknij -- -- -- Close message -- Zamknij komunikat -- -- -- -- Kdbx3Reader -- -- missing database headers -- brakuje nagłówków bazy danych -- -- -- Header doesn't match hash -- Nagłówek nie pasuje do hasza -- -- -- Invalid header id size -- Nieprawidłowy rozmiar identyfikatora nagłówka -- -- -- Invalid header field length -- Nieprawidłowa długość pola nagłówka -- -- -- Invalid header data length -- Nieprawidłowa długość danych nagłowka -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Podano nieprawidłowe dane uwierzytelniające, spróbuj ponownie. --Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony. -- -- -- Unable to calculate database key -- Nie można wyliczyć klucza bazy danych -- -- -- Unable to issue challenge-response: %1 -- Nie można wywołać wyzwania-odpowiedzi: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Nie można wywołać wyzwania-odpowiedzi: %1 -- -- -- Unable to calculate database key -- Nie można wyliczyć klucza bazy danych -- -- -- -- Kdbx4Reader -- -- missing database headers -- brakuje nagłówków bazy danych -- -- -- Invalid header checksum size -- Nieprawidłowy rozmiar sumy kontrolnej nagłówka -- -- -- Header SHA256 mismatch -- Niepoprawny nagłówek SHA256 -- -- -- Unknown cipher -- Nieznany szyfr -- -- -- Invalid header id size -- Nieprawidłowy rozmiar identyfikatora nagłówka -- -- -- Invalid header field length -- Nieprawidłowa długość pola nagłówka -- -- -- Invalid header data length -- Nieprawidłowa długość danych nagłowka -- -- -- Failed to open buffer for KDF parameters in header -- Nie można otworzyć bufora dla parametrów KDF w nagłówku -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nieobsługiwana funkcja derywacji klucza (KDF) albo nieprawidłowe parametry -- -- -- Legacy header fields found in KDBX4 file. -- W pliku KDBX4 znaleziono przestarzałe pola nagłówków. -- -- -- Invalid inner header id size -- Nieprawidłowy rozmiar id wewnętrznego nagłówka -- -- -- Invalid inner header field length -- Nieprawidłowa długość pola wewnętrznego nagłówka -- -- -- Invalid inner header binary size -- Nieprawidłowy rozmiar binarny wewnętrznego nagłówka -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Niewspierana wersja mapy odmian KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość nazwy wpisu mapy odmian -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Nieprawidłowe dane nazwy wpisu mapy odmian -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość wartości wpisu mapy odmian -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Nieprawidłowe dane wartości wpisu mapy odmian -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość Bool wpisu mapy odmian -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość Int32 wartości wpisu mapy odmian -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość UInt32 wartości wpisu mapy odmian -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość Int64 wartości wpisu mapy odmian -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Nieprawidłowa długość UInt64 wartości wpisu mapy odmian -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Nieprawidłowe typ wpisu mapy odmian -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Nieprawidłowy rozmiar typu pola mapy odmian -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Podano nieprawidłowe dane uwierzytelniające, spróbuj ponownie. --Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony. -- -- -- (HMAC mismatch) -- (Niezgodność HMAC) -- -- -- Unable to calculate database key: %1 -- Nie można wyliczyć klucza bazy danych: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Nieprawidłowy algorytm szyfrowania symetrycznego. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Nieprawidłowy rozmiar symetrycznego szyfru IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Nie udało się serializować mapy odmian parametrów KDF -- -- -- Unable to calculate database key: %1 -- Nie można wyliczyć klucza bazy danych: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nieobsługiwany szyfr -- -- -- Invalid compression flags length -- Nieprawidłowa długość flag kompresji -- -- -- Unsupported compression algorithm -- Niewspierany algorytm kompresji -- -- -- Invalid master seed size -- Nieprawidłowy rozmiar głównej liczby losowej -- -- -- Invalid transform seed size -- Nieprawidłowy rozmiar seedu transformacji -- -- -- Invalid transform rounds size -- Nieprawidłowy rozmiar rund transformacji -- -- -- Invalid start bytes size -- Nieprawidłowy rozmiar początkowy bajtu -- -- -- Invalid random stream id size -- Nieprawidłowy rozmiar losowy id strumienia -- -- -- Invalid inner random stream cipher -- Niepoprawny wewnętrzny szyfr losowy strumienia -- -- -- Not a KeePass database. -- To nie baza danych KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Wybrany plik jest starą bazą danych KeePassX 1 (.kdb). -- --Możesz zaimportować ją przez wybranie Baza danych > 'Importuj bazę danych KeePass 1...'. --Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej bazy danych za pomocą starej wersji KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Nieobsługiwana wersja bazy danych KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Nieprawidłowa długość szyfru uuid: %1 (długość=%2) -- -- -- Unable to parse UUID: %1 -- Nie można parsować UUID: %1 -- -- -- Failed to read database file. -- Nie udało się odczytać pliku bazy danych. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Błąd parsowania XML: %1 -- -- -- No root group -- Brak głównej grupy -- -- -- Missing icon uuid or data -- Brakujące uuid ikony lub danych -- -- -- Missing custom data key or value -- Brakujący niestandardowy klucz danych lub wartość -- -- -- Multiple group elements -- Elementy wielu grup -- -- -- Null group uuid -- Zerowa grupa uuid -- -- -- Invalid group icon number -- Nieprawidłowy numer ikony grupy -- -- -- Invalid EnableAutoType value -- Nieprawidłowa wartość EnableAutoType -- -- -- Invalid EnableSearching value -- Nieprawidłowa wartość EnableSearching -- -- -- No group uuid found -- Nie znaleziono grupy uuid -- -- -- Null DeleteObject uuid -- Zerowy uuid DeleteObject -- -- -- Missing DeletedObject uuid or time -- Brakujące uuid DeletedObject lub czasu -- -- -- Null entry uuid -- Zerwoy wpis uuid -- -- -- Invalid entry icon number -- Nieprawidłowy numer ikony wejściowej -- -- -- History element in history entry -- Element historii we wpisie historii -- -- -- No entry uuid found -- Nie znaleziono wpisu uuid -- -- -- History element with different uuid -- Element historii z innym uuid -- -- -- Duplicate custom attribute found -- Znaleziono zduplikowany niestandardowy atrybut -- -- -- Entry string key or value missing -- Brak klucza lub wartości dla wpisu -- -- -- Entry binary key or value missing -- Brak wejściowego klucza binarnego lub wartości -- -- -- Auto-type association window or sequence missing -- Brak skojarzenego okna lub sekwencji autowpisywania -- -- -- Invalid bool value -- Nieprawidłowa wartość bool -- -- -- Invalid date time value -- Nieprawidłowa wartość czasu daty -- -- -- Invalid color value -- Nieprawidłowa wartość koloru -- -- -- Invalid color rgb part -- Nieprawidłowa wartość części koloru rgb -- -- -- Invalid number value -- Nieprawidłowa wartość liczbowa -- -- -- Invalid uuid value -- Nieprawidłowa wartość uuid -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Nie można zdekompresować pliku binarnego -- -- -- XML error: --%1 --Line %2, column %3 -- Błąd XML: --%1 --Wiersz %2, kolumna %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Niepoprawna struktura pliku ustawień KeeAgenta. -- -- -- Private key is an attachment but no attachments provided. -- Klucz prywatny jest załącznikiem, ale nie ma załączników. -- -- -- Private key is empty -- Klucz prywatny jest pusty -- -- -- File too large to be a private key -- Plik jest zbyt duży, aby być kluczem prywatnym -- -- -- Failed to open private key -- Nie udało się otworzyć klucza prywatnego -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Nie można otworzyć bazy danych. -- -- -- Import KeePass1 Database -- Importuj bazę danych KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Nie można otworzyć pliku klucza. -- -- -- Not a KeePass database. -- To nie baza danych KeePass. -- -- -- Unsupported encryption algorithm. -- Niewspierany algorytm szyfrowania. -- -- -- Unsupported KeePass database version. -- Niewspierana wersja bazy danych KeePass. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Nie można odczytać szyfrowania IV -- -- -- Invalid number of groups -- Nieprawidłowa liczba grup -- -- -- Invalid number of entries -- Nieprawidłowa liczba wpisów -- -- -- Invalid content hash size -- Nieprawidłowy rozmiar hashu zawartości -- -- -- Invalid transform seed size -- Nieprawidłowy rozmiar seedu transformacji -- -- -- Invalid number of transform rounds -- Nieprawidłowa liczba rund transformacji -- -- -- Unable to construct group tree -- Nie można skonstruować drzewa grup -- -- -- Root -- Główna -- -- -- Key transformation failed -- Nie udało się transformować klucza -- -- -- Invalid group field type number -- Nieprawidłowa liczba typu pola grupy -- -- -- Invalid group field size -- Nieprawidłowy rozmiar pola grupy -- -- -- Read group field data doesn't match size -- Odczytane dane pola grupy nie pasują do rozmiaru -- -- -- Incorrect group id field size -- Niepoprawny rozmiar pola dla identyfikatora grupy -- -- -- Incorrect group creation time field size -- Niepoprawny rozmiar pola dla czasu utworzenia grupy -- -- -- Incorrect group modification time field size -- Niepoprawny rozmiar pola dla czasu modyfikacji grupy -- -- -- Incorrect group access time field size -- Niepoprawny rozmiar pola dla czasu dostępu do grupy -- -- -- Incorrect group expiry time field size -- Niepoprawny rozmiar pola dla czasu wygaśnięcia grupy -- -- -- Incorrect group icon field size -- Niepoprawny rozmiar pola dla ikony grupy -- -- -- Incorrect group level field size -- Niepoprawny rozmiar pola dla poziomu grupy -- -- -- Invalid group field type -- Nieprawidłowy typ pola grupy -- -- -- Missing group id or level -- Brak poziomu lub identyfikatora grupy -- -- -- Missing entry field type number -- Brak numeru typu dla pola wpisu -- -- -- Invalid entry field size -- Nieprawidłowy rozmiar pola wpisu -- -- -- Read entry field data doesn't match size -- Odczytane dane pola wpisu nie pasują do rozmiaru -- -- -- Invalid entry uuid field size -- Nieprawidłowy rozmiar pola wpisu uuid -- -- -- Invalid entry group id field size -- Nieprawidłowy rozmiar pola dla identyfikatora grupy wpisu -- -- -- Invalid entry icon field size -- Nieprawidłowy rozmiar pola dla ikony wpisu -- -- -- Invalid entry creation time field size -- Nieprawidłowy rozmiar pola dla czasu utworzenia wpisu -- -- -- Invalid entry modification time field size -- Nieprawidłowy rozmiar pola dla czasu modyfikacji wpisu -- -- -- Invalid entry expiry time field size -- Nieprawidłowy rozmiar pola dla czasu wygaśnięcia wpisu -- -- -- Invalid entry field type -- Nieprawidłowy typ pola wpisu -- -- -- unable to seek to content position -- nie można znaleźć pozycji treści -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Podano nieprawidłowe dane uwierzytelniające, spróbuj ponownie. --Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony. -- -- -- Unable to calculate database key -- Nie można wyliczyć klucza bazy danych -- -- -- -- KeeShare -- -- Invalid sharing reference -- Nieprawidłowe odwołanie do udostępniania -- -- -- Inactive share %1 -- Nieaktywny udział %1 -- -- -- Imported from %1 -- Importowane z %1 -- -- -- Exported to %1 -- Wyeksportowano do %1 -- -- -- Synchronized with %1 -- Zsynchronizowano z %1 -- -- -- Import is disabled in settings -- Import jest wyłączony w ustawieniach -- -- -- Export is disabled in settings -- Eksport jest wyłączony w ustawieniach -- -- -- Inactive share -- Nieaktywny udział -- -- -- Imported from -- Importowane z -- -- -- Exported to -- Eksportowane do -- -- -- Synchronized with -- Zsynchronizowane z -- -- -- -- KeyComponentWidget -- -- Key Component -- Składnik klucza -- -- -- Key Component Description -- Opis składnika klucza -- -- -- Cancel -- Anuluj -- -- -- Key Component set, click to change or remove -- Ustawiono składnik klucza, kliknij, aby zmienić lub usunąć -- -- -- Add %1 -- Add a key component -- Dodaj %1 -- -- -- Change %1 -- Change a key component -- Zmień %1 -- -- -- Remove %1 -- Remove a key component -- Usuń %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 ustawiono, kliknij, aby zmienić lub usunąć -- -- -- -- KeyFileEditWidget -- -- Generate -- Wygeneruj -- -- -- Key File -- Plik klucza -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Możesz dodać plik klucza zawierający losowe bajty do zwiększenia bezpieczeństwa.</p><p>Musisz trzymać go w tajemnicy i nigdy go nie stracić, bo zostaniesz zablokowany!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Błąd ładowania pliku klucza '%1' --Komunikat: %2 -- -- -- Key files -- Pliki kluczy -- -- -- All files -- Wszystkie pliki -- -- -- Create Key File... -- Utwórz plik klucza... -- -- -- Error creating key file -- Błąd tworzenia pliku klucza -- -- -- Unable to create key file: %1 -- Nie można utworzyć pliku klucza: %1 -- -- -- Select a key file -- Wybierz plik klucza -- -- -- Key file selection -- Wybór pliku klucza -- -- -- Browse for key file -- Przeglądaj plik klucza -- -- -- Browse... -- Przeglądaj... -- -- -- Generate a new key file -- Generuj nowy plik klucza -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Uwaga: nie należy używać pliku, który może ulec zmianie, ponieważ uniemożliwi to odblokowanie bazy danych! -- -- -- Invalid Key File -- Nieprawidłowy plik klucza -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Nie można użyć bieżącej bazy danych jako własnego pliku klucza. Proszę wybrać inny plik lub wygenerować nowy plik klucza. -- -- -- Suspicious Key File -- Podejrzany plik klucza -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Wybrany plik klucza wygląda jak plik bazy danych haseł. Plik klucza musi być plikiem statycznym, który nigdy się nie zmienia albo utracisz dostęp do bazy danych na zawsze. --Czy na pewno chcesz kontynuować z tym plikiem? -- -- -- Old key file format -- Stary format pliku klucza -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Wybrano plik klucza w starym formacie, który KeePassXC<br>może przestać obsługiwać w przyszłości.<br><br>Zamiast tego warto rozważyć wygenerowanie nowego pliku klucza. -- -- -- -- MainWindow -- -- &Database -- &Baza danych -- -- -- &Help -- &Pomoc -- -- -- &Groups -- &Grupy -- -- -- &Tools -- &Narzędzia -- -- -- &Quit -- Za&kończ -- -- -- &About -- &O programie -- -- -- Database settings -- Ustawienia bazy danych -- -- -- Copy username to clipboard -- Skopiuj użytkownika do schowka -- -- -- Copy password to clipboard -- Skopiuj hasło do schowka -- -- -- &Settings -- &Ustawienia -- -- -- &Title -- &Tytuł -- -- -- Copy title to clipboard -- Skopiuj tytuł do schowka -- -- -- &URL -- Adres &URL -- -- -- Copy URL to clipboard -- Skopiuj adres URL do schowka -- -- -- &Notes -- &Notatki -- -- -- Copy notes to clipboard -- Skopiuj notatki do schowka -- -- -- Copy &TOTP -- Skopiuj &TOTP -- -- -- E&mpty recycle bin -- Opróżnij k&osz -- -- -- Clear history -- Wyczyść historię -- -- -- Access error for config file %1 -- Błąd dostępu pliku konfiguracyjnego %1 -- -- -- Settings -- Ustawienia -- -- -- Toggle window -- Pokaż/ukryj okno -- -- -- Quit KeePassXC -- Zakończ KeePassXC -- -- -- Please touch the button on your YubiKey! -- Proszę dotknąć przycisku na twoim YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- OSTRZEŻENIE: Używasz niestabilnej kompilacji KeePassXC! --Istnieje duże ryzyko uszkodzenia, utrzymuj kopie zapasowe baz danych. --Ta wersja nie jest przeznaczona do użytku produkcyjnego. -- -- -- &Donate -- &Wspomóż -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- OSTRZEŻENIE: Twoja wersja Qt może powodować awarie KeePassXC z klawiaturą ekranową! --Zalecamy korzystanie z AppImage dostępnego na naszej stronie pobierania. -- -- -- &Import -- &Importuj -- -- -- Create a new database -- Stwórz nową bazę danych -- -- -- Merge from another KDBX database -- Scal z inną bazą KDBX -- -- -- Add a new entry -- Dodaj nowy wpis -- -- -- View or edit entry -- Podgląd lub edycja wpisu -- -- -- Add a new group -- Dodaj nową grupę -- -- -- Perform &Auto-Type -- Wykonaj &autowpisywanie -- -- -- Open &URL -- Otwórz adres &URL -- -- -- Import a KeePass 1 database -- Importuj bazę danych KeePass 1 -- -- -- Import a CSV file -- Importuj plik CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- UWAGA: Używasz wstępnej wersji KeePassXC! Spodziewaj się pewnych błędów i drobnych problemów, ta wersja nie jest przeznaczona do użytku produkcyjnego. -- -- -- Check for updates on startup? -- Sprawdzać aktualizacje podczas uruchamiania? -- -- -- Would you like KeePassXC to check for updates on startup? -- Czy chcesz, aby KeePassXC sprawdzał aktualizacje podczas uruchamiania? -- -- -- You can always check for updates manually from the application menu. -- Zawsze możesz sprawdzić aktualizacje ręcznie w menu aplikacji. -- -- -- &Export -- &Eksportuj -- -- -- Sort &A-Z -- Sortuj &A-Z -- -- -- Sort &Z-A -- Sortuj &Z-A -- -- -- &Password Generator -- &Generator hasła -- -- -- Import a 1Password Vault -- Importuj sejf 1Password -- -- -- &Getting Started -- &Pierwsze kroki -- -- -- &User Guide -- Podręcznik uż&ytkownika -- -- -- &Keyboard Shortcuts -- &Skróty klawiaturowe -- -- -- &Recent Databases -- &Ostatnie bazy danych -- -- -- &Entries -- W&pisy -- -- -- Copy Att&ribute -- Skopiuj atry&but -- -- -- TOTP -- TOTP -- -- -- View -- Widok -- -- -- Theme -- Motyw -- -- -- &Check for Updates -- Sprawdź &aktualizacje -- -- -- &Open Database… -- Ot&wórz bazę danych… -- -- -- &Save Database -- &Zapisz bazę danych -- -- -- &Close Database -- Zamknij bazę da&nych -- -- -- &New Database… -- &Nowa baza danych… -- -- -- &Merge From Database… -- &Scal z bazą danych… -- -- -- &New Entry… -- &Nowy wpis… -- -- -- &Edit Entry… -- &Edytuj wpis… -- -- -- &Delete Entry… -- &Usuń wpis… -- -- -- &New Group… -- &Nowa grupa… -- -- -- &Edit Group… -- &Edytuj grupę… -- -- -- &Delete Group… -- U&suń grupę… -- -- -- Download All &Favicons… -- Pobierz wszystkie ikony &ulubionych… -- -- -- Sa&ve Database As… -- &Zapisz bazę danych jako… -- -- -- Database &Security… -- &Bezpieczeństwo bazy danych… -- -- -- Database &Reports... -- &Raporty bazy danych... -- -- -- Statistics, health check, etc. -- Statystyka, kontrola zdrowia itp. -- -- -- &Database Settings… -- Ustawienia bazy &danych… -- -- -- &Clone Entry… -- &Sklonuj wpis… -- -- -- Move u&p -- Przesuń w &górę -- -- -- Move entry one step up -- Przesuń wpis o jeden krok w górę -- -- -- Move do&wn -- Przesuń w &dół -- -- -- Move entry one step down -- Przesuń wpis o jeden krok w dół -- -- -- Copy &Username -- Skopi&uj nazwę użytkownika -- -- -- Copy &Password -- Skopiuj &hasło -- -- -- Download &Favicon -- Pobierz &ikonę ulubionych -- -- -- &Lock Databases -- Zab&lokuj bazy danych -- -- -- &CSV File… -- Plik &CSV… -- -- -- &HTML File… -- Plik &HTML… -- -- -- KeePass 1 Database… -- Baza danych KeePass 1… -- -- -- 1Password Vault… -- Sejf 1Password… -- -- -- CSV File… -- Plik CSV… -- -- -- Show TOTP -- Pokaż TOTP -- -- -- Show QR Code -- Pokaż kod QR -- -- -- Set up TOTP… -- Ustaw TOTP… -- -- -- Report a &Bug -- Zgłoś &błąd -- -- -- Open Getting Started Guide -- Otwórz przewodnik pierwszych kroków -- -- -- &Online Help -- Po&moc online -- -- -- Go to online documentation -- Przejdź do dokumentacji online -- -- -- Open User Guide -- Otwórz podręcznik użytkownika -- -- -- Save Database Backup... -- Zapisz kopię zapasową bazy danych… -- -- -- Add key to SSH Agent -- Dodaj klucz do agenta SSH -- -- -- Remove key from SSH Agent -- Usuń klucz z agenta SSH -- -- -- Compact Mode -- Tryb kompaktowy -- -- -- Automatic -- Automatyczny -- -- -- Light -- Jasny -- -- -- Dark -- Ciemny -- -- -- Classic (Platform-native) -- Klasyczny (natywny dla platformy) -- -- -- Show Toolbar -- Pokaż pasek narzędzi -- -- -- Show Preview Panel -- Pokaż panel podglądu -- -- -- Don't show again for this version -- Nie pokazuj więcej dla tej wersji -- -- -- Restart Application? -- Uruchomić ponownie aplikację? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Musisz uruchomić ponownie aplikację, aby zastosować to ustawienie. Czy chcesz teraz to zrobić? -- -- -- Perform Auto-Type Sequence -- Wykonaj sekwencję autowpisywania -- -- -- {USERNAME} -- {UŻYTKOWNIK} -- -- -- {USERNAME}{ENTER} -- {UŻYTKOWNIK}{ENTER} -- -- -- {PASSWORD} -- {HASŁO} -- -- -- {PASSWORD}{ENTER} -- {HASŁO}{ENTER} -- -- -- Always on Top -- Zawsze na wierzchu -- -- -- Hide Usernames -- Ukryj użytkowników -- -- -- Hide Passwords -- Ukryj hasła -- -- -- -- ManageDatabase -- -- Database settings -- Ustawienia bazy danych -- -- -- Edit database settings -- Edytuj ustawienia bazy danych -- -- -- Unlock database -- Odblokuj bazę danych -- -- -- Unlock database to show more information -- Odblokuj bazę danych, aby wyświetlić więcej informacji -- -- -- Lock database -- Zablokuj bazę danych -- -- -- -- ManageSession -- -- Disconnect -- Rozłącz -- -- -- Disconnect this application -- Rozłącz tę aplikację -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Tworzenie brakującego %1 [%2] -- -- -- Relocating %1 [%2] -- Przemieszczanie %1 [%2] -- -- -- Overwriting %1 [%2] -- Nadpisywanie %1 [%2] -- -- -- older entry merged from database "%1" -- starszy wpis scalony z bazy danych "%1" -- -- -- Adding backup for older target %1 [%2] -- Dodawanie kopii zapasowej dla starszego celu %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Dodawanie kopii zapasowej dla starszego źródła %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Ponowne stosowanie starszego wpisu docelowego na nowszym źródle %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Ponowne stosowanie starszego wpisu źródłowego na nowszym celu %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronizacja z nowszego źródła %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronizacja ze starszego źródła %1 [%2] -- -- -- Deleting child %1 [%2] -- Usuwanie dziecka %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Usuwanie sieroty %1 [%2] -- -- -- Changed deleted objects -- Zmieniono usunięte obiekty -- -- -- Adding missing icon %1 -- Dodawanie brakującej ikony %1 -- -- -- Removed custom data %1 [%2] -- Usunięto niestandardowe dane %1 [%2] -- -- -- Adding custom data %1 [%2] -- Dodawanie niestandardowych danych %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Stwórz nową bazę danych KeePassXC... -- -- -- Root -- Root group -- Główna -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- WizardPage -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych. -- -- -- Advanced Settings -- Ustawienia zaawansowane -- -- -- Simple Settings -- Ustawienia proste -- -- -- Encryption Settings -- Ustawienia szyfrowania -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Dane uwierzytelniające bazy danych -- -- -- A set of credentials known only to you that protects your database. -- Zestaw danych uwierzytelniających, znanych tylko Tobie, który chroni Twoją bazę danych. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Ustawienia szyfrowania -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Ogólne informacje o bazie danych -- -- -- Please fill in the display name and an optional description for your new database: -- Uzupełnij wyświetlaną nazwę i opcjonalny opis nowej bazy danych: -- -- -- -- NixUtils -- -- Password Manager -- Menedżer haseł -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Nieprawidłowy OpData01, nie zawiera nagłówka -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Nie można odczytać wszystkich bajtów IV, poszukiwano 16, ale otrzymano %1 -- -- -- Unable to init cipher for opdata01: %1 -- Nie można zainicjować szyfru dla opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Nie można odczytać wszystkich bajtów podpisu HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- Nieprawidłowo sformułowany OpData01 z powodu błędnego HMAC -- -- -- Unable to process clearText in place -- Nie można przetworzyć czystego tekstu w miejscu -- -- -- Expected %1 bytes of clear-text, found %2 -- Oczekiwano %1 bajtów czystego tekstu, znaleziono %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Odczyt bazy danych nie wytworzył wystąpienia --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Katalog .opvault musi istnieć -- -- -- Directory .opvault must be readable -- Katalog .opvault musi być czytelny -- -- -- Directory .opvault/default must exist -- Katalog .opvault/default musi istnieć -- -- -- Directory .opvault/default must be readable -- Katalog .opvault/default musi być czytelny -- -- -- Unable to decode masterKey: %1 -- Nie można zdekodować klucza głównego: %1 -- -- -- Unable to derive master key: %1 -- Nie można derywować klucza głównego: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Nieprawidłowy plik klucza, oczekiwany klucz OpenSSH -- -- -- PEM boundary mismatch -- Niedopasowanie w granicy PEM -- -- -- Base64 decoding failed -- Dekodowanie Base64 nie powiodło się -- -- -- Key file way too small. -- Plik klucza jest zbyt mały. -- -- -- Key file magic header id invalid -- Nieprawidłowy identyfikator nagłówka magicznego pliku klucza -- -- -- Found zero keys -- Znaleziono zero kluczy -- -- -- Failed to read public key. -- Nie udało się odczytać klucza publicznego. -- -- -- Corrupted key file, reading private key failed -- Uszkodzony plik klucza, odczytu klucza prywatnego nie powiodło się -- -- -- No private key payload to decrypt -- Brak zawrtości prywatnego klucza do odszyfrowania -- -- -- Trying to run KDF without cipher -- Próbuję uruchomić KDF bez szyfru -- -- -- Passphrase is required to decrypt this key -- Do odszyfrowania tego klucza wymagane jest hasło -- -- -- Key derivation failed, key file corrupted? -- Derywacja klucza nie powiodła się, plik klucza uszkodzony? -- -- -- Decryption failed, wrong passphrase? -- Odszyfrowanie nie powiodło się, błędne hasło? -- -- -- Unexpected EOF while reading public key -- Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza publicznego -- -- -- Unexpected EOF while reading private key -- Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza prywatnego -- -- -- Can't write public key as it is empty -- Nie można zapisać klucza publicznego, ponieważ jest pusty -- -- -- Unexpected EOF when writing public key -- Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza publicznego -- -- -- Can't write private key as it is empty -- Nie można zapisać klucza prywatnego, ponieważ jest pusty -- -- -- Unexpected EOF when writing private key -- Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza prywatnego -- -- -- Unsupported key type: %1 -- Nieobsługiwany typ klucza: %1 -- -- -- Unknown cipher: %1 -- Nieznany szyfr: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Szyfr IV jest za krótki dla kdf MD5 -- -- -- Unknown KDF: %1 -- Nieznana KDF: %1 -- -- -- Unknown key type: %1 -- Nieznany typ klucza: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Hasła nie są zgodne -- -- -- Passwords match so far -- Hasła są do tej pory zgodne -- -- -- Toggle Password (%1) -- Przełącz hasło (%1) -- -- -- Generate Password (%1) -- Wygeneruj hasło (%1) -- -- -- Warning: Caps Lock enabled! -- Ostrzeżenie: włączony Caps Lock! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Wprowadź hasło: -- -- -- Confirm password: -- Potwierdź hasło: -- -- -- Password -- Hasło -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Hasło jest podstawową metodą zabezpieczania bazy danych.</p><p>Dobre hasła są długie i niepowtarzalne. KeePassXC może je wygenerować dla ciebie.</p> -- -- -- Passwords do not match. -- Hasła nie pasują do siebie. -- -- -- Password field -- Pole hasła -- -- -- Repeat password field -- Pole powtórzenia hasła -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- siła -- -- -- entropy -- entropia -- -- -- Password -- Hasło -- -- -- Character Types -- Typy znaków -- -- -- Numbers -- Liczby -- -- -- Extended ASCII -- Rozszerzony ASCII -- -- -- Exclude look-alike characters -- Wyklucz podobnie wyglądające znaki -- -- -- Pick characters from every group -- Wybierz znaki ze wszystkich grup -- -- -- &Length: -- &Długość: -- -- -- Passphrase -- Tekst szyfrujący -- -- -- Wordlist: -- Lista słów: -- -- -- Word Separator: -- Separator słów: -- -- -- Close -- Zamknij -- -- -- Entropy: %1 bit -- Entropia: %1 bity -- -- -- Password Quality: %1 -- Jakość hasła: %1 -- -- -- Poor -- Password quality -- Uboga -- -- -- Weak -- Password quality -- Słaba -- -- -- Good -- Password quality -- Dobra -- -- -- Excellent -- Password quality -- Znakomita -- -- -- Switch to advanced mode -- Zmień na tryb zaawansowany -- -- -- Advanced -- Zaawansowane -- -- -- Braces -- Nawiasy klamrowe -- -- -- Punctuation -- Interpunkcja -- -- -- Quotes -- Cudzysłowy -- -- -- Logograms -- Logogramy -- -- -- Character set to exclude from generated password -- Zestaw znaków do wykluczenia w wygenerowanym haśle -- -- -- Do not include: -- Nie zawiera: -- -- -- Add non-hex letters to "do not include" list -- Dodaj nieheksadecymalne litery do listy "nie dołączaj" -- -- -- Hex -- Heksadecymalne -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Wykluczone znaki: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Wygenerowane hasło -- -- -- Upper-case letters -- Wielkie litery -- -- -- Lower-case letters -- Małe litery -- -- -- Special characters -- Znaki specjalne -- -- -- Math Symbols -- Symbole matematyczne -- -- -- Dashes and Slashes -- Kreski i ukośniki -- -- -- Excluded characters -- Wykluczone znaki -- -- -- Hex Passwords -- Hasła szesnastkowe -- -- -- Password length -- Długość hasła -- -- -- Word Case: -- Rozmiar słowa: -- -- -- Regenerate password -- Wygeneruj ponownie hasło -- -- -- Copy password -- Skopiuj hasło -- -- -- lower case -- małe litery -- -- -- UPPER CASE -- WIELKIE LITERY -- -- -- Title Case -- Tytułowe Litery -- -- -- Generate Password -- Wygeneruj hasło -- -- -- Also choose from: -- Wybierz także: -- -- -- Additional characters to use for the generated password -- Dodatkowe znaki do użycia dla wygenerowanego hasła -- -- -- Additional characters -- Dodatkowe znaki -- -- -- Word Count: -- Liczba słów: -- -- -- Esc -- Esc -- -- -- Apply Password -- Zastosuj hasło -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Wygeneruj ponownie hasło (%1) -- -- -- Special Characters -- Znaki specjalne -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statystyka -- -- -- Very weak password -- Bardzo słabe hasło -- -- -- Password entropy is %1 bits -- Entropia hasła to %1 bitów -- -- -- Weak password -- Słabe hasło -- -- -- Used in %1/%2 -- Użyte w %1/%2 -- -- -- Password is used %1 times -- Hasło użyte %1 razy -- -- -- Password has expired -- Hasło wygasło -- -- -- Password expiry was %1 -- Wygaśnięcie hasła było %1 -- -- -- Password is about to expire -- Hasło zaraz wygaśnie -- -- -- Password expires in %1 days -- Hasło wygaśnie za %1 dni -- -- -- Password will expire soon -- Hasło wkrótce wygaśnie -- -- -- Password expires on %1 -- Hasło wygasa w %1 -- -- -- Health Check -- Kontrola zdrowia -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Zastąp -- -- -- Delete -- Usuń -- -- -- Move -- Przenieś -- -- -- Empty -- Pusty -- -- -- Remove -- Usuń -- -- -- Skip -- Pomiń -- -- -- Disable -- Wyłącz -- -- -- Merge -- Scal -- -- -- Continue -- Kontynuuj -- -- -- -- QObject -- -- Database not opened -- Baza danych nie została otwarta -- -- -- Database hash not available -- Hash bazy danych jest niedostępny -- -- -- Client public key not received -- Klucz publiczny klienta nie został odebrany -- -- -- Cannot decrypt message -- Nie można odszyfrować wiadomości -- -- -- Action cancelled or denied -- Działanie anulowane lub odrzucone -- -- -- KeePassXC association failed, try again -- Skojarzenie KeePassXC nie powiodło się, spróbuj ponownie -- -- -- Encryption key is not recognized -- Klucz szyfrowania nie jest rozpoznawany -- -- -- Incorrect action -- Nieprawidłowe działanie -- -- -- Empty message received -- Otrzymano pustą wiadomość -- -- -- No URL provided -- Nie podano adresu URL -- -- -- No logins found -- Nie znaleziono danych do logowania -- -- -- Unknown error -- Nieznany błąd -- -- -- Add a new entry to a database. -- Dodaj nowy wpis do bazy danych. -- -- -- Path of the database. -- Ścieżka bazy danych. -- -- -- Key file of the database. -- Plik z kluczem bazy danych. -- -- -- path -- ścieżka -- -- -- Username for the entry. -- Nazwa użytkownika dla wpisu. -- -- -- username -- użytkownik -- -- -- URL for the entry. -- Adres URL wpisu. -- -- -- URL -- Adres URL -- -- -- Prompt for the entry's password. -- Pytaj o hasło do wpisu. -- -- -- Generate a password for the entry. -- Wygeneruj hasło dla wpisu. -- -- -- length -- długość -- -- -- Path of the entry to add. -- Ścieżka wpisu do dodania. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Ścieżka wpisu do zapamiętania. -- -- -- Timeout in seconds before clearing the clipboard. -- Limit czasu w sekundach przed wyczyszczeniem Schowka. -- -- -- Edit an entry. -- Edycja wpisu. -- -- -- Title for the entry. -- Tytuł dla wpisu. -- -- -- title -- tytuł -- -- -- Path of the entry to edit. -- Ścieżka wpisu do edycji. -- -- -- Estimate the entropy of a password. -- Oszacuj złożoność hasła. -- -- -- Password for which to estimate the entropy. -- Hasło dla którego chcesz oszacować złożoność. -- -- -- Perform advanced analysis on the password. -- Wykonaj zaawansowaną analizę hasła. -- -- -- -- --Available commands: -- -- -- --Dostępne polecenia: -- -- -- -- Name of the command to execute. -- Nazwa polecenia do wykonania. -- -- -- List database entries. -- Wypisz wpisy bazy danych. -- -- -- Path of the group to list. Default is / -- Ścieżka grupy do wymienienia. Domyślna to / -- -- -- Find entries quickly. -- Szybkie wyszukiwanie wpisów. -- -- -- Search term. -- Zapytanie wyszukiwania. -- -- -- Merge two databases. -- Scal dwie bazy danych. -- -- -- Path of the database to merge from. -- Ścieżka bazy danych, z której scalić. -- -- -- Use the same credentials for both database files. -- Użyj tych samych poświadczeń dla obu plików bazy danych. -- -- -- Key file of the database to merge from. -- Plik klucza bazy danych, z której scalić. -- -- -- Show an entry's information. -- Pokaż informacje o wpisie. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nazwy atrybutów do wyświetlenia. Tą opcję można zastosować więcej niż jeden raz, podając każdy atrybut w osobnym wierszu w określonej kolejności. Jeśli atrybuty nie są określone, wyświetla się podsumowanie domyślnych atrybutów. -- -- -- attribute -- atrybut -- -- -- Name of the entry to show. -- Nazwa wpisu do pokazania. -- -- -- NULL device -- Urządzenie NULL -- -- -- error reading from device -- błąd odczytu z urządzenia -- -- -- malformed string -- nieprawidłowy ciąg -- -- -- missing closing quote -- brak cytatu zamknięcia -- -- -- Group -- Grupa -- -- -- Title -- Tytuł -- -- -- Username -- Użytkownik -- -- -- Password -- Hasło -- -- -- Notes -- Notatki -- -- -- Last Modified -- Ostatnia modyfikacja -- -- -- Created -- Stworzone -- -- -- Browser Integration -- Integracja z przeglądarką -- -- -- SSH Agent -- Agent SSH -- -- -- Generate a new random diceware passphrase. -- Wygeneruj nowe hasło losowe diceware. -- -- -- Word count for the diceware passphrase. -- Liczba słów dla hasła diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista słów dla generatora diceware. --[Domyślna: EFF English] -- -- -- Generate a new random password. -- Wygeneruj nowe hasło losowe. -- -- -- Could not create entry with path %1. -- Nie można utworzyć wpisu ze ścieżką %1. -- -- -- Enter password for new entry: -- Wprowadź hasło dla nowego wpisu: -- -- -- Writing the database failed %1. -- Błąd przy zapisie bazy danych %1. -- -- -- Successfully added entry %1. -- Pomyślnie dodano wpis %1. -- -- -- Invalid timeout value %1. -- Nieprawidłowa wartość limitu czasu %1. -- -- -- Entry %1 not found. -- Nie znaleziono wpisu %1. -- -- -- Entry with path %1 has no TOTP set up. -- Wpis ze ścieżką %1 nie ma ustawionego TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- Czyszczenie schowka za %1 sekundę...Czyszczenie schowka za %1 sekundy...Czyszczenie schowka za %1 sekund...Czyszczenie schowka za %1 sekund... -- -- -- Clipboard cleared! -- Schowek wyczyszczony! -- -- -- Silence password prompt and other secondary outputs. -- Cichy monit o hasło i inne wyjścia pomocnicze. -- -- -- count -- CLI parameter -- liczba -- -- -- Could not find entry with path %1. -- Nie można znaleźć wpisu ze ścieżką %1. -- -- -- Not changing any field for entry %1. -- Bez zmiany żadnego pola dla wpisu %1. -- -- -- Enter new password for entry: -- Wprowadź nowe hasło dls wpisu: -- -- -- Writing the database failed: %1 -- Błąd zapisu bazy danych: %1 -- -- -- Successfully edited entry %1. -- Pomyślnie edytowano wpis %1. -- -- -- Length %1 -- Długość %1 -- -- -- Entropy %1 -- Entropia %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Dodatkowe bity w wielu wyrazach %1 -- -- -- Type: Bruteforce -- Typ: Bruteforce -- -- -- Type: Dictionary -- Type: Słownikowy -- -- -- Type: Dict+Leet -- Typ: Słownikowy+Leet -- -- -- Type: User Words -- Typ: Słowa użytkownika -- -- -- Type: User+Leet -- Typ: Użytkownika+Leet -- -- -- Type: Repeated -- Typ: Powtarzany -- -- -- Type: Sequence -- Typ: Sekwencja -- -- -- Type: Spatial -- Typ: Przestrzenny -- -- -- Type: Date -- Typ: Data -- -- -- Type: Bruteforce(Rep) -- Typ: Bruteforce(Powt.) -- -- -- Type: Dictionary(Rep) -- Typ: Słownikowy(Powt.) -- -- -- Type: Dict+Leet(Rep) -- Typ: Słownikowy+Leet(Powt.) -- -- -- Type: User Words(Rep) -- Typ: Słowa użytkownika(Powt.) -- -- -- Type: User+Leet(Rep) -- Typ: Użytkownika+Leet(Powt.) -- -- -- Type: Repeated(Rep) -- Typ: Powtarzany(Powt.) -- -- -- Type: Sequence(Rep) -- Typ: Sekwencja(Powt.) -- -- -- Type: Spatial(Rep) -- Typ: Przestrzenny(Powt.) -- -- -- Type: Date(Rep) -- Typ: Data(Powt.) -- -- -- Type: Unknown%1 -- Typ: Nieznany%1 -- -- -- Entropy %1 (%2) -- Entropia %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Długość hasła (%1) != suma długości części (%2) *** -- -- -- Failed to load key file %1: %2 -- Nie udało się załadować pliku klucza %1: %2 -- -- -- Length of the generated password -- Długość wygenerowanego hasła -- -- -- Use lowercase characters -- Użyj małych liter -- -- -- Use uppercase characters -- Użyj dużych liter -- -- -- Use special characters -- Użyj znaków specjalnych -- -- -- Use extended ASCII -- Użyj rozszerzonego ASCII -- -- -- Exclude character set -- Wyklucz zestaw znaków -- -- -- chars -- znaki -- -- -- Exclude similar looking characters -- Wyklucz podobnie wyglądające znaki -- -- -- Include characters from every selected group -- Uwzględnij znaki z każdej wybranej grupy -- -- -- Recursively list the elements of the group. -- Rekurencyjnie wylistuj elementy grupy. -- -- -- Cannot find group %1. -- Nie można znaleźć grupy %1. -- -- -- Error reading merge file: --%1 -- Błąd odczytu pliku scalania: --%1 -- -- -- Unable to save database to file : %1 -- Nie można zapisać bazy danych do pliku : %1 -- -- -- Unable to save database to file: %1 -- Nie można zapisać bazy danych do pliku: %1 -- -- -- Successfully recycled entry %1. -- Pomyślnie przeniesiono do kosza wpis %1. -- -- -- Successfully deleted entry %1. -- Pomyślnie usunięto wpis %1. -- -- -- Show the entry's current TOTP. -- Pokaż bieżące TOTP wpisu. -- -- -- ERROR: unknown attribute %1. -- BŁĄD: nieznany atrybut %1. -- -- -- No program defined for clipboard manipulation -- Nie zdefiniowano żadnego programu do manipulacji schowkiem -- -- -- file empty -- plik pusty -- -- -- %1: (row, col) %2,%3 -- %1: (rząd, kolumna) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ustawienia nieprawidłowe -- -- -- Invalid Key -- TOTP -- Nieprawidłowy klucz -- -- -- Message encryption failed. -- Szyfrowanie wiadomości nie powiodło się. -- -- -- No groups found -- Nie znaleziono grup -- -- -- Create a new database. -- Stwórz nową bazę danych. -- -- -- File %1 already exists. -- Plik %1 już istnieje. -- -- -- Loading the key file failed -- Ładowanie pliku klucza nie powiodło się -- -- -- No key is set. Aborting database creation. -- Żaden klawisz nie jest ustawiony. Przerwanie tworzenia bazy danych. -- -- -- Failed to save the database: %1. -- Nie udało się zapisać bazy danych: %1. -- -- -- Successfully created new database. -- Pomyślnie utworzono nową bazę danych. -- -- -- Creating KeyFile %1 failed: %2 -- Tworzenie pliku klucza %1 nie powiodło się: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Ładowanie pliku klucza %1 nie powiodło się: %2 -- -- -- Path of the entry to remove. -- Ścieżka wpisu do usunięcia. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Istniejący plik blokady pojedynczego wystąpienia jest nieprawidłowy. Uruchamianie nowego wystąpienia. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyłączony. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - wieloplatformowy menedżer haseł -- -- -- filenames of the password databases to open (*.kdbx) -- nazwy plików baz danych haseł do otwarcia (*.kdbx) -- -- -- path to a custom config file -- ścieżka do pliku z ustawieniami -- -- -- key file of the database -- plik klucza bazy danych -- -- -- read password of the database from stdin -- odczytaj hasło bazy danych z stdin -- -- -- Another instance of KeePassXC is already running. -- Inna instancja KeePassXC jest już uruchomiona. -- -- -- Fatal error while testing the cryptographic functions. -- Błąd krytyczny podczas testowania funkcji kryptograficznych. -- -- -- KeePassXC - Error -- KeePassXC - Błąd -- -- -- Database password: -- Hasło bazy danych: -- -- -- Cannot create new group -- Nie można utworzyć nowej grupy -- -- -- Deactivate password key for the database. -- Dezaktywuj klucz hasła dla bazy danych. -- -- -- Displays debugging information. -- Wyświetla informacje o debugowaniu. -- -- -- Deactivate password key for the database to merge from. -- Dezaktywuj klucz hasła dla bazy danych do scalenia. -- -- -- Version %1 -- Wersja %1 -- -- -- Build Type: %1 -- Typ kompilacji: %1 -- -- -- Revision: %1 -- Rewizja: %1 -- -- -- Distribution: %1 -- Dystrybucja: %1 -- -- -- Debugging mode is disabled. -- Tryb debugowania jest wyłączony. -- -- -- Debugging mode is enabled. -- Tryb debugowania jest włączony. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- System operacyjny: %1 --Architektura procesora: %2 --Jądro: %3 %4 -- -- -- Auto-Type -- Autowpisywanie -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (podpisane i niepodpisane udostępnianie) -- -- -- KeeShare (only signed sharing) -- KeeShare (tylko podpisane udostępnianie) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (tylko niepodpisane udostępnianie) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Żaden -- -- -- Enabled extensions: -- Włączone rozszerzenia: -- -- -- Cryptographic libraries: -- Biblioteki kryptograficzne: -- -- -- Cannot generate a password and prompt at the same time! -- Nie można wygenerować hasła i monitu w tym samym czasie! -- -- -- Adds a new group to a database. -- Dodaje nową grupę do bazy danych. -- -- -- Path of the group to add. -- Ścieżka grupy do dodania. -- -- -- Group %1 already exists! -- Grupa %1 już istnieje! -- -- -- Group %1 not found. -- Grupy %1 nie została znaleziona. -- -- -- Successfully added group %1. -- Pomyślnie dodano grupę %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Sprawdź, czy jakiekolwiek hasła nie zostały publicznie ujawnione. NAZWA PLIKU musi być ścieżką do pliku zawierającego hashe SHA-1 wyciekłych haseł w formacie HIBP dostępnych na https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- NAZWA PLIKU -- -- -- Analyze passwords for weaknesses and problems. -- Analizuj hasła pod kątem słabych punktów i problemów. -- -- -- Failed to open HIBP file %1: %2 -- Nie można otworzyć pliku HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Oceniam wpisy w bazie danych w stosunku do pliku HIBP, to zajmie trochę czasu... -- -- -- Close the currently opened database. -- Zamknij aktualnie otwartą bazę danych. -- -- -- Display this help. -- Wyświetl tę pomoc. -- -- -- slot -- gniazdo -- -- -- Invalid word count %1 -- Nieprawidłowa liczba wyrazów %1 -- -- -- The word list is too small (< 1000 items) -- Lista wyrazów jest za mała (< 1000 elementów) -- -- -- Exit interactive mode. -- Wyjdź z trybu interaktywnego. -- -- -- Exports the content of a database to standard output in the specified format. -- Eksportuje zawartość bazy danych do standardowego wyjścia w określonym formacie. -- -- -- Unable to export database to XML: %1 -- Nie można wyeksportować bazy danych do pliku XML: %1 -- -- -- Unsupported format %1 -- Nieobsługiwany format %1 -- -- -- Use numbers -- Użyj liczb -- -- -- Invalid password length %1 -- Nieprawidłowa długość hasła %1 -- -- -- Display command help. -- Wyświetl pomoc dotyczącą poleceń. -- -- -- Available commands: -- Dostępne polecenia: -- -- -- Import the contents of an XML database. -- Importuj zawartość bazy danych XML. -- -- -- Path of the XML database export. -- Ścieżka eksportu bazy danych XML. -- -- -- Path of the new database. -- Ścieżka nowej bazy danych. -- -- -- Successfully imported database. -- Pomyślnie zaimportowano bazę danych. -- -- -- Unknown command %1 -- Nieznane polecenie %1 -- -- -- Flattens the output to single lines. -- Spłaszcza dane wyjściowe do pojedynczych wierszy. -- -- -- Only print the changes detected by the merge operation. -- Drukuj tylko zmiany wykryte przez operację scalania. -- -- -- Yubikey slot for the second database. -- Gniazdo YubiKey dla drugiej bazy danych. -- -- -- Successfully merged %1 into %2. -- Pomyślnie scalono %1 z %2. -- -- -- Database was not modified by merge operation. -- Baza danych nie została zmodyfikowana operacją scalania. -- -- -- Moves an entry to a new group. -- Przenosi wpis do nowej grupy. -- -- -- Path of the entry to move. -- Ścieżka wpisu do przeniesienia. -- -- -- Path of the destination group. -- Ścieżka grupy docelowej. -- -- -- Could not find group with path %1. -- Nie można odnaleźć grupy ze ścieżką %1. -- -- -- Entry is already in group %1. -- Wpis jest już w grupie %1. -- -- -- Successfully moved entry %1 to group %2. -- Pomyślnie przeniesiono wpis %1 do grupy %2. -- -- -- Open a database. -- Otwórz bazę danych. -- -- -- Path of the group to remove. -- Ścieżka grupy do usunięcia. -- -- -- Cannot remove root group from database. -- Nie można usunąć grupy głównej z bazy danych. -- -- -- Successfully recycled group %1. -- Pomyślnie przetworzono grupę %1. -- -- -- Successfully deleted group %1. -- Pomyślnie usunięto grupę %1. -- -- -- Failed to open database file %1: not found -- Nie można otworzyć pliku bazy danych %1: nie znaleziono -- -- -- Failed to open database file %1: not a plain file -- Nie można otworzyć pliku bazy danych %1: nie jest to zwykły plik -- -- -- Failed to open database file %1: not readable -- Nie można otworzyć pliku bazy danych %1: nieczytelny -- -- -- Enter password to unlock %1: -- Wprowadź hasło, aby odblokować %1: -- -- -- Invalid YubiKey slot %1 -- Nieprawidłowe gniazdo YubiKey %1 -- -- -- Enter password to encrypt database (optional): -- Wprowadź hasło do szyfrowania bazy danych (opcjonalnie): -- -- -- HIBP file, line %1: parse error -- Plik HIBP, wiersz %1: błąd analizy -- -- -- Secret Service Integration -- Integracja usługi sekretnej -- -- -- User name -- Nazwa użytkownika -- -- -- Password for '%1' has been leaked %2 time(s)! -- Hasło do '%1' wyciekło %2 raz!Hasło do '%1' wyciekło %2 razy!Hasło do '%1' wyciekło %2 razy!Hasło do '%1' wyciekło %2 razy! -- -- -- Invalid password generator after applying all options -- Nieprawidłowy generator haseł po zastosowaniu wszystkich opcji -- -- -- Show the protected attributes in clear text. -- Pokaż chronione atrybuty w postaci zwykłego tekstu. -- -- -- Browser Plugin Failure -- Błąd wtyczki przeglądarki -- -- -- Could not save the native messaging script file for %1. -- Nie można zapisać pliku skryptu wiadomości natywnej dla %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Skopiuj dany atrybut do schowka. Domyślnie "hasło", jeśli nie jest określony. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Skopiuj bieżący TOTP do schowka (odpowiednik "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Skopiuj atrybut wpisu do schowka. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- BŁĄD: Proszę określić jeden z --atrybut lub --totp, a nie oba. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- BŁĄD: atrybut %1 jest niejednoznaczny, jest zgodny z %2. -- -- -- Attribute "%1" not found. -- Nie znaleziono atrybutu "%1". -- -- -- Entry's "%1" attribute copied to the clipboard! -- Atrybut "%1" wpisu skopiowany do schowka! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Gniazdo Yubikey i opcjonalny numer seryjny używane do uzyskiwania dostępu do bazy danych (np. 1:7370001). -- -- -- slot[:serial] -- gniazdo[:numer seryjny] -- -- -- Target decryption time in MS for the database. -- Docelowy czas odszyfrowywania w ms dla bazy danych. -- -- -- time -- czas -- -- -- Set the key file for the database. -- Ustaw plik klucza dla bazy danych. -- -- -- Set a password for the database. -- Ustaw hasło bazy danych. -- -- -- Invalid decryption time %1. -- Nieprawidłowy czas odszyfrowywania %1. -- -- -- Target decryption time must be between %1 and %2. -- Docelowy czas odszyfrowywania musi wynosić od %1 do %2. -- -- -- Failed to set database password. -- Nie można ustawić hasła bazy danych. -- -- -- Benchmarking key derivation function for %1ms delay. -- Testowanie wydajności funkcji derywacji klucza dla opóźnienia %1ms. -- -- -- Setting %1 rounds for key derivation function. -- Ustawienie %1 rund dla funkcji derywacji klucza. -- -- -- error while setting database key derivation settings. -- błąd podczas tworzenia ustawień derywacji klucza. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formatowanie do użycia podczas eksportowania. Dostępne opcje to 'xml' lub 'csv'. Domyślnie wartość 'xml'. -- -- -- Unable to import XML database: %1 -- Nie można zaimportować bazy danych XML: %1 -- -- -- Show a database's information. -- Pokaż informacje o bazie danych. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nazwa: -- -- -- Description: -- Opis: -- -- -- Cipher: -- Szyfr: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Kosz jest włączony. -- -- -- Recycle bin is not enabled. -- Kosz nie jest włączony. -- -- -- Invalid command %1. -- Nieprawidłowe polecenie %1. -- -- -- Invalid YubiKey serial %1 -- Nieprawidłowy numer seryjny YubiKey %1 -- -- -- Please touch the button on your YubiKey to continue… -- Proszę dotknąć przycisku na YubiKey, aby kontynuować… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Czy chcesz utworzyć bazę danych z pustym hasłem? [t/N]: -- -- -- Repeat password: -- Powtarzanie hasła: -- -- -- Error: Passwords do not match. -- Błąd: hasła nie są zgodne. -- -- -- All clipping programs failed. Tried %1 -- -- Wszystkie programy obcinające zawiodły. Próbowano %1 -- -- -- -- AES (%1 rounds) -- AES (rundy: %1) -- -- -- AES 256-bit -- AES 256-bitowy -- -- -- Twofish 256-bit -- Twofish 256-bitowy -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bitowy {20 256-?} -- -- -- Benchmark %1 delay -- Test wydajności opóźnienia %1 -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms%1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s%1 s%1 s -- -- -- path to a custom local config file -- ścieżka do lokalnego pliku z ustawieniami -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- OSTRZEŻENIE: Używasz starego formatu pliku klucza, który może nie być --obsługiwany przez KeePassXC w przyszłości. -- --Rozważ wygenerowanie nowego pliku klucza. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 rundy, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – zalecany) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- Unsupported key file version: %1 -- Nieobsługiwana wersja pliku klucza: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Niezgodność sumy kontrolnej! Plik klucza może być uszkodzony. -- -- -- Unexpected key file data! Key file may be corrupt. -- Nieoczekiwane dane pliku klucza! Plik klucza może być uszkodzony. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Błąd wewnętrzny zlib podczas kompresowania: -- -- -- Error writing to underlying device: -- Błąd w zapisie na urządzenie: -- -- -- Error opening underlying device: -- Błąd w otwieraniu z urządzenia: -- -- -- Error reading data from underlying device: -- Błąd w odczycie danych z urządzenia: -- -- -- Internal zlib error when decompressing: -- Błąd wewnętrzny zlib podczas dekompresowania: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Format gzip nie wspierany przez tę wersję zlib. -- -- -- Internal zlib error: -- Błąd wewnętrzny zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Pokaż również wpisy, które zostały wykluczone z raportów -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Umieść wskaźnik myszy nad powodem, aby wyświetlić dodatkowe szczegóły. Kliknij dwukrotnie wpisy, aby edytować. -- -- -- Bad -- Password quality -- Zła -- -- -- Bad — password must be changed -- Złe — hasło musi zostać zmienione -- -- -- Poor -- Password quality -- Uboga -- -- -- Poor — password should be changed -- Ubogie — hasło powinno zostać zmienione -- -- -- Weak -- Password quality -- Słaba -- -- -- Weak — consider changing the password -- Słabe — rozważ zmianę hasła -- -- -- (Excluded) -- (Wykluczone) -- -- -- This entry is being excluded from reports -- Ten wpis jest wykluczony z raportów -- -- -- Please wait, health data is being calculated... -- Proszę czekać, dane zdrowotne są obliczane... -- -- -- Congratulations, everything is healthy! -- Gratulacje, wszystko jest zdrowe! -- -- -- Title -- Tytuł -- -- -- Path -- Ścieżka -- -- -- Score -- Ocena -- -- -- Reason -- Powód -- -- -- Edit Entry... -- Edytuj wpis... -- -- -- Exclude from reports -- Wyklucz z raportów -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- UWAGA: Ten raport wymaga wysłania informacji do serwisu internetowego Have I Been Pwned (https://haveibeenpwned.com). Jeśli będziesz kontynuować, hasła bazy danych zostaną zahashowane kryptograficznie i pierwsze pięć znaków tych hashów zostanie wysłane bezpiecznie do tej usługi. Twoja baza danych pozostanie bezpieczna i nie będzie można jej odtworzyć na podstawie tych informacji. Jednak liczba wysłanych haseł i adres IP będą widoczne dla tej usługi. -- -- -- Perform Online Analysis -- Przeprowadź analizę online -- -- -- Also show entries that have been excluded from reports -- Pokaż również wpisy, które zostały wykluczone z raportów -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Ta kompilacja KeePassXC nie ma funkcji sieciowych. Sieć jest wymagana do sprawdzania haseł w bazach danych Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Gratulacje, bez narażonych haseł! -- -- -- Title -- Tytuł -- -- -- Path -- Ścieżka -- -- -- Password exposed… -- Hasło narażone… -- -- -- (Excluded) -- (Wykluczone) -- -- -- This entry is being excluded from reports -- Ten wpis jest wykluczony z raportów -- -- -- once -- raz -- -- -- up to 10 times -- do 10 razy -- -- -- up to 100 times -- do 100 razy -- -- -- up to 1000 times -- do 1000 razy -- -- -- up to 10,000 times -- do 10 000 razy -- -- -- up to 100,000 times -- do 100 000 razy -- -- -- up to a million times -- do miliona razy -- -- -- millions of times -- miliony razy -- -- -- Edit Entry... -- Edytuj wpis... -- -- -- Exclude from reports -- Wyklucz z raportów -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Najedź kursorem na wiersze z ikonami błędów, aby uzyskać więcej informacji. -- -- -- Name -- Nazwa -- -- -- Value -- Wartość -- -- -- Please wait, database statistics are being calculated... -- Proszę czekać, statystyki bazy danych są obliczane... -- -- -- Database name -- Nazwa bazy danych -- -- -- Description -- Opis -- -- -- Location -- Lokalizacja -- -- -- Last saved -- Ostatnio zapisane -- -- -- Unsaved changes -- Niezapisane zmiany -- -- -- yes -- tak -- -- -- no -- nie -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Baza danych została zmodyfikowana, ale zmiany nie zostały jeszcze zapisane na dysku. -- -- -- Number of groups -- Liczba grup -- -- -- Number of entries -- Liczba wpisów -- -- -- Number of expired entries -- Liczba wygasłych wpisów -- -- -- The database contains entries that have expired. -- Baza danych zawiera wpisy, które wygasły. -- -- -- Unique passwords -- Niepowtarzalne hasła -- -- -- Non-unique passwords -- Powtarzalne hasła -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Ponad 10% haseł jest ponownie wykorzystywanych. Jeśli to możliwe, używaj niepowtarzalnych haseł. -- -- -- Maximum password reuse -- Maksymalne ponowne użycie hasła -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Niektóre hasła są używane więcej niż trzy razy. Jeśli to możliwe, używaj niepowtarzalnych haseł. -- -- -- Number of short passwords -- Liczba krótkich haseł -- -- -- Recommended minimum password length is at least 8 characters. -- Zalecana minimalna długość hasła to co najmniej 8 znaków. -- -- -- Number of weak passwords -- Liczba słabych haseł -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Zaleca się używanie długich, losowych haseł z oceną 'dobra' lub 'znakomita'. -- -- -- Entries excluded from reports -- Wpisy wykluczone z raportów -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Wykluczenie wpisów z raportów, np. ponieważ wiadomo, że mają słabe hasło, niekoniecznie jest to problem, ale należy na to uważać. -- -- -- Average password length -- Średnia długość hasła -- -- -- %1 characters -- %1 znaków -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Średnia długość hasła wynosi mniej niż dziesięć znaków. Dłuższe hasła zapewniają większe bezpieczeństwo. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Połączenie agenta nie powiodło się. -- -- -- Agent protocol error. -- Błąd protokołu agenta. -- -- -- No agent running, cannot add identity. -- Żaden agent nie działa, nie można dodać tożsamości. -- -- -- No agent running, cannot remove identity. -- Żaden agent nie działa, nie można usunąć tożsamości. -- -- -- Agent refused this identity. Possible reasons include: -- Agent odmówił tej tożsamości. Możliwe przyczyny to: -- -- -- The key has already been added. -- Klucz został już dodany. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Ograniczony czas życia nie jest obsługiwany przez agenta (sprawdź opcje). -- -- -- A confirmation request is not supported by the agent (check options). -- Żądanie potwierdzenia nie jest obsługiwane przez agenta (sprawdź opcje). -- -- -- Key identity ownership conflict. Refusing to add. -- Konflikt własności tożsamości klucza. Odmowa dodania. -- -- -- No agent running, cannot list identities. -- Żaden agent uruchomiony, nie może wyświetlić listy tożsamości. -- -- -- -- SearchHelpWidget -- -- Search Help -- Przeszukaj pomoc -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Zapytania wyszukiwania są następujące: [modyfikatory][pole:]["]zapytanie["] -- -- -- Every search term must match (ie, logical AND) -- Każde zapytanie wyszukiwania musi pasować (tj. logiczny AND) -- -- -- Modifiers -- Modyfikatory -- -- -- exclude term from results -- wyklucz zapytanie z wyników -- -- -- match term exactly -- dopasuj dokładnie zapytanie -- -- -- use regex in term -- użyj wyrażenia regularnego w zapytaniu -- -- -- Fields -- Pola -- -- -- Term Wildcards -- Wieloznacznik zapytania -- -- -- match anything -- dopasuj cokolwiek -- -- -- match one -- dopasuj jeden -- -- -- logical OR -- logiczny OR -- -- -- Examples -- Przykłady -- -- -- -- SearchWidget -- -- Search -- Szukaj -- -- -- Limit search to selected group -- Ogranicz wyszukiwanie do wybranych grup -- -- -- Search Help -- Przeszukaj pomoc -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Szukaj (%1)... -- -- -- Case sensitive -- Rozróżniaj wielkość znaków -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opcje -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Włącz integrację KeepassXC z usługą sekretną Freedesktop.org -- -- -- General -- Ogólne -- -- -- Show notification when credentials are requested -- Pokaż powiadomienie, gdy wymagane są dane uwierzytelniające -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Jeżeli kosz jest włączony dla bazy danych, wpisy zostaną przeniesione do kosza bezpośrednio. W przeciwnym razie zostaną one usunięte bez potwierdzenia.</p><p>Nadal będzie wyświetlany monit, jeśli jakiekolwiek wpisy są przywoływane przez inne.</p></body></html> -- -- -- Exposed database groups: -- Odsłonięte grupy bazy danych: -- -- -- Authorization -- Uwierzytelnienie -- -- -- These applications are currently connected: -- Aplikacje te są obecnie podłączone: -- -- -- Don't confirm when entries are deleted by clients -- Nie potwierdzaj, kiedy wpisy są usuwane przez klientów -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Błąd:</b> Nie można połączyć się z DBus. Sprawdź konfigurację DBus. -- -- -- <b>Warning:</b> -- <b>Ostrzeżenie:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Zapisz bieżące zmiany, aby aktywować wtyczkę i włączyć edycję tej sekcji. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktywuj -- -- -- Allow export -- Pozwól eksportować -- -- -- Allow import -- Pozwól importować -- -- -- Own certificate -- Własny certyfikat -- -- -- Fingerprint: -- Odcisk palca: -- -- -- Certificate: -- Certyfikat: -- -- -- Signer -- Podpisujący -- -- -- Key: -- Klucz: -- -- -- Generate -- Wygeneruj -- -- -- Import -- Importuj -- -- -- Export -- Eksportuj -- -- -- Imported certificates -- Importowane certyfikaty -- -- -- Trust -- Zaufaj -- -- -- Ask -- Zapytaj -- -- -- Untrust -- Nie ufaj -- -- -- Remove -- Usuń -- -- -- Path -- Ścieżka -- -- -- Status -- Status -- -- -- Fingerprint -- Odcisk palca -- -- -- Certificate -- Certyfikat -- -- -- Trusted -- Zaufany -- -- -- Untrusted -- Niezaufany -- -- -- Unknown -- Nieznany -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Plik klucza KeeShare -- -- -- All files -- Wszystkie pliki -- -- -- Select path -- Wybierz ścieżkę -- -- -- Exporting changed certificate -- Eksportowanie zmienionego certyfikatu -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Wyeksportowany certyfikat nie jest tym samym, co używany. Czy chcesz wyeksportować bieżący certyfikat? -- -- -- Signer: -- Podpisujący: -- -- -- Allow KeeShare imports -- Zezwalaj na importowanie KeeShare -- -- -- Allow KeeShare exports -- Zezwalaj na eksportowanie KeeShare -- -- -- Only show warnings and errors -- Pokazuj tylko ostrzeżenia i błędy -- -- -- Key -- Klucz -- -- -- Signer name field -- Pole nazwy osoby podpisującej -- -- -- Generate new certificate -- Wygeneruj nowy certyfikat -- -- -- Import existing certificate -- Importuj istniejący certyfikat -- -- -- Export own certificate -- Eksportuj własny certyfikat -- -- -- Known shares -- Znane zasoby -- -- -- Trust selected certificate -- Zaufaj wybranym certyfikatom -- -- -- Ask whether to trust the selected certificate every time -- Pytaj za każdym razem, czy chcesz ufać wybranemu certyfikatowi -- -- -- Untrust selected certificate -- Przestań ufać wybranemu certyfikatowi -- -- -- Remove selected certificate -- Usuń wybrany certyfikat -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Zastąpienie podpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany -- -- -- Could not write export container (%1) -- Nie można zapisać kontenera eksportu (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Nie można osadzić podpisu: Nie można otworzyć pliku do zapisu (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Nie można osadzić podpisu: Nie można zapisać pliku (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Nie można osadzić bazy danych: Nie można otworzyć pliku do zapisu (%1) -- -- -- Could not embed database: Could not write file (%1) -- Nie można osadzić bazy danych: Nie można zapisać pliku (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Zastąpienie niepodpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany -- -- -- Could not write export container -- Nie można zapisać kontenera eksportu -- -- -- Unexpected export error occurred -- Wystąpił nieoczekiwany błąd eksportu -- -- -- -- ShareImport -- -- Import from container without signature -- Importuj z kontenera bez podpisu -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Nie możemy zweryfikować źródła udostępnionego kontenera, ponieważ nie jest on podpisany. Czy na pewno chcesz importować dane z %1? -- -- -- Import from container with certificate -- Importuj z kontenera z certyfikatem -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Czy chcesz zaufać %1 z odciskiem palca %2 z %3? {1 ?} {2 ?} -- -- -- Not this time -- Nie tym razem -- -- -- Never -- Nigdy -- -- -- Always -- Zawsze -- -- -- Just this time -- Tylko tym razem -- -- -- Signed share container are not supported - import prevented -- Podpisany kontener udostępniania nie jest obsługiwany - import został zablokowany -- -- -- File is not readable -- Plik nie jest czytelny -- -- -- Invalid sharing container -- Nieprawidłowy kontener udostępniania -- -- -- Untrusted import prevented -- Uniemożliwiono niezaufany import -- -- -- Successful signed import -- Pomyślnie podpisany import -- -- -- Unsigned share container are not supported - import prevented -- Niepodpisany kontener udostępniania nie jest obsługiwany - import został zablokowany -- -- -- Successful unsigned import -- Pomyślnie niepodpisany import -- -- -- File does not exist -- Plik nie istnieje -- -- -- Unknown share container type -- Nieznany typ kontenera udostępniania -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import z %1 zakończył się niepomyślnie (%2) -- -- -- Import from %1 successful (%2) -- Import z %1 zakończył się pomyślnie (%2) -- -- -- Imported from %1 -- Importowane z %1 -- -- -- Export to %1 failed (%2) -- Eksport do %1 zakończył się niepomyślnie (%2) -- -- -- Export to %1 successful (%2) -- Eksport do %1 zakończył się pomyślnie (%2) -- -- -- Export to %1 -- Eksportuj do %1 -- -- -- Multiple import source path to %1 in %2 -- Wiele ścieżek źródłowych importu do %1 w %2 -- -- -- Conflicting export target path %1 in %2 -- Sprzeczna ścieżka docelowa eksportu %1 w %2 -- -- -- -- TotpDialog -- -- Timed Password -- Hasło zależne od czasu -- -- -- 000000 -- 000000 -- -- -- Copy -- Skopiuj -- -- -- Expires in <b>%n</b> second(s) -- Wygasa za <b>%n</b> sekundęWygasa za <b>%n</b> sekundyWygasa za <b>%n</b> sekundWygasa za <b>%n</b> sekund -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Skopiuj -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- UWAGA: Te ustawienia TOTP są niestandardowe i mogą nie działać z innymi autoryzatoram. -- -- -- There was an error creating the QR code. -- Wystąpił błąd podczas tworzenia kodu QR. -- -- -- Closing in %1 seconds. -- Zamykanie za %1 sekund. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Ustaw TOTP -- -- -- Default RFC 6238 token settings -- Domyślne ustawienia tokenu RFC 6238 -- -- -- Steam token settings -- Ustawienia tokenu Steam -- -- -- Use custom settings -- Użyj niestandardowych ustawień -- -- -- Custom Settings -- Ustawienia niestandardowe -- -- -- Time step: -- Krok czasowy: -- -- -- sec -- Seconds -- s -- -- -- Code size: -- Rozmiar kodu: -- -- -- Secret Key: -- Klucz sekretny: -- -- -- Secret key must be in Base32 format -- Klucz sekretny musi być w formacie Base32 -- -- -- Secret key field -- Pole klucza sekretnego -- -- -- Algorithm: -- Algorytm: -- -- -- Time step field -- Pole kroku czasu -- -- -- digits -- cyfry -- -- -- Invalid TOTP Secret -- Nieprawidłowy sekret TOTP -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Wprowadzono nieprawidłowy klucz sekretny. Klucz musi być w formacie Base32. --Przykład: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Potwierdź usunięcie ustawień TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Czy na pewno chcesz usunąć ustawienia TOTP dla tego wpisu? -- -- -- -- URLEdit -- -- Invalid URL -- Nieprawidłowy adres URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Sprawdzanie aktualizacji -- -- -- Checking for updates... -- Sprawdzanie aktualizacji... -- -- -- Close -- Zamknij -- -- -- Update Error! -- Błąd aktualizacji! -- -- -- An error occurred in retrieving update information. -- Wystąpił błąd podczas pobierania informacji o aktualizacji. -- -- -- Please try again later. -- Spróbuj ponownie później. -- -- -- Software Update -- Aktualizacja oprogramowania -- -- -- A new version of KeePassXC is available! -- Nowa wersja KeePassXC jest dostępna! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 jest już dostępny — masz %2. -- -- -- Download it at keepassxc.org -- Pobierz to z keepassxc.org -- -- -- You're up-to-date! -- Jesteś aktualny! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 to obecnie najnowsza dostępna wersja -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Zacznij bezpiecznie przechowywać swoje hasła w bazie danych KeePassXC -- -- -- Create new database -- Stwórz nową bazę danych -- -- -- Open existing database -- Otwórz istniejącą bazę danych -- -- -- Import from KeePass 1 -- Importuj z KeePass 1 -- -- -- Import from CSV -- Importuj z CSV -- -- -- Recent databases -- Niedawne bazy danych -- -- -- Welcome to KeePassXC %1 -- Witaj w KeePassXC %1 -- -- -- Import from 1Password -- Importuj z 1Password -- -- -- Open a recent database -- Otwórz ostatnią bazę danych -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] skonfigurowane gniazdo - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] wyzwanie-odpowiedź - gniazdo %3-%4 -- -- -- Press -- Naciśnij -- -- -- Passive -- Pasywny -- -- -- %1 Invalid slot specified - %2 -- %1 określono nieprawidłowe gniazdo - %2 -- -- -- The YubiKey interface has not been initialized. -- Interfejs YubiKey nie został zainicjowany. -- -- -- Hardware key is currently in use. -- Klucz sprzętowy jest obecnie używany. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Nie można odnaleźć klucza sprzętowego o numerze seryjnym %1. Podłącz go, aby kontynuować. -- -- -- Hardware key timed out waiting for user interaction. -- Przekroczono limit czasu klucza sprzętowego oczekującego na interakcję z użytkownikiem. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Podczas uzyskiwania dostępu do klucza sprzętowego wystąpił błąd USB: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Nie można ukończyć wyzwania-odpowiedzi, konkretny błąd to: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Odśwież -- -- -- YubiKey Challenge-Response -- Wyzwanie-odpowiedź YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Jeśli jesteś właścicielem <a href="https://www.yubico.com/">YubiKey</a>, możesz go użyć do zwiększenia bezpieczeństwa.</p><p>YubiKey wymaga zaprogramowania jednego z jego gniazd jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Wyzwanie-odpowiedź HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Odśwież tokeny sprzętowe -- -- -- Hardware key slot selection -- Wybór gniazda klucza sprzętowego -- -- -- Could not find any hardware keys! -- Nie można znaleźć żadnych kluczy sprzętowych! -- -- -- Selected hardware key slot does not support challenge-response! -- Wybrane gniazdo klucza sprzętowego nie obsługuje wyzwania-odpowiedzi! -- -- -- Detecting hardware keys… -- Wykrywanie kluczy sprzętowych… -- -- -- No hardware keys detected -- Nie wykryto kluczy sprzętowych -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pt_BR.ts keepassxc-2.6.4-patched/share/translations/keepassx_pt_BR.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_pt_BR.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_pt_BR.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7891 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Sobre o KeePassXC -- -- -- About -- Sobre -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Reporte erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC é distribuído sob os termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU. -- -- -- Contributors -- Colaboradores -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver Colaborações no GitHub</a> -- -- -- Debug Info -- Informações de Depuração -- -- -- Include the following information whenever you report a bug: -- Inclua as informações abaixo quando reportar um erro: -- -- -- Copy to clipboard -- Copiar para a área de transferência -- -- -- Project Maintainers: -- Mantenedores do Projeto: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- A equipe KeePassXC agradece especialmente à debfx pela criação do KeePassX original. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Usar o OpenSSH para Windows em vez de Pageant -- -- -- Enable SSH Agent integration -- Habilitar integração com agente SSH -- -- -- SSH_AUTH_SOCK value -- Valor de SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Sobrescrever SSH_AUTH_SOCK -- -- -- (empty) -- (vazio) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Nenhum socket de agente SSH disponível. Verifique se uma variável de ambiente SSH_AUTH_SOCK existe ou configure um substituto. -- -- -- SSH Agent connection is working! -- A conexão com o agente SSH está funcionando corretamente! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Configurações do Aplicativo -- -- -- General -- Geral -- -- -- Security -- Segurança -- -- -- Access error for config file %1 -- Erro de acesso para o arquivo de configuração %1 -- -- -- Icon only -- Apenas ícones -- -- -- Text only -- Apenas texto -- -- -- Text beside icon -- Texto ao lado do ícone -- -- -- Text under icon -- Texto abaixo do ícone -- -- -- Follow style -- Seguir o estilo -- -- -- Reset Settings? -- Restaurar Configurações? -- -- -- Are you sure you want to reset all general and security settings to default? -- Você tem certeza que deseja restaurar todas as configurações gerais e de segurança para o padrão? -- -- -- Monochrome (light) -- Monocromático (claro) -- -- -- Monochrome (dark) -- Monocromático (escuro) -- -- -- Colorful -- Colorido -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Configurações Básicas -- -- -- Startup -- Inicialização -- -- -- Start only a single instance of KeePassXC -- Iniciar apenas uma instância do KeePassXC -- -- -- Minimize window at application startup -- Iniciar programa com janela minimizada -- -- -- File Management -- Gerenciamento de Arquivo -- -- -- Backup database file before saving -- Fazer cópia de segurança do banco de dados antes de salvar -- -- -- Automatically save after every change -- Salvar automaticamente depois de cada alteração -- -- -- Automatically reload the database when modified externally -- Automaticamente recarregar o banco de dados quando houver modificações externas -- -- -- Entry Management -- Gerenciamento de entrada -- -- -- Use group icon on entry creation -- Usar ícone de grupo na criação da entrada -- -- -- Minimize instead of app exit -- Minimizar em vez de sair do aplicativo -- -- -- Show a system tray icon -- Mostrar um ícone na bandeja do sistema -- -- -- Hide window to system tray when minimized -- Ocultar janela na bandeja de sistema quando minimizada -- -- -- Auto-Type -- Autodigitação -- -- -- Use entry title to match windows for global Auto-Type -- Usar o título de entrada para coincidir com a janela para Auto-Digitar global -- -- -- Use entry URL to match windows for global Auto-Type -- Use o URL de entrada para coincidir com a janela para Auto-Digitar global -- -- -- Always ask before performing Auto-Type -- Sempre perguntar antes de executar o Auto-Digitar -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Barra de Ferramentas Móvel -- -- -- Remember previously used databases -- Lembrar dos bancos de dados usados anteriormente -- -- -- Load previously open databases on startup -- Carregar bancos de dados previamente abertos na inicialização -- -- -- Remember database key files and security dongles -- Lembrar do arquivo-chave e dongles de segurança do banco de dados -- -- -- Check for updates at application startup once per week -- Verificar por atualizações na inicialização do aplicativo uma vez por semana -- -- -- Include beta releases when checking for updates -- Incluir versões betas durante a verificação de atualizações -- -- -- Language: -- Idioma: -- -- -- (restart program to activate) -- (reiniciar programa para ativar) -- -- -- Minimize window after unlocking database -- Minimizar a janela após destravar banco de dados -- -- -- Minimize when opening a URL -- Minimizar quando abrir uma URL -- -- -- Hide window when copying to clipboard -- Ocultar a janela quando copiar para área de transferência -- -- -- Minimize -- Minimizar -- -- -- Drop to background -- Enviar para trás -- -- -- Favicon download timeout: -- Tempo limite de download Favicon: -- -- -- Website icon download timeout in seconds -- Esgotamento de tempo do download de ícone do website em segundos -- -- -- sec -- Seconds -- seg -- -- -- Toolbar button style -- Estilo de botão da barra de ferramentas -- -- -- Language selection -- Seleção de idioma -- -- -- Global auto-type shortcut -- Atalho para Auto-Digitar global -- -- -- Auto-type character typing delay milliseconds -- Digitação de caracteres com Auto-Digitar com atraso de milissegundos -- -- -- Auto-type start delay milliseconds -- Auto-Digitar inicia com atraso de milissegundos -- -- -- Automatically launch KeePassXC at system startup -- Iniciar KeePassXC automaticamente com a inicialização do sistema -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Salvar os arquivos de banco de dados com segurança (desative se tiver problemas com o Dropbox, etc) -- -- -- User Interface -- Interface do Usuário -- -- -- Toolbar button style: -- Estilo de botão da barra de ferramentas: -- -- -- Use monospaced font for notes -- Usar fonte monoespaçada para notas -- -- -- Tray icon type: -- Tipo de ícone da área de notificação: -- -- -- Reset settings to default… -- Reverter às configurações originais... -- -- -- Auto-Type typing delay: -- Atraso para digitação automática: -- -- -- Global Auto-Type shortcut: -- Atalho para Auto-Digitação global: -- -- -- Auto-Type start delay: -- Atraso para início de digitação automática: -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Tempos limite -- -- -- Clear clipboard after -- Limpar área de transferência após -- -- -- sec -- Seconds -- seg -- -- -- Lock databases after inactivity of -- Travar bancos de dados após inatividade de -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Esqueça o TouchID após inatividade de -- -- -- Convenience -- Conveniência -- -- -- Lock databases when session is locked or lid is closed -- Bloqueio de bancos de dados quando a sessão estiver bloqueada ou a tampa está fechada -- -- -- Forget TouchID when session is locked or lid is closed -- Esqueça o TouchID quando a sessão está bloqueada ou a tampa está fechada -- -- -- Lock databases after minimizing the window -- Bloquear bancos de dados após minimizar a janela -- -- -- Re-lock previously locked database after performing Auto-Type -- Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar -- -- -- Hide passwords in the entry preview panel -- Ocultar senhas no painel da prévia de entrada -- -- -- Hide entry notes by default -- Esconder notas de entrada por padrão -- -- -- Privacy -- Privacidade -- -- -- Use DuckDuckGo service to download website icons -- Usar o serviço DuckDuckGo para baixar ícones de websites -- -- -- Clipboard clear seconds -- Limpeza da área de transferência em segundos -- -- -- Touch ID inactivity reset -- Redefinição de inatividade do Touch ID -- -- -- Database lock timeout seconds -- Tempo limite em segundos para trancar o banco de dados -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Limpar pesquisa depois de -- -- -- Require password repeat when it is visible -- Requisitar repetição da senha quando visível -- -- -- Hide passwords when editing them -- Ocultar senhas ao editá-las -- -- -- Use placeholder for empty password fields -- Utilizar espaço reservado para campos de senha vazios -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Não foi possível localizar uma entrada que corresponda ao título da janela: -- -- -- Auto-Type - KeePassXC -- Auto-Digitação - KeePassXC -- -- -- Auto-Type -- Auto-Digitação -- -- -- The Syntax of your Auto-Type statement is incorrect! -- A sintaxe da sua sequência de Auto-Digitação está incorreta! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Este comando de Auto-Digitação contém um tempo de espera muito longo. Você tem certeza que deseja continuar? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Este comando Autotipo contém pressionamentos de teclas muito lentos. Você realmente deseja prosseguir? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Este comando Auto-Type contém os argumentos que são repetidos muitas vezes. Você realmente deseja prosseguir? -- -- -- Permission Required -- Permissão Requerida -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requer a permissão de Acessibilidade para realizar Auto-Digitar no nível de entrada. Se você já garantiu as permissões, você deve reiniciar o KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Janela -- -- -- Sequence -- Sequência -- -- -- Default sequence -- Sequência pré-definida -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de usuário -- -- -- Sequence -- Sequência -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copiar n&ome de usuário -- -- -- Copy &password -- Copiar &senha -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permissão Requerida -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC requer as permissões de Acessibilidade e de Gravação de Tela para realizar o Auto-Digitar global. Gravação de Tela é necessário para usar o título da janela e encontrar as entradas. Se você já garantiu as permissões, você deve reiniciar o KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Digitação - KeePassXC -- -- -- Select entry to Auto-Type: -- Escolha uma entrada para Auto-Digitar: -- -- -- Search... -- Buscar... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Requisição de Acesso ao Browser -- -- -- %1 is requesting access to the following entries: -- %1 está requisitando acesso aos seguintes itens: -- -- -- Remember access to checked entries -- Lembrar acesso aos itens marcados -- -- -- Remember -- Lembrar -- -- -- Allow access to entries -- Permitir acesso aos itens -- -- -- Allow Selected -- Permitir Selecionados -- -- -- Deny All -- Negar Todos -- -- -- Disable for this site -- Desabilitar para este site -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Salvar Entrada -- -- -- Ok -- Ok -- -- -- Cancel -- Cancelar -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Você tem vários bancos de dados abertos. --Por favor, selecione o banco de dados correto para salvar as credenciais. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nova associação de chaves requisitada -- -- -- Save and allow access -- Salvar e permitir acesso -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Substituir chave existente? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Uma chave de criptografia compartilhada com o nome "% 1" já existe. --Você deseja sobrescreve-la? -- -- -- KeePassXC: Update Entry -- KeePassXC: Atualizar entrada -- -- -- Do you want to update the information in %1 - %2? -- Deseja atualizar as informações em %1 - %2? -- -- -- Abort -- Cancelar -- -- -- Converting attributes to custom data… -- Convertendo atributos para dados personalizados... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Convertido KeePassHTTP atributos -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Atributos convertidos com sucesso de %1 entrada(s). --Movido %2 chaves para dados personalizados. -- -- -- Successfully moved %n keys to custom data. -- Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- O banco de dados ativo não contém uma entrada com atributos KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Configurações de integração do navegador herdado detectadas -- -- -- KeePassXC: Create a new group -- KeePassXC: Crie um novo grupo -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Um pedido para criar um novo grupo "%1" foi recebido. --Você quer criar este grupo? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados. --Isso é necessário para manter as conexões atuais do navegador. --Gostaria de migrar suas configurações existentes agora? -- -- -- Don't show this warning again -- Não mostrar este alerta novamente -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Você recebeu um pedido de associação para o seguinte banco de dados: --%1 -- --Dê à conexão um nome único ou um ID, por exemplo: --chrome-laptop -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Diálogo -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Isso é necessário para acessar os seus bancos de dados usando o KeePassXC-Browser -- -- -- Enable browser integration -- Habilitar integração com navegadores -- -- -- General -- Geral -- -- -- Browsers installed as snaps are currently not supported. -- Navegadores instalados como snaps atualmente não são suportados. -- -- -- Enable integration for these browsers: -- Habilitar integração para estes navegadores: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Exibir uma notificação quando as credenciais forem solicitadas -- -- -- Request to unlock the database if it is locked -- Solicitar para destrancar o banco de dados se estiver bloqueado -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Apenas entradas com o mesmo esquema (http://, https://,...) são retornados. -- -- -- Match URL scheme (e.g., https://...) -- Combinar com esquema de URL (por exemplo, https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Retorna apenas as melhores correspondências para um URL específico em vez de todas entradas para todo o domínio. -- -- -- Return only best-matching credentials -- Retornar apenas as credenciais com melhor correspondência -- -- -- Returns expired credentials. String [expired] is added to the title. -- Retornou credenciais expiradas. [expired] foi adicionado ao título. -- -- -- Allow returning expired credentials -- Permitir retorno de credenciais expiradas -- -- -- All databases connected to the extension will return matching credentials. -- Todos os bancos de dados conectados a extensão irão retornar as credenciais correspondentes. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Pesquisar em todas as bases de dados por credenciais correspondentes -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Ordenar credenciais correspondentes por título -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Ordenar credenciais correspondentes por nome de usuário -- -- -- Advanced -- Avançado -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nunca pedir confirmação antes de acessar as credenciais -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nunca pedir confirmação antes de atualizar as credenciais -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Não pedir permissão para HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Criação automática ou atualizações não são suportadas para os valores dos campos. -- -- -- Return advanced string fields which start with "KPH: " -- Mostrar campos avançados que começam com "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Não mostrar o popup sugerindo migração das configurações do KeePassHTTP legado. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Não alertar sobre a migração das configurações do KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Atualiza os caminhos dos binários do KeePassXC ou keepassxc-proxy automaticamente para o envio de mensagens de scripts nativo na inicialização. -- -- -- Update native messaging manifest files at startup -- Atualizar arquivos de manifesto de mensagens nativas na inicialização -- -- -- Use a custom proxy location if you installed a proxy manually. -- Usar um local de proxy personalizado se você instalou um proxy manualmente. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Utilizar endereço de proxy customizado: -- -- -- Custom proxy location field -- Campo de localização proxy personalizado -- -- -- Browser for custom proxy file -- Procurar por arquivo proxy personalizado -- -- -- Browse... -- Button for opening file dialog -- Procurar... -- -- -- Use a custom browser configuration location: -- Utilizar localização de configuração de navegador customizada: -- -- -- Browser type: -- Tipo de navegador: -- -- -- Toolbar button style -- Estilo de botão da barra de ferramentas -- -- -- Config Location: -- Localização da configuração: -- -- -- Custom browser location field -- Campo de localização de navegador personalizado -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Navegar para caminho de navegador personalizado -- -- -- Custom extension ID: -- ID de extensão personalizado: -- -- -- Custom extension ID -- ID de extensão personalizado: -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.<br />Você pode obter este script de %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- O KeePassXC-Browser é necessário para que a integração com navegador funcione. Faça o download para %1, %2 e %3. %4 -- -- -- Please see special instructions for browser extension use below -- Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Erro:</b> O endereço de proxy personalizado não foi encontrado!<br/>A integração com o navegador NÃO IRÁ funcionar sem a aplicação de proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>AVISO:</b> As seguintes opções podem ser perigosas! -- -- -- Executable Files -- Arquivos Executáveis -- -- -- All Files -- Todos os arquivos -- -- -- Select custom proxy location -- Selecione localização para o proxy -- -- -- Select native messaging host folder location -- Selecione o local da pasta de host de mensagens nativas -- -- -- -- CloneDialog -- -- Clone Options -- Opções de Clonagem -- -- -- Append ' - Clone' to title -- Anexar '-Clonar' ao título -- -- -- Replace username and password with references -- Substituir o usuário e senha com referências -- -- -- Copy history -- Copiar histórico -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importar campos CSV -- -- -- filename -- nome do arquivo -- -- -- size, rows, columns -- tamanho, linhas, colunas -- -- -- Encoding -- Codificação -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Texto é qualificado por -- -- -- Fields are separated by -- Campos são separados por -- -- -- Comments start with -- Comentários começam com -- -- -- Consider '\' an escape character -- Considere '\' como caractere de escape -- -- -- Preview -- Visualização -- -- -- Imported from CSV file -- Importado do arquivo CSV -- -- -- Original data: -- Dados originais: -- -- -- Error -- Erro -- -- -- Error(s) detected in CSV file! -- Erro(s) detectado(s) no arquivo CSV! -- -- -- [%n more message(s) skipped] -- [%n mais mensagem(ns) ignoradas][%n mais mensagem(ns) ignoradas] -- -- -- CSV import: writer has errors: --%1 -- Importação de CSV: o gravador tem erros: --%1 -- -- -- Text qualification -- Qualificação textual -- -- -- Field separation -- Separação de campos -- -- -- Number of header lines to discard -- Número de linhas do cabeçalho para descartar -- -- -- CSV import preview -- Prever importação de CSV -- -- -- Column Association -- Associação de Coluna -- -- -- Last Modified -- Última modificação -- -- -- Password -- Senha -- -- -- Created -- Criado -- -- -- Notes -- Notas -- -- -- Title -- Título -- -- -- Group -- Grupo -- -- -- URL -- URL -- -- -- Username -- Nome de usuário -- -- -- Header lines skipped -- Linhas do cabeçalho ignoradas -- -- -- First line has field names -- Primeira linha possui nomes dos campos -- -- -- Not Present -- Não Presente -- -- -- Column %1 -- Coluna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ícone -- -- -- -- CsvParserModel -- -- %n column(s) -- %n coluna(s)%n coluna(s) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n bytes -- -- -- %n row(s) -- %n linha%n linhas -- -- -- -- Database -- -- File %1 does not exist. -- Arquivo %1 não existe. -- -- -- Unable to open file %1. -- Não é possível abrir o arquivo %1. -- -- -- Error while reading the database: %1 -- Erro ao ler o banco de dados: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- O arquivo não pode ser gravado, pois é aberto no modo somente leitura. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Chave não transformada. Este é um bug, por favor denuncie para os desenvolvedores! -- -- -- %1 --Backup database located at %2 -- %1 --Backup do banco de dados alocado em %2 -- -- -- Could not save, database does not point to a valid file. -- Não foi possível salvar. Banco de dados não aponta para um arquivo válido. -- -- -- Could not save, database file is read-only. -- Não foi possível salvar. Banco de dados é somente leitura. -- -- -- Database file has unmerged changes. -- O arquivo de banco de dados separou as mudanças. -- -- -- Recycle Bin -- Lixeira -- -- -- Passwords -- Root group name -- Senhas -- -- -- Database save is already in progress. -- Salvamento do banco de dados já está em andamento. -- -- -- Could not save, database has not been initialized! -- Não foi possível salvar, o banco de dados não foi inicializado! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Desbloquear Banco de Dados - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Arquivo-Chave: -- -- -- Refresh -- Atualizar -- -- -- Don't show this warning again -- Não mostrar este alerta novamente -- -- -- All files -- Todos arquivos -- -- -- Key files -- Arquivos-chave -- -- -- Select key file -- Escolha o arquivo-chave -- -- -- Failed to open key file: %1 -- Falha ao abrir o arquivo-chave: %1 -- -- -- Unlock KeePassXC Database -- Destrancar banco de dados do KeePassXC -- -- -- Enter Password: -- Digite a senha: -- -- -- Password field -- Campo de senha -- -- -- Hardware key slot selection -- Seleção de campo de chave de hardware -- -- -- Browse for key file -- Procurar por arquivo-chave -- -- -- Browse... -- Procurar... -- -- -- Refresh hardware tokens -- Atualizar os tokens de hardware -- -- -- Hardware Key: -- Chave de hardware: -- -- -- Hardware key help -- Ajuda da chave física -- -- -- TouchID for Quick Unlock -- TouchID para destrancar rapidamente -- -- -- Unlock failed and no password given -- Destrancar falhou e nenhuma senha foi digitada -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Falha ao destrancar banco de dados e você não digitou uma senha. --Você quer tentar com uma senha "vazia"? -- --Para impedir que esses erros apareçam, você deve ir em "Configurações do banco de dados / Segurança" e resetar sua senha. -- -- -- Retry with empty password -- Tentar novamente com senha vazia -- -- -- Enter Additional Credentials (if any): -- Entre com as credenciais adicionais (se tiver alguma): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Você pode usar uma chave de segurança em hardware, como um <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com campos configurados para HMAC-SHA1</p> --<p>Clique para maiores informações...</p> -- -- -- Key file help -- Ajuda do arquivo-chave -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Não use arquivos de banco de dados (*.kdbx) como arquivo-chave -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Você não pode usar seu arquivo de banco de dados como arquivo-chave. --Se você não tem um arquivo-chave, por favor deixe o campo vazio. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Em adição à sua senha, você pode usar um arquivo secreto para aumentar a segurança de seu banco de dados. Este arquivo pode ser gerado em suas configurações de segurança do banco de dados.</p><p>Este <strong>não</strong> é seu arquivo de banco de dados *.kdbx!<br>Se você não tem um arquivo-chave, deixe o campo em branco.</p><p>Clique para maiores informações...</p> -- -- -- Key file to unlock the database -- Arquivo-chave para desbloquear banco de dados -- -- -- Please touch the button on your YubiKey! -- Por favor pressione o botão em seu YubiKey! -- -- -- Detecting hardware keys… -- Detectando chaves físicas... -- -- -- No hardware keys detected -- Nenhuma chave física detectada -- -- -- Select hardware key… -- Selecionar chave física... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Senhas -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Definições avançadas -- -- -- General -- Geral -- -- -- Security -- Segurança -- -- -- Encryption Settings -- Definições de cifra -- -- -- Browser Integration -- Integração com o Navegador -- -- -- Database Credentials -- Credenciais do Banco de Dados -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Configurações do KeePassXC-Browser -- -- -- Stored keys -- Chaves guardadas -- -- -- Remove -- Remover -- -- -- Delete the selected key? -- Apagar chave selecionada? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Você realmente deseja excluir a chave selecionada? --Isso pode impedir a conexão com o plugin do navegador. -- -- -- Key -- Chave -- -- -- Value -- Valor -- -- -- Enable Browser Integration to access these settings. -- Ative a integração do navegador para acessar essas configurações. -- -- -- Disconnect all browsers -- Desconectar todos os navegadores -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Você realmente deseja desconectar todos os navegadores? --Isso pode impedir a conexão com o plugin do navegador. -- -- -- KeePassXC: No keys found -- KeePassXC: Nenhuma chave localizada -- -- -- No shared encryption keys found in KeePassXC settings. -- Nenhuma chave de criptografia compartilhada encontrada nas configurações do KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Chaves removidas do banco de dados -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC.Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC. -- -- -- Forget all site-specific settings on entries -- Esqueça todas as configurações específicas do site nas entradas -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Você realmente quer esquecer todas as configurações específicas do site em cada entrada? --Permissões para acessar entradas serão revogadas. -- -- -- Removing stored permissions… -- Removendo permissões armazenadas... -- -- -- Abort -- Cancelar -- -- -- KeePassXC: Removed permissions -- KeePassXC: Permissões removidas -- -- -- Successfully removed permissions from %n entry(s). -- Permissões removidas com sucesso de %n entrada(s).Permissões removidas com sucesso de %n entrada(s). -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nenhuma entrada com permissões localizada! -- -- -- The active database does not contain an entry with permissions. -- O banco de dados ativo não contém uma entrada com permissões. -- -- -- Move KeePassHTTP attributes to custom data -- Mover atributos KeePassHTTP para dados personalizados -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Você realmente deseja mover todos os dados de integração do navegador herdados para o padrão mais recente? --Isso é necessário para manter a compatibilidade com o plugin do navegador. -- -- -- Stored browser keys -- Chaves do navegador armazenadas -- -- -- Remove selected key -- Remover chave selecionada -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Mover os atributos do KeePassHTTP para os dados personalizados do KeePassXC-Browser -- -- -- Refresh database root group ID -- Atualizar ID do grupo raiz do banco de dados -- -- -- Created -- Criado -- -- -- Refresh database ID -- Atualizar ID da banco de dados -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Você deseja realmente atualizar o ID do banco de dados? --Isto somente é necessário se o seu banco de dados é uma cópia de outro e a extensão do navegador não puder conectar. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Adicionar proteção adicional... -- -- -- No password set -- Nenhuma senha definida -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- AVISO! Você não definiu uma senha. Usar um banco de dados sem uma senha é altamente desencorajado! -- --Tem certeza de que deseja continuar sem uma senha? -- -- -- Continue without password -- Continuar sem senha -- -- -- No encryption key added -- Chave de criptografia não adicionada -- -- -- You must add at least one encryption key to secure your database! -- Você deve adicionar pelo menos uma chave de criptografia para proteger seu banco de dados! -- -- -- Unknown error -- Erro desconhecido -- -- -- Failed to change database credentials -- Falha ao alterar credenciais do banco de dados -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritmo de Encriptação: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (padrão) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Função de Derivação de Chave: -- -- -- Transform rounds: -- Rodadas de transformação: -- -- -- Memory Usage: -- Uso de Memória: -- -- -- Parallelism: -- Paralelismo: -- -- -- Decryption Time: -- Hora da descriptografia: -- -- -- ?? s -- ?? s -- -- -- Change -- Alterar -- -- -- Higher values offer more protection, but opening the database will take longer. -- Valores mais altos oferecem mais proteção, mas a abertura do banco de dados levará mais tempo. -- -- -- Database format: -- Formato de banco de dados: -- -- -- This is only important if you need to use your database with other programs. -- Isso só é importante se você precisar usar seu banco de dados com outros programas. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recomendado) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- inalterado -- -- -- Number of rounds too high -- Key transformation rounds -- Número de voltas muito alto -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Você está usando um número muito elevado de transformação chave rodadas com Argon2. -- --Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou até mais) para abrir! -- -- -- Understood, keep number -- Entendido, manter o número -- -- -- Cancel -- Cancelar -- -- -- Number of rounds too low -- Key transformation rounds -- Número de voltas muito baixo -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Você está usando um número muito baixo de transformação chave rodadas com KDF-AES. -- --Se você manter este número, seu banco de dados pode ser facilmente crackeado! -- -- -- KDF unchanged -- KDF não modificado -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Não foi possível transformar a chave com novos parâmetros KDF; KDF inalterado. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- processo(s)processo(s) -- -- -- Change existing decryption time -- Mudar tempo de descriptografia -- -- -- Decryption time in seconds -- Tempo de descriptografia em segundos -- -- -- Database format -- Formato do banco de dados -- -- -- Encryption algorithm -- Algorítimo de criptografia -- -- -- Key derivation function -- Função de derivação da chave -- -- -- Transform rounds -- Rodadas de transformação -- -- -- Memory usage -- Uso de memória -- -- -- Parallelism -- Paralelismo -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Entradas Expostas -- -- -- Don't expose this database -- Não exibir este banco de dados -- -- -- Expose entries under this group: -- Exibir entradas deste grupo: -- -- -- Enable Secret Service to access these settings. -- Habilitar Serviço Secreto para acessar estas configurações. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metadados do Banco de Dados -- -- -- Database name: -- Nome do banco de dados: -- -- -- Database description: -- Descrição do banco de dados: -- -- -- Default username: -- Usuário padrão: -- -- -- History Settings -- Configurações de Histórico -- -- -- Max. history items: -- Máx. itens no histórico: -- -- -- Max. history size: -- Tamanho máx. do histórico: -- -- -- MiB -- MB -- -- -- Use recycle bin -- Usar lixeira -- -- -- Additional Database Settings -- Configurações do Banco de Dados -- -- -- Database name field -- Nome do campo do banco de dados -- -- -- Database description field -- Campo de descrição do banco de dados -- -- -- Default username field -- Campo de usuário padrão -- -- -- Maximum number of history items per entry -- Número máximo de histórico dos itens por entrada -- -- -- Maximum size of history per entry -- Número máximo de histórico dos itens por entrada -- -- -- Delete Recycle Bin -- Esvaziar Lixeira -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Você quer deletar a lixeira atual e todo o conteúdo dela? --Esta ação não é reversível. -- -- -- (old) -- (antigo) -- -- -- Enable compression (recommended) -- Ativar compressão (recomendado) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Compartilhando -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Tipo -- -- -- Path -- Caminho -- -- -- Last Signer -- Último Signatário -- -- -- Certificates -- Certificados -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nome do banco de dados: -- -- -- Description: -- Descrição: -- -- -- Database name field -- Nome do campo do banco de dados -- -- -- Database description field -- Campo de descrição do banco de dados -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Banco de dados Keepass 2 -- -- -- All files -- Todos arquivos -- -- -- Open database -- Abrir banco de dados -- -- -- CSV file -- Arquivo CSV -- -- -- Merge database -- Juntar banco de dados -- -- -- Open KeePass 1 database -- Abrir banco de dados KeePass 1 -- -- -- KeePass 1 database -- Banco de dados KeePass 1 -- -- -- Export database to CSV file -- Exportar banco de dados para arquivo CSV -- -- -- Writing the CSV file failed. -- Falha ao gravar arquivo CSV. -- -- -- Database creation error -- Erro ao criar o banco de dados -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- O banco de dados criado não possui chave ou KDF, recusando-se a salvá-lo. --Este é definitivamente um bug, por favor denuncie para os desenvolvedores. -- -- -- Select CSV file -- Selecionar arquivo CSV -- -- -- New Database -- Novo Banco de Dados -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Novo banco de dados] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Bloqueada] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Apenas leitura] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Falha ao abrir %1. Está inacessível ou não existe. -- -- -- Export database to HTML file -- Exportar banco de dados como arquivo &HTML -- -- -- HTML file -- Arquivo HTML -- -- -- Writing the HTML file failed. -- Falha ao escrever no arquivo HTML -- -- -- Export Confirmation -- Confirmação da Exportação -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Você está prestes a exportar o seu banco de dados para um arquivo não criptografado. Isso vai deixar suas senhas e informações confidenciais vulneráveis! Você tem certeza que quer continuar? -- -- -- Open OPVault -- Abrir o OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Pesquisando... -- -- -- Do you really want to delete the entry "%1" for good? -- Você realmente quer apagar a entrada "%1" para sempre? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Pretende realmente mover a entrada "%1" para a lixeira? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Você quer realmente mudar %n entradas para a lixeira?Você deseja realmente mover %n entrada(s) para a lixeira? -- -- -- Execute command? -- Executar comando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Você quer realmente executar o comando seguinte?<br><br>%1<br> -- -- -- Remember my choice -- Lembrar minha escolha -- -- -- Do you really want to delete the group "%1" for good? -- Você realmente quer apagar o grupo "%1" para sempre? -- -- -- No current database. -- Nenhuma banco de dados atual. -- -- -- No source database, nothing to do. -- Nenhuma banco de dados de origem, nada a fazer. -- -- -- Search Results (%1) -- Resultados da Pesquisa (%1) -- -- -- No Results -- Sem Resultados -- -- -- File has changed -- O arquivo foi modificado -- -- -- The database file has changed. Do you want to load the changes? -- O banco de dados foi alterado. Deseja carregar as alterações? -- -- -- Merge Request -- Juntar Pedido -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- O arquivo de banco de dados foi alterado e você tem alterações não salvas. --Você deseja combinar suas alterações? -- -- -- Empty recycle bin? -- Esvaziar lixeira? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Você tem certeza que deseja apagar permanentemente tudo que está na lixeira? -- -- -- Do you really want to delete %n entry(s) for good? -- Você realmente quer apagar %n entrada(s) para o bem?Você realmente quer apagar %n entrada(s) para o bem? -- -- -- Delete entry(s)? -- Apagar entrada?Apagar entradas? -- -- -- Move entry(s) to recycle bin? -- Mover entrada para a lixeira?Mover entradas para a lixeira? -- -- -- Lock Database? -- Travar banco de dados? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Você está editando uma entrada. Descartar as mudanças e travar de qualquer maneira? -- -- -- "%1" was modified. --Save changes? -- "%1" foi modificado. --Salvar alterações? -- -- -- Database was modified. --Save changes? -- Banco de dados foi modificado. --Salvar alterações? -- -- -- Save changes? -- Salvar alterações? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Não foi possível abrir o novo arquivo de banco de dados ao tentar executar o carregamento automático. --Erro: %1 -- -- -- Disable safe saves? -- Desativar armazenamento seguro? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC não pôde salvar o banco de dados após várias tentativas. Isto é causado provavelmente pelo serviço de sincronização de arquivo que mantém um bloqueio ao salvar o arquivo. --Deseja desabilitar salvamento seguro e tentar novamente? -- -- -- Passwords -- Senhas -- -- -- Save database as -- Salvar banco de dados como -- -- -- KeePass 2 Database -- Banco de dados Keepass 2 -- -- -- Replace references to entry? -- Substituir referências para entrada? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- A entrada "%1" tem %2 referência(s). Deseja substituir referências por valores, ignorar essa entrada ou excluir mesmo assim?A entrada "%1" tem %2 referência(s). Deseja substituir referências por valores, ignorar essa entrada ou excluir mesmo assim? -- -- -- Delete group -- Excluir grupo -- -- -- Move group to recycle bin? -- Mover o grupo para a lixeira? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Você realmente quer mover o grupo "%1" para a Lixeira? -- -- -- Successfully merged the database files. -- Fundiu com sucesso os arquivos do banco de dados. -- -- -- Database was not modified by merge operation. -- Banco de dados não foi modificado pela operação de mesclagem. -- -- -- Shared group... -- Grupo compartilhado... -- -- -- Writing the database failed: %1 -- Gravação do banco de dados falhou: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Este banco de dados está aberto em modo de leitura. Auto-salvar está desabilitado. -- -- -- Save database backup -- Salvar backup do banco de dados -- -- -- Could not find database file: %1 -- Não foi possível localizar o arquivo do banco de dados: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Entrada -- -- -- Advanced -- Avançado -- -- -- Icon -- Ícone -- -- -- Auto-Type -- Auto-Digitação -- -- -- Properties -- Propriedades -- -- -- History -- Histórico -- -- -- SSH Agent -- Agente SSH -- -- -- n/a -- n/d -- -- -- (encrypted) -- (criptografado) -- -- -- Select private key -- Escolha uma chave privada -- -- -- Entry history -- Histórico de Entradas -- -- -- Add entry -- Adicionar entrada -- -- -- Edit entry -- Editar entrada -- -- -- New attribute -- Novo atributo -- -- -- Are you sure you want to remove this attribute? -- Você tem certeza que deseja remover este atributo? -- -- -- Tomorrow -- Amanhã -- -- -- %n week(s) -- %n semana(s)%n semana(s) -- -- -- %n month(s) -- %n mese(s)%n mese(s) -- -- -- Entry updated successfully. -- Item atualizado com sucesso. -- -- -- New attribute %1 -- Novo atributo %1 -- -- -- %n year(s) -- %n ano%n anos -- -- -- Confirm Removal -- Confirme a Remoção -- -- -- Browser Integration -- Integração com o navegador -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Tem certeza de que deseja remover esta URL? -- -- -- Reveal -- Revelar -- -- -- Hide -- Ocultar -- -- -- Unsaved Changes -- Desfazer Mundanças -- -- -- Would you like to save changes to this entry? -- Você gostaria de salvar as mudanças para esta entrada? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTEGIDO] Pressione Revelar para visualizar ou editar -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atributos extras -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Edit Name -- Editar Nome -- -- -- Protect -- Proteger -- -- -- Reveal -- Revelar -- -- -- Attachments -- Anexos -- -- -- Foreground Color: -- Cor de primeiro plano: -- -- -- Background Color: -- Cor de fundo: -- -- -- Attribute selection -- Seleção de atributos -- -- -- Attribute value -- Valor do atributo -- -- -- Add a new attribute -- Adicionar um novo atributo -- -- -- Remove selected attribute -- Remover atributo selecionado -- -- -- Edit attribute name -- Editar nome do atributo -- -- -- Toggle attribute protection -- Alterar a proteção do atributo -- -- -- Show a protected attribute -- Mostrar um atributo protegido -- -- -- Foreground color selection -- Seleção da cor do primeiro plano -- -- -- Background color selection -- Seleção de cor do plano de fundo -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Se marcado, a entrada não aparecerá em relatórios como Verificação de Saúde e HIBP, mesmo se ela não corresponder aos requerimentos de qualidade (ex.: entropia de senha ou reuso). Você pode definir a marca de seleção se a senha estiver fora do seu controle (por exemplo, se precisar ser um PIN de quatro dígitos) para evitar que isso atrapalhe os relatórios.</p></body></html> -- -- -- Exclude from database reports -- Excluir dos relatórios do banco de dados -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Habilitar Auto-Digitação para esta entrada -- -- -- Window Associations -- Associações de Janela -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Título da Janela: -- -- -- Use a specific sequence for this association: -- Usar sequência especifica para essa associação: -- -- -- Custom Auto-Type sequence -- Personalizar sequência de Auto-Digitar -- -- -- Open Auto-Type help webpage -- Abrir a página de ajuda do Auto-Digitar -- -- -- Existing window associations -- Associar janelas existentes -- -- -- Add new window association -- Adicionar nova associação de janela -- -- -- Remove selected window association -- Remover a associação de janela selecionada -- -- -- You can use an asterisk (*) to match everything -- Você pode usar um asterisco (*) para corresponder a tudo -- -- -- Set the window association title -- Montar um arquivo de associação de janela -- -- -- You can use an asterisk to match everything -- Você pode usar um asterisco para corresponder a tudo -- -- -- Custom Auto-Type sequence for this window -- Sequência de Auto-Digitar personalizada para esta janela -- -- -- Inherit default Auto-Type sequence from the group -- Herdar sequência pré-definida de Auto-Digitação do grupo -- -- -- Use custom Auto-Type sequence: -- Usar sequência de Auto-Digitação personalizada: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Essas configurações afetam o comportamento de entrada da extensão do navegador. -- -- -- General -- Geral -- -- -- Skip Auto-Submit for this entry -- Ignorar Auto-Envio para esta entrada -- -- -- Hide this entry from the browser extension -- Ocultar esta entrada da extensão do navegador -- -- -- Additional URL's -- URL's adicionais -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Edit -- Editar -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Envia esta configuração apenas ao navegador para caixas de diálogo de Autenticação HTTP. Se ativado, os formulários de login normais não mostrarão esta entrada para seleção. -- -- -- Use this entry only with HTTP Basic Auth -- Usar esta entrada somente com Autenticação HTTP Básica -- -- -- -- EditEntryWidgetHistory -- -- Show -- Mostrar -- -- -- Restore -- Restaurar -- -- -- Delete -- Excluir -- -- -- Delete all -- Excluir todos -- -- -- Entry history selection -- Seleção de histórico de entrada -- -- -- Show entry at selected history state -- Mostrar entrada no estado de histórico selecionado -- -- -- Restore entry to selected history state -- Restaurar entrada para o estado de histórico selecionado -- -- -- Delete selected history state -- Apagar o estado de histórico selecionado -- -- -- Delete all history -- Apagar todo histórico -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Senha: -- -- -- Title: -- Título: -- -- -- Presets -- Pré-definidos -- -- -- Toggle the checkbox to reveal the notes section. -- Altere a caixa de checagem para revelar a seção de notas. -- -- -- Username: -- Nome de Usuário: -- -- -- Url field -- Campo da url -- -- -- Download favicon for URL -- Baixar favicon para URL -- -- -- Password field -- Campo de senha -- -- -- Toggle notes visible -- Alternar visibilidade das notas -- -- -- Expiration field -- Campo de expiração -- -- -- Expiration Presets -- Expiração Predefinida -- -- -- Expiration presets -- Expiração predefinida -- -- -- Notes field -- Campo notas -- -- -- Title field -- Campo de título -- -- -- Username field -- Campo de usuário -- -- -- Toggle expiration -- Alternar expiração -- -- -- Notes: -- Notas: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Expira em: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulário -- -- -- Remove key from agent after -- Remover a chave do agente após -- -- -- seconds -- segundos -- -- -- Fingerprint -- Fingerprint -- -- -- Remove key from agent when database is closed/locked -- Remover chave do agente ao fechar/bloquear o banco de dados -- -- -- Public key -- Chave pública -- -- -- Add key to agent when database is opened/unlocked -- Adicionar chave ao agente quando abrir/desbloquear o banco de dados -- -- -- Comment -- Comentário -- -- -- Decrypt -- Descriptografar -- -- -- n/a -- n/d -- -- -- Copy to clipboard -- Copiar para a área de transferência -- -- -- Private key -- Chave privada -- -- -- External file -- Arquivo externo -- -- -- Browse... -- Button for opening file dialog -- Navegar... -- -- -- Attachment -- Anexo -- -- -- Add to agent -- Adicionar ao agente -- -- -- Remove from agent -- Remover do agente -- -- -- Require user confirmation when this key is used -- Requer confirmação do usuário quando essa chave é usada -- -- -- Remove key from agent after specified seconds -- Remover chave do agente após os segundos especificados -- -- -- Browser for key file -- Procurar por arquivo-chave -- -- -- External key file -- Arquivo-chave externo -- -- -- Select attachment file -- Selecionar arquivo anexado -- -- -- -- EditGroupWidget -- -- Group -- Grupo -- -- -- Icon -- Ícone -- -- -- Properties -- Propriedades -- -- -- Add group -- Adicionar grupo -- -- -- Edit group -- Editar grupo -- -- -- Enable -- Habilitar -- -- -- Disable -- Desabilitar -- -- -- Inherit from parent group (%1) -- Herdar do grupo pai (%1) -- -- -- Entry has unsaved changes -- A entrada tem alterações não salvas -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipo: -- -- -- Path: -- Caminho: -- -- -- Password: -- Senha: -- -- -- Inactive -- Inativo -- -- -- KeeShare unsigned container -- Recipiente KeeShare não assinado -- -- -- KeeShare signed container -- Recipiente KeeShare assinado -- -- -- Select import source -- Selecione a fonte de importação -- -- -- Select export target -- Selecione o destino de exportação -- -- -- Select import/export file -- Selecione o arquivo de importação/exportação -- -- -- Clear -- Limpar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Synchronize -- Sincronizar -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Sua versão do KeePassXC não suporta compartilhamento desse tipo de recipiente. --Extensões suportadas são: %1 -- -- -- %1 is already being exported by this database. -- %1 já foi exportado deste banco de dados. -- -- -- %1 is already being imported by this database. -- %1 já foi importado deste banco de dados. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 já foi importado e exportado por diferentes grupos neste banco de dados. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare está atualmente desativado. Você pode habilitar importação/exportação nas configurações do aplicativo. -- -- -- Database export is currently disabled by application settings. -- Exportação de banco de dados está atualmente desativado nas configurações do aplicativo. -- -- -- Database import is currently disabled by application settings. -- Importação de banco de dados está atualmente desativado nas configurações do aplicativo. -- -- -- Sharing mode field -- Campo do modo de compartilhamento -- -- -- Path to share file field -- Campo do caminho para compartilhar arquivo -- -- -- Password field -- Campo de senha -- -- -- Clear fields -- Limpar campos -- -- -- Browse for share file -- Procurar por arquivo compartilhado -- -- -- Browse... -- Procurar... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Campo nome -- -- -- Notes field -- Campo notas -- -- -- Toggle expiration -- Alternar expiração -- -- -- Auto-Type toggle for this and sub groups -- Alternar Auto-Digitar para estes sub grupos -- -- -- Expiration field -- Campo de expiração -- -- -- Search toggle for this and sub groups -- Alternar busca para estes sub grupos -- -- -- Default auto-type sequence field -- Campo de sequência de Auto-Digitar padrão -- -- -- Expires: -- Expira em: -- -- -- Use default Auto-Type sequence of parent group -- Usar a sequência padrão de Auto-Digitar do grupo pai -- -- -- Auto-Type: -- Auto-Digitar: -- -- -- Search: -- Pesquisar: -- -- -- Notes: -- Notas: -- -- -- Name: -- Nome: -- -- -- Set default Auto-Type sequence -- Configurar sequência padrão de Auto-Digitar -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Adicionar ícone personalizado -- -- -- Delete custom icon -- Excluir ícone personalizado -- -- -- Download favicon -- Baixar favicon -- -- -- Unable to fetch favicon. -- Não foi possível obter favicon. -- -- -- Images -- Imagens -- -- -- All files -- Todos arquivos -- -- -- Confirm Delete -- Confirmar Exclusão -- -- -- Select Image(s) -- Selecionar Imagem(ns) -- -- -- Successfully loaded %1 of %n icon(s) -- Carregado com sucesso %1 de %n ícone(s)Carregado com sucesso %1 de %n ícone(s) -- -- -- No icons were loaded -- Nenhum ícone foi carregado -- -- -- %n icon(s) already exist in the database -- %n ícone(s) já existe no banco de dados%n ícone(s) já existe no banco de dados -- -- -- The following icon(s) failed: -- O seguinte ícone falhou:O(s) ícone(s) a seguir falharam: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Este ícone é usado por %n entrada(s) e será substituído pelo ícone padrão. Tem certeza de que deseja excluí-lo?Este ícone é usado por %n entrada(s) e será substituído pelo ícone padrão. Tem certeza de que deseja excluí-lo? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Você pode habilitar o serviço de ícone do site do DuckDuckGo em Ferramentas -> Configurações -> Segurança -- -- -- Download favicon for URL -- Baixar favicon para URL -- -- -- Apply selected icon to subgroups and entries -- Aplicar ícone selecionado aos sub grupos e entradas -- -- -- Also apply to child groups -- Também aplicar nos grupos herdeiros -- -- -- Also apply to child entries -- Também aplicar nas entradas herdeiras -- -- -- Also apply to all children -- Também aplicar a todos os herdeiros -- -- -- Existing icon selected. -- Ícone existente selecionado. -- -- -- Use default icon -- Usar ícone padrão -- -- -- Use custom icon -- Usar ícone personalizado -- -- -- Apply icon to... -- Aplicar ícone para... -- -- -- Apply to this group only -- Aplicar para este grupo somente -- -- -- -- EditWidgetProperties -- -- Created: -- Criado em: -- -- -- Modified: -- Modificado em: -- -- -- Accessed: -- Acessado em: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Dados do plugin -- -- -- Remove -- Remover -- -- -- Delete plugin data? -- Apagar dados do plugin? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Você quer realmente apagar os dados do plugin selecionados? --Isto pode causar mal funcionamento dos plugins afetados. -- -- -- Key -- Chave -- -- -- Value -- Valor -- -- -- Datetime created -- Data criada -- -- -- Datetime modified -- Data modificada -- -- -- Datetime accessed -- Data acessada -- -- -- Unique ID -- ID única -- -- -- Plugin data -- Dados do plugin -- -- -- Remove selected plugin data -- Remover dados do plugin selecionado -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Nome -- -- -- Size -- Tamanho -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulário -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Open -- Abrir -- -- -- Save -- Salvar -- -- -- Select files -- Selecionar arquivos -- -- -- Are you sure you want to remove %n attachment(s)? -- Tem certeza que deseja remover anexos de %n?Tem certeza que deseja remover os %n anexo(s)? -- -- -- Save attachments -- Salvar anexos -- -- -- Unable to create directory: --%1 -- Não foi possível criar o diretório: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Tem certeza que deseja substituir o arquivo existente "%1" com o anexo? -- -- -- Confirm overwrite -- Confirmar sobrescrever -- -- -- Unable to save attachments: --%1 -- Não foi possível salvar anexos: --%1 -- -- -- Unable to open attachment: --%1 -- Não foi possível abrir anexo: --%1 -- -- -- Unable to open attachments: --%1 -- Não foi possível abrir anexos: --%1 -- -- -- Confirm remove -- Confirmar remoção -- -- -- Unable to open file(s): --%1 -- Incapaz de abrir o arquivo (s): --%1Não foi possível abrir arquivo(s): --%1 -- -- -- Attachments -- Anexos -- -- -- Add new attachment -- Adicionar novo anexo -- -- -- Remove selected attachment -- Remover anexo selecionado -- -- -- Open selected attachment -- Abrir anexo selecionado -- -- -- Save selected attachment to disk -- Salvar anexo selecionado no disco -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 é um arquivo grande (%2 MB). --Seu banco de dados pode ficar muito grande e reduzir o desempenho. -- --Você deseja realmente adicionar este arquivo? -- -- -- Confirm Attachment -- Confirmar Anexo -- -- -- -- EntryAttributesModel -- -- Name -- Nome -- -- -- -- EntryHistoryModel -- -- Last modified -- Modificado pela última vez em -- -- -- Title -- Título -- -- -- Username -- Nome de usuário -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de usuário -- -- -- URL -- URL -- -- -- Never -- Nunca -- -- -- Password -- Senha -- -- -- Notes -- Notas -- -- -- Expires -- Expira em -- -- -- Created -- Criado -- -- -- Modified -- Modificado -- -- -- Accessed -- Acessado -- -- -- Attachments -- Anexos -- -- -- Size -- Tamanho -- -- -- Group name -- Nome do grupo -- -- -- Entry title -- Título da entrada -- -- -- Entry notes -- Anotações da entrada -- -- -- Entry expires at -- Entrada expira em -- -- -- Creation date -- Data de criação -- -- -- Last modification date -- Data da última modificação -- -- -- Last access date -- Data do último acesso -- -- -- Attached files -- Arquivos anexados -- -- -- Entry size -- Tamanho da entrada -- -- -- Has attachments -- Tem anexos -- -- -- Has TOTP one-time password -- Possui senha de uso único TOPT -- -- -- -- EntryPreviewWidget -- -- Close -- Fechar -- -- -- General -- Geral -- -- -- Username -- Nome de usuário -- -- -- Password -- Senha -- -- -- Expiration -- Expiração -- -- -- URL -- URL -- -- -- Attributes -- Atributos -- -- -- Attachments -- Anexos -- -- -- Notes -- Notas -- -- -- Autotype -- Auto-Digitação -- -- -- Window -- Janela -- -- -- Sequence -- Sequência -- -- -- Searching -- Busca -- -- -- Search -- Pesquisar -- -- -- Clear -- Limpar -- -- -- Never -- Nunca -- -- -- [PROTECTED] -- [PROTEGIDO] -- -- -- Enabled -- Habilitado -- -- -- Disabled -- Desabilitado -- -- -- Share -- Compartilhar -- -- -- Display current TOTP value -- Mostrar valor TOTP atual -- -- -- Advanced -- Avançado -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- URL inválida -- -- -- -- EntryView -- -- Fit to window -- Ajustar à janela -- -- -- Fit to contents -- Ajustar ao conteúdo -- -- -- Reset to defaults -- Redefinir as configurações padrões -- -- -- Has attachments -- Entry attachment icon toggle -- Tem anexos -- -- -- Has TOTP -- Entry TOTP icon toggle -- Possui TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Entrada "%1" do banco de dados "%2" foi usada por %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Falha ao registrar serviço DBus em %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n entrada foi usada por %1%n entradas foram usadas por %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nome do arquivo -- -- -- Group -- Grupo -- -- -- Manage -- Gerenciar -- -- -- Unlock to show -- Destrancar para mostrar -- -- -- None -- Nada -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplicativo -- -- -- Manage -- Gerenciar -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Desconhecido -- -- -- Unknown -- Unknown executable path -- Desconhecido -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Executável: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Outro serviço secreto está em execução (%1).<br/>Por favor, encerre/remova ele antes de reabilitar a integração com o Serviço Secreto. -- -- -- -- Group -- -- [empty] -- group has no children -- [vazio] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Falha na validação online da senha -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Baixar Favicons -- -- -- Cancel -- Cancelar -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Tendo problemas ao baixar ícones? --Você pode habilitar o serviço de ícones do DuckDuckGo na seção de segurança desse aplicativo. -- -- -- Close -- Fechar -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Por favor espere... Processando lista de entradas... -- -- -- Downloading... -- Baixando... -- -- -- Ok -- Ok -- -- -- Already Exists -- Já existe -- -- -- Download Failed -- Falha no download -- -- -- Downloading favicons (%1/%2)... -- Baixando favicons (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- Fe&char -- -- -- Close message -- Fechar mensagem -- -- -- -- Kdbx3Reader -- -- missing database headers -- cabeçalhos de banco de dados ausente -- -- -- Header doesn't match hash -- Cabeçalho não corresponde ao hash -- -- -- Invalid header id size -- Tamanho do id do cabeçalho inválido -- -- -- Invalid header field length -- Comprimento do campo de cabeçalho inválido -- -- -- Invalid header data length -- Comprimento de dados cabeçalho inválido -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas foram informadas, por favor tente novamente. --Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. -- -- -- Unable to calculate database key -- Não foi possível calcular a chave do banco de dados -- -- -- Unable to issue challenge-response: %1 -- Não foi possível emitir resposta ao desafio: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Não foi possível emitir resposta ao desafio: %1 -- -- -- Unable to calculate database key -- Não foi possível calcular a chave do banco de dados -- -- -- -- Kdbx4Reader -- -- missing database headers -- cabeçalhos de banco de dados ausente -- -- -- Invalid header checksum size -- Tamanho de soma de verificação do cabeçalho inválido -- -- -- Header SHA256 mismatch -- Incompatibilidade de cabeçalho SHA256 -- -- -- Unknown cipher -- Cifra desconhecida -- -- -- Invalid header id size -- Tamanho do id do cabeçalho inválido -- -- -- Invalid header field length -- Comprimento do campo de cabeçalho inválido -- -- -- Invalid header data length -- Comprimento de dados cabeçalho inválido -- -- -- Failed to open buffer for KDF parameters in header -- Falha ao abrir o buffer para parâmetros KDF no cabeçalho -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Função de derivação de chaves sem suporte (KDF) ou parâmetros inválidos -- -- -- Legacy header fields found in KDBX4 file. -- Campos de cabeçalho de legado encontrados no arquivo KDBX4. -- -- -- Invalid inner header id size -- Tamanho do id do cabeçalho interno inválido -- -- -- Invalid inner header field length -- Comprimento do campo de cabeçalho interno inválido -- -- -- Invalid inner header binary size -- Tamanho binário cabeçalho interno inválido -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Versão não suportada do mapa variante KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do nome da entrada da variante do mapa -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Dados inválidos do nome da entrada da variante do mapa -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor de entrada do mapa -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Dados inválidos do valor da entrada da variante do mapa -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor booleano da entrada da variante do mapa -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor da entrada Int32 da variante do mapa -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor da entrada UInt32 da variante do mapa -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor da entrada Int64 da variante do mapa -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor da entrada UInt64 da variante do mapa -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Tipo inválido da entrada da variante do mapa -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Tamanho inválido do tipo de campo da variante do mapa -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas foram informadas, por favor tente novamente. --Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. -- -- -- (HMAC mismatch) -- (HMAC não combina) -- -- -- Unable to calculate database key: %1 -- Não foi possível calcular a chave do banco de dados: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritmo de cifra simétrica inválido. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Tamanho de cifra simétrica IV inválida. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Falha ao serializar mapa variante do parâmetros KDF -- -- -- Unable to calculate database key: %1 -- Não foi possível calcular a chave do banco de dados: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cifra não suportada -- -- -- Invalid compression flags length -- Comprimento de flags de compressão inválido -- -- -- Unsupported compression algorithm -- Algoritmo de compressão não suportado -- -- -- Invalid master seed size -- Tamanho da semente de mestre inválido -- -- -- Invalid transform seed size -- Tamanho de semente de transformação inválido -- -- -- Invalid transform rounds size -- Tamanho do número de rodadas transformação inválido -- -- -- Invalid start bytes size -- Tamanho de bytes de início inválido -- -- -- Invalid random stream id size -- Tamanho de ID de fluxo aleatório inválido -- -- -- Invalid inner random stream cipher -- Cifra de fluxo aleatório interno inválido -- -- -- Not a KeePass database. -- Não é um banco de dados KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- O arquivo selecionado é um velho banco de dados do KeePass 1 (.kdb) -- --Você pode importá-lo clicando em Banco de Dados > "Importar banco de dados do KeePss 1..." --Isto é uma migração de caminho único. Você não poderá abrir o banco de dados importado com a velha versão KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Versão do banco de dados KeePass 2 não suportada. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Tamanho de cifra uuid inválida: %1 (tamanho=%2) -- -- -- Unable to parse UUID: %1 -- Não é possível analisar o UUID: %1 -- -- -- Failed to read database file. -- Falha ao ler o arquivo de banco de dados. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Análise de falha de XML: %1 -- -- -- No root group -- Sem grupo raiz -- -- -- Missing icon uuid or data -- Faltando uuid ou dados do ícone -- -- -- Missing custom data key or value -- Chave de dados customizada ou valor ausente -- -- -- Multiple group elements -- Vários elementos do grupo -- -- -- Null group uuid -- Uuid group inválido -- -- -- Invalid group icon number -- Número do grupo de ícone inválido -- -- -- Invalid EnableAutoType value -- Valor de EnableAutoType inválido -- -- -- Invalid EnableSearching value -- Valor EnableSearching inválido -- -- -- No group uuid found -- Nenhum grupo uuid encontrado -- -- -- Null DeleteObject uuid -- DeleteObject uuid nulo -- -- -- Missing DeletedObject uuid or time -- DeletedObject uuid ou tempo ausente -- -- -- Null entry uuid -- Item uuid nulo -- -- -- Invalid entry icon number -- Item inválido número de ícone -- -- -- History element in history entry -- Elemento de histórico na entrada de histórico -- -- -- No entry uuid found -- Nenhuma entrada uuid encontrado -- -- -- History element with different uuid -- Elemento de história com diferente uuid -- -- -- Duplicate custom attribute found -- Atributo customizado duplicado encontrado -- -- -- Entry string key or value missing -- Chave de cadeia de caracteres de entrada ou valor ausente -- -- -- Entry binary key or value missing -- Entrada de chave binária ou valor ausente -- -- -- Auto-type association window or sequence missing -- Janela associada ao Auto-Digitar ou sequência ausente -- -- -- Invalid bool value -- Valor booleano inválido -- -- -- Invalid date time value -- Valor de tempo e data inválido -- -- -- Invalid color value -- Valor de cor inválido -- -- -- Invalid color rgb part -- Valor de número inválido -- -- -- Invalid number value -- Valor numérico inválido -- -- -- Invalid uuid value -- Valor uuid inválido -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Não é possível descompactar binário -- -- -- XML error: --%1 --Line %2, column %3 -- Erro XML: --%1 --Linha %2, coluna %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Estrutura inválida do arquivo de configurações do KeeAgent. -- -- -- Private key is an attachment but no attachments provided. -- A chave privada é um anexo, mas nenhum anexo foi fornecido. -- -- -- Private key is empty -- A chave privada está vazia -- -- -- File too large to be a private key -- Este arquivo é muito grande para ser uma chave privada -- -- -- Failed to open private key -- Falha ao abrir chave privada -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Não foi possível abrir o banco de dados. -- -- -- Import KeePass1 Database -- Importar banco de dados KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Não foi possível ler o arquivo-chave. -- -- -- Not a KeePass database. -- Não é um banco de dados KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritmo de encriptação não suportado. -- -- -- Unsupported KeePass database version. -- Versão não suportada do banco de dados KeePass. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Não é possível ler criptografia IV -- -- -- Invalid number of groups -- Número inválido de grupos -- -- -- Invalid number of entries -- Número inválido de entradas -- -- -- Invalid content hash size -- Tamanho de hash conteúdo inválido -- -- -- Invalid transform seed size -- Tamanho de sementes de transformação inválido -- -- -- Invalid number of transform rounds -- Número inválido de ciclos de transformção -- -- -- Unable to construct group tree -- Não é possível construir árvore de grupo -- -- -- Root -- Raíz -- -- -- Key transformation failed -- Transformação de chave falhou -- -- -- Invalid group field type number -- Grupo inválido número do tipo de campo -- -- -- Invalid group field size -- Tamanho do campo Grupo inválido -- -- -- Read group field data doesn't match size -- Leitura de grupo dados do campo não correspondem em tamanho -- -- -- Incorrect group id field size -- Tamanho de campo de id de grupo incorreto -- -- -- Incorrect group creation time field size -- Grupo incorreto tamanho do campo de hora de criação -- -- -- Incorrect group modification time field size -- Grupo incorreto tamanho do campo de hora de modificação -- -- -- Incorrect group access time field size -- Grupo incorreto tamanho do campo de hora de acesso -- -- -- Incorrect group expiry time field size -- Grupo incorreto tamanho do campo de hora de expiração -- -- -- Incorrect group icon field size -- Grupo incorreto tamanho do campo de ícone -- -- -- Incorrect group level field size -- Grupo incorreto tamanho do campo de nível -- -- -- Invalid group field type -- Grupo incorreto tipo de campo -- -- -- Missing group id or level -- Grupo ausente id ou nível -- -- -- Missing entry field type number -- Item ausente número do tipo de campo -- -- -- Invalid entry field size -- Item inválido tamanho do campo -- -- -- Read entry field data doesn't match size -- Leitura do dados de campo de entrada não correspondem com o tamanho -- -- -- Invalid entry uuid field size -- Item inválido tamanho do campo uuid -- -- -- Invalid entry group id field size -- Item inválido tamanho do campo de id de grupo -- -- -- Invalid entry icon field size -- Item inválido tamanho de campo de ícone -- -- -- Invalid entry creation time field size -- Item inválido tamanho do campo de hora de criação -- -- -- Invalid entry modification time field size -- Item inválido Tamanho do campo de hora de modificação -- -- -- Invalid entry expiry time field size -- Tamanho de campo de tempo de expiração entrada inválida -- -- -- Invalid entry field type -- Tipo de campo de entrada inválido -- -- -- unable to seek to content position -- incapaz de buscar a posição de conteúdo -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas foram informadas, por favor tente novamente. --Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. -- -- -- Unable to calculate database key -- Não foi possível calcular a chave do banco de dados -- -- -- -- KeeShare -- -- Invalid sharing reference -- Referência de compartilhamento inválida -- -- -- Inactive share %1 -- Desativar compartilhamento %1 -- -- -- Imported from %1 -- Importado de %1 -- -- -- Exported to %1 -- Exportar para %1 -- -- -- Synchronized with %1 -- Sincronizar com %1 -- -- -- Import is disabled in settings -- Importar está desabilitado nas configurações -- -- -- Export is disabled in settings -- Exportar está desabilitado nas configurações -- -- -- Inactive share -- Desativar compartilhamento -- -- -- Imported from -- Importado de -- -- -- Exported to -- Exportado para -- -- -- Synchronized with -- Sincronizado com -- -- -- -- KeyComponentWidget -- -- Key Component -- Componente chave -- -- -- Key Component Description -- Descrição do Componente Chave -- -- -- Cancel -- Cancelar -- -- -- Key Component set, click to change or remove -- Componente Chave definido, clique para alterar ou remover -- -- -- Add %1 -- Add a key component -- Adicionar %1 -- -- -- Change %1 -- Change a key component -- Mudar %1 -- -- -- Remove %1 -- Remove a key component -- Remover %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 definido, clique para mudar ou remover -- -- -- -- KeyFileEditWidget -- -- Generate -- Gerar -- -- -- Key File -- Arquivo Chave -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Você pode adicionar um arquivo de chave contendo bytes aleatórios para segurança adicional.</p><p>Você deve mantê-lo em segredo e nunca perdê-lo ou você será bloqueado!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Erro ao carregar o arquivo de chave '%1' --Mensagem: %2 -- -- -- Key files -- Arquivos-chave -- -- -- All files -- Todos arquivos -- -- -- Create Key File... -- Criar Arquivo-Chave... -- -- -- Error creating key file -- Erro ao criar o arquivo de chave -- -- -- Unable to create key file: %1 -- Não foi possível criar arquivo de chave: %1 -- -- -- Select a key file -- Escolha um arquivo-chave -- -- -- Key file selection -- Seleção do arquivo-chave -- -- -- Browse for key file -- Procurar por arquivo-chave -- -- -- Browse... -- Procurar... -- -- -- Generate a new key file -- Gerar um novo arquivo-chave -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Nota: Não use um arquivo que possa ser modificado, pois isso irá impedir que você destranque seu banco de dados! -- -- -- Invalid Key File -- Arquivo-chave inválido -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Você não pode usar o banco de dados atual como seu próprio arquivo-chave. Por favor, escolha um arquivo diferente ou gere um novo arquivo-chave. -- -- -- Suspicious Key File -- Arquivo-chave suspeito -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- O arquivo-chave escolhido parece com um arquivo de banco de dados. Um arquivo-chave deve ser um arquivo estático que nunca sofrerá mudanças, pois senão você perderá acesso ao seu banco de dados para sempre. --Tem certeza que deseja continuar com este arquivo? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- Banco de &dados -- -- -- &Help -- &Ajuda -- -- -- &Groups -- &Grupos -- -- -- &Tools -- &Ferramentas -- -- -- &Quit -- &Sair -- -- -- &About -- &Sobre -- -- -- Database settings -- Configurações do Banco de Dados -- -- -- Copy username to clipboard -- Copiar nome de usuário para área de transferência -- -- -- Copy password to clipboard -- Copiar senha para área de transferência -- -- -- &Settings -- &Configurações -- -- -- &Title -- &Título -- -- -- Copy title to clipboard -- Copiar título para a área de transferência -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copiar URL para a área de transferência -- -- -- &Notes -- &Notas -- -- -- Copy notes to clipboard -- Copiar notas para a área de transferência -- -- -- Copy &TOTP -- Copiar &TOTP -- -- -- E&mpty recycle bin -- Esvaziar &lixeira -- -- -- Clear history -- Limpar histórico -- -- -- Access error for config file %1 -- Erro de acesso para o arquivo de configuração %1 -- -- -- Settings -- Configurações -- -- -- Toggle window -- Alternar Janela -- -- -- Quit KeePassXC -- Fechar KeePassXC -- -- -- Please touch the button on your YubiKey! -- Por favor pressione o botão em seu YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- AVISO: você está usando uma compilação instável do KeePassXC! --Existe um alto risco de corrupção, mantenha um backup de seus bancos de dados. --Esta versão não se destina ao uso em produção. -- -- -- &Donate -- &Doar -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- AVISO: Sua versão do Qt pode fazer com que o KeePassXC trave com um teclado na tela! --Recomendamos que você use o AppImage disponível em nossa página de downloads. -- -- -- &Import -- &Importar -- -- -- Create a new database -- Criar um banco de dados -- -- -- Merge from another KDBX database -- Mesclar de outro banco de dados KDBX -- -- -- Add a new entry -- Adicionar uma nova entrada -- -- -- View or edit entry -- Exibir ou editar entrada -- -- -- Add a new group -- Adicionar a um novo grupo -- -- -- Perform &Auto-Type -- Executar &Auto Digitação -- -- -- Open &URL -- Abrir &URL -- -- -- Import a KeePass 1 database -- Importar banco de dados do KeePass 1 -- -- -- Import a CSV file -- Importar arquivo CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTA: Você está usando uma versão de pré-lançamento do KeePassXC! --Espere alguns bugs e problemas menores, esta versão não é para uso em produção. -- -- -- Check for updates on startup? -- Verificar se há atualizações na inicialização? -- -- -- Would you like KeePassXC to check for updates on startup? -- Gostaria que o KeePassXC procure atualizações na inicialização? -- -- -- You can always check for updates manually from the application menu. -- Você sempre pode verificar atualizações manualmente no menu do aplicativo. -- -- -- &Export -- &Exportar -- -- -- Sort &A-Z -- Organizar &A-Z -- -- -- Sort &Z-A -- Organizar &Z-A -- -- -- &Password Generator -- &Gerador de senhas -- -- -- Import a 1Password Vault -- Importar cofre 1Password -- -- -- &Getting Started -- &Começando -- -- -- &User Guide -- &Guia do usuário -- -- -- &Keyboard Shortcuts -- &Atalhos no teclado -- -- -- &Recent Databases -- &Banco de Dados Recentes -- -- -- &Entries -- &Entradas -- -- -- Copy Att&ribute -- Copiar At&ributo -- -- -- TOTP -- TOTP -- -- -- View -- Ver -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Checar Atualizações -- -- -- &Open Database… -- &Abrir Banco de Dados... -- -- -- &Save Database -- &Salvar Banco de Dados -- -- -- &Close Database -- &Fechar Banco de Dados -- -- -- &New Database… -- &Novo Banco de Dados... -- -- -- &Merge From Database… -- &Mesclar do Banco de Dados... -- -- -- &New Entry… -- &Nova Entrada... -- -- -- &Edit Entry… -- &Editar Entrada… -- -- -- &Delete Entry… -- &Excluir Entrada… -- -- -- &New Group… -- &Novo Grupo… -- -- -- &Edit Group… -- &Editar Grupo -- -- -- &Delete Group… -- &Excluir Grupo... -- -- -- Download All &Favicons… -- Baixar Todos &Favicons... -- -- -- Sa&ve Database As… -- Sal&var Banco de Dados Como... -- -- -- Database &Security… -- &Segurança do Banco de Dados... -- -- -- Database &Reports... -- &Relatórios do Banco de Dados... -- -- -- Statistics, health check, etc. -- Estatísticas, verificação de saúde, etc. -- -- -- &Database Settings… -- Configurações do Banco de &Dados... -- -- -- &Clone Entry… -- &Clonar Entrada... -- -- -- Move u&p -- Mover para &cima -- -- -- Move entry one step up -- Mover entrada um passo para cima -- -- -- Move do&wn -- Move para &baixo -- -- -- Move entry one step down -- Mover entrada um passo para baixo -- -- -- Copy &Username -- Copiar &Nome de Usuário -- -- -- Copy &Password -- Copiar &Senha -- -- -- Download &Favicon -- Baixar &Favicon -- -- -- &Lock Databases -- &Bloquear Banco de Dados -- -- -- &CSV File… -- Arquivo &CSV... -- -- -- &HTML File… -- Arquivo &HTML... -- -- -- KeePass 1 Database… -- Banco de dados do KeePass 1... -- -- -- 1Password Vault… -- Cofre do 1Password... -- -- -- CSV File… -- Arquivo CSV... -- -- -- Show TOTP -- Mostrar TOTP -- -- -- Show QR Code -- Exibir QR Code -- -- -- Set up TOTP… -- Configurar TOTP -- -- -- Report a &Bug -- Reportar um &Bug -- -- -- Open Getting Started Guide -- Abra o Guia de Introdução -- -- -- &Online Help -- &Ajuda Online -- -- -- Go to online documentation -- Ir para documentação online -- -- -- Open User Guide -- Abrir Guia do Usuário -- -- -- Save Database Backup... -- Salvar Backup do Banco de Dados... -- -- -- Add key to SSH Agent -- Adicionar chave ao Agente SSH -- -- -- Remove key from SSH Agent -- Remover a chave do agente SSH -- -- -- Compact Mode -- Modo Compacto -- -- -- Automatic -- Automático -- -- -- Light -- Claro -- -- -- Dark -- Escuro -- -- -- Classic (Platform-native) -- Clássico (nativo da plataforma) -- -- -- Show Toolbar -- Exibir Barra de Ferramentas -- -- -- Show Preview Panel -- Exibir Painel de Prévia -- -- -- Don't show again for this version -- Não exibir novamenete para esta versão -- -- -- Restart Application? -- Reiniciar Aplicativo? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora? -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Ocultar nome de usuários -- -- -- Hide Passwords -- Ocultar senhas -- -- -- -- ManageDatabase -- -- Database settings -- Configurações do Banco de Dados -- -- -- Edit database settings -- Editar configurações de banco de dados -- -- -- Unlock database -- Destrancar banco de dados -- -- -- Unlock database to show more information -- Destranque o banco de dados para mostrar mais informações -- -- -- Lock database -- Trancar Banco de Dados -- -- -- -- ManageSession -- -- Disconnect -- Desconectar -- -- -- Disconnect this application -- Desconectar este aplicativo -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Criando %1 [%2] -- -- -- Relocating %1 [%2] -- Realocando %1 [%2] -- -- -- Overwriting %1 [%2] -- Substituindo %1 [%2] -- -- -- older entry merged from database "%1" -- entrada mais antiga mesclada do banco de dados "%1" -- -- -- Adding backup for older target %1 [%2] -- Adicionando backup para o alvo mais antigo %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Adicionando backup para fonte mais antiga %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Reaplicar entradas alvo antigas em cima da fonte nova %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Reaplicar fonte alvo antiga em cima do alvo novo %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Sincronizando de uma fonte mais nova %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Sincronizando a partir da fonte antiga %1 [%2] -- -- -- Deleting child %1 [%2] -- Deletar herdeiro %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Excluindo órfã %1 [%2] -- -- -- Changed deleted objects -- Objetos excluídos alterados -- -- -- Adding missing icon %1 -- Adicionando ícone ausente %1 -- -- -- Removed custom data %1 [%2] -- Remover dado personalizado %1 [%2] -- -- -- Adding custom data %1 [%2] -- Adicionar dado personalizado %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Criar um novo banco de dados KeePassXC... -- -- -- Root -- Root group -- Raíz -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Assistente -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. -- -- -- Advanced Settings -- Definições avançadas -- -- -- Simple Settings -- Definições básicas -- -- -- Encryption Settings -- Configurações de criptografia -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Credenciais do Banco de Dados -- -- -- A set of credentials known only to you that protects your database. -- Um conjunto de credenciais conhecidas apenas por você que protege seu banco de dados. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Definições de cifra -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informações Gerais Sobre o Banco de Dados -- -- -- Please fill in the display name and an optional description for your new database: -- Por favor preencha o nome de exibição e uma descrição opcional para o seu novo banco de dados: -- -- -- -- NixUtils -- -- Password Manager -- Gerenciador de Senhas -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 inválido. Não contém cabeçalho. -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Não foi possível ler todos os IV bytes. Requer 16 mas só foi recebido %1 -- -- -- Unable to init cipher for opdata01: %1 -- Não foi possível iniciar criptografia para opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Não foi possível ler todos os bytes de assinatura do HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 malformado devido a falha no HMAC -- -- -- Unable to process clearText in place -- Não foi possível processar clearText no lugar -- -- -- Expected %1 bytes of clear-text, found %2 -- Experado %1 bytes de clear-text. Encontrados %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Ler banco de dados não produz uma instância --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Diretório .opvault deve existir -- -- -- Directory .opvault must be readable -- Diretório .opvault deve ser legível -- -- -- Directory .opvault/default must exist -- Diretório .opvault/default deve existir -- -- -- Directory .opvault/default must be readable -- Diretório .opvault/default deve ser legível -- -- -- Unable to decode masterKey: %1 -- Não foi possível decodificar senha-mestre: %1 -- -- -- Unable to derive master key: %1 -- Não foi possível derivar senha mestre: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Arquivo chave inválido, é esperado uma chave OpenSSH -- -- -- PEM boundary mismatch -- Incompatibilidade de limite do PEM -- -- -- Base64 decoding failed -- Decodificação Base64 falhou -- -- -- Key file way too small. -- O modo do arquivo chave é muito pequeno. -- -- -- Key file magic header id invalid -- O id do cabeçalho mágico do arquivo chave é invalido -- -- -- Found zero keys -- Nenhuma chave encontrada -- -- -- Failed to read public key. -- Falha ao ler chave pública -- -- -- Corrupted key file, reading private key failed -- Arquivo chave corrompido, leitura da chave privada falhou -- -- -- No private key payload to decrypt -- Chave privada não carregada para decriptar -- -- -- Trying to run KDF without cipher -- Tentando rodar KDF sem cifra -- -- -- Passphrase is required to decrypt this key -- Senha é necessária para decriptar esta chave -- -- -- Key derivation failed, key file corrupted? -- A derivação da chave falhou, o arquivo chave esta corrompido? -- -- -- Decryption failed, wrong passphrase? -- Decriptação falhou, senha errada? -- -- -- Unexpected EOF while reading public key -- EOF inesperado enquanto lendo a chave pública. -- -- -- Unexpected EOF while reading private key -- EOF inesperado enquanto lendo a chave privada. -- -- -- Can't write public key as it is empty -- Não é possível escrever a chave pública enquanto estiver vazio. -- -- -- Unexpected EOF when writing public key -- EOF inesperado enquanto escrevendo a chave pública. -- -- -- Can't write private key as it is empty -- EOF inesperado enquanto escrevendo a chave privada. -- -- -- Unexpected EOF when writing private key -- EOF inesperado enquanto escrevendp a chave privada. -- -- -- Unsupported key type: %1 -- Tipo de chave não suportada: %1 -- -- -- Unknown cipher: %1 -- Cifra desconhecida: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cifra de IV é muito curta para MD5 kdf -- -- -- Unknown KDF: %1 -- KDF desconhecido: %1 -- -- -- Unknown key type: %1 -- Tipo de chave desconhecida: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Senhas não coicidem -- -- -- Passwords match so far -- Senhas não coincidem até agora -- -- -- Toggle Password (%1) -- Alternar Senha (%1) -- -- -- Generate Password (%1) -- Gerar Senha (%1) -- -- -- Warning: Caps Lock enabled! -- Alerta: Caps Lock habilitado! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Insira senha: -- -- -- Confirm password: -- Confirmar senha: -- -- -- Password -- Senha -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Uma senha é o principal método para proteger seu banco de dados.</p><p>Boas senhas são longas e únicas. KeePassXC pode gerar uma para você.</p> -- -- -- Passwords do not match. -- Senha não corresponde. -- -- -- Password field -- Campo de senha -- -- -- Repeat password field -- Repetir campo de senha -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- força -- -- -- entropy -- entropia -- -- -- Password -- Senha -- -- -- Character Types -- Tipo de Caracteres -- -- -- Numbers -- Números -- -- -- Extended ASCII -- ASCII extendido -- -- -- Exclude look-alike characters -- Excluir caracteres semelhantes -- -- -- Pick characters from every group -- Selecione caracteres de todos os grupos -- -- -- &Length: -- &Tamanho: -- -- -- Passphrase -- Senha -- -- -- Wordlist: -- Lista de palavras: -- -- -- Word Separator: -- Separador de Palavras: -- -- -- Close -- Fechar -- -- -- Entropy: %1 bit -- Entropia: %1 bit -- -- -- Password Quality: %1 -- Qualidade da senha: %1 -- -- -- Poor -- Password quality -- Pobre -- -- -- Weak -- Password quality -- Fraco -- -- -- Good -- Password quality -- Bom -- -- -- Excellent -- Password quality -- Excelente -- -- -- Switch to advanced mode -- Mudar para o modo avançado -- -- -- Advanced -- Avançado -- -- -- Braces -- Colchetes -- -- -- Punctuation -- Pontuação -- -- -- Quotes -- Aspas -- -- -- Logograms -- Logo-gramas -- -- -- Character set to exclude from generated password -- Conjunto de caracteres para excluir da senha gerada -- -- -- Do not include: -- Não incluir: -- -- -- Add non-hex letters to "do not include" list -- Adicionar letras não hexadecimais à lista "não incluir" -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Senha geradas -- -- -- Upper-case letters -- Letras maiúsculas -- -- -- Lower-case letters -- Letras minúsculas -- -- -- Special characters -- Caracteres especiais -- -- -- Math Symbols -- Símbolos matemáticos -- -- -- Dashes and Slashes -- Barras e traços -- -- -- Excluded characters -- Caracteres excluídos -- -- -- Hex Passwords -- Senhas hexadecimais -- -- -- Password length -- Tamanho da senha -- -- -- Word Case: -- Caixa da palavra: -- -- -- Regenerate password -- Gerar senha novamente -- -- -- Copy password -- Copiar senha -- -- -- lower case -- minúsculo -- -- -- UPPER CASE -- MAIÚSCULO -- -- -- Title Case -- Caixa do título -- -- -- Generate Password -- Gerar Senha -- -- -- Also choose from: -- Escolher também de: -- -- -- Additional characters to use for the generated password -- Caracteres adicionais a serem usados para a senha gerada -- -- -- Additional characters -- Caracteres adicionais -- -- -- Word Count: -- Número de Palavras: -- -- -- Esc -- Esc -- -- -- Apply Password -- Aplicar Senha -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Regenerar senha (%1) -- -- -- Special Characters -- Caracteres Especiais -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Estatísticas -- -- -- Very weak password -- Senha muito fraca -- -- -- Password entropy is %1 bits -- A entropia da senha é de %1 bits -- -- -- Weak password -- Senha fraca -- -- -- Used in %1/%2 -- Usada em %1/%2 -- -- -- Password is used %1 times -- A senha foi usada %1 vezes -- -- -- Password has expired -- Senha expirou -- -- -- Password expiry was %1 -- A expiração da senha foi %1 -- -- -- Password is about to expire -- A senha está prestes a expirar -- -- -- Password expires in %1 days -- A senha expira em %1 dias -- -- -- Password will expire soon -- A senha irá expirar em breve -- -- -- Password expires on %1 -- A senha expira em %1 -- -- -- Health Check -- Verificação de Saúde -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Sobrescrever -- -- -- Delete -- Excluir -- -- -- Move -- Mover -- -- -- Empty -- Vazio -- -- -- Remove -- Remover -- -- -- Skip -- Ignorar -- -- -- Disable -- Desabilitar -- -- -- Merge -- Fundir -- -- -- Continue -- Continuar -- -- -- -- QObject -- -- Database not opened -- Banco de dados não foi aberto -- -- -- Database hash not available -- Hash de banco de dados não disponível -- -- -- Client public key not received -- Chave pública do cliente não recebida -- -- -- Cannot decrypt message -- Não é possível descriptografar a mensagem -- -- -- Action cancelled or denied -- Ação cancelada ou negada -- -- -- KeePassXC association failed, try again -- KeePassXC associação falhou, tente novamente -- -- -- Encryption key is not recognized -- Chave criptográfica não é reconhecida -- -- -- Incorrect action -- Ação incorreta -- -- -- Empty message received -- Mensagem vazia recebida -- -- -- No URL provided -- Nenhuma URL informada -- -- -- No logins found -- Nenhum login encontrado -- -- -- Unknown error -- Erro desconhecido -- -- -- Add a new entry to a database. -- Adicionar uma nova entrada ao banco de dados. -- -- -- Path of the database. -- Caminho do banco de dados -- -- -- Key file of the database. -- Arquivo-chave do banco de dados. -- -- -- path -- caminho -- -- -- Username for the entry. -- Usuário para a entrada. -- -- -- username -- usuário -- -- -- URL for the entry. -- URL para a entrada. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Solicitar senha da entrada. -- -- -- Generate a password for the entry. -- Gerar uma senha para a entrada. -- -- -- length -- tamanho -- -- -- Path of the entry to add. -- Caminho da entrada para adicionar. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Caminho da entrada para copiar. -- -- -- Timeout in seconds before clearing the clipboard. -- Tempo limite em segundos antes de limpar a área de transferência. -- -- -- Edit an entry. -- Editar uma entrada. -- -- -- Title for the entry. -- Título para a entrada. -- -- -- title -- título -- -- -- Path of the entry to edit. -- Caminho da entrada para editar. -- -- -- Estimate the entropy of a password. -- Calcular a entropia da senha. -- -- -- Password for which to estimate the entropy. -- Senha para o qual deseja calcular a entropia. -- -- -- Perform advanced analysis on the password. -- Execute análise avançada sobre a senha. -- -- -- -- --Available commands: -- -- -- --Comandos disponíveis: -- -- -- -- Name of the command to execute. -- Nome do comando para executar. -- -- -- List database entries. -- Listar entradas do banco de dados. -- -- -- Path of the group to list. Default is / -- Caminho do grupo para à lista. O padrão é / -- -- -- Find entries quickly. -- Encontrar entradas rapidamente. -- -- -- Search term. -- Termo de pesquisa. -- -- -- Merge two databases. -- Juntar dois bancos de dados. -- -- -- Path of the database to merge from. -- Caminho do banco de dados para combinar como base. -- -- -- Use the same credentials for both database files. -- Use as mesmas credenciais para ambos os arquivos de banco de dados. -- -- -- Key file of the database to merge from. -- Arquivo de chave do banco de dados para combinar como base. -- -- -- Show an entry's information. -- Mostre informações de uma entrada. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nomes de atributos para exibir. Esta opção pode ser especificada mais de uma vez, com cada atributo mostrado um-por-linha em ordem determinada. Se nenhum atributo é especificado, um resumo dos atributos padrão é fornecido. -- -- -- attribute -- atributo -- -- -- Name of the entry to show. -- Nome da entrada para mostrar. -- -- -- NULL device -- Dispositivo NULL -- -- -- error reading from device -- erro ao ler dispositivo -- -- -- malformed string -- sequência de caracteres malformada -- -- -- missing closing quote -- apóstrofo de fechamento ausente -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de usuário -- -- -- Password -- Senha -- -- -- Notes -- Notas -- -- -- Last Modified -- Última modificação -- -- -- Created -- Criado -- -- -- Browser Integration -- Integração com o Navegador -- -- -- SSH Agent -- Agente SSH -- -- -- Generate a new random diceware passphrase. -- Gere uma senha aleatória diceware novamente. -- -- -- Word count for the diceware passphrase. -- Contagem de palavra para a frase-chave diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista de palavras para o gerador diceware. --[Padrão: EFF Inglês] -- -- -- Generate a new random password. -- Gerar nova senha aleatória. -- -- -- Could not create entry with path %1. -- Não foi possível criar uma entrada com o caminho %1. -- -- -- Enter password for new entry: -- Digite a senha para a nova entrada: -- -- -- Writing the database failed %1. -- Gravação do banco de dados falhou %1. -- -- -- Successfully added entry %1. -- Entrada adicionada com sucesso %1. -- -- -- Invalid timeout value %1. -- Valor de tempo limite inválido %1. -- -- -- Entry %1 not found. -- Entrada%1 não encontrada. -- -- -- Entry with path %1 has no TOTP set up. -- Entrada com caminho %1 não tem configuração TOTP -- -- -- Clearing the clipboard in %1 second(s)... -- Limpando a área de transferência em %1 segundo(s)...Limpando a área de transferência em %1 segundo(s)... -- -- -- Clipboard cleared! -- Área de transferência apagada! -- -- -- Silence password prompt and other secondary outputs. -- Pergunta por senha em silêncio e outras saídas secundárias. -- -- -- count -- CLI parameter -- contagem -- -- -- Could not find entry with path %1. -- Não foi possível encontrar a entrada com o caminho %1. -- -- -- Not changing any field for entry %1. -- Não mudar qualquer campo para a entrada %1. -- -- -- Enter new password for entry: -- Digite uma nova senha para entrada: -- -- -- Writing the database failed: %1 -- Gravação do banco de dados falhou: %1 -- -- -- Successfully edited entry %1. -- Entrada editada com sucesso %1. -- -- -- Length %1 -- Tamanho %1 -- -- -- Entropy %1 -- Entropia %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Bits extra multi-palavra %1 -- -- -- Type: Bruteforce -- Tipo: Força Bruta -- -- -- Type: Dictionary -- Tipo: Dicionário -- -- -- Type: Dict+Leet -- Tipo: Dict+leet -- -- -- Type: User Words -- Tipo: Palavras do usuário -- -- -- Type: User+Leet -- Tipo: Usuário+Leet -- -- -- Type: Repeated -- Tipo: Repetido -- -- -- Type: Sequence -- Tipo: Sequência -- -- -- Type: Spatial -- Tipo: Espacial -- -- -- Type: Date -- Tipo: Data -- -- -- Type: Bruteforce(Rep) -- Tipo: Bruteforce(Rep) -- -- -- Type: Dictionary(Rep) -- Tipo: Dicionário(Rep) -- -- -- Type: Dict+Leet(Rep) -- Tipo: Dicionário+Leet(Rep) -- -- -- Type: User Words(Rep) -- Tipo: Palavras do usuário(Rep) -- -- -- Type: User+Leet(Rep) -- Tipo: Usuário+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Tipo: Repetido(Rep) -- -- -- Type: Sequence(Rep) -- Tipo: Sequência(Rep) -- -- -- Type: Spatial(Rep) -- Tipo: Espacial(Rep) -- -- -- Type: Date(Rep) -- Tipo: Data(Rep) -- -- -- Type: Unknown%1 -- Tipo: Desconhecido%1 -- -- -- Entropy %1 (%2) -- Entropia %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Comprimento da senha (%1) != soma do comprimento das partes (%2) *** -- -- -- Failed to load key file %1: %2 -- Falha ao carregar o arquivo de chave %1: %2 -- -- -- Length of the generated password -- Comprimento da senha gerada -- -- -- Use lowercase characters -- Usar caracteres minúsculos -- -- -- Use uppercase characters -- Usar caracteres maiúsculos -- -- -- Use special characters -- Usar caracteres especiais -- -- -- Use extended ASCII -- Use estendido ASCII -- -- -- Exclude character set -- Excluir conjunto de caracteres -- -- -- chars -- caracteres -- -- -- Exclude similar looking characters -- Excluir caracteres parecidos -- -- -- Include characters from every selected group -- Incluir caracteres de cada grupo selecionado -- -- -- Recursively list the elements of the group. -- Listar recursivamente os elementos do grupo. -- -- -- Cannot find group %1. -- Não foi possível encontrar o grupo %1. -- -- -- Error reading merge file: --%1 -- Erro ao ler arquivo para fundir: --%1 -- -- -- Unable to save database to file : %1 -- Não foi possível salvar banco de dados no arquivo: %1 -- -- -- Unable to save database to file: %1 -- Não foi possível salvar bando de dados no arquivo: %1 -- -- -- Successfully recycled entry %1. -- Entrada %1 reciclada com sucesso -- -- -- Successfully deleted entry %1. -- Entrada %1 deletada com sucesso -- -- -- Show the entry's current TOTP. -- Mostrar o TOTP atual da entrada. -- -- -- ERROR: unknown attribute %1. -- ERRO: atributo desconhecido %1. -- -- -- No program defined for clipboard manipulation -- Nenhum programa definido para manipulação da área de transferência -- -- -- file empty -- arquivo vazio -- -- -- %1: (row, col) %2,%3 -- %1: (linha, coluna) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Configurações Inválidas -- -- -- Invalid Key -- TOTP -- Chave Inválida -- -- -- Message encryption failed. -- Criptografia de mensagens falhou. -- -- -- No groups found -- Nenhum grupo encontrado -- -- -- Create a new database. -- Criar um novo banco de dados. -- -- -- File %1 already exists. -- Arquivo %1 já existe. -- -- -- Loading the key file failed -- O carregamento do arquivo de chave falhou -- -- -- No key is set. Aborting database creation. -- Nenhuma chave definida. Abortando a criação de banco de dados. -- -- -- Failed to save the database: %1. -- Falha ao salvar o banco de dados: %1. -- -- -- Successfully created new database. -- Novo banco de dados criado com sucesso. -- -- -- Creating KeyFile %1 failed: %2 -- Criação de Arquivo-Chave %1 falhou: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Carregamento de Arquivo-Chave %1 falhou: %2 -- -- -- Path of the entry to remove. -- Caminho para remover entrada. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- O arquivo cadeado de instância única existente é inválido. Iniciando nova instância. -- -- -- The lock file could not be created. Single-instance mode disabled. -- O arquivo cadeado não pode ser criado. Modo de instância única desabilitado. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - gerenciador de senhas multiplataforma -- -- -- filenames of the password databases to open (*.kdbx) -- nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) -- -- -- path to a custom config file -- caminho para um arquivo de configuração personalizado -- -- -- key file of the database -- arquivo-chave do banco de dados -- -- -- read password of the database from stdin -- ler a senha do banco de dados da entrada padrão -- -- -- Another instance of KeePassXC is already running. -- Outra instância do KeePassXC já está rodando. -- -- -- Fatal error while testing the cryptographic functions. -- Erro fatal enquanto testava as funções criptográficas. -- -- -- KeePassXC - Error -- KeePassXC - Erro -- -- -- Database password: -- Senha do banco de dados: -- -- -- Cannot create new group -- Não é possível criar um novo grupo -- -- -- Deactivate password key for the database. -- Desativar chave de senha para o banco de dados. -- -- -- Displays debugging information. -- Mostrar informações de debug. -- -- -- Deactivate password key for the database to merge from. -- Desativar chave de senha para o banco de dados a qual será mesclado. -- -- -- Version %1 -- Versão %1 -- -- -- Build Type: %1 -- Tipo da Build: %1 -- -- -- Revision: %1 -- Revisão: %1 -- -- -- Distribution: %1 -- Distribuição: %1 -- -- -- Debugging mode is disabled. -- Modo de debug desativado. -- -- -- Debugging mode is enabled. -- Modo de debug ativado. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistema operacional: %1 --Arquitetura da CPU: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Auto-Digitar -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (compartilhamento assinado e não assinado) -- -- -- KeeShare (only signed sharing) -- KeeShare (somente compartilhamento assinado) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (somente compartilhamento não assinado) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nada -- -- -- Enabled extensions: -- Extensões habilitadas: -- -- -- Cryptographic libraries: -- Bibliotecas de criptografia: -- -- -- Cannot generate a password and prompt at the same time! -- Não foi possível gerar uma senha e um alerta ao mesmo tempo! -- -- -- Adds a new group to a database. -- Adicionar um novo grupo ao banco de dados. -- -- -- Path of the group to add. -- Caminho para adicionar o grupo -- -- -- Group %1 already exists! -- Grupo %1 já existe! -- -- -- Group %1 not found. -- Grupo %1 não encontrado. -- -- -- Successfully added group %1. -- Grupo %1 adicionado com sucesso. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Checar se alguma senha vazou publicamente. NOMEDOARQUIVO deve ser o caminho do arquivo listando hashes SHA-1 de senhas vazadas no formato HIBP, assim como disponível em https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- NOMEDOARQUIVO -- -- -- Analyze passwords for weaknesses and problems. -- Analisar senhas por fraquezas e problemas. -- -- -- Failed to open HIBP file %1: %2 -- Falha ao abrir arquivo HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Avaliando entradas no banco de dados com arquivo HIBP. Isto pode demorar um pouco... -- -- -- Close the currently opened database. -- Fechar o atual banco de dados aberto. -- -- -- Display this help. -- Mostrar esta ajuda. -- -- -- slot -- campo -- -- -- Invalid word count %1 -- Contador de palavra %1 inválido -- -- -- The word list is too small (< 1000 items) -- A lista de palavras é muito pequena (<1000 itens) -- -- -- Exit interactive mode. -- Sair do modo interativo. -- -- -- Exports the content of a database to standard output in the specified format. -- Exportar o conteúdo do banco de dados para um padrão de saída no formato especificado. -- -- -- Unable to export database to XML: %1 -- Não foi possível exportar o banco de dados para XML: %1 -- -- -- Unsupported format %1 -- Formato %1 não suportado -- -- -- Use numbers -- Usar números -- -- -- Invalid password length %1 -- Tamanho de senha inválido: %1 -- -- -- Display command help. -- Exibir comando de ajuda. -- -- -- Available commands: -- Comandos disponíveis: -- -- -- Import the contents of an XML database. -- Importar o conteúdo de um banco de dados XML. -- -- -- Path of the XML database export. -- Caminho do banco de dados XML exportado. -- -- -- Path of the new database. -- Caminho do novo banco de dados. -- -- -- Successfully imported database. -- Banco de dados importado com sucesso. -- -- -- Unknown command %1 -- Comando desconhecido %1 -- -- -- Flattens the output to single lines. -- Achatar as saídas em únicas linhas. -- -- -- Only print the changes detected by the merge operation. -- Somente exibir mudanças detectadas pela operação de mesclagem. -- -- -- Yubikey slot for the second database. -- Campo Yubikey para o segundo banco de dados. -- -- -- Successfully merged %1 into %2. -- Sucesso ao mesclar %1 com %2. -- -- -- Database was not modified by merge operation. -- O banco de dados não foi modificado pela operação de mesclagem. -- -- -- Moves an entry to a new group. -- Mover uma entrada para um novo grupo. -- -- -- Path of the entry to move. -- Caminho da entrada para mover. -- -- -- Path of the destination group. -- Caminho do grupo de destino. -- -- -- Could not find group with path %1. -- Não foi possível encontrar o grupo com o caminho %1 -- -- -- Entry is already in group %1. -- Entrada já está no grupo %1. -- -- -- Successfully moved entry %1 to group %2. -- Sucesso ao mover entrada %1 para o grupo %2. -- -- -- Open a database. -- Abrir um banco de dados. -- -- -- Path of the group to remove. -- Caminho do grupo para remover. -- -- -- Cannot remove root group from database. -- Não é possível remover o grupo raiz do banco de dados. -- -- -- Successfully recycled group %1. -- Sucesso ao reciclar grupo %1. -- -- -- Successfully deleted group %1. -- Sucesso ao apagar grupo %1. -- -- -- Failed to open database file %1: not found -- Falha ao abrir arquivo de banco de dados %1: não encontrado -- -- -- Failed to open database file %1: not a plain file -- Falha ao abrir arquivo de banco de dados %1: não é um arquivo válido -- -- -- Failed to open database file %1: not readable -- Falha ao abrir arquivo de banco de dados %1: não é legível -- -- -- Enter password to unlock %1: -- Digite a senha para destrancar %1: -- -- -- Invalid YubiKey slot %1 -- Campo YubiKey inválido %1 -- -- -- Enter password to encrypt database (optional): -- Digite a senha para encriptar seu banco de dados (opcional): -- -- -- HIBP file, line %1: parse error -- Arquivo HIBP, linha %1: parse error -- -- -- Secret Service Integration -- Integração com Secret Service -- -- -- User name -- Nome de usuário -- -- -- Password for '%1' has been leaked %2 time(s)! -- A senha para '%1' foi vazada %2 vez(es)!A senha para '%1' foi vazada %2 vez(es)! -- -- -- Invalid password generator after applying all options -- Gerador de senhas inválido após aplicar todas as opções -- -- -- Show the protected attributes in clear text. -- Mostrar os atributos protegidos como texto legível. -- -- -- Browser Plugin Failure -- Falha no Plugin do Navegador -- -- -- Could not save the native messaging script file for %1. -- Não foi possível salvar o arquivo de script do sistema de mensagens nativo para %1 -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copie o atributo fornecido para a área de transferência. O padrão é "senha", se não especificado. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copia o TOTP atual para a área de transferência (equivalente a "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Copia um atributo da entrada para a área de transferência. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERRO: Por favor, especifique um de --attribute ou --totp, não ambos. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERRO: o atributo %1 é ambíguo, corresponde a %2. -- -- -- Attribute "%1" not found. -- Atributo "%1" não encontrado -- -- -- Entry's "%1" attribute copied to the clipboard! -- Atributo "%1" da entrada copiado para a área de transferência! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Slot Yubikey e serial opcional usado para acessar o banco de dados (por exemplo: 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Tempo de descriptografia de destino em MS para o banco de dados. -- -- -- time -- tempo -- -- -- Set the key file for the database. -- Define o arquivo-chave para o banco de dados. -- -- -- Set a password for the database. -- Define uma senha para o banco de dados. -- -- -- Invalid decryption time %1. -- Tempo de descriptografia inválido %1. -- -- -- Target decryption time must be between %1 and %2. -- O tempo de descriptografia de destino deve ser entre %1 e %2. -- -- -- Failed to set database password. -- Falha ao definir a senha do banco de dados. -- -- -- Benchmarking key derivation function for %1ms delay. -- Função de derivação de chave de benchmarking para atraso de %1 ms. -- -- -- Setting %1 rounds for key derivation function. -- Configurando %1 rodadas para a função de derivação de chave. -- -- -- error while setting database key derivation settings. -- erro ao definir configurações de derivação da chave do banco de dados. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formato usado ao exportar. Escolhas disponíveis são 'xml' ou 'csv'. O padrão é 'xml'. -- -- -- Unable to import XML database: %1 -- Não foi possível importar banco de dados XML: %1 -- -- -- Show a database's information. -- Mostra as informações de um banco de dados. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nome: -- -- -- Description: -- Descrição: -- -- -- Cipher: -- Cifra: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- A Lixeira está habilitada. -- -- -- Recycle bin is not enabled. -- A Lixeira não está habilitada. -- -- -- Invalid command %1. -- Comando inválido: %1. -- -- -- Invalid YubiKey serial %1 -- Serial YubiKey inválido %1 -- -- -- Please touch the button on your YubiKey to continue… -- Por favor, pressione o botão em seu YubiKey para continuar... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Você deseja criar um banco de dados com uma senha vazia? [S/N]: -- -- -- Repeat password: -- Repetir senha: -- -- -- Error: Passwords do not match. -- Erro: as senhas não correspondem. -- -- -- All clipping programs failed. Tried %1 -- -- Todos os programas de recorte falharam. Tentativas: %1 -- -- -- AES (%1 rounds) -- AES (%1 rodadas) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Atraso de benchmark %1 -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ícone -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Erro interno do zlib ao compactar: -- -- -- Error writing to underlying device: -- Erro ao gravar no dispositivo subjacente: -- -- -- Error opening underlying device: -- Erro ao abrir dispositivo subjacente: -- -- -- Error reading data from underlying device: -- Erro ao ler dados do dispositivo subjacente: -- -- -- Internal zlib error when decompressing: -- Erro interno do zlib ao descompactar: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Sem suporte ao formato gzip nesta versão do zlib. -- -- -- Internal zlib error: -- Erro interno do zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Exibir também entradas que foram excluídas dos relatórios -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Passe o mouse sobre o motivo para mostrar detalhes adicionais. Clique duas vezes nas entradas para editar. -- -- -- Bad -- Password quality -- Ruim -- -- -- Bad — password must be changed -- Ruim — a senha precisa ser mudada -- -- -- Poor -- Password quality -- Pobre -- -- -- Poor — password should be changed -- Pobre — a senha precisa ser mudada -- -- -- Weak -- Password quality -- Fraco -- -- -- Weak — consider changing the password -- Fraca — considere mudar a senha -- -- -- (Excluded) -- (Excluída) -- -- -- This entry is being excluded from reports -- Esta entrada está sendo excluída dos relatórios -- -- -- Please wait, health data is being calculated... -- Por favor espere, os dados de saúde estão sendo calculados... -- -- -- Congratulations, everything is healthy! -- Parabéns, tudo está saudável! -- -- -- Title -- Título -- -- -- Path -- Caminho -- -- -- Score -- Pontuação -- -- -- Reason -- Motivo -- -- -- Edit Entry... -- Editar Entrada... -- -- -- Exclude from reports -- Excluir dos relatórios -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- CUIDADO: Este relatório requer o envio de informações para o serviço online Have I Been Pwned (https://haveibeenpwned.com). Se você prosseguir, as senhas do banco de dados serão criptografadas e os cinco primeiros caracteres desses hashes serão enviados com segurança para este serviço. Seu banco de dados permanece seguro e não pode ser reconstituído com essas informações. No entanto, o número de senhas enviadas e o seu endereço IP serão expostos a este serviço. -- -- -- Perform Online Analysis -- Executar Análise Online -- -- -- Also show entries that have been excluded from reports -- Exibir também entradas que foram excluídas dos relatórios -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Esta versão do KeePassXC não possui funções de rede. A rede é necessária para verificar suas senhas no banco de dados do Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Parabéns, nenhuma senha expostas! -- -- -- Title -- Título -- -- -- Path -- Caminho -- -- -- Password exposed… -- Senha exposta... -- -- -- (Excluded) -- (Excluída) -- -- -- This entry is being excluded from reports -- Esta entrada está sendo excluída dos relatórios -- -- -- once -- uma vez -- -- -- up to 10 times -- acima de 10 vezes -- -- -- up to 100 times -- acima de 100 vezes -- -- -- up to 1000 times -- acima de 1000 vezes -- -- -- up to 10,000 times -- acima de 10000 vezes -- -- -- up to 100,000 times -- acima de 100000 vezes -- -- -- up to a million times -- acima de um milhão de vezes -- -- -- millions of times -- milhões de vezes -- -- -- Edit Entry... -- Editar Entrada... -- -- -- Exclude from reports -- Excluir dos relatórios -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Passe o mouse por cima dos ícones de erro para maiores informações. -- -- -- Name -- Nome -- -- -- Value -- Valor -- -- -- Please wait, database statistics are being calculated... -- Por favor espere, as estatísticas do banco de dados estão sendo calculadas... -- -- -- Database name -- Nome do banco de dados -- -- -- Description -- Descrição -- -- -- Location -- Localização -- -- -- Last saved -- Salvo por último em -- -- -- Unsaved changes -- Mudanças não-salvas -- -- -- yes -- sim -- -- -- no -- não -- -- -- The database was modified, but the changes have not yet been saved to disk. -- O banco de dados foi modificado, mas as mudanças ainda não foram salvas no disco. -- -- -- Number of groups -- Número de grupos -- -- -- Number of entries -- Número de entradas -- -- -- Number of expired entries -- Número de entradas expiradas -- -- -- The database contains entries that have expired. -- O banco de dados contém entradas que expiraram. -- -- -- Unique passwords -- Senhas únicas -- -- -- Non-unique passwords -- Senhas não-únicas -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mais que 10% das senhas estão sendo reutilizadas. Use senhas únicas quando possível. -- -- -- Maximum password reuse -- Máximo de reusos da senha -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Algumas senhas são usadas mais do que três vezes. Use senhas únicas quando possível. -- -- -- Number of short passwords -- Números de senhas pequenas -- -- -- Recommended minimum password length is at least 8 characters. -- Comprimento mínimo recomendado de senha é pelo menos 8 caracteres. -- -- -- Number of weak passwords -- Número de senhas fracas -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Recomendamos o uso de senhas longas e randomizados com uma classificação de 'bom' ou 'excelente'. -- -- -- Entries excluded from reports -- Entradas excluídas dos relatórios -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Excluindo entradas de relatórios. Por exemplo: porque elas têm uma senha ruim, não é necessariamente um problema, mas você deve ficar de olho nelas. -- -- -- Average password length -- Comprimento médio da senha -- -- -- %1 characters -- %1 caracteres -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- O tamanho médio das senhas é menor que dez caracteres. Senhas maiores são mais seguras. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Falha na conexão do agente. -- -- -- Agent protocol error. -- Erro de protocolo do agente -- -- -- No agent running, cannot add identity. -- Nenhum agente em execução, não é possível adicionar identidade. -- -- -- No agent running, cannot remove identity. -- Nenhum agente em execução, não é possível remover a identidade. -- -- -- Agent refused this identity. Possible reasons include: -- Agente recusou essa identidade. Possíveis razões incluem: -- -- -- The key has already been added. -- O atalho já foi adicionado. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Vida útil limitada não é suportado pelo agente (verificar opções). -- -- -- A confirmation request is not supported by the agent (check options). -- Uma solicitação de confirmação não é suportado pelo agente (verificar opções). -- -- -- Key identity ownership conflict. Refusing to add. -- Conflito de propriedade da identidade principal. Recusando-se a adicionar. -- -- -- No agent running, cannot list identities. -- Nenhum agente em execução, não é possível listar identidades. -- -- -- -- SearchHelpWidget -- -- Search Help -- Ajuda com a Busca -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Termos de pesquisa são as seguintes: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Cada termo pesquisado deve corresponder (exemplo, logical AND) -- -- -- Modifiers -- Modificadores -- -- -- exclude term from results -- excluir termo dos resultados -- -- -- match term exactly -- encontrar termo exato -- -- -- use regex in term -- usar regex no termo -- -- -- Fields -- Campos -- -- -- Term Wildcards -- Termos Coringas -- -- -- match anything -- coincidir com qualquer coisa -- -- -- match one -- coincidir com um -- -- -- logical OR -- lógico OU -- -- -- Examples -- Exemplos -- -- -- -- SearchWidget -- -- Search -- Pesquisar -- -- -- Limit search to selected group -- Limitar busca ao grupo selecionado -- -- -- Search Help -- Ajuda com a Busca -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Buscar (%1)... -- -- -- Case sensitive -- Diferenciar maiúsculas e minúsculas -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opções -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Habilitar integração KeePassXC Freedesktop.org Secret Service -- -- -- General -- Geral -- -- -- Show notification when credentials are requested -- Mostrar notificação quando credenciais forem solicitadas -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Se a lixeira estiver habilitado para o banco de dados, as entradas serão movidas para a lixeira diretamente. Por outro lado, elas serão apagadas sem confirmação.</p><p>Você irá ser alertado se alguma entrada for referenciada por outras.</p></body></html> -- -- -- Exposed database groups: -- Grupos do banco de dados exposto: -- -- -- Authorization -- Autorização -- -- -- These applications are currently connected: -- Esses aplicativos estão atualmente conectados: -- -- -- Don't confirm when entries are deleted by clients -- Não confirmar quando entradas são excluídas por clientes -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Erro:</b> Falha na conexão com o DBus. Por favor, verifique sua configuração do DBus. -- -- -- <b>Warning:</b> -- <b>Aviso:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Salve as alterações atuais para ativar o plugin e ativar a edição desta seção. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Ativo -- -- -- Allow export -- Permitir exportação -- -- -- Allow import -- Permitir importação -- -- -- Own certificate -- Certificado próprio -- -- -- Fingerprint: -- Impressão digital: -- -- -- Certificate: -- Certificado: -- -- -- Signer -- Signatário -- -- -- Key: -- Chave: -- -- -- Generate -- Gerar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Imported certificates -- Certificados importados -- -- -- Trust -- Confiar -- -- -- Ask -- Perguntar -- -- -- Untrust -- Não Confiar -- -- -- Remove -- Remover -- -- -- Path -- Caminho -- -- -- Status -- Status -- -- -- Fingerprint -- Fingerprint -- -- -- Certificate -- Certificado -- -- -- Trusted -- Confiável -- -- -- Untrusted -- Não Confiável -- -- -- Unknown -- Desconhecido -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Arquivo chave KeeShare -- -- -- All files -- Todos arquivos -- -- -- Select path -- Selecione o caminho -- -- -- Exporting changed certificate -- Exportando certificado alterado -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- O certificado exportado não é o mesmo que está em uso. Você quer exportar o certificado atual? -- -- -- Signer: -- Signatário: -- -- -- Allow KeeShare imports -- Permitir KeeShare importar -- -- -- Allow KeeShare exports -- Permitir KeeShare exportar -- -- -- Only show warnings and errors -- Mostrar apenas avisos e erros -- -- -- Key -- Chave -- -- -- Signer name field -- Campo de nome do signatário -- -- -- Generate new certificate -- Gerar novo certificado -- -- -- Import existing certificate -- Importar certificado existente -- -- -- Export own certificate -- Exportar próprio certificado -- -- -- Known shares -- Compartilhamentos conhecidos -- -- -- Trust selected certificate -- Confiar nos certificados selecionados -- -- -- Ask whether to trust the selected certificate every time -- Perguntar se deve confiar nos certificados selecionados sempre -- -- -- Untrust selected certificate -- Não confiar nos certificados selecionados -- -- -- Remove selected certificate -- Remover certificado selecionado -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Sobrescrever recipiente de compartilhamento assinado não é suportado - exportação impedida -- -- -- Could not write export container (%1) -- Não foi possível exportar recipiente (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Não foi possível embutir assinatura: não foi possível abrir o arquivo para escrever (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Não foi possível embutir assinatura: não foi possível escrever no arquivo (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Não foi possível embutir banco de dados: não foi possível abrir o arquivo para escrever (%1) -- -- -- Could not embed database: Could not write file (%1) -- Não foi possível incorporar o banco de dados: não foi possível gravar o arquivo (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- A substituição de recipiente de compartilhamento não assinado não é suportada - exportação impedida -- -- -- Could not write export container -- Não foi possível escrever o recipiente de exportação -- -- -- Unexpected export error occurred -- Ocorreu um erro de exportação inesperado -- -- -- -- ShareImport -- -- Import from container without signature -- Importar do recipiente sem assinatura -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Não podemos verificar a origem do recipiente compartilhado porque ele não está assinado. Você realmente quer importar de %1? -- -- -- Import from container with certificate -- Importar do recipiente com certificado -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Você quer confiar em %1 com a impressão digitar de %2 até %3? {1 ?}{2 ?} -- -- -- Not this time -- Não dessa vez -- -- -- Never -- Nunca -- -- -- Always -- Sempre -- -- -- Just this time -- Só desta vez -- -- -- Signed share container are not supported - import prevented -- Compartilhamento assinado de recipiente não é suportado - importação impedida -- -- -- File is not readable -- Arquivo não é legível -- -- -- Invalid sharing container -- Recipiente de compartilhamento inválido -- -- -- Untrusted import prevented -- Importação não confiável impedida -- -- -- Successful signed import -- Importação assinada bem-sucedida -- -- -- Unsigned share container are not supported - import prevented -- Compartilhamento não assinado de recipiente não é suportado - importação impedida -- -- -- Successful unsigned import -- Sucesso ao importar não assinado -- -- -- File does not exist -- Arquivo não existe -- -- -- Unknown share container type -- Tipo de compartilhamento de recipiente desconhecido -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importação de %1 falhou (%2) -- -- -- Import from %1 successful (%2) -- Importado de %1 com sucesso (%2) -- -- -- Imported from %1 -- Importado de %1 -- -- -- Export to %1 failed (%2) -- Exportar para %1 falhou (%2) -- -- -- Export to %1 successful (%2) -- Exportado para %1 com sucesso (%2) -- -- -- Export to %1 -- Exportar para %1 -- -- -- Multiple import source path to %1 in %2 -- Importação de múltiplos caminhos de fontes para %1 em %2 -- -- -- Conflicting export target path %1 in %2 -- Alvo de caminhos %1 em %2 de exportação conflitante -- -- -- -- TotpDialog -- -- Timed Password -- Senha Temporária -- -- -- 000000 -- 000000 -- -- -- Copy -- Copiar -- -- -- Expires in <b>%n</b> second(s) -- Expira em <b>%n</b> segundo(s)Expira em <b>%n</b> segundo(s) -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copiar -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOTA: Essas configurações de TOTP são personalizadas e podem não funcionar com outros autenticadores. -- -- -- There was an error creating the QR code. -- Ocorreu um erro ao criar o código QR. -- -- -- Closing in %1 seconds. -- Fechando em %1 segundos. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Configurar TOTP -- -- -- Default RFC 6238 token settings -- Configurações de símbolo padrão RFC 6238 -- -- -- Steam token settings -- Configurações de steam token -- -- -- Use custom settings -- Usar configurações personalizadas -- -- -- Custom Settings -- Configurações Personalizadas -- -- -- Time step: -- Período de tempo: -- -- -- sec -- Seconds -- seg -- -- -- Code size: -- Tamanho do código: -- -- -- Secret Key: -- Chave secreta: -- -- -- Secret key must be in Base32 format -- Chave secreta deve ser em formato Base32 -- -- -- Secret key field -- Campo da chave secreta -- -- -- Algorithm: -- Algoritimo: -- -- -- Time step field -- Campo do passo de tempo -- -- -- digits -- dígitos -- -- -- Invalid TOTP Secret -- Segredo TOTP inválido -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Você digitou uma chave secreta inválida. A chave deve ser em formato Base32. --Exemplo: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirmar Remoção de Configurações TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Tem certeza que quer apagar as configurações TOTP para esta entrada? -- -- -- -- URLEdit -- -- Invalid URL -- URL inválida -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Verificando atualizações -- -- -- Checking for updates... -- Verificando atualizações... -- -- -- Close -- Fechar -- -- -- Update Error! -- Erro de atualização! -- -- -- An error occurred in retrieving update information. -- Ocorreu um erro ao recuperar informações de atualização. -- -- -- Please try again later. -- Por favor, tente novamente mais tarde. -- -- -- Software Update -- Atualização de software -- -- -- A new version of KeePassXC is available! -- Uma nova versão do KeePassXC está disponível! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 está agora disponível - você tem %2. -- -- -- Download it at keepassxc.org -- Faça o download em keepassxc.org -- -- -- You're up-to-date! -- Você está atualizado! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 é atualmente a versão mais recente disponível -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Começe a guardar suas senhas de maneira segura em um banco de dados do KeePassXC -- -- -- Create new database -- Criar novo banco de dados -- -- -- Open existing database -- Abrir banco de dados existente -- -- -- Import from KeePass 1 -- Importar do KeePass 1 -- -- -- Import from CSV -- Importar arquivo CSV -- -- -- Recent databases -- Bancos de dados recentes -- -- -- Welcome to KeePassXC %1 -- Bem-vindo ao KeePassXC %1 -- -- -- Import from 1Password -- Importar do 1Password -- -- -- Open a recent database -- Abrir um banco de dados recente -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Slot Configurado - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Resposta do Desafio - Slot %3 - %4 -- -- -- Press -- Aperte -- -- -- Passive -- Passivo -- -- -- %1 Invalid slot specified - %2 -- Slot inválido do %1 especificado - %2 -- -- -- The YubiKey interface has not been initialized. -- A interface do YubiKey não foi inicializada. -- -- -- Hardware key is currently in use. -- A chave de hardware está atualmente em uso. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Não foi possível encontrar a chave de hardware com o número de série %1. Por favor, conecte-o para continuar. -- -- -- Hardware key timed out waiting for user interaction. -- Chave de hardware atingiu o tempo limite aguardando interação do usuário. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Ocorreu um erro de USB ao acessar a chave de hardware: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Falha ao completar o desafio-resposta, o erro específico foi: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Atualizar -- -- -- YubiKey Challenge-Response -- YubiKey Desafio-Resposta -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Se você possui uma <a href="https://www.yubico.com/">YubiKey</a>, você pode usá-la para segurança adicional.</p><p>A YubiKey requer que um de seus slots seja programado como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Desafio-Resposta</a>.</p> -- -- -- Refresh hardware tokens -- Atualizar os tokens de hardware -- -- -- Hardware key slot selection -- Seleção de campo de chave de hardware -- -- -- Could not find any hardware keys! -- Não foi possível encontrar nenhuma chave de hardware! -- -- -- Selected hardware key slot does not support challenge-response! -- O slot de chave de hardware selecionado não suporta resposta a desafios! -- -- -- Detecting hardware keys… -- Detectando chaves de hardware... -- -- -- No hardware keys detected -- Nenhuma chave física detectada -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pt_PT.ts keepassxc-2.6.4-patched/share/translations/keepassx_pt_PT.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_pt_PT.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_pt_PT.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7895 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Acerca de KeePassXC -- -- -- About -- Acerca -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Reporte os erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC é distribuído nos termos da GNU General Public License (GPL) versão 2 ou versão 3 (por opção). -- -- -- Contributors -- Colaboradores -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Consulte os contributos em GitHub</a> -- -- -- Debug Info -- Informação de depuração -- -- -- Include the following information whenever you report a bug: -- Inclua as seguintes informações sempre que reportar um erro: -- -- -- Copy to clipboard -- Copiar para a área de transferência -- -- -- Project Maintainers: -- Manutenção do projeto: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Um agradecimento especial da equipa KeePassXC a debfx por ter criado a aplicação KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Utilizar OpenSSH para Windows em vez de Pageant -- -- -- Enable SSH Agent integration -- Ativar integração de agente SSH -- -- -- SSH_AUTH_SOCK value -- Valor SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Substituição SSH_AUTH_SOCK -- -- -- (empty) -- (vazio) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Não existe um 'socket' do agente SSh. Certifique-se que a variável de ambiente SSH_AUTH_SOCK existe ou defina uma sobreposição. -- -- -- SSH Agent connection is working! -- Ligação ao agente SSH a funcionar! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Definições da aplicação -- -- -- General -- Geral -- -- -- Security -- Segurança -- -- -- Access error for config file %1 -- Erro de acesso ao ficheiro %1 -- -- -- Icon only -- Apenas ícones -- -- -- Text only -- Apenas texto -- -- -- Text beside icon -- Texto ao lado dos ícones -- -- -- Text under icon -- Texto por baixo dos ícones -- -- -- Follow style -- Seguir estilo -- -- -- Reset Settings? -- Repor definições? -- -- -- Are you sure you want to reset all general and security settings to default? -- Tem a certeza de que deseja repor todas as definições para os valores padrão? -- -- -- Monochrome (light) -- Monocromático (claro) -- -- -- Monochrome (dark) -- Monocromático (escuro) -- -- -- Colorful -- Colorido -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Tem que reiniciar a aplicação para aplicar o novo idioma. Reiniciar agora? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Definições básicas -- -- -- Startup -- Arranque -- -- -- Start only a single instance of KeePassXC -- Iniciar apenas uma instância do KeepassXC -- -- -- Minimize window at application startup -- Minimizar janela ao iniciar a aplicação -- -- -- File Management -- Gestão de ficheiros -- -- -- Backup database file before saving -- Criar backup da base de dados antes de guardar -- -- -- Automatically save after every change -- Guardar automaticamente a cada alteração -- -- -- Automatically reload the database when modified externally -- Recarregar base de dados se esta for modificada externamente -- -- -- Entry Management -- Gestão de entradas -- -- -- Use group icon on entry creation -- Utilizar ícone do grupo ao criar a entrada -- -- -- Minimize instead of app exit -- Minimizar aplicação em vez de fechar -- -- -- Show a system tray icon -- Mostrar ícone na bandeja do sistema -- -- -- Hide window to system tray when minimized -- Ao minimizar, ocultar janela na bandeja do sistema -- -- -- Auto-Type -- Escrita automática -- -- -- Use entry title to match windows for global Auto-Type -- Utilizar título da entrada para correspondência com a escrita automática -- -- -- Use entry URL to match windows for global Auto-Type -- Utilizar URL da entrada para correspondência com a escrita automática -- -- -- Always ask before performing Auto-Type -- Perguntar antes de executar a escrita automática -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Barra de ferramentas amovível -- -- -- Remember previously used databases -- Memorizar últimas bases de dados utilizadas -- -- -- Load previously open databases on startup -- Ao iniciar, carregar as últimas base de dados utilizadas -- -- -- Remember database key files and security dongles -- Memorizar ficheiros-chave e dispositivos de segurança da base de dados -- -- -- Check for updates at application startup once per week -- Procurar por atualizações semanalmente -- -- -- Include beta releases when checking for updates -- Incluir versões beta ao procurar por atualizações -- -- -- Language: -- Idioma: -- -- -- (restart program to activate) -- (reinicie para aplicar as alterações) -- -- -- Minimize window after unlocking database -- Minimizar janela após desbloquear a base de dados -- -- -- Minimize when opening a URL -- Minimizar ao abrir um URL -- -- -- Hide window when copying to clipboard -- Ocultar janela ao copiar para a área de transferência -- -- -- Minimize -- Minimizar -- -- -- Drop to background -- Enviar para segundo plano -- -- -- Favicon download timeout: -- Tempo limite para descarregar o 'favicon': -- -- -- Website icon download timeout in seconds -- Tempo limite para descarregar os ícones dos sites (em segundos) -- -- -- sec -- Seconds -- seg -- -- -- Toolbar button style -- Estilo dos botões da barra de ferramentas -- -- -- Language selection -- Seleção de idioma -- -- -- Global auto-type shortcut -- Atalho global para escrita automática -- -- -- Auto-type character typing delay milliseconds -- Atraso para digitar a escrita automática de caracteres (milissegundos) -- -- -- Auto-type start delay milliseconds -- Atraso para iniciar a escrita automática (milissegundos) -- -- -- Automatically launch KeePassXC at system startup -- Iniciar KeePassXC ao arrancar o sistema -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Guardar bases de dados em segurança (desative se ocorrerem erros com Dropbox e outros serviços) -- -- -- User Interface -- Interface -- -- -- Toolbar button style: -- Estilo dos botões da barra de ferramentas: -- -- -- Use monospaced font for notes -- Utilizar letra mono-espaçada para as notas -- -- -- Tray icon type: -- Ícone na bandeja: -- -- -- Reset settings to default… -- Repor definições padrão... -- -- -- Auto-Type typing delay: -- Atraso para digitar a escrita automática: -- -- -- Global Auto-Type shortcut: -- Atalho global para escrita automática: -- -- -- Auto-Type start delay: -- Atraso para iniciar a escrita automática: -- -- -- Automatically save when locking database -- Guardar alterações ao bloquear a base de dados -- -- -- Automatically save non-data changes when locking database -- Guardar alterações a não-dados ao bloquear a base de dados -- -- -- Tray icon type -- Tipo de ícone na bandeja -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Tempo limite -- -- -- Clear clipboard after -- Limpar área de transferência após -- -- -- sec -- Seconds -- seg -- -- -- Lock databases after inactivity of -- Bloquear base de dados se inativa durante -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Esquecer TouchID após inatividade de -- -- -- Convenience -- Conveniência -- -- -- Lock databases when session is locked or lid is closed -- Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil -- -- -- Forget TouchID when session is locked or lid is closed -- Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil -- -- -- Lock databases after minimizing the window -- Bloquear base de dados ao minimizar a janela -- -- -- Re-lock previously locked database after performing Auto-Type -- Bloquear novamente a base de dados depois de usar a escrita automática -- -- -- Hide passwords in the entry preview panel -- Ocultar palavras-passe no painel de pré-visualização de entradas -- -- -- Hide entry notes by default -- Por definição, ocultar notas da entrada -- -- -- Privacy -- Privacidade -- -- -- Use DuckDuckGo service to download website icons -- Utilizar DuckDuckGo para descarregar os ícones dos sites -- -- -- Clipboard clear seconds -- Limpar área de transferência após -- -- -- Touch ID inactivity reset -- Repor inatividade de TouchID -- -- -- Database lock timeout seconds -- Bloquear base de dados após (segundos) -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Limpar campo de pesquisa após -- -- -- Require password repeat when it is visible -- Pedir repetição de palavra-passe mesmo se visível -- -- -- Hide passwords when editing them -- Ocultar palavras-passe durante a edição -- -- -- Use placeholder for empty password fields -- Utilizar marcadores de posição para campos vazios -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Não foi encontrada uma entrada coincidente com o título da janela: -- -- -- Auto-Type - KeePassXC -- KeePassXC - Escrita automática -- -- -- Auto-Type -- Escrita automática -- -- -- The Syntax of your Auto-Type statement is incorrect! -- A sintaxe da instrução de escrita automática está errada! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Este comando de escrita automática tem um atraso muito grande. Deseja mesmo continuar? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar? -- -- -- Permission Required -- Permissão necessária -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC necessita da permissão 'Accessibility' para poder executar a escrita automática. Se já concedeu esta permissão, pode ser necessário reiniciar a aplicação. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Janela -- -- -- Sequence -- Sequência -- -- -- Default sequence -- Sequência padrão -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de utilizador -- -- -- Sequence -- Sequência -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copiar nome de &utilizador -- -- -- Copy &password -- Copiar &palavra-passe -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permissão necessária -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC necessita das permissões 'Accessibility' e 'Screen Recorder' para poder executar a escrita automática. A permissão 'Screen recording' é necessária para associar o titulo da janela às entradas. Se já concedeu estas permissões, pode ser necessário reiniciar a aplicação. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- KeePassXC - Escrita automática -- -- -- Select entry to Auto-Type: -- Selecione a entrada para escrita automática: -- -- -- Search... -- Pesquisar... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Pedido de acesso -- -- -- %1 is requesting access to the following entries: -- %1 está a solicitar acesso às seguintes entradas: -- -- -- Remember access to checked entries -- Memorizar acesso às entradas marcadas -- -- -- Remember -- Memorizar -- -- -- Allow access to entries -- Permitir acesso às entradas -- -- -- Allow Selected -- Permitir selecionados -- -- -- Deny All -- Recusar tudo -- -- -- Disable for this site -- Desativar para este site -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser - Guardar entrada -- -- -- Ok -- Ok -- -- -- Cancel -- Cancelar -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Existem várias bases de dados abertas. --Selecione a base de dados correta para guardar as credenciais. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Pedido de associação da nova chave -- -- -- Save and allow access -- Guardar e permitir acesso -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Substituir chave existente? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Já existe uma chave de cifra partilhada com o nome "%1". --Deseja substituir a chave existente? -- -- -- KeePassXC: Update Entry -- KeePassXC: Atualizar entrada -- -- -- Do you want to update the information in %1 - %2? -- Deseja atualizar as informações em %1 - %2? -- -- -- Abort -- Abortar -- -- -- Converting attributes to custom data… -- A converter atributos para dados personalizados... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Atributos KeePassHTTP convertidos -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Convertidos com sucesso s atributos para %1 entrada(s). --%2 chaves movidas para dados personalizados. -- -- -- Successfully moved %n keys to custom data. -- %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Não existem entradas com atributos KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- A base de dados ativa não tem entradas com atributos KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Detetadas definições de integração legada com o navegador -- -- -- KeePassXC: Create a new group -- KeePassXC: Criar um novo grupo -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Recebido um pedido para a criação do grupo "%1". --Deseja criar este grupo? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Tem que mover as definições KeePassXC-Browser para as definições da base de dados. --Este procedimento é necessário para manter as ligações existentes. --Gostaria de migrar agora as definições? -- -- -- Don't show this warning again -- Não mostrar novamente -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Recebeu um pedido de associação para a base de dados abaixo: --%1 -- --Indique um nome ou ID exclusivo para a ligação como, por exemplo: --chrome-laptop -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Caixa de diálogo -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Necessário para aceder às suas bases de dados com KeePassXC-Browser -- -- -- Enable browser integration -- Ativar integração com o navegador -- -- -- General -- Geral -- -- -- Browsers installed as snaps are currently not supported. -- Ainda não existe suporte a navegadores no formato Snap. -- -- -- Enable integration for these browsers: -- Ativar integração para estes navegadores: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Mostrar notificação se as credenciais forem solicitadas -- -- -- Request to unlock the database if it is locked -- Pedir para desbloquear a base de dados se esta estiver bloqueada -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Devolver apenas as entradas com o mesmo esquema (http://, https://, ...) -- -- -- Match URL scheme (e.g., https://...) -- Correspondência com os esquemas URL (https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Devolver apenas as melhores entradas para o URL específico em vez das entradas para o domínio -- -- -- Return only best-matching credentials -- Devolver apenas as credenciais mais parecidas -- -- -- Returns expired credentials. String [expired] is added to the title. -- Devolve as credenciais caducadas. Adiciona [caducada] ao título. -- -- -- Allow returning expired credentials -- Permitir devolução de credencias caducadas -- -- -- All databases connected to the extension will return matching credentials. -- Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Pesquisar por credenciais semelhantes em todas as base de dados abertas -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Ordenar por título as credenciais coincidentes -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Ordenar por nome de utilizador as credenciais coincidentes -- -- -- Advanced -- Avançado -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nunca perguntar antes de aceder às credenciais -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nunca perguntar antes de atualizar as credenciais -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Não pedir permissão para autorização HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- A criação ou atualização dos campos de cadeias não é suportada. -- -- -- Return advanced string fields which start with "KPH: " -- Mostrar campos avançados que iniciem com "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Não mostrar janela que sugere a migração das definições KeePassHTTP legadas. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Não perguntar para migrar as definições KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os 'sripts' nativos de mensagens. -- -- -- Update native messaging manifest files at startup -- Ao iniciar, atualizar ficheiros de mensagens nativas -- -- -- Use a custom proxy location if you installed a proxy manually. -- Utilize um proxy personalizado caso o tenha instalado manualmente. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Utilizar proxy personalizado: -- -- -- Custom proxy location field -- Campo Localização do proxy personalizado -- -- -- Browser for custom proxy file -- Navegador para o ficheiro do proxy personalizado -- -- -- Browse... -- Button for opening file dialog -- Explorar... -- -- -- Use a custom browser configuration location: -- Utilizar localização personalizada para o navegador: -- -- -- Browser type: -- Tipo de navegador: -- -- -- Toolbar button style -- Estilo dos botões da barra de ferramentas -- -- -- Config Location: -- Localização da configuração: -- -- -- Custom browser location field -- Campo de localização personalizado -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Procurar por um caminho personalizado -- -- -- Custom extension ID: -- ID da extensão personalizada: -- -- -- Custom extension ID -- ID da extensão personalizada -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter o script em %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Necessita de KeePassXC-Browser para que a integração funcione corretamente.<br /> Disponível para %1, %2 e %3. %4 -- -- -- Please see special instructions for browser extension use below -- Por favor consulte abaixo as instruções para a utilização da extensão -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Erro:</b> não foi possível encontrar a localização do proxy!<br/> A integração com o navegador não funcionará sem um proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Aviso</b>: as opções seguintes podem ser perigosas! -- -- -- Executable Files -- Ficheiros executáveis -- -- -- All Files -- Todos os ficheiros -- -- -- Select custom proxy location -- Selecione a localização do proxy personalizado -- -- -- Select native messaging host folder location -- Selecione a localização da pasta de mensagens nativas -- -- -- -- CloneDialog -- -- Clone Options -- Opções de clonagem -- -- -- Append ' - Clone' to title -- Adicionar ' -Clone' ao título -- -- -- Replace username and password with references -- Substituir nome de utilizador e palavra-passe por referências -- -- -- Copy history -- Copiar histórico -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importar campos do CSV -- -- -- filename -- nome do ficheiro -- -- -- size, rows, columns -- tamanho, linhas, colunas -- -- -- Encoding -- Codificação -- -- -- Codec -- Codificador -- -- -- Text is qualified by -- Texto qualificado por -- -- -- Fields are separated by -- Campos separados por -- -- -- Comments start with -- Comentários iniciados por -- -- -- Consider '\' an escape character -- Considerar '\' como carácter de escape -- -- -- Preview -- Pré-visualização -- -- -- Imported from CSV file -- Importada de ficheiro CSV -- -- -- Original data: -- Dados originais: -- -- -- Error -- Erro -- -- -- Error(s) detected in CSV file! -- Detetado(s) erro(s) no ficheiro CSV! -- -- -- [%n more message(s) skipped] -- [%n mensagem ignorada][%n mensagens ignoradas] -- -- -- CSV import: writer has errors: --%1 -- Importação CSV com erros: --%1 -- -- -- Text qualification -- Qualificação de texto -- -- -- Field separation -- Separação de campos -- -- -- Number of header lines to discard -- Número de linhas de cabeçalho a desconsiderar -- -- -- CSV import preview -- Pré-visualização da importação CSV -- -- -- Column Association -- Associação de colunas -- -- -- Last Modified -- Última modificação -- -- -- Password -- Palavra-passe -- -- -- Created -- Criada -- -- -- Notes -- Notas -- -- -- Title -- Título -- -- -- Group -- Grupo -- -- -- URL -- URL -- -- -- Username -- Nome de utilizador -- -- -- Header lines skipped -- Linhas de cabeçalho ignoradas -- -- -- First line has field names -- Primeira linha tem nomes de campo -- -- -- Not Present -- Inexistente -- -- -- Column %1 -- Coluna %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ícone -- -- -- -- CsvParserModel -- -- %n column(s) -- %n coluna%n colunas -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n bytes -- -- -- %n row(s) -- %n linha%n linhas -- -- -- -- Database -- -- File %1 does not exist. -- Ficheiro %1 não existe. -- -- -- Unable to open file %1. -- Não foi possível abrir o ficheiro %1. -- -- -- Error while reading the database: %1 -- Erro ao ler a base de dados: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Não é possível escrever no ficheiro porque este foi aberto no modo de leitura. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Chave não transformada. Isto é um erro e deve ser reportado aos programadores! -- -- -- %1 --Backup database located at %2 -- %1 --Backup localizado em %2 -- -- -- Could not save, database does not point to a valid file. -- Não foi possível guardar porque a base de dados não indica um ficheiro válido. -- -- -- Could not save, database file is read-only. -- Não foi possível guardar porque a base de dados está no modo de leitura. -- -- -- Database file has unmerged changes. -- A base de dados tem alterações não guardadas. -- -- -- Recycle Bin -- Reciclagem -- -- -- Passwords -- Root group name -- Palavras-passe -- -- -- Database save is already in progress. -- A base de dados já está a ser guardada. -- -- -- Could not save, database has not been initialized! -- Não é possível guardar, base de dados não inicializada! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- KeePassXC - Desbloquear base de dados -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Ficheiro-chave: -- -- -- Refresh -- Recarregar -- -- -- Don't show this warning again -- Não mostrar novamente -- -- -- All files -- Todos os ficheiros -- -- -- Key files -- Ficheiros-chave -- -- -- Select key file -- Selecione o ficheiro-chave -- -- -- Failed to open key file: %1 -- Não foi possível abrir o ficheiro-chave: %1 -- -- -- Unlock KeePassXC Database -- Desbloquear base de dados do KeePassXC -- -- -- Enter Password: -- Introduza a palavra-passe: -- -- -- Password field -- Campo Palavra-passe -- -- -- Hardware key slot selection -- Seleção de 'slot' para a chave de hardware -- -- -- Browse for key file -- Procurar ficheiro-chave -- -- -- Browse... -- Explorar... -- -- -- Refresh hardware tokens -- Recarregar 'tokens' de hardware -- -- -- Hardware Key: -- Chave de hardware: -- -- -- Hardware key help -- Ajuda para chaves de hardware -- -- -- TouchID for Quick Unlock -- TouchID para desbloqueio rápido -- -- -- Unlock failed and no password given -- Não foi possível desbloquear - palavra-passe não introduzida -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Não foi possível desbloquear a base de dados e não foi introduzida uma palavra-passe. --Deseja tentar com uma palavra-passe vazia? -- --Para impedir que este erro surja novamente, deve aceder a "Definições da base de dados -> Segurança" para repor a palavra-passe. -- -- -- Retry with empty password -- Tentar com palavra-passe vazia -- -- -- Enter Additional Credentials (if any): -- Introduza as credenciais adicionais (se existentes): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Pode utilizar uma chave de segurança como, por exemplo, os dispositivos <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com 'slots' configuradas para HMAC-SHA1.</p> --<p>Clique aqui para mais informações.</p> -- -- -- Key file help -- Ajuda para ficheiros-chave -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Não pode utilizar uma base de dados como ficheiro-chave -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Não pode utilizar o ficheiro da sua base de dados como ficheiro-chave. --Se não quiser utilizar um ficheiro-chave, deixe este campo em branco. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Para além da palavra-passe, pode utilizar um ficheiro-chave para aumentar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados..</p><p><strong>Não</strong> pode utilizar ficheiros *.kdbx como ficheiro-chave!<br>Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</p><p>Clique aqui para mais informação.</p> -- -- -- Key file to unlock the database -- Ficheiro-chave para desbloquear a base de dados -- -- -- Please touch the button on your YubiKey! -- Toque no botão da sua YubiKey! -- -- -- Detecting hardware keys… -- A detetar chaves de hardware... -- -- -- No hardware keys detected -- Não foram detetadas chaves de hardware -- -- -- Select hardware key… -- Selecione a chave de hardware... -- -- -- Old key file format -- Formato de ficheiro-chave antigo -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Está a utilizar um formato de ficheiro-chave antigo que KeePassXC pode<br>deixar de ter suporte no futuro.<br><br>Por favor considere a geração de um novo ficheiro-chave em:<br><strong>Base de dados -> Segurança da base de dados -> Alterar ficheiro-chave.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Palavras-passe -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Definições avançadas -- -- -- General -- Geral -- -- -- Security -- Segurança -- -- -- Encryption Settings -- Definições de cifra -- -- -- Browser Integration -- Integração com navegadores -- -- -- Database Credentials -- Credenciais da base de dados -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Definições KeePassXC-Browser -- -- -- Stored keys -- Chaves guardadas -- -- -- Remove -- Remover -- -- -- Delete the selected key? -- Apagar chave selecionada? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Tem a certeza de que deseja apagar a chave selecionada? --Esta ação pode impedir a ligação ao suplemento. -- -- -- Key -- Chave -- -- -- Value -- Valor -- -- -- Enable Browser Integration to access these settings. -- Ative a integração com o navegador para aceder a estas definições. -- -- -- Disconnect all browsers -- Desconectar de todos os navegadores -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Tem a certeza de que deseja desconectar todos os navegadores? --Esta ação pode interferir com a ligação ao suplemento. -- -- -- KeePassXC: No keys found -- KeePassXC: Nenhuma chave encontrada -- -- -- No shared encryption keys found in KeePassXC settings. -- Não foram encontradas chaves de cifra nas definições do KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Chaves removidas da base de dados -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n chave de cifra removida das definições do KeePassXC.%n chaves de cifra removidas das definições do KeePassXC. -- -- -- Forget all site-specific settings on entries -- Esquecer definições específicas dos sites (nas entradas) -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Tem a certeza de que deseja esquecer as definições específicas de todas as entradas? --Serão removidas todas as permissões para aceder às entradas. -- -- -- Removing stored permissions… -- A remover permissões guardadas... -- -- -- Abort -- Abortar -- -- -- KeePassXC: Removed permissions -- KeePassXC: Permissões removidas -- -- -- Successfully removed permissions from %n entry(s). -- Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Não existem entradas com permissões! -- -- -- The active database does not contain an entry with permissions. -- A base de dados ativa não contém qualquer entrada com permissões. -- -- -- Move KeePassHTTP attributes to custom data -- Mover atributos KeePassHTTP para dados personalizados -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente? --Esta atualização é necessária para manter a compatibilidade com o suplemento. -- -- -- Stored browser keys -- Chaves armazenadas -- -- -- Remove selected key -- Remover chave selecionada -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Mover atributos KeePassHTTP para dados personalizados KeePassXC-Browser -- -- -- Refresh database root group ID -- Recarregar ID do grupo raiz da base de dados -- -- -- Created -- Criada -- -- -- Refresh database ID -- Recarregar ID da base de dados -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Tem a certeza de que deseja recarregar a ID da base de dados? --Esta ação apenas será necessária se a sua base de dados for uma cópia de outra e não for possível estabelecer ligação ao navegador. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Adicionar proteção extra... -- -- -- No password set -- Palavra-passe não definida -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida! -- --Tem a certeza de que deseja continuar? -- -- -- Continue without password -- Continuar sem palavra-passe -- -- -- No encryption key added -- Chave de cifra não adicionada -- -- -- You must add at least one encryption key to secure your database! -- Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados! -- -- -- Unknown error -- Erro desconhecido -- -- -- Failed to change database credentials -- Não foi possível alterar as credenciais -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritmo de cifra: -- -- -- AES: 256 Bit (default) -- AES: 256 bits (padrão) -- -- -- Twofish: 256 Bit -- Twofish: 256 bits -- -- -- Key Derivation Function: -- Função derivação de chave: -- -- -- Transform rounds: -- Ciclos de transformação: -- -- -- Memory Usage: -- Utilização de memória: -- -- -- Parallelism: -- Paralelismo: -- -- -- Decryption Time: -- Tempo para decifrar: -- -- -- ?? s -- ?? s -- -- -- Change -- Alterar -- -- -- Higher values offer more protection, but opening the database will take longer. -- Valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados. -- -- -- Database format: -- Formato da base de dados: -- -- -- This is only important if you need to use your database with other programs. -- Apenas relevante se necessitar de utilizar a base de dados com outros programas. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (recomendado) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- inalterado -- -- -- Number of rounds too high -- Key transformation rounds -- Número de ciclos muito alto -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Está a utilizar um número muito alto para a transformação de chaves com Argon2. -- --Se mantiver este número, a sua base de dados pode levar muitas horas/dias (ou ainda mais) para ser aberta! -- -- -- Understood, keep number -- Percebi, manter número -- -- -- Cancel -- Cancelar -- -- -- Number of rounds too low -- Key transformation rounds -- Número de ciclos muito baixo -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Está a utilizar um número muito baixo para a transformação de chaves com Argon2. -- --Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilmente! -- -- -- KDF unchanged -- KDF inalterado -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Não foi possível transformar a chave com os novos parâmetros. KDF inalterado. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- processo processos -- -- -- Change existing decryption time -- Alterar tempo para decifrar -- -- -- Decryption time in seconds -- Tempo para decifrar (segundos) -- -- -- Database format -- Formato da base de dados -- -- -- Encryption algorithm -- Algoritmo de cifra -- -- -- Key derivation function -- Função derivação de chave -- -- -- Transform rounds -- Ciclos de transformação -- -- -- Memory usage -- Utilização de memória -- -- -- Parallelism -- Paralelismo -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Entradas expostas -- -- -- Don't expose this database -- Não expor esta base de dados -- -- -- Expose entries under this group: -- Expor entradas existentes neste grupo: -- -- -- Enable Secret Service to access these settings. -- Ative 'Secret Service' para aceder a estas definições. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Meta-dados da base de dados -- -- -- Database name: -- Nome da base de dados: -- -- -- Database description: -- Descrição da base de dados: -- -- -- Default username: -- Nome de utilizador padrão: -- -- -- History Settings -- Definições de histórico -- -- -- Max. history items: -- Número máximo de itens no histórico: -- -- -- Max. history size: -- Tamanho máximo para o histórico: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Utilizar reciclagem -- -- -- Additional Database Settings -- Definições extra para a base de dados -- -- -- Database name field -- Campo Nome da base de dados -- -- -- Database description field -- Campo Descrição da base de dados -- -- -- Default username field -- Campo Nome de utilizador -- -- -- Maximum number of history items per entry -- Número máximo de itens de histórico por entrada -- -- -- Maximum size of history per entry -- Tamanho de histórico por entrada -- -- -- Delete Recycle Bin -- Limpar reciclagem -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Tem a certeza de que deseja limpar a reciclagem e o seu conteúdo? --Esta ação é irreversível. -- -- -- (old) -- (antiga) -- -- -- Enable compression (recommended) -- Ativar compressão (recomendado) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Partilha -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Tipo -- -- -- Path -- Caminho -- -- -- Last Signer -- Último signatário -- -- -- Certificates -- Certificados -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nome da base de dados: -- -- -- Description: -- Descrição: -- -- -- Database name field -- Campo Nome da base de dados -- -- -- Database description field -- Campo Descrição da base de dados -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Base de dados do KeePass 2 -- -- -- All files -- Todos os ficheiros -- -- -- Open database -- Abrir base de dados -- -- -- CSV file -- Ficheiro CSV -- -- -- Merge database -- Combinar base de dados -- -- -- Open KeePass 1 database -- Abrir base de dados do KeePass 1 -- -- -- KeePass 1 database -- Base de dados do KeePass 1 -- -- -- Export database to CSV file -- Exportar base de dados para ficheiro CSV -- -- -- Writing the CSV file failed. -- Não foi possível escrever no ficheiro CSV. -- -- -- Database creation error -- Erro ao criar a base de dados -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- A base de dados criada não tem chave ou KDF e não pode ser guardada. --Existe aqui um erro que deve ser reportado aos programadores. -- -- -- Select CSV file -- Selecionar ficheiro CSV -- -- -- New Database -- Nova base de dados -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nova base de dados] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Bloqueada] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Apenas leitura] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Não foi possível abrir %1. Provavelmente não existe ou não está acessível. -- -- -- Export database to HTML file -- Exportar base de dados para ficheiro HTML -- -- -- HTML file -- Ficheiro HTML -- -- -- Writing the HTML file failed. -- Não foi possível escrever no ficheiro HTML. -- -- -- Export Confirmation -- Confirmação de exportação -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Está prestes a exportar a sua base de dados para um ficheiro não cifrado. As suas palavras-passe e informações pessoais ficarão vulneráveis. Tem a certeza de que deseja continuar? -- -- -- Open OPVault -- Open OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Pesquisar... -- -- -- Do you really want to delete the entry "%1" for good? -- Tem a certeza de que deseja apagar permanentemente a entrada "%1"? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Tem a certeza de que deseja mover a entrada "%1" para a reciclagem? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? -- -- -- Execute command? -- Executar comando? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Tem a certeza de que deseja executar este comando?<br><br>%1<br> -- -- -- Remember my choice -- Memorizar escolha -- -- -- Do you really want to delete the group "%1" for good? -- Tem a certeza de que deseja apagar permanentemente o grupo "%1"? -- -- -- No current database. -- Nenhuma base de dados. -- -- -- No source database, nothing to do. -- Não existe base de dados de origem, nada para fazer. -- -- -- Search Results (%1) -- Resultados da pesquisa (%1) -- -- -- No Results -- Não há resultados -- -- -- File has changed -- Ficheiro alterado -- -- -- The database file has changed. Do you want to load the changes? -- O ficheiro da base de dados foi alterado. Deseja carregar as alterações? -- -- -- Merge Request -- Pedido de combinação -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- A base de dados foi alterada e tem alterações não guardadas. --Deseja combinar as suas alterações? -- -- -- Empty recycle bin? -- Limpar reciclagem? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Tem a certeza de que deseja apagar permanentemente os itens da reciclagem? -- -- -- Do you really want to delete %n entry(s) for good? -- Tem a certeza de que deseja apagar %n entrada?Tem a certeza de que deseja apagar %n entradas? -- -- -- Delete entry(s)? -- Apagar entrada?Apagar entradas? -- -- -- Move entry(s) to recycle bin? -- Mover entrada para a reciclagem?Mover entradas para a reciclagem? -- -- -- Lock Database? -- Bloquear base de dados? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Está a editar uma entrada. Rejeitar alterações e bloquear? -- -- -- "%1" was modified. --Save changes? -- "%1" foi modificada. --Guardar alterações? -- -- -- Database was modified. --Save changes? -- A base de dados foi modificada. --Guardar alterações? -- -- -- Save changes? -- Guardar alterações? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Não foi possível abrir a nova base de dados durante o carregamento. --Erro: %1 -- -- -- Disable safe saves? -- Desativar salvaguardas? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- O KeePassXC falhou ao tentar guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram. --Desativar salvaguardas e tentar novamente? -- -- -- Passwords -- Palavras-passe -- -- -- Save database as -- Guardar base de dados como -- -- -- KeePass 2 Database -- Base de dados do KeePass 2 -- -- -- Replace references to entry? -- Substituir referências na entrada? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- A entrada "%1" tem %2 referência. Deseja substituir a referência com valores, ignorar ou apagar a entrada?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar ou apagar a entrada? -- -- -- Delete group -- Apagar grupo -- -- -- Move group to recycle bin? -- Mover grupo para a reciclagem? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Tem a certeza de que deseja mover o grupo "%1" para a reciclagem? -- -- -- Successfully merged the database files. -- Bases de dados combinadas com sucesso. -- -- -- Database was not modified by merge operation. -- A base de dados não foi modificada pela combinação. -- -- -- Shared group... -- Grupo partilhado... -- -- -- Writing the database failed: %1 -- Não foi possível escrever na base de dados: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Esta base de dados está aberta no modo de leitura. Não é possível guardar as alterações. -- -- -- Save database backup -- Guardar backup da base de dados -- -- -- Could not find database file: %1 -- Não foi possível encontrar a base de dados: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Entrada -- -- -- Advanced -- Avançado -- -- -- Icon -- Ícone -- -- -- Auto-Type -- Escrita automática -- -- -- Properties -- Propriedades -- -- -- History -- Histórico -- -- -- SSH Agent -- Agente SSH -- -- -- n/a -- n/d -- -- -- (encrypted) -- (cifrada) -- -- -- Select private key -- Selecionar chave privada -- -- -- Entry history -- Histórico da entrada -- -- -- Add entry -- Adicionar entrada -- -- -- Edit entry -- Editar entrada -- -- -- New attribute -- Novo atributo -- -- -- Are you sure you want to remove this attribute? -- Tem a certeza de que deseja remover este atributo? -- -- -- Tomorrow -- Amanhã -- -- -- %n week(s) -- %n semana%n semanas -- -- -- %n month(s) -- %n mês%n meses -- -- -- Entry updated successfully. -- Entrada atualizada com sucesso. -- -- -- New attribute %1 -- Novo atributo %1 -- -- -- %n year(s) -- %n ano%n anos -- -- -- Confirm Removal -- Confirmação de remoção -- -- -- Browser Integration -- Integração com o navegador -- -- -- <empty URL> -- <URL vazio> -- -- -- Are you sure you want to remove this URL? -- Tem a certeza de que deseja remover este URL? -- -- -- Reveal -- Mostrar -- -- -- Hide -- Ocultar -- -- -- Unsaved Changes -- Alterações por guardar -- -- -- Would you like to save changes to this entry? -- Gostaria de guardar as alterações a esta entrada? -- -- -- [PROTECTED] Press Reveal to view or edit -- [PROTEGIDA] Por favor revele para ver ou editar -- -- -- Invalid Entry -- Entrada inválida -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Uma operação externa de combinação invalidou esta entrada. --Infelizmente, quaisquer alterações efetuadas foram perdidas. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atributos extra -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Edit Name -- Editar nome -- -- -- Protect -- Proteger -- -- -- Reveal -- Mostrar -- -- -- Attachments -- Anexos -- -- -- Foreground Color: -- Cor principal: -- -- -- Background Color: -- Cor secundária: -- -- -- Attribute selection -- Seleção de atributo -- -- -- Attribute value -- Valor do atributo -- -- -- Add a new attribute -- Adicionar novo atributo -- -- -- Remove selected attribute -- Remover atributo selecionado -- -- -- Edit attribute name -- Editar nome do atributo -- -- -- Toggle attribute protection -- Alternar proteção do atributo -- -- -- Show a protected attribute -- Mostrar atributo protegido -- -- -- Foreground color selection -- Cor principal -- -- -- Background color selection -- Cor secundária -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Se ativa, a entrada não aparecerá nos relatórios de verificação e/ou HIBP, mesmo que não cumpra os requisitos de qualidade (por exemplo entropia ou reutilização). Pode assinalar esta opção se a palavra-passe não estiver sobre o seu controlo (por exemplo: se precisar de um código PIN) para impedir de atafulhar os relatórios.</p></body></html> -- -- -- Exclude from database reports -- Excluir dos relatórios -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Ativar escrita automática para esta entrada -- -- -- Window Associations -- Associação de janelas -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Título da janela: -- -- -- Use a specific sequence for this association: -- Utilizar sequência específica para esta associação: -- -- -- Custom Auto-Type sequence -- Sequência personalizada de escrita automática -- -- -- Open Auto-Type help webpage -- Abrir página de ajuda sobre escrita automática -- -- -- Existing window associations -- Associações existentes -- -- -- Add new window association -- Adicionar nova associação -- -- -- Remove selected window association -- Remover associação selecionada -- -- -- You can use an asterisk (*) to match everything -- Pode utilizar um asterisco (*) para correspondência global -- -- -- Set the window association title -- Definir título de associação da janela -- -- -- You can use an asterisk to match everything -- Pode utilizar um asterisco para correspondência global -- -- -- Custom Auto-Type sequence for this window -- Sequência personalizada de escrita automática para esta janela -- -- -- Inherit default Auto-Type sequence from the group -- Herdar sequência de auto escrita padrão deste grupo -- -- -- Use custom Auto-Type sequence: -- Utilizar sequência de auto escrita personalizada: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Estas definições afetam o comportamento da entrada com a extensão do navegador. -- -- -- General -- Geral -- -- -- Skip Auto-Submit for this entry -- Ignorar submissão automática para esta entrada -- -- -- Hide this entry from the browser extension -- Ocultar esta entrada da extensão do navegador -- -- -- Additional URL's -- URL(s) extra -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Edit -- Editar -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Apenas enviar esta definição para o navegador em diálogos HTTP Auth. Se ativa, os formulários normais de acesso não mostrarão esta entrada para seleção. -- -- -- Use this entry only with HTTP Basic Auth -- Apenas utilizar esta entrada com HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Mostrar -- -- -- Restore -- Restaurar -- -- -- Delete -- Apagar -- -- -- Delete all -- Apagar tudo -- -- -- Entry history selection -- Seleção de histórico de entradas -- -- -- Show entry at selected history state -- Mostrar entrada num estado do histórico -- -- -- Restore entry to selected history state -- Restaurar entrada para um valor do histórico -- -- -- Delete selected history state -- Apagar estado do histórico selecionado -- -- -- Delete all history -- Apagar todo o histórico -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Palavra-passe: -- -- -- Title: -- Título: -- -- -- Presets -- Predefinições -- -- -- Toggle the checkbox to reveal the notes section. -- Alternar caixa de seleção para mostrar a secção de notas. -- -- -- Username: -- Nome de utilizador: -- -- -- Url field -- Campo URL -- -- -- Download favicon for URL -- Descarregar 'favicon' para o URL -- -- -- Password field -- Campo Palavra-passe -- -- -- Toggle notes visible -- Alternar visibilidade das notas -- -- -- Expiration field -- Campo Caduca -- -- -- Expiration Presets -- Predefinições de caducidade -- -- -- Expiration presets -- Predefinições de caducidade -- -- -- Notes field -- Campo Notas -- -- -- Title field -- Campo Título -- -- -- Username field -- Campo Nome de utilizador -- -- -- Toggle expiration -- Alternar caducidade -- -- -- Notes: -- Notas: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Caduca: -- -- -- Edit Entry -- Editar entrada -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulário -- -- -- Remove key from agent after -- Remover chave do agente depois de -- -- -- seconds -- segundos -- -- -- Fingerprint -- Impressão digital -- -- -- Remove key from agent when database is closed/locked -- Remover chave do agente ao fechar/bloquear a base de dados -- -- -- Public key -- Chave pública -- -- -- Add key to agent when database is opened/unlocked -- Adicionar chave ao agente ao abrir/desbloquear a base de dados -- -- -- Comment -- Comentário -- -- -- Decrypt -- Decifrar -- -- -- n/a -- n/d -- -- -- Copy to clipboard -- Copiar para a área de transferência -- -- -- Private key -- Chave privada -- -- -- External file -- Ficheiro externo -- -- -- Browse... -- Button for opening file dialog -- Explorar... -- -- -- Attachment -- Anexo -- -- -- Add to agent -- Adicionar ao agente -- -- -- Remove from agent -- Remover do agente -- -- -- Require user confirmation when this key is used -- Solicitar confirmação para utilizar esta chave -- -- -- Remove key from agent after specified seconds -- Remover chave do agente após os segundos definidos -- -- -- Browser for key file -- Explorador para ficheiro-chave -- -- -- External key file -- Ficheiro-chave externo -- -- -- Select attachment file -- Selecionar anexo -- -- -- -- EditGroupWidget -- -- Group -- Grupo -- -- -- Icon -- Ícone -- -- -- Properties -- Propriedades -- -- -- Add group -- Adicionar grupo -- -- -- Edit group -- Editar grupo -- -- -- Enable -- Ativar -- -- -- Disable -- Desativar -- -- -- Inherit from parent group (%1) -- Herdar do grupo (%1) -- -- -- Entry has unsaved changes -- Entrada com alterações não guardadas -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tipo: -- -- -- Path: -- Caminho: -- -- -- Password: -- Palavra-passe: -- -- -- Inactive -- Inativo -- -- -- KeeShare unsigned container -- Contentor KeeShare não assinado -- -- -- KeeShare signed container -- Contentor KeeShare assinado -- -- -- Select import source -- Selecione a origem da importação -- -- -- Select export target -- Selecione o destino da exportação -- -- -- Select import/export file -- Selecione o ficheiro de importação/exportação -- -- -- Clear -- Limpar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Synchronize -- Sincronizar -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- A sua versão de KeePasXC não tem suporte a partilha deste tipo de contentor. --As extensões suportadas são: %1. -- -- -- %1 is already being exported by this database. -- %1 já está a ser exportado para esta base de dados. -- -- -- %1 is already being imported by this database. -- %1 já está a ser importado para esta base de dados. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 está a ser importada e exportada por grupos distintos desta base de dados. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare está desativada. Pode ativar a importação/exportação nas definições. -- -- -- Database export is currently disabled by application settings. -- As suas definições não permitem a exportação de bases de dados. -- -- -- Database import is currently disabled by application settings. -- As suas definições não permitem a importação de bases de dados. -- -- -- Sharing mode field -- Campo Modo de partilha -- -- -- Path to share file field -- Caminho para o campo ficheiro de partilha -- -- -- Password field -- Campo Palavra-passe -- -- -- Clear fields -- Limpar campos -- -- -- Browse for share file -- Procurar por ficheiro de partilha -- -- -- Browse... -- Explorar... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Campo Nome -- -- -- Notes field -- Campo Notas -- -- -- Toggle expiration -- Alternar caducidade -- -- -- Auto-Type toggle for this and sub groups -- Ativar/desativar escrita automática para este grupo e sub-grupos -- -- -- Expiration field -- Campo Caduca -- -- -- Search toggle for this and sub groups -- Ativar/desativar pesquisa para este grupo e os seus sub-grupos -- -- -- Default auto-type sequence field -- Campo Sequência padrão de escrita automática -- -- -- Expires: -- Caduca: -- -- -- Use default Auto-Type sequence of parent group -- Utilizar sequência de escrita automática do grupo relacionado -- -- -- Auto-Type: -- Escrita automática: -- -- -- Search: -- Pesquisa: -- -- -- Notes: -- Notas: -- -- -- Name: -- Nome: -- -- -- Set default Auto-Type sequence -- Definir sequência padrão para escrita automática -- -- -- Edit Group -- Editar grupo -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Adicionar ícone personalizado -- -- -- Delete custom icon -- Apagar ícone personalizado -- -- -- Download favicon -- Descarregar 'favicon' -- -- -- Unable to fetch favicon. -- Não foi possível obter o 'favicon'. -- -- -- Images -- Imagens -- -- -- All files -- Todos os ficheiros -- -- -- Confirm Delete -- Confirmação de eliminação -- -- -- Select Image(s) -- Selecionar imagens -- -- -- Successfully loaded %1 of %n icon(s) -- %1 de %n ícone carregados com sucesso%1 de %n ícones carregados com sucesso -- -- -- No icons were loaded -- Não foram carregados ícones -- -- -- %n icon(s) already exist in the database -- %n ícone já existe na sua base de dados%n ícones já existem na sua base de dados -- -- -- The following icon(s) failed: -- Falha no seguinte ícone:Falha nos seguintes ícones: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Este ícone é utilizado por %n entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone?Este ícone é utilizado por %n entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Pode ativar o serviço DuckDuckGo em Ferramentas -> Definições -> Segurança -- -- -- Download favicon for URL -- Descarregar 'favicon' para o URL -- -- -- Apply selected icon to subgroups and entries -- Aplicar ícone aos sub-grupos e entradas -- -- -- Also apply to child groups -- Aplicar aos grupos dependentes -- -- -- Also apply to child entries -- Aplicar às entradas dependentes -- -- -- Also apply to all children -- Aplicar também aos dependentes -- -- -- Existing icon selected. -- Selecionou um ícone existente. -- -- -- Use default icon -- Utilizar ícone padrão -- -- -- Use custom icon -- Utilizar ícone padrão -- -- -- Apply icon to... -- Aplicar ícone a... -- -- -- Apply to this group only -- Aplicar apenas a este grupo -- -- -- -- EditWidgetProperties -- -- Created: -- Criada: -- -- -- Modified: -- Modificada: -- -- -- Accessed: -- Acedida: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Dados do suplemento -- -- -- Remove -- Remover -- -- -- Delete plugin data? -- Apagar dados do suplemento? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Tem a certeza de que deseja apagar os dados do suplemento? --Esta ação pode implicar um funcionamento errático. -- -- -- Key -- Chave -- -- -- Value -- Valor -- -- -- Datetime created -- Data/hora de criação -- -- -- Datetime modified -- Data/hora de modificação -- -- -- Datetime accessed -- Data/hora de acesso -- -- -- Unique ID -- ID unívoca -- -- -- Plugin data -- Dados do suplemento -- -- -- Remove selected plugin data -- Remover dados do suplemento selecionado -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clone -- -- -- -- EntryAttachmentsModel -- -- Name -- Nome -- -- -- Size -- Tamanho -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulário -- -- -- Add -- Adicionar -- -- -- Remove -- Remover -- -- -- Open -- Abrir -- -- -- Save -- Guardar -- -- -- Select files -- Selecionar ficheiros -- -- -- Are you sure you want to remove %n attachment(s)? -- Tem a certeza de que deseja remover %n anexo?Tem a certeza de que deseja remover %n anexos? -- -- -- Save attachments -- Guardar anexos -- -- -- Unable to create directory: --%1 -- Não foi possível criar o diretório: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Tem a certeza de que deseja substituir o ficheiro "%1" pelo anexo? -- -- -- Confirm overwrite -- Confirmação de substituição -- -- -- Unable to save attachments: --%1 -- Não foi possível guardar os anexos: --%1 -- -- -- Unable to open attachment: --%1 -- Não foi possível abrir o anexo: --%1 -- -- -- Unable to open attachments: --%1 -- Não foi possível abrir os anexos: --%1 -- -- -- Confirm remove -- Confirmação de remoção -- -- -- Unable to open file(s): --%1 -- Não foi possível abrir o ficheiro: --%1Não foi possível abrir os ficheiros: --%1 -- -- -- Attachments -- Anexos -- -- -- Add new attachment -- Adicionar novo anexo -- -- -- Remove selected attachment -- Remover anexo selecionado -- -- -- Open selected attachment -- Abrir anexo selecionado -- -- -- Save selected attachment to disk -- Guardar anexo selecionado no disco -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 é um ficheiro grande (%2 MB) --A base de dados ficará muito grande e poderá reduzir o desempenho. -- --Tem a certeza de que deseja adicionar este ficheiro? -- -- -- Confirm Attachment -- Confirmar anexo -- -- -- -- EntryAttributesModel -- -- Name -- Nome -- -- -- -- EntryHistoryModel -- -- Last modified -- Última modificação -- -- -- Title -- Título -- -- -- Username -- Nome de utilizador -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de utilizador -- -- -- URL -- URL -- -- -- Never -- Nunca -- -- -- Password -- Palavra-passe -- -- -- Notes -- Notas -- -- -- Expires -- Caduca -- -- -- Created -- Criada -- -- -- Modified -- Modificada -- -- -- Accessed -- Acedida -- -- -- Attachments -- Anexos -- -- -- Size -- Tamanho -- -- -- Group name -- Nome do grupo -- -- -- Entry title -- Título da entrada -- -- -- Entry notes -- Notas da entrada -- -- -- Entry expires at -- Entrada caduca a -- -- -- Creation date -- Data de criação -- -- -- Last modification date -- Data da última modificação -- -- -- Last access date -- Data do último acesso -- -- -- Attached files -- Ficheiros anexos -- -- -- Entry size -- Tamanho da entrada -- -- -- Has attachments -- Tem anexos -- -- -- Has TOTP one-time password -- Tem palavra-passe TOTP -- -- -- -- EntryPreviewWidget -- -- Close -- Fechar -- -- -- General -- Geral -- -- -- Username -- Nome de utilizador -- -- -- Password -- Palavra-passe -- -- -- Expiration -- Caducidade -- -- -- URL -- URL -- -- -- Attributes -- Atributos -- -- -- Attachments -- Anexos -- -- -- Notes -- Notas -- -- -- Autotype -- Escrita automática -- -- -- Window -- Janela -- -- -- Sequence -- Sequência -- -- -- Searching -- Pesquisa -- -- -- Search -- Pesquisa -- -- -- Clear -- Limpar -- -- -- Never -- Nunca -- -- -- [PROTECTED] -- [PROTEGIDA] -- -- -- Enabled -- Ativada -- -- -- Disabled -- Desativada -- -- -- Share -- Partilhar -- -- -- Display current TOTP value -- Mostrar valor TOTP atual -- -- -- Advanced -- Avançado -- -- -- Default Sequence -- Sequência padrão -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- URL inválido -- -- -- -- EntryView -- -- Fit to window -- Ajustar à janela -- -- -- Fit to contents -- Ajustar ao conteúdo -- -- -- Reset to defaults -- Repor predefinições -- -- -- Has attachments -- Entry attachment icon toggle -- Tem anexos -- -- -- Has TOTP -- Entry TOTP icon toggle -- Tem TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- A entrada "%1" da base de dados "%2" foi utilizada por %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Não foi possível registar o serviços DBus em %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n entrada foi utilizada por %1%n entradas foram utilizadas por %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nome do ficheiro -- -- -- Group -- Grupo -- -- -- Manage -- Gerir -- -- -- Unlock to show -- Desbloquear para mostrar -- -- -- None -- Nada -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplicação -- -- -- Manage -- Gerir -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Desconhecido -- -- -- Unknown -- Unknown executable path -- Desconhecido -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Executável: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Já existe um serviço em execução (%1)<br/> Tem que parar/remover este serviço antes de poder reativar a integração Secret Service. -- -- -- -- Group -- -- [empty] -- group has no children -- [vazio] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Falha na validação online da palavra-passe -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Descarregar 'favicons' -- -- -- Cancel -- Cancelar -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Problemas para descarregar ícones? --Pode ativar o serviço DuckDuckGo na secção 'Segurança' das definições. -- -- -- Close -- Fechar -- -- -- URL -- URL -- -- -- Status -- Estado -- -- -- Please wait, processing entry list... -- Por favor aguarde... -- -- -- Downloading... -- A descarregar... -- -- -- Ok -- Ok -- -- -- Already Exists -- Já existe -- -- -- Download Failed -- Falha ao descarregar -- -- -- Downloading favicons (%1/%2)... -- A descarregar (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- Fe&char -- -- -- Close message -- Fechar mensagem -- -- -- -- Kdbx3Reader -- -- missing database headers -- cabeçalhos em falta da base de dados -- -- -- Header doesn't match hash -- Disparidade de 'hash' no cabeçalho -- -- -- Invalid header id size -- Tamanho inválido no id do cabeçalho -- -- -- Invalid header field length -- Comprimento do campo de cabeçalho inválido -- -- -- Invalid header data length -- Comprimento dos dados de cabeçalho inválido -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas. Por favor tente novamente. --Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. -- -- -- Unable to calculate database key -- Não foi possível calcular a chave da base de dados -- -- -- Unable to issue challenge-response: %1 -- Não foi possível emitir a pergunta de segurança: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Não foi possível emitir a pergunta de segurança: %1 -- -- -- Unable to calculate database key -- Não foi possível calcular a chave da base de dados -- -- -- -- Kdbx4Reader -- -- missing database headers -- cabeçalhos em falta da base de dados -- -- -- Invalid header checksum size -- Tamanho inválido para o 'checksum' do cabeçalho -- -- -- Header SHA256 mismatch -- Disparidade no cabeçalho SHA256 -- -- -- Unknown cipher -- Cifra desconhecida -- -- -- Invalid header id size -- Tamanho inválido para a ID do cabeçalho -- -- -- Invalid header field length -- Comprimento inválido para o campo de cabeçalho -- -- -- Invalid header data length -- Comprimento inválido para os dados do cabeçalho -- -- -- Failed to open buffer for KDF parameters in header -- Não foi possível processar os parâmetros KDF no cabeçalho -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Função de derivação de chave (KDF) não suportada ou parâmetros inválidos -- -- -- Legacy header fields found in KDBX4 file. -- Encontrados campos legados no ficheiro KDBX4. -- -- -- Invalid inner header id size -- Tamanho inválido na ID do cabeçalho interno -- -- -- Invalid inner header field length -- Comprimento inválido no campo de cabeçalho interno -- -- -- Invalid inner header binary size -- Tamanho binário inválido no cabeçalho interno -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Versão não suportada da variente de mapa KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no nome da entrada da variante de mapa -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Dados inválidos no nome da entrada da variante de mapa -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no valor de entrada na variente de mapa -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Dados inválidos no valor de entrada da variante de mapa -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido do valor de entrada booleano da variante de mapa -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no valor de entrada Int32 da variante de mapa -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no valor de entrada UInt32 da variante de mapa -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no valor de entrada Int64 da variante de mapa -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Comprimento inválido no valor de entrada UInt64 da variante de mapa -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Tipo inválido na entrada da variante de mapa -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Tamanho inválido no tipo de campo da variante de mapa -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas. Por favor tente novamente. --Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. -- -- -- (HMAC mismatch) -- (Disparidade HMAC) -- -- -- Unable to calculate database key: %1 -- Não foi possível calcular a chave da base de dados: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritmo inválido de cifra simétrica. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Tamanho inválido da cifra simétrica IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Não foi possível serializar os parâmetros KDF do mapa -- -- -- Unable to calculate database key: %1 -- Não foi possível calcular a chave da base de dados: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cifra não suportada -- -- -- Invalid compression flags length -- Tamanho inválido da compressão -- -- -- Unsupported compression algorithm -- Algoritmo de compressão não suportado -- -- -- Invalid master seed size -- Tamanho inválido da semente mestre -- -- -- Invalid transform seed size -- Tamanho inválido da semente de transformação -- -- -- Invalid transform rounds size -- Tamanho inválido para os ciclos de transformação -- -- -- Invalid start bytes size -- Tamanho inválido dos bytes iniciais -- -- -- Invalid random stream id size -- Tamanho inválido da ID do fluxo aleatório -- -- -- Invalid inner random stream cipher -- Cifra inválida de fluxo aleatório interno -- -- -- Not a KeePass database. -- Não é uma base de dados do KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- O ficheiro selecionado é uma base de dados do KeePass 1 (.kdb). -- --Pode importá-lo em Base de dados - > 'Importar base de dados do KeePass 1...'. --Esta é uma migração unidirecional. Não será possível abrir a base de dados importada com a versão 0.4 do KeePassX. -- -- -- Unsupported KeePass 2 database version. -- Versão da base de dados KeePass2 não suportada. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Tamanho inválido para o UUID da cifra: %1 (tamanho=%2) -- -- -- Unable to parse UUID: %1 -- Não foi possível processar UUID: %1 -- -- -- Failed to read database file. -- Não foi possível ler o ficheiro da base de dados. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Não foi possível processar o XML: %1 -- -- -- No root group -- Sem grupo root -- -- -- Missing icon uuid or data -- Dados ou UUID do ícone em falta -- -- -- Missing custom data key or value -- Valor ou chave de dados personalizados em falta -- -- -- Multiple group elements -- Múltiplos elementos de grupo -- -- -- Null group uuid -- UUID de grupo nulo -- -- -- Invalid group icon number -- Número inválido de ícone de grupo -- -- -- Invalid EnableAutoType value -- Valor inválido para EnableAutoType -- -- -- Invalid EnableSearching value -- Valor inválido para EnableSearching -- -- -- No group uuid found -- UUID de grupo não encontrado -- -- -- Null DeleteObject uuid -- UUID de DeleteObject nulo -- -- -- Missing DeletedObject uuid or time -- Tempo ou UUID de DeletedObject em falta -- -- -- Null entry uuid -- Entrada de UUID nula -- -- -- Invalid entry icon number -- Número inválido na entrada de ícone -- -- -- History element in history entry -- Elemento de histórico na entrada do histórico -- -- -- No entry uuid found -- Não foi encontrada o UUID da entrada -- -- -- History element with different uuid -- Elemento do histórico com UUID diferente -- -- -- Duplicate custom attribute found -- Encontrado atributo personalizado em duplicado -- -- -- Entry string key or value missing -- Chave 'string' ou valor em falta -- -- -- Entry binary key or value missing -- Chave binária ou valor em falta -- -- -- Auto-type association window or sequence missing -- Associação de escrita automática ou sequência em falta -- -- -- Invalid bool value -- Valor booleano inválido -- -- -- Invalid date time value -- Valor de data/hora inválido -- -- -- Invalid color value -- Valor de cor inválido -- -- -- Invalid color rgb part -- Parte de cor RGB inválida -- -- -- Invalid number value -- Valor numérico inválido -- -- -- Invalid uuid value -- Valor UUID inválido -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Não foi possível descomprimir o binário -- -- -- XML error: --%1 --Line %2, column %3 -- Erro no XML: --%1 --Linha %2, coluna %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Estrutura inválida no ficheiro de definições KeeAgent. -- -- -- Private key is an attachment but no attachments provided. -- Chave privada é um anexo mas o anexo não foi indicado. -- -- -- Private key is empty -- Chave privada vazia -- -- -- File too large to be a private key -- Ficheiro muito grande para ser uma chave privada -- -- -- Failed to open private key -- Não foi possível abrir a chave privada -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Não foi possível abrir a base de dados. -- -- -- Import KeePass1 Database -- Importar base de dados do KeePass 1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Não foi possível ler o ficheiro-chave. -- -- -- Not a KeePass database. -- Não é uma base de dados do KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritmo de cifra não suportado. -- -- -- Unsupported KeePass database version. -- Versão da base de dados KeePass não suportada. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Não foi possível ler a cifra IV -- -- -- Invalid number of groups -- Número inválido de grupos -- -- -- Invalid number of entries -- Número inválido de entradas -- -- -- Invalid content hash size -- Tamanho inválido para a 'hash' do conteúdo -- -- -- Invalid transform seed size -- Tamanho inválido da semente de transformação -- -- -- Invalid number of transform rounds -- Número inválido para os ciclos de transformação -- -- -- Unable to construct group tree -- Não foi possível criar a árvore de grupo -- -- -- Root -- Raiz -- -- -- Key transformation failed -- Não foi possível transformar a chave -- -- -- Invalid group field type number -- Número inválido do tipo de grupo de campo -- -- -- Invalid group field size -- Tamanho inválido do grupo de campo -- -- -- Read group field data doesn't match size -- Leitura de grupo de dados do campo não coincide no tamanho -- -- -- Incorrect group id field size -- Tamanho incorreto de campo de ID de grupo -- -- -- Incorrect group creation time field size -- Tamanho incorreto do campo do grupo de tempo de criação -- -- -- Incorrect group modification time field size -- Tamanho de campo de hora de alteração de grupo incorreto -- -- -- Incorrect group access time field size -- Tamanho de campo de tempo de acesso de grupo incorreto -- -- -- Incorrect group expiry time field size -- Tamanho inválido para o campo de caducidade do grupo -- -- -- Incorrect group icon field size -- Tamanho do campo do ícone de grupo incorreto -- -- -- Incorrect group level field size -- Tamanho de campo do nível de grupo incorreto -- -- -- Invalid group field type -- Tipo inválido para o campo de grupo -- -- -- Missing group id or level -- ID ou nível de grupo em falta -- -- -- Missing entry field type number -- Falta a entrada de tipo número no campo -- -- -- Invalid entry field size -- Tamanho inválido para o campo da entrada -- -- -- Read entry field data doesn't match size -- Dados do campo de entrada não coincidem no tamanho -- -- -- Invalid entry uuid field size -- Tamanho da entrada para o campo UUID inválido -- -- -- Invalid entry group id field size -- Tamanho da entrada para o campo identificador de grupo inválido -- -- -- Invalid entry icon field size -- Tamanho da entrada para o campo ícone inválido -- -- -- Invalid entry creation time field size -- Tamanho da entrada para o campo tempo de criação inválido -- -- -- Invalid entry modification time field size -- Tamanho da entrada para o campo tempo de alteração inválido -- -- -- Invalid entry expiry time field size -- Tamanho inválido para o campo de caducidade da entrada -- -- -- Invalid entry field type -- Tipo inválido para o campo da entrada -- -- -- unable to seek to content position -- Não foi possível pesquisar no conteúdo -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Credenciais inválidas. Por favor tente novamente. --Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. -- -- -- Unable to calculate database key -- Não foi possível calcular a chave da base de dados -- -- -- -- KeeShare -- -- Invalid sharing reference -- Referência de partilha inválida -- -- -- Inactive share %1 -- Partilha %1 inativa -- -- -- Imported from %1 -- Importada de %1 -- -- -- Exported to %1 -- Exportada para %1 -- -- -- Synchronized with %1 -- Sincronizada com %1 -- -- -- Import is disabled in settings -- A importação está desativada nas definições -- -- -- Export is disabled in settings -- A exportação está desativada nas definições -- -- -- Inactive share -- Partilha inativa -- -- -- Imported from -- Importada de -- -- -- Exported to -- Exportada para -- -- -- Synchronized with -- Sincronizada com -- -- -- -- KeyComponentWidget -- -- Key Component -- Componente chave -- -- -- Key Component Description -- Descrição do componente chave -- -- -- Cancel -- Cancelar -- -- -- Key Component set, click to change or remove -- Componente chave definido, clique para alterar ou remover -- -- -- Add %1 -- Add a key component -- Adicionar %1 -- -- -- Change %1 -- Change a key component -- Alterar %1 -- -- -- Remove %1 -- Remove a key component -- Remover %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 definida, clique para alterar ou remover -- -- -- -- KeyFileEditWidget -- -- Generate -- Gerar -- -- -- Key File -- Ficheiro-chave -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.</p><p>Tem de o manter secreto e não o pode perder pois se tal acontecer, nunca mais conseguirá abrir a base de dados.</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Erro ao carregar o ficheiro-chave %1 --Mensagem: %2 -- -- -- Key files -- Ficheiros-chave -- -- -- All files -- Todos os ficheiros -- -- -- Create Key File... -- Criar ficheiro-chave... -- -- -- Error creating key file -- Erro ao criar o ficheiro-chave -- -- -- Unable to create key file: %1 -- Não foi possível criar o ficheiro-chave: %1 -- -- -- Select a key file -- Selecione o ficheiro-chave -- -- -- Key file selection -- Seleção do ficheiro-chave -- -- -- Browse for key file -- Procurar ficheiro-chave -- -- -- Browse... -- Explorar... -- -- -- Generate a new key file -- Gerar um novo ficheiro-chave -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- AVISO: Não utilize um ficheiro que possa ser alterado pois deixará de conseguir desbloquear a sua base de dados! -- -- -- Invalid Key File -- Ficheiro-chave inválido -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Não pode utilizar o ficheiro da base de dados atual como ficheiro-chave. Escolha um ficheiro diferente ou crie um novo ficheiro-chave. -- -- -- Suspicious Key File -- Ficheiro-chave suspeito -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Parece que o ficheiro-chave utilizado é um ficheiro de uma base de dados. Deve utilizar um ficheiro estático ou deixará de conseguir aceder à sua base de dados. --Tem a certeza de que deseja utilizar este ficheiro? -- -- -- Old key file format -- Formato de ficheiro-chave antigo -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- Está a utilizar um formato de ficheiro-chave antigo que KeePassXC pode <br>deixar de ter suporte no futuro.<br><br>Deve considerar a geração de um novo ficheiro-chave. -- -- -- -- MainWindow -- -- &Database -- Base &de dados -- -- -- &Help -- Aj&uda -- -- -- &Groups -- &Grupos -- -- -- &Tools -- Ferramen&tas -- -- -- &Quit -- &Sair -- -- -- &About -- &Acerca -- -- -- Database settings -- Definições da base de dados -- -- -- Copy username to clipboard -- Copiar nome de utilizador para a área de transferência -- -- -- Copy password to clipboard -- Copiar palavra-passe para a área de transferência -- -- -- &Settings -- Definiçõe&s -- -- -- &Title -- &Título -- -- -- Copy title to clipboard -- Copiar título para a área de transferência -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copiar URL para a área de transferência -- -- -- &Notes -- &Notas -- -- -- Copy notes to clipboard -- Copiar notas para a área de transferência -- -- -- Copy &TOTP -- Copiar &TOTP -- -- -- E&mpty recycle bin -- Limpar reciclage&m -- -- -- Clear history -- Limpar histórico -- -- -- Access error for config file %1 -- Erro de acesso ao ficheiro %1 -- -- -- Settings -- Definições -- -- -- Toggle window -- Alternar janela -- -- -- Quit KeePassXC -- Sair do KeePassXC -- -- -- Please touch the button on your YubiKey! -- Toque no botão da sua YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- AVISO: está a utilizar uma versão instável do KeePassXC! --Existe um risco elevado de corrupção de ficheiros. Deve criar um backup da base de dados. --Esta versão não deve ser utilizada em ambientes de produção. -- -- -- &Donate -- &Donativos -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)! --Recomendamos que utilize a versão AppImage disponível no nosso site. -- -- -- &Import -- &Importar -- -- -- Create a new database -- Criar uma nova base de dados -- -- -- Merge from another KDBX database -- Combinar com outra base de dados KDBX -- -- -- Add a new entry -- Adicionar uma nova entrada -- -- -- View or edit entry -- Ver ou editar entrada -- -- -- Add a new group -- Adicionar um novo grupo -- -- -- Perform &Auto-Type -- Execut&ar escrita automática -- -- -- Open &URL -- Abrir &URL -- -- -- Import a KeePass 1 database -- Importar base de dados do KeePass 1 -- -- -- Import a CSV file -- Importar ficheiro CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOTA: está a utilizar uma versão de testes do KeePassXC! --Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção. -- -- -- Check for updates on startup? -- Procurar por atualizações ao iniciar? -- -- -- Would you like KeePassXC to check for updates on startup? -- Deseja que o KeePassXC procure atualizações ao iniciar? -- -- -- You can always check for updates manually from the application menu. -- Também pode verificar se existem atualizações através do menu da aplicação. -- -- -- &Export -- &Exportar -- -- -- Sort &A-Z -- De &A-Z -- -- -- Sort &Z-A -- De &Z-A -- -- -- &Password Generator -- Gerador de &palavras-passe -- -- -- Import a 1Password Vault -- Importar um cofre 1Password -- -- -- &Getting Started -- &Iniciação -- -- -- &User Guide -- Guia de &utilizador -- -- -- &Keyboard Shortcuts -- Atal&hos de teclado -- -- -- &Recent Databases -- Bases de dados &recentes -- -- -- &Entries -- &Entradas -- -- -- Copy Att&ribute -- Copiar at&ributo -- -- -- TOTP -- TOTP -- -- -- View -- Vista -- -- -- Theme -- Tema -- -- -- &Check for Updates -- Pro&curar atualizações -- -- -- &Open Database… -- Abrir base de dad&os... -- -- -- &Save Database -- Guardar base de dado&s -- -- -- &Close Database -- Fe&char base de dados -- -- -- &New Database… -- &Nova base de dados... -- -- -- &Merge From Database… -- Co&mbinar da base de dados... -- -- -- &New Entry… -- &Nova entrada... -- -- -- &Edit Entry… -- &Editar entrada... -- -- -- &Delete Entry… -- Apagar entra&da... -- -- -- &New Group… -- &Novo grupo... -- -- -- &Edit Group… -- &Editar grupo... -- -- -- &Delete Group… -- Apagar g&rupo... -- -- -- Download All &Favicons… -- Descarregar todos os '&favicons'... -- -- -- Sa&ve Database As… -- G&uardar base de dados como... -- -- -- Database &Security… -- &Segurança da base de dados... -- -- -- Database &Reports... -- &Relatórios da base de dados... -- -- -- Statistics, health check, etc. -- Estatísticas, verificações, etc. -- -- -- &Database Settings… -- &Definições da base de dados... -- -- -- &Clone Entry… -- &Clonar entrada... -- -- -- Move u&p -- Mover para &cima -- -- -- Move entry one step up -- Move a entrada para cima -- -- -- Move do&wn -- Mover para &baixo -- -- -- Move entry one step down -- Move a entrada para baixo -- -- -- Copy &Username -- Copiar nome de &utilizador -- -- -- Copy &Password -- Copiar &palavra-passe -- -- -- Download &Favicon -- Descarregar '&favicon' -- -- -- &Lock Databases -- B&loquear bases de dados -- -- -- &CSV File… -- Ficheiro &CSV... -- -- -- &HTML File… -- Ficheiro &HTML... -- -- -- KeePass 1 Database… -- Base de dados do KeePass 1... -- -- -- 1Password Vault… -- Cofre 1Password... -- -- -- CSV File… -- Ficheiro CSV... -- -- -- Show TOTP -- Mostrar TOTP -- -- -- Show QR Code -- Mostrar código QR -- -- -- Set up TOTP… -- Configurar TOTP... -- -- -- Report a &Bug -- Reportar um &erro -- -- -- Open Getting Started Guide -- Abrir guia de iniciação -- -- -- &Online Help -- Ajuda &online -- -- -- Go to online documentation -- Aceder à documentação online -- -- -- Open User Guide -- Abrir manual de utilizador -- -- -- Save Database Backup... -- Guardar backup da base de dados... -- -- -- Add key to SSH Agent -- Adicionar chave ao agente SSH -- -- -- Remove key from SSH Agent -- Remover chave do agente SSH -- -- -- Compact Mode -- Modo compacto -- -- -- Automatic -- Automático -- -- -- Light -- Claro -- -- -- Dark -- Escuro -- -- -- Classic (Platform-native) -- Clássico (nativo do SO) -- -- -- Show Toolbar -- Mostrar barra de ferramentas -- -- -- Show Preview Panel -- Mostrar painel de pré-visualização -- -- -- Don't show again for this version -- Não mostrar novamente para esta versão -- -- -- Restart Application? -- Reiniciar aplicação? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora? -- -- -- Perform Auto-Type Sequence -- Executar sequência de escrita automática -- -- -- {USERNAME} -- {NomeDeUtilizador} -- -- -- {USERNAME}{ENTER} -- {NomeDeUtilizador}{ENTER} -- -- -- {PASSWORD} -- {Palavra-passe} -- -- -- {PASSWORD}{ENTER} -- {Palavra-passe}{ENTER} -- -- -- Always on Top -- Sempre na frente -- -- -- Hide Usernames -- Ocultar nome de utilizador -- -- -- Hide Passwords -- Ocultar palavras-passe -- -- -- -- ManageDatabase -- -- Database settings -- Definições da base de dados -- -- -- Edit database settings -- Editar definições da base de dados -- -- -- Unlock database -- Desbloquear base de dados -- -- -- Unlock database to show more information -- Desbloquear base de dados para mostrar mais informação -- -- -- Lock database -- Bloquear base de dados -- -- -- -- ManageSession -- -- Disconnect -- Desconectar -- -- -- Disconnect this application -- Desconectar esta aplicação -- -- -- -- Merger -- -- Creating missing %1 [%2] -- A criar %1 [%2] -- -- -- Relocating %1 [%2] -- A realocar %1 [%2] -- -- -- Overwriting %1 [%2] -- A substituir %1 [%2] -- -- -- older entry merged from database "%1" -- entrada antiga combinada da base de dados %1 -- -- -- Adding backup for older target %1 [%2] -- A adicionar backup para o destino antigo %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- A adicionar backup para a origem antiga %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- A reaplicar a entrada de destino antiga na origem recente %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- A reaplicar a entrada de origem antiga no destinio recente %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- A sincronizar da origem recente %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- A sincronizar da origem antiga %1 [%2] -- -- -- Deleting child %1 [%2] -- A apagar dependente %1 [%2] -- -- -- Deleting orphan %1 [%2] -- A apagar órfão %1 [%2] -- -- -- Changed deleted objects -- Objetos apagados alterados -- -- -- Adding missing icon %1 -- Adicionar ícone em falta %1 -- -- -- Removed custom data %1 [%2] -- Dados personalizados removidos %1 [%2] -- -- -- Adding custom data %1 [%2] -- A adicionar dados personalizados %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Criar uma nova base de dados do KeePassXC... -- -- -- Root -- Root group -- Raiz -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Assistente -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados. -- -- -- Advanced Settings -- Definições avançadas -- -- -- Simple Settings -- Definições básicas -- -- -- Encryption Settings -- Definições de cifra -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Credenciais da base de dados -- -- -- A set of credentials known only to you that protects your database. -- Um conjunto de credenciais só suas e que protegem a base de dados. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Definições de cifra -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informação geral sobre a base de dados -- -- -- Please fill in the display name and an optional description for your new database: -- Preencha o nome de exibição e uma descrição extra para a sua nova base de dados: -- -- -- -- NixUtils -- -- Password Manager -- Gestor de palavras-passe -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 inválido, não existe um cabeçalho -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Não foi possível ler todos os bytes IV, necessita 16 e obteve %1 -- -- -- Unable to init cipher for opdata01: %1 -- Não foi possível iniciar a cifra para OpData01: %1 -- -- -- Unable to read all HMAC signature bytes -- Não foi possível ler todos os bytes da assinatura HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 mal formado por causa de uma falha HMAC -- -- -- Unable to process clearText in place -- Não foi possível processar 'clear-text' localmente -- -- -- Expected %1 bytes of clear-text, found %2 -- Esperados %1 bytes de 'clear-text' mas foram encontrados %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- A leitura da base de dados não produziu uma instância --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Tem que existir um diretório .opvault -- -- -- Directory .opvault must be readable -- O diretório .opvault tem que ser legível -- -- -- Directory .opvault/default must exist -- Tem que existir o diretório .opvault/default -- -- -- Directory .opvault/default must be readable -- O diretório .opvault/default tem que ser legível -- -- -- Unable to decode masterKey: %1 -- Não foi possível descodificar a chave-mestre: %1 -- -- -- Unable to derive master key: %1 -- Não foi possível derivar a chave-mestre: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Chave inválida, esperada chave OpenSSH -- -- -- PEM boundary mismatch -- Disparidade nos limites PEM -- -- -- Base64 decoding failed -- Falha de descodificação Base64 -- -- -- Key file way too small. -- Ficheiro-chave muito pequeno. -- -- -- Key file magic header id invalid -- ID do cabeçalho mágico do ficheiro-chave inválida -- -- -- Found zero keys -- Encontradas zero chaves -- -- -- Failed to read public key. -- Não foi possível ler a chave pública. -- -- -- Corrupted key file, reading private key failed -- Ficheiro danificado, não foi possível ler a chave privada -- -- -- No private key payload to decrypt -- Não existe uma chave privada para decifrar -- -- -- Trying to run KDF without cipher -- A tentar executar KDF sem cifra -- -- -- Passphrase is required to decrypt this key -- Necessita de uma frase-chave para decifrar esta chave -- -- -- Key derivation failed, key file corrupted? -- Falha na derivação da chave, ficheiro-chave danificado? -- -- -- Decryption failed, wrong passphrase? -- Falha ao decifrar, frase-chave errada? -- -- -- Unexpected EOF while reading public key -- EOF inesperado ao ler a chave pública -- -- -- Unexpected EOF while reading private key -- EOF inesperado ao ler a chave privada -- -- -- Can't write public key as it is empty -- Incapaz de escrever a chave pública porque está vazia -- -- -- Unexpected EOF when writing public key -- EOF inesperado ao escrever a chave pública -- -- -- Can't write private key as it is empty -- Incapaz de escrever a chave privada porque está vazia -- -- -- Unexpected EOF when writing private key -- EOF inesperado ao escrever a chave privada -- -- -- Unsupported key type: %1 -- Tipo de chave não suportado: %1 -- -- -- Unknown cipher: %1 -- Cifra desconhecida: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cifra IV é muito curta para MD5 kdf -- -- -- Unknown KDF: %1 -- KDF desconhecido: %1 -- -- -- Unknown key type: %1 -- Tipo de chave desconhecido: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Disparidade nas palavras-passe -- -- -- Passwords match so far -- Correspondências até agora -- -- -- Toggle Password (%1) -- Alternar palavra-passe (%1) -- -- -- Generate Password (%1) -- Gerar palavra-passe (%1) -- -- -- Warning: Caps Lock enabled! -- Aviso: Caps Lock ativado! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Introduza a palavra-passe: -- -- -- Confirm password: -- Confirmação de palavra-passe: -- -- -- Password -- Palavra-passe -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>A palavra-passe é o método primário para proteger a sua base de dados.</p><p>As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.</p> -- -- -- Passwords do not match. -- Disparidade nas palavras-passe. -- -- -- Password field -- Campo Palavra-passe -- -- -- Repeat password field -- Campo Repetição de palavra-passe -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- qualidade -- -- -- entropy -- entropia -- -- -- Password -- Palavra-passe -- -- -- Character Types -- Tipos de caracteres -- -- -- Numbers -- Números -- -- -- Extended ASCII -- ASCII expandido -- -- -- Exclude look-alike characters -- Excluir caracteres semelhantes -- -- -- Pick characters from every group -- Obter caracteres de todos os grupos -- -- -- &Length: -- &Tamanho: -- -- -- Passphrase -- Frase-chave -- -- -- Wordlist: -- Lista de palavras: -- -- -- Word Separator: -- Separador de palavras: -- -- -- Close -- Fechar -- -- -- Entropy: %1 bit -- Entropia: %1 bit -- -- -- Password Quality: %1 -- Qualidade da palavra-passe: %1 -- -- -- Poor -- Password quality -- -- -- -- Weak -- Password quality -- Fraca -- -- -- Good -- Password quality -- Boa -- -- -- Excellent -- Password quality -- Excelente -- -- -- Switch to advanced mode -- Ativar modo avançado -- -- -- Advanced -- Avançado -- -- -- Braces -- Parênteses -- -- -- Punctuation -- Pontuação -- -- -- Quotes -- Aspas -- -- -- Logograms -- Logo-gramas -- -- -- Character set to exclude from generated password -- Conjunto de caracteres a excluir da palavra-passe gerada -- -- -- Do not include: -- Não incluir: -- -- -- Add non-hex letters to "do not include" list -- Adicionar letras 'non-hex' à lista de exclusão -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Palavra-passe gerada -- -- -- Upper-case letters -- Letras maiúsculas -- -- -- Lower-case letters -- Letras minúsculas -- -- -- Special characters -- Caracteres especiais -- -- -- Math Symbols -- Símbolos matemáticos -- -- -- Dashes and Slashes -- Traços e travessões -- -- -- Excluded characters -- Caracteres excluídos -- -- -- Hex Passwords -- Palavras-passe Hex -- -- -- Password length -- Tamanho da palavra-passe -- -- -- Word Case: -- Tipo de letra: -- -- -- Regenerate password -- Recriar palavra-passe -- -- -- Copy password -- Copiar palavra-passe -- -- -- lower case -- minúsculas -- -- -- UPPER CASE -- MAIÚSCULAS -- -- -- Title Case -- Primeira Letra Em Maiúscula -- -- -- Generate Password -- Gerar palavra-passe -- -- -- Also choose from: -- Escolher também de: -- -- -- Additional characters to use for the generated password -- Caracteres extra a utilizar na palavra-passe gerada -- -- -- Additional characters -- Caracteres extra -- -- -- Word Count: -- Número de palavras: -- -- -- Esc -- Esc -- -- -- Apply Password -- Aplicar palavra-passe -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Recriar palavra-passe (%1) -- -- -- Special Characters -- Caracteres especiais -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Estatísticas -- -- -- Very weak password -- Palavra-passe muito fraca -- -- -- Password entropy is %1 bits -- A entropia da palavra-passe é de %1 bits -- -- -- Weak password -- Palavra-passe fraca -- -- -- Used in %1/%2 -- Utilizada em %1/%2 -- -- -- Password is used %1 times -- Palavra-passe utilizada %1 vezes -- -- -- Password has expired -- Palavra-passe caducada -- -- -- Password expiry was %1 -- Palavra-passe caducou em %1 -- -- -- Password is about to expire -- Palavra-passe perto de caducar -- -- -- Password expires in %1 days -- Palavra-passe caduca dentro de %1 dias -- -- -- Password will expire soon -- Palavra-passe está perto de caducar -- -- -- Password expires on %1 -- Palavra-passe caduca em %1 -- -- -- Health Check -- Verificações de qualidade -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Substituir -- -- -- Delete -- Apagar -- -- -- Move -- Mover -- -- -- Empty -- Sim -- -- -- Remove -- Remover -- -- -- Skip -- Ignorar -- -- -- Disable -- Desativar -- -- -- Merge -- Combinar -- -- -- Continue -- Continuar -- -- -- -- QObject -- -- Database not opened -- Base de dados não aberta -- -- -- Database hash not available -- 'Hash' da base de dados não disponível -- -- -- Client public key not received -- Chave pública do cliente não recebida -- -- -- Cannot decrypt message -- Não foi possível decifrar a mensagem -- -- -- Action cancelled or denied -- Ação cancelada ou recusada -- -- -- KeePassXC association failed, try again -- Não foi possível associar KeePassXC. Por favor tente novamente. -- -- -- Encryption key is not recognized -- Chave de cifra não reconhecida -- -- -- Incorrect action -- Ação incorreta -- -- -- Empty message received -- Recebida mensagem vazia -- -- -- No URL provided -- URL não disponibilizado -- -- -- No logins found -- Não existem credenciais -- -- -- Unknown error -- Erro desconhecido -- -- -- Add a new entry to a database. -- Adicionar entrada à base de dados. -- -- -- Path of the database. -- Caminho da base de dados. -- -- -- Key file of the database. -- Ficheiro-chave da base de dados. -- -- -- path -- caminho -- -- -- Username for the entry. -- Nome de utilizador para a entrada. -- -- -- username -- nome de utilizador -- -- -- URL for the entry. -- URL para a entrada. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Pedir palavra-passe para a entrada. -- -- -- Generate a password for the entry. -- Gerar palavra-passe para a entrada. -- -- -- length -- tamanho -- -- -- Path of the entry to add. -- Caminho da entrada a adicionar. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Caminho da entrada a copiar. -- -- -- Timeout in seconds before clearing the clipboard. -- Tempo limite, em segundos, antes de limpar a área de transferência. -- -- -- Edit an entry. -- Editar entrada. -- -- -- Title for the entry. -- Título para a entrada. -- -- -- title -- título -- -- -- Path of the entry to edit. -- Caminho da entrada a editar. -- -- -- Estimate the entropy of a password. -- Estimar entropia da palavra-passe. -- -- -- Password for which to estimate the entropy. -- Palavra-passe para a qual será estimada a entropia. -- -- -- Perform advanced analysis on the password. -- Executar análise avançada da palavra-passe. -- -- -- -- --Available commands: -- -- -- --Comandos disponíveis: -- -- -- -- Name of the command to execute. -- Nome do comando a executar. -- -- -- List database entries. -- Listar entradas da base de dados. -- -- -- Path of the group to list. Default is / -- Caminho do grupo a listar. Padrão é / -- -- -- Find entries quickly. -- Localizar entradas rapidamente. -- -- -- Search term. -- Termo de pesquisa. -- -- -- Merge two databases. -- Combinar duas bases de dados. -- -- -- Path of the database to merge from. -- Caminho da base de dados de origem para a combinação. -- -- -- Use the same credentials for both database files. -- Utilizar as mesmas credenciais para ambos os ficheiros de bases de dados. -- -- -- Key file of the database to merge from. -- Ficheiro-chave da base de dados para a combinação. -- -- -- Show an entry's information. -- Mostrar informações de uma entrada. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Nome dos atributos a mostrar. Esta opção pode ser especificada mais do que uma vez, sendo que os atributos são mostrados um por linha, na ordem indicada. Se não especificar atributos, será dado um resumo dos atributos padrão. -- -- -- attribute -- atributo -- -- -- Name of the entry to show. -- Nome da entrada a mostrar. -- -- -- NULL device -- Dispositivo NULL -- -- -- error reading from device -- erro ao ler do dispositivo -- -- -- malformed string -- cadeira mal fomada -- -- -- missing closing quote -- carácter de fecho em falta -- -- -- Group -- Grupo -- -- -- Title -- Título -- -- -- Username -- Nome de utilizador -- -- -- Password -- Palavra-passe -- -- -- Notes -- Notas -- -- -- Last Modified -- Última modificação -- -- -- Created -- Criada -- -- -- Browser Integration -- Integração com o navegador -- -- -- SSH Agent -- Agente SSH -- -- -- Generate a new random diceware passphrase. -- Gerar uma frase-chave baseada em dados (diceware). -- -- -- Word count for the diceware passphrase. -- Número de palavras para a frase-chave. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista de palavras para o gerador. --[Padrão: EFF inglês] -- -- -- Generate a new random password. -- Gerar nova palavra-passe aleatória. -- -- -- Could not create entry with path %1. -- Não foi possível criar a entrada com o caminho %1. -- -- -- Enter password for new entry: -- Introduza a palavra-passe para a nova entrada: -- -- -- Writing the database failed %1. -- Não foi possível escrever na base de dados %1. -- -- -- Successfully added entry %1. -- Entrada %1 adicionada com sucesso. -- -- -- Invalid timeout value %1. -- Valor limite inválido %1. -- -- -- Entry %1 not found. -- Entrada %1 não encontrada. -- -- -- Entry with path %1 has no TOTP set up. -- A entrada com o caminho %1 não tem uma TOTP configurada. -- -- -- Clearing the clipboard in %1 second(s)... -- A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos... -- -- -- Clipboard cleared! -- Área de transferência limpa! -- -- -- Silence password prompt and other secondary outputs. -- Silenciar pedidos de palavra-passe e outros resultados secundários. -- -- -- count -- CLI parameter -- número -- -- -- Could not find entry with path %1. -- Não foi possível encontrar a entrada com o caminho %1. -- -- -- Not changing any field for entry %1. -- Não foi alterado qualquer campo para a entrada %1. -- -- -- Enter new password for entry: -- Introduza a nova palavra-passe da entrada: -- -- -- Writing the database failed: %1 -- Não foi possível escrever na base de dados: %1 -- -- -- Successfully edited entry %1. -- Entrada %1 editada com sucesso. -- -- -- Length %1 -- Tamanho %1 -- -- -- Entropy %1 -- Entropia %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Bits extra multi-palavra %1 -- -- -- Type: Bruteforce -- Tipo: Bruteforce -- -- -- Type: Dictionary -- Tipo: Dictionary -- -- -- Type: Dict+Leet -- Tipo: Dict+Leet -- -- -- Type: User Words -- Tipo: User Words -- -- -- Type: User+Leet -- Tipo: User+Leet -- -- -- Type: Repeated -- Tipo: Repeated -- -- -- Type: Sequence -- Tipo: Sequence -- -- -- Type: Spatial -- Tipo: Spatial -- -- -- Type: Date -- Tipo: Date -- -- -- Type: Bruteforce(Rep) -- Tipo: Bruteforce(Rep) -- -- -- Type: Dictionary(Rep) -- Tipo: Dictionary(Rep) -- -- -- Type: Dict+Leet(Rep) -- Tipo: Dict+Leet(Rep) -- -- -- Type: User Words(Rep) -- Tipo: User Words(Rep) -- -- -- Type: User+Leet(Rep) -- Tipo: User+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Tipo: Repeated(Rep) -- -- -- Type: Sequence(Rep) -- Tipo: Sequence(Rep) -- -- -- Type: Spatial(Rep) -- Tipo: Spatial(Rep) -- -- -- Type: Date(Rep) -- Tipo: Date(Rep) -- -- -- Type: Unknown%1 -- Tipo: Desconhecido%1 -- -- -- Entropy %1 (%2) -- Entropia %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) *** -- -- -- Failed to load key file %1: %2 -- Não foi possível carregar o ficheiro-chave %1: %2 -- -- -- Length of the generated password -- Tamanho da palavra-passe gerada -- -- -- Use lowercase characters -- Utilizar letras minúsculas -- -- -- Use uppercase characters -- Utilizar letras maiúsculas -- -- -- Use special characters -- Utilizar caracteres especiais -- -- -- Use extended ASCII -- Utilizar ASCII expandido -- -- -- Exclude character set -- Conjunto de caracteres a excluir -- -- -- chars -- caracteres -- -- -- Exclude similar looking characters -- Excluir caracteres semelhantes -- -- -- Include characters from every selected group -- Incluir caracteres de todos os grupos selecionados -- -- -- Recursively list the elements of the group. -- Listar recursivamente todos os elementos do grupo -- -- -- Cannot find group %1. -- Não foi possível encontrar o grupo %1. -- -- -- Error reading merge file: --%1 -- Erro ao ler o ficheiro de combinação: --%1 -- -- -- Unable to save database to file : %1 -- Não foi possível guardar a base de dados no ficheiro: %1 -- -- -- Unable to save database to file: %1 -- Não foi possível guardar a base de dados no ficheiro: %1 -- -- -- Successfully recycled entry %1. -- Entrada %1 movida para a reciclagem. -- -- -- Successfully deleted entry %1. -- A entrada %1 foi apagada. -- -- -- Show the entry's current TOTP. -- Mostrar TOTP da entrada atual. -- -- -- ERROR: unknown attribute %1. -- Erro: atributo desconhecido %1. -- -- -- No program defined for clipboard manipulation -- Não definiu um programa para manipular a área de transferência -- -- -- file empty -- ficheiro vazio -- -- -- %1: (row, col) %2,%3 -- %1: (linha, coluna) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Definições inválidas -- -- -- Invalid Key -- TOTP -- Chave inválida -- -- -- Message encryption failed. -- Não foi possível cifrar a mensagem. -- -- -- No groups found -- Não foram encontrados grupos -- -- -- Create a new database. -- Criar uma nova base de dados. -- -- -- File %1 already exists. -- Ficheiro %1 já existe. -- -- -- Loading the key file failed -- Não foi possível carregar o ficheiro-chave. -- -- -- No key is set. Aborting database creation. -- Chave não definida. A abortar criação da base de dados. -- -- -- Failed to save the database: %1. -- Não foi possível guardar a base de dados: %1. -- -- -- Successfully created new database. -- A base de dados foi criada com sucesso. -- -- -- Creating KeyFile %1 failed: %2 -- Não foi possível criar o ficheiro-chave %1: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Não foi possível carregar o ficheiro-chave %1: %2 -- -- -- Path of the entry to remove. -- Caminho da entrada a remover. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - Gestor de palavras-passe multi-plataforma -- -- -- filenames of the password databases to open (*.kdbx) -- nome de ficheiro das bases de dados a abrir (*.kdbx) -- -- -- path to a custom config file -- caminho para um ficheiro de configuração personalizado -- -- -- key file of the database -- ficheiro-chave da base de dados -- -- -- read password of the database from stdin -- ler palavra-passe da base de dados a partir de stdin -- -- -- Another instance of KeePassXC is already running. -- Já está em execução uma instância do KeePassXC. -- -- -- Fatal error while testing the cryptographic functions. -- Erro fatal ao testar as funções de criptografia. -- -- -- KeePassXC - Error -- KeePassXC - Erro -- -- -- Database password: -- Palavra-passe da base de dados: -- -- -- Cannot create new group -- Não foi possível criar o novo grupo -- -- -- Deactivate password key for the database. -- Desativar chave de segurança para a base de dados. -- -- -- Displays debugging information. -- Mostra a informação de depuração. -- -- -- Deactivate password key for the database to merge from. -- Desativar palavra-passe da base de dados de origem. -- -- -- Version %1 -- Versão %1 -- -- -- Build Type: %1 -- Tipo de compilação: %1 -- -- -- Revision: %1 -- Revisão: %1 -- -- -- Distribution: %1 -- Distribuição: %1 -- -- -- Debugging mode is disabled. -- Modo de depuração desativado. -- -- -- Debugging mode is enabled. -- Modo de depuração ativado. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistema operativo: %1 --Arquitetura do CPU: %2 --Kernel: %3 %4 -- -- -- Auto-Type -- Escrita automática -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (partilha assinada e não assinada) -- -- -- KeeShare (only signed sharing) -- KeeShare (apenas partilha assinada) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (apenas partilha não assinada) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nada -- -- -- Enabled extensions: -- Extensões ativas: -- -- -- Cryptographic libraries: -- Bibliotecas de criptografia: -- -- -- Cannot generate a password and prompt at the same time! -- Não pode utilizar as opções "Gerar palavra-passe" e "Pedir palavra-passe" ao mesmo tempo"! -- -- -- Adds a new group to a database. -- Adiciona um novo grupo à base de dados. -- -- -- Path of the group to add. -- Caminho do grupo a adicionar. -- -- -- Group %1 already exists! -- Grupo %1 já existe! -- -- -- Group %1 not found. -- Grupo %1 não encontrado! -- -- -- Successfully added group %1. -- Grupo %1 adicionado com sucesso. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Verifique se as suas palavras-passe foram expostas publicamente. FILENAME tem que ser o caminho de um ficheiro que liste as 'hashes' SHA-1 das palavras-passe expostas (no formato HIBP), tal como definido em https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- Analisar qualidade e problemas das palavras-passe. -- -- -- Failed to open HIBP file %1: %2 -- Não foi possível abrir o ficheiro HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- A avaliar as entradas da base de dados com o ficheiro HIBP, por favor aguarde... -- -- -- Close the currently opened database. -- Fechar a base de dados aberta. -- -- -- Display this help. -- Mostra esta ajuda. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Número de palavras inválido: %1 -- -- -- The word list is too small (< 1000 items) -- A lista de palavras é muito pequena (< 1000 itens) -- -- -- Exit interactive mode. -- Sair do modo interativo. -- -- -- Exports the content of a database to standard output in the specified format. -- Exporta o conteúdo da base de dados para o formato especificado. -- -- -- Unable to export database to XML: %1 -- Não foi possível exportar a base de dados para o formato XML: %1 -- -- -- Unsupported format %1 -- Formato não suportado: %1 -- -- -- Use numbers -- Utilizar números -- -- -- Invalid password length %1 -- Tamanho inválido %1 -- -- -- Display command help. -- Mostra a ajuda para os comandos. -- -- -- Available commands: -- Comandos disponíveis: -- -- -- Import the contents of an XML database. -- Importar conteúdo de uma base de dados no formato XML. -- -- -- Path of the XML database export. -- Caminho para guardar a base de dados em XML. -- -- -- Path of the new database. -- Caminho da nova base de dados. -- -- -- Successfully imported database. -- Base de dados importada com sucesso. -- -- -- Unknown command %1 -- Comando desconhecido - %1 -- -- -- Flattens the output to single lines. -- Restringe o resultado para uma linha única. -- -- -- Only print the changes detected by the merge operation. -- Imprimir apenas as alterações detetadas pela operação de combinação. -- -- -- Yubikey slot for the second database. -- 'Slot' Yubikey para a segunda base de dados. -- -- -- Successfully merged %1 into %2. -- %1 combinado com sucesso para %2. -- -- -- Database was not modified by merge operation. -- A base de dados não foi modificada pela combinação. -- -- -- Moves an entry to a new group. -- Move uma entrada para outro grupo. -- -- -- Path of the entry to move. -- Caminho da entrada a mover. -- -- -- Path of the destination group. -- Caminho do grupo de destino. -- -- -- Could not find group with path %1. -- Não foi possível encontrar o grupo no caminho %1. -- -- -- Entry is already in group %1. -- O grupo %1 já possui esta entrada. -- -- -- Successfully moved entry %1 to group %2. -- Entrada %1 movida com sucesso para o grupo %2. -- -- -- Open a database. -- Abrir base de dados. -- -- -- Path of the group to remove. -- Caminho do grupo a remover. -- -- -- Cannot remove root group from database. -- Não é possível remover o grupo raiz da base de dados. -- -- -- Successfully recycled group %1. -- Grupo %1 enviado para a reciclagem. -- -- -- Successfully deleted group %1. -- O gripo %1 foi apagado. -- -- -- Failed to open database file %1: not found -- Não foi possível abrir %1: ficheiro não encontrado -- -- -- Failed to open database file %1: not a plain file -- Não foi possível abrir %1: não é um ficheiro simples -- -- -- Failed to open database file %1: not readable -- Não foi possível abrir %1: ficheiro não legível -- -- -- Enter password to unlock %1: -- Introduza a palavra-passe para desbloquear %1: -- -- -- Invalid YubiKey slot %1 -- 'Slot' Yubikey inválida: %1 -- -- -- Enter password to encrypt database (optional): -- Introduza a palavra-passe para cifrar a base de dados (opcional): -- -- -- HIBP file, line %1: parse error -- Ficheiro HIBP, linha %1: erro ao processar -- -- -- Secret Service Integration -- Integração 'Secret Service' -- -- -- User name -- Nome de utilizador -- -- -- Password for '%1' has been leaked %2 time(s)! -- A palavra-passe para '%1' foi exposta %2 vez!A palavra-passe para '%1' foi exposta %2 vezes! -- -- -- Invalid password generator after applying all options -- Gerador de palavras-passe inválido depois de aplicar todas as opções -- -- -- Show the protected attributes in clear text. -- Mostrar atributos protegidos em 'clear-text'. -- -- -- Browser Plugin Failure -- Falha no plugin do navegador -- -- -- Could not save the native messaging script file for %1. -- Não foi possível guardar o script de mensagens nativas para %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Copiar atributo para a área de transferÊncia. Utiliza "password" se nenhum for especificado. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Copiar TOTP para a área de transferência (equivalente a "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Copiar atributo de uma entrada para a área de transferência. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ERRO: tem que especificar --attribute ou --totp, mas não ambos. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ERRO: atributo %1 é ambíguo porque coincide com %2. -- -- -- Attribute "%1" not found. -- Atributo %1 não encontrado. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Atributo da entrada "%1" copiado para a área de transferência! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Slot Yubikey e número de série (opcional) para aceder à base de dados (exemplo 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Duração (em ms) para decifrar a base de dados. -- -- -- time -- duração -- -- -- Set the key file for the database. -- Definir um ficheiro-chave para a base de dados. -- -- -- Set a password for the database. -- Definir uma palavra-passe para a base de dados. -- -- -- Invalid decryption time %1. -- Duração inválida %1. -- -- -- Target decryption time must be between %1 and %2. -- A duração para decifrar tem que estar entre %1 e%2. -- -- -- Failed to set database password. -- Não foi possível definir a palavra-passe para a base de dados. -- -- -- Benchmarking key derivation function for %1ms delay. -- Função de derivação de chave para um atraso de %1 ms. -- -- -- Setting %1 rounds for key derivation function. -- A definir %1 ciclos para a função de derivação da chave. -- -- -- error while setting database key derivation settings. -- erro ao definir as definições de derivação da chave. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formato a utilizar para a exportação. As opções possíveis são 'xml' e 'csv'. Por definição, é utilizado o formato 'XML'. -- -- -- Unable to import XML database: %1 -- Não foi possível importar a base de dados em XML: %1 -- -- -- Show a database's information. -- Mostrar informação da base de dados. -- -- -- UUID: -- UUID: -- -- -- Name: -- Nome: -- -- -- Description: -- Descrição: -- -- -- Cipher: -- Cifra: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Reciclagem ativada. -- -- -- Recycle bin is not enabled. -- Reciclagem desativada. -- -- -- Invalid command %1. -- Comando inválido %1. -- -- -- Invalid YubiKey serial %1 -- N.º de série YubiKey inválido %1 -- -- -- Please touch the button on your YubiKey to continue… -- Toque no botão da YubiKey para continuar... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Tem a certeza de que deseja criar a base de dados com uma palavra-passe vazia? [y/N]: -- -- -- Repeat password: -- Repetição de palavra-passe: -- -- -- Error: Passwords do not match. -- Erro: disparidade nas palavras-passe. -- -- -- All clipping programs failed. Tried %1 -- -- Falha em todos os programas. Tentados %1 -- -- -- -- AES (%1 rounds) -- AES (%1 ciclos) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Testar atraso de %1 -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- caminho para um ficheiro de configuração local -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- AVISO: está a utilizar um formato de ficheiro-chave antigo que KeePassXC --pode deixar de ter suporte no futuro. -- --Deve considerar a geração de um novo ficheiro-chave. -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 ciclos, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – recomendado) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Ícone -- -- -- Unsupported key file version: %1 -- Versão de ficheiro-chave não suportada: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- Disparidade 'checksum'! O ficheiro-chave pode estar danificado. -- -- -- Unexpected key file data! Key file may be corrupt. -- Dados inesperados! O ficheiro-chave pode estar danificado. -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Erro interno zlib durante a compressão: -- -- -- Error writing to underlying device: -- Erro de escrita no dispositivo subjacente: -- -- -- Error opening underlying device: -- Erro ao abrir o dispositivo subjacente: -- -- -- Error reading data from underlying device: -- Erro de leitura no dispositivo subjacente: -- -- -- Internal zlib error when decompressing: -- Erro interno zlib durante a descompressão: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- O formato gzip não é suportado por esta versão zlib. -- -- -- Internal zlib error: -- Erro interno zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Incluir também as entradas que tenham sido excluídas dos relatórios -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Passe com o rato pelo motivo para obter mais informação. Clique duas vezes na entrada para editar. -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- Má - deve alterar a palavra-passe -- -- -- Poor -- Password quality -- -- -- -- Poor — password should be changed -- Fraquinha - deve alterar a palavra-passe -- -- -- Weak -- Password quality -- Fraca -- -- -- Weak — consider changing the password -- Fraca - considere alterar a palavra-passe -- -- -- (Excluded) -- (Excluída) -- -- -- This entry is being excluded from reports -- Esta entrada está a ser excluída dos relatórios -- -- -- Please wait, health data is being calculated... -- Por favor aguarde, os dados estão a ser calculados... -- -- -- Congratulations, everything is healthy! -- Parabéns, tudo parece estar bem! -- -- -- Title -- Título -- -- -- Path -- Caminho -- -- -- Score -- Avaliação -- -- -- Reason -- Motivo -- -- -- Edit Entry... -- Editar entrada... -- -- -- Exclude from reports -- Excluir dos relatórios -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ATENÇÃO: este relatório envia informações para o serviço Have I Been Pwned (https://haveibeenpwned.com). Se continuar, as suas palavras-passe serão cifradas com 'hashes' e os primeiros 5 caracteres dessas 'hashes' serão enviados para o serviço. A sua base de dados não sofre alterações e não pode ser reconstituída a partir desta informação. Contudo, o número de palavras-passe enviadas e o seu endereço IP serão expostos ao serviço. -- -- -- Perform Online Analysis -- Executar análise online -- -- -- Also show entries that have been excluded from reports -- Incluir também as entradas que tenham sido excluídas dos relatórios -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Esta versão do KeePassXC não possui funcionalidades de rede. Necessita da funcionalidade de rede para comparar as suas palavras-passe com as base de dados Have I Been Pwned (HIBP). -- -- -- Congratulations, no exposed passwords! -- Parabéns, não possui palavras-passe expostas! -- -- -- Title -- Título -- -- -- Path -- Caminho -- -- -- Password exposed… -- Palavra-passe exposta... -- -- -- (Excluded) -- (Excluída) -- -- -- This entry is being excluded from reports -- Esta entrada está a ser excluída dos relatórios -- -- -- once -- uma -- -- -- up to 10 times -- até 10 vezes -- -- -- up to 100 times -- até 100 vezes -- -- -- up to 1000 times -- até 1000 vezes -- -- -- up to 10,000 times -- até 10 000 vezes -- -- -- up to 100,000 times -- até 100 000 vezes -- -- -- up to a million times -- até 1 milhão de vezes -- -- -- millions of times -- milhões de vezes -- -- -- Edit Entry... -- Editar entrada... -- -- -- Exclude from reports -- Excluir dos relatórios -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Passe com o rato por cima das linhas com o erro para mais informações. -- -- -- Name -- Nome -- -- -- Value -- Valor -- -- -- Please wait, database statistics are being calculated... -- Por favor aguarde. As estatísticas da base de dados estão a ser calculadas... -- -- -- Database name -- Nome da base de dados -- -- -- Description -- Descrição -- -- -- Location -- Localização -- -- -- Last saved -- Última gravação -- -- -- Unsaved changes -- Alterações por guardar -- -- -- yes -- sim -- -- -- no -- não -- -- -- The database was modified, but the changes have not yet been saved to disk. -- A base de dados foi modificada mas as alterações ainda não foram guardadas. -- -- -- Number of groups -- Número de grupos -- -- -- Number of entries -- Numero de entradas -- -- -- Number of expired entries -- Número de entradas caducadas -- -- -- The database contains entries that have expired. -- A base de dados contém entradas caducadas. -- -- -- Unique passwords -- Palavras-passe unívocas -- -- -- Non-unique passwords -- Palavras-passe não unívocas -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mais de 10% das palavras-passes foram reutilizadas. Se possível, utilize palavras-passe unívocas. -- -- -- Maximum password reuse -- Número máximo de reutilizações -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Algumas palavras-passe estão a ser utilizadas mais do que 3 vezes. Se possível, utilize palavras-passes unívocas. -- -- -- Number of short passwords -- Número de palavras-passes curtas -- -- -- Recommended minimum password length is at least 8 characters. -- Recomendamos que utilize palavras-passe com um mínimo de 8 caracteres. -- -- -- Number of weak passwords -- Número de palavras-passe fracas -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Recomendamos que utilize palavras-passe longas e aleatórias e que tenham uma avaliação 'boa' ou 'excelente'. -- -- -- Entries excluded from reports -- Entradas excluídas dos relatórios -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- A exclusão de entradas dos relatórios, porque sabe-se que são de fraca qualidade, não é necessariamente um problema mas deve manter uma atenção sobre as mesmas. -- -- -- Average password length -- Tamanho médio das palavras-passe -- -- -- %1 characters -- %1 caracteres -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- O tamanho médio das palavras-passe é inferior a 10 caracteres. Palavras-passe com tamanho maior conferem mais segurança. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Erro ao conectar com o agente. -- -- -- Agent protocol error. -- Erro no protocolo do agente. -- -- -- No agent running, cannot add identity. -- O agente não está em execução e não é possível adicionar a identidade. -- -- -- No agent running, cannot remove identity. -- O agente não está em execução e não é possível remover a identidade. -- -- -- Agent refused this identity. Possible reasons include: -- O agente recusou esta identidade. Causas possíveis: -- -- -- The key has already been added. -- A chave já foi adicionada. -- -- -- Restricted lifetime is not supported by the agent (check options). -- O tempo de vida restrito não é suportado pelo agente (consulte as opções). -- -- -- A confirmation request is not supported by the agent (check options). -- O agente não tem suporte a pedidos de confirmação (consulte as opções). -- -- -- Key identity ownership conflict. Refusing to add. -- Conflito na titularidade da chave. Não será adicionada. -- -- -- No agent running, cannot list identities. -- Nenhum agente em execução, não é possível listar as identidades. -- -- -- -- SearchHelpWidget -- -- Search Help -- Pesquisar na ajuda -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] -- -- -- Every search term must match (ie, logical AND) -- Todos os termos de pesquisa coincidentes (AND lógico) -- -- -- Modifiers -- Modificadores -- -- -- exclude term from results -- excluir termo dos resultados -- -- -- match term exactly -- coincidência exata -- -- -- use regex in term -- utilizar regex no termo -- -- -- Fields -- Campos -- -- -- Term Wildcards -- Caracteres universais do termo -- -- -- match anything -- coincidência relativa -- -- -- match one -- uma coincidência -- -- -- logical OR -- OU lógico -- -- -- Examples -- Exemplos -- -- -- -- SearchWidget -- -- Search -- Pesquisa -- -- -- Limit search to selected group -- Limitar pesquisa ao grupo selecionado -- -- -- Search Help -- Pesquisar na ajuda -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Pesquisar (%1)... -- -- -- Case sensitive -- Diferenciar maiúsculas/minúsculas -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opções -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Ativar integração Freedesktop.org Secret Service no KeepassXC -- -- -- General -- Geral -- -- -- Show notification when credentials are requested -- Mostrar notificação se as credenciais forem solicitadas -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Se ativar a reciclagem para esta base de dados, as entradas serão movidas diretamente para a reciclagem. Se não a utilizar, as entradas serão apagadas sem qualquer confirmação.</p><p>Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.</p></body></html> -- -- -- Exposed database groups: -- Grupos expostos: -- -- -- Authorization -- Autorização -- -- -- These applications are currently connected: -- Estas aplicações estão conectadas: -- -- -- Don't confirm when entries are deleted by clients -- Não confirmar se as entradas forem apagadas pelos clientes -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Erro:</b> falha na ligação a DBus. Verifique a configuração DBus. -- -- -- <b>Warning:</b> -- <b>Aviso:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Guarde as alterações atuais para ativar o plugin e permitir a edição desta secção. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Ativo -- -- -- Allow export -- Permitir exportação -- -- -- Allow import -- Permitir importação -- -- -- Own certificate -- Certificado próprio -- -- -- Fingerprint: -- Impressão digital: -- -- -- Certificate: -- Certificado: -- -- -- Signer -- Signatário: -- -- -- Key: -- Chave: -- -- -- Generate -- Gerar -- -- -- Import -- Importar -- -- -- Export -- Exportar -- -- -- Imported certificates -- Certificados importados -- -- -- Trust -- Confiar -- -- -- Ask -- Perguntar -- -- -- Untrust -- Deixar de confiar -- -- -- Remove -- Remover -- -- -- Path -- Caminho -- -- -- Status -- Estado -- -- -- Fingerprint -- Impressão digital -- -- -- Certificate -- Certificado -- -- -- Trusted -- Confiável -- -- -- Untrusted -- Não confiável -- -- -- Unknown -- Desconhecido -- -- -- key.share -- Filetype for KeeShare key -- chave.partilha -- -- -- KeeShare key file -- Ficheiro-chave KeeShare -- -- -- All files -- Todos os ficheiros -- -- -- Select path -- Selecionar caminho -- -- -- Exporting changed certificate -- Exportação do certificado alterado -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual? -- -- -- Signer: -- Signatário: -- -- -- Allow KeeShare imports -- Permitir importação KeeShare -- -- -- Allow KeeShare exports -- Permitir exportação KeeShare -- -- -- Only show warnings and errors -- Mostrar apenas avisos e erros -- -- -- Key -- Chave -- -- -- Signer name field -- Campo Nome do signatário -- -- -- Generate new certificate -- Gerar novo certificado -- -- -- Import existing certificate -- Importar certificado -- -- -- Export own certificate -- Exportar o meu certificado -- -- -- Known shares -- Partilhas conhecidas -- -- -- Trust selected certificate -- Confiar no certificado selecionado -- -- -- Ask whether to trust the selected certificate every time -- Perguntar sempre pela fiabilidade do certificado selecionado -- -- -- Untrust selected certificate -- Deixar de confiar no certificado selecionado -- -- -- Remove selected certificate -- Remover certificado selecionado -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- A substituição de contentores de partilha assinados não é suportada - exportação evitada -- -- -- Could not write export container (%1) -- Não foi possível escrever o contentor de exportação (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Assinatura não incorporada. Não foi possível escrever no ficheiro (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1) -- -- -- Could not embed database: Could not write file (%1) -- Base de dados não incorporada. Não foi possível escrever no ficheiro (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- A substituição de contentores de partilha não assinados não é suportada - exportação evitada -- -- -- Could not write export container -- Não foi possível escrever o contentor de exportação -- -- -- Unexpected export error occurred -- Ocorreu um erro inesperado ao exportar -- -- -- -- ShareImport -- -- Import from container without signature -- Importar de um contentor sem assinatura -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1? -- -- -- Import from container with certificate -- Importar de um contentor com certificado -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Deseja confiar em %1 com a impressão digital de %2 em %3? -- -- -- Not this time -- Agora não -- -- -- Never -- Nunca -- -- -- Always -- Sempre -- -- -- Just this time -- Apenas agora -- -- -- Signed share container are not supported - import prevented -- O contentor de partilha assinado não é suportado - importação evitada -- -- -- File is not readable -- O ficheiro não é legível -- -- -- Invalid sharing container -- Contentor de partilha inválido -- -- -- Untrusted import prevented -- Importação não fiável impedida -- -- -- Successful signed import -- Importação assinada bem sucedida -- -- -- Unsigned share container are not supported - import prevented -- O contentor de partilha não assinado não é suportado - importação evitada -- -- -- Successful unsigned import -- Importação não assinada bem sucedida -- -- -- File does not exist -- O ficheiro não existe -- -- -- Unknown share container type -- Tipo de contentor de partilha desconhecido -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Não foi possível importar %1 (%2) -- -- -- Import from %1 successful (%2) -- %1 foi importada com sucesso (%2) -- -- -- Imported from %1 -- Importada de %1 -- -- -- Export to %1 failed (%2) -- Não foi possível exportar %1 (%2) -- -- -- Export to %1 successful (%2) -- %1 foi exportada com sucesso (%2) -- -- -- Export to %1 -- Exportar para %1 -- -- -- Multiple import source path to %1 in %2 -- Diversos caminhos de importação para %1 em %2 -- -- -- Conflicting export target path %1 in %2 -- Conflito no caminho de exportação para %1 em %2 -- -- -- -- TotpDialog -- -- Timed Password -- Palavra-passe limitada -- -- -- 000000 -- 000000 -- -- -- Copy -- Copiar -- -- -- Expires in <b>%n</b> second(s) -- Caduca dentro de <b>%n</b> segundoCaduca dentro de <b>%n</b> segundos -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copiar -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores. -- -- -- There was an error creating the QR code. -- Ocorreu um erro ao criar o código QR. -- -- -- Closing in %1 seconds. -- A fechar dentro de %1 segundos. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Configurar TOTP -- -- -- Default RFC 6238 token settings -- Definições padrão do 'token' RFC 6238 -- -- -- Steam token settings -- Definições do 'token' do fluxo -- -- -- Use custom settings -- Utilizar definições personalizadas -- -- -- Custom Settings -- Definições personalizadas -- -- -- Time step: -- Avanço de tempo: -- -- -- sec -- Seconds -- seg -- -- -- Code size: -- Tamanho do código: -- -- -- Secret Key: -- Chave secreta: -- -- -- Secret key must be in Base32 format -- A chave secreta tem que estar no formato Base32 -- -- -- Secret key field -- Campo Chave secreta -- -- -- Algorithm: -- Algoritmo: -- -- -- Time step field -- Campo Avanço de tempo -- -- -- digits -- dígitos -- -- -- Invalid TOTP Secret -- TOTP secreta inválida -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Introduziu uma chave secreta inválida. A chave tem que estar no formato Base32. Exemplo: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirmar remoção das definições TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Tem a certeza de que deseja remover as definições TOTP desta entrada? -- -- -- -- URLEdit -- -- Invalid URL -- URL inválido -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- A procurar por atualizações -- -- -- Checking for updates... -- A procurar por atualizações... -- -- -- Close -- Fechar -- -- -- Update Error! -- Erro ao atualizar! -- -- -- An error occurred in retrieving update information. -- Ocorreu um erro ao obter a informação de atualização. -- -- -- Please try again later. -- Por favor tente mais tarde. -- -- -- Software Update -- Atualização do programa -- -- -- A new version of KeePassXC is available! -- Está disponível uma nova versão do KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- Está disponível o KeePassXC %1 — você tem a versão %2. -- -- -- Download it at keepassxc.org -- Descarregue em keepassxc.org -- -- -- You're up-to-date! -- Versão atualizada! -- -- -- KeePassXC %1 is currently the newest version available -- Atualmente, KeePassXC %1 é a versão mais recente -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Armazene as suas palavras-passe em segurança com o KeePassXC -- -- -- Create new database -- Criar nova base de dados -- -- -- Open existing database -- Abrir base de dados existente -- -- -- Import from KeePass 1 -- Importar de KeePass 1 -- -- -- Import from CSV -- Importar de ficheiro CSV -- -- -- Recent databases -- Bases de dados recentes -- -- -- Welcome to KeePassXC %1 -- Bem-vindo ao KeePassXC %1 -- -- -- Import from 1Password -- Importar de 1Password -- -- -- Open a recent database -- Abrir uma base de dados recente -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Slot configurada - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Pergunta de segurança - Slot %3 - %4 -- -- -- Press -- Prima -- -- -- Passive -- Passiva -- -- -- %1 Invalid slot specified - %2 -- %1 Especificado um slot inválido - %2 -- -- -- The YubiKey interface has not been initialized. -- A interface YubiKey não foi inicializada. -- -- -- Hardware key is currently in use. -- A chave de hardware está a ser utilizada. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Não foi possível localizar a chave de hardware com o número de série %1. Introduza a sua chave de hardware para continuar. -- -- -- Hardware key timed out waiting for user interaction. -- Tempo limite excedido ou à espera de interação do utilizador. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Ocorreu um erro USB ao tentar aceder à chave de hardware: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Erro ao tentar concluir a pergunta de segurança. O erro foi: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Recarregar -- -- -- YubiKey Challenge-Response -- Pergunta de segurança YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Se tiver uma <a href="https://www.yubico.com/">YubiKey</a>, pode utilizá-la para obter mais segurança.</p><p>A YubiKey requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Recarregar 'tokens' de hardware -- -- -- Hardware key slot selection -- Seleção de 'slot' para a chave de hardware -- -- -- Could not find any hardware keys! -- Não foram encontradas chaves de hardware! -- -- -- Selected hardware key slot does not support challenge-response! -- A chave de hardware selecionada não tem suporte a pergunta de segurança! -- -- -- Detecting hardware keys… -- A detetar chaves de hardware... -- -- -- No hardware keys detected -- Não foram detetadas chaves de hardware -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ro.ts keepassxc-2.6.4-patched/share/translations/keepassx_ro.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ro.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ro.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7887 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Despre KeePassXC -- -- -- About -- Despre -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Raportați erorile la: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC este distribuit în conformitate cu termenii GNU General Public License (GPL) versiunea 2 sau (la opțiunea dumneavoastră) versiunea 3. -- -- -- Contributors -- Contribuitori -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vezi contibuțiile pe GitHub</a> -- -- -- Debug Info -- Informații depanare -- -- -- Include the following information whenever you report a bug: -- Includeți următoarea informație când raportați o eroare: -- -- -- Copy to clipboard -- Copiază în clipboard -- -- -- Project Maintainers: -- Mentenanții proiectului: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Mulțumiri speciale de la echipa KeePassXC Du-te la debfx pentru crearea KeePassX original. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Folositi OpenSSH pentru Windows in loc de Pageant -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Setări aplicație -- -- -- General -- General -- -- -- Security -- Securitate -- -- -- Access error for config file %1 -- Eroare de acces pentru fisier de configurare %1 -- -- -- Icon only -- Numai pictograma -- -- -- Text only -- Numai text -- -- -- Text beside icon -- Text linga iconita -- -- -- Text under icon -- text sub iconita -- -- -- Follow style -- Urmareste stilistica -- -- -- Reset Settings? -- Resetare Setări? -- -- -- Are you sure you want to reset all general and security settings to default? -- Sigur resetați în mod implicit toate setările generale și de securitate ? -- -- -- Monochrome (light) -- -- -- -- Monochrome (dark) -- -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Setări de bază -- -- -- Startup -- Pornire -- -- -- Start only a single instance of KeePassXC -- Start numai o singură instanță de KeePassXC -- -- -- Minimize window at application startup -- Minimizare fereastră la pornirea aplicației -- -- -- File Management -- Gestionare fișiere -- -- -- Backup database file before saving -- Fă copie de rezervă fișierului bazei de date înainte de salvare -- -- -- Automatically save after every change -- Salvare automată după fiecare modificare -- -- -- Automatically reload the database when modified externally -- Reîncărcați automat baza de date atunci când este modificată extern -- -- -- Entry Management -- Managementul inregistrarii -- -- -- Use group icon on entry creation -- Utilizarea pictogramei grupului la crearea inregistrarii -- -- -- Minimize instead of app exit -- Minimizare în locul ieșirii aplicației -- -- -- Show a system tray icon -- Afișare pictogramă tavă de sistem -- -- -- Hide window to system tray when minimized -- Ascundere fereastră în tava de sistem atunci când este minimizată -- -- -- Auto-Type -- Auto tiparire -- -- -- Use entry title to match windows for global Auto-Type -- Utilizarea titlului inregistrarii pentru a se potrivi cu ferestrele pentru auto-tiparire globala -- -- -- Use entry URL to match windows for global Auto-Type -- Utilizați URL-ul din inregistrare pentru a se potrivi Windows pentru autotiparire globala -- -- -- Always ask before performing Auto-Type -- Întrebați întotdeauna înainte de a efectua auto-tiparire -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Bara de instrumente mobila -- -- -- Remember previously used databases -- Retine bazele de date utilizate anterior -- -- -- Load previously open databases on startup -- la pornirea incărcarea bazelor de date deschise anterior -- -- -- Remember database key files and security dongles -- Retine fișierele cheie de baze de date și Dongles de securitate -- -- -- Check for updates at application startup once per week -- Căutați actualizări la pornirea aplicației o dată pe săptămână -- -- -- Include beta releases when checking for updates -- Includere versiuni beta la verificarea actualizărilor -- -- -- Language: -- Limba: -- -- -- (restart program to activate) -- (reporniți programul pentru a activa) -- -- -- Minimize window after unlocking database -- Minimizare fereastră după deblocarea bazei de date -- -- -- Minimize when opening a URL -- Minimizare la deschiderea unui URL -- -- -- Hide window when copying to clipboard -- Ascundere fereastră la copierea în Clipboard -- -- -- Minimize -- Minimizare -- -- -- Drop to background -- Picătură în fundal -- -- -- Favicon download timeout: -- Favicon download timeout: -- -- -- Website icon download timeout in seconds -- Site-ul descărca pictograma timeout în câteva secunde -- -- -- sec -- Seconds -- sec -- -- -- Toolbar button style -- Stil buton bară de instrumente -- -- -- Language selection -- Selectarea limbii -- -- -- Global auto-type shortcut -- Comandă rapidă de tip auto global -- -- -- Auto-type character typing delay milliseconds -- Tipul de auto-tastare întârziere milisecunde -- -- -- Auto-type start delay milliseconds -- Auto-tip de pornire întârziere milisecunde -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Timeout -- -- -- Clear clipboard after -- Golește clipboard după -- -- -- sec -- Seconds -- sec -- -- -- Lock databases after inactivity of -- Blocarea bazelor de date după inactivitatea -- -- -- min -- Min -- -- -- Forget TouchID after inactivity of -- Uita TouchID după inactivitatea de -- -- -- Convenience -- Comoditate -- -- -- Lock databases when session is locked or lid is closed -- Blocarea bazelor de date atunci când sesiunea este blocată sau capacul este închis -- -- -- Forget TouchID when session is locked or lid is closed -- Uitați TouchID când sesiunea este blocată sau capacul este închis -- -- -- Lock databases after minimizing the window -- Blocarea bazelor de date după Minimizarea ferestrei -- -- -- Re-lock previously locked database after performing Auto-Type -- Re-Lock bazei de date blocate anterior după efectuarea auto-Type -- -- -- Hide passwords in the entry preview panel -- Ascunderea parolelor în panoul de previzualizare inregistrarii -- -- -- Hide entry notes by default -- Ascundere implicită notei inregistrarii -- -- -- Privacy -- Confidențialitate -- -- -- Use DuckDuckGo service to download website icons -- Utilizați serviciul DuckDuckGo pentru a descărca pictogramele site-ului -- -- -- Clipboard clear seconds -- Stergere clipboard secunde -- -- -- Touch ID inactivity reset -- Resetare inactivitate ID Touch -- -- -- Database lock timeout seconds -- Baza de date blocare timeout secunde -- -- -- min -- Minutes -- Min -- -- -- Clear search query after -- Stergerea interogarea de căutare după -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nu a putut fi gasită o intrare care să coincidă cu titlul ferestrei: -- -- -- Auto-Type - KeePassXC -- Auto-tiparire-KeePassXC -- -- -- Auto-Type -- Auto tiparire -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Sintaxa declaraţiei de auto-tiparire este incorectă! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Această comandă auto-tip conține o întârziere foarte lungă. Chiar vrei să continuăm? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Această comandă auto-tip conține apăsări foarte lente ale tastelor. Chiar vrei să continuăm? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Această comandă auto-tip conține argumente care se repetă foarte des. Chiar vrei să continuăm? -- -- -- Permission Required -- Permisiune necesară -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC necesită permisiunea de accesibilitate pentru a efectua intrare nivel auto-Type. Dacă ați acordat deja permisiunea, poate fi nevoie să reporniți KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Fereastră -- -- -- Sequence -- Secvență -- -- -- Default sequence -- Secvență implicită -- -- -- -- AutoTypeMatchModel -- -- Group -- Grup -- -- -- Title -- Titlu -- -- -- Username -- Nume utilizator -- -- -- Sequence -- Secvență -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Copiază &numele de utilizator -- -- -- Copy &password -- Copiază &parola -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Permisiune necesară -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC necesită permisiunea Accesorizării și Recorderului ecranului pentru a efectua tipul automat global. Înregistrarea ecranului este necesară pentru a utiliza titlul ferestrei pentru a găsi intrări. Dacă ați acordat deja permisiunea, poate fi necesar să reporniți KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-tip-KeePassXC -- -- -- Select entry to Auto-Type: -- Selectare inregistrare pentru Auto-tip: -- -- -- Search... -- Caută... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-browser-ul salvare inregistrarii -- -- -- Ok -- Ok -- -- -- Cancel -- Anulare -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Aveți mai multe baze de date deschise. --Selectați baza de date corectă pentru salvarea acreditărilor. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: noua cerere de asociere cheie -- -- -- Save and allow access -- Salvează și permite acces -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Suprascriere cheie existentă? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Există deja o cheie de criptare partajată cu numele "%1" . --Doriți să o suprascrieți? -- -- -- KeePassXC: Update Entry -- KeePassXC: actualizare intrare -- -- -- Do you want to update the information in %1 - %2? -- Actualizați informațiile în %1 - %2 ? -- -- -- Abort -- Anulează -- -- -- Converting attributes to custom data… -- Conversia atributelor in date particularizate... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: conversia atributelor KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Atributele convertite cu succes din %1 intrare (i). --S-au mutat %2 chei la date particularizate. -- -- -- Successfully moved %n keys to custom data. -- S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes %n chei la date particularizate. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: n-a fost găsita nici o intrare cu KeePassHTTP atribute ! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Baza de date activă nu conține nici o intrare cu atributele KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Au fost detectate setările moștenite de integrare a browserului -- -- -- KeePassXC: Create a new group -- KeePassXC: crearea unui grup nou -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- S-a primit o solicitare de creare a unui grup nou "%1". --Doriți să creați acest grup? -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Setările KeePassXC-browser trebuie mutate în setările bazei de date. --Acest lucru este necesar pentru a menține conexiunile browser-ului curent. --Migrați acum setările existente? -- -- -- Don't show this warning again -- Nu mai afișa acest avertisment -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Ați primit o solicitare de asociere pentru următoarea bază de date: --%1 -- --Dați conexiunii un nume sau un ID unic, de exemplu: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Acest lucru este necesar pentru accesarea bazelor de date cu KeePassXC-browser -- -- -- Enable browser integration -- Activați integrarea browserului -- -- -- General -- General -- -- -- Browsers installed as snaps are currently not supported. -- Browserele instalate ca snaps nu sunt acceptate momentan. -- -- -- Enable integration for these browsers: -- Activați integrarea pentru aceste browsere: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Navigator web Tor -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Sunt returnate numai intrările cu aceeași schemă (http://, https://,...) . -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Returnează numai cele mai bune potriviri pentru un anumit URL în loc de toate intrările pentru întregul domeniu. -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- Returnează acreditările expirate. String [expirat] se adaugă la titlu. -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- Toate bazele de date conectate la extensie vor returna acreditările corespondente. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Avansat -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- Crearea sau actualizarea automată a câmpurilor șir nu este acceptată. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Nu afișați popup-ul sugerând migrarea setărilor KeePassHTTP moștenite. -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Actualizează la pornire calea binară KeePassXC sau keepassxc-proxy automat la script-uri de mesagerie native. -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- Utilizați o locație proxy particularizată dacă ați instalat manual un proxy. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- Câmp de locație proxy particularizat -- -- -- Browser for custom proxy file -- Browser pentru fișier proxy personalizat -- -- -- Browse... -- Button for opening file dialog -- Răsfoiește... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- -- -- -- Toolbar button style -- Stil buton bară de instrumente -- -- -- Config Location: -- Locație configurare: -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Datorită snap sandboxing, trebuie să executați un script pentru a activa integrarea browser-ului.<br>Puteți obține acest script de la % 1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- Vă rugăm să consultați instrucțiunile speciale pentru utilizarea extensiei browserului de mai jos -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Avertizare:</b> Următoarele opțiuni pot fi periculoase! -- -- -- Executable Files -- Fișiere executabile -- -- -- All Files -- Toate fișierele -- -- -- Select custom proxy location -- Selectare locație proxy particularizată -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Clonare opțiuni -- -- -- Append ' - Clone' to title -- Adăugare " - Clonat" la titlu -- -- -- Replace username and password with references -- Înlocuiește numele utilizator și parola cu referințe -- -- -- Copy history -- Copiază istoric -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importă câmpuri CSV -- -- -- filename -- nume fișier -- -- -- size, rows, columns -- dimensiune, rânduri, coloane -- -- -- Encoding -- Codificare -- -- -- Codec -- Codec -- -- -- Text is qualified by -- Textul este calificat de -- -- -- Fields are separated by -- Câmpurile sunt separate de -- -- -- Comments start with -- Comentariile încep cu -- -- -- Consider '\' an escape character -- Considera "\" un caracter Escape -- -- -- Preview -- Previzualizare -- -- -- Imported from CSV file -- Importat din fișier CSV -- -- -- Original data: -- Datele originale: -- -- -- Error -- Eroare -- -- -- Error(s) detected in CSV file! -- Eroare (i) detectată în fișierul CSV! -- -- -- [%n more message(s) skipped] -- [% n mai mult mesaj (e) ignorate][% n mai mult mesaj (e) ignorate][%n mai mult mesaj (e) ignorate] -- -- -- CSV import: writer has errors: --%1 -- Import CSV: scriitor are erori: --%1 -- -- -- Text qualification -- Calificarea textului -- -- -- Field separation -- Separarea câmpului -- -- -- Number of header lines to discard -- Numărul de linii de antet de aruncat -- -- -- CSV import preview -- Previzualizare import CSV -- -- -- Column Association -- -- -- -- Last Modified -- Ultima modificare -- -- -- Password -- Parola -- -- -- Created -- Creat -- -- -- Notes -- Notițe -- -- -- Title -- Titlu -- -- -- Group -- Grup -- -- -- URL -- URL -- -- -- Username -- Nume utilizator -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- -- CsvParserModel -- -- %n column(s) -- % n coloană (e)% n coloană (e)%n coloană (e) -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- % n byte (e)% n byte (e)%n byte (e) -- -- -- %n row(s) -- % n rând (e)% n rând (e)%n rând (uri) -- -- -- -- Database -- -- File %1 does not exist. -- Fișierul %1 nu există. -- -- -- Unable to open file %1. -- Imposibil de deschis fișierul %1. -- -- -- Error while reading the database: %1 -- Eroare la citirea bazei de date: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Fișierul nu poate fi scris deoarece este deschis în modul doar pentru citire. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Cheia nu s-a transformat. Acesta este un bug, vă rugăm să raportati la dezvoltatorii! -- -- -- %1 --Backup database located at %2 -- %1 --Baza de date de rezervă localizată la %2 -- -- -- Could not save, database does not point to a valid file. -- Nu s-a putut salva, baza de date nu indică un fișier valid. -- -- -- Could not save, database file is read-only. -- Nu s-a putut salva, fișierul bazei de date este numai în citire. -- -- -- Database file has unmerged changes. -- Fișierul bazei de date are modificări nemergite. -- -- -- Recycle Bin -- Coș de gunoi -- -- -- Passwords -- Root group name -- Parole -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Deblocare bază de date - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Fișier cheie: -- -- -- Refresh -- Actualizează -- -- -- Don't show this warning again -- Nu mai afișa acest avertisment -- -- -- All files -- Toate fișierele -- -- -- Key files -- Fișiere cheie -- -- -- Select key file -- Selectați fișier cheie -- -- -- Failed to open key file: %1 -- Nu a putut fi deschis fișierul cheii: %1 -- -- -- Unlock KeePassXC Database -- Deblocați baza de date KeePassXC -- -- -- Enter Password: -- Introdu parola: -- -- -- Password field -- Câmp parola -- -- -- Hardware key slot selection -- Selectarea sloturilor pentru cheie hardware -- -- -- Browse for key file -- Căutați fișierul cheie -- -- -- Browse... -- Răsfoiește... -- -- -- Refresh hardware tokens -- Actualizați jetoane hardware -- -- -- Hardware Key: -- Cheie hardware: -- -- -- Hardware key help -- Ajutor cheie hardware -- -- -- TouchID for Quick Unlock -- TouchID pentru deblocare rapidă -- -- -- Unlock failed and no password given -- Deblocarea a eșuat și nu a fost dată nicio parolă -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Deblocarea bazei de date a eșuat și nu ați introdus o parolă. --Vrei să încerci din nou cu o parolă „goală”? -- --Pentru a preveni apariția acestei erori, trebuie să accesați „Setări baza de date / securitate” și să vă resetați parola. -- -- -- Retry with empty password -- Încercați din nou cu parola goală -- -- -- Enter Additional Credentials (if any): -- Introduceți acreditări suplimentare (dacă există): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Puteți utiliza o cheie de securitate hardware, cum ar fi <strong>YubiKey</strong> sau <strong>OnlyKey</strong>, cu sloturi configurate pentru HMAC-SHA1.</p> --<p>Faceți clic pentru mai multe informații ...</p> -- -- -- Key file help -- Ajutor de fișiere cheie -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Nu se poate utiliza fișierul bazei de date ca fișier cheie -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Nu puteți utiliza fișierul dvs. de bază de date ca fișier cheie. --Dacă nu aveți un fișier cheie, lăsați câmpul gol. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Vă rugăm să atingeți butonul de pe YubiKey dvs.! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Parole -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Setări avansate -- -- -- General -- General -- -- -- Security -- Securitate -- -- -- Encryption Settings -- Setări criptare -- -- -- Browser Integration -- Integrare cu browserul -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Setări KeePassXC-Browser -- -- -- Stored keys -- Taste memorate -- -- -- Remove -- Înlătură -- -- -- Delete the selected key? -- Șterg cheia selectată? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Chiar doriți să ștergeți cheia selectată? --Acest lucru poate împiedica conectarea la plugin-ul browser-ului. -- -- -- Key -- Cheie -- -- -- Value -- Valoare -- -- -- Enable Browser Integration to access these settings. -- Activați integrarea browserului pentru a accesa aceste setări. -- -- -- Disconnect all browsers -- Deconectează toate navigatoarele web -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Chiar doriți să deconectați toate browserele? --Acest lucru poate împiedica conectarea la plugin-ul browser-ului. -- -- -- KeePassXC: No keys found -- KeePassXC: nu s-au găsit chei -- -- -- No shared encryption keys found in KeePassXC settings. -- Nu sunt găsite chei de criptare partajate în setările KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: cheile sterse din baza de date -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes %n chei de criptare din setările KeePassXC. -- -- -- Forget all site-specific settings on entries -- Uita toate setările specifice site-ului pe intrările -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Chiar vrei sa se uite toate setările specifice site-ului pe fiecare intrare? --Permisiunile de accesare a intrărilor vor fi revocate. -- -- -- Removing stored permissions… -- Se elimină permisiunile stocate... -- -- -- Abort -- Anulează -- -- -- KeePassXC: Removed permissions -- KeePassXC: permisiuni eliminate -- -- -- Successfully removed permissions from %n entry(s). -- Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes pentru %n intrare(i). -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: nici o intrare cu permisiuni găsit! -- -- -- The active database does not contain an entry with permissions. -- Baza de date activă nu conține o intrare cu permisiuni. -- -- -- Move KeePassHTTP attributes to custom data -- Mutarea atributelor KeePassHTTP la date particularizate -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Chiar doriți să mutați toate datele de integrare a browserului moștenite la cel mai recent standard? --Acest lucru este necesar pentru a menține compatibilitatea cu plugin-ul browser-ului. -- -- -- Stored browser keys -- Tastele browserului stocate -- -- -- Remove selected key -- Ștergeți tasta selectată -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Creat -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Adauga protectie suplimentara... -- -- -- No password set -- Nici o parolă setată -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- Avertizare! Nu ați setat o parolă. Folosind o bază de date fără o parolă este puternic descurajat! -- --Sigur continuați fără parolă? -- -- -- Continue without password -- Continuați fără parolă -- -- -- No encryption key added -- Nu s-a adăugat cheia de criptare -- -- -- You must add at least one encryption key to secure your database! -- Trebuie să adăugați cel puțin o cheie de criptare pentru a securiza baza de date! -- -- -- Unknown error -- Eroare necunoscută -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Algoritm Criptare: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (implicit) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Funcție Derivare Cheie: -- -- -- Transform rounds: -- Runde de transformare: -- -- -- Memory Usage: -- Utilizare Memorie: -- -- -- Parallelism: -- Paralelism: -- -- -- Decryption Time: -- Timp de decriptare: -- -- -- ?? s -- ?? s -- -- -- Change -- Schimba -- -- -- Higher values offer more protection, but opening the database will take longer. -- Valorile mai mari oferă o protecție mai mare, dar deschiderea bazei de date va dura mai mult. -- -- -- Database format: -- Format bază de date: -- -- -- This is only important if you need to use your database with other programs. -- Acest lucru este important numai dacă trebuie să utilizați baza de date cu alte programe. -- -- -- KDBX 4.0 (recommended) -- KDBX 4,0 (recomandat) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- Neschimbat -- -- -- Number of rounds too high -- Key transformation rounds -- Numărul de runde prea mare -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Utilizați un număr foarte mare de runde de transformare cheie cu Argon2. -- --Dacă păstrați acest număr, deschiderea bazei de date poate dura ore sau zile (sau chiar mai mult)! -- -- -- Understood, keep number -- Înțeles, păstrați numărul -- -- -- Cancel -- Anulare -- -- -- Number of rounds too low -- Key transformation rounds -- Număr de runde prea mici -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Utilizați un număr foarte mic de runde de transformare cheie cu AES-KDF. -- --Dacă păstrați acest număr, baza de date poate fi prea ușor de spart! -- -- -- KDF unchanged -- KDF nemodificat -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Nu s-a reușit transformarea cheii cu noi parametri KDF; KDF neschimbat. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- filet (e)filet (e)thread(s) -- -- -- Change existing decryption time -- Modificați timpul de decriptare existent -- -- -- Decryption time in seconds -- Timpul de decriptare în secunde -- -- -- Database format -- Formatul bazei de date -- -- -- Encryption algorithm -- Algoritmul de criptare -- -- -- Key derivation function -- Funcția cheie de derivare -- -- -- Transform rounds -- Rundele de transformare -- -- -- Memory usage -- Folosirea memoriei -- -- -- Parallelism -- Paralelism -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Intrări expuse -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Meta Date Bază de Date -- -- -- Database name: -- Nume bază de date: -- -- -- Database description: -- Descriere bază de date: -- -- -- Default username: -- Nume utilizator implicit: -- -- -- History Settings -- Setări Istoric -- -- -- Max. history items: -- Max. elemente de istorie: -- -- -- Max. history size: -- Max. Dimensiune istorie: -- -- -- MiB -- Mib -- -- -- Use recycle bin -- Utilizare coș de gunoi -- -- -- Additional Database Settings -- Setări Adiționale Bază de Date -- -- -- Database name field -- Câmpul numelui bazei de date -- -- -- Database description field -- Câmpul descrierii bazei de date -- -- -- Default username field -- Câmpul utilizatorului implicit -- -- -- Maximum number of history items per entry -- Numărul maxim de articole istorice pe intrare -- -- -- Maximum size of history per entry -- Mărimea maximă a istoricului pe intrare -- -- -- Delete Recycle Bin -- Ștergeți coșul de reciclare -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Doriți să ștergeți coșul de reciclare curent și tot conținutul acesteia? --Această acțiune nu este reversibilă. -- -- -- (old) -- (vechi) -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Partajare -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Tip -- -- -- Path -- Cale -- -- -- Last Signer -- Ultimul semnatar -- -- -- Certificates -- Certificate -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Nume bază de date: -- -- -- Description: -- Descrierea : -- -- -- Database name field -- Câmpul numelui bazei de date -- -- -- Database description field -- Câmpul descrierii bazei de date -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Bază de date KeePass 2 -- -- -- All files -- Toate fișierele -- -- -- Open database -- Deschide baza de date -- -- -- CSV file -- Fișier CSV -- -- -- Merge database -- Îmbină baza de date -- -- -- Open KeePass 1 database -- Deschide bază de date KeePass 1 -- -- -- KeePass 1 database -- Bază de date KeePass 1 -- -- -- Export database to CSV file -- Exportă baza de date în fișier CSV -- -- -- Writing the CSV file failed. -- Scrierea în fișierul CSV a eșuat. -- -- -- Database creation error -- Eroare la crearea bazei de date -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Baza de date creată nu are cheie sau KDF, refuzând să o salveze. --Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori. -- -- -- Select CSV file -- Selectați fișierul CSV -- -- -- New Database -- Bază de date nouă -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [bază de date nouă] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [blocat] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [doar în citire] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Nu a reușit să deschidă %1. Fie nu există, fie nu este accesibil. -- -- -- Export database to HTML file -- Exportați baza de date în fișier HTML -- -- -- HTML file -- Fișier HTML -- -- -- Writing the HTML file failed. -- Scrierea fișierului HTML a eșuat. -- -- -- Export Confirmation -- Confirmare la export -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Ești pe cale să exporti baza de date într-un fișier necriptat. Acest lucru va lăsa parolele și informațiile dvs. sensibile vulnerabile! Esti sigur ca vrei sa continui? -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Căutare... -- -- -- Do you really want to delete the entry "%1" for good? -- Chiar doriți să ștergeți intrarea "%1" pentru totdeauna? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Chiar doriți să mutați intrarea "%1" în Coșul de reciclare? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?Chiar doriți să mutați %n intrare (i) în Coșul de reciclare? -- -- -- Execute command? -- Executați comanda? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Chiar vrei să execute următoarea comandă?<br><br>%1<br> -- -- -- Remember my choice -- Ține minte alegerea mea -- -- -- Do you really want to delete the group "%1" for good? -- Chiar doriți să ștergeți grupul "%1"? -- -- -- No current database. -- Nu există o baza de date curentă. -- -- -- No source database, nothing to do. -- Nicio bază de date sursă, nimic de făcut. -- -- -- Search Results (%1) -- Rezultatele căutării (%1) -- -- -- No Results -- Nu sunt rezultate -- -- -- File has changed -- Fișierul a fost modificat -- -- -- The database file has changed. Do you want to load the changes? -- Fișierul bazei de date a fost modificat. Doriți să încărcați ultimele modificări? -- -- -- Merge Request -- Cerere îmbinare -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Fișierul bazei de date s-a modificat și aveți modificări nesalvate. --Doriți să îmbinați modificările? -- -- -- Empty recycle bin? -- Goliți coșul de gunoi? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Sigur ștergeți definitiv totul din Coșul de reciclare? -- -- -- Do you really want to delete %n entry(s) for good? -- Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?Chiar doriți să ștergeți %n intrare(i) pentru totdeauna? -- -- -- Delete entry(s)? -- Ștergeți intrările?Ștergeți intrările?Șterge intrările? -- -- -- Move entry(s) to recycle bin? -- Mutați intrările în Coșul de reciclare?Mutați intrările în Coșul de reciclare?Mutați intrările în Coșul de reciclare? -- -- -- Lock Database? -- Blocarea bazei de date? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Editați o intrare. Renunțați la modificări și blocați oricum? -- -- -- "%1" was modified. --Save changes? -- "%1" a fost modificat. --Salvați modificările? -- -- -- Database was modified. --Save changes? -- Baza de date a fost modificată. --Salvați modificările? -- -- -- Save changes? -- Salvare modificări? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Imposibil de deschis noul fișier bază de date în timp ce încercați să autoreload. --Eroare: %1 -- -- -- Disable safe saves? -- Dezactivați salvarea sigură? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC nu a reușit să salveze baza de date de mai multe ori. Acest lucru este probabil cauzat de serviciile de sincronizare a fișierelor care dețin o blocare pe fișierul de salvare. --Dezactivați salvarea sigură și încercați din nou? -- -- -- Passwords -- Parole -- -- -- Save database as -- Salvează bază de date ca -- -- -- KeePass 2 Database -- Bază de date KeePass 2 -- -- -- Replace references to entry? -- Înlocuiți referințele la intrare? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Intrarea "% 1" are% 2 referințe (e). Suprascrieți referințele cu valori, ignorați această intrare sau ștergeți-o oricum?Intrarea "% 1" are% 2 referințe (e). Suprascrieți referințele cu valori, ignorați această intrare sau ștergeți-o oricum?Intrarea "%1" are %2 referințe. Suprascrieți referințele cu valori, ignorați această intrare sau ștergeți-o oricum? -- -- -- Delete group -- Ștergere grup -- -- -- Move group to recycle bin? -- Mutați grupul în Coșul de reciclare? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Chiar doriți să mutați grupul "%1" în Coșul de reciclare? -- -- -- Successfully merged the database files. -- A fuzionat cu succes fișierele bazei de date. -- -- -- Database was not modified by merge operation. -- Baza de date nu a fost modificată de operațiunea de îmbinare. -- -- -- Shared group... -- Grup partajat... -- -- -- Writing the database failed: %1 -- Scrierea bazei de date nu a reușit: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Această bază de date este deschisă în modul numai de citire. Autosave este dezactivat. -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- Intrare -- -- -- Advanced -- Avansat -- -- -- Icon -- Icon -- -- -- Auto-Type -- Auto tiparire -- -- -- Properties -- Proprietăți -- -- -- History -- Istoric -- -- -- SSH Agent -- Agent SSH -- -- -- n/a -- nu se aplică -- -- -- (encrypted) -- (criptat) -- -- -- Select private key -- Selectați cheia privată -- -- -- Entry history -- Istoric intrare -- -- -- Add entry -- Adaugă intrare -- -- -- Edit entry -- Editează intrare -- -- -- New attribute -- Atribut nou -- -- -- Are you sure you want to remove this attribute? -- Sunteți sigur că doriți să eliminați acest atribut? -- -- -- Tomorrow -- Mâine -- -- -- %n week(s) -- % n săptămână (i)% n săptămână (i)%n săptămână(i) -- -- -- %n month(s) -- % n lună (i)% n lună (i)%n lună(i) -- -- -- Entry updated successfully. -- Intrare actualizată cu succes. -- -- -- New attribute %1 -- Atribut nou %1 -- -- -- %n year(s) -- % n an (i)% n an (i)%n an(i) -- -- -- Confirm Removal -- Confirmare eliminare -- -- -- Browser Integration -- Integrare cu browserul -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Sigur doriți să eliminați această adresă URL? -- -- -- Reveal -- Dezvăluie -- -- -- Hide -- Ascunde -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Atribute adiționale -- -- -- Add -- Adaugă -- -- -- Remove -- Înlătură -- -- -- Edit Name -- Editează nume -- -- -- Protect -- Protejează -- -- -- Reveal -- Dezvăluie -- -- -- Attachments -- Atașamente -- -- -- Foreground Color: -- Culoare prim plan: -- -- -- Background Color: -- Culoare de fundal: -- -- -- Attribute selection -- Selectarea atributelor -- -- -- Attribute value -- Valoarea atributului -- -- -- Add a new attribute -- Adăugați un atribut nou -- -- -- Remove selected attribute -- Ștergeți atributul selectat -- -- -- Edit attribute name -- Editați numele atributului -- -- -- Toggle attribute protection -- Comutați protecția atributelor -- -- -- Show a protected attribute -- Afișați un atribut protejat -- -- -- Foreground color selection -- Selectarea culorilor prim-plan -- -- -- Background color selection -- Selectarea culorii de fundal -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Activare tiparire automat pentru această intrare -- -- -- Window Associations -- Asocieri de Ferestre -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Titlu fereastră: -- -- -- Use a specific sequence for this association: -- Utilizați o secvență specifică pentru această asociere: -- -- -- Custom Auto-Type sequence -- Secvență personalizată Auto-Type -- -- -- Open Auto-Type help webpage -- Deschideți pagina web de ajutor Auto-Type -- -- -- Existing window associations -- Asocieri de ferestre existente -- -- -- Add new window association -- Adăugați asociere fereastră nouă -- -- -- Remove selected window association -- Eliminați asocierea ferestrei selectată -- -- -- You can use an asterisk (*) to match everything -- Puteți utiliza un asterisc (*) pentru a se potrivi cu totul -- -- -- Set the window association title -- Setați titlul asocierii ferestrei -- -- -- You can use an asterisk to match everything -- Puteți utiliza un asterisc pentru a se potrivi cu totul -- -- -- Custom Auto-Type sequence for this window -- Secvență personalizată de tip automat pentru această fereastră -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Aceste setări afectează comportamentul intrării cu extensia browserului. -- -- -- General -- General -- -- -- Skip Auto-Submit for this entry -- Sariți la Trimitere automată pentru această intrare -- -- -- Hide this entry from the browser extension -- Ascundeți această intrare din extensia browserului -- -- -- Additional URL's -- Adresa URL suplimentară -- -- -- Add -- Adaugă -- -- -- Remove -- Înlătură -- -- -- Edit -- Editați -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Arată -- -- -- Restore -- Restaurează -- -- -- Delete -- Șterge -- -- -- Delete all -- Șterge toate -- -- -- Entry history selection -- Selectarea istoricului de intrare -- -- -- Show entry at selected history state -- Afișare intrare la starea istoricului selectat -- -- -- Restore entry to selected history state -- Restaurați intrarea la starea istoricului selectat -- -- -- Delete selected history state -- Ștergeți starea istoricului selectat -- -- -- Delete all history -- Ștergeți tot istoricul -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Parola: -- -- -- Title: -- Titlu: -- -- -- Presets -- Presetări -- -- -- Toggle the checkbox to reveal the notes section. -- Comutați caseta de selectare pentru a dezvălui secțiunea de note. -- -- -- Username: -- Nume utilizator: -- -- -- Url field -- Câmp url -- -- -- Download favicon for URL -- Descărcați favicon pentru URL -- -- -- Password field -- Câmp parola -- -- -- Toggle notes visible -- Notele de comutare sunt vizibile -- -- -- Expiration field -- Câmp de expirare -- -- -- Expiration Presets -- Presetări expirare -- -- -- Expiration presets -- Presetări expirare -- -- -- Notes field -- Câmpul de note -- -- -- Title field -- Câmpul titlu -- -- -- Username field -- Câmpul utilizatorului -- -- -- Toggle expiration -- Combate expirarea -- -- -- Notes: -- -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- De la -- -- -- Remove key from agent after -- Eliminați cheia de la agent după -- -- -- seconds -- secunde -- -- -- Fingerprint -- Amprentă -- -- -- Remove key from agent when database is closed/locked -- Eliminați cheia de la agent atunci când baza de date este închisă/blocată -- -- -- Public key -- Cheie publică -- -- -- Add key to agent when database is opened/unlocked -- Adăugare cheie la agent când baza de date este deschisă/dezblocată -- -- -- Comment -- Comentariu -- -- -- Decrypt -- Decriptează -- -- -- n/a -- nu se aplică -- -- -- Copy to clipboard -- Copiază în clipboard -- -- -- Private key -- Cheie privată -- -- -- External file -- Fișier extern -- -- -- Browse... -- Button for opening file dialog -- Răsfoiește... -- -- -- Attachment -- Atașament -- -- -- Add to agent -- Adaugă în agent -- -- -- Remove from agent -- Elimină din agent -- -- -- Require user confirmation when this key is used -- Solicitați confirmarea utilizatorului când se utilizează această cheie -- -- -- Remove key from agent after specified seconds -- Scoateți cheia din agent după câteva secunde specificate -- -- -- Browser for key file -- Browser pentru fișierul cheie -- -- -- External key file -- Fișier cheie externă -- -- -- Select attachment file -- Selectați fișierul de atașament -- -- -- -- EditGroupWidget -- -- Group -- Grup -- -- -- Icon -- Icon -- -- -- Properties -- Proprietăți -- -- -- Add group -- Adaugă grup -- -- -- Edit group -- Editează grup -- -- -- Enable -- Activează -- -- -- Disable -- Dezactivează -- -- -- Inherit from parent group (%1) -- Moștenire din grupul părinte (%1) -- -- -- Entry has unsaved changes -- Intrarea are modificări nesalvate -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tip: -- -- -- Path: -- Calea: -- -- -- Password: -- Parola: -- -- -- Inactive -- Inactiv -- -- -- KeeShare unsigned container -- KeeShare container nesemnat -- -- -- KeeShare signed container -- KeeShare container semnat -- -- -- Select import source -- Selectați sursă de import -- -- -- Select export target -- Selectați țintă de export -- -- -- Select import/export file -- Selectați fișier pentru import/export -- -- -- Clear -- Golește -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Synchronize -- Sincronizeaza -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Versiunea dvs. KeePassXC nu acceptă distribuirea acestui tip de container. --Extensiile acceptate sunt: %1. -- -- -- %1 is already being exported by this database. -- %1 este deja exportat de această bază de date. -- -- -- %1 is already being imported by this database. -- %1 este deja importat de această bază de date. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 este importat și exportat de diferite grupuri din această bază de date. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- În prezent, KeeShare este dezactivat. Puteți activa importul / exportul în setările aplicației. -- -- -- Database export is currently disabled by application settings. -- Exportul bazei de date este dezactivat în prezent de setările aplicației. -- -- -- Database import is currently disabled by application settings. -- Importul bazei de date este dezactivat în prezent de setările aplicației. -- -- -- Sharing mode field -- Câmpul modului de partajare -- -- -- Path to share file field -- Calea de partajare a câmpului de fișiere -- -- -- Password field -- Câmp parola -- -- -- Clear fields -- Câmpuri clare -- -- -- Browse for share file -- -- -- -- Browse... -- Răsfoiește... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Câmpul de nume -- -- -- Notes field -- Câmpul de note -- -- -- Toggle expiration -- Combate expirarea -- -- -- Auto-Type toggle for this and sub groups -- Comută automat pentru această opțiune și subgrupuri -- -- -- Expiration field -- Câmp de expirare -- -- -- Search toggle for this and sub groups -- Căutați pentru aceasta și subgrupuri -- -- -- Default auto-type sequence field -- Câmpul de secvență implicit de tip automat -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Adaugă icon personalizat -- -- -- Delete custom icon -- Șterge icon personalizat -- -- -- Download favicon -- Descarcă favicon -- -- -- Unable to fetch favicon. -- Nu pot descărca favicon. -- -- -- Images -- Imagini -- -- -- All files -- Toate fișierele -- -- -- Confirm Delete -- Confirmați ștergerea -- -- -- Select Image(s) -- Selectare imagine(i) -- -- -- Successfully loaded %1 of %n icon(s) -- Încărcat cu succes% 1 din% n pictogramă (e)Încărcat cu succes% 1 din% n pictogramă (e)Încărcat cu succes %1 din %n pictograme -- -- -- No icons were loaded -- Nu s-au încărcat pictograme -- -- -- %n icon(s) already exist in the database -- % n pictograma (ele) există deja în baza de date% n pictograma (ele) există deja în baza de date%n pictograma(e) există deja în baza de date -- -- -- The following icon(s) failed: -- Pictograma (ele) următoare nu a reușit:Pictograma (ele) următoare nu a reușit:Pictograma(e) următoare nu au reușit: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Această pictogramă este utilizată de% n intrare (e) și va fi înlocuită de pictograma implicită. Sigur ștergeți-l?Această pictogramă este utilizată de% n intrare (e) și va fi înlocuită de pictograma implicită. Sigur ștergeți-l?Această pictogramă este utilizată de %n intrare(i) și va fi înlocuită de pictograma implicită. Sigur ștergeți-l? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Puteți activa serviciul de pictogramă a site-ului web DuckDuckGo în Instrumente -> Setări -> Securitate -- -- -- Download favicon for URL -- Descărcați favicon pentru URL -- -- -- Apply selected icon to subgroups and entries -- Aplicați pictograma selectată pe subgrupuri și intrări -- -- -- Also apply to child groups -- De asemenea, aplicați pentru grupuri de copii -- -- -- Also apply to child entries -- De asemenea, aplicați pentru înregistrările copilului -- -- -- Also apply to all children -- De asemenea, aplicați tuturor copiilor -- -- -- Existing icon selected. -- Pictograma existentă selectată. -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Creat: -- -- -- Modified: -- Modificat: -- -- -- Accessed: -- Accesat: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Modul de date -- -- -- Remove -- Înlătură -- -- -- Delete plugin data? -- Ștergeți datele modulului? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Chiar doriți să ștergeți datele selectate modulului? --Acest lucru poate provoca moduluri afectate la defecțiune. -- -- -- Key -- Cheie -- -- -- Value -- Valoare -- -- -- Datetime created -- Datetime creat -- -- -- Datetime modified -- Datetime modificat -- -- -- Datetime accessed -- Data datei accesată -- -- -- Unique ID -- ID unic -- -- -- Plugin data -- Date despre pluginuri -- -- -- Remove selected plugin data -- Eliminați datele pluginului selectate -- -- -- -- Entry -- -- %1 - Clone -- %1 - Clona -- -- -- -- EntryAttachmentsModel -- -- Name -- Nume -- -- -- Size -- Dimensiunea -- -- -- -- EntryAttachmentsWidget -- -- Form -- De la -- -- -- Add -- Adaugă -- -- -- Remove -- Înlătură -- -- -- Open -- Deschide -- -- -- Save -- Salvează -- -- -- Select files -- Selectați fișierele -- -- -- Are you sure you want to remove %n attachment(s)? -- Sigur eliminați% n atașamente?Sigur eliminați% n atașamente?Sigur eliminați %n atașamente? -- -- -- Save attachments -- Salvați atașamentele -- -- -- Unable to create directory: --%1 -- Imposibil de creat dosar: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Sigur suprascrieți fișierul existent "%1" cu atașamentul? -- -- -- Confirm overwrite -- Confirmați suprascrierea -- -- -- Unable to save attachments: --%1 -- Imposibil de salvat atașamentele: --%1 -- -- -- Unable to open attachment: --%1 -- Imposibil de deschis atașament: --%1 -- -- -- Unable to open attachments: --%1 -- Imposibil de deschis atașări: --%1 -- -- -- Confirm remove -- Confirmare eliminare -- -- -- Unable to open file(s): --%1 -- Imposibil de deschis fișierul (e): --% 1Imposibil de deschis fișierul (e): --% 1Imposibil de deschis fișierul(e): --%1 -- -- -- Attachments -- Atașamente -- -- -- Add new attachment -- Adăugați un nou atașament -- -- -- Remove selected attachment -- Eliminați atașamentul selectat -- -- -- Open selected attachment -- Deschideți atașamentul selectat -- -- -- Save selected attachment to disk -- Salvați atașamentul selectat pe disc -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Nume -- -- -- -- EntryHistoryModel -- -- Last modified -- Ultima modificare -- -- -- Title -- Titlu -- -- -- Username -- Nume utilizator -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grup -- -- -- Title -- Titlu -- -- -- Username -- Nume utilizator -- -- -- URL -- URL -- -- -- Never -- Niciodată -- -- -- Password -- Parolă -- -- -- Notes -- Notițe -- -- -- Expires -- Expiră -- -- -- Created -- Creat -- -- -- Modified -- Modificat -- -- -- Accessed -- Accesate -- -- -- Attachments -- Atașamente -- -- -- Size -- Dimensiunea -- -- -- Group name -- Numele grupului -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- Închide -- -- -- General -- General -- -- -- Username -- Nume utilizator -- -- -- Password -- Parola -- -- -- Expiration -- Expirare -- -- -- URL -- URL -- -- -- Attributes -- Atribute -- -- -- Attachments -- Atașamente -- -- -- Notes -- Notițe -- -- -- Autotype -- autotipie -- -- -- Window -- Fereastră -- -- -- Sequence -- Secvență -- -- -- Searching -- Căutare -- -- -- Search -- Caută -- -- -- Clear -- Golește -- -- -- Never -- Niciodată -- -- -- [PROTECTED] -- [PROTEJAT] -- -- -- Enabled -- Activat -- -- -- Disabled -- Dezactivat -- -- -- Share -- Împărtăşire -- -- -- Display current TOTP value -- Afișează valoarea curentă TOTP -- -- -- Advanced -- Avansat -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- URL invalid -- -- -- -- EntryView -- -- Fit to window -- Potrivire la fereastră -- -- -- Fit to contents -- Potrivire la conținut -- -- -- Reset to defaults -- Resetare la valorile implicite -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- Are TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Intrarea „%1” din baza de date „%2” a fost utilizată de %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Nume de fișier -- -- -- Group -- Grup -- -- -- Manage -- Administra -- -- -- Unlock to show -- Deblocați să afișați -- -- -- None -- Nici unul -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplicaţie -- -- -- Manage -- Administra -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Necunoscut -- -- -- Unknown -- Unknown executable path -- Necunoscut -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [gol] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Descarcă Favicons -- -- -- Cancel -- Anulare -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Aveți probleme la descărcarea pictogramelor? --Puteți activa serviciul pictogramelor site-ului web DuckDuckGo în secțiunea de securitate a setărilor aplicației. -- -- -- Close -- Închide -- -- -- URL -- URL -- -- -- Status -- Stare -- -- -- Please wait, processing entry list... -- Vă rugăm să așteptați, prelucrarea listei de intrare ... -- -- -- Downloading... -- Descărcarea... -- -- -- Ok -- Ok -- -- -- Already Exists -- Deja exista -- -- -- Download Failed -- Descarcare esuata -- -- -- Downloading favicons (%1/%2)... -- Descărcarea de preferințe (%1/%2) ... -- -- -- -- KMessageWidget -- -- &Close -- &Închide -- -- -- Close message -- Închide mesaj -- -- -- -- Kdbx3Reader -- -- missing database headers -- Lipsă de anteturi de baze de date -- -- -- Header doesn't match hash -- Antetul nu se potrivește cu hash -- -- -- Invalid header id size -- Dimensiune ID antet nevalidă -- -- -- Invalid header field length -- Lungime câmp antet nevalid -- -- -- Invalid header data length -- Lungime de date antet nevalidă -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Au fost furnizate datele de acreditare nevalide, încercați din nou. --Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- Lipsă de anteturi de baze de date -- -- -- Invalid header checksum size -- Dimensiune de control antet nevalidă -- -- -- Header SHA256 mismatch -- Antet SHA256 nepotrivire -- -- -- Unknown cipher -- Cifru necunoscut -- -- -- Invalid header id size -- Dimensiune ID antet nevalidă -- -- -- Invalid header field length -- Lungime câmp antet nevalid -- -- -- Invalid header data length -- Lungime de date antet nevalidă -- -- -- Failed to open buffer for KDF parameters in header -- Nu s-a reușit deschiderea tampon pentru parametrii KDF în antet -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Funcția de derivare a cheii neacceptate (KDF) sau parametrii nevaliți -- -- -- Legacy header fields found in KDBX4 file. -- Câmpuri antet moștenite găsite în fișierul KDBX4. -- -- -- Invalid inner header id size -- Dimensiune ID antet interior nevalidă -- -- -- Invalid inner header field length -- Lungime câmp antet interior nevalid -- -- -- Invalid inner header binary size -- Dimensiune binar antet interior nevalid -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Versiune de hartă variantă neacceptată. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Lungime nevalidă a numelui intrării hărții de variantă -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Nume de intrare date hartă variantă nevalidă -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Lungime nevalidă a valorii intrării hărții de variantă -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Date de valoare de intrare hartă variantă nevalidă -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Hartă variantă nevalidă lungimea valorii intrării bool -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Hartă variantă nevalidă Int32 lungime valoare intrare -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Hartă variantă nevalidă UInt32 lungime valoare intrare -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Hartă variantă nevalidă Int64 lungime valoare intrare -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Hartă variantă nevalidă UInt64 lungime valoare intrare -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Tip de intrare hartă variantă nevalidă -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Dimensiune tip câmp hartă variantă nevalidă -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Au fost furnizate datele de acreditare nevalide, încercați din nou. --Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. -- -- -- (HMAC mismatch) -- (Nepotrivire HMAC) -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Algoritm de cifrare simetrică nevalid. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Cifrul simetric nevalid dimensiune IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Nu s-a reușit serializarea hărții variantei parametrilor KDF -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- Cifru neacceptat -- -- -- Invalid compression flags length -- Lungime steaguri de compresie nevalidă -- -- -- Unsupported compression algorithm -- Algoritm de compresie neacceptat -- -- -- Invalid master seed size -- Dimensiune de semințe coordonatoare nevalidă -- -- -- Invalid transform seed size -- Dimensiune de semințe de transformare nevalidă -- -- -- Invalid transform rounds size -- Dimensiune incorectă a rundelor de transformare -- -- -- Invalid start bytes size -- Dimensiune nevalidă a octeților de pornire -- -- -- Invalid random stream id size -- Dimensiune incorectă a fluxului de flux aleator -- -- -- Invalid inner random stream cipher -- Cifrul intern nevalid al fluxului aleator -- -- -- Not a KeePass database. -- Nu este o bază de date KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Fișierul selectat este o bază de date vechi KeePass 1 (.KDB). -- --Tu poți importa prin click pe bază de date > 'importarea bază de date KeePass 1... '. --Aceasta este o migrare într-un singur sens. Nu veți putea deschide baza de date importată cu vechea versiune KeePassX 0,4. -- -- -- Unsupported KeePass 2 database version. -- Versiunea bazei de date KeePass 2 neacceptată. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- lungime nevalidă a UUID criptat: %1 (lungime = %2) -- -- -- Unable to parse UUID: %1 -- Imposibil de analizat UUID: %1 -- -- -- Failed to read database file. -- Imposibil de citit fișierul bazei de date. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Eroare de analizare XML: %1 -- -- -- No root group -- Nici un grup rădăcină -- -- -- Missing icon uuid or data -- Lipsește pictograma UUID sau date -- -- -- Missing custom data key or value -- Lipsă de cheie sau valoare de date particularizate -- -- -- Multiple group elements -- Mai multe elemente de grup -- -- -- Null group uuid -- Grup nul UUID -- -- -- Invalid group icon number -- Numărul pictogramei de grup nevalid -- -- -- Invalid EnableAutoType value -- Valoare nevalidă pentru permite AutoTiparire -- -- -- Invalid EnableSearching value -- Valoare nevalidă pentru Permite cautare -- -- -- No group uuid found -- Nici un grup UUID găsit -- -- -- Null DeleteObject uuid -- UUID Null pentru Sterge Obiect -- -- -- Missing DeletedObject uuid or time -- Lipsă UUID sau timp pentru Obiect Sters -- -- -- Null entry uuid -- Intrare nulă UUID -- -- -- Invalid entry icon number -- Număr pictogramă de intrare nevalidă -- -- -- History element in history entry -- Element istoric în intrarea în istorie -- -- -- No entry uuid found -- Nici o intrare UUID găsit -- -- -- History element with different uuid -- Element istoric cu diferite UUID -- -- -- Duplicate custom attribute found -- Atribut personalizat duplicat găsit -- -- -- Entry string key or value missing -- Lipsă de cheie șir de intrare sau valoare -- -- -- Entry binary key or value missing -- Lipsă cheiei binare sau valorii intrare -- -- -- Auto-type association window or sequence missing -- Lipsă de fereastra de asociere de tiparire auto sau secvența -- -- -- Invalid bool value -- Valoare bool nevalidă -- -- -- Invalid date time value -- Valoare dată nevalidă -- -- -- Invalid color value -- Valoare de culoare nevalidă -- -- -- Invalid color rgb part -- Parte RGB de culoare nevalidă -- -- -- Invalid number value -- Valoare numerică nevalidă -- -- -- Invalid uuid value -- Valoare UUID nevalidă -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Imposibil de a decomprima binar -- -- -- XML error: --%1 --Line %2, column %3 -- Eroare XML: --%1 --Linia %2, coloana %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Fișier prea mare pentru a fi cheie privată -- -- -- Failed to open private key -- Deschiderea cheii private a eșuat -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Nu pot deschide baza de date. -- -- -- Import KeePass1 Database -- Importați baza de date KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Fișierul cheie nu poate fi citit. -- -- -- Not a KeePass database. -- Nu este o bază de date KeePass. -- -- -- Unsupported encryption algorithm. -- Algoritm criptare nesuportat. -- -- -- Unsupported KeePass database version. -- Versiune bază de date KeePass nesuportată. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Imposibil de citit criptarea IV -- -- -- Invalid number of groups -- Număr nevalid de grupuri -- -- -- Invalid number of entries -- Număr nevalid de intrări -- -- -- Invalid content hash size -- Dimensiune hash conținut nevalidă -- -- -- Invalid transform seed size -- Dimensiune de semințe de transformare nevalidă -- -- -- Invalid number of transform rounds -- Număr nevalid de runde de transformare -- -- -- Unable to construct group tree -- Imposibil de construit arborele de grup -- -- -- Root -- Rădăcină -- -- -- Key transformation failed -- Transformarea cheii nu a reușit -- -- -- Invalid group field type number -- Număr de câmp de grupă nevalid -- -- -- Invalid group field size -- Dimensiune câmp de grup nevalid -- -- -- Read group field data doesn't match size -- Citirea datelor câmpului de grup nu corespunde dimensiunii -- -- -- Incorrect group id field size -- Dimensiune incorecta a câmpului ID grup -- -- -- Incorrect group creation time field size -- Dimensiune incorect a câmpului de timp creare grup -- -- -- Incorrect group modification time field size -- Dimensiunea incorectă a câmpului timpul modificarii grupei -- -- -- Incorrect group access time field size -- Dimensiune incorecta câmpului timp de acces a grupului -- -- -- Incorrect group expiry time field size -- Dimensiunea incorecta a câmpului timp de expirare grup -- -- -- Incorrect group icon field size -- Dimensiune incorecta a câmpului pictogramă grupei -- -- -- Incorrect group level field size -- Dimensiune incorecta a câmpului nivelul grupei -- -- -- Invalid group field type -- Tip nevalid a câmpului grup -- -- -- Missing group id or level -- Lipsă ID-ul grupului sau nivelul -- -- -- Missing entry field type number -- Lipsă numărului tipului câmpului de intrare -- -- -- Invalid entry field size -- Dimensiune nevalidă câmp intrare -- -- -- Read entry field data doesn't match size -- Citirea datelor câmpului de intrare nu corespunde dimensiunii -- -- -- Invalid entry uuid field size -- Dimensiune nevalidă a câmpului UUID intrare -- -- -- Invalid entry group id field size -- Dimensiune nevalida a câmpului ID grup de intrare -- -- -- Invalid entry icon field size -- Dimensiune nevalidă a câmpului pictogramă intrare -- -- -- Invalid entry creation time field size -- Dimensiune nevalidă a câmpului marcă de timp de creare intrare -- -- -- Invalid entry modification time field size -- Dimensiune nevalidă a câmpului marcă de timp modificarii intrare -- -- -- Invalid entry expiry time field size -- Dimensiune nevalidă a câmpului timp expirare intrare -- -- -- Invalid entry field type -- Tipul câmpului de intrare nevalid -- -- -- unable to seek to content position -- imposibilitatea de a căuta la poziția de conținut -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Au fost furnizate datele de acreditare nevalide, încercați din nou. --Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- Referință de partajare nevalidă -- -- -- Inactive share %1 -- Ponderea inactivă %1 -- -- -- Imported from %1 -- Importat din %1 -- -- -- Exported to %1 -- Exportat la %1 -- -- -- Synchronized with %1 -- Sincronizat cu %1 -- -- -- Import is disabled in settings -- Importul este dezactivat în setări -- -- -- Export is disabled in settings -- Exportul este dezactivat în setări -- -- -- Inactive share -- Ponderea inactivă -- -- -- Imported from -- Importat din -- -- -- Exported to -- Exportat în -- -- -- Synchronized with -- Sincronizat cu -- -- -- -- KeyComponentWidget -- -- Key Component -- Componenta cheie -- -- -- Key Component Description -- Descriere componentă cheie -- -- -- Cancel -- Anulare -- -- -- Key Component set, click to change or remove -- Set de componente cheie, faceți clic pentru a modifica sau elimina -- -- -- Add %1 -- Add a key component -- Adăugare %1 -- -- -- Change %1 -- Change a key component -- Modificare %1 -- -- -- Remove %1 -- Remove a key component -- Eliminare %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 set, faceți clic pentru a modifica sau elimina -- -- -- -- KeyFileEditWidget -- -- Generate -- Generează -- -- -- Key File -- Fișier cheie -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Aveți posibilitatea să adăugați un fișier cheie care conține octeți aleatoare pentru securitate suplimentară.</p><p>Trebuie să-l păstrați secret și niciodată nu-l pierde sau vei fi blocat!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Eroare la încărcarea fișierului cheie '%1' --Mesaj: %2 -- -- -- Key files -- Fișiere cheie -- -- -- All files -- Toate fișierele -- -- -- Create Key File... -- Creare fișier cheie... -- -- -- Error creating key file -- Eroare la crearea fișierului cheie -- -- -- Unable to create key file: %1 -- Imposibil de creat fișierul cheie: %1 -- -- -- Select a key file -- Selectați un fișier cheie -- -- -- Key file selection -- Selectarea fișierelor cheie -- -- -- Browse for key file -- Căutați fișierul cheie -- -- -- Browse... -- Răsfoiește... -- -- -- Generate a new key file -- Generați un nou fișier cheie -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Notă: Nu folosiți un fișier care s-ar putea schimba, deoarece acest lucru vă va împiedica să deblocați baza de date! -- -- -- Invalid Key File -- Fișier cheie nevalid -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Nu puteți utiliza baza de date curentă ca propriul fișier cheie. Vă rugăm să alegeți un alt fișier sau să generați un nou fișier cheie. -- -- -- Suspicious Key File -- Fișier cu cheie suspectă -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Fișierul cheie ales arată ca un fișier de bază de date cu parolă. Un fișier cheie trebuie să fie un fișier static care nu se schimbă niciodată sau veți pierde accesul la baza de date pentru totdeauna. --Sigur doriți să continuați cu acest fișier? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Bază de date -- -- -- &Help -- &Ajutor -- -- -- &Groups -- &Grupuri -- -- -- &Tools -- &Unelte -- -- -- &Quit -- &Ieșire -- -- -- &About -- &Despre -- -- -- Database settings -- Setări bază de date -- -- -- Copy username to clipboard -- Copiere nume utilizator în Clipboard -- -- -- Copy password to clipboard -- Copiere parolă în Clipboard -- -- -- &Settings -- &Setări -- -- -- &Title -- &Titlu -- -- -- Copy title to clipboard -- Copiere titlu în Clipboard -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Copiere URL în Clipboard -- -- -- &Notes -- &Notițe -- -- -- Copy notes to clipboard -- Copierea notelor în Clipboard -- -- -- Copy &TOTP -- Copiază &TOTP -- -- -- E&mpty recycle bin -- coș de r&eciclare gol -- -- -- Clear history -- Golește istoric -- -- -- Access error for config file %1 -- Eroare de acces pentru fisier de configurare %1 -- -- -- Settings -- Setări -- -- -- Toggle window -- Comutare fereastră -- -- -- Quit KeePassXC -- Părăsiți KeePassXC -- -- -- Please touch the button on your YubiKey! -- Vă rugăm să atingeți butonul de pe YubiKey dvs.! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- Avertisment: utilizați un build instabil de KeePassXC! --Există un risc ridicat de corupție, menține o copie de rezervă a bazelor de date. --Această versiune nu este destinată utilizării producției. -- -- -- &Donate -- &Donează -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- Avertisment: versiunea dumneavoastră QT poate provoca KeePassXC să se blocheze cu o tastatură vizuală! --Vă recomandăm să utilizați AppImage disponibile pe pagina noastră de descărcări. -- -- -- &Import -- &Import -- -- -- Create a new database -- Crearea unei baze de date noi -- -- -- Merge from another KDBX database -- Îmbinare dintr-o altă bază de date KDBX -- -- -- Add a new entry -- Adăugarea unei noi intrări -- -- -- View or edit entry -- Vizualizarea sau editarea intrării -- -- -- Add a new group -- Adăugarea unui grup nou -- -- -- Perform &Auto-Type -- Efectuați și &Auto-Tiparire -- -- -- Open &URL -- Deschide &URL-ul -- -- -- Import a KeePass 1 database -- Importul unei baze de date KeePass 1 -- -- -- Import a CSV file -- Importul unui fișier CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- Notă: utilizați o versiune pre-release de KeePassXC! --Asteptati-va unele bug-uri și probleme minore, această versiune nu este destinat pentru utilizarea producției. -- -- -- Check for updates on startup? -- Căutați actualizări la pornire? -- -- -- Would you like KeePassXC to check for updates on startup? -- Doriți ca KeePassXC să caute actualizări la pornire? -- -- -- You can always check for updates manually from the application menu. -- Puteți căuta întotdeauna actualizări manual din meniul aplicației. -- -- -- &Export -- &Export -- -- -- Sort &A-Z -- Sortare &A-Z -- -- -- Sort &Z-A -- Sortare &Z-A -- -- -- &Password Generator -- Generator de &parolă -- -- -- Import a 1Password Vault -- Import 1Password Vault -- -- -- &Getting Started -- Noțiuni de bază -- -- -- &User Guide -- Manualul &utilizatorului -- -- -- &Keyboard Shortcuts -- comenzi rapide de la tastatură -- -- -- &Recent Databases -- &Baze de date recente -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- Deschide baza de date -- -- -- &Save Database -- &Salvează baza de date -- -- -- &Close Database -- &Închide baza de date -- -- -- &New Database… -- &Bază de date nouă... -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- Setări bază de &date... -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- Fișier CSV... -- -- -- Show TOTP -- -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Ascundere nume de utilizator -- -- -- Hide Passwords -- Ascundere parole -- -- -- -- ManageDatabase -- -- Database settings -- Setări bază de date -- -- -- Edit database settings -- Editați setările bazei de date -- -- -- Unlock database -- Deblocare bază de date -- -- -- Unlock database to show more information -- Deblocați baza de date pentru a afișa mai multe informații -- -- -- Lock database -- Blocare bază de date -- -- -- -- ManageSession -- -- Disconnect -- Deconecta -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Creare lipsă %1 [%2] -- -- -- Relocating %1 [%2] -- Relocalizarea %1 [%2] -- -- -- Overwriting %1 [%2] -- Suprascrierea %1 [%2] -- -- -- older entry merged from database "%1" -- intrare mai veche îmbinată din baza de date "%1" -- -- -- Adding backup for older target %1 [%2] -- Adăugarea copiei de rezervă pentru ținta mai veche %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Adăugarea copiei de rezervă pentru sursa mai veche %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Reaplicarea intrării țintă mai vechi în partea de sus a sursei mai noi %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Reaplicarea intrării sursei mai vechi în partea de sus a țintei mai noi %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Sincronizarea din sursa mai nouă %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Sincronizarea din sursa mai veche %1 [%2] -- -- -- Deleting child %1 [%2] -- Ștergerea copilului %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Ștergerea intrarii orfane %1 [%2] -- -- -- Changed deleted objects -- Obiecte șterse modificate -- -- -- Adding missing icon %1 -- Adăugarea pictogramei lipsă %1 -- -- -- Removed custom data %1 [%2] -- Șters date personalizate %1 [%2] -- -- -- Adding custom data %1 [%2] -- Adăugarea de date personalizate %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Creați o nouă bază de date KeePassXC... -- -- -- Root -- Root group -- Rădăcină -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Pagină de start -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date. -- -- -- Advanced Settings -- Setări avansate -- -- -- Simple Settings -- Setări simple -- -- -- Encryption Settings -- Setări criptare -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Setări criptare -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Informații generale despre baza de date -- -- -- Please fill in the display name and an optional description for your new database: -- Vă rugăm să completați numele afișat și o descriere opțională pentru noua bază de date: -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- OpData01 nevalid, nu conține antet -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Nu a putut citi toate octeții IV, a dorit 16, dar a primit %1 -- -- -- Unable to init cipher for opdata01: %1 -- Imposibil de inițiat cifrarea pentru opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Imposibil de citit toți octeții de semnătură HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 defectuos din cauza unei HMAC eșuate -- -- -- Unable to process clearText in place -- Imposibil de procesat clearText în loc -- -- -- Expected %1 bytes of clear-text, found %2 -- Se așteaptă %1 octeți de text clar, %2 găsit -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Citirea bazei de date nu a produs o instanță --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Directory .opvault trebuie să existe -- -- -- Directory .opvault must be readable -- Directory .opvault trebuie să fie lizibil -- -- -- Directory .opvault/default must exist -- Directory .opvault / default trebuie să existe -- -- -- Directory .opvault/default must be readable -- Directorul .opvault / default trebuie să fie lizibil -- -- -- Unable to decode masterKey: %1 -- Imposibil de decodat masterKey: %1 -- -- -- Unable to derive master key: %1 -- Nu se poate derula cheia principală: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Fișier cheie nevalid, așteptând o cheie OpenSSH -- -- -- PEM boundary mismatch -- Nepotrivire de graniță PEM -- -- -- Base64 decoding failed -- Decodificare base64 nu a reușit -- -- -- Key file way too small. -- Cheie dosar e prea mica. -- -- -- Key file magic header id invalid -- Cheie dosar Magic antet ID nevalid -- -- -- Found zero keys -- Găsit zero chei -- -- -- Failed to read public key. -- Citirea cheii publice a eșuat. -- -- -- Corrupted key file, reading private key failed -- Fișier cheie deteriorat, citirea cheii private nu a reușit -- -- -- No private key payload to decrypt -- Nici o sarcină cheie privată pentru a decripta -- -- -- Trying to run KDF without cipher -- Încercarea de a rula KDF fără cifrul -- -- -- Passphrase is required to decrypt this key -- Passphrase este necesar pentru a decripta această tastă -- -- -- Key derivation failed, key file corrupted? -- Derivare cheie nu a reușit, fișierul cheie corupt? -- -- -- Decryption failed, wrong passphrase? -- Decriptarea nu a reușit, fraza de acces greșită? -- -- -- Unexpected EOF while reading public key -- EOF neașteptate în timpul citirii cheii publice -- -- -- Unexpected EOF while reading private key -- EOF neașteptate în timp ce citiți cheia privată -- -- -- Can't write public key as it is empty -- Nu se poate scrie cheie publică, deoarece este goală -- -- -- Unexpected EOF when writing public key -- EOF neașteptate atunci când scrierea cheie publică -- -- -- Can't write private key as it is empty -- Nu se poate scrie cheie privată, deoarece este goală -- -- -- Unexpected EOF when writing private key -- EOF neașteptate atunci când scrierea cheie privată -- -- -- Unsupported key type: %1 -- Tip de cheie neacceptat: %1 -- -- -- Unknown cipher: %1 -- Cifru necunoscut: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cifrul IV este prea scurt pentru MD5 KDF -- -- -- Unknown KDF: %1 -- KDF necunoscut: %1 -- -- -- Unknown key type: %1 -- Tip de cheie necunoscut: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- parolele nu se potrivesc -- -- -- Passwords match so far -- Parolele se potrivesc până acum -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Introdu parola: -- -- -- Confirm password: -- Confirmați parola: -- -- -- Password -- Parola -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>O parolă este metoda primară pentru securizarea bazei de date.</p><p>Parolele bune sunt lungi și unice. KeePassXC poate genera unul pentru tine.</p> -- -- -- Passwords do not match. -- Parolele nu se potrivesc. -- -- -- Password field -- Câmp parola -- -- -- Repeat password field -- Repetați câmpul de parolă -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- putere -- -- -- entropy -- entropie -- -- -- Password -- Parolă -- -- -- Character Types -- Tipuri de caractere -- -- -- Numbers -- Numere -- -- -- Extended ASCII -- Extins ASCII -- -- -- Exclude look-alike characters -- Exclude caractere asemănătoare -- -- -- Pick characters from every group -- Alegeți caractere din fiecare grup -- -- -- &Length: -- &Lungime: -- -- -- Passphrase -- Frază parola -- -- -- Wordlist: -- lista cuvintelor -- -- -- Word Separator: -- Separator cuvinte: -- -- -- Close -- Închide -- -- -- Entropy: %1 bit -- Entropie: %1 bit -- -- -- Password Quality: %1 -- Calitate parolă: %1 -- -- -- Poor -- Password quality -- Inacceptabil -- -- -- Weak -- Password quality -- Slab -- -- -- Good -- Password quality -- Bun -- -- -- Excellent -- Password quality -- Excelent -- -- -- Switch to advanced mode -- Comutarea la modul avansat -- -- -- Advanced -- Avansat -- -- -- Braces -- Bretele -- -- -- Punctuation -- Punctuaţie -- -- -- Quotes -- Citate -- -- -- Logograms -- Logograme -- -- -- Character set to exclude from generated password -- Set de caractere pentru a exclude din parola generată -- -- -- Do not include: -- Nu includeți: -- -- -- Add non-hex letters to "do not include" list -- Adăugați litere non-hex la "nu includ" lista -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Caractere excluse: "0", "1", "l", "I", "O", "|", "." -- -- -- Generated password -- Parol generat -- -- -- Upper-case letters -- Litere mari -- -- -- Lower-case letters -- Litere mici -- -- -- Special characters -- Personaje speciale -- -- -- Math Symbols -- Simboluri matematice -- -- -- Dashes and Slashes -- Dashes și Slashes -- -- -- Excluded characters -- Personaje excluse -- -- -- Hex Passwords -- Parole hex -- -- -- Password length -- Lungimea parolei -- -- -- Word Case: -- Registrul cuvântelor -- -- -- Regenerate password -- Regenerați parola -- -- -- Copy password -- Copiază parola -- -- -- lower case -- minuscule -- -- -- UPPER CASE -- MAJUSCULE -- -- -- Title Case -- registrul antetului -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- Număr cuvinte: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- Caractere speciale -- -- -- -- QApplication -- -- KeeShare -- De la KeeShare -- -- -- Statistics -- Statistici -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- Suprascrie -- -- -- Delete -- Șterge -- -- -- Move -- Muta -- -- -- Empty -- Gol -- -- -- Remove -- Înlătură -- -- -- Skip -- Sări peste -- -- -- Disable -- Dezactivează -- -- -- Merge -- Îmbinare -- -- -- Continue -- Continua -- -- -- -- QObject -- -- Database not opened -- Bază de date nedeschisă -- -- -- Database hash not available -- Hash bază de date nu este disponibilă -- -- -- Client public key not received -- Cheie publică client neprimită -- -- -- Cannot decrypt message -- Nu se poate decripta mesajul -- -- -- Action cancelled or denied -- Acțiune anulată sau refuzată -- -- -- KeePassXC association failed, try again -- Asociația KeePassXC nu a reușit, încercați din nou -- -- -- Encryption key is not recognized -- Cheia de criptare nu este recunoscută -- -- -- Incorrect action -- Acțiune incorectă -- -- -- Empty message received -- Mesaj gol primit -- -- -- No URL provided -- Niciun URL furnizat -- -- -- No logins found -- Nu s-au găsit conectări -- -- -- Unknown error -- Eroare necunoscută -- -- -- Add a new entry to a database. -- Adaugă o intrare nouă în baza de date. -- -- -- Path of the database. -- Calea către baza de date -- -- -- Key file of the database. -- Fișier cheie al bazei de date. -- -- -- path -- cale -- -- -- Username for the entry. -- Nume de utilizator pentru intrare. -- -- -- username -- nume utilizator -- -- -- URL for the entry. -- URL pentru intrare. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Se solicită parola intrării. -- -- -- Generate a password for the entry. -- Generează o parolă pentru intrare. -- -- -- length -- lungime -- -- -- Path of the entry to add. -- Calea intrării de adăugat. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Calea intrării în clip. -- -- -- Timeout in seconds before clearing the clipboard. -- Expirare în secunde înainte de Golirea Clipboard. -- -- -- Edit an entry. -- Editați o intrare. -- -- -- Title for the entry. -- Titlu pentru intrare. -- -- -- title -- titlu -- -- -- Path of the entry to edit. -- Calea intrării de editat. -- -- -- Estimate the entropy of a password. -- Estimați entropia a unei parole. -- -- -- Password for which to estimate the entropy. -- Parola pentru care să estimezi entropia. -- -- -- Perform advanced analysis on the password. -- Efectuați o analiză avansată a parolei. -- -- -- -- --Available commands: -- -- -- --Comenzi disponibile: -- -- -- -- Name of the command to execute. -- Numele comenzii de executat. -- -- -- List database entries. -- Listare intrări din bază de date. -- -- -- Path of the group to list. Default is / -- Calea grupului la listă. Implicit este/ -- -- -- Find entries quickly. -- Găsiți rapid intrările. -- -- -- Search term. -- Termen de căutare. -- -- -- Merge two databases. -- Îmbina doua baze de date -- -- -- Path of the database to merge from. -- Calea bazei de date din care să fuzioneze. -- -- -- Use the same credentials for both database files. -- Utilizați aceleași acreditări pentru ambele fișiere de baze de date. -- -- -- Key file of the database to merge from. -- Fișier cheie al bazei de date pentru a fuziona din. -- -- -- Show an entry's information. -- Afișați informațiile unei intrări. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Numele atributelor de arătat. Această opțiune poate fi specificată de mai multe ori, fiecare atribut fiind afișat într-o singură linie în ordinea dată. Dacă nu sunt specificate atribute, se acordă un rezumat al atributelor implicite. -- -- -- attribute -- atribut -- -- -- Name of the entry to show. -- Numele intrării de arătat. -- -- -- NULL device -- Dispozitiv NULL -- -- -- error reading from device -- citirea erorilor de pe dispozitiv -- -- -- malformed string -- șir incorect -- -- -- missing closing quote -- lipsă citat de închidere -- -- -- Group -- Grup -- -- -- Title -- Titlu -- -- -- Username -- Nume utilizator -- -- -- Password -- Parolă -- -- -- Notes -- Notițe -- -- -- Last Modified -- Ultima modificare -- -- -- Created -- Creat -- -- -- Browser Integration -- Integrare cu browserul -- -- -- SSH Agent -- Agent SSH -- -- -- Generate a new random diceware passphrase. -- Generează o nouă frază de acces diceware aleatoare. -- -- -- Word count for the diceware passphrase. -- Word conta pentru fraza de acces diceware. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Lista de cuvinte pentru generatorul de diceware. --[Default: EFF engleză] -- -- -- Generate a new random password. -- Generează o nouă parolă aleatorie. -- -- -- Could not create entry with path %1. -- Imposibil de creat intrarea cu calea %1. -- -- -- Enter password for new entry: -- Introduceți parola pentru intrare nouă: -- -- -- Writing the database failed %1. -- Scrierea bazei de date nu a reușit% 1. -- -- -- Successfully added entry %1. -- Intrare adăugată cu succes %1. -- -- -- Invalid timeout value %1. -- Valoare de expirare nevalidă %1. -- -- -- Entry %1 not found. -- Intrarea% 1 nu a fost găsită. -- -- -- Entry with path %1 has no TOTP set up. -- Intrarea cu calea %1 nu are TOTP configurat. -- -- -- Clearing the clipboard in %1 second(s)... -- Golirea Clipboard-ului în% 1 second (s)...Golirea Clipboard-ului în% 1 second (s)...Golirea Clipboard-ului în %1 secund(e)... -- -- -- Clipboard cleared! -- Clipboard sters! -- -- -- Silence password prompt and other secondary outputs. -- Tăcere parola prompt și alte ieșiri secundare. -- -- -- count -- CLI parameter -- număr -- -- -- Could not find entry with path %1. -- Imposibil de găsit intrarea cu calea %1. -- -- -- Not changing any field for entry %1. -- Nu se modifică niciun câmp pentru intrarea %1. -- -- -- Enter new password for entry: -- Introduceți parola nouă pentru intrare: -- -- -- Writing the database failed: %1 -- Scrierea bazei de date nu a reușit: %1 -- -- -- Successfully edited entry %1. -- Intrare editată cu succes %1. -- -- -- Length %1 -- Lungime %1 -- -- -- Entropy %1 -- Entropie %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-cuvânt extra Bits %1 -- -- -- Type: Bruteforce -- Tipul: Bruteforce -- -- -- Type: Dictionary -- Tip: dicționar -- -- -- Type: Dict+Leet -- Tip: dict + Leet -- -- -- Type: User Words -- Tip: cuvinte utilizator -- -- -- Type: User+Leet -- Tip: utilizator + Leet -- -- -- Type: Repeated -- Tip: repetat -- -- -- Type: Sequence -- Tip: secvență -- -- -- Type: Spatial -- Tip: spatial -- -- -- Type: Date -- Tip: data -- -- -- Type: Bruteforce(Rep) -- Tipul: Bruteforce (Rep) -- -- -- Type: Dictionary(Rep) -- Tip: Dicționar (Rep) -- -- -- Type: Dict+Leet(Rep) -- Tip: dict + Leet (Rep) -- -- -- Type: User Words(Rep) -- Tip: cuvinte utilizator (Rep) -- -- -- Type: User+Leet(Rep) -- Tip: utilizator + Leet (Rep) -- -- -- Type: Repeated(Rep) -- Tip: repetat (Rep) -- -- -- Type: Sequence(Rep) -- Tip: secvență (Rep) -- -- -- Type: Spatial(Rep) -- Tip: spatial (Rep) -- -- -- Type: Date(Rep) -- Tip: data (Rep) -- -- -- Type: Unknown%1 -- Tip: necunoscut %1 -- -- -- Entropy %1 (%2) -- Entropie %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Lungime parolă (%1) != suma de lungime a pieselor (%2) * * * -- -- -- Failed to load key file %1: %2 -- Încărcarea fișierului cheie %1: %2 nu a reușit -- -- -- Length of the generated password -- Lungimea parolei generate -- -- -- Use lowercase characters -- Folosește minuscule -- -- -- Use uppercase characters -- Folosește majuscule -- -- -- Use special characters -- Folosește caractere speciale -- -- -- Use extended ASCII -- Utilizarea ASCII extinsă -- -- -- Exclude character set -- Excludere set de caractere -- -- -- chars -- caractere -- -- -- Exclude similar looking characters -- Exclude caractere similare în căutarea -- -- -- Include characters from every selected group -- Includere caractere din fiecare grup selectat -- -- -- Recursively list the elements of the group. -- Recursiv lista elementele grupului. -- -- -- Cannot find group %1. -- Imposibil de găsit grupul %1. -- -- -- Error reading merge file: --%1 -- Eroare la citirea fișierului de îmbinare: --%1 -- -- -- Unable to save database to file : %1 -- Imposibil de salvat baza de date în fișier: %1 -- -- -- Unable to save database to file: %1 -- Imposibil de salvat baza de date în fișier: %1 -- -- -- Successfully recycled entry %1. -- Intrare reciclată cu succes %1. -- -- -- Successfully deleted entry %1. -- Intrare ștearsă cu succes %1. -- -- -- Show the entry's current TOTP. -- Afișați TOTP-ul curent al intrării. -- -- -- ERROR: unknown attribute %1. -- EROARE: atribut necunoscut %1. -- -- -- No program defined for clipboard manipulation -- Nici un program definit pentru manipularea Clipboard -- -- -- file empty -- fișier gol -- -- -- %1: (row, col) %2,%3 -- % 1: (rând, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Setări invalide -- -- -- Invalid Key -- TOTP -- Cheie invalidă -- -- -- Message encryption failed. -- Criptarea mesajelor nu a reușit. -- -- -- No groups found -- Nu s-au găsit grupuri -- -- -- Create a new database. -- Creează o bază de date nouă. -- -- -- File %1 already exists. -- Fișierul %1 există deja. -- -- -- Loading the key file failed -- Încărcarea fișierului cheie nu a reușit -- -- -- No key is set. Aborting database creation. -- Nu este setată nicio cheie. Abandonarea creării bazei de date. -- -- -- Failed to save the database: %1. -- Salvarea bazei de date nu a reușit: %1. -- -- -- Successfully created new database. -- Noua bază de date a fost creată cu succes. -- -- -- Creating KeyFile %1 failed: %2 -- Crearea KeyFile %1 nu a reușit: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Încărcarea KeyFile %1 nu a reușit: %2 -- -- -- Path of the entry to remove. -- Calea intrării de eliminat. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Fișierul de blocare cu o singură instanță existentă nu este valid. Lansează o nouă instanță. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Imposibil de creat fișierul de blocare. Modul single-instanță dezactivat. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - manager de parole multi-platformă -- -- -- filenames of the password databases to open (*.kdbx) -- nume de fișiere de baze de date parola pentru a deschide (*.kdbx) -- -- -- path to a custom config file -- calea către un fișier de configurare particularizat -- -- -- key file of the database -- fișier cheie al bazei de date -- -- -- read password of the database from stdin -- citi parola bazei de date de la stdin -- -- -- Another instance of KeePassXC is already running. -- O altă instanță a KeePassXC este deja în execuție. -- -- -- Fatal error while testing the cryptographic functions. -- Eroare fatală în timpul testării funcțiilor criptografice. -- -- -- KeePassXC - Error -- KeePassXC - Eroare -- -- -- Database password: -- Parolă bază de date: -- -- -- Cannot create new group -- Imposibil de creat un grup nou -- -- -- Deactivate password key for the database. -- Dezactivați cheia parolă pentru baza de date. -- -- -- Displays debugging information. -- Afișează informații de depanare. -- -- -- Deactivate password key for the database to merge from. -- Dezactivați cheia parolă pentru care se bazează baza de date. -- -- -- Version %1 -- Versiunea %1 -- -- -- Build Type: %1 -- Tip de construcție: %1 -- -- -- Revision: %1 -- Revizie: %1 -- -- -- Distribution: %1 -- Distribuție: %1 -- -- -- Debugging mode is disabled. -- Modul de depanare este dezactivat. -- -- -- Debugging mode is enabled. -- Modul de depanare este activat. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Sistem de operare: %1 --Arhitectura procesor (CPU): %2 --Nucleu (Kernel): %3 %4 -- -- -- Auto-Type -- Auto tiparire -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (partajare semnată și nesemnată) -- -- -- KeeShare (only signed sharing) -- KeeShare (doar partajare semnată) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (doar partajare nesemnată) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nici unul -- -- -- Enabled extensions: -- Extensii activate: -- -- -- Cryptographic libraries: -- Biblioteci criptografice: -- -- -- Cannot generate a password and prompt at the same time! -- Nu se poate genera o parolă și o solicitare în același timp! -- -- -- Adds a new group to a database. -- Adaugă un grup nou la o bază de date. -- -- -- Path of the group to add. -- Calea grupului de adăugat. -- -- -- Group %1 already exists! -- Grupul %1 există deja! -- -- -- Group %1 not found. -- Grupul %1 nu a fost găsit. -- -- -- Successfully added group %1. -- A adăugat cu succes grupul %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Verificați dacă au fost scurse parole în mod public. FILENAME trebuie să fie calea unui fișier care să enumeze hash-urile SHA-1 ale parolelor scurse în format HIBP, așa cum este disponibil pe https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- NUME DE FIȘIER -- -- -- Analyze passwords for weaknesses and problems. -- Analizați parolele pentru deficiențe și probleme. -- -- -- Failed to open HIBP file %1: %2 -- Nu a putut fi deschis fișierul HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Evaluarea intrărilor din baza de date cu fișierul HIBP, va dura puțin ... -- -- -- Close the currently opened database. -- Închideți baza de date deschisă în prezent. -- -- -- Display this help. -- Afișați acest ajutor. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Număr de cuvinte nevalide %1 -- -- -- The word list is too small (< 1000 items) -- Lista de cuvinte este prea mică (<1000 de articole) -- -- -- Exit interactive mode. -- Ieșiți din modul interactiv. -- -- -- Exports the content of a database to standard output in the specified format. -- Exportă conținutul unei baze de date până la ieșirea standard în formatul specificat. -- -- -- Unable to export database to XML: %1 -- Imposibil de exportat baza de date în XML: %1 -- -- -- Unsupported format %1 -- Formatul neacceptat %1 -- -- -- Use numbers -- Folosiți numere -- -- -- Invalid password length %1 -- Lungime parolă nevalidă %1 -- -- -- Display command help. -- Afișați ajutorul comenzii. -- -- -- Available commands: -- Comenzi disponibile: -- -- -- Import the contents of an XML database. -- Importați conținutul unei baze de date XML. -- -- -- Path of the XML database export. -- Calea de export a bazei de date XML. -- -- -- Path of the new database. -- Calea noii baze de date. -- -- -- Successfully imported database. -- Baza de date importată cu succes. -- -- -- Unknown command %1 -- Comanda necunoscută %1 -- -- -- Flattens the output to single lines. -- Aplica ieșirea pe linii unice. -- -- -- Only print the changes detected by the merge operation. -- Tipăriți numai modificările detectate de operația de îmbinare. -- -- -- Yubikey slot for the second database. -- Slot Yubikey pentru a doua bază de date. -- -- -- Successfully merged %1 into %2. -- Fuzionarea cu succes %1 în %2. -- -- -- Database was not modified by merge operation. -- Baza de date nu a fost modificată de operațiunea de îmbinare. -- -- -- Moves an entry to a new group. -- Mută ​​o intrare într-un grup nou. -- -- -- Path of the entry to move. -- Calea de intrare pentru a vă deplasa. -- -- -- Path of the destination group. -- Calea grupului de destinație. -- -- -- Could not find group with path %1. -- Nu s-a putut găsi grupul cu calea% 1. -- -- -- Entry is already in group %1. -- Intrarea este deja în grupul %1. -- -- -- Successfully moved entry %1 to group %2. -- Mutați cu succes intrarea %1 în grupul %2. -- -- -- Open a database. -- Deschideți o bază de date. -- -- -- Path of the group to remove. -- Calea grupului de eliminat. -- -- -- Cannot remove root group from database. -- Nu se poate elimina grupul rădăcină din baza de date. -- -- -- Successfully recycled group %1. -- Grup reciclat cu succes %1. -- -- -- Successfully deleted group %1. -- Grupul %1 a fost șters cu succes. -- -- -- Failed to open database file %1: not found -- Nu a putut fi deschis fișierul bazei de date %1: nu a fost găsit -- -- -- Failed to open database file %1: not a plain file -- Nu a putut deschide fișierul bazei de date %1: nu un fișier simplu -- -- -- Failed to open database file %1: not readable -- Nu a putut deschide fișierul bazei de date %1: nu poate fi citit -- -- -- Enter password to unlock %1: -- Introduceți parola pentru a debloca %1: -- -- -- Invalid YubiKey slot %1 -- Slot YubiKey %1 nevalid -- -- -- Enter password to encrypt database (optional): -- Introduceți parola pentru criptarea bazei de date (opțional): -- -- -- HIBP file, line %1: parse error -- Fișier HIBP, linia %1: eroare de analiză -- -- -- Secret Service Integration -- Integrarea serviciilor secrete -- -- -- User name -- Nume utilizator -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- Generator de parole nevalide după aplicarea tuturor opțiunilor -- -- -- Show the protected attributes in clear text. -- Afișează atributele protejate într-un text clar. -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- timp -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- UUID: -- -- -- Name: -- Nume: -- -- -- Description: -- Descriere: -- -- -- Cipher: -- Cifru: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- AES 256-biți -- -- -- Twofish 256-bit -- Twofish 256-biți -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Icon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Eroare internă zlib la comprimarea: -- -- -- Error writing to underlying device: -- Eroare la scrierea dispozitivului subiacent: -- -- -- Error opening underlying device: -- Eroare la deschiderea dispozitivului subiacent: -- -- -- Error reading data from underlying device: -- Eroare la citirea datelor de pe dispozitivul subiacent: -- -- -- Internal zlib error when decompressing: -- Eroare internă zlib la decomprimare: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Formatul gzip nu este acceptat în această versiune de zlib. -- -- -- Internal zlib error: -- Eroare internă zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- Inacceptabil -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- Slab -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Titlu -- -- -- Path -- Cale -- -- -- Score -- Scor -- -- -- Reason -- Motiv -- -- -- Edit Entry... -- Editare intrare... -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- Titlu -- -- -- Path -- Cale -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- o dată -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- Editare intrare... -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Treceți peste linii cu pictograme de eroare pentru informații suplimentare. -- -- -- Name -- Nume -- -- -- Value -- Valoare -- -- -- Please wait, database statistics are being calculated... -- Vă rugăm să așteptați, se calculează statisticile bazei de date ... -- -- -- Database name -- Numele bazei de date -- -- -- Description -- Descriere -- -- -- Location -- Locație -- -- -- Last saved -- Ultima salvare -- -- -- Unsaved changes -- Modificări salvate -- -- -- yes -- da -- -- -- no -- Nu -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Baza de date a fost modificată, dar modificările nu au fost încă salvate pe disc. -- -- -- Number of groups -- Număr de grupuri -- -- -- Number of entries -- Numărul de intrări -- -- -- Number of expired entries -- Numărul de intrări expirate -- -- -- The database contains entries that have expired. -- Baza de date conține intrări care au expirat. -- -- -- Unique passwords -- Parole unice -- -- -- Non-unique passwords -- Parole non-unice -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mai mult de 10% din parolele sunt reutilizate. Utilizați parole unice atunci când este posibil. -- -- -- Maximum password reuse -- Reutilizarea maximă a parolei -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Unele parole sunt folosite de mai mult de trei ori. Utilizați parole unice atunci când este posibil. -- -- -- Number of short passwords -- Număr de parole scurte -- -- -- Recommended minimum password length is at least 8 characters. -- Lungimea minimă recomandată a parolei este de cel puțin 8 caractere. -- -- -- Number of weak passwords -- Număr de parole slabe -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Recomandă folosirea parolelor lungi, aleatorii, cu o notă de „bun” sau „excelent”. -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- Lungimea medie a parolei -- -- -- %1 characters -- %1 caractere -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Lungimea medie a parolei este mai mică de zece caractere. Parolele mai lungi oferă mai multă securitate. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Conexiunea agentului nu a reușit. -- -- -- Agent protocol error. -- Eroare de protocol agent. -- -- -- No agent running, cannot add identity. -- Nu se execută niciun agent, nu se poate adăuga identitate. -- -- -- No agent running, cannot remove identity. -- Nu se execută niciun agent, nu se poate elimina identitatea. -- -- -- Agent refused this identity. Possible reasons include: -- Agentul a refuzat această identitate. Motive posibile includ: -- -- -- The key has already been added. -- Cheia a fost deja adăugată. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Durata de viață restricționată nu este acceptată de agent (opțiuni de verificare). -- -- -- A confirmation request is not supported by the agent (check options). -- O solicitare de confirmare nu este acceptată de agent (opțiuni de selectare). -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Căutare ajutor -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Termenii de căutare sunt după urmează: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Fiecare termen de căutare trebuie să corespundă (de exemplu, logică și) -- -- -- Modifiers -- Modificatori -- -- -- exclude term from results -- exclude termenul de la rezultate -- -- -- match term exactly -- termenul de potrivire exact -- -- -- use regex in term -- utilizarea regex în termen -- -- -- Fields -- Câmpuri -- -- -- Term Wildcards -- Wildcards pe termen -- -- -- match anything -- se potrivesc cu orice -- -- -- match one -- se potriveste unul -- -- -- logical OR -- logică sau -- -- -- Examples -- Exemple -- -- -- -- SearchWidget -- -- Search -- Caută -- -- -- Limit search to selected group -- Limitați căutarea la grupul selectat -- -- -- Search Help -- Căutare ajutor -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Căutare (%1)... -- -- -- Case sensitive -- Caz sensibil -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Opțiuni -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Activați integrarea KeepassXC Freedesktop.org Serviciu secret -- -- -- General -- General -- -- -- Show notification when credentials are requested -- Afișați notificarea atunci când sunt solicitate acreditările -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>În cazul în care coșul de reciclare este activat pentru baza de date, intrările vor fi mutate direct la coșul de gunoi. În caz contrar, acestea vor fi șterse fără confirmare.</p><p> Vi se va solicita totuși dacă orice alte înregistrări sunt trimise de către alții.</p></body></html> -- -- -- Exposed database groups: -- Grupuri de baze de date expuse: -- -- -- Authorization -- Autorizare -- -- -- These applications are currently connected: -- Aceste aplicații sunt conectate în prezent: -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Activ -- -- -- Allow export -- Se permite exportul -- -- -- Allow import -- Se permite importul -- -- -- Own certificate -- Certificat propriu -- -- -- Fingerprint: -- Amprentă: -- -- -- Certificate: -- Certificat: -- -- -- Signer -- Semnatar -- -- -- Key: -- Cheie: -- -- -- Generate -- Generează -- -- -- Import -- Import -- -- -- Export -- Export -- -- -- Imported certificates -- Certificate importate -- -- -- Trust -- Încredere -- -- -- Ask -- Întreabă -- -- -- Untrust -- Fără încredere -- -- -- Remove -- Înlătură -- -- -- Path -- Cale -- -- -- Status -- Stare -- -- -- Fingerprint -- Amprentă -- -- -- Certificate -- Certificat -- -- -- Trusted -- Încredere -- -- -- Untrusted -- Fara Încredere -- -- -- Unknown -- Necunoscut -- -- -- key.share -- Filetype for KeeShare key -- cheie.Share -- -- -- KeeShare key file -- KeeShare fisier-cheie -- -- -- All files -- Toate fișierele -- -- -- Select path -- Selectare traseu -- -- -- Exporting changed certificate -- Exportul certificatului modificat -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Certificatul exportat nu este identic cu cel utilizat. Exportați certificatul curent? -- -- -- Signer: -- Semnatar: -- -- -- Allow KeeShare imports -- Permite importurile KeeShare -- -- -- Allow KeeShare exports -- Permite exporturile KeeShare -- -- -- Only show warnings and errors -- Afișați doar avertismente și erori -- -- -- Key -- Cheie -- -- -- Signer name field -- Câmpul nume semnatar -- -- -- Generate new certificate -- Generați un nou certificat -- -- -- Import existing certificate -- Importați certificatul existent -- -- -- Export own certificate -- Export certificat propriu -- -- -- Known shares -- Acțiuni cunoscute -- -- -- Trust selected certificate -- Certificat selectat de încredere -- -- -- Ask whether to trust the selected certificate every time -- Întrebați dacă aveți încredere în certificatul selectat de fiecare dată -- -- -- Untrust selected certificate -- Certificat selectat neîncredere -- -- -- Remove selected certificate -- Ștergeți certificatul selectat -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Suprascrierea container de partajare semnate nu este acceptată-exportul împiedicat -- -- -- Could not write export container (%1) -- Imposibil de scris containerul de export (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Imposibil de încorporat semnătura: Imposibil de deschis fișierul de scris (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Imposibil de încorporat semnătura: Imposibil de scris fișierul (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Imposibil de încorporat baza de date: Imposibil de deschis fișierul pentru scris (%1) -- -- -- Could not embed database: Could not write file (%1) -- Imposibil de încorporat baza de date: Imposibil de scris fișierul (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Suprascrierea containerului de partajare nesemnate nu este acceptată-exportul împiedicat -- -- -- Could not write export container -- Imposibil de scris container de export -- -- -- Unexpected export error occurred -- Eroare de export neașteptată -- -- -- -- ShareImport -- -- Import from container without signature -- Importul din container fără semnătură -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Nu putem verifica sursa containerului partajat, deoarece nu este semnat. Chiar doriți să importați de la %1? -- -- -- Import from container with certificate -- Importul din container cu certificat -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Doriți să aveți încredere în %1 cu amprenta de %2 de la %3? {1 ?} {2 ?} -- -- -- Not this time -- Nu și de data asta. -- -- -- Never -- Niciodată -- -- -- Always -- Întotdeauna -- -- -- Just this time -- Doar de data asta. -- -- -- Signed share container are not supported - import prevented -- Container de partajare semnat nu sunt acceptate-import prevenit -- -- -- File is not readable -- Fișierul nu este lizibil -- -- -- Invalid sharing container -- Container de partajare nevalid -- -- -- Untrusted import prevented -- Import de neîncredere împiedicat -- -- -- Successful signed import -- Import semnat cu succes -- -- -- Unsigned share container are not supported - import prevented -- Container de partajare nesemnate nu sunt acceptate-import prevenit -- -- -- Successful unsigned import -- Import nesemnate cu succes -- -- -- File does not exist -- Fișierul nu există -- -- -- Unknown share container type -- Tip de container de partajare necunoscut -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Importul din %1 nu a reușit (%2) -- -- -- Import from %1 successful (%2) -- Importul de la %1 cu succes (%2) -- -- -- Imported from %1 -- Importat din %1 -- -- -- Export to %1 failed (%2) -- Exportul în %1 nu a reușit (%2) -- -- -- Export to %1 successful (%2) -- Exportul către %1 cu succes (%2) -- -- -- Export to %1 -- Export în %1 -- -- -- Multiple import source path to %1 in %2 -- Mai multe căi de import sursă la %1 în %2 -- -- -- Conflicting export target path %1 in %2 -- Calea țintă de export în conflict %1 în %2 -- -- -- -- TotpDialog -- -- Timed Password -- Parolă temporizată -- -- -- 000000 -- 000000 -- -- -- Copy -- Copiază -- -- -- Expires in <b>%n</b> second(s) -- Expiră în <b>% n</b> second (s)Expiră în <b>% n</b> second (s)Expiră în <b>%n</b> secunde -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Copiază -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Notă: aceste setări TOTP sunt particularizate și pot să nu funcționeze cu alți autentificatori. -- -- -- There was an error creating the QR code. -- Eroare la crearea codului QR. -- -- -- Closing in %1 seconds. -- Se închide în %1 secunde. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Configurați TOTP -- -- -- Default RFC 6238 token settings -- Setări implicite token RFC 6238 -- -- -- Steam token settings -- Setări token Steam -- -- -- Use custom settings -- Utilizați setările personalizate -- -- -- Custom Settings -- Setări particularizate -- -- -- Time step: -- Pasul de timp: -- -- -- sec -- Seconds -- sec -- -- -- Code size: -- Dimensiune cod: -- -- -- Secret Key: -- Cheie secreta: -- -- -- Secret key must be in Base32 format -- Cheia secretă trebuie să fie în format Base32 -- -- -- Secret key field -- Câmpul cu cheie secretă -- -- -- Algorithm: -- Algoritm: -- -- -- Time step field -- Câmp pas cu timp -- -- -- digits -- cifre -- -- -- Invalid TOTP Secret -- Secret TOTP nevalid -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Ați introdus o cheie secretă nevalidă. Cheia trebuie să fie în format Base32. --Exemplu: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Confirmați Eliminarea setărilor TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Sigur doriți să ștergeți setările TOTP pentru această intrare? -- -- -- -- URLEdit -- -- Invalid URL -- URL invalid -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Se caută actualizări -- -- -- Checking for updates... -- Se caută actualizări... -- -- -- Close -- Închide -- -- -- Update Error! -- Eroare de actualizare! -- -- -- An error occurred in retrieving update information. -- S-a produs o eroare la recuperarea informațiilor de actualizare. -- -- -- Please try again later. -- Vă rugăm să încercați din nou mai târziu. -- -- -- Software Update -- Actualizări software -- -- -- A new version of KeePassXC is available! -- O nouă versiune a KeePassXC este disponibila! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 este acum disponibil — aveți %2. -- -- -- Download it at keepassxc.org -- Descărcați-l la keepassxc.org -- -- -- You're up-to-date! -- Ești la zi! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 este în prezent cea mai nouă versiune disponibilă -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Începeți să stocați parolele în siguranță într-o bază de date KeePassXC -- -- -- Create new database -- Creează o bază de date nouă -- -- -- Open existing database -- Deschide bază de date existentă -- -- -- Import from KeePass 1 -- Importă din KeePass 1 -- -- -- Import from CSV -- Importă din CSV -- -- -- Recent databases -- Baze de date recente -- -- -- Welcome to KeePassXC %1 -- Bun venit la KeePassXC %1 -- -- -- Import from 1Password -- Importă de la 1Password -- -- -- Open a recent database -- Deschideți o bază de date recentă -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Apasă -- -- -- Passive -- Pasiv -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Actualizează -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-răspuns -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Dacă dețineți un <a href="https://www.yubico.com/">YubiKey</a>, îl puteți folosi pentru securitate suplimentară.</p><p>YubiKey necesită unul dintre sloturile sale să fie programat ca <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-răspuns</a>.</p> -- -- -- Refresh hardware tokens -- Actualizați jetoane hardware -- -- -- Hardware key slot selection -- Selectarea sloturilor pentru cheie hardware -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ru.ts keepassxc-2.6.4-patched/share/translations/keepassx_ru.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_ru.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_ru.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7888 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- О KeePassXC -- -- -- About -- О программе -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Сообщить об <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">ошибках</a> по https://github.com -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC распространяется на условиях универсальной общедоступной лицензии GNU (GPL) версии 2 или 3 (на ваше усмотрение). -- -- -- Contributors -- Соавторы -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Посмотреть соавторов на GitHub</a> -- -- -- Debug Info -- Отладочная информация -- -- -- Include the following information whenever you report a bug: -- Добавьте в сообщение об ошибке следующую информацию: -- -- -- Copy to clipboard -- Скопировать в буфер обмена -- -- -- Project Maintainers: -- Проект сопровождают: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Команда KeePassXC выражает особую благодарность debfx за создание оригинального KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Использовать OpenSSH для Windows вместо Pageant -- -- -- Enable SSH Agent integration -- Включить интеграцию SSH-агента -- -- -- SSH_AUTH_SOCK value -- значение SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- переопределить SSH_AUTH_SOCK -- -- -- (empty) -- (пусто) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Отсутствуют сокеты агента SSH. Убедитесь, что переменная окружения SSL_AUTH_SOCK определена или переопределите её значение. -- -- -- SSH Agent connection is working! -- Соединение с агентом SSH активно. -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Параметры приложения -- -- -- General -- Общие -- -- -- Security -- Безопасность -- -- -- Access error for config file %1 -- Ошибка доступа к файлу конфигурации %1 -- -- -- Icon only -- Только значок -- -- -- Text only -- Только текст -- -- -- Text beside icon -- Текст рядом со значком -- -- -- Text under icon -- Текст под значком -- -- -- Follow style -- Следовать стилю -- -- -- Reset Settings? -- Сбросить настройки? -- -- -- Are you sure you want to reset all general and security settings to default? -- Действительно сбросить все общие параметры и параметры безопасности к значениям, заданным по умолчанию? -- -- -- Monochrome (light) -- Монохромный (светлый) -- -- -- Monochrome (dark) -- Монохромный (тёмный) -- -- -- Colorful -- Цветной -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Вы должны перезапустить приложение, чтобы установить новый язык. Хотите перезапустить сейчас? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Основные параметры -- -- -- Startup -- Запуск -- -- -- Start only a single instance of KeePassXC -- Запускать только один экземпляр KeePassXC -- -- -- Minimize window at application startup -- Запускать приложение в свёрнутом виде -- -- -- File Management -- Управление файлами -- -- -- Backup database file before saving -- Создавать резервную копию базы данных перед сохранением -- -- -- Automatically save after every change -- Автоматически сохранять после каждого изменения -- -- -- Automatically reload the database when modified externally -- Автоматически перезагружать базу данных при её изменении извне -- -- -- Entry Management -- Управление записями -- -- -- Use group icon on entry creation -- Использовать значок группы для новых записей -- -- -- Minimize instead of app exit -- Сворачивать вместо закрытия программы -- -- -- Show a system tray icon -- Значок в области уведомлений -- -- -- Hide window to system tray when minimized -- Сворачивать окно в область уведомлений -- -- -- Auto-Type -- Автоввод -- -- -- Use entry title to match windows for global Auto-Type -- Использовать название записи для глобального автоввода -- -- -- Use entry URL to match windows for global Auto-Type -- Использовать URL-адрес для глобального автоввода -- -- -- Always ask before performing Auto-Type -- Всегда спрашивать перед автовводом -- -- -- ms -- Milliseconds -- мс -- -- -- Movable toolbar -- Перемещаемая панель инструментов -- -- -- Remember previously used databases -- Запоминать ранее использованные базы данных -- -- -- Load previously open databases on startup -- Загружать прошлые базы данных при запуске -- -- -- Remember database key files and security dongles -- Запоминать для баз данных файлы-ключи и аппаратные ключи безопасности -- -- -- Check for updates at application startup once per week -- Проверять обновления при запуске раз в неделю -- -- -- Include beta releases when checking for updates -- Включать в проверку обновлений бета-релизы -- -- -- Language: -- Язык: -- -- -- (restart program to activate) -- (перезапустить программу для активации) -- -- -- Minimize window after unlocking database -- Минимизировать окно после разблокирования базы данных -- -- -- Minimize when opening a URL -- Сворачивать при открытии URL -- -- -- Hide window when copying to clipboard -- Скрывать окно после копирования в буфер обмена: -- -- -- Minimize -- Сворачивать -- -- -- Drop to background -- Убирать на задний план -- -- -- Favicon download timeout: -- Тайм-аут загрузки значков: -- -- -- Website icon download timeout in seconds -- Тайм-аут получения значков веб-сайтов, задаётся в секундах -- -- -- sec -- Seconds -- с -- -- -- Toolbar button style -- Внешний вид кнопок на панели инструментов -- -- -- Language selection -- Выбор языка -- -- -- Global auto-type shortcut -- Комбинация клавиш для глобального автоввода: -- -- -- Auto-type character typing delay milliseconds -- Задержка ввода символов, задаётся в миллисекундах -- -- -- Auto-type start delay milliseconds -- Задержка начала автоввода, задаётся в милисекундах -- -- -- Automatically launch KeePassXC at system startup -- Автоматически запуск KeePassXC при запуске системы -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.) -- -- -- User Interface -- Интерфейс -- -- -- Toolbar button style: -- Внешний вид кнопок панели инструментов: -- -- -- Use monospaced font for notes -- Использовать для заметок моноширинный шрифт -- -- -- Tray icon type: -- Тип значка в системном лотке: -- -- -- Reset settings to default… -- Сбросить настройки по умолчанию... -- -- -- Auto-Type typing delay: -- Задержка набора автоввода: -- -- -- Global Auto-Type shortcut: -- Комбинация клавиш для глобального автоввода: -- -- -- Auto-Type start delay: -- Задержка начала автоввода: -- -- -- Automatically save when locking database -- Автоматическое сохранение при блокировке базы данных -- -- -- Automatically save non-data changes when locking database -- Автоматическое сохранение изменений, не связанных с данными, при блокировке базы данных. -- -- -- Tray icon type -- Тип значка в системном лотке -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Таймауты -- -- -- Clear clipboard after -- Очищать буфер обмена через -- -- -- sec -- Seconds -- с -- -- -- Lock databases after inactivity of -- Блокировать базу данных при неактивности в течение -- -- -- min -- мин -- -- -- Forget TouchID after inactivity of -- Забывать TouchID после неактивности -- -- -- Convenience -- Удобство -- -- -- Lock databases when session is locked or lid is closed -- Блокировать базу данных при блокировке сеанса или закрытии крышки ноутбука -- -- -- Forget TouchID when session is locked or lid is closed -- Забывать TouchID при блокировке сеанса или закрытии крышки ноутбука -- -- -- Lock databases after minimizing the window -- Блокировать базы данных при сворачивании окна -- -- -- Re-lock previously locked database after performing Auto-Type -- Блокировать ранее заблокированную БД после автоввода -- -- -- Hide passwords in the entry preview panel -- Скрывать пароли в панели предварительного просмотра записи -- -- -- Hide entry notes by default -- По умолчанию скрывать примечания записи -- -- -- Privacy -- Конфиденциальность -- -- -- Use DuckDuckGo service to download website icons -- Использовать DuckDuckGo для загрузки значков -- -- -- Clipboard clear seconds -- Очистка буфера обмена в секундах -- -- -- Touch ID inactivity reset -- Сброс Touch ID при неактивности -- -- -- Database lock timeout seconds -- Задержка блокирования базы (с): -- -- -- min -- Minutes -- мин -- -- -- Clear search query after -- Задержка очистки поискового запроса: -- -- -- Require password repeat when it is visible -- Требовать повтора пароля, когда он виден -- -- -- Hide passwords when editing them -- Скрыть пароли при их редактировании -- -- -- Use placeholder for empty password fields -- Использовать заполнитель для полей с пустым паролем -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Невозможно найти запись, соответствующую заголовку окна: -- -- -- Auto-Type - KeePassXC -- Автоввод - KeePassXC -- -- -- Auto-Type -- Автоввод -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Неверная инструкция автоввода! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Слишком большая задержка в команде автоввода. Действительно продолжить? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Команда автоввода содержит очень медленные нажатия клавиш. Действительно продолжить? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Команда автоввода содержит часто повторяющиеся аргументы. Действительно продолжить? -- -- -- Permission Required -- Требуется предоставление разрешений -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- Приложению KeePassXC для выполнения автоввода требуется получение разрешений на доступ к специальным возможностям. Если такое разрешение уже предоставлено, требуется повторный запуск KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Окно -- -- -- Sequence -- Последовательность -- -- -- Default sequence -- Стандартная последовательность -- -- -- -- AutoTypeMatchModel -- -- Group -- Группа -- -- -- Title -- Имя записи -- -- -- Username -- Имя пользователя -- -- -- Sequence -- Последовательность -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Скопировать лог&ин -- -- -- Copy &password -- Скопировать п&ароль -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Требуется предоставление разрешений -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- Приложению KeePassXC для выполнения автоввода на уровне системы требуется получение разрешений на доступ к специальным возможностям и записи экрана. Запись экрана необходима для использования заголовков окон для поиска полей ввода. Если такие разрешения уже предоставлены, требуется повторный запуск KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Автоввод - KeePassXC -- -- -- Select entry to Auto-Type: -- Выберите запись для автоввода: -- -- -- Search... -- Поиск… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeepassXC — запрос доступа браузером -- -- -- %1 is requesting access to the following entries: -- %1 запрашивает доступ к следующим записям: -- -- -- Remember access to checked entries -- Всегда разрешать доступ к отмеченным записям -- -- -- Remember -- Запомнить -- -- -- Allow access to entries -- Всегда разрешать доступ к записям -- -- -- Allow Selected -- Разрешить выбранные -- -- -- Deny All -- Запретить все -- -- -- Disable for this site -- Отключить для этого сайта -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser - сохранить запись -- -- -- Ok -- OK -- -- -- Cancel -- Отмена -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- У вас открыто несколько баз данных. --Выберите нужную базу для сохранения учётных данных. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Запрос на ассоциацию нового ключа -- -- -- Save and allow access -- Сохранить и разрешить доступ -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Перезаписать существующий ключ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Общий секретный ключ с именем "%1" уже существует. --Вы действительно хотите его перезаписать? -- -- -- KeePassXC: Update Entry -- KeePassXC: Обновить запись -- -- -- Do you want to update the information in %1 - %2? -- Обновить информацию в %1 — %2? -- -- -- Abort -- Прервать -- -- -- Converting attributes to custom data… -- Преобразование атрибутов в пользовательских данных... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Атрибуты KeePassHTTP преобразованы -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Успешно преобразованы атрибуты из %1 записи(ей). --Перемещено ключей в пользовательские данные: %2. -- -- -- Successfully moved %n keys to custom data. -- Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно перемещено ключей в пользовательские данные: %n. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Не найдено записи с атрибутами KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- В активной базе данных нет записи с атрибутами KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Обнаружена устаревшая интеграция с браузером -- -- -- KeePassXC: Create a new group -- KeePassXC: Создать новую группу -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Получен запрос на создание новой группы "%1". --Создать эту группу? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Ваши настройки KeePassXC-Browser требуется переместить в настройки базы данных. --Это необходимо, чтобы поддерживать текущие подключения браузера. --Хотите перенести настройки сейчас? -- -- -- Don't show this warning again -- Не показывать это предупреждение -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Получен запрос на ассоциацию для следующей базы данных: --%1 -- --Задайте для соединения уникальное имя или идентификатор, например: chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Диалог -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Это требуется для доступа к базам данных с помощью KeePassXC-Browser -- -- -- Enable browser integration -- Включить интеграцию с браузером -- -- -- General -- Общие -- -- -- Browsers installed as snaps are currently not supported. -- Браузеры, установленные в виде snap-пакетов, в настоящее время не поддерживаются. -- -- -- Enable integration for these browsers: -- Включить интеграцию для браузеров: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Показывать уведомление при запросе учётных данных -- -- -- Request to unlock the database if it is locked -- Запрашивать разблокировку базы данных, если она заблокирована -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Возвращаются только записи с таким же протоколом (http://, https://, ...). -- -- -- Match URL scheme (e.g., https://...) -- Проверять совпадение протокола для URL-адресов (например: https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- При поиске по URL возвращать только лучшие совпадения, а не все записи для домена. -- -- -- Return only best-matching credentials -- Возвращать только наиболее подходящие совпадения -- -- -- Returns expired credentials. String [expired] is added to the title. -- Возвращать также записи с завершившимся сроком действия. К названию таких записей будет добавлено «[expired]». -- -- -- Allow returning expired credentials -- Возвращать истёкшие записи -- -- -- All databases connected to the extension will return matching credentials. -- Получать результаты поиска из всех подключённых баз данных -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Искать во всех открытых базах -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Сортировать возвращаемые данные по названию -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Сортировать возвращаемые данные по имени пользователя -- -- -- Advanced -- Расширенный режим -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Не подтверждать доступ к записям -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Не подтверждать обновление записей -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Не спрашивать разрешения для обычной проверки подлинности HTTP -- -- -- Automatically creating or updating string fields is not supported. -- Автоматическое создание или обновление строковых полей не поддерживается. -- -- -- Return advanced string fields which start with "KPH: " -- Возвращать дополнительные строковые поля, начинающиеся с "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Не показывать напоминание о переносе устаревших параметров KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Не показывать напоминание о переносе устаревших параметров KeePassHTTP -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Автоматически обновлять пути к сценариям механизма native messaging при запуске KeePassXC или keepassxc-proxy. -- -- -- Update native messaging manifest files at startup -- Обновлять файлы манифеста механизма native messaging при запуске -- -- -- Use a custom proxy location if you installed a proxy manually. -- Использовать пользовательский путь к прокси при установке прокси вручную. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Задать своё расположение прокси: -- -- -- Custom proxy location field -- Поле расположения пользовательского прокси сервера -- -- -- Browser for custom proxy file -- Выбрать файл пользовательского прокси сервера -- -- -- Browse... -- Button for opening file dialog -- Обзор… -- -- -- Use a custom browser configuration location: -- Задать своё расположение файла конфигурации браузера: -- -- -- Browser type: -- Тип браузера: -- -- -- Toolbar button style -- Внешний вид кнопок на панели инструментов -- -- -- Config Location: -- Расположение файла конфигурации: -- -- -- Custom browser location field -- Поле расположения пользовательского браузера -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Выбрать расположение браузера -- -- -- Custom extension ID: -- Пользовательский идентификатор расширения: -- -- -- Custom extension ID -- Пользовательский идентификатор расширения -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Так как Snap это песочница, для включения браузерной интеграции нужно выполнить сценарий.<br />Этот сценарий можно получить с %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Для интеграции требуется установить расширение для браузера «KeePassXC-Browser». <br />Установите его для %1, %2 и %3. %4 -- -- -- Please see special instructions for browser extension use below -- Ознакомьтесь с инструкциями по использованию расширения браузера ниже -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Внимание:</b> не удалось найти заданное пользователем расположение прокси.<br/> Интеграция с браузером НЕ РАБОТАЕТ без приложения прокси. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>ВНИМАНИЕ:</b> Следующие параметры могут быть опасны! -- -- -- Executable Files -- Исполняемые файлы -- -- -- All Files -- Все файлы -- -- -- Select custom proxy location -- Выбрать другое расположение прокси -- -- -- Select native messaging host folder location -- Выбрать расположение папки native messaging -- -- -- -- CloneDialog -- -- Clone Options -- Параметры клонирования -- -- -- Append ' - Clone' to title -- Добавить к названию « - клон» -- -- -- Replace username and password with references -- Использовать ссылки для имени пользователя и пароля -- -- -- Copy history -- История копирования -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Импорт полей CSV -- -- -- filename -- имя файла -- -- -- size, rows, columns -- размер, строк, столбцов -- -- -- Encoding -- Кодировка -- -- -- Codec -- Кодек -- -- -- Text is qualified by -- Текст соответствует -- -- -- Fields are separated by -- Разделитель полей -- -- -- Comments start with -- Символ начала комментария -- -- -- Consider '\' an escape character -- Символ «\» является экранирующим -- -- -- Preview -- Предварительный просмотр -- -- -- Imported from CSV file -- Импортировано из CSV-файла -- -- -- Original data: -- Исходные данные: -- -- -- Error -- Ошибка -- -- -- Error(s) detected in CSV file! -- Ошибки в CSV-файле! -- -- -- [%n more message(s) skipped] -- [%n больше сообщений пропущен][%n больше сообщений пропущен][%n больше сообщений пропущен][пропущено сообщений: %n] -- -- -- CSV import: writer has errors: --%1 -- Импорт CSV: запись с ошибками - %1 -- -- -- Text qualification -- Разделитель текста -- -- -- Field separation -- Разделитель полей -- -- -- Number of header lines to discard -- Количество пропускаемых строк заголовка -- -- -- CSV import preview -- Предварительный просмотр импорта из CSV -- -- -- Column Association -- Связывание столбцов -- -- -- Last Modified -- Изменён -- -- -- Password -- Пароль -- -- -- Created -- Создано -- -- -- Notes -- Заметки -- -- -- Title -- Заголовок -- -- -- Group -- Группа -- -- -- URL -- URL-адрес -- -- -- Username -- Логин -- -- -- Header lines skipped -- Начальные строки пропущены -- -- -- First line has field names -- Первая запись содержит имена полей -- -- -- Not Present -- Отусуствует -- -- -- Column %1 -- Столбец %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Значок -- -- -- -- CsvParserModel -- -- %n column(s) -- %n столбцов%n столбцов%n столбцов%n столбцов -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n байт(ов)%n байт(ов)%n байт(ов)%n байт -- -- -- %n row(s) -- %n строка%n строк%n строк%n строк -- -- -- -- Database -- -- File %1 does not exist. -- Файл %1 не существует. -- -- -- Unable to open file %1. -- Невозможно открыть файл %1. -- -- -- Error while reading the database: %1 -- Ошибка при чтении базы данных: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Файл не может быть перезаписан - он открыт в режиме "только для чтения". -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Ключ не преобразован. Это ошибка, сообщите о ней разработчикам! -- -- -- %1 --Backup database located at %2 -- %1 --Расположение резервной копии базы данных: «%2» -- -- -- Could not save, database does not point to a valid file. -- Не удалось сохранить, база данных не указывает на верный файл. -- -- -- Could not save, database file is read-only. -- Невозможно сохранить, файл базы данных доступен только для чтения -- -- -- Database file has unmerged changes. -- Файл базы данных имеет несинхронизированные изменения -- -- -- Recycle Bin -- Корзина -- -- -- Passwords -- Root group name -- Пароли -- -- -- Database save is already in progress. -- Сохранение базы данных уже выполняется. -- -- -- Could not save, database has not been initialized! -- Не удалось сохранить, база данных не была инициализирована. -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Разблокировать базу данных - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Файл-ключ: -- -- -- Refresh -- Обновить -- -- -- Don't show this warning again -- Не показывать это предупреждение -- -- -- All files -- Все файлы -- -- -- Key files -- Файлы-ключи -- -- -- Select key file -- Выберите файл-ключ -- -- -- Failed to open key file: %1 -- Ошибка при открытии файла-ключа: %1 -- -- -- Unlock KeePassXC Database -- Открытие базы данных KeePassXC -- -- -- Enter Password: -- Введите пароль: -- -- -- Password field -- Поле пароля -- -- -- Hardware key slot selection -- Выбор слота аппаратного ключа -- -- -- Browse for key file -- Открыть диалога выбора файла-ключа -- -- -- Browse... -- Обзор… -- -- -- Refresh hardware tokens -- Перечитать токены -- -- -- Hardware Key: -- Аппаратный ключ: -- -- -- Hardware key help -- Помощь по аппаратному ключу -- -- -- TouchID for Quick Unlock -- TouchID для Быстрой Разблокировки -- -- -- Unlock failed and no password given -- Неудачное разблокирование, пароль не указан -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Не удалось разблокировать базу данных, пароль не был указан. --Повторить попытку с пустым паролем? -- --Чтобы отключить вывод этого сообщения об ошибке, выполните сброс пароля в меню «Параметры базы данных» → «Безопасность». -- -- -- Retry with empty password -- Попробовать ещё раз с пустым паролем -- -- -- Enter Additional Credentials (if any): -- Дополнительные механизмы аутентификации: -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Возможно использовать аппаратные ключи безопасности, такие как <strong>Yubikey</strong> или <strong>OneKey</strong> со слотами, настроенными в режиме HMAC-SHA1.</p> --<p>Нажмите здесь для получения дополнительной информации…</p> -- -- -- Key file help -- Справка о файле-ключе -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Файл базы данных не может быть файлом-ключом -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Файл базы данных не может быть использован в качестве файла-ключа. Если файл-ключ не используется, оставьте это поле пустым. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Для усиления защиты базы данных, в дополнение к основному паролю, возможно использовать секретный файл. Такой файл может быть создан из раздела «Безопасность» диалога параметров базы данных.</p><p>Файл-ключ <strong>не является</strong> файлом базы данных в формате *.kdbx!<br>Если файл-ключ не используется, оставьте это поле пустым.</p><p>Нажмите для получения дополнительных сведений…</p> -- -- -- Key file to unlock the database -- Файл-ключ для разблокирования базы данных -- -- -- Please touch the button on your YubiKey! -- Нажмите кнопку на YubiKey! -- -- -- Detecting hardware keys… -- Обнаружение аппаратных ключей... -- -- -- No hardware keys detected -- Аппаратные ключи не обнаружены -- -- -- Select hardware key… -- Выберите аппаратный ключ... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Пароли -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Дополнительные параметры -- -- -- General -- Общие -- -- -- Security -- Безопасность -- -- -- Encryption Settings -- Параметры шифрования -- -- -- Browser Integration -- Интеграция с браузерами -- -- -- Database Credentials -- Доступ к базе данных -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Настройки KeePassXC-Browser -- -- -- Stored keys -- Сохранённые ключи -- -- -- Remove -- Удалить -- -- -- Delete the selected key? -- Удалить выбранный ключ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Вы действительно хотите удалить выбранный ключ? --Это может помешать подключению к плагину браузера. -- -- -- Key -- Ключ -- -- -- Value -- Значение -- -- -- Enable Browser Integration to access these settings. -- Для доступа к этим параметрам требуется включить интеграцию с браузером. -- -- -- Disconnect all browsers -- Отключить все браузеры -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Вы действительно хотите отключить все браузеры? --Это может помешать подключению к плагину браузера. -- -- -- KeePassXC: No keys found -- KeePassXC: Ключи не найдены -- -- -- No shared encryption keys found in KeePassXC settings. -- В настройках KeePassXC нет общих ключей шифрования. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Ключи удалены из базы данных -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Успешно удалён %n ключ шифрования из настроек KeePassXC.Успешно удалёны %n ключа шифрования из настроек KeePassXC.Успешно удалёны %n ключей шифрования из настроек KeePassXC.Успешно удалено ключей шифрования из настроек KeePassXC: %n. -- -- -- Forget all site-specific settings on entries -- Забыть все настройки записей для конкретных сайтов -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Вы действительно хотите забыть все настройки сайта для каждой записи? --Разрешения на доступ к записям будут отменены. -- -- -- Removing stored permissions… -- Удаление сохранённых разрешений... -- -- -- Abort -- Прервать -- -- -- KeePassXC: Removed permissions -- KeePassXC: Разрешения удалены -- -- -- Successfully removed permissions from %n entry(s). -- Успешно удалено разрешение от %n записи.Успешно удалены разрешения от %n записей.Успешно удалены разрешения от %n записей.Успешно удалены разрешения из %n шт. записей. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Не найдена запись с разрешениями! -- -- -- The active database does not contain an entry with permissions. -- В активной базе данных нет записей с разрешениями. -- -- -- Move KeePassHTTP attributes to custom data -- Переместить атрибуты KeePassHTTP в пользовательские данные -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Вы действительно хотите перевести все устаревшие данные интеграции браузера в новый стандарт? --Это необходимо для поддержания совместимости с плагином браузера. -- -- -- Stored browser keys -- Сохранённые ключи браузера -- -- -- Remove selected key -- Удалить выбранный ключ -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Переместить аттрибуты KeePassHTTP в пользовательские данные KeePassXC-Browser -- -- -- Refresh database root group ID -- Обновление идентификатора корневой записи базы данных -- -- -- Created -- Создано -- -- -- Refresh database ID -- Обновление идентификатора базы данных -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Действительно хотите перезагруить ID базы данных? --Это необходимо только если ваша база является копией другой и браузерное расширение не может подключиться. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Дополнительная защита... -- -- -- No password set -- Не задан пароль -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- ВНИМАНИЕ! Вы не установили пароль. Настоятельно НЕ рекомендуется использовать базу данных без пароля! -- --Вы действительно хотите продолжить без пароля? -- -- -- Continue without password -- Продолжить без пароля -- -- -- No encryption key added -- Ключ шифрования не добавлен -- -- -- You must add at least one encryption key to secure your database! -- Нужно добавить хотя бы один ключ шифрования для защиты базы данных! -- -- -- Unknown error -- Неизвестная ошибка -- -- -- Failed to change database credentials -- Не получилось изменить учётные данные базы -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Алгоритм шифрования: -- -- -- AES: 256 Bit (default) -- AES: 256 бит (по умолчанию) -- -- -- Twofish: 256 Bit -- Twofish: 256 бит -- -- -- Key Derivation Function: -- Функция формирования ключа: -- -- -- Transform rounds: -- Циклов преобразования: -- -- -- Memory Usage: -- Использование памяти: -- -- -- Parallelism: -- Параллелизм: -- -- -- Decryption Time: -- Время расшифровки: -- -- -- ?? s -- ?? с -- -- -- Change -- Изменить -- -- -- Higher values offer more protection, but opening the database will take longer. -- Чем больше значение, тем сильнее защита, но дольше открывается база данных. -- -- -- Database format: -- Формат базы данных: -- -- -- This is only important if you need to use your database with other programs. -- Это важно, только если нужно использовать базу данных с другими программами. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (рекомендуется) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- без изменений -- -- -- Number of rounds too high -- Key transformation rounds -- Слишком много циклов -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Слишком много циклов преобразования ключа Argon2. -- --Если оставить это значение, то база данных может открываться часы, дни или даже дольше! -- -- -- Understood, keep number -- Понятно, сохранить значение -- -- -- Cancel -- Отмена -- -- -- Number of rounds too low -- Key transformation rounds -- Слишком мало циклов -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Слишком мало циклов преобразования ключа AES-KDF. -- --Если оставить это значение, базу данных можно будет слишком легко взломать! -- -- -- KDF unchanged -- ФФК не изменена -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Ошибка преобразования ФФК с новыми параметрами; ФФК не изменена. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- МиБ МиБ МиБ МиБ -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- потоков потоков потоков потоков -- -- -- Change existing decryption time -- Изменить время расшифровывания -- -- -- Decryption time in seconds -- Время расшифровывания в секундах -- -- -- Database format -- Формат базы данных -- -- -- Encryption algorithm -- Алгоритм шифрования -- -- -- Key derivation function -- Функция формирования ключа -- -- -- Transform rounds -- Раундов преобразования: -- -- -- Memory usage -- Использование памяти -- -- -- Parallelism -- Параллелизм -- -- -- ?? ms -- ?? мс -- -- -- ? s -- ? с -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Доступ к записям -- -- -- Don't expose this database -- Не публиковать эту базу данных -- -- -- Expose entries under this group: -- Показать записи внутри этой группы: -- -- -- Enable Secret Service to access these settings. -- Включите службу Secret Service, чтобы настроить эти параметры. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Метаданные базы данных -- -- -- Database name: -- Имя базы данных: -- -- -- Database description: -- Описание базы данных: -- -- -- Default username: -- Имя пользователя по умолчанию: -- -- -- History Settings -- Настройки истории -- -- -- Max. history items: -- Максимум записей в истории: -- -- -- Max. history size: -- Максимальный размер истории: -- -- -- MiB -- МиБ -- -- -- Use recycle bin -- Использовать корзину -- -- -- Additional Database Settings -- Дополнительные параметры базы данных -- -- -- Database name field -- Поле имени базы данных -- -- -- Database description field -- Поле описания базы данных -- -- -- Default username field -- Поле имени пользователя по умолчанию -- -- -- Maximum number of history items per entry -- Максимальное количество событий истории для каждой из записей -- -- -- Maximum size of history per entry -- Максимальный размер событий истории для каждой из записей -- -- -- Delete Recycle Bin -- Удалить корзину -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Удалить корзину и всё её содержимое? --Это необратимое действие. -- -- -- (old) -- (устар.) -- -- -- Enable compression (recommended) -- Использовать сжатие (рекомендуется) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Совместное использование -- -- -- Breadcrumb -- Цепочка -- -- -- Type -- Тип -- -- -- Path -- Путь -- -- -- Last Signer -- Последний подписавшийся -- -- -- Certificates -- Сертификаты -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Имя базы данных: -- -- -- Description: -- Описание: -- -- -- Database name field -- Поле имени базы данных -- -- -- Database description field -- Поле описания базы данных -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- База данных KeePass 2 -- -- -- All files -- Все файлы -- -- -- Open database -- Открыть базу данных -- -- -- CSV file -- Файл CSV -- -- -- Merge database -- Объединить базу данных -- -- -- Open KeePass 1 database -- Открыть базу данных KeePass 1 -- -- -- KeePass 1 database -- База данных KeePass 1 -- -- -- Export database to CSV file -- Экспортировать базу данных в файл CSV -- -- -- Writing the CSV file failed. -- Не удалось записать CSV-файл. -- -- -- Database creation error -- Ошибка создания базы данных -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- У созданной базы данных нет ключа или ФФК, сохранение невозможно. --Это определённо ошибка, сообщите о ней разработчикам. -- -- -- Select CSV file -- Выберите CSV-файл -- -- -- New Database -- Новая база данных -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [новая база данных] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [заблокировано] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [только для чтения] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Не удалось открыть «%1», файл не существует или недоступен. -- -- -- Export database to HTML file -- Экспортировать базу данных в HTML файл -- -- -- HTML file -- HTML файл -- -- -- Writing the HTML file failed. -- Ошибка записи HTML файла. -- -- -- Export Confirmation -- Подтверждение экспортирования -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- При продолжении, будет выполнен экспорт базы данных в незашифрованный файл, что делает доступными содержащиеся в нём пароли и другие чувствительные данные. Продолжить экспортирование? -- -- -- Open OPVault -- Открыть OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Поиск... -- -- -- Do you really want to delete the entry "%1" for good? -- Удалить запись «%1» окончательно? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Переместить запись «%1» в корзину? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить записи (%n) в корзину? -- -- -- Execute command? -- Выполнить команду? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Выполнить следующую команду?<br><br>%1<br> -- -- -- Remember my choice -- Запомнить мой выбор -- -- -- Do you really want to delete the group "%1" for good? -- Удалить группу «%1» окончательно? -- -- -- No current database. -- Нет текущей базы данных. -- -- -- No source database, nothing to do. -- Нет исходной базы данных, нечего обрабатывать. -- -- -- Search Results (%1) -- Результаты поиска (%1) -- -- -- No Results -- Нет результатов -- -- -- File has changed -- Файл изменён -- -- -- The database file has changed. Do you want to load the changes? -- Файл базы данных был изменён. Загрузить изменения? -- -- -- Merge Request -- Запрос на слияние -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- База данных была изменена, есть несохранённые изменения. --Объединить изменения? -- -- -- Empty recycle bin? -- Очистить корзину? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Удалить всё из корзины? -- -- -- Do you really want to delete %n entry(s) for good? -- Вы действительно хотите удалить %n запись насовсем?Вы действительно хотите удалить %n записи насовсем?Вы действительно хотите удалить %n записей насовсем?Вы действительно хотите окончательно удалить записи (%n шт.)? -- -- -- Delete entry(s)? -- Удалить запись?Удалить записи?Удалить записи?Удалить записи? -- -- -- Move entry(s) to recycle bin? -- Переместить запись в корзину?Переместить записи в корзину?Переместить записи в корзину?Переместить записи в корзину? -- -- -- Lock Database? -- Заблокировать базу данных? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Вы сейчас редактируете запись. Отменить изменения и всё равно заблокировать? -- -- -- "%1" was modified. --Save changes? -- «%1» изменён. --Сохранить изменения? -- -- -- Database was modified. --Save changes? -- База данных была изменена. --Сохранить изменения? -- -- -- Save changes? -- Сохранить изменения? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Не удалось открыть новый файл базы данных при попытке автоматически загрузить повторно. --Ошибка: %1 -- -- -- Disable safe saves? -- Отключить безопасное сохранение? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC несколько раз не удалось сохранить базу данных. Это могло быть вызвано службами синхронизации файлов, блокирующими файл при сохранении. --Отключить безопасное сохранение и повторить попытку? -- -- -- Passwords -- Пароли -- -- -- Save database as -- Сохранить базу данных как -- -- -- KeePass 2 Database -- База данных KeePass 2 -- -- -- Replace references to entry? -- Заменить ссылки на запись? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Запись "%1" имеет %2 ссылку. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?Запись "%1" имеет %2 ссылки. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?Запись "%1" имеет %2 ссылок. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?У записи "%1" есть ссылки (%2 шт.). Хотите перезаписать ссылки значениями, пропустить эту запись или всё равно её удалить? -- -- -- Delete group -- Удалить группу -- -- -- Move group to recycle bin? -- Переместить группу в корзину? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Вы действительно хотите переместить группу "%1" в корзину? -- -- -- Successfully merged the database files. -- Файлы баз данных успешно объединены. -- -- -- Database was not modified by merge operation. -- База данных не была изменена операцией объединения. -- -- -- Shared group... -- Общая группа... -- -- -- Writing the database failed: %1 -- Ошибка при записи базы данных: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- База данных открыта в режиме только для чтения. Автосохраниение отключено. -- -- -- Save database backup -- Сохранить резервную копию базы -- -- -- Could not find database file: %1 -- Не удалось найти файл базы данных: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Запись -- -- -- Advanced -- Дополнительные -- -- -- Icon -- Значок -- -- -- Auto-Type -- Автоввод -- -- -- Properties -- Параметры -- -- -- History -- История -- -- -- SSH Agent -- SSH-агент -- -- -- n/a -- н/д -- -- -- (encrypted) -- (зашифровано) -- -- -- Select private key -- Выберите закрытый (личный) ключ -- -- -- Entry history -- История записи -- -- -- Add entry -- Добавить запись -- -- -- Edit entry -- Изменить запись -- -- -- New attribute -- Новый атрибут -- -- -- Are you sure you want to remove this attribute? -- Удалить этот атрибут? -- -- -- Tomorrow -- Завтра -- -- -- %n week(s) -- %n нед%n нед%n нед%n нед. -- -- -- %n month(s) -- %n месяц(-а)(-ев)%n месяц(-а)(-ев)%n месяц(-а)(-ев)%n мес. -- -- -- Entry updated successfully. -- Запись успешно обновлена. -- -- -- New attribute %1 -- Новый атрибут %1 -- -- -- %n year(s) -- %n год%n лет%n лет%n лет -- -- -- Confirm Removal -- Подтвердите удаление -- -- -- Browser Integration -- Интеграция с браузерами -- -- -- <empty URL> -- <Пустой URL> -- -- -- Are you sure you want to remove this URL? -- Удалить этот URL? -- -- -- Reveal -- Показать -- -- -- Hide -- Скрыть -- -- -- Unsaved Changes -- Несохраненные изменения -- -- -- Would you like to save changes to this entry? -- Сохранить внесённые изменения? -- -- -- [PROTECTED] Press Reveal to view or edit -- [ЗАЩИЩЕНО] Нажмите для восстановления или изменения -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Дополнительные атрибуты -- -- -- Add -- Создать -- -- -- Remove -- Удалить -- -- -- Edit Name -- Изменить имя -- -- -- Protect -- Защитить -- -- -- Reveal -- Показать -- -- -- Attachments -- Вложения -- -- -- Foreground Color: -- Основной цвет: -- -- -- Background Color: -- Цвет фона: -- -- -- Attribute selection -- Выбор атрибута -- -- -- Attribute value -- Значение атрибута -- -- -- Add a new attribute -- Добавить новый атрибут -- -- -- Remove selected attribute -- Удалить выбранный атрибут -- -- -- Edit attribute name -- Изменить имя атрибута -- -- -- Toggle attribute protection -- Включить или отключить защиту атрибута -- -- -- Show a protected attribute -- Показать защищённый атрибут -- -- -- Foreground color selection -- Выбор основного цвета -- -- -- Background color selection -- Выбор цвета фона -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>При включении, запись не появится в отчетах (например, Проверки безопасности или HIBP), даже если она не соответствует требованиям к качеству (энтропия, переиспользование). Можно включить этот параметр, если вы не можете контролировать этот пароль (например, 4-значные пин-кодыж), чтобы не засорять отчет.</p></body></html> -- -- -- Exclude from database reports -- Исключить из отчетов -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Включить автоввод для этой записи -- -- -- Window Associations -- Ассоциации окон -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Заголовок окна: -- -- -- Use a specific sequence for this association: -- Использовать специальную последовательность для этой ассоциации: -- -- -- Custom Auto-Type sequence -- Своя последовательность автоввода -- -- -- Open Auto-Type help webpage -- Открыть страницу справки по авто-вводу -- -- -- Existing window associations -- Существующие ассоциации с окнами -- -- -- Add new window association -- Добавить ассоциацию с окном -- -- -- Remove selected window association -- Удалить выбранную ассоциацию с окном -- -- -- You can use an asterisk (*) to match everything -- Для выбора всех значений используйте звёздочку (*) -- -- -- Set the window association title -- Задайте заголовок окна для ассоциации -- -- -- You can use an asterisk to match everything -- Для выбора всех значений используйте звёздочку (*) -- -- -- Custom Auto-Type sequence for this window -- Пользовательская последовательность автоввода для этого окна -- -- -- Inherit default Auto-Type sequence from the group -- Унаследовать стандартную последовательность автоввода от группы -- -- -- Use custom Auto-Type sequence: -- Использовать свою последовательность автоввода: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Эти параметры влияют на данные, возвращаемые при запросе из расширения браузера. -- -- -- General -- Общие -- -- -- Skip Auto-Submit for this entry -- Не использовать автоматическую отправку данных форм для этой записи -- -- -- Hide this entry from the browser extension -- Не показывать эту запись при запросе из расширения браузера -- -- -- Additional URL's -- Дополнительные URL-адреса -- -- -- Add -- Создать -- -- -- Remove -- Удалить -- -- -- Edit -- Изменить -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Отправлять эту настройку только браузерным диалогам для HTTP Auth. Если включено, обычные формы авторизации не покажут запись среди вариантов выбора. -- -- -- Use this entry only with HTTP Basic Auth -- Использовать эту запись только при обычной проверке подлинности HTTP -- -- -- -- EditEntryWidgetHistory -- -- Show -- Показать -- -- -- Restore -- Восстановить -- -- -- Delete -- Удалить -- -- -- Delete all -- Удалить всё -- -- -- Entry history selection -- Выбор истории записи -- -- -- Show entry at selected history state -- Показать запись в состоянии на выбранный момент истории -- -- -- Restore entry to selected history state -- Восстановить запись в состоянии на выбранный момент истории -- -- -- Delete selected history state -- Удалить выбранное состояние записи -- -- -- Delete all history -- Удалить всю историю -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL-адрес: -- -- -- Password: -- Пароль: -- -- -- Title: -- Название: -- -- -- Presets -- Предустановки -- -- -- Toggle the checkbox to reveal the notes section. -- Включите для отображения раздела примечаний. -- -- -- Username: -- Имя пользователя: -- -- -- Url field -- Поле URL-адреса -- -- -- Download favicon for URL -- Загрузить значок сайта для URL-адреса -- -- -- Password field -- Поле пароля -- -- -- Toggle notes visible -- Скрыть или показать заметку -- -- -- Expiration field -- Поле ввода окончания срока действия -- -- -- Expiration Presets -- Список предварительно заданных сроков действия -- -- -- Expiration presets -- Список предварительно заданных сроков действия -- -- -- Notes field -- Поле заметок -- -- -- Title field -- Поле названия -- -- -- Username field -- Поле имени пользователя -- -- -- Toggle expiration -- Использовать срок окончания действия -- -- -- Notes: -- Примечания: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Истекает: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Форма -- -- -- Remove key from agent after -- Убрать ключ из агента через -- -- -- seconds -- с -- -- -- Fingerprint -- Отпечаток -- -- -- Remove key from agent when database is closed/locked -- Убрать ключ из агента при закрытии/блокировке базы данных -- -- -- Public key -- Публичный ключ -- -- -- Add key to agent when database is opened/unlocked -- Добавить ключ в агент при открытии/разблокировке базы данных -- -- -- Comment -- Комментарий -- -- -- Decrypt -- Расшифровать -- -- -- n/a -- н/д -- -- -- Copy to clipboard -- Скопировать в буфер обмена -- -- -- Private key -- Закрытый (личный) ключ -- -- -- External file -- Внешний файл -- -- -- Browse... -- Button for opening file dialog -- Просмотр... -- -- -- Attachment -- Вложение -- -- -- Add to agent -- Добавить в агент -- -- -- Remove from agent -- Убрать из агента -- -- -- Require user confirmation when this key is used -- Требовать подтверждение при использовании этого ключа -- -- -- Remove key from agent after specified seconds -- Убрать ключ из агента по истечению заданного интервала времени -- -- -- Browser for key file -- Выбор файла-ключа -- -- -- External key file -- Внешний файл-ключ -- -- -- Select attachment file -- Выберите файл вложения -- -- -- -- EditGroupWidget -- -- Group -- Группа -- -- -- Icon -- Значок -- -- -- Properties -- Параметры -- -- -- Add group -- Добавить группу -- -- -- Edit group -- Править группу -- -- -- Enable -- Включено -- -- -- Disable -- Выключено -- -- -- Inherit from parent group (%1) -- Наследовать от родительской группы (%1) -- -- -- Entry has unsaved changes -- Запись содержит несохранённые изменения. -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Тип: -- -- -- Path: -- Путь: -- -- -- Password: -- Пароль: -- -- -- Inactive -- Неактивные -- -- -- KeeShare unsigned container -- Неподписанный контейнер KeeShare -- -- -- KeeShare signed container -- Подписанный контейнер KeeShare -- -- -- Select import source -- Выберите источник импорта -- -- -- Select export target -- Выберите место экспорта -- -- -- Select import/export file -- Выберите файл для импорта/экспорта -- -- -- Clear -- Очистить -- -- -- Import -- Импортируется -- -- -- Export -- Экспортируется -- -- -- Synchronize -- Синхронизируется -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Установленная версия KeePassXC не поддерживает совместное использование контейнера такого типа. Список поддерживаемых расширений: %1. -- -- -- %1 is already being exported by this database. -- %1 уже экспортируется этой базой данных. -- -- -- %1 is already being imported by this database. -- %1 уже импортируется этой базой данных. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 уже экспортируется и импортируется различными группами этой базы данных. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- Обмен записями KeeShare отключён. Включите возможность импорта и/или экспорта в параметрах приложения. -- -- -- Database export is currently disabled by application settings. -- Экспорт базы данных запрещён параметрами приложения. -- -- -- Database import is currently disabled by application settings. -- Импорт в базу данных запрещён параметрами приложения. -- -- -- Sharing mode field -- Поле состояния общего доступа -- -- -- Path to share file field -- Поле пути к общему файлу -- -- -- Password field -- Поле пароля -- -- -- Clear fields -- Очистить поля -- -- -- Browse for share file -- Выбрать общий файл -- -- -- Browse... -- Обзор… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Поле имени -- -- -- Notes field -- Поле заметок -- -- -- Toggle expiration -- Использовать срок окончания действия -- -- -- Auto-Type toggle for this and sub groups -- Включение или отключение автоввода для этой и вложенных групп -- -- -- Expiration field -- Поле ввода окончания срока действия -- -- -- Search toggle for this and sub groups -- Включение или отключение поиска для этой и вложенных групп -- -- -- Default auto-type sequence field -- Поле последовательности автоввода, используемой по умолчанию -- -- -- Expires: -- Истекает: -- -- -- Use default Auto-Type sequence of parent group -- &Использовать последовательность по умолчанию автоввода родительской группы -- -- -- Auto-Type: -- Автоввод: -- -- -- Search: -- Поиск: -- -- -- Notes: -- Примечания: -- -- -- Name: -- Имя: -- -- -- Set default Auto-Type sequence -- Задать последовательность автоввода по умолчанию -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Добавить свой значок -- -- -- Delete custom icon -- Удалить свой значок -- -- -- Download favicon -- Скачать значок сайта -- -- -- Unable to fetch favicon. -- Не удалось получить значок. -- -- -- Images -- Изображения -- -- -- All files -- Все файлы -- -- -- Confirm Delete -- Подтверждение удаления -- -- -- Select Image(s) -- Выбор изображения -- -- -- Successfully loaded %1 of %n icon(s) -- Успешно загружен %1 из %n значкаУспешно загружены %1 из %n значковУспешно загружены %1 из %n значковУспешно загружено значков: %1 из %n -- -- -- No icons were loaded -- Не загружено ни одного значка -- -- -- %n icon(s) already exist in the database -- %n значок уже существует в базе данных%n значка уже существуют в базе данных%n значков уже существуют в базе данныхЗначков, уже имеющихся в базе данных: %n -- -- -- The following icon(s) failed: -- Следующий значок потерпел неудачу:Следующие значки потерпели неудачу:Следующие значки потерпели неудачу:Ошибки в следующих значках: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Этот значок используется %n записью и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?Этот значок используется записями (%n), он будет замещён стандартным значком. Вы действительно хотите его удалить? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Возможно использовать службу поиска значков сайта DuckDuckGo в меню «Сервис» → «Параметры» → «Безопасность» -- -- -- Download favicon for URL -- Загрузить значок сайта для URL-адреса -- -- -- Apply selected icon to subgroups and entries -- Использовать выбранный значок для вложенных групп и записей -- -- -- Also apply to child groups -- Также применить к дочерним группам -- -- -- Also apply to child entries -- Также применить к дочерним записям -- -- -- Also apply to all children -- Также применить ко всем дочерним элементам -- -- -- Existing icon selected. -- Выбран существующий значок. -- -- -- Use default icon -- Использовать стандартный значок -- -- -- Use custom icon -- Использовать свой значок -- -- -- Apply icon to... -- Использовать выбранный значок для… -- -- -- Apply to this group only -- Использовать только для этой группы -- -- -- -- EditWidgetProperties -- -- Created: -- Создание: -- -- -- Modified: -- Изменение: -- -- -- Accessed: -- Доступ: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Данные плагинов -- -- -- Remove -- Удалить -- -- -- Delete plugin data? -- Удалить данные плагинов? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Вы действительно хотите удалить выбранные данные плагинов? --Это может привести к сбоям плагинов. -- -- -- Key -- Ключ -- -- -- Value -- Значение -- -- -- Datetime created -- Дата и время создания -- -- -- Datetime modified -- Дата и время изменения -- -- -- Datetime accessed -- Дата и время последнего использования -- -- -- Unique ID -- Уникальный ID -- -- -- Plugin data -- Данные подключаемого модуля -- -- -- Remove selected plugin data -- Удаление выбранных данных подключаемого модуля браузера -- -- -- -- Entry -- -- %1 - Clone -- %1 - клон -- -- -- -- EntryAttachmentsModel -- -- Name -- Имя -- -- -- Size -- Размер -- -- -- -- EntryAttachmentsWidget -- -- Form -- Форма -- -- -- Add -- Создать -- -- -- Remove -- Удалить -- -- -- Open -- Открыть -- -- -- Save -- Сохранить -- -- -- Select files -- Выберите файлы -- -- -- Are you sure you want to remove %n attachment(s)? -- Вы уверены, что вы хотите удалить %n вложения?Вы уверены, что вы хотите удалить %n вложения?Вы уверены, что вы хотите удалить %n вложения?Вы действительно хотите удалить вложения (%n шт.)? -- -- -- Save attachments -- Сохранить вложения -- -- -- Unable to create directory: --%1 -- Невозможно создать папку: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Вы действительно хотите перезаписать имеющийся файл "%1" с вложением? -- -- -- Confirm overwrite -- Подтвердите перезапись -- -- -- Unable to save attachments: --%1 -- Невозможно сохранить вложения: --%1 -- -- -- Unable to open attachment: --%1 -- Невозможно открыть вложение: --%1 -- -- -- Unable to open attachments: --%1 -- Невозможно открыть вложения: --%1 -- -- -- Confirm remove -- Подтвердите удаление -- -- -- Unable to open file(s): --%1 -- Не удалось открыть файл: --%1Не удалось открыть файлы: --%1Не удалось открыть файлы: --%1Невозможно открыть файл(ы): --%1 -- -- -- Attachments -- Вложения -- -- -- Add new attachment -- Добавить вложение -- -- -- Remove selected attachment -- Удалить выбранное вложение -- -- -- Open selected attachment -- Открыть выбранное вложение -- -- -- Save selected attachment to disk -- Сохранить выбранное вложение на диск -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- У файла «%1» очень большой размер (%2 МБ). --База данных увеличится в размере, что приведёт к замедлению её работы. -- --Продолжить добавление этого файла? -- -- -- Confirm Attachment -- Подтвердить вложение -- -- -- -- EntryAttributesModel -- -- Name -- Имя -- -- -- -- EntryHistoryModel -- -- Last modified -- Последнее изменение -- -- -- Title -- Имя записи -- -- -- Username -- Имя пользователя -- -- -- URL -- URL-адрес -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ссылка: -- -- -- Group -- Группа -- -- -- Title -- Имя записи -- -- -- Username -- Имя пользователя -- -- -- URL -- URL-адрес -- -- -- Never -- Никогда -- -- -- Password -- Пароль -- -- -- Notes -- Примечания -- -- -- Expires -- Истекает -- -- -- Created -- Создан -- -- -- Modified -- Изменение -- -- -- Accessed -- Доступ -- -- -- Attachments -- Вложения -- -- -- Size -- Размер -- -- -- Group name -- Название группы -- -- -- Entry title -- Название записи -- -- -- Entry notes -- Примечания записи -- -- -- Entry expires at -- Истечение записи -- -- -- Creation date -- Дата создания -- -- -- Last modification date -- Дата последнего изменения -- -- -- Last access date -- Дата последнего доступа -- -- -- Attached files -- Вложенные файлы -- -- -- Entry size -- Размер записи -- -- -- Has attachments -- Имеются вложения -- -- -- Has TOTP one-time password -- Используется временный одноразовый пароль -- -- -- -- EntryPreviewWidget -- -- Close -- Закрыть -- -- -- General -- Общие -- -- -- Username -- Логин -- -- -- Password -- Пароль -- -- -- Expiration -- Срок действия -- -- -- URL -- URL-адрес -- -- -- Attributes -- Атрибуты -- -- -- Attachments -- Вложения -- -- -- Notes -- Примечания -- -- -- Autotype -- Автоввод -- -- -- Window -- Окно -- -- -- Sequence -- Последовательность -- -- -- Searching -- Поиск -- -- -- Search -- Поиск -- -- -- Clear -- Очистить -- -- -- Never -- Никогда -- -- -- [PROTECTED] -- [ЗАЩИЩЕНО] -- -- -- Enabled -- Включено -- -- -- Disabled -- Отключено -- -- -- Share -- Предоставить общий доступ -- -- -- Display current TOTP value -- Показать текущее значение TOTP -- -- -- Advanced -- Расширенный режим -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Неверный URL -- -- -- -- EntryView -- -- Fit to window -- По размеру окна -- -- -- Fit to contents -- По размеру содержимого -- -- -- Reset to defaults -- Сброс в стандартные значения -- -- -- Has attachments -- Entry attachment icon toggle -- Имеются вложения -- -- -- Has TOTP -- Entry TOTP icon toggle -- Использует TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Запись «%1» из базы данных «%2» использована %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Не удалось зарегистрировать службу DBus на %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n запись использована %1%n записи использованы %1%n записей использованы %1%n записи использованы %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Имя файла -- -- -- Group -- Группа -- -- -- Manage -- Управление -- -- -- Unlock to show -- Разблокируйте для просмотра -- -- -- None -- Нет -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Приложение -- -- -- Manage -- Управление -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>FDO Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Неизвестен -- -- -- Unknown -- Unknown executable path -- Неизвестен -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>ID процесса: %1, исполняемый файл: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Запущен другой Secret Service (%1)<br/>Пожалуйста отключите/удалите его перед тем как включать интеграцию с ним. -- -- -- -- Group -- -- [empty] -- group has no children -- [пусто] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Не удалось проверить пароли онлайн -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Получение значков сайтов -- -- -- Cancel -- Отмена -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Не удалось получить значки сайтов? --В разделе «Конфиденциальность» вкладки «Безопасность» параметров приложения возможно включить использование службы значков сайта DuckDuckGo. -- -- -- Close -- Закрыть -- -- -- URL -- URL-адрес -- -- -- Status -- Статус -- -- -- Please wait, processing entry list... -- Дождитесь окончания обработки списка записей… -- -- -- Downloading... -- Загрузка... -- -- -- Ok -- OK -- -- -- Already Exists -- Уже существует -- -- -- Download Failed -- Ошибка загрузки -- -- -- Downloading favicons (%1/%2)... -- Получение значков (%1 из %2)… -- -- -- -- KMessageWidget -- -- &Close -- &Закрыть -- -- -- Close message -- Закрыть сообщение -- -- -- -- Kdbx3Reader -- -- missing database headers -- отсутствуют заголовки базы данных -- -- -- Header doesn't match hash -- Заголовок не соответствует хешу -- -- -- Invalid header id size -- Недопустимый размер идентификатора заголовка -- -- -- Invalid header field length -- Недопустимая длина поля заголовка -- -- -- Invalid header data length -- Недопустимая длина данных заголовка -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Вероятно, для входа были указанные неверные данные. --Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. -- -- -- Unable to calculate database key -- Не удалось вычислить ключ базы данных -- -- -- Unable to issue challenge-response: %1 -- Не удалось выполнить вызов-ответ: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Не удалось выполнить вызов-ответ: %1 -- -- -- Unable to calculate database key -- Не удалось вычислить ключ базы данных -- -- -- -- Kdbx4Reader -- -- missing database headers -- отсутствуют заголовки базы данных -- -- -- Invalid header checksum size -- Недопустимый размер контрольной суммы заголовка -- -- -- Header SHA256 mismatch -- Несоответствие SHA256 заголовка -- -- -- Unknown cipher -- Неизвестный шифр -- -- -- Invalid header id size -- Недопустимый размер идентификатора заголовка -- -- -- Invalid header field length -- Недопустимая длина поля заголовка -- -- -- Invalid header data length -- Недопустимая длина данных заголовка -- -- -- Failed to open buffer for KDF parameters in header -- Не удалось открыть буфер для параметров ФФК в заголовке -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Функция формирования ключа (ФФК) не поддерживается, либо неверные параметры -- -- -- Legacy header fields found in KDBX4 file. -- В файле KDBX4 обнаружены устаревшие поля заголовков. -- -- -- Invalid inner header id size -- Недопустимый внутренний идентификатор заголовка -- -- -- Invalid inner header field length -- Недопустимая длина поля внутреннего заголовка -- -- -- Invalid inner header binary size -- Недопустимый двоичный размер внутреннего заголовка -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Неподдерживаемая версия структуры метаданных KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина имени структуры метаданных -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Недопустимое имя для структуры метаданных -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимое значение длины записи в структуре метаданных -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Недопустимые значения структуры метаданных -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина логического значения в структуре метаданных -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина Int32 значения в структуре метаданных -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина UInt32 значения в структуре метаданных -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина Int64 значения в структуре метаданных -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Недопустимая длина UInt64 значения в структуре метаданных -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Недопустимый тип записи в структуре метаданных -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Недопустимый размер поля поля в структуре метаданных -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Вероятно, для входа были указанные неверные данные. --Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. -- -- -- (HMAC mismatch) -- (несоответствие HMAC) -- -- -- Unable to calculate database key: %1 -- Не удалось вычислить ключ базы данных: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Недопустимый симметричный алгоритм шифрования. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Недопустимый размер симметричного шифра IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Ошибка сериализации ФФК параметров структуры матаданных -- -- -- Unable to calculate database key: %1 -- Не удалось вычислить ключ базы данных: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Неподдерживаемый шифр -- -- -- Invalid compression flags length -- Недопустимая длина флагов сжатия -- -- -- Unsupported compression algorithm -- Неподдерживаемый алгоритм сжатия -- -- -- Invalid master seed size -- Недопустимый размер основного seed -- -- -- Invalid transform seed size -- Недопустимый размер seed для преобразования -- -- -- Invalid transform rounds size -- Недопустимый размер цикла преобразования -- -- -- Invalid start bytes size -- Недопустимый начальный размер байт -- -- -- Invalid random stream id size -- Недопустимый размер индентификатора случайного потока -- -- -- Invalid inner random stream cipher -- Недопустимый шифр случайного внутреннего потока -- -- -- Not a KeePass database. -- Не база данных KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Выбран файл старой базы данных KeePass 1 (.kdb). -- --Вы можете импортировать его, нажав «База данных -> Импорт базы данных KeePass 1...». --Это необратимая процедура: импортированную базу нельзя будет открыть в старой версии KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Неподдерживаемая версия базы данных KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Неверная длина UUID шифра: %1 (длина=%2) -- -- -- Unable to parse UUID: %1 -- Не удается выполнить разбор UUID: %1 -- -- -- Failed to read database file. -- Не удалось прочитать файл базы данных. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Ошибка разбора XML: %1 -- -- -- No root group -- Нет корневой группы -- -- -- Missing icon uuid or data -- Нет UUID значка или данных -- -- -- Missing custom data key or value -- Нет ключа пользовательских данных или значения -- -- -- Multiple group elements -- Несколько элементов группы -- -- -- Null group uuid -- UUID для группы NULL -- -- -- Invalid group icon number -- Недопустимый номер значка группы -- -- -- Invalid EnableAutoType value -- Недопустимое значение EnableAutoType -- -- -- Invalid EnableSearching value -- Недопустимое значение EnableSearching -- -- -- No group uuid found -- Нет UUID группы -- -- -- Null DeleteObject uuid -- UUID DeleteObject Null -- -- -- Missing DeletedObject uuid or time -- Нет UUID или времени для DeletedObject -- -- -- Null entry uuid -- UUID для записи Null -- -- -- Invalid entry icon number -- Недопустимый номер значка записи -- -- -- History element in history entry -- Элемент истории в истории записи -- -- -- No entry uuid found -- Нет UUID для записи -- -- -- History element with different uuid -- Элемент истории с отличающимся UUID -- -- -- Duplicate custom attribute found -- Обнаружен повторяющиеся пользовательский атрибут -- -- -- Entry string key or value missing -- Нет ключа или значения записи -- -- -- Entry binary key or value missing -- Нет двоичного ключа или значения записи -- -- -- Auto-type association window or sequence missing -- Нет окна или последовательности для автоввода -- -- -- Invalid bool value -- Недопустимое логическое значение -- -- -- Invalid date time value -- Недопустимое значение даты/времени -- -- -- Invalid color value -- Недопустимое значение цвета -- -- -- Invalid color rgb part -- Недопустимое значение части цвета RGB -- -- -- Invalid number value -- Недопустимое числовое значение -- -- -- Invalid uuid value -- Недопустимое значение UUID -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Невозможно распаковать двоичные данные -- -- -- XML error: --%1 --Line %2, column %3 -- Ошибка XML: --%1 --Строка %2, столбец %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Неверная структура файла параметров KeeAgent -- -- -- Private key is an attachment but no attachments provided. -- Закрытый ключ — это вложение, но вложенные файлы отсутствуют. -- -- -- Private key is empty -- Закрытый ключ не содержит данных -- -- -- File too large to be a private key -- Слишком большой файл для закрытого ключа -- -- -- Failed to open private key -- Не удалось открыть закрытый ключ -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Невозможно открыть базу данных. -- -- -- Import KeePass1 Database -- Импортировать базу данных в формате KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Невозможно прочитать файл-ключ. -- -- -- Not a KeePass database. -- Не база данных KeePass. -- -- -- Unsupported encryption algorithm. -- Алгоритм шифрования не поддерживается. -- -- -- Unsupported KeePass database version. -- Версия базы данных KeePass не поддерживается. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Невозможно прочитать шифрование IV -- -- -- Invalid number of groups -- Недопустимое количество групп -- -- -- Invalid number of entries -- Недопустимое количество записей -- -- -- Invalid content hash size -- Недопустимый размер хеша содержимого -- -- -- Invalid transform seed size -- Недопустимый размер seed для преобразования -- -- -- Invalid number of transform rounds -- Недопустимое число циклов преобразования -- -- -- Unable to construct group tree -- Не удалось создать дерево групп -- -- -- Root -- Корень -- -- -- Key transformation failed -- Не удалось выполнить преобразование ключа -- -- -- Invalid group field type number -- Недопустимый тип поля группы -- -- -- Invalid group field size -- Недопустимый размер поля группы -- -- -- Read group field data doesn't match size -- Не соответствует размер области данных группы -- -- -- Incorrect group id field size -- Неверный размер поля идентификатора группы -- -- -- Incorrect group creation time field size -- Неверный размер поля времени создания группы -- -- -- Incorrect group modification time field size -- Неверный размер поля времени изменения группы -- -- -- Incorrect group access time field size -- Неверный размер поля времени доступа к группе -- -- -- Incorrect group expiry time field size -- Неверный размер поля времени истечения срока действия группы -- -- -- Incorrect group icon field size -- Неверный размер поля значка группы -- -- -- Incorrect group level field size -- Неверный размер поля уровня группы -- -- -- Invalid group field type -- Недопустимый тип поля группы -- -- -- Missing group id or level -- Нет группового идентификатора или уровня -- -- -- Missing entry field type number -- Нет номера типа поля записи -- -- -- Invalid entry field size -- Неверный размер поля записи -- -- -- Read entry field data doesn't match size -- Поля данных записи не соответствуют размеру -- -- -- Invalid entry uuid field size -- Неверный размер поля UUID записи -- -- -- Invalid entry group id field size -- Недопустимый размер поля идентификатора записи группы -- -- -- Invalid entry icon field size -- Недопустимый размер поля значка записи -- -- -- Invalid entry creation time field size -- Недопустимный размер поля времени создания записи -- -- -- Invalid entry modification time field size -- Недопустимый размер поля изменения даты ввода -- -- -- Invalid entry expiry time field size -- Недопустимый размер поля времени срока действия -- -- -- Invalid entry field type -- Недопустимый тип поля записи -- -- -- unable to seek to content position -- не удалось переместиться к позиции содержимого -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Вероятно, для входа были указанные неверные данные. --Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. -- -- -- Unable to calculate database key -- Не удалось вычислить ключ базы данных -- -- -- -- KeeShare -- -- Invalid sharing reference -- Неверная ссылка общего доступа -- -- -- Inactive share %1 -- Неактивная общая база %1 -- -- -- Imported from %1 -- Импортировано из %1 -- -- -- Exported to %1 -- Выполнен экспорт в «%1» -- -- -- Synchronized with %1 -- Синхронизировано с «%1» -- -- -- Import is disabled in settings -- Возможность импортировать отключена в параметрах программы -- -- -- Export is disabled in settings -- Возможность экспорировать отключена в параметрах программы -- -- -- Inactive share -- Неактивная общая база -- -- -- Imported from -- Импортировано из -- -- -- Exported to -- Экспортировано в -- -- -- Synchronized with -- Синхронизировано с -- -- -- -- KeyComponentWidget -- -- Key Component -- Ключевой компонент -- -- -- Key Component Description -- Описание ключевого компонента -- -- -- Cancel -- Отмена -- -- -- Key Component set, click to change or remove -- Ключевой компонент установлен, нажмите, чтобы изменить или удалить -- -- -- Add %1 -- Add a key component -- Добавить %1 -- -- -- Change %1 -- Change a key component -- Изменить %1 -- -- -- Remove %1 -- Remove a key component -- Удалить %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 установлен, нажмите, чтобы изменить или удалить -- -- -- -- KeyFileEditWidget -- -- Generate -- Генерировать -- -- -- Key File -- Файл-ключ -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Для большей безопасности вы можете добавить файл-ключ со случайным содержимым.</p><p>Храните его в надёжном месте и не теряйте, иначе доступ к базе будет заблокирован.</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Ошибка загрузки ключевого файла '%1' --Сообщение: %2 -- -- -- Key files -- Файлы-ключи -- -- -- All files -- Все файлы -- -- -- Create Key File... -- Создать файл-ключ… -- -- -- Error creating key file -- Ошибка создания файла-ключа -- -- -- Unable to create key file: %1 -- Невозможно создать файл-ключ: %1 -- -- -- Select a key file -- Выберите файл-ключ -- -- -- Key file selection -- Выбор файла-ключа -- -- -- Browse for key file -- Открыть диалога выбора файла-ключа -- -- -- Browse... -- Обзор… -- -- -- Generate a new key file -- Создать новый файл-ключ -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Внимание: изменение файла приведёт к невозможности разблокировать базу данных! -- -- -- Invalid Key File -- Неверный файл-ключ -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Файл базы данных не может быть использован в качестве файла-ключа. Выберите другой файл или создайте файл-ключ. -- -- -- Suspicious Key File -- Подозрительный файл-ключ -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Выбранный файл-ключ, вероятно, является файлом базы данных паролей. Файл-ключ должен являться неизменяемым файлом, в противном случае доступ к базе данных будет безвозвратно утерян. --Продолжить использовать выбранный файл? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &База данных -- -- -- &Help -- &Справка -- -- -- &Groups -- &Группы -- -- -- &Tools -- Серв&ис -- -- -- &Quit -- В&ыход -- -- -- &About -- &О программе -- -- -- Database settings -- Параметры базы данных -- -- -- Copy username to clipboard -- Скопировать логин в буфер обмена -- -- -- Copy password to clipboard -- Скопировать пароль в буфер обмена -- -- -- &Settings -- &Параметры -- -- -- &Title -- Назван&ие -- -- -- Copy title to clipboard -- Скопировать название в буфер обмена -- -- -- &URL -- &URL-адрес -- -- -- Copy URL to clipboard -- Скопировать URL-адрес в буфер обмена -- -- -- &Notes -- &Примечания -- -- -- Copy notes to clipboard -- Скопировать примечания в буфер обмена -- -- -- Copy &TOTP -- Скопировать &TOTP -- -- -- E&mpty recycle bin -- О&чистить корзину -- -- -- Clear history -- Очистить историю -- -- -- Access error for config file %1 -- Ошибка доступа к файлу конфигурации %1 -- -- -- Settings -- Параметры -- -- -- Toggle window -- Переключить окно -- -- -- Quit KeePassXC -- Закрыть KeePassXC -- -- -- Please touch the button on your YubiKey! -- Нажмите кнопку на YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- ВНИМАНИЕ: Используется нестабильная сборка KeePassXC! --Весьма вероятно повреждение базы данных, сделайте её резервную копию. --Эта версия не предназначена для повседневного использования. -- -- -- &Donate -- &Пожертвовать -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- ВНИМАНИЕ: Ваша версия Qt может привести к сбоям KeePassXC при работе с экранной клавиатурой! --Рекомендуем использовать AppImage (см. нашу страницу загрузок). -- -- -- &Import -- &Импорт -- -- -- Create a new database -- Создать новую базу данных -- -- -- Merge from another KDBX database -- Объединить с другой базой данных KDBX -- -- -- Add a new entry -- Добавить новую запись -- -- -- View or edit entry -- Показать/изменить запись -- -- -- Add a new group -- Добавить новую группу -- -- -- Perform &Auto-Type -- Выполнить а&втоввод -- -- -- Open &URL -- Открыть &URL -- -- -- Import a KeePass 1 database -- Импортировать базу данных KeePass 1 -- -- -- Import a CSV file -- Импортировать файл CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- ВНИМАНИЕ: Вы используете бета-версию KeePassXC! --В ней возможны ошибки и небольшие проблемы, она не предназначена для основного применения. -- -- -- Check for updates on startup? -- Проверять обновления при запуске? -- -- -- Would you like KeePassXC to check for updates on startup? -- Хотите проверять обновления KeePassXC при запуске? -- -- -- You can always check for updates manually from the application menu. -- Проверять наличие обновлений можно вручную из меню приложения. -- -- -- &Export -- &Экспорт -- -- -- Sort &A-Z -- Сортировать &А-Я -- -- -- Sort &Z-A -- Сортировать &Я-А -- -- -- &Password Generator -- &Генератор паролей -- -- -- Import a 1Password Vault -- Импортировать хранилище 1Password -- -- -- &Getting Started -- &Начало работы -- -- -- &User Guide -- &Руководство пользователя -- -- -- &Keyboard Shortcuts -- &Комбинации клавиш -- -- -- &Recent Databases -- &Недавние базы данных -- -- -- &Entries -- &Записи -- -- -- Copy Att&ribute -- Скопировать ат&рибут -- -- -- TOTP -- TOTP -- -- -- View -- Вид -- -- -- Theme -- Оформление -- -- -- &Check for Updates -- &Проверить обновления -- -- -- &Open Database… -- &Открыть базу данных… -- -- -- &Save Database -- &Сохранить базу данных -- -- -- &Close Database -- &Закрыть базу данных -- -- -- &New Database… -- Со&здать базу даннных… -- -- -- &Merge From Database… -- Объе&динить с другой базой данных... -- -- -- &New Entry… -- &Создать запись… -- -- -- &Edit Entry… -- &Изменить запись… -- -- -- &Delete Entry… -- &Удалить запись… -- -- -- &New Group… -- &Создать группу… -- -- -- &Edit Group… -- &Изменить группу… -- -- -- &Delete Group… -- &Удалить группу… -- -- -- Download All &Favicons… -- Загрузить &значки сайтов для всех записей… -- -- -- Sa&ve Database As… -- &Сохранить базу данных как… -- -- -- Database &Security… -- &Безопаснось базы данных… -- -- -- Database &Reports... -- &Отчёты по базе данных… -- -- -- Statistics, health check, etc. -- Статистика, проверка безопасности… -- -- -- &Database Settings… -- Параметры базы данных… -- -- -- &Clone Entry… -- &Клонировать запись… -- -- -- Move u&p -- Переместить &выше -- -- -- Move entry one step up -- Переместить запись выше на одну позицию -- -- -- Move do&wn -- Переместить &ниже -- -- -- Move entry one step down -- Переместить запись ниже на одну позицию -- -- -- Copy &Username -- Скопировать &имя пользователя -- -- -- Copy &Password -- Скопировать п&ароль -- -- -- Download &Favicon -- Загрузить &значок сайта -- -- -- &Lock Databases -- &Заблокировать базу данных -- -- -- &CSV File… -- Файл &CSV... -- -- -- &HTML File… -- Файл &HTML… -- -- -- KeePass 1 Database… -- База данных KeePass 1… -- -- -- 1Password Vault… -- Хранилище 1Password… -- -- -- CSV File… -- Файл &CSV... -- -- -- Show TOTP -- Показать TOTP -- -- -- Show QR Code -- Показать QR-код -- -- -- Set up TOTP… -- Настроить TOTP… -- -- -- Report a &Bug -- Сообщить об &ошибке -- -- -- Open Getting Started Guide -- Открыть руководство по началу работы -- -- -- &Online Help -- Справка в &интернете -- -- -- Go to online documentation -- Перейти к онлайн документации -- -- -- Open User Guide -- Открыть руководство пользователя -- -- -- Save Database Backup... -- Сохранить резервную копию базы… -- -- -- Add key to SSH Agent -- Добавить ключ к SSH-агент -- -- -- Remove key from SSH Agent -- Убрать ключ из агента SSH -- -- -- Compact Mode -- Компактный режим -- -- -- Automatic -- Автоматически -- -- -- Light -- Светлая -- -- -- Dark -- Темная -- -- -- Classic (Platform-native) -- Классическая (платформо-зависимая) -- -- -- Show Toolbar -- Показать панель инструментов -- -- -- Show Preview Panel -- Показывать панель предварительного просмотра -- -- -- Don't show again for this version -- Не показывать предупреждение для этой версии -- -- -- Restart Application? -- Перезапустить приложение? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Требуется перезапуск приложения для применения этого параметра. Выполнить перезапуск сейчас? -- -- -- Perform Auto-Type Sequence -- Выполнить последовательность автоматического ввода -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Скрыть логины -- -- -- Hide Passwords -- Скрыть пароли -- -- -- -- ManageDatabase -- -- Database settings -- Параметры базы данных -- -- -- Edit database settings -- Редактирование параметров базы данных -- -- -- Unlock database -- Разблокировать базу данных -- -- -- Unlock database to show more information -- Разблокируйте базу данных для просмотра дополнительных сведений -- -- -- Lock database -- Заблокировать базу данных -- -- -- -- ManageSession -- -- Disconnect -- Отключить -- -- -- Disconnect this application -- Отключить это приложение -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Создание отсутствующей %1 [%2] -- -- -- Relocating %1 [%2] -- Перемещение %1 [%2] -- -- -- Overwriting %1 [%2] -- Перезапись %1 [%2] -- -- -- older entry merged from database "%1" -- более старая запись из базы данных "%1" -- -- -- Adding backup for older target %1 [%2] -- Добавление резервной копии для более старой цели %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Добавление резервной копии для более старого источника %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Повторное применение более старой целевой записи поверх более нового источника %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Повторное применение более старой исходной записи поверх более новой целевой записи %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Синхронизация с более новым источником %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Синхронизация с более старым источником %1 [%2] -- -- -- Deleting child %1 [%2] -- Удаление дочерней записи %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Удаление «осиротевшей» записи %1 [%2] -- -- -- Changed deleted objects -- Изменены удалённые объекты -- -- -- Adding missing icon %1 -- Добавление отсутствующего значка %1 -- -- -- Removed custom data %1 [%2] -- Пользовательские данные %1 [%2] удалены -- -- -- Adding custom data %1 [%2] -- Добавление пользовательских данные %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Создать новую базу данных KeePassXC -- -- -- Root -- Root group -- Корень -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Страница мастера -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Здесь можно настроить параметры шифрования базы данных. Их можно будет изменить позже в настройках базы данных. -- -- -- Advanced Settings -- Дополнительные параметры -- -- -- Simple Settings -- Простые настройки -- -- -- Encryption Settings -- Параметры шифрования -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Доступ к базе данных -- -- -- A set of credentials known only to you that protects your database. -- Известные только вам реквизиты для входа, защищающие базу данных. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Параметры шифрования -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Здесь можно настроить параметры шифрования базы данных. Их можно будет изменить позже в настройках базы данных. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Общая информация о базе данных -- -- -- Please fill in the display name and an optional description for your new database: -- Заполните отображаемое имя и, при желании, описание новой базы данных: -- -- -- -- NixUtils -- -- Password Manager -- Менеджер паролей -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Данные OpData01 не содержат заголовка -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Невозможно считать все данные вектора инициализации: ожидалось 16 байт, но получено %1 байт -- -- -- Unable to init cipher for opdata01: %1 -- Невозможно инициализировать шифрование для данных opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Не удалось полностью считать данные подписи HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- Повреждённые данные OpData01 по причине неверного HMAC -- -- -- Unable to process clearText in place -- Невозможно обработать простой текст -- -- -- Expected %1 bytes of clear-text, found %2 -- Ожидалось %1 байт простого текста, найдено %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Невозможно создать базу данных из прочитанного файла --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Не найден каталог «.opvault» -- -- -- Directory .opvault must be readable -- Каталог «.opvault» не доступен для чтения -- -- -- Directory .opvault/default must exist -- Не найден каталог «.opvault/default» -- -- -- Directory .opvault/default must be readable -- Каталог «.opvault/default» не доступен для чтения -- -- -- Unable to decode masterKey: %1 -- Не удалось декодировать основной ключ: %1 -- -- -- Unable to derive master key: %1 -- Не удалось извлечь мастер-ключ: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Недопустимый файл-ключ, ожидается ключ OpenSSH -- -- -- PEM boundary mismatch -- Несоответствие границ PEM -- -- -- Base64 decoding failed -- Ошибка декодирования Base64 -- -- -- Key file way too small. -- Файл-ключ слишком мал. -- -- -- Key file magic header id invalid -- Недопустимый идентификатор заголовка файла-ключа. -- -- -- Found zero keys -- Обнаружены пустые ключи -- -- -- Failed to read public key. -- Ошибка чтения открытого (публичного) ключа. -- -- -- Corrupted key file, reading private key failed -- Файл-ключ повреждён, ошибка чтения закрытого (личного) ключа -- -- -- No private key payload to decrypt -- Нет данных для расшифровки в закрытом (личном) ключе -- -- -- Trying to run KDF without cipher -- Попытка запустить ФФК без шифрования -- -- -- Passphrase is required to decrypt this key -- Для расшифровки этого ключа требуется пароль -- -- -- Key derivation failed, key file corrupted? -- Ошибка формирования ключа, возможно, повреждён файл-ключ. -- -- -- Decryption failed, wrong passphrase? -- Ошибка расшифровки, неверный пароль? -- -- -- Unexpected EOF while reading public key -- Неожиданный конец файла при чтении открытого (публичного) ключа -- -- -- Unexpected EOF while reading private key -- Неожиданный конец файла при чтении закрытого (личного) ключа -- -- -- Can't write public key as it is empty -- Невозможно записать открытый (публичный) ключ, так как он пуст -- -- -- Unexpected EOF when writing public key -- Неожиданный конец файла при записи открытого (публичного) ключа -- -- -- Can't write private key as it is empty -- Невозможно записать закрытый (личный) ключ, так как он пуст -- -- -- Unexpected EOF when writing private key -- Неожиданный конец файла при записи закрытого (личного) ключа -- -- -- Unsupported key type: %1 -- Неподдерживаемый тип ключа: %1 -- -- -- Unknown cipher: %1 -- Неподдерживаемый шифр: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Слишком короткий вектор инициализации (IV) для MD5 ФФК -- -- -- Unknown KDF: %1 -- Неизвестная ФФК: %1 -- -- -- Unknown key type: %1 -- Неизвестный тип ключа: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Пароли не совпадают -- -- -- Passwords match so far -- Количество совпавших паролей -- -- -- Toggle Password (%1) -- Скрыть или показать пароль (%1) -- -- -- Generate Password (%1) -- Сгенерировать пароль (%1) -- -- -- Warning: Caps Lock enabled! -- Внимание: включен режим CAPS LOCK. -- -- -- -- PasswordEditWidget -- -- Enter password: -- Введите пароль: -- -- -- Confirm password: -- Подтвердите пароль: -- -- -- Password -- Пароль -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Пароль - это основной метод защиты базы данных.</p><p>Хороший пароль должен быть длинным и уникальным. KeePassXC может сгенерировать его сам.</p> -- -- -- Passwords do not match. -- Пароли не совпадают. -- -- -- Password field -- Поле пароля -- -- -- Repeat password field -- Поле повтора пароля -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- надёжность -- -- -- entropy -- энтропия -- -- -- Password -- Пароль -- -- -- Character Types -- Виды символов -- -- -- Numbers -- Цифры -- -- -- Extended ASCII -- Расширенный ASCII -- -- -- Exclude look-alike characters -- Не использовать визуально схожие символы -- -- -- Pick characters from every group -- Подобрать символы из каждой группы -- -- -- &Length: -- &Длина: -- -- -- Passphrase -- Парольная фраза -- -- -- Wordlist: -- Список слов: -- -- -- Word Separator: -- Разделитель слов: -- -- -- Close -- Закрыть -- -- -- Entropy: %1 bit -- Энтропия: %1 бит -- -- -- Password Quality: %1 -- Качество пароля: %1 -- -- -- Poor -- Password quality -- Плохой -- -- -- Weak -- Password quality -- Слабый -- -- -- Good -- Password quality -- Хороший -- -- -- Excellent -- Password quality -- Отличный -- -- -- Switch to advanced mode -- В расширенный режим -- -- -- Advanced -- Дополнительно -- -- -- Braces -- Скобки -- -- -- Punctuation -- Знаки препинания -- -- -- Quotes -- Кавычки -- -- -- Logograms -- Логограммы -- -- -- Character set to exclude from generated password -- Набор символов для исключения из сгенерированного пароля -- -- -- Do not include: -- Не включать: -- -- -- Add non-hex letters to "do not include" list -- Добавить не-шестнадцатеричные буквы к списку исключений -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Исключить символы: «0», «1», «l», «I», «O», «|», «﹒» -- -- -- Generated password -- Сгенерированный пароль -- -- -- Upper-case letters -- Большие буквы -- -- -- Lower-case letters -- Маленькие буквы -- -- -- Special characters -- Специальные символы -- -- -- Math Symbols -- Математические символы -- -- -- Dashes and Slashes -- Тире и слэши -- -- -- Excluded characters -- Исключенные символы -- -- -- Hex Passwords -- Hex пароли -- -- -- Password length -- Длина пароля -- -- -- Word Case: -- Регистр слов: -- -- -- Regenerate password -- Создать пароль заново -- -- -- Copy password -- Скопировать пароль -- -- -- lower case -- нижний регистр -- -- -- UPPER CASE -- ВЕРХНИЙ РЕГИСТР -- -- -- Title Case -- Каждое Слово С Заглавной Буквы -- -- -- Generate Password -- Создать пароль -- -- -- Also choose from: -- Дополнительные символы: -- -- -- Additional characters to use for the generated password -- Дополнительные символы -- -- -- Additional characters -- Дополнительные символы -- -- -- Word Count: -- Количество слов: -- -- -- Esc -- Esc -- -- -- Apply Password -- Использовать пароль -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Создать заново (%1) -- -- -- Special Characters -- Специальные символы -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Статистика -- -- -- Very weak password -- Очень слабый пароль -- -- -- Password entropy is %1 bits -- Энтропия пароля: %1 бит -- -- -- Weak password -- Слабый пароль -- -- -- Used in %1/%2 -- Используется в %1/%2 -- -- -- Password is used %1 times -- Пароль используется %1 раз(а) -- -- -- Password has expired -- Истёк срок действия пароля -- -- -- Password expiry was %1 -- Срок действия пароля истёк %1 -- -- -- Password is about to expire -- Срок действия пароля скоро истечёт -- -- -- Password expires in %1 days -- Срок действия пароля истечёт через %1 дня (дней). -- -- -- Password will expire soon -- Срок действия пароля скоро истечёт -- -- -- Password expires on %1 -- Срок действия пароля истекает %1 -- -- -- Health Check -- Проверка безопасности -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Перезапись -- -- -- Delete -- Удалить -- -- -- Move -- Переместить -- -- -- Empty -- Удалить -- -- -- Remove -- Удалить -- -- -- Skip -- Пропустить -- -- -- Disable -- Выключено -- -- -- Merge -- Слияние -- -- -- Continue -- Продолжить -- -- -- -- QObject -- -- Database not opened -- База данных не открыта -- -- -- Database hash not available -- Отсутствует хеш базы данных -- -- -- Client public key not received -- Не получен открытый (публичный) ключ клиента -- -- -- Cannot decrypt message -- Невозможно расшифровать сообщение -- -- -- Action cancelled or denied -- Действие отменено или запрещено -- -- -- KeePassXC association failed, try again -- Ассоциирование KeePassXC не выполнено, попробуйте ещё раз -- -- -- Encryption key is not recognized -- Не распознан ключ шифрования -- -- -- Incorrect action -- Неправильное действие -- -- -- Empty message received -- Получено пустое сообщение -- -- -- No URL provided -- Нет URL-адреса -- -- -- No logins found -- Логины не найдены -- -- -- Unknown error -- Неизвестная ошибка -- -- -- Add a new entry to a database. -- Добавить новую запись в базу данных. -- -- -- Path of the database. -- Путь к базе данных. -- -- -- Key file of the database. -- Файл-ключ базы данных. -- -- -- path -- путь -- -- -- Username for the entry. -- Логин для записи. -- -- -- username -- логин -- -- -- URL for the entry. -- URL-адрес для записи -- -- -- URL -- URL-адрес -- -- -- Prompt for the entry's password. -- Введите пароль записи. -- -- -- Generate a password for the entry. -- Сгенерировать пароль для записи. -- -- -- length -- длина -- -- -- Path of the entry to add. -- Путь к записи для добавления. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Скопировать путь к записи. -- -- -- Timeout in seconds before clearing the clipboard. -- Время ожидания в секундах до очистки буфера обмена. -- -- -- Edit an entry. -- Редактирование записи. -- -- -- Title for the entry. -- Название записи. -- -- -- title -- название -- -- -- Path of the entry to edit. -- Путь к записи для редактирования. -- -- -- Estimate the entropy of a password. -- Оценка энтропии пароля. -- -- -- Password for which to estimate the entropy. -- Пароль для оценки энтропии. -- -- -- Perform advanced analysis on the password. -- Выполнить расширенный анализ пароля. -- -- -- -- --Available commands: -- -- -- --Доступные команды: -- -- -- -- Name of the command to execute. -- Имя выполняемой команды. -- -- -- List database entries. -- Список записей в базе данных. -- -- -- Path of the group to list. Default is / -- Путь к списку группы. Значение по умолчанию / -- -- -- Find entries quickly. -- Быстрый поиск записей. -- -- -- Search term. -- Поисковый запрос. -- -- -- Merge two databases. -- Объединить две базы данных. -- -- -- Path of the database to merge from. -- Путь к базе-источнику для объединения. -- -- -- Use the same credentials for both database files. -- Используйте те же учетные данные для обоих файлов базы данных. -- -- -- Key file of the database to merge from. -- Ключевой файл базы данных для объединения. -- -- -- Show an entry's information. -- Показать сведения о записях. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Имена атрибутов для отображения. Эта опция может быть указана более одного раза - каждый атрибут будет показан по одному в строке в заданном порядке. Если атрибуты не указаны, даётся сводка атрибутов по умолчанию. -- -- -- attribute -- атрибут -- -- -- Name of the entry to show. -- Название записи для отображения. -- -- -- NULL device -- Устройство NULL -- -- -- error reading from device -- Ошибка чтения из устройства -- -- -- malformed string -- Неправильная строка -- -- -- missing closing quote -- Отсутствует закрывающая кавычка -- -- -- Group -- Группа -- -- -- Title -- Название -- -- -- Username -- Имя пользователя -- -- -- Password -- Пароль -- -- -- Notes -- Примечания -- -- -- Last Modified -- Изменён -- -- -- Created -- Создан -- -- -- Browser Integration -- Интеграция с браузером -- -- -- SSH Agent -- SSH-агент -- -- -- Generate a new random diceware passphrase. -- Сгенерировать новую парольную фразу. -- -- -- Word count for the diceware passphrase. -- Количество слов для парольной фразы. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Список слов для генератора парольной фразы. --[По умолчанию: Английский EFF] -- -- -- Generate a new random password. -- Сгенерировать новый случайный пароль. -- -- -- Could not create entry with path %1. -- Не удалось создать запись с путём %1. -- -- -- Enter password for new entry: -- Введите пароль для новой записи: -- -- -- Writing the database failed %1. -- Запись базы данных не удалась %1. -- -- -- Successfully added entry %1. -- Успешно добавлена запись %1. -- -- -- Invalid timeout value %1. -- Неверное значение времени ожидания %1. -- -- -- Entry %1 not found. -- Запись %1 не найдена. -- -- -- Entry with path %1 has no TOTP set up. -- У записи с путём %1 не настроен TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- Очищение буфера обмена через %1 секунду...Очищение буфера обмена через %1 секунды..Очищение буфера обмена через %1 секунд...Очистка буфера обмена через %1 сек... -- -- -- Clipboard cleared! -- Буфер обмена очищен. -- -- -- Silence password prompt and other secondary outputs. -- Заглушить запрос пароля и другие второстепенные выводы. -- -- -- count -- CLI parameter -- количество -- -- -- Could not find entry with path %1. -- Не удалось найти запись с путём %1. -- -- -- Not changing any field for entry %1. -- Не меняются никакие поля для записи %1. -- -- -- Enter new password for entry: -- Введите новый пароль для записи: -- -- -- Writing the database failed: %1 -- Ошибка записи базы данных: %1 -- -- -- Successfully edited entry %1. -- Запись %1 отредактирована. -- -- -- Length %1 -- Длина %1 -- -- -- Entropy %1 -- Энтропия %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Дополнительные биты мультислова %1 -- -- -- Type: Bruteforce -- Тип: перебор -- -- -- Type: Dictionary -- Тип: словарь -- -- -- Type: Dict+Leet -- Тип: словарь + замена букв цифрами и знаками -- -- -- Type: User Words -- Тип: пользовательские слова -- -- -- Type: User+Leet -- Тип: пользователь + замена букв цифрами и знаками -- -- -- Type: Repeated -- Тип: повторы -- -- -- Type: Sequence -- Тип: последовательность -- -- -- Type: Spatial -- Тип: пространственный -- -- -- Type: Date -- Тип: дата -- -- -- Type: Bruteforce(Rep) -- Тип: перебор (повт.) -- -- -- Type: Dictionary(Rep) -- Тип: словарь (повт.) -- -- -- Type: Dict+Leet(Rep) -- Тип: словарь + замена букв цифрами и знаками (повт.) -- -- -- Type: User Words(Rep) -- Тип: пользовательские слова (повт.) -- -- -- Type: User+Leet(Rep) -- Тип: Пользователь + замена букв цифрами и знаками (повт.) -- -- -- Type: Repeated(Rep) -- Тип: повторы (повт.) -- -- -- Type: Sequence(Rep) -- Тип: последовательность (повт.) -- -- -- Type: Spatial(Rep) -- Тип: пространственный (повт.) -- -- -- Type: Date(Rep) -- Тип: дата (повт.) -- -- -- Type: Unknown%1 -- Тип: неизвестный%1 -- -- -- Entropy %1 (%2) -- Энтропия %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Длина пароля (%1) != сумма длин частей (%2) *** -- -- -- Failed to load key file %1: %2 -- Ошибка загрузки ключевого файла %1: %2 -- -- -- Length of the generated password -- Длина генерируемого пароля -- -- -- Use lowercase characters -- Использовать строчные буквы -- -- -- Use uppercase characters -- Использовать заглавные буквы -- -- -- Use special characters -- Использовать специальные символы -- -- -- Use extended ASCII -- Использовать расширенный набор ASCII -- -- -- Exclude character set -- Исключить набор символов -- -- -- chars -- симв. -- -- -- Exclude similar looking characters -- Исключать похожие символы -- -- -- Include characters from every selected group -- Включать символы из каждой выбранной группы -- -- -- Recursively list the elements of the group. -- Рекурсивный список элементов группы. -- -- -- Cannot find group %1. -- Невозможно найти группу %1. -- -- -- Error reading merge file: --%1 -- Ошибка при чтении объединяемого файла: --%1 -- -- -- Unable to save database to file : %1 -- Невозможно сохранить базу данных в файл: %1 -- -- -- Unable to save database to file: %1 -- Невозможно сохранить базу данных в файл: %1 -- -- -- Successfully recycled entry %1. -- Запись %1 перемещена в корзину. -- -- -- Successfully deleted entry %1. -- Запись %1 удалена. -- -- -- Show the entry's current TOTP. -- Показать текущий TOTP записи. -- -- -- ERROR: unknown attribute %1. -- ОШИБКА: Неизвестный атрибут %1. -- -- -- No program defined for clipboard manipulation -- Не задана программа для управления буфером обмена -- -- -- file empty -- пустой файл -- -- -- %1: (row, col) %2,%3 -- %1: (строка, столбец) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Недопустимые параметры -- -- -- Invalid Key -- TOTP -- Недопустимый ключ -- -- -- Message encryption failed. -- Ошибка шифрования сообщений. -- -- -- No groups found -- Группы не найдены -- -- -- Create a new database. -- Создать новую базу данных. -- -- -- File %1 already exists. -- Файл %1 уже существует. -- -- -- Loading the key file failed -- Ошибка загрузки ключевого файла -- -- -- No key is set. Aborting database creation. -- Не задан ключ. Создание базы данных отменено. -- -- -- Failed to save the database: %1. -- Ошибка сохранения базы данных: %1. -- -- -- Successfully created new database. -- Новая база данных успешно создана. -- -- -- Creating KeyFile %1 failed: %2 -- Ошибка создания файла-ключа %1: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Ошибка загрузки файла-ключа %1: %2 -- -- -- Path of the entry to remove. -- Путь к записи для удаления. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Повреждён файл блокировки запуска. Запускается новый экземпляр программы. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Невозможно создать файл блокировки. Режим недублирующего хранения отключён. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - кроссплатформенный менеджер паролей -- -- -- filenames of the password databases to open (*.kdbx) -- имена файлов открываемой базы данных паролей (*.kdbx) -- -- -- path to a custom config file -- путь к своему файлу настроек -- -- -- key file of the database -- файл-ключ базы данных -- -- -- read password of the database from stdin -- читать пароли базы данных с stdin -- -- -- Another instance of KeePassXC is already running. -- Другой экземпляр KeePassXC уже запущен. -- -- -- Fatal error while testing the cryptographic functions. -- Неустранимая ошибка при тестировании криптографических функций. -- -- -- KeePassXC - Error -- Ошибка - KeePassXC -- -- -- Database password: -- Пароль базы данных: -- -- -- Cannot create new group -- Невозможно создать новую группу -- -- -- Deactivate password key for the database. -- Отключить использования парольного ключа базой данных. -- -- -- Displays debugging information. -- Выводить отладочную информацию. -- -- -- Deactivate password key for the database to merge from. -- Отключить использования парольного ключа для объединяемой базы данных. -- -- -- Version %1 -- Версия %1 -- -- -- Build Type: %1 -- Тип сборки: %1 -- -- -- Revision: %1 -- Ревизия: %1 -- -- -- Distribution: %1 -- Дистрибутив: %1 -- -- -- Debugging mode is disabled. -- Режим отладки выключен. -- -- -- Debugging mode is enabled. -- Режим отладки включен. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Операционная система: %1 --Архитектура ЦП: %2 --Ядро: %3 %4 -- -- -- Auto-Type -- Автоввод -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (доступ с использованием подписей и без) -- -- -- KeeShare (only signed sharing) -- KeeShare (доступ только с использованием подписи) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (доступ только без использованием подписи) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Нет -- -- -- Enabled extensions: -- Включённые расширения: -- -- -- Cryptographic libraries: -- Криптографические библиотеки: -- -- -- Cannot generate a password and prompt at the same time! -- Невозможно одновременно создать пароль и запрос. -- -- -- Adds a new group to a database. -- Добавить новую группу в базу данных. -- -- -- Path of the group to add. -- Путь к добавляемой группе. -- -- -- Group %1 already exists! -- Группа %1 уже существует. -- -- -- Group %1 not found. -- Группа %1 не найдена. -- -- -- Successfully added group %1. -- Группа %1 добавлена. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Проверка паролей на компрометацию. Параметр ИМЯ_ФАЙЛА должен быть путём к файлу данных списка SHA-1 хэшей паролей в формате HIBP, полученным, например, с сайта https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- ИМЯ_ФАЙЛА -- -- -- Analyze passwords for weaknesses and problems. -- Проверка надёжности и других характеристик паролей. -- -- -- Failed to open HIBP file %1: %2 -- Не удалось открыть файл в формате HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Производится проверка записей базы данных относительно файла в формате HIBP… -- -- -- Close the currently opened database. -- Закрыть текущую базу данных. -- -- -- Display this help. -- Показать эту помощь. -- -- -- slot -- слот -- -- -- Invalid word count %1 -- Количество неверных слов: %1 -- -- -- The word list is too small (< 1000 items) -- Словарь слишком маленький (< 1000 слов) -- -- -- Exit interactive mode. -- Покинуть интерактивный режим. -- -- -- Exports the content of a database to standard output in the specified format. -- Экспорт базы данных в заданном формате на устройство стандартного вывода. -- -- -- Unable to export database to XML: %1 -- Ошибка экспортирования базы данных в формат XML: %1 -- -- -- Unsupported format %1 -- Неподдерживаемый формат %1 -- -- -- Use numbers -- Использовать цифры -- -- -- Invalid password length %1 -- Неверная длина пароля %1 -- -- -- Display command help. -- Показать справку команды. -- -- -- Available commands: -- Доступные команды: -- -- -- Import the contents of an XML database. -- Импортировать базу данных в формате XML. -- -- -- Path of the XML database export. -- Путь для экспорта базы данных в формат XML -- -- -- Path of the new database. -- Путь до новой базы данных. -- -- -- Successfully imported database. -- База данных успешно импортирована. -- -- -- Unknown command %1 -- Неизвестная команда %1 -- -- -- Flattens the output to single lines. -- Формирование вывода в виде отдельных строк. -- -- -- Only print the changes detected by the merge operation. -- Не выполнять объединение, а только сообщать о найденных изменениях -- -- -- Yubikey slot for the second database. -- Слот Yubikey для второй базы данных. -- -- -- Successfully merged %1 into %2. -- %1 успешно объединён с %2. -- -- -- Database was not modified by merge operation. -- База данных не была изменена операцией объединения. -- -- -- Moves an entry to a new group. -- Перемещение записи в новую группу. -- -- -- Path of the entry to move. -- Путь к перемещаемой записи. -- -- -- Path of the destination group. -- Путь к группе назначения. -- -- -- Could not find group with path %1. -- Не удалось найти группу с путём %1. -- -- -- Entry is already in group %1. -- Запись уже существует в группе %1. -- -- -- Successfully moved entry %1 to group %2. -- Запись %1 перемещена в группу %2. -- -- -- Open a database. -- Открыть базу данных. -- -- -- Path of the group to remove. -- Путь к удаляемой группе. -- -- -- Cannot remove root group from database. -- Невозможно удалить корневую группу базы данных. -- -- -- Successfully recycled group %1. -- Группа %1 перемещена в корзину. -- -- -- Successfully deleted group %1. -- Группа %1 удалена. -- -- -- Failed to open database file %1: not found -- Не удалось открыть базу данных «%1»: файл не найден -- -- -- Failed to open database file %1: not a plain file -- Не удалось открыть базу данных «%1»: файл не является простым -- -- -- Failed to open database file %1: not readable -- Не удалось открыть базу данных «%1»: файл не может быть прочитан -- -- -- Enter password to unlock %1: -- Введите пароль для разблокировки %1: -- -- -- Invalid YubiKey slot %1 -- Недействительный слот Yubikey %1 -- -- -- Enter password to encrypt database (optional): -- Введите пароль для шифрования базы данных (необязательно): -- -- -- HIBP file, line %1: parse error -- Ошибка разбора строки %1 файла в формате HIBP -- -- -- Secret Service Integration -- Интеграция со службой Secret Service -- -- -- User name -- Имя пользователя -- -- -- Password for '%1' has been leaked %2 time(s)! -- Пароль для «%1» был замечен в утечках %2 раз.Пароль для «%1» был замечен в утечках %2 раза.Пароль для «%1» был замечен в утечках %2 раз.Пароль для «%1» был замечен в утечках %2 раза. -- -- -- Invalid password generator after applying all options -- Невозможно создать пароль с заданными параметрами -- -- -- Show the protected attributes in clear text. -- Показать защищённый атрибут в виде простого текста. -- -- -- Browser Plugin Failure -- Ошибка подключаемого модуля браузера -- -- -- Could not save the native messaging script file for %1. -- Не удается сохранить файл сценария механизма native messaging для «%1». -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Скопировать указанный аттрибут в буфер обмена. Если аттрибут не указан, используется пароль. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Скопировать текущий TOTP в буфер обмена (эквивалентно «-a totp»). -- -- -- Copy an entry's attribute to the clipboard. -- Скопировать в буфер обмена аттрибуты записи. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- ОШИБКА: Используйте один из аргументов --attribute или --totp, а не оба. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- ОШИБКА: аттрибут %1 неоднозначный, он соответствует %2. -- -- -- Attribute "%1" not found. -- Аттрибут «%1» не найден. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Аттрибуты записи «%1» скопированы в буфер обмена. -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Номер слота ключа Yubikey и дополнительный серийный номер для доступа к базе данных (например: :7370001). -- -- -- slot[:serial] -- слот[:serial] -- -- -- Target decryption time in MS for the database. -- Целевое время расшифровывания базы данных в миллисекундах. -- -- -- time -- время -- -- -- Set the key file for the database. -- Задать файл-ключ базы данных. -- -- -- Set a password for the database. -- Задать пароль базы данных. -- -- -- Invalid decryption time %1. -- Неверное время расшифровывания %1. -- -- -- Target decryption time must be between %1 and %2. -- Целевое время расшифровывания должно находиться в интервале от %1 до %2. -- -- -- Failed to set database password. -- Не удалось установить пароль базы данных. -- -- -- Benchmarking key derivation function for %1ms delay. -- Тест функции формирования ключа на %1 мс задержку. -- -- -- Setting %1 rounds for key derivation function. -- Для функции формирования ключа задано использование %1 раундов. -- -- -- error while setting database key derivation settings. -- ошибка при задании параметров базы данных для функции формирования ключа. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Выбор формата файла для экспорта. Возможные варианты: XML (по умолчанию) или CSV. -- -- -- Unable to import XML database: %1 -- Ошибка импорта базы данных из формата XML: %1 -- -- -- Show a database's information. -- Показать сведения о базе данных. -- -- -- UUID: -- UUID: -- -- -- Name: -- Имя: -- -- -- Description: -- Описание: -- -- -- Cipher: -- Шифрование: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Использование корзины включено. -- -- -- Recycle bin is not enabled. -- Использование корзины не включено. -- -- -- Invalid command %1. -- Неверная команда: %1. -- -- -- Invalid YubiKey serial %1 -- Неверный серийный номер Yubikey %1 -- -- -- Please touch the button on your YubiKey to continue… -- Для продолжения нажмите кнопку на устройстве YubiKey… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Использовать пустой пароль базы данных? [y/N]: -- -- -- Repeat password: -- Повторите пароль: -- -- -- Error: Passwords do not match. -- Ошибка: пароли не совпадают -- -- -- All clipping programs failed. Tried %1 -- -- Ни одна программа копирования не сработала. Пробовали %1 -- -- -- AES (%1 rounds) -- AES (%1 раунд(а)) -- -- -- AES 256-bit -- AES 256 бит -- -- -- Twofish 256-bit -- Twofish 256-бит -- -- -- ChaCha20 256-bit -- ChaCha20: 256-бит {20 256-?} -- -- -- Benchmark %1 delay -- Тест %1-секундной задержки -- -- -- %1 ms -- milliseconds -- %1 мс%1 мс%1 мс%1 мс -- -- -- %1 s -- seconds -- %1 с%1 с%1 с%1 с -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Значок -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Внутренняя ошибка zlib при сжатии: -- -- -- Error writing to underlying device: -- Ошибка записи на основное устройство: -- -- -- Error opening underlying device: -- Ошибка открытия основного устройства: -- -- -- Error reading data from underlying device: -- Ошибка чтения с основного устройства: -- -- -- Internal zlib error when decompressing: -- Внутренняя ошибка zlib при распаковке: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Формат gzip не поддерживается в этой версии zlib. -- -- -- Internal zlib error: -- Внутренняя ошибка zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Также показать записи, которые были исключены из отчётов -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Наведите курсор чтобы просмотреть дополнительные сведения. Для редактирования записи щелкните два раза левой кнопкой мыши. -- -- -- Bad -- Password quality -- Плохой -- -- -- Bad — password must be changed -- Плохой — пароль должен быть изменён -- -- -- Poor -- Password quality -- Слабый -- -- -- Poor — password should be changed -- Так себе — пароль следует изменить -- -- -- Weak -- Password quality -- Слабый -- -- -- Weak — consider changing the password -- Слабый — пароль желательно изменить -- -- -- (Excluded) -- (Исключено) -- -- -- This entry is being excluded from reports -- Эта запись исключена из отчёта -- -- -- Please wait, health data is being calculated... -- Отчёт готовится... -- -- -- Congratulations, everything is healthy! -- Проблем безопасности не найдено. -- -- -- Title -- Заголовок -- -- -- Path -- Путь -- -- -- Score -- Рейтинг -- -- -- Reason -- Причина -- -- -- Edit Entry... -- Редактировать Запись... -- -- -- Exclude from reports -- Исключить из отчетов -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- ВНИМАНИЕ: Для подготовки этого отчёта данные будут переданы в службу «Have I Been Pwned» (https://haveibeenpwned.com) в виде первых пяти символов от хеша пароля. Другие сведения, за исключением количества паролей и IP-адреса, не передаются. -- -- -- Perform Online Analysis -- Выполнить анализ онлайн -- -- -- Also show entries that have been excluded from reports -- Также показать записи, которые были исключены из отчётов -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Эта сборка KeePassXC не имеет сетевых функций. Сеть необходима для проверки паролей по базе данных "Have I Been Pwned". -- -- -- Congratulations, no exposed passwords! -- Поздравляем, нет раскрытых паролей! -- -- -- Title -- Заголовок -- -- -- Path -- Путь -- -- -- Password exposed… -- Пароль опубликован... -- -- -- (Excluded) -- (Исключено) -- -- -- This entry is being excluded from reports -- Эта запись исключена из отчёта -- -- -- once -- один раз -- -- -- up to 10 times -- до десяти раз -- -- -- up to 100 times -- до ста раз -- -- -- up to 1000 times -- до тысячи раз -- -- -- up to 10,000 times -- до 10 000 раз -- -- -- up to 100,000 times -- до 100 000 раз -- -- -- up to a million times -- до миллиона раз -- -- -- millions of times -- миллионов раз -- -- -- Edit Entry... -- Редактировать Запись... -- -- -- Exclude from reports -- Исключить из отчетов -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Для получения дополнительной информации наведите курсор мыши на строки, содержащие значок ошибки. -- -- -- Name -- Имя -- -- -- Value -- Значение -- -- -- Please wait, database statistics are being calculated... -- Подождите, выполняется сбор статистики… -- -- -- Database name -- Имя базы данных -- -- -- Description -- Описание -- -- -- Location -- Расположение -- -- -- Last saved -- Последнее сохранение -- -- -- Unsaved changes -- Несохраненные изменения -- -- -- yes -- да -- -- -- no -- нет -- -- -- The database was modified, but the changes have not yet been saved to disk. -- База данных была изменена, но эти изменения ещё не были сохранены на диск. -- -- -- Number of groups -- Количество групп -- -- -- Number of entries -- Количество записей -- -- -- Number of expired entries -- Количество истёкших записей -- -- -- The database contains entries that have expired. -- База данных содержит записи, срок действия которых истёк. -- -- -- Unique passwords -- Уникальные пароли -- -- -- Non-unique passwords -- Неуникальные пароли -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Для более 10% записей используются повторяющиеся пароли. Используйте уникальные пароли, когда это возможно. -- -- -- Maximum password reuse -- Максимальное количество повторных использований пароля -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Некоторые пароли используются более трёх раз. Используйте уникальные пароли, когда это возможно. -- -- -- Number of short passwords -- Количество коротких паролей -- -- -- Recommended minimum password length is at least 8 characters. -- Рекомендуемая длина паролей — не менее 8 символов. -- -- -- Number of weak passwords -- Количество ненадёжных паролей -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Рекомендуется использовать длинные пароли, состоящие из случайных символов с уровнями безопасности «хорошо» или «отлично». -- -- -- Entries excluded from reports -- Исключённые из отчёта записи -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Исключение записей из отчётов, если, к примеру, известно, что в таких записях используется слабый пароль, не обязательно является проблемой, но стоит обратить на это внимание. -- -- -- Average password length -- Средняя длина пароля -- -- -- %1 characters -- %1 символов -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Средняя длина паролей менее десяти символов. Более длинные пароли более безопасны. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Сбой подключения агента. -- -- -- Agent protocol error. -- Ошибка протокола агента. -- -- -- No agent running, cannot add identity. -- Агент не запущен, невозможно добавить идентификатор. -- -- -- No agent running, cannot remove identity. -- Агент не запущен, невозможно удалить идентификатор. -- -- -- Agent refused this identity. Possible reasons include: -- Идентификатор отклонён агентом. Возможные причины: -- -- -- The key has already been added. -- Ключ уже добавлен. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Ограничение по времени не поддерживается этим агентом (проверьте настройки). -- -- -- A confirmation request is not supported by the agent (check options). -- Запрос подтверждения не поддерживается этим агентом (проверьте настройки). -- -- -- Key identity ownership conflict. Refusing to add. -- Конфликт владения идентификационным ключом, добавление отменено. -- -- -- No agent running, cannot list identities. -- Ни один агент не запущен, идентификационные данные недоступны. -- -- -- -- SearchHelpWidget -- -- Search Help -- Поиск в справке -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Поисковые выражения выглядят так: [модификаторы][поле:]["]выражение["] -- -- -- Every search term must match (ie, logical AND) -- Каждое поисковое выражение должно иметь соответствие (т.е. логическое И) -- -- -- Modifiers -- Модификаторы -- -- -- exclude term from results -- исключить выражение из результатов -- -- -- match term exactly -- соответствовать выражению в точности -- -- -- use regex in term -- использовать регулярные выражения -- -- -- Fields -- Поля -- -- -- Term Wildcards -- Шаблоны для выражений -- -- -- match anything -- соответствие всему -- -- -- match one -- соответствие одному -- -- -- logical OR -- логическое ИЛИ -- -- -- Examples -- Примеры -- -- -- -- SearchWidget -- -- Search -- Поиск -- -- -- Limit search to selected group -- Поиск только в выбранной группе -- -- -- Search Help -- Поиск в Справке -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Поиск (%1)... -- -- -- Case sensitive -- Учитывать регистр -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Опции -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Включить интеграцию KeepassXC со службой Freedesktop.org Secret Service -- -- -- General -- Общие -- -- -- Show notification when credentials are requested -- Выводить уведомления при запросе записей -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Если в параметрах базы данных разрешено использование корзины, то при удалении записи будут перемещены в неё. В противном случае, будет выполнено необратимое удаление без подтверждения.</p><p>В случае, если на удаляемые записи имеются ссылки, потребуется подтверждение удаления.</p></body></html> -- -- -- Exposed database groups: -- Доступные группы из базы данных: -- -- -- Authorization -- Авторизация -- -- -- These applications are currently connected: -- Подключены следующие приложения: -- -- -- Don't confirm when entries are deleted by clients -- Не подтверждать удаление записей приложениями-клиентами -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Ошибка:</b> не удалось подключиться к D-Bus, проверьте параметры. -- -- -- <b>Warning:</b> -- <b>Внимание:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Сохраните изменения для активации подключаемого модуля и редактирования этого раздела. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Активный -- -- -- Allow export -- Разрешить экспорт -- -- -- Allow import -- Разрешить импорт -- -- -- Own certificate -- Свой сертификат -- -- -- Fingerprint: -- Отпечаток: -- -- -- Certificate: -- Сертификат: -- -- -- Signer -- Подписант -- -- -- Key: -- Ключ: -- -- -- Generate -- Генерировать -- -- -- Import -- Импортировать -- -- -- Export -- Экспортировать -- -- -- Imported certificates -- Импортированные сертификаты -- -- -- Trust -- Доверять -- -- -- Ask -- Запросить -- -- -- Untrust -- Не доверять -- -- -- Remove -- Удалить -- -- -- Path -- Путь -- -- -- Status -- Статус -- -- -- Fingerprint -- Отпечаток -- -- -- Certificate -- Сертификат -- -- -- Trusted -- Надёжный -- -- -- Untrusted -- Ненадёжный -- -- -- Unknown -- Неизвестен -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Файл-ключ KeeShare -- -- -- All files -- Все файлы -- -- -- Select path -- Выберите путь -- -- -- Exporting changed certificate -- Экспортирование изменённого сертификата -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Экспортированный сертификат отличается от используемого. Хотите экспортировать текущий сертификат? -- -- -- Signer: -- Подписант: -- -- -- Allow KeeShare imports -- Разрешить импорт KeeShare -- -- -- Allow KeeShare exports -- Разрешить экспорт KeeShare -- -- -- Only show warnings and errors -- Показывать только ошибки и предупреждения -- -- -- Key -- Ключ -- -- -- Signer name field -- Поле имени владельца сертификата -- -- -- Generate new certificate -- Создать сертификат -- -- -- Import existing certificate -- Импортировать существующий сертификат -- -- -- Export own certificate -- Экспортировать собственный сертификат -- -- -- Known shares -- Известные общие ресурсы -- -- -- Trust selected certificate -- Доверять выбранному сертификату -- -- -- Ask whether to trust the selected certificate every time -- Всегда запрашивать подтверждение доверия к сертификату -- -- -- Untrust selected certificate -- Не доверять выбранному сертификату -- -- -- Remove selected certificate -- Удалить выбранный сертификат -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Перезапись подписанного совместного контейнера не поддерживается - экспорт запрещён -- -- -- Could not write export container (%1) -- Не удалось записать экспортируемый контейнер (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Не удалось встроить подпись: невозможно открыть файл для записи (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Не удалось встроить подпись: невозможно записать файл (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Не удалось встроить базу данных: невозможно открыть файл для записи (%1) -- -- -- Could not embed database: Could not write file (%1) -- Не удалось встроить базу данных: невозможно записать файл (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Перезапись не подписанного совместного контейнера не поддерживается - экспорт запрещён -- -- -- Could not write export container -- Не удалось записать экспортируемый контейнер -- -- -- Unexpected export error occurred -- Неизвестная ошибка экспорта -- -- -- -- ShareImport -- -- Import from container without signature -- Импорт из контейнера без подписи -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Невозможно проверить источник совместно используемого контейнера, потому что он не подписан. Вы действительно хотите выполнить импорт из %1? -- -- -- Import from container with certificate -- Импорт из контейнера с сертификатом -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Доверять %1 с отпечатком %2 из %3? {1 ?} {2 ?} -- -- -- Not this time -- Не сейчас -- -- -- Never -- Никогда -- -- -- Always -- Всегда -- -- -- Just this time -- Только сейчас -- -- -- Signed share container are not supported - import prevented -- Подписанный совместно используемый контейнер не поддерживается - импорт запрещён -- -- -- File is not readable -- Файл не читается -- -- -- Invalid sharing container -- Неверный совместно используемый контейнер -- -- -- Untrusted import prevented -- Предотвращён ненадёжный импорт -- -- -- Successful signed import -- Подписанный импорт выполнен -- -- -- Unsigned share container are not supported - import prevented -- Не подписанный совместно используемый контейнер не поддерживается - импорт запрещён -- -- -- Successful unsigned import -- Импорт без подписи выполнен -- -- -- File does not exist -- Файл не существует -- -- -- Unknown share container type -- Неизвестный тип совместного контейнера -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Ошибка импорта из %1 (%2) -- -- -- Import from %1 successful (%2) -- Импорт из %1 выполнен (%2) -- -- -- Imported from %1 -- Импортировано из %1 -- -- -- Export to %1 failed (%2) -- Ошибка экспорта в %1 (%2) -- -- -- Export to %1 successful (%2) -- Экспорт в %1 выполнен (%2) -- -- -- Export to %1 -- Экспорт в %1 -- -- -- Multiple import source path to %1 in %2 -- Множественный путь источника импорта к %1 в %2 -- -- -- Conflicting export target path %1 in %2 -- Конфликтный путь цели экспорта %1 в %2 -- -- -- -- TotpDialog -- -- Timed Password -- Временной пароль -- -- -- 000000 -- 000000 -- -- -- Copy -- Скопировать -- -- -- Expires in <b>%n</b> second(s) -- Истекает через <b>%n</b> секундуИстекает через <b>%n</b> секундыИстекает через <b>%n</b> секундИстекает через <b>%n</b> сек -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Скопировать -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- * Эти параметры TOTP - пользовательские, они могут не работать с другими средствами проверки подлинности. -- -- -- There was an error creating the QR code. -- Ошибка при создании QR-кода. -- -- -- Closing in %1 seconds. -- Закрытие через %1 с. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Настроить TOTP -- -- -- Default RFC 6238 token settings -- Стандартные параметры токена RFC 6238 -- -- -- Steam token settings -- Параметры токена Steam -- -- -- Use custom settings -- Использовать особые настройки -- -- -- Custom Settings -- Особые настройки -- -- -- Time step: -- Временной шаг: -- -- -- sec -- Seconds -- сек -- -- -- Code size: -- Размер кода: -- -- -- Secret Key: -- Секретный ключ: -- -- -- Secret key must be in Base32 format -- Секретный ключ должен быть задан в формате Base32 -- -- -- Secret key field -- Поле секретного ключа -- -- -- Algorithm: -- Алгоритм: -- -- -- Time step field -- Поле шага времени -- -- -- digits -- цифр(ы) -- -- -- Invalid TOTP Secret -- Недействительный секрет TOTP -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Введён недействительный секретный ключ. Ключ должен быть задан в формате Base32, например: JBSWY3DPEHPK3PXP. -- -- -- Confirm Remove TOTP Settings -- Подтверждение удаления параметров TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Удалить параметры TOTP этой записи? -- -- -- -- URLEdit -- -- Invalid URL -- Неверный URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Проверка обновлений -- -- -- Checking for updates... -- Проверка обновлений... -- -- -- Close -- Закрыть -- -- -- Update Error! -- Ошибка обновления! -- -- -- An error occurred in retrieving update information. -- Ошибка при получении информации об обновлении. -- -- -- Please try again later. -- Повторите попытку позже. -- -- -- Software Update -- Обновление ПО -- -- -- A new version of KeePassXC is available! -- Доступна новая версия KeePassXC. -- -- -- KeePassXC %1 is now available — you have %2. -- Доступна KeePassXC версии %1. У вас — %2. -- -- -- Download it at keepassxc.org -- Загрузите её с keepassxc.org -- -- -- You're up-to-date! -- У вас самая новая версия! -- -- -- KeePassXC %1 is currently the newest version available -- На данный момент KeePassXC %1 — самая новая версия -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Начать безопасное хранение ваших паролей в базе данных KeePassXC -- -- -- Create new database -- Создать новую базу данных -- -- -- Open existing database -- Открыть имеющуюся базу данных -- -- -- Import from KeePass 1 -- Импорт из KeePass 1 -- -- -- Import from CSV -- Импорт из CSV -- -- -- Recent databases -- Недавние базы данных -- -- -- Welcome to KeePassXC %1 -- Вас приветствует KeePassXC %1 -- -- -- Import from 1Password -- Импорт из 1Password -- -- -- Open a recent database -- Открыть недавнюю базу данных -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Настроенный слот — %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Вызов-ответ — слот %3 - %4 -- -- -- Press -- Нажать -- -- -- Passive -- Пассивная -- -- -- %1 Invalid slot specified - %2 -- %1 указан неверный слот — %2 -- -- -- The YubiKey interface has not been initialized. -- Интерфейс YubiKey не был инициализирован. -- -- -- Hardware key is currently in use. -- Аппаратный ключ уже используется. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Для продолжения работы подключите аппаратный ключ с серийным номером %1. -- -- -- Hardware key timed out waiting for user interaction. -- Тайм-аут аппаратного ключа во время ожидания действий пользователя. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Ошибка подсистемы USB при доступе к аппаратному ключу: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Не удалось завершить обмен «вызов—ответ»: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Обновить -- -- -- YubiKey Challenge-Response -- Вызов-ответ YubiKey -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Если у вас есть <a href="https://www.yubico.com/">YubiKey</a>, его можно использовать для дополнительной безопасности.</p><p>YubiKey требует, чтобы один из его слотов был запрограммирован как <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> вызов-ответ HMAC-SHA1</a>.</p> -- -- -- Refresh hardware tokens -- Перечитать токены -- -- -- Hardware key slot selection -- Выбор слота аппаратного ключа -- -- -- Could not find any hardware keys! -- Не удалось найти ни одного аппаратного ключа. -- -- -- Selected hardware key slot does not support challenge-response! -- Выбранный аппаратный ключ не поддерживает механизм «вызов—ответ». -- -- -- Detecting hardware keys… -- Обнаружение аппаратных ключей... -- -- -- No hardware keys detected -- Аппаратные ключи не обнаружены -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sk.ts keepassxc-2.6.4-patched/share/translations/keepassx_sk.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_sk.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_sk.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7894 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- O KeepassXC -- -- -- About -- O aplikácii -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Chyby hláste na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC je distribuovaný za podmienok GNU General Public License (GPL) verzie 2 alebo (podľa Vášho výberu) verzie 3. -- -- -- Contributors -- K vývoju prispeli -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Viď prispievateľov na GitHub</a> -- -- -- Debug Info -- Ladiace informácie -- -- -- Include the following information whenever you report a bug: -- Do každého hlásenia chyby zahrňte nasledujúce informácie: -- -- -- Copy to clipboard -- Kopírovať do schránky -- -- -- Project Maintainers: -- Správcovia projektu: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Špeciálne poďakovanie od tímu KeePassXC patrí debfx za vytvorenie pôvodného KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Použiť OpenSSH pre Windows namiesto Pageant -- -- -- Enable SSH Agent integration -- Zapnúť integráciu Agenta SSH -- -- -- SSH_AUTH_SOCK value -- Hodnota SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- Prepísanie SSH_AUTH_SOCK -- -- -- (empty) -- (prázdne) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Nie je dostupný socket Agenta SSH. Buď zaistite existenciu premennej prostredia SSH_AUTH_SOCK alebo nastavte prepísanie. -- -- -- SSH Agent connection is working! -- Spojenie Agenta SSH funkčné! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Nastavenia aplikácie -- -- -- General -- Všeobecné -- -- -- Security -- Bezpečnosť -- -- -- Access error for config file %1 -- Chyba prístupu ku konfiguračnému súboru %1 -- -- -- Icon only -- Len ikona -- -- -- Text only -- Len text -- -- -- Text beside icon -- Text vedľa ikony -- -- -- Text under icon -- Text pod ikonou -- -- -- Follow style -- Štýl nasledovania -- -- -- Reset Settings? -- Resetovať nastavenia? -- -- -- Are you sure you want to reset all general and security settings to default? -- Naozaj chcete obnoviť všetky všeobecné nastavenia na predvolené hodnoty? -- -- -- Monochrome (light) -- Monochromatický (svetlé) -- -- -- Monochrome (dark) -- Monochromatický (tmavé) -- -- -- Colorful -- Farebné -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Základné nastavenia -- -- -- Startup -- Štart -- -- -- Start only a single instance of KeePassXC -- Spustiť len jednu inštanciu KeePassXC -- -- -- Minimize window at application startup -- Minimalizovať okno pri spustení aplikácie -- -- -- File Management -- Správa súborov -- -- -- Backup database file before saving -- Zálohovať databázu pri každom uložení -- -- -- Automatically save after every change -- Automaticky uložiť po každej zmene -- -- -- Automatically reload the database when modified externally -- Automaticky načítať databázu, ak je upravená externe -- -- -- Entry Management -- Správa položky -- -- -- Use group icon on entry creation -- Použiť ikonu skupiny pri vytváraní položky -- -- -- Minimize instead of app exit -- Minimalizovať namiesto ukončenia -- -- -- Show a system tray icon -- Zobraziť ikonu v oznamovacej oblasti -- -- -- Hide window to system tray when minimized -- Skryť okno do oznamovacej oblasti pri minimalizácii -- -- -- Auto-Type -- Automatické vypĺňanie -- -- -- Use entry title to match windows for global Auto-Type -- Použiť názov položky na zhodu okna pre globálne Automatické vypĺňanie -- -- -- Use entry URL to match windows for global Auto-Type -- Použiť URL položky na zhodu okna pre globálne Automatické vypĺňanie -- -- -- Always ask before performing Auto-Type -- Vždy sa spýtať pred vykonaním Automatického vypĺňania -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Presúvateľný panel nástrojov -- -- -- Remember previously used databases -- Zapamätať si predtým používané databázy -- -- -- Load previously open databases on startup -- Načítanie predtým otvorených databáz pri spustení -- -- -- Remember database key files and security dongles -- Zapamätať databázové kľúčové súbory a zabezpečovacie HW kľúče -- -- -- Check for updates at application startup once per week -- Pri štarte skontrolovať aktualizácie raz týždenne -- -- -- Include beta releases when checking for updates -- Pri kontrole aktualizácii zahrnúť pred-vydania -- -- -- Language: -- Jazyk: -- -- -- (restart program to activate) -- (reštartovať program kvôli aktivácii) -- -- -- Minimize window after unlocking database -- Minimalizovať okno po odomknutí databázy -- -- -- Minimize when opening a URL -- Minimalizovať pri otvorení URL -- -- -- Hide window when copying to clipboard -- Skryť okno pri kopírovaní do schránky -- -- -- Minimize -- Minimalizovať -- -- -- Drop to background -- Poslať do pozadia -- -- -- Favicon download timeout: -- Časový limit stiahnutia ikony: -- -- -- Website icon download timeout in seconds -- Časový limit stiahnutia ikony v sekundách -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Štýl tlačidiel panela nástrojov -- -- -- Language selection -- Výber jazyka -- -- -- Global auto-type shortcut -- Globálna klávesová skratka Automatického vypĺňania -- -- -- Auto-type character typing delay milliseconds -- Oneskorenie Automatického vypĺňania znakov v milisekundách -- -- -- Auto-type start delay milliseconds -- Oneskorenia spustenia Automatického vypĺňania v milisekundách -- -- -- Automatically launch KeePassXC at system startup -- Automaticky spustiť KeePassXC pri štarte systému -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Bezpečne uložiť súbory databáz (vypnite pri problémoch s Dropbox, apod) -- -- -- User Interface -- Používateľské rozhranie -- -- -- Toolbar button style: -- Štýl tlačidiel panela nástrojov: -- -- -- Use monospaced font for notes -- Na poznámky použiť písmo Monospace -- -- -- Tray icon type: -- Ikona oznamovacej oblasti: -- -- -- Reset settings to default… -- Obnoviť predvolené nastavenia -- -- -- Auto-Type typing delay: -- Oneskorenie Automatického vypĺňania: -- -- -- Global Auto-Type shortcut: -- Globálna klávesová skratka Automatického vypĺňania: -- -- -- Auto-Type start delay: -- Oneskorenia spustenia Automatického vypĺňania: -- -- -- Automatically save when locking database -- Pri zamknutí databázy automaticky uložiť -- -- -- Automatically save non-data changes when locking database -- Pri zamknutí databázy automaticky uložiť nedátové zmeny -- -- -- Tray icon type -- Typ ikona oznamovacej oblasti -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Časové limity -- -- -- Clear clipboard after -- Vymazať schránku po -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Zamknúť databázu po neaktivite -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Zabudnúť TouchID po neaktivite dlhšej ako -- -- -- Convenience -- Pohodlie -- -- -- Lock databases when session is locked or lid is closed -- Zamknúť databázu pri zamknutí relácie alebo zatvorení krytu -- -- -- Forget TouchID when session is locked or lid is closed -- Zabudnúť TouchID po neaktivite dlhšej ako -- -- -- Lock databases after minimizing the window -- Zamknúť databázu pri minimalizovaní okna -- -- -- Re-lock previously locked database after performing Auto-Type -- Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania -- -- -- Hide passwords in the entry preview panel -- Skryť heslá v paneli ukážky položky -- -- -- Hide entry notes by default -- Predvolene skryť poznámky položky -- -- -- Privacy -- Súkromie -- -- -- Use DuckDuckGo service to download website icons -- Používať služby DuckDuckGo na stiahnutie ikon webových stránok -- -- -- Clipboard clear seconds -- Sekundy do vymazania schárnky -- -- -- Touch ID inactivity reset -- Reset TouchID po neaktivite -- -- -- Database lock timeout seconds -- Časový limit zamknutia databázy v sekundách -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Vymazať dopyt po -- -- -- Require password repeat when it is visible -- Vyžadovať opakovanie hesla, aj ak je viditeľné -- -- -- Hide passwords when editing them -- Skryť heslo pri jeho úprave -- -- -- Use placeholder for empty password fields -- Použiť zástupnú hodnotu na prázdne polia hesiel -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Nemožno nájsť žiadnu položku, ktorá zodpovedá názvu okna: -- -- -- Auto-Type - KeePassXC -- Automatické vypĺňanie – KeePassXC -- -- -- Auto-Type -- Automatické vypĺňanie -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Syntax Vášho Automatického vypĺňania nieje správna! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Tento príkaz Automatického vypĺňania obsahuje príliš dlhú pauzu. Naozaj ho chcete vykonať? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Tento príkaz Automatického vypĺňania obsahuje príliš pomalé stlačenia kláves. Do you really want to proceed? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Tento príkaz Automatického vypĺňania obsahuje argumenty, ktoré sú opakované príliš často. Naozaj ho chcete vykonať? -- -- -- Permission Required -- Požadované práva -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC vyžaduje povolenie Prístupnosť aby mohol realizovať Automatické dopĺňanie na úrovni položky. Ak ste povolenie už pridelili, môže byť potrebné reštartovať. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Okno -- -- -- Sequence -- Postupnosť -- -- -- Default sequence -- Predvolená postupnosť -- -- -- -- AutoTypeMatchModel -- -- Group -- Skupina -- -- -- Title -- Nadpis -- -- -- Username -- Používateľské meno -- -- -- Sequence -- Postupnosť -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopírovať po&už. meno -- -- -- Copy &password -- Kopírovať &heslo -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Požadované práva -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC vyžaduje povolenie Prístupnosť a Záznam obrazovky aby mohol realizovať globálne Automatické dopĺňanie. Záznam obrazovky je potrebný na získanie názvu okna na vyhľadávanie položiek. Ak ste povolenie už pridelili, môže byť potrebné reštartovať. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Automatické vypĺňanie – KeePassXC -- -- -- Select entry to Auto-Type: -- Vyberte položku na Automatické vypĺňanie: -- -- -- Search... -- Hľadanie… -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- Žiadosť o prístup KeePassXC-Prehliadač -- -- -- %1 is requesting access to the following entries: -- %1 žiada prístup k nasledujúcim položkám: -- -- -- Remember access to checked entries -- Zapamätať si prístup k označeným položkám -- -- -- Remember -- Zapamätať -- -- -- Allow access to entries -- Povoliť prístup k položkám -- -- -- Allow Selected -- Povoliť vybraným -- -- -- Deny All -- Zakázať všetkým -- -- -- Disable for this site -- Zakázať tejto stránke -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Uložiť položku -- -- -- Ok -- Ok -- -- -- Cancel -- Zrušiť -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Máte otvorených viac databáz. --Prosím, vyberte správnu databázu na uloženie prihlasovacích údajov. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Nová požiadavka priradenia kľúča -- -- -- Save and allow access -- Uložiť a povoliť prístup -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Prepísať existujúci kľúč? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Zdieľaný šifrovací kľúč s menom „%1” už existuje. --Chcete ho prepísať? -- -- -- KeePassXC: Update Entry -- KeePassXC: Upraviť položku -- -- -- Do you want to update the information in %1 - %2? -- Chcete upraviť informácie v %1 – %2? -- -- -- Abort -- Zrušiť -- -- -- Converting attributes to custom data… -- Konvertovanie atribútov na vlastné dáta… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Konvertované atribúty KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Úspešne skonvertované atribúty z %1 položky(iek). --Do vlastných dát presunuté %2 kľúče. -- -- -- Successfully moved %n keys to custom data. -- Úspešne presunutý %n kľúč do vlastných dát.Úspešne presunuté %n kľúče do vlastných dát.Úspešne presunutých %n kľúčov do vlastných dát.Úspešne presunutých %n kľúčov do vlastných dát. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Nenájdená žiadna položka s atribútmi KeePassHTTP! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktívna databáza neobsahuje žiadnu položku s atribútmi KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Zistené staré nastavenia integrácie prehliadača -- -- -- KeePassXC: Create a new group -- KeePassXC: Vytvoriť novú skupinu -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Bola prijatá požiadavka n novú skupinu „%1”. --Chcete vytvoriť túto skupinu? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Je potrebné presunúť vaše nastavenia KeePassXC-Browser do nastavenia databázovy. --Je to potrebné kvôli správe aktuálnych pripojení prehliadača. --Chcete teraz migrovať svoje nastavenia? -- -- -- Don't show this warning again -- Nezobrazovať znova toto upozornenie -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Obdržali ste požiadavku na priradenie nasledujúcej databázy. --%1 -- --Zadajte mu jedinečný názov alebo identifikátor, napríklad: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialóg -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Toto je potrebné na prístup k vašim databázam cez KeePassXC-Browser -- -- -- Enable browser integration -- Povoliť integráciu prehľadávača -- -- -- General -- Všeobecné -- -- -- Browsers installed as snaps are currently not supported. -- Boli nainštalované prehliadače lebo "snaps" momentálne nie sú podporované. -- -- -- Enable integration for these browsers: -- Zapnúť integráciu v týchto prehliadačoch: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Zobraziť upozornenie, keď sú požadované prihlasovacie údaje -- -- -- Request to unlock the database if it is locked -- Požiadať o odomknutie databázy, ak je zamknutá -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Vrátené budú len položky s rovnakou schémou (http://, https://, …). -- -- -- Match URL scheme (e.g., https://...) -- Zhoda schémy URL (napr., https://…) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Vrátiť len najlepšie zhody danej URL, namiesto všetkých položiek celej domény. -- -- -- Return only best-matching credentials -- Vrátiť len prihlasovacie údaje s najlepšou zhodou -- -- -- Returns expired credentials. String [expired] is added to the title. -- Vrátiť prshlasovacie údaje po vypršaní platnosti. Do názvu je pridaný reťazec [expired]. -- -- -- Allow returning expired credentials -- Povoliť vrátenie prihlasovacích údajov po dobe platnosti -- -- -- All databases connected to the extension will return matching credentials. -- Všetky databázy pripojené k rozšíreniu budú vracať zodpovedajúce prihlasovacie údaje. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Hľadať vyhovujúce prihlasovacie údaje vo všetkých databázach -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Zoradiť vyhovujúce prihlasovacie údaje podľa názvu -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Zoradiť vyhovujúce prihlasovacie údaje podľa použ. mena -- -- -- Advanced -- Pokročilé -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Nikdy sa nepýtať pred prístupom k prihlasovacím údajom -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Nikdy sa nepýtať pred úpravou prihlasovacích údajov -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Nepýtať povolenie na HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatické vytváranie alebo úprava textových polí nie je podporovaná. -- -- -- Return advanced string fields which start with "KPH: " -- Vrátiť reťazce pokročilých polí, ktoré začínajú na „KPH: ” -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Nezobrazovať okno s návrhom na migráciu starých nastavení KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Nepýtať sa na migráciu nastavení KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Pri štarte automaticky aktualizovať cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadačom a KeePassXC (native messaging). -- -- -- Update native messaging manifest files at startup -- Pri štarte automaticky aktualizovať súbory manifestu -- -- -- Use a custom proxy location if you installed a proxy manually. -- Použiť vlastné umiestnenie proxy, ak ste nainštalovali proxy manuálne. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Použiť vlastné umiestnenie proxy: -- -- -- Custom proxy location field -- Pole vlastné umiestnenia proxy -- -- -- Browser for custom proxy file -- Prehliadač súboru vlastného proxy -- -- -- Browse... -- Button for opening file dialog -- Prechádzať… -- -- -- Use a custom browser configuration location: -- Použiť vlastné umiestnenie nastavenia prehliadača: -- -- -- Browser type: -- Typ prehliadača: -- -- -- Toolbar button style -- Štýl tlačidiel panela nástrojov -- -- -- Config Location: -- Umiestnenie nastavenia: -- -- -- Custom browser location field -- Pole vlastného umiestnenia prehlaidača -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Nájsť cestu vlastného prehlaidača -- -- -- Custom extension ID: -- Vlastné ID rozšírenia: -- -- -- Custom extension ID -- Vlastné ID rozšírenia -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Kvôli ochrane Snap v sandboxe, musíte na povolenie integrácie prehliadača spustiť skript.<br />Skript môžete získať z %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Na fungovanie integrácie s prehliadačom je potrebný KeePassXC-Browser.<br /> Stiahnite ho pre %1 a %2. %3. %4 -- -- -- Please see special instructions for browser extension use below -- Prosím, pozrite si špeciálne inštrukcie na použite integrácie prehliadača nižšie -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Chyba:</b> Vlastné umiestnenie proxy nemožno nájsť!<br/>Integrácia prehliadača NEBUDE FUNGOVAŤ bez aplikácie proxy. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Upozornenie:</b> nasledujúce voľby môžu byť nebezpečné! -- -- -- Executable Files -- Spustiteľné súbory -- -- -- All Files -- Všetky súbory -- -- -- Select custom proxy location -- Zvoliť vlastné umiestnenie proxy -- -- -- Select native messaging host folder location -- Vyberte umiestnenie zložky hostiteľa správe medzi prehliadačom a KeePassXC -- -- -- -- CloneDialog -- -- Clone Options -- Voľby klonovania -- -- -- Append ' - Clone' to title -- Pripojiť do názvu „- Klon” -- -- -- Replace username and password with references -- Nahradiť použ. meno a heslo odkazmi -- -- -- Copy history -- Kopírovať históriu -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importovať polia CSV -- -- -- filename -- meno súboru -- -- -- size, rows, columns -- veľkosť, riadky, stĺpce -- -- -- Encoding -- Kódovanie -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Text je vymedzený pomocou -- -- -- Fields are separated by -- Polia sú oddelené pomocou -- -- -- Comments start with -- Komentáre začínajú -- -- -- Consider '\' an escape character -- Považovať „\” za znak „escape” -- -- -- Preview -- Ukážka -- -- -- Imported from CSV file -- Importované zo súboru CSV -- -- -- Original data: -- Pôvodné dáta: -- -- -- Error -- Chyba -- -- -- Error(s) detected in CSV file! -- V súbore CSV zistená chyba(y)! -- -- -- [%n more message(s) skipped] -- [%n ďalšia správa preskočená][%n ďalšie správy preskočené[%n ďalších správ preskočených][%n ďalších správ preskočených] -- -- -- CSV import: writer has errors: --%1 -- Import CSV: chyby zápisu: --%1 -- -- -- Text qualification -- Kvalifikácia textu -- -- -- Field separation -- Oddeľovanie polí -- -- -- Number of header lines to discard -- Počet riadkov hlavičky na zahodenie -- -- -- CSV import preview -- Ukážka importu CSV -- -- -- Column Association -- Asociaácia stĺpca -- -- -- Last Modified -- Posledná úprava -- -- -- Password -- Heslo -- -- -- Created -- Vytvorené -- -- -- Notes -- Poznámky -- -- -- Title -- Nadpis -- -- -- Group -- Skupina -- -- -- URL -- URL -- -- -- Username -- Použ. meno: -- -- -- Header lines skipped -- Preskočené riadky hlavičky -- -- -- First line has field names -- Prvý riadok sú názvy polí -- -- -- Not Present -- Chýba -- -- -- Column %1 -- Stĺpec %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n stĺpec%n stĺpce%n stĺpcov%n stĺpcov -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bajt%n bajty%n bajtov%n bajt(y) -- -- -- %n row(s) -- %n riadok%n riadky%n riadkov%n riadkov -- -- -- -- Database -- -- File %1 does not exist. -- Súbor %1 neexistuje. -- -- -- Unable to open file %1. -- Nemožno otvoriť súbor %1. -- -- -- Error while reading the database: %1 -- Chyba čítania databázy: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Do súboru nemožno zapisovať, pretože je otvorený v režime len na čítanie. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Kľúč nebol transformovaný. Je to chyba, prosím, nahláste ju vývojárom! -- -- -- %1 --Backup database located at %2 -- %1 --Zálohovať databázu nachádzajúcu sa na %2 -- -- -- Could not save, database does not point to a valid file. -- Nepodarilo sa uložiť, databáza neukazuje na platný súbor. -- -- -- Could not save, database file is read-only. -- Nepodarilo sa uložiť, databázový súbor je iba na čítanie -- -- -- Database file has unmerged changes. -- Súbor databázy má neuložené zmeny. -- -- -- Recycle Bin -- Kôš -- -- -- Passwords -- Root group name -- Heslá -- -- -- Database save is already in progress. -- Ukladanie databázy už prebieha. -- -- -- Could not save, database has not been initialized! -- Nemožno uložiť, databáza nebola inicializovaná! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Odomknúť databázu – KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Súbor kľúča: -- -- -- Refresh -- Obnoviť -- -- -- Don't show this warning again -- Nezobrazovať znova toto upozornenie -- -- -- All files -- Všetky súbory -- -- -- Key files -- Súbory kľúčov -- -- -- Select key file -- Zvoľte súbor kľúča -- -- -- Failed to open key file: %1 -- Nepodarilo sa otvoriť kľúčový súbor: %1 -- -- -- Unlock KeePassXC Database -- Odomknúť databázu KeePassXC -- -- -- Enter Password: -- Zadajte heslo: -- -- -- Password field -- Pole pre heslo -- -- -- Hardware key slot selection -- Výber slotu hardvérového kľúča -- -- -- Browse for key file -- Vyhľadať súbor kľúča -- -- -- Browse... -- Prechádzať… -- -- -- Refresh hardware tokens -- Obnoviť hardvérové tokeny -- -- -- Hardware Key: -- Hardvérový kľúč: -- -- -- Hardware key help -- Pomocník pre hardvérový kľúč -- -- -- TouchID for Quick Unlock -- TouchID pre rýchle odomknutie -- -- -- Unlock failed and no password given -- Odomkntie zlyhalo a nebolo zadané žiadne heslo -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Odomknutie databázy zlyhalo a nezadali ste heslo. --Chcete sa pokúsiť znova s prázdnym heslom? -- --Ak chcete zabrániť zobrazovaniu tejto chyby, musíte ísť do "Nastavenia databázy/Zabezpečenia" a obnoviť heslo. -- -- -- Retry with empty password -- Skúsiť znova s prázdnym heslom -- -- -- Enter Additional Credentials (if any): -- Zadajte dodatočné prihlasovacie údaje (ak treba): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Môžete použiť hardvérový bezpečnostný kľúč ako <strong>Yubikey</strong> alebo <strong>OnlyKey</strong> so slotmi nakonfigurovanými pre HMAC-SHA1.</p> -- <p>Kliknite pre viac informácií...</p> -- -- -- Key file help -- Pomocník súbora kľúčov -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Súbor databázy nemožno použiť ako súbor kľúča -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Nemôžete použiť svoju databázu ako súbor kľúča. --Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Ako doplnok hesla môžete, na zvýšenie bezpečnosti databázy, použiť tajný súbor. Tento súbor môže byť vygenerovaný v nastaveniach bezpečnosti databázy.</p><p>Tento súbor <strong>nie je</strong> súbor vašej databázy *.kdbx!<br>Ak nemáte súbor kľúča, nechajte toto pole prázdne.</p><p>Kliknite na ďalšie informácie…</p> -- -- -- Key file to unlock the database -- Súbor kľúča na odomknutie databázy -- -- -- Please touch the button on your YubiKey! -- Prosím, stlačte tlačidlo svojho YubiKey! -- -- -- Detecting hardware keys… -- Detekcia hardvérových kľúčov… -- -- -- No hardware keys detected -- Nenájdené žiadne hardvérové kľúče -- -- -- Select hardware key… -- Zvoľte hardvérový kľúč… -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Heslá -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Pokročilé nastavenia -- -- -- General -- Všeobecné -- -- -- Security -- Bezpečnosť -- -- -- Encryption Settings -- Nastavenia šifrovania -- -- -- Browser Integration -- Integrácia prehliadača -- -- -- Database Credentials -- Prihlasovacie údaje databázy -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Nastavenia KeePassXC-Browser -- -- -- Stored keys -- Uložené kľúče -- -- -- Remove -- Odstrániť -- -- -- Delete the selected key? -- Odstrániť zvolený kľúč? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Naozaj chcete odstrániť zvolený kľúč? --Môže to brániť pripojeniu zásuvného modulu prehliadača. -- -- -- Key -- Kľúč -- -- -- Value -- Hodnota -- -- -- Enable Browser Integration to access these settings. -- Zapnúť Integráciu prehliadača na prístup k týmto nastaveniam. -- -- -- Disconnect all browsers -- Odpojiť všetky prehliadače -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Naozaj chcete odpojiť všetky prehliadače? --Môže to brániť pripojeniu zásuvného modulu prehliadača. -- -- -- KeePassXC: No keys found -- KeePassXC: Nenájdené žiadne kľúče -- -- -- No shared encryption keys found in KeePassXC settings. -- V nastavení KeePassXC neboli nájdené zdieľané šifrovacie kľúče. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Klúče odstránené z databázy -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Úspešne odstránený %n šifrovací kľúč z nastavení KeePassXC.Úspešne odstránené %n šifrovacie kľúče z nastavení KeePassXC.Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC.Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC. -- -- -- Forget all site-specific settings on entries -- Zabudnúť všetky nastavenia položiek špecifické pre stránky -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Naozaj chcete zabudnúť všetky nastavenia stránok v každej položke? --Povolenia na prístup k položkám budú odvolané. -- -- -- Removing stored permissions… -- Odstraňovanie uložených povolení… -- -- -- Abort -- Zrušiť -- -- -- KeePassXC: Removed permissions -- KeePassXC: Povolenia odstránené -- -- -- Successfully removed permissions from %n entry(s). -- Úspešne odstránené povolenia z %n položky.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položky. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Nenájdená žiadna položka s povoleniami! -- -- -- The active database does not contain an entry with permissions. -- Aktívna databáza neobsahuje položku s povoleniami. -- -- -- Move KeePassHTTP attributes to custom data -- Presunúť atribúty KeePassHTTP do vlastných dát -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Naozaj chcete presunúť všetky staré dáta integrácie prehliadača do najnovšej normy? --Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadača. -- -- -- Stored browser keys -- Kľúče prehliadača uložené -- -- -- Remove selected key -- Odstrániť vybraný kľúč -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Presunúť atribúty KeePassHTTP do vlastných dát KeePassXC-Browser -- -- -- Refresh database root group ID -- Obnoviť ID koreňovej skupiny databázy -- -- -- Created -- Vytvorené -- -- -- Refresh database ID -- Obnoviť ID databázy -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Naozaj chcete obnoviť ID databázy? --Toto je potrebné len ak je vaša databáza kópiou inej a doplnok prehliadača sa nemôže pripojiť. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Pridať dodatočné zabezpečenie… -- -- -- No password set -- Nie je nastavené heslo -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- UPOZORNENIE! Nenastavili iste heslo. Použitie databázy bez hesla dôrazne neodporúčame! -- --Naozaj chcete pokračovať bez hesla? -- -- -- Continue without password -- Pokračovať bez hesla -- -- -- No encryption key added -- Nie je pridaný šifrovací kľúč -- -- -- You must add at least one encryption key to secure your database! -- Na zabezpečenie svojej databázy musíte pridať aspoň jeden šifrovací kľúč! -- -- -- Unknown error -- Neznáma chyba -- -- -- Failed to change database credentials -- Zlyhala zmena prihlasovacích údajov databázy -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Šifrovací algoritmus: -- -- -- AES: 256 Bit (default) -- AES: 256 bit (predvolené) -- -- -- Twofish: 256 Bit -- Twofish: 256 bitov -- -- -- Key Derivation Function: -- Funkcia odvodenia kľúča (KDF): -- -- -- Transform rounds: -- Počet transformácií: -- -- -- Memory Usage: -- Využitie pamäte: -- -- -- Parallelism: -- Paralelizmus: -- -- -- Decryption Time: -- Čas dešifrovania: -- -- -- ?? s -- ?? s -- -- -- Change -- Zmeniť -- -- -- Higher values offer more protection, but opening the database will take longer. -- Vyššie hodnoty poskytujú viac ochrany, ale otvorenie databázy bude trvať dlhšie. -- -- -- Database format: -- Formát databázy: -- -- -- This is only important if you need to use your database with other programs. -- Toto je dôležité len ak potrebujete používať svoju databázu z iných programov. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (odporúčané) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- bez zmeny -- -- -- Number of rounds too high -- Key transformation rounds -- Počet prechodov príliš vysoký -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Zadali ste príliš vysoký počet prechodov transformácie kľúča pre Argon2. -- --Ak ponecháte toto číslo, môže otvorenie databázy trvať hodiny alebo i dni (dokonca i dlhšie)! -- -- -- Understood, keep number -- Rozumiem, nechať hodnotu -- -- -- Cancel -- Zrušiť -- -- -- Number of rounds too low -- Key transformation rounds -- Počet prechodov príliš nízky -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Zadali ste príliš nízky počet prechodov transformácie kľúča pre Argon2. -- --Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš jednoduché! -- -- -- KDF unchanged -- KDF nezmenené -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Zlyhala transformácia kľúča s novými parametrami KDF; KDF nezmenené. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- vláknovláknavlákien vlákien -- -- -- Change existing decryption time -- Zmeniť existujúci čas dešifrovania -- -- -- Decryption time in seconds -- Čas dešifrovania v sekundách -- -- -- Database format -- Formát databázy -- -- -- Encryption algorithm -- Šifrovací algoritmus -- -- -- Key derivation function -- Funkcia odvodenia kľúča -- -- -- Transform rounds -- Počet transformácií -- -- -- Memory usage -- Využitie pamäte -- -- -- Parallelism -- Paralelizácia -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Exponované položky -- -- -- Don't expose this database -- Nezverejňovať túto databázu -- -- -- Expose entries under this group: -- Zverejňovať položky tejto skupiny: -- -- -- Enable Secret Service to access these settings. -- Zapnúť Tajnú službu na prístup k týmto nastaveniam. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Meta dáta databázy -- -- -- Database name: -- Meno databázy: -- -- -- Database description: -- Popis databázy: -- -- -- Default username: -- Predvolené použ. meno: -- -- -- History Settings -- Nastavenia histórie -- -- -- Max. history items: -- Max. položiek histórie: -- -- -- Max. history size: -- Max. veľkosť histórie: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Použiť kôš -- -- -- Additional Database Settings -- Dodatočné nastavenia databázy -- -- -- Database name field -- Pole názvu databázy -- -- -- Database description field -- Pole popisu databázy -- -- -- Default username field -- Pole predvoleného používateľa -- -- -- Maximum number of history items per entry -- Maximálny počet histórie na položku -- -- -- Maximum size of history per entry -- Maximálna veľkosť histórie na položku -- -- -- Delete Recycle Bin -- Odstrániť Kôš -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Chcete odstrániť aktuálny Kôš a všetok jeho obsah? --Táto akcia nie je reverzibilná. -- -- -- (old) -- (staré) -- -- -- Enable compression (recommended) -- Zapnúť komprimáciu (odporúčané) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Zdieľanie -- -- -- Breadcrumb -- Breadcrumb -- -- -- Type -- Typ -- -- -- Path -- Cesta -- -- -- Last Signer -- Naposledy podpísal -- -- -- Certificates -- Certifikáty -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Meno databázy: -- -- -- Description: -- Popis: -- -- -- Database name field -- Pole názvu databázy -- -- -- Database description field -- Pole popisu databázy -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Databáza KeePass 2 -- -- -- All files -- Všetky súbory -- -- -- Open database -- Otvoriť databázu -- -- -- CSV file -- Súbor CSV -- -- -- Merge database -- Zlúčiť databázu -- -- -- Open KeePass 1 database -- Otvoriť databázu KeePass 1 -- -- -- KeePass 1 database -- Databáza KeePass 1 -- -- -- Export database to CSV file -- Exportovať databázu do súboru CSV -- -- -- Writing the CSV file failed. -- Zápis do súboru CSV zlyhal. -- -- -- Database creation error -- Chyba vytvorenia databázy -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Vytvorená databáza nemá kľúča alebo KDF, jej uloženie je odmietnuté. --Toto je určite chyba, prosím nahláste ju vývojárom. -- -- -- Select CSV file -- Zvoľte súbor CSV -- -- -- New Database -- Nová databáza -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nová databáza] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Zamknutá] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Len na čítanie] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Zlyhalo otvorenie %1. Buď neexistuje alebo je neprístupný. -- -- -- Export database to HTML file -- Exportovať databázu do súboru HTML -- -- -- HTML file -- Súbor HTML -- -- -- Writing the HTML file failed. -- Zápis do súboru HTML zlyhal. -- -- -- Export Confirmation -- Potvrdenie exportu -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Chystáte sa exportovať svoju databázu do nešifrovaného súboru. Takto necháte svoje heslá a citlivé informácie nechránené! Naozaj chcete pokračovať? -- -- -- Open OPVault -- Otvoriť OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Hľadanie… -- -- -- Do you really want to delete the entry "%1" for good? -- Naozaj chcete nadobro odstrániť položku „%1”? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Naozaj chcete presunúť položku „%1” do koša? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Naozaj chcete presunúť %1 položku do koša?Naozaj chcete presunúť %1 položky do koša?Naozaj chcete presunúť %1 položiek do koša?Naozaj chcete presunúť %1 položiek do koša? -- -- -- Execute command? -- Vykonať príkaz? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Naozaj chcete spustiť nasledujúci príkaz?<br><br>%1<br> -- -- -- Remember my choice -- Zapamätať si moju voľbu -- -- -- Do you really want to delete the group "%1" for good? -- Naozaj chcete nadobro odstrániť skupinu „%1”? -- -- -- No current database. -- Žiadna otvorená databáza. -- -- -- No source database, nothing to do. -- Žiadna zdrojová databáza, niet čo robiť. -- -- -- Search Results (%1) -- Výsledky hľadania (%1) -- -- -- No Results -- Žiadne výsledky -- -- -- File has changed -- Súbor bol zmenený -- -- -- The database file has changed. Do you want to load the changes? -- Súbor databázy bol zmenený. Chcete načítať zmeny? -- -- -- Merge Request -- Požiadavka zlúčenia -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Súbor databázy bol zmenený a Vy máte neuložené zmeny. --Chcete zlúčiť svoje zmeny? -- -- -- Empty recycle bin? -- Vyprázdniť kôš? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Naozaj chcete na trvalo odstrániť všetko zo svojho koša? -- -- -- Do you really want to delete %n entry(s) for good? -- Naozaj chcete natrvalo odstrániť %n položku?Naozaj chcete natrvalo odstrániť %n položky?Naozaj chcete natrvalo odstrániť %n položiek?Naozaj chcete natrvalo odstrániť %n položky? -- -- -- Delete entry(s)? -- Odstrániť položku?Odstrániť položky?Odstrániť položky?Odstrániť položky? -- -- -- Move entry(s) to recycle bin? -- Presunúť položku do koša?Presunúť položky do koša?Presunúť položky do koša?Presunúť položky do koša? -- -- -- Lock Database? -- Zamknúť databázu? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Upravujete položku. Zahodiť zmeny a zamknúť napriek tomu? -- -- -- "%1" was modified. --Save changes? -- „%1” bol zmenený. --Uložiť zmeny? -- -- -- Database was modified. --Save changes? -- Databáza bola zmenená. --Uložiť zmeny? -- -- -- Save changes? -- Uložiť zmeny? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Nemožno otvoriť nový databázový súbor počas pokusu o automatické opätovné načítanie. --Chyba: %1 -- -- -- Disable safe saves? -- Vypnúť bezpečné ukladanie? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC pri ukladaní databázy viac krát zlyhal. Pravdepodobne to je spôsobené službou synchronizácie súborov, ktorá drží zámok na ukladanom súbore. --Vypnúť bezpečné ukladanie a skúsiť znova? -- -- -- Passwords -- Heslá -- -- -- Save database as -- Uložiť databázu ako -- -- -- KeePass 2 Database -- Databáza KeePass 2 -- -- -- Replace references to entry? -- Nahradiť existujúcu položku? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Položka „%1” má %2 odkaz. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?Položka „%1” má %2 odkazy. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?Položka „%1” má %2 odkazov. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?Položka „%1” má %2 odkazu. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť? -- -- -- Delete group -- Odstrániť skupinu -- -- -- Move group to recycle bin? -- Presunúť skupinu do koša? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Naozaj chcete presunúť skupinu „%1” do koša? -- -- -- Successfully merged the database files. -- Úspešne zlúčené databázové súbory. -- -- -- Database was not modified by merge operation. -- Databáza nebola operáciou zlúčenia zmenená. -- -- -- Shared group... -- Zdieľaná skupina… -- -- -- Writing the database failed: %1 -- Zápis do databázy zlyhal: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Táto databáza je otvorená len na čítanie. Automatické ukladanie je vypnuté. -- -- -- Save database backup -- Uložiť zálohu databázy -- -- -- Could not find database file: %1 -- Nemožno nájsť súbor databázy: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Položka -- -- -- Advanced -- Pokročilé -- -- -- Icon -- Ikona -- -- -- Auto-Type -- Automatické vypĺňanie -- -- -- Properties -- Vlastnosti -- -- -- History -- História -- -- -- SSH Agent -- Agent SSH -- -- -- n/a -- neznáme -- -- -- (encrypted) -- (šifrované) -- -- -- Select private key -- Zvoľte súkromný kľúč -- -- -- Entry history -- História položky -- -- -- Add entry -- Pridať položku -- -- -- Edit entry -- Upraviť položku -- -- -- New attribute -- Nový atribút -- -- -- Are you sure you want to remove this attribute? -- Naozaj chcete odstrániť tento atribút? -- -- -- Tomorrow -- Zajtra -- -- -- %n week(s) -- %n týždeň%n týždne%n týždňov%n týždňov -- -- -- %n month(s) -- %n mesiacoch%n mesiacoch%n mesiacoch%n mesiacoch -- -- -- Entry updated successfully. -- Položka úspešne zmenená. -- -- -- New attribute %1 -- Nový atribút %1 -- -- -- %n year(s) -- %n rok%n roky%n rokov%n rokov -- -- -- Confirm Removal -- Potvrdiť odstránenie -- -- -- Browser Integration -- Integrácia prehliadača -- -- -- <empty URL> -- <prázdna URL> -- -- -- Are you sure you want to remove this URL? -- Naozaj chcete odstrániť túto URL? -- -- -- Reveal -- Odkryť -- -- -- Hide -- Skryť -- -- -- Unsaved Changes -- Neuložené zmeny -- -- -- Would you like to save changes to this entry? -- Chcete uložiť zmeny tejto položky? -- -- -- [PROTECTED] Press Reveal to view or edit -- [CHRÁNENÉ] Stlačte odkryť na zobrazenie alebo úpravu -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Ďalšie atribúty -- -- -- Add -- Pridať -- -- -- Remove -- Odstrániť -- -- -- Edit Name -- Upraviť názov -- -- -- Protect -- Chrániť -- -- -- Reveal -- Odkryť -- -- -- Attachments -- Prílohy -- -- -- Foreground Color: -- Farba popredia: -- -- -- Background Color: -- Farba pozadia: -- -- -- Attribute selection -- Výber atribútu -- -- -- Attribute value -- Hodnota atribútu -- -- -- Add a new attribute -- Pridať nový atribút -- -- -- Remove selected attribute -- Odstrániť vybraný atribút -- -- -- Edit attribute name -- Upraviť meno atribúta -- -- -- Toggle attribute protection -- Prepnúť ochranu atribúta -- -- -- Show a protected attribute -- Zobraziť chránený atribút -- -- -- Foreground color selection -- Výber farby popredia -- -- -- Background color selection -- Výber farby pozadia -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Ak je zvolené, položka nebude zahrnutá v hlásenia ako Health Check alebo HIBP, a to ani keď nespĺňa požiadavky kvality (napr. náhodnosť hesla alebo jeho opakované použitie). Môžete to zvoliť, ak máte heslo mimo svojej kontroly (napr. štvorciferný PIN), aby ste zbytočne nezapĺňali hlasenia.</p></body></html> -- -- -- Exclude from database reports -- Vylúčiť z hlásení databázy -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Zapnúť Automatické vypĺňanie pre túto položku -- -- -- Window Associations -- Priradenie okna -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Názov okna: -- -- -- Use a specific sequence for this association: -- Pre toto priradenie použiť špecifickú postupnosť: -- -- -- Custom Auto-Type sequence -- Vlastná postupnosť Automatického vypĺňania -- -- -- Open Auto-Type help webpage -- Otvorí webovú stránku Automatického vypĺňania -- -- -- Existing window associations -- Existujúce priradenia okna -- -- -- Add new window association -- Pridať nové priradenia okna -- -- -- Remove selected window association -- Odstrániť vybrané priradenia okna -- -- -- You can use an asterisk (*) to match everything -- Môžete použiť hviezdičku (*) na zhodu so všetkým -- -- -- Set the window association title -- Nastaviť názov priradenia okna -- -- -- You can use an asterisk to match everything -- Môžete použiť hviezdičku na zhodu so všetkým -- -- -- Custom Auto-Type sequence for this window -- Vlastná postupnosť Automatického vypĺňania tohoto okna -- -- -- Inherit default Auto-Type sequence from the group -- Zdediť predvolenú postupnosť Automatického vypĺňania zo skupiny -- -- -- Use custom Auto-Type sequence: -- Použiť vlastnú postupnosť Automatického vypĺňania: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Tieto nastavenia ovplyvňujú správanie položky s doplnkom prehliadača. -- -- -- General -- Všeobecné -- -- -- Skip Auto-Submit for this entry -- Zapnúť Automatické vypĺňanie pre túto položku -- -- -- Hide this entry from the browser extension -- Skryť túto položku v rozšírení prehliadača -- -- -- Additional URL's -- Ďalšie URL -- -- -- Add -- Pridať -- -- -- Remove -- Odstrániť -- -- -- Edit -- Upraviť -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Toto nastavenie posielať do prehliadača len pre dialógy HTTP Auth. Ak je zapnuté, bežné prihlasovacie formuláre nebudú na výber poskytovať túto položku. -- -- -- Use this entry only with HTTP Basic Auth -- Použiť položku len pre HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Zobraziť -- -- -- Restore -- Vrátiť -- -- -- Delete -- Odstrániť -- -- -- Delete all -- Odstrániť všetko -- -- -- Entry history selection -- Výber histórie položky -- -- -- Show entry at selected history state -- Zobraziť stav položky v okamžiku zvolenej histórie -- -- -- Restore entry to selected history state -- Obnoviť stav položky do okamžiku zvolenej histórie -- -- -- Delete selected history state -- Vymazať zvolený stav histórie -- -- -- Delete all history -- Vymazať celú históriu -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Heslo: -- -- -- Title: -- Názov: -- -- -- Presets -- Predvoľby -- -- -- Toggle the checkbox to reveal the notes section. -- Prepnite zaškrtávacie pole na odkrytie sekcie poznámok. -- -- -- Username: -- Použ. meno: -- -- -- Url field -- Pole URL -- -- -- Download favicon for URL -- Stiahnuť ikonu URL -- -- -- Password field -- Pole pre heslo -- -- -- Toggle notes visible -- Prepnúť tobrazenie poznámok -- -- -- Expiration field -- Pole doby platnosti -- -- -- Expiration Presets -- Prednastavenia platnosti -- -- -- Expiration presets -- Prednastavenia platnosti -- -- -- Notes field -- Pole poznámok -- -- -- Title field -- Pole nadpisu -- -- -- Username field -- Pole použ. mena -- -- -- Toggle expiration -- Prepnúť dobu platnosti -- -- -- Notes: -- Poznámky: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Platí do: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulár -- -- -- Remove key from agent after -- Odstrániť kľúč z agenta po -- -- -- seconds -- sekundy -- -- -- Fingerprint -- Odtlačok -- -- -- Remove key from agent when database is closed/locked -- Odstrániť kľúč z agenta po zatvorení/zamknutí databázy -- -- -- Public key -- Verejný kľúč -- -- -- Add key to agent when database is opened/unlocked -- Pridať kľúč do agenta keď je databáza otvorená/odomknutá -- -- -- Comment -- Komentár -- -- -- Decrypt -- Dešifrovať -- -- -- n/a -- neznáme -- -- -- Copy to clipboard -- Kopírovať do schránky -- -- -- Private key -- Súkromný kľúč -- -- -- External file -- Externý súbor -- -- -- Browse... -- Button for opening file dialog -- Prechádzať… -- -- -- Attachment -- Príloha -- -- -- Add to agent -- Pridať do agenta -- -- -- Remove from agent -- Odstrániť z agenta -- -- -- Require user confirmation when this key is used -- Vyžadovať potvrdenie používateľa, keď je tento kľúč použitý -- -- -- Remove key from agent after specified seconds -- Odstrániť kľúč z agenta po zadanom počte sekúnd -- -- -- Browser for key file -- Vybrať súbor kľúča -- -- -- External key file -- Súbor externého kľúča -- -- -- Select attachment file -- Zvoľte súbor prílohy -- -- -- -- EditGroupWidget -- -- Group -- Skupina -- -- -- Icon -- Ikona -- -- -- Properties -- Vlastnosti -- -- -- Add group -- Pridať skupinu -- -- -- Edit group -- Upraviť skupinu -- -- -- Enable -- Zapnúť -- -- -- Disable -- Vypnúť -- -- -- Inherit from parent group (%1) -- Zdediť z nadradenej skupiny (%1) -- -- -- Entry has unsaved changes -- Položka má neuložené zmeny -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Typ: -- -- -- Path: -- Cesta: -- -- -- Password: -- Heslo: -- -- -- Inactive -- Neaktívne -- -- -- KeeShare unsigned container -- Nepodpísaný kontajner KeeShare -- -- -- KeeShare signed container -- Podpísaný kontajner KeeShare -- -- -- Select import source -- Vyberte zdroj importu -- -- -- Select export target -- Vyberte cieľ exportu -- -- -- Select import/export file -- Vyberte súbor importu/exportu -- -- -- Clear -- Vymazať -- -- -- Import -- Importovať -- -- -- Export -- Export -- -- -- Synchronize -- Synchronizovať -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Táto verzia KeePassXC nepodporuje zdieľanie tohoto typu kontajnera. --Podporované rozšírenia sú: %1. -- -- -- %1 is already being exported by this database. -- %1 už bolo exportované touto databázou. -- -- -- %1 is already being imported by this database. -- %1 už bolo importované touto databázou. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 má byť importované a exportované rôznymi skupinami tejto databázy. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare je momentálne vypnuté. Import/export môžete zapnúť v nastaveniach aplikácie. -- -- -- Database export is currently disabled by application settings. -- Export databázy je momentálne vypnutý v nastaveniach aplikácie. -- -- -- Database import is currently disabled by application settings. -- Import databázy je momentálne vypnutý v nastaveniach aplikácie. -- -- -- Sharing mode field -- Pole režimu zdieľania -- -- -- Path to share file field -- Pole cesty zdieľania súboru -- -- -- Password field -- Pole pre heslo -- -- -- Clear fields -- Vymazať polia -- -- -- Browse for share file -- Vybrať zdieľaný súbor -- -- -- Browse... -- Prechádzať… -- -- -- -- EditGroupWidgetMain -- -- Name field -- Pole mena -- -- -- Notes field -- Pole poznámok -- -- -- Toggle expiration -- Prepnúť dobu platnosti -- -- -- Auto-Type toggle for this and sub groups -- Prepnúť Automatické dopĺňanie tejto a vnorených skupín -- -- -- Expiration field -- Pole doby platnosti -- -- -- Search toggle for this and sub groups -- Prepnúť hľadanie tejto a podriadených skupín -- -- -- Default auto-type sequence field -- Pole postupnosti Automatického vypĺňania -- -- -- Expires: -- Platí do: -- -- -- Use default Auto-Type sequence of parent group -- Použiť predvolenú postupnosť Automatického vypĺňania rodičovskej skupiny -- -- -- Auto-Type: -- Automatické vypĺňanie: -- -- -- Search: -- Hľadať: -- -- -- Notes: -- Poznámky: -- -- -- Name: -- Názov: -- -- -- Set default Auto-Type sequence -- Nastaviť predvolenú postupnosť Automatického vypĺňania -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Pridať vlastnú ikonu -- -- -- Delete custom icon -- Odstrániť vlastnú ikonu -- -- -- Download favicon -- Stiahnuť ikonu stránky -- -- -- Unable to fetch favicon. -- Nemožno stiahnuť ikonu stránky -- -- -- Images -- Obrázky -- -- -- All files -- Všetky súbory -- -- -- Confirm Delete -- Potvrďte odstránenie -- -- -- Select Image(s) -- vyberte obrázok(y) -- -- -- Successfully loaded %1 of %n icon(s) -- Úspešne načítané %1 z %n ikonyÚspešne načítané %1 z %n ikonÚspešne načítané %1 z %n ikonÚspešne načítané %1 z %n ikony -- -- -- No icons were loaded -- Neboli načítané ikony -- -- -- %n icon(s) already exist in the database -- %n ikony už v databáze existuje%n ikony už v databáze existujú%n ikon už v databáze existuje%n ikony už v databáze existuje -- -- -- The following icon(s) failed: -- Nasledujúca ikona zlyhala:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Môžete zapnúť webovú službu ikon DuckDuckGo v Nástroje -> Nastavenie -> Bezpečnosť -- -- -- Download favicon for URL -- Stiahnuť ikonu URL -- -- -- Apply selected icon to subgroups and entries -- Použiť zvolenú ikonu na podskupiny a položky -- -- -- Also apply to child groups -- Použiť aj na podriadené skupiny -- -- -- Also apply to child entries -- Použiť aj na podriadené položky -- -- -- Also apply to all children -- Použiť na všetkých potomkov -- -- -- Existing icon selected. -- Zvolená existujúca ikona. -- -- -- Use default icon -- Použiť predvolenú ikonu -- -- -- Use custom icon -- Použiť vlastnú ikonu -- -- -- Apply icon to... -- Použiť ikonu na… -- -- -- Apply to this group only -- Použiť len na túto skupinu -- -- -- -- EditWidgetProperties -- -- Created: -- Vytvorené: -- -- -- Modified: -- Zmenené: -- -- -- Accessed: -- Pristupované: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Dáta zásuvného modulu -- -- -- Remove -- Odstrániť -- -- -- Delete plugin data? -- Odstrániť dáta zásuvného modulu? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Naozaj chcete odstrániť dáta zvoleného zásuvného modulu? --Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. -- -- -- Key -- Kľúč -- -- -- Value -- Hodnota -- -- -- Datetime created -- Dátum a čas vytvorenia -- -- -- Datetime modified -- Dátum a čas úpravy -- -- -- Datetime accessed -- Dátum a čas použitia -- -- -- Unique ID -- Jedinečné ID -- -- -- Plugin data -- Dáta zásuvného modulu -- -- -- Remove selected plugin data -- Odstrániť dáta zásuvného modulu -- -- -- -- Entry -- -- %1 - Clone -- %1 – Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Názov -- -- -- Size -- Veľkosť -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulár -- -- -- Add -- Pridať -- -- -- Remove -- Odstrániť -- -- -- Open -- Otvoriť -- -- -- Save -- Uložiť -- -- -- Select files -- Zvoľte súbory -- -- -- Are you sure you want to remove %n attachment(s)? -- Naozaj chcete odstrániť %n prílohu?Naozaj chcete odstrániť %n prílohy?Naozaj chcete odstrániť %n príloh?Naozaj chcete odstrániť %n príloh? -- -- -- Save attachments -- Uložiť prílohy -- -- -- Unable to create directory: --%1 -- Nemožno vytvoriť zložku: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Naozaj chcete prepísať existujúci súbor „%1” prílohou? -- -- -- Confirm overwrite -- Potvrďte prepísanie -- -- -- Unable to save attachments: --%1 -- Nemožno uložiť prílohy: --%1 -- -- -- Unable to open attachment: --%1 -- Nemožno otvoriť prílohu: --%1 -- -- -- Unable to open attachments: --%1 -- Nemožno otvoriť prílohy: --%1 -- -- -- Confirm remove -- Potvrdiť odstránenie -- -- -- Unable to open file(s): --%1 -- Nemožno otvoriť súbor: --%1Nemožno otvoriť súbory: --%1Nemožno otvoriť súbory: --%1Nemožno otvoriť súbory: --%1 -- -- -- Attachments -- Prílohy -- -- -- Add new attachment -- Pridať novú prílohu -- -- -- Remove selected attachment -- Odstrániť zvolenú prílohu -- -- -- Open selected attachment -- Otvoriť zvolenú prílohu -- -- -- Save selected attachment to disk -- Uložiť zvolenú prílohu na disk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 je veľký súbor (%2 MB). --Vaša databáza môže veľmi narásť a znížiť výkon. -- --Naozaj chcete pridať tento súbor? -- -- -- Confirm Attachment -- Potvrdiť prílohu -- -- -- -- EntryAttributesModel -- -- Name -- Názov -- -- -- -- EntryHistoryModel -- -- Last modified -- Posledná úprava -- -- -- Title -- Nadpis -- -- -- Username -- Používateľské meno -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Skupina -- -- -- Title -- Nadpis -- -- -- Username -- Používateľské meno -- -- -- URL -- URL -- -- -- Never -- Nikdy -- -- -- Password -- Heslo -- -- -- Notes -- Poznámky -- -- -- Expires -- Platí do -- -- -- Created -- Vytvorené -- -- -- Modified -- Upravené -- -- -- Accessed -- Pristupované -- -- -- Attachments -- Prílohy -- -- -- Size -- Veľkosť -- -- -- Group name -- Názov skupiny -- -- -- Entry title -- Názov položky -- -- -- Entry notes -- Poznámky položky -- -- -- Entry expires at -- Položka platí do -- -- -- Creation date -- Dátum vytvorenia -- -- -- Last modification date -- Dátum poslednej úpravy -- -- -- Last access date -- Dátum posledného prístupu -- -- -- Attached files -- Pripojené súbory -- -- -- Entry size -- Veľkosť položky -- -- -- Has attachments -- Má prílohy -- -- -- Has TOTP one-time password -- Má TOTP jednorázové časové heslo -- -- -- -- EntryPreviewWidget -- -- Close -- Zatvoriť -- -- -- General -- Všeobecné -- -- -- Username -- Použ. meno: -- -- -- Password -- Heslo -- -- -- Expiration -- Platí do -- -- -- URL -- URL -- -- -- Attributes -- Atribúty -- -- -- Attachments -- Prílohy -- -- -- Notes -- Poznámky -- -- -- Autotype -- Automatické vypĺňanie -- -- -- Window -- Okno -- -- -- Sequence -- Postupnosť -- -- -- Searching -- Hľadanie -- -- -- Search -- Hľadať -- -- -- Clear -- Vymazať -- -- -- Never -- Nikdy -- -- -- [PROTECTED] -- [CHRÁNENÉ] -- -- -- Enabled -- Zapnuté -- -- -- Disabled -- Vypnuté -- -- -- Share -- Zdieľať -- -- -- Display current TOTP value -- Zobraziť aktuálnu hodnotu TOTP -- -- -- Advanced -- Pokročilé -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Neplatná URL -- -- -- -- EntryView -- -- Fit to window -- Prispôsobiť oknu -- -- -- Fit to contents -- Prispôsobiť obsahu -- -- -- Reset to defaults -- Obnoviť predvolené -- -- -- Has attachments -- Entry attachment icon toggle -- Má prílohy -- -- -- Has TOTP -- Entry TOTP icon toggle -- Má TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Položka „%1” z databázy „%2” bola použitá %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Zlyhala registrácia služby DBus na %1. -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n položka použitá v %1%n položky použité v %1%n položiek použitých v %1%n položky použité v %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Meno súboru -- -- -- Group -- Skupina -- -- -- Manage -- Spravovať -- -- -- Unlock to show -- Odomknúť na zobrazenie -- -- -- None -- Žiadny -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikácia -- -- -- Manage -- Spravovať -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Neznámy -- -- -- Unknown -- Unknown executable path -- Neznámy -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, príkaz: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Je spustená iná tajná služba (%1).<br/>Prosím, zastavte/odstráňte ju pred zapnutím Integrácie Tajnej služby. -- -- -- -- Group -- -- [empty] -- group has no children -- [prázdne] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Online overenie hesla zlyahlo -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Stiahnuť ikony -- -- -- Cancel -- Zrušiť -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Máte problémy so sťahovaním ikon? --V bezpečnostnej sekcii nastavení aplikácie môžete zapnúť webovú službu ikon. -- -- -- Close -- Zatvoriť -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Prosím, počkajte, spracovanie zoznamu položiek… -- -- -- Downloading... -- Sťahovanie… -- -- -- Ok -- Ok -- -- -- Already Exists -- Už existuje -- -- -- Download Failed -- Sťahovanie zlyhalo -- -- -- Downloading favicons (%1/%2)... -- Sťahovanie ikon (%1/%2)… -- -- -- -- KMessageWidget -- -- &Close -- &Zatvoriť -- -- -- Close message -- Zatvoriť správu -- -- -- -- Kdbx3Reader -- -- missing database headers -- chýbajúce hlavičky databázy -- -- -- Header doesn't match hash -- Hlavička nezodpovedá odtlačku -- -- -- Invalid header id size -- Neplatná veľkosť ID hlavičky -- -- -- Invalid header field length -- Neplatná dĺžka poľa hlavičky -- -- -- Invalid header data length -- Neplatná dĺžka dát hlavičky -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. --Ak sa to opakuje, potom môže byť súbor databázy poškodený. -- -- -- Unable to calculate database key -- Nemožno vypočítať kľúč databázy -- -- -- Unable to issue challenge-response: %1 -- Nemožno vyvolať výzvu – odpoveď: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Nemožno vyvolať výzvu – odpoveď: %1 -- -- -- Unable to calculate database key -- Nemožno vypočítať kľúč databázy -- -- -- -- Kdbx4Reader -- -- missing database headers -- chýbajúce hlavičky databázy -- -- -- Invalid header checksum size -- Neplatná veľkosť kontrolného súčtu hlavičky -- -- -- Header SHA256 mismatch -- Nezhoda hlavičky SHA256 -- -- -- Unknown cipher -- Neznáma šifra -- -- -- Invalid header id size -- Neplatná veľkosť ID hlavičky -- -- -- Invalid header field length -- Neplatná dĺžka poľa hlavičky -- -- -- Invalid header data length -- Neplatná dĺžka dát hlavičky -- -- -- Failed to open buffer for KDF parameters in header -- Zlyhalo otvorenie bufera parametrov KDF v hlavičke -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nepodporovaná funkcia odvodenia kľúča (KDF) alebo neplatné parametre -- -- -- Legacy header fields found in KDBX4 file. -- V súbore KDBX4 nájdené staré polia hlavičiek. -- -- -- Invalid inner header id size -- Neplatná veľkosť ID vnútornej hlavičky -- -- -- Invalid inner header field length -- Neplatná dĺžka poľa vnútornej hlavičky -- -- -- Invalid inner header binary size -- Neplatná binárna veľkosť vnútornej hlavičky -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Nepodporovaná verzia meta-dát KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka názvu položky mapy varianty -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Neplatné dáta názvu položky mapy varianty -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka hodnoty položky mapy varianty -- -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Neplatné dáta hodnoty položky mapy varianty -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka hodnoty logickej položky meta-dát -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka 32 bitovej celočíselnej hodnoty položky meta-dát -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka 32 bitovej kladnej celočíselné hodnoty meta-dát -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka 64 bitovej celočíselnej hodnoty meta-dát -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Neplatná dĺžka 64 bitovej kladnej celočíselné hodnoty meta-dát -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Neplatný typ položky meta-dát -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Neplatná veľkosť typu poľa meta-dát -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. --Ak sa to opakuje, potom môže byť súbor databázy poškodený. -- -- -- (HMAC mismatch) -- (nezhoda HMAC) -- -- -- Unable to calculate database key: %1 -- Nemožno vypočítať kľúč databázy: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Neplatný algoritmus symetrickej šifry. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Neplatná veľkosť IV symetrickej šifry. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Zlyhala serializácia parametrov KDF meta-dát -- -- -- Unable to calculate database key: %1 -- Nemožno vypočítať kľúč databázy: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Nepodporovaná šifra -- -- -- Invalid compression flags length -- Nepodporovaný komprimačný algoritmus -- -- -- Unsupported compression algorithm -- Nepodporovaný komprimačný algoritmus -- -- -- Invalid master seed size -- Neplatná veľkosť hlavnej náhodnosti (seed) -- -- -- Invalid transform seed size -- Neplatná transformácia hlavnej náhodnosti (seed) -- -- -- Invalid transform rounds size -- Neplatná veľkosť transformačných prechodov -- -- -- Invalid start bytes size -- Neplatná počiatočná veľkosť bajtov -- -- -- Invalid random stream id size -- Neplatná veľkosť ID náhodného prúdu -- -- -- Invalid inner random stream cipher -- Neplatná vnútorná náhodnosť prúdovej šifry -- -- -- Not a KeePass database. -- Nie je databáza KeePass -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Zvolený súbor je stará databáza KeePass 1 (.kdb). -- --Môžete ju importovať kliknutím na Databáza > „Importovať databázu KeePass 1…”. --Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť pomocou starej verzie KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Nepodporovaná verzia databázy KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Neplatná dĺžka UUID šifry: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- Nemožno spracovať UUID: %1 -- -- -- Failed to read database file. -- Zlyhalo čítanie súboru databázy. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Chyba spracovania XML: %1 -- -- -- No root group -- Žiadna koreňová skupina -- -- -- Missing icon uuid or data -- Chýbajúce UUID ikony alebo dáta -- -- -- Missing custom data key or value -- Chýbajúci kľúč alebo hodnota vlastných dát -- -- -- Multiple group elements -- Viaceré položky skupiny -- -- -- Null group uuid -- Nulový UUID skupiny -- -- -- Invalid group icon number -- Neplatný počet ikon skupiny -- -- -- Invalid EnableAutoType value -- Neplatná hodnota EnableAutoType -- -- -- Invalid EnableSearching value -- Neplatná hodnota EnableSearching -- -- -- No group uuid found -- Nenájdené UUID skupiny -- -- -- Null DeleteObject uuid -- Nulový UUID DeleteObject -- -- -- Missing DeletedObject uuid or time -- Chýbajúci UUID alebo čas DeletedObject -- -- -- Null entry uuid -- Nulový UUID položky -- -- -- Invalid entry icon number -- Neplatný počet ikon položky -- -- -- History element in history entry -- Prvok histórie v položke histórie -- -- -- No entry uuid found -- Nenájdené UUID položky -- -- -- History element with different uuid -- Prvok histórie s iným UUID -- -- -- Duplicate custom attribute found -- Nájdený duplicitný vlastný atribút -- -- -- Entry string key or value missing -- Chýba kľúč alebo hodnota reťazca položky -- -- -- Entry binary key or value missing -- Chýba binárny kľúč alebo hodnota položky -- -- -- Auto-type association window or sequence missing -- Chýba priradenie okna alebo postupnosť Automatického vypĺňania -- -- -- Invalid bool value -- Neplatná logická hodnota -- -- -- Invalid date time value -- Neplatná hodnota dátumu/času -- -- -- Invalid color value -- Neplatná hodnota farby -- -- -- Invalid color rgb part -- neplatná časť RGB farby -- -- -- Invalid number value -- Neplatná číselná hodnota -- -- -- Invalid uuid value -- Neplatná hodnota UUID -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Nemožno dekomprimovať binárku -- -- -- XML error: --%1 --Line %2, column %3 -- Chyba XML: --%1 --Riadok %2, stĺpec %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Neplatná štruktúra súboru nastavení KeeAgent. -- -- -- Private key is an attachment but no attachments provided. -- Súkromný kľúč je prílohou, ale nie sú žiadne prílohy. -- -- -- Private key is empty -- Súkromný kľúč je prázdny -- -- -- File too large to be a private key -- Súbor je na súkromný kľúč príliš veľký -- -- -- Failed to open private key -- Zlyhalo otvorenie súkromného kľúča -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Nemožno otvoriť databázu. -- -- -- Import KeePass1 Database -- Importovať databázu KeePass 1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Nemožno čítať súbor kľúča. -- -- -- Not a KeePass database. -- Nie je databáza KeePass -- -- -- Unsupported encryption algorithm. -- Nepodporovaný šifrovací algoritmus. -- -- -- Unsupported KeePass database version. -- Nepodporovaná verzia databázy KeePass. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Nemožno čítať šifrovací IV -- -- -- Invalid number of groups -- Neplatný počet skupín -- -- -- Invalid number of entries -- Neplatný počet položiek -- -- -- Invalid content hash size -- Neplatná veľkosť odtlačku obsahu -- -- -- Invalid transform seed size -- Neplatná transformácia hlavnej náhodnosti (seed) -- -- -- Invalid number of transform rounds -- Neplatný počet transformačných prechodov -- -- -- Unable to construct group tree -- Nemožno zostaviť strom skupiny -- -- -- Root -- Koreň -- -- -- Key transformation failed -- Transformácia kľúča zlyhala -- -- -- Invalid group field type number -- Neplatné číslo typu poľa skupiny -- -- -- Invalid group field size -- Neplatná veľkosť poľa skupiny -- -- -- Read group field data doesn't match size -- Prečítané dáta poľa skupiny nezodpovedajú veľkosťou -- -- -- Incorrect group id field size -- Nesprávna veľkosť ID poľa skupiny -- -- -- Incorrect group creation time field size -- Nesprávna veľkosť poľa času vytvorenia skupiny -- -- -- Incorrect group modification time field size -- Nesprávna veľkosť poľa času úpravy skupiny -- -- -- Incorrect group access time field size -- Nesprávna veľkosť poľa času prístupu skupiny -- -- -- Incorrect group expiry time field size -- nesprávna veľkosť poľa vypršania platnosti skupiny -- -- -- Incorrect group icon field size -- Nesprávna veľkosť poľa ikony skupiny -- -- -- Incorrect group level field size -- Nesprávna veľkosť poľa úrovne skupiny -- -- -- Invalid group field type -- Neplatný typ poľa skupiny -- -- -- Missing group id or level -- Chýbajúce ID alebo úrovne skupiny -- -- -- Missing entry field type number -- Chýbajúce číslo typu poľa položky -- -- -- Invalid entry field size -- Neplatná veľkosť poľa položky -- -- -- Read entry field data doesn't match size -- Prečítané dáta poľa položky majú neplatnú veľkosť -- -- -- Invalid entry uuid field size -- Neplatná veľkosť UUID poľa položky -- -- -- Invalid entry group id field size -- Neplatná veľkosť ID poľa položky skupiny -- -- -- Invalid entry icon field size -- Neplatná veľkosť poľa ikony položky -- -- -- Invalid entry creation time field size -- Neplatná veľkosť poľa vytvorenia položky -- -- -- Invalid entry modification time field size -- Neplatná veľkosť poľa poslednej úpravy -- -- -- Invalid entry expiry time field size -- Neplatná veľkosť poľa vypršania platnosti -- -- -- Invalid entry field type -- Neplatný typ poľa položky -- -- -- unable to seek to content position -- nemožno sa posunúť na pozíciu obsahu -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. --Ak sa to opakuje, potom môže byť súbor databázy poškodený. -- -- -- Unable to calculate database key -- Nemožno vypočítať kľúč databázy -- -- -- -- KeeShare -- -- Invalid sharing reference -- Neplatný odkaz zdieľania -- -- -- Inactive share %1 -- Neaktívne zdieľanie %1 -- -- -- Imported from %1 -- Importované z %1 -- -- -- Exported to %1 -- Exportované do %1 -- -- -- Synchronized with %1 -- Synchronizované s %1 -- -- -- Import is disabled in settings -- Import je vypnutý v nastaveniach -- -- -- Export is disabled in settings -- Export je vypnutý v nastaveniach -- -- -- Inactive share -- Neaktívne zdieľanie -- -- -- Imported from -- Importované z -- -- -- Exported to -- Exportované do -- -- -- Synchronized with -- Synchronizované s -- -- -- -- KeyComponentWidget -- -- Key Component -- Kľúč komponentu -- -- -- Key Component Description -- Popis kľúča komponentu -- -- -- Cancel -- Zrušiť -- -- -- Key Component set, click to change or remove -- Nastavenie kľúča komponentu, kliknite na zmenu alebo odstránenie -- -- -- Add %1 -- Add a key component -- Pridať %1 -- -- -- Change %1 -- Change a key component -- Zmeniť %1 -- -- -- Remove %1 -- Remove a key component -- Odstrániť %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 nastavené, kliknite na zmenu alebo odstránenie -- -- -- -- KeyFileEditWidget -- -- Generate -- Generovať -- -- -- Key File -- Súbor kľúča -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Môžete pridať súbor kľúča s náhodnými bajtmi, na dodatočnú bezpečnosť .</p><p>Musíte ho držať v tajnosti a nikdy nestratiť, inak prídete o prístup!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Chyba načítania súboru kľúča „%1” --Správa: %2 -- -- -- Key files -- Súbory kľúčov -- -- -- All files -- Všetky súbory -- -- -- Create Key File... -- Vytvoriť súbor kľúča... -- -- -- Error creating key file -- Chyba vytvárania súboru kľúča -- -- -- Unable to create key file: %1 -- Nemožno vytvoriť súbor kľúča: %1 -- -- -- Select a key file -- Zvoľte súbor kľúča -- -- -- Key file selection -- Výber kľúčového súboru -- -- -- Browse for key file -- Vyhľadať súbor kľúča -- -- -- Browse... -- Prechádzať… -- -- -- Generate a new key file -- Generovať nový súbor kľúča -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Poznámka: Nepoužívajte súbor, ktorý sa môže zmeniť, pretože to zabráni odomknutiu databázy! -- -- -- Invalid Key File -- Neplatný súbor kľúča -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Nemôžete použiť svoju databázu ako súbor kľúča. Prosím, zvoľte iný súbor alebo vygenerujte nový súbor kľúča. -- -- -- Suspicious Key File -- Podozrivý súbor kľúča -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Zvolený súbor kľúča vyzerá ako súbor hesla databázy. Súbor kľúča musí byť statický súbor, ktorý sa nikdy nezmení, inak navždy stratíte prístup k svojej databáze. --Naozaj chcete pokračovať s týmto súborom? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Databáza -- -- -- &Help -- &Pomocník -- -- -- &Groups -- &Skupiny -- -- -- &Tools -- &Nástroje -- -- -- &Quit -- &Koniec -- -- -- &About -- &O programe -- -- -- Database settings -- Nastavenia databázy -- -- -- Copy username to clipboard -- Skopíruje používateľské meno do schránky -- -- -- Copy password to clipboard -- Skopíruje heslo do schránky -- -- -- &Settings -- Na&stavenia -- -- -- &Title -- &Názov -- -- -- Copy title to clipboard -- Kopírovať názov do schránky -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopírovať URL do schránky -- -- -- &Notes -- &Poznámky -- -- -- Copy notes to clipboard -- Kopírovať poznámky do schránky -- -- -- Copy &TOTP -- Kopírovať &TOTP -- -- -- E&mpty recycle bin -- V&yprázdniť kôš -- -- -- Clear history -- Vymazať históriu -- -- -- Access error for config file %1 -- Chyba prístupu ku konfiguračnému súboru %1 -- -- -- Settings -- Nastavenia -- -- -- Toggle window -- Prepnúť okno -- -- -- Quit KeePassXC -- Skončiť KeePassXC -- -- -- Please touch the button on your YubiKey! -- Prosím, stlačte tlačidlo svojho YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- UPOZORNENIE: Používate nestabilné zostavenie KeePassXC! --Existuje veľké riziko poškodenia, zálohujte svoje dtabázy. --Táto verzia nie je určená na produkčné použitie. -- -- -- &Donate -- &Podporiť -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- UPOZORNENIE: Vaša verzia Qt môže spôsobiť pád KeePassXC s klávesnicou na obrazovke! --Odporúčame použiť AppImage dostupný v našej stránke sťahovaní. -- -- -- &Import -- &Import -- -- -- Create a new database -- Vytvoriť novú databázu -- -- -- Merge from another KDBX database -- Zlúčiť s inou databázou KDBX -- -- -- Add a new entry -- Pridať novú položku -- -- -- View or edit entry -- Zobraziť alebo upraviť položku -- -- -- Add a new group -- Pridať novú skupinu -- -- -- Perform &Auto-Type -- Vykonať &Automatické vypĺňanie -- -- -- Open &URL -- Otvoriť &URL -- -- -- Import a KeePass 1 database -- Importovať databázu KeePass 1… -- -- -- Import a CSV file -- Importovať súbor CSV… -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- UPOZORNENIE: Používate nestabilné zostavenie KeePassXC! --Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkčné použitie. -- -- -- Check for updates on startup? -- Skontrolovať aktualizácie pri štarte? -- -- -- Would you like KeePassXC to check for updates on startup? -- Chcete aby KeePassXC skontroloval aktualizácie pri štarte? -- -- -- You can always check for updates manually from the application menu. -- Vždy môžete skontrolovať aktualizácie manuálne z menu aplikácie. -- -- -- &Export -- &Exportovať -- -- -- Sort &A-Z -- Zoradiť &A-Z -- -- -- Sort &Z-A -- Zoradiť &Z-A -- -- -- &Password Generator -- &Generátor hesla -- -- -- Import a 1Password Vault -- Importovať z úložiska 1Password -- -- -- &Getting Started -- &Začíname -- -- -- &User Guide -- &Používateľská príručka -- -- -- &Keyboard Shortcuts -- &Klávesové skratky -- -- -- &Recent Databases -- &Nedávne databázy -- -- -- &Entries -- &Položky -- -- -- Copy Att&ribute -- Kopírovať at&ribút -- -- -- TOTP -- TOTP -- -- -- View -- Zobraziť -- -- -- Theme -- Téma -- -- -- &Check for Updates -- &Skontrolovať aktualizácie -- -- -- &Open Database… -- &Otvoriť databázu… -- -- -- &Save Database -- &Uložiť databázu -- -- -- &Close Database -- &Zatvoriť databázu -- -- -- &New Database… -- &Nová databáza… -- -- -- &Merge From Database… -- &Zlúčiť z databázou… -- -- -- &New Entry… -- &Nová položka… -- -- -- &Edit Entry… -- &Upraviť položku… -- -- -- &Delete Entry… -- O&dstrániť položku… -- -- -- &New Group… -- &Nová skupina… -- -- -- &Edit Group… -- &Upraviť skupinu… -- -- -- &Delete Group… -- O&dstrániť skupinu… -- -- -- Download All &Favicons… -- Stiahnuť &všetky ikony… -- -- -- Sa&ve Database As… -- Uložiť data&bázu ako… -- -- -- Database &Security… -- &Bezpečnosť databázy… -- -- -- Database &Reports... -- &Hlásenia databázy… -- -- -- Statistics, health check, etc. -- Štatistiky, kontrola zdravia, apod. -- -- -- &Database Settings… -- Nastavenia &databázy… -- -- -- &Clone Entry… -- &Klonovať položku… -- -- -- Move u&p -- &Posunúť vyššie -- -- -- Move entry one step up -- Posunie položku o jedno vyššie -- -- -- Move do&wn -- &Posunúť nižšie -- -- -- Move entry one step down -- Posunie položku o jedno nižšie -- -- -- Copy &Username -- Kopírovať po&už. meno -- -- -- Copy &Password -- Kopírovať &heslo -- -- -- Download &Favicon -- Stiahnuť i&konu -- -- -- &Lock Databases -- Za&mknúť databázy -- -- -- &CSV File… -- Súbor &CSV… -- -- -- &HTML File… -- Súbor &HTML… -- -- -- KeePass 1 Database… -- Databáza KeePass 1 -- -- -- 1Password Vault… -- Úložisko 1Password... -- -- -- CSV File… -- Súbor CSV… -- -- -- Show TOTP -- Zobraziť TOTP -- -- -- Show QR Code -- Zobraziť QR kód -- -- -- Set up TOTP… -- Nastaviť TOTP… -- -- -- Report a &Bug -- Nahlásiť &chybu -- -- -- Open Getting Started Guide -- Otvorí príručku Začíname -- -- -- &Online Help -- Pomocník &online -- -- -- Go to online documentation -- Prejsť na dokumentáciu on-line -- -- -- Open User Guide -- Otvorí používateľskú príručku -- -- -- Save Database Backup... -- Uložiť zálohu databázy… -- -- -- Add key to SSH Agent -- Pridať kľúč do Agenta SSH -- -- -- Remove key from SSH Agent -- Odstrániť kľúč z Agenta SSH -- -- -- Compact Mode -- Kompaktný režim -- -- -- Automatic -- Automaticky -- -- -- Light -- Svetlý -- -- -- Dark -- Tmavý -- -- -- Classic (Platform-native) -- Klasický (podľa platformy) -- -- -- Show Toolbar -- Zobraziť panel nástrojov -- -- -- Show Preview Panel -- Zobraziť panel ukážky -- -- -- Don't show again for this version -- Nezobrazovať znova v tejto verzii -- -- -- Restart Application? -- Reštartovať aplikáciu? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz? -- -- -- Perform Auto-Type Sequence -- Vykonať Automatické vypĺňanie -- -- -- {USERNAME} -- {POUŽÍVATEĽ} -- -- -- {USERNAME}{ENTER} -- {POUŽÍVATEĽ}{ENTER} -- -- -- {PASSWORD} -- {HESLO} -- -- -- {PASSWORD}{ENTER} -- {HESLO}{ENTER} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Skryť použ. mená -- -- -- Hide Passwords -- Skryť heslá -- -- -- -- ManageDatabase -- -- Database settings -- Nastavenia databázy -- -- -- Edit database settings -- Upraviť nastavenia databázy -- -- -- Unlock database -- Odomknúť databázu -- -- -- Unlock database to show more information -- Odomknúť databázu na zobrazenie ďalších informácií -- -- -- Lock database -- Zamknúť databázu -- -- -- -- ManageSession -- -- Disconnect -- Odpojiť -- -- -- Disconnect this application -- Odpojiť túto palikáciu -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Vytváranie chýbajúceho %1 [%2] -- -- -- Relocating %1 [%2] -- Relokácia %1 [%2] -- -- -- Overwriting %1 [%2] -- Prepísanie %1 [%2] -- -- -- older entry merged from database "%1" -- staršia položka zlúčená z databázy „%1” -- -- -- Adding backup for older target %1 [%2] -- Pridávanie zálohy staršieho cieľa %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Pridávanie zálohy staršieho zdroja %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Aplikujem položku staršieho cieľa na novší zdroj %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Aplikujem položku staršieho zdroja na novší cieľ %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synchronizujem z novšieho zdroja %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synchronizujem zo staršieho zdroja %1 [%2] -- -- -- Deleting child %1 [%2] -- Odstraňuje sa dieťa %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Odstraňujú sa ojedinelé ochorenia %1 [%2] -- -- -- Changed deleted objects -- Odstránené objekty boli zmenené -- -- -- Adding missing icon %1 -- Pridáva sa chýbajúca ikona %1 -- -- -- Removed custom data %1 [%2] -- Odstránené vlastné dáta %1 [%2] -- -- -- Adding custom data %1 [%2] -- Pridanie vlastných dát %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Vytvoriť novú databázu KeePassXC... -- -- -- Root -- Root group -- Koreň -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Stránka sprievodcu -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy. -- -- -- Advanced Settings -- Pokročilé nastavenia -- -- -- Simple Settings -- Jednoduché nastavenia -- -- -- Encryption Settings -- Nastavenia šifrovania -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Prihlasovacie údaje databázy -- -- -- A set of credentials known only to you that protects your database. -- Sada prihlasovacích údajov, známe len Vám, chráni vašu databázu. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Nastavenia šifrovania -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Všeobecné informácie databázy -- -- -- Please fill in the display name and an optional description for your new database: -- Prosím, vyplňte meno a prípadne aj popis svojej novej databázy: -- -- -- -- NixUtils -- -- Password Manager -- Správca hesiel -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Neplatné OpData01, neobsahuje hlavičku -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Nemožno čítať všetky bajty IV, potrebných 16, ale získaných %1 -- -- -- Unable to init cipher for opdata01: %1 -- Nemožno inicializovať šifru pre opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Nemožno čítať všetky bajty podpisu HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- Zlý formát OpData01 kvôli zlyhanému HMAC -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- Očakávaných %1 B prostého textu, nájdených %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Čítanie databázy neposkytuje inštanciu --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Adresár .opvault musí existovať -- -- -- Directory .opvault must be readable -- Adresár .opvault musí byť čitateľný -- -- -- Directory .opvault/default must exist -- Adresár .opvault/default musí existovať -- -- -- Directory .opvault/default must be readable -- Adresár .opvault/default musí byť čitateľný -- -- -- Unable to decode masterKey: %1 -- Nemožno dekódovať hlavný kľúč: %1 -- -- -- Unable to derive master key: %1 -- Nemožno odvodiť hlavný kľúč: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Neplatný súbor kľúča, očakávaný je kľúč OpenSSH -- -- -- PEM boundary mismatch -- Nezhoda ohraničenia PEM -- -- -- Base64 decoding failed -- Dekódovanie Base64 zlyhalo -- -- -- Key file way too small. -- Súbor kľúča je príliš krátky. -- -- -- Key file magic header id invalid -- Neplatný ID magickej hlavičky súboru kľúča -- -- -- Found zero keys -- Nenájdené žiadne kľúče -- -- -- Failed to read public key. -- Zlyhalo čítanie verejného kľúča. -- -- -- Corrupted key file, reading private key failed -- Poškodený súbor kľúča, čítanie súkromného kľúč azlyhalo -- -- -- No private key payload to decrypt -- Žiadny obsah súkromného kľúča na dešifrovanie -- -- -- Trying to run KDF without cipher -- Pokúšate sa spustiť KDF bez šifry -- -- -- Passphrase is required to decrypt this key -- Na dešifrovanie tohoto kľúča je potrebná tajná veta -- -- -- Key derivation failed, key file corrupted? -- Odvodenie kľúča zlyhalo, súbor kľúča je poškodený? -- -- -- Decryption failed, wrong passphrase? -- Dešifrovanie zlyhalo, zlá tajná veta? -- -- -- Unexpected EOF while reading public key -- Neočakávaný koniec súboru pri čítaní verejného kľúča -- -- -- Unexpected EOF while reading private key -- Neočakávaný koniec súboru pri čítaní súkromného kľúča -- -- -- Can't write public key as it is empty -- Nemožno zapísať verejný kľúč, pretože je prázdny -- -- -- Unexpected EOF when writing public key -- Neočakávaný koniec súboru pri zápise verejného kľúča -- -- -- Can't write private key as it is empty -- Nemožno zapísať súkromný kľúč, pretože je prázdny -- -- -- Unexpected EOF when writing private key -- Neočakávaný koniec súboru pri zápise súkromného kľúča -- -- -- Unsupported key type: %1 -- Nepodporovaný typ kľúča: %1 -- -- -- Unknown cipher: %1 -- Neznáma šifra: %1 -- -- -- Cipher IV is too short for MD5 kdf -- IV šifry je príliš krátky na MD5 KDF -- -- -- Unknown KDF: %1 -- Neznáma KDF: %1 -- -- -- Unknown key type: %1 -- Neznámy typ kľúča: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Heslá sa nezhodujú. -- -- -- Passwords match so far -- Heslá sa zhodujú až potiaľ -- -- -- Toggle Password (%1) -- Prepnúť heslo (%1) -- -- -- Generate Password (%1) -- Generovať heslo (%1) -- -- -- Warning: Caps Lock enabled! -- Upozornenie: Caps Lock zapnutý! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Zadajte heslo: -- -- -- Confirm password: -- Potvrďte heslo: -- -- -- Password -- Heslo -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Heslo je primárna metóda na zabezpečenie svojej databázy.</p><p>Dobré heslá sú dlhé a jedinečné. KeePassXC Vám môže nejaké vygenerovať.</p> -- -- -- Passwords do not match. -- Heslá sa nezhodujú. -- -- -- Password field -- Pole pre heslo -- -- -- Repeat password field -- Pole opakovaného hesla -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- sila -- -- -- entropy -- náhodnosť -- -- -- Password -- Heslo -- -- -- Character Types -- Typy znakov -- -- -- Numbers -- Číslice -- -- -- Extended ASCII -- Rozšírené ASCII -- -- -- Exclude look-alike characters -- Vynechať podobne vyzerajúce znaky -- -- -- Pick characters from every group -- Zvoliť znak z každej skupiny -- -- -- &Length: -- &Dĺžka: -- -- -- Passphrase -- Tajná veta -- -- -- Wordlist: -- Zoznam slov: -- -- -- Word Separator: -- Oddeľovač slov: -- -- -- Close -- Zatvoriť -- -- -- Entropy: %1 bit -- Náhodnosť: %1 b -- -- -- Password Quality: %1 -- Kvalita hesla: %1 -- -- -- Poor -- Password quality -- Slabé -- -- -- Weak -- Password quality -- Slabé -- -- -- Good -- Password quality -- Dobré -- -- -- Excellent -- Password quality -- Výbroné -- -- -- Switch to advanced mode -- Prepnúť na pokročilý režim -- -- -- Advanced -- Pokročilé -- -- -- Braces -- Zátvorky -- -- -- Punctuation -- Interpunkcia -- -- -- Quotes -- Úvodzovky -- -- -- Logograms -- Zástupné znaky -- -- -- Character set to exclude from generated password -- Sady znakov, ktoré majú byť vynechané pri generovaní hesla -- -- -- Do not include: -- Nezahŕňať: -- -- -- Add non-hex letters to "do not include" list -- Pridajte nie-šestnástkové písmená do zoznamu „vynechať” -- -- -- Hex -- Šestnástkové -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Vynechané znaky: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” -- -- -- Generated password -- Generované heslo -- -- -- Upper-case letters -- Veľké písmená -- -- -- Lower-case letters -- Malé písmená -- -- -- Special characters -- Špeciálne znaky -- -- -- Math Symbols -- Matematické symboly -- -- -- Dashes and Slashes -- Pomlčky a lomky -- -- -- Excluded characters -- Rozšírené znaky -- -- -- Hex Passwords -- Hexadecimálne heslá -- -- -- Password length -- Dĺžka hesla -- -- -- Word Case: -- Slová veľkými: -- -- -- Regenerate password -- Obnoviť heslo -- -- -- Copy password -- Kopírovať heslo -- -- -- lower case -- malé písmená -- -- -- UPPER CASE -- VEĽKÉ PÍSMENÁ -- -- -- Title Case -- Titulková Veľkosť -- -- -- Generate Password -- Generovať heslo -- -- -- Also choose from: -- Tiež vybrať z: -- -- -- Additional characters to use for the generated password -- Dodatočné znaky použité pri generovaní hesla -- -- -- Additional characters -- Dodatočné znaky -- -- -- Word Count: -- Počet slov: -- -- -- Esc -- Esc -- -- -- Apply Password -- Použiť heslo -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Obnoviť heslo (%1) -- -- -- Special Characters -- Špeciálne znaky -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Štatistiky -- -- -- Very weak password -- Veľmi slabé heslo -- -- -- Password entropy is %1 bits -- Náhodnosť hesla je %1 b -- -- -- Weak password -- Slabé heslo -- -- -- Used in %1/%2 -- Použité v %1/%2 -- -- -- Password is used %1 times -- Heslo je použité %1 krát -- -- -- Password has expired -- Heslo vypršalo -- -- -- Password expiry was %1 -- Platnosť hesla bola %1 -- -- -- Password is about to expire -- Heslo čoskoro vyprší -- -- -- Password expires in %1 days -- Platnosť hesla vyprší za %1 dní -- -- -- Password will expire soon -- Heslo čoskoro vyprší -- -- -- Password expires on %1 -- Platnosť hesla vyprší %1 -- -- -- Health Check -- Kontrola zdravia -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Prepísať -- -- -- Delete -- Odstrániť -- -- -- Move -- Presunúť -- -- -- Empty -- Vyprádzniť -- -- -- Remove -- Odstrániť -- -- -- Skip -- Preskočiť -- -- -- Disable -- Vypnúť -- -- -- Merge -- Zlúčiť -- -- -- Continue -- Pokračovať -- -- -- -- QObject -- -- Database not opened -- Databáza nie je otvorená -- -- -- Database hash not available -- Odtlačok databázy nie je dostupný -- -- -- Client public key not received -- Nebol prijatý verejný kľúč klienta -- -- -- Cannot decrypt message -- Nemožno dešifrovať správu -- -- -- Action cancelled or denied -- Akcia zrušená alebo odmietnutá -- -- -- KeePassXC association failed, try again -- Spojenie s KeePassXC zlyhalo, skúste znova -- -- -- Encryption key is not recognized -- Šifrovací kľúč nerozpoznaný -- -- -- Incorrect action -- Nesprávna akcia -- -- -- Empty message received -- Prijatá prázdna správa -- -- -- No URL provided -- Nebolo poskytnuté URL -- -- -- No logins found -- Nebolo nájdené prihlásenie -- -- -- Unknown error -- Neznáma chyba -- -- -- Add a new entry to a database. -- Pridá do databázy novú položku -- -- -- Path of the database. -- Cesta k databáze. -- -- -- Key file of the database. -- Súbor kľúča databázy. -- -- -- path -- cesta -- -- -- Username for the entry. -- Použ. meno položky. -- -- -- username -- použmeno -- -- -- URL for the entry. -- URL položky. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Vyžiadať heslo položky. -- -- -- Generate a password for the entry. -- Generovať heslo tejto položky. -- -- -- length -- dĺžka -- -- -- Path of the entry to add. -- Cesta pridávanej položky -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Cesta položky na vystrihnutie. -- -- -- Timeout in seconds before clearing the clipboard. -- Časový limit pred vymazaním schránky. -- -- -- Edit an entry. -- Upraviť položku. -- -- -- Title for the entry. -- Názov položky. -- -- -- title -- názov -- -- -- Path of the entry to edit. -- Cesta položky na úpravu. -- -- -- Estimate the entropy of a password. -- Očakávaná náhodnosť hesla. -- -- -- Password for which to estimate the entropy. -- Heslo, ktorému zistiť očakávanú náhodnosť. -- -- -- Perform advanced analysis on the password. -- Vykonať pokročilú analýzu hesla. -- -- -- -- --Available commands: -- -- -- --Dostupné príkazy: -- -- -- -- Name of the command to execute. -- Názov príkazu na spustenie. -- -- -- List database entries. -- Zoznam položiek databázy. -- -- -- Path of the group to list. Default is / -- Cesta vypísanej skupiny. Predvolene / -- -- -- Find entries quickly. -- Rýchlo nájdite položky. -- -- -- Search term. -- Hľadaný výraz. -- -- -- Merge two databases. -- Zlúčiť dve databázy. -- -- -- Path of the database to merge from. -- Cesta k databáze, z ktorej zlúčiť. -- -- -- Use the same credentials for both database files. -- Použiť rovnaké prihlásenie pre oba súbory databáz. -- -- -- Key file of the database to merge from. -- Súbor kľúča databázy, z ktorej má byť zlúčené. -- -- -- Show an entry's information. -- Zobraziť informácie položky. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Názvy zobrazených atribútov. Táto voľba môže byť zadaná viac ako raz a každý atribút bude zobrazený jeden na riadok v zadanom poradí. Ak nie sú zadané žiadne atribúty, je použité zhrnutie predvolených atribútov. -- -- -- attribute -- atribút -- -- -- Name of the entry to show. -- Názov položky na zobrazenie. -- -- -- NULL device -- Žiadne zariadenie -- -- -- error reading from device -- chyba čítania zo zariadenia -- -- -- malformed string -- zlý formát reťazca -- -- -- missing closing quote -- chýba koncová úvodzovka -- -- -- Group -- Skupina -- -- -- Title -- Nadpis -- -- -- Username -- Používateľské meno -- -- -- Password -- Heslo -- -- -- Notes -- Poznámky -- -- -- Last Modified -- Posledná úprava -- -- -- Created -- Vytvorené -- -- -- Browser Integration -- Integrácia prehliadača -- -- -- SSH Agent -- Agent SSH -- -- -- Generate a new random diceware passphrase. -- Generovať novú náhodnú diceware tajnú vetu. -- -- -- Word count for the diceware passphrase. -- Počet slov pre diceware tajnú vetu. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Zoznam slov pre generátor diceware. --[Predvolené: EFF angličtina] -- -- -- Generate a new random password. -- Generovať nové náhodné heslo. -- -- -- Could not create entry with path %1. -- Nemožno vytvoriť položku s cestou %1. -- -- -- Enter password for new entry: -- Zadajte heslo novej položky: -- -- -- Writing the database failed %1. -- Zápis do databázy zlyhal %1. -- -- -- Successfully added entry %1. -- Úspešne pridaná položka %1. -- -- -- Invalid timeout value %1. -- Neplatná hodnota časového limitu %1. -- -- -- Entry %1 not found. -- Položka %1 nenájdená. -- -- -- Entry with path %1 has no TOTP set up. -- Položka s cestou %1 nemá nastavený TOTP. -- -- -- Clearing the clipboard in %1 second(s)... -- Vymazaním schránky v %1 sekundu...Vymazaním schránky v %1 sekundu...Vymazaním schránky v %1 sekundu...Clipboard bude vymazaný za %1 sek. -- -- -- Clipboard cleared! -- Schránka vymazaná! -- -- -- Silence password prompt and other secondary outputs. -- Potlačiť prompt hesla a ďalšie sekundárne výstupy -- -- -- count -- CLI parameter -- počet -- -- -- Could not find entry with path %1. -- Nepodarilo sa nájsť položku s cestou %1. -- -- -- Not changing any field for entry %1. -- Nemení sa žiadne pole položky %1. -- -- -- Enter new password for entry: -- Zadajte nové heslo položky: -- -- -- Writing the database failed: %1 -- Zápis do databázy zlyhal: %1 -- -- -- Successfully edited entry %1. -- Úspešne upravená položka %1. -- -- -- Length %1 -- Dĺžka %1 -- -- -- Entropy %1 -- Náhodnosť %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Viacslovné extra bity %1 -- -- -- Type: Bruteforce -- Type: Hrubou silou -- -- -- Type: Dictionary -- Typ: Slovník -- -- -- Type: Dict+Leet -- Typ: Slovník+Leet -- -- -- Type: User Words -- Typ: Použ. slová -- -- -- Type: User+Leet -- Typ: Použ.+Leet -- -- -- Type: Repeated -- Typ: Opakované -- -- -- Type: Sequence -- Typ: Postupné -- -- -- Type: Spatial -- Typ: Geometrické -- -- -- Type: Date -- Typ: Dátum -- -- -- Type: Bruteforce(Rep) -- Typ: Hrubou silou(Rep) -- -- -- Type: Dictionary(Rep) -- Typ: Slovník(Rep) -- -- -- Type: Dict+Leet(Rep) -- Typ: Slovník+Leet(Rep) -- -- -- Type: User Words(Rep) -- Type: Použ. slová(Rep) -- -- -- Type: User+Leet(Rep) -- Typ: Použ.+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Typ: Opakované(Rep) -- -- -- Type: Sequence(Rep) -- Typ: Postupné(Rep) -- -- -- Type: Spatial(Rep) -- Typ: Geometrické(Rep) -- -- -- Type: Date(Rep) -- Typ: Dátum(Rep) -- -- -- Type: Unknown%1 -- Type: Neznámy%1 -- -- -- Entropy %1 (%2) -- Náhodnosť %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Dĺžka hesla (%1) NIE JE súčtom dĺžky častí (%2) * * * -- -- -- Failed to load key file %1: %2 -- Zlyhalo načítanie súboru kľúča %1: %2 -- -- -- Length of the generated password -- Dĺžka generovaného hesla -- -- -- Use lowercase characters -- Požiť malé písmená -- -- -- Use uppercase characters -- Použiť veľké písmená -- -- -- Use special characters -- Použiť špeciálne znaky -- -- -- Use extended ASCII -- Použiť rozšírené ASCII -- -- -- Exclude character set -- Množina vynechaných znakov -- -- -- chars -- znaky -- -- -- Exclude similar looking characters -- Vynechať podobne vyzerajúce znaky -- -- -- Include characters from every selected group -- Použiť znaky z každej zvolenej skupiny -- -- -- Recursively list the elements of the group. -- Rekurzívne vypísať zoznam prvkov skupiny. -- -- -- Cannot find group %1. -- Nemožno nájsť skupinu %1. -- -- -- Error reading merge file: --%1 -- Chyba čítania súboru zlúčenia: --%1 -- -- -- Unable to save database to file : %1 -- Nemožno uložiť databázu do súboru: %1 -- -- -- Unable to save database to file: %1 -- Nemožno uložiť databázu do súboru: %1 -- -- -- Successfully recycled entry %1. -- Položka %1 bola úspešne recyklovaná. -- -- -- Successfully deleted entry %1. -- Položka %1 bola úspešne odstránená. -- -- -- Show the entry's current TOTP. -- Zobraziť aktuálny TOTP položky. -- -- -- ERROR: unknown attribute %1. -- CHYBA: Neznámy atribút %1. -- -- -- No program defined for clipboard manipulation -- Nie je definovaný program na manipuláciu so schránkou -- -- -- file empty -- prázdny súbor -- -- -- %1: (row, col) %2,%3 -- %1: (riadok, stĺpec) %2, %3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Neplatné nastavenia -- -- -- Invalid Key -- TOTP -- Neplatný kľúč -- -- -- Message encryption failed. -- Šifrovanie správy zlyhalo. -- -- -- No groups found -- Skupiny nenájdené -- -- -- Create a new database. -- Vytvoriť novú databázu. -- -- -- File %1 already exists. -- Súbor %1 už existuje. -- -- -- Loading the key file failed -- Načítanie nového kľúča zlyhalo -- -- -- No key is set. Aborting database creation. -- Nie je nastavený kľúč. Vytvorenie novej databázy zrušené. -- -- -- Failed to save the database: %1. -- Zlyhalo uloženie databázy: %1. -- -- -- Successfully created new database. -- Úspešne vytvorená nová databáza. -- -- -- Creating KeyFile %1 failed: %2 -- Vytvorenie súboru KeyFile %1 zlyhalo: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Načítanie súboru KeyFile %1 zlyhalo: %2 -- -- -- Path of the entry to remove. -- Cesta položky na odstránenie. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Existujúci súbor zámku jednej inštancie nie je platný. Spúšťam novú inštanciu. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Súbor zámku nemožno vytvoriť. Režim jednej inštancie vypnutý. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC – multi-platformový správca hesiel -- -- -- filenames of the password databases to open (*.kdbx) -- mená súborov databáz hesiel na otvorenie (*.kdbx) -- -- -- path to a custom config file -- cesta k vlastnému konfiguračnému súboru -- -- -- key file of the database -- súbor kľúča databázy -- -- -- read password of the database from stdin -- čítať heslo databázy zo stdin -- -- -- Another instance of KeePassXC is already running. -- Už je spustená iná inštancia KeePassXC. -- -- -- Fatal error while testing the cryptographic functions. -- Fatálna chyba pri testovaní kryptografických funkcií. -- -- -- KeePassXC - Error -- KeePassXC – Chyba -- -- -- Database password: -- Heslo databázy: -- -- -- Cannot create new group -- Nemožno vytvoriť novú skupinu -- -- -- Deactivate password key for the database. -- Deaktivovať heslo kľúča databázy. -- -- -- Displays debugging information. -- Zobraziť ladiace informácie -- -- -- Deactivate password key for the database to merge from. -- Deaktivovať heslo kľúča zlučovanej databázy. -- -- -- Version %1 -- Verzia %1 -- -- -- Build Type: %1 -- Typ zostavenia: %1 -- -- -- Revision: %1 -- Revízia %1 -- -- -- Distribution: %1 -- Distribúcia %1 -- -- -- Debugging mode is disabled. -- Režim ladenia je vypnutý. -- -- -- Debugging mode is enabled. -- Režim ladenia je zapnutý. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operačný systém: %1 --Architektúra CPU: %2 --Jadro: %3 %4 -- -- -- Auto-Type -- Automatické vypĺňanie -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (podpísané a nepodpísané zdieľanie) -- -- -- KeeShare (only signed sharing) -- KeeShare (len podpísané zdieľanie) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (len nepodpísané zdieľanie) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Žiadny -- -- -- Enabled extensions: -- Zapnuté rozšírenia: -- -- -- Cryptographic libraries: -- Kryptografické knižnice: -- -- -- Cannot generate a password and prompt at the same time! -- Nemožno naraz generovať aj zadať heslo! -- -- -- Adds a new group to a database. -- Pridá do databázy novú skupinu -- -- -- Path of the group to add. -- Cesta pridávanej skupiny. -- -- -- Group %1 already exists! -- Skupina %1 už existuje! -- -- -- Group %1 not found. -- Skupina %1 nenájdená. -- -- -- Successfully added group %1. -- Úspešne pridaná skupina %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Skontrolovať, či nejaké heslo neuniklo na verejnosť. MENOSÚBORU musí byť cesta k súboru so zoznamom odtlačkov SHA-1 uniknutých hesiel vo formáte HIBP, ako je dostupný z https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- MENOSÚBORU -- -- -- Analyze passwords for weaknesses and problems. -- Analyzovať slabé a problémové heslá. -- -- -- Failed to open HIBP file %1: %2 -- Zlyhalo otvorenie súboru HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Hodnotenie položiek databázy oproti súboru HIBP, bude to chvíľu trvať… -- -- -- Close the currently opened database. -- Zatvoriť aktuálne otvorenú databázu. -- -- -- Display this help. -- Zobrazí tohoto pomocníka. -- -- -- slot -- slot -- -- -- Invalid word count %1 -- Neplatný počet slov %1 -- -- -- The word list is too small (< 1000 items) -- Zoznam slov je príliš krátky (< 1000 položiek) -- -- -- Exit interactive mode. -- Ukončiť interaktívny režim. -- -- -- Exports the content of a database to standard output in the specified format. -- Exportuje obsah databázy na štandardný výstup v zadanom formáte. -- -- -- Unable to export database to XML: %1 -- Nemožno exportovať databázu do XML: %1 -- -- -- Unsupported format %1 -- Nepodporovaný formát: %1 -- -- -- Use numbers -- Použiť čísla -- -- -- Invalid password length %1 -- Neplatná dĺžka hesla %1 -- -- -- Display command help. -- Zobrazí pomocníka príkazu. -- -- -- Available commands: -- Dostupné príkazy: -- -- -- Import the contents of an XML database. -- Import obsahu databázy XML. -- -- -- Path of the XML database export. -- Cesta na export databázy XML. -- -- -- Path of the new database. -- Cesta k novej databáze. -- -- -- Successfully imported database. -- Úspešne importovaná databáza. -- -- -- Unknown command %1 -- Neznáma príkaz %1 -- -- -- Flattens the output to single lines. -- Spája výstup do jedného riadku. -- -- -- Only print the changes detected by the merge operation. -- Vypisovať len zmeny zistený pri operácii zlúčenia. -- -- -- Yubikey slot for the second database. -- Slot Yubikey pre druhú databázu. -- -- -- Successfully merged %1 into %2. -- Úspešne zlúčené %1 do %2. -- -- -- Database was not modified by merge operation. -- Databáza nebola operáciou zlúčenia zmenená. -- -- -- Moves an entry to a new group. -- Presunie položku do novej skupiny. -- -- -- Path of the entry to move. -- Cesta položky na presun. -- -- -- Path of the destination group. -- Cesta cieľovej skupiny. -- -- -- Could not find group with path %1. -- Nemožno nájsť skupinu s cestou %1. -- -- -- Entry is already in group %1. -- Položka už je v skupine %1. -- -- -- Successfully moved entry %1 to group %2. -- Položka %1 úspešne presunutá do skupiny %2. -- -- -- Open a database. -- Otvorí databázu. -- -- -- Path of the group to remove. -- Cesta skupiny na odstránenie. -- -- -- Cannot remove root group from database. -- Nemožno odstrániť koreňovú skupinu z databázy. -- -- -- Successfully recycled group %1. -- Skupina %1 bola úspešne recyklovaná. -- -- -- Successfully deleted group %1. -- Úspešne odstránená skupina %1. -- -- -- Failed to open database file %1: not found -- Zlyhalo otvorenie súboru databázy %1: nenájdené -- -- -- Failed to open database file %1: not a plain file -- Zlyhalo otvorenie súboru databázy %1: nie je súbor -- -- -- Failed to open database file %1: not readable -- Zlyhalo otvorenie súboru databázy %1: nie je čitateľné -- -- -- Enter password to unlock %1: -- Zadajte heslo na odomknutie %1: -- -- -- Invalid YubiKey slot %1 -- Neplatný slot Yubikey %1 -- -- -- Enter password to encrypt database (optional): -- Zadajte heslo na zašifrovanie databázy (voliteľné): -- -- -- HIBP file, line %1: parse error -- Súbor HIBP, riadok %1: chyba spracovania -- -- -- Secret Service Integration -- Integrácia Tajnej služby -- -- -- User name -- Meno používavteľa -- -- -- Password for '%1' has been leaked %2 time(s)! -- Heslo k „%1” uniknuté %2 krát!Heslo k „%1” uniknuté %2 krát!Heslo k „%1” uniknuté %2 krát!Heslo k „%1” uniknuté %2 krát! -- -- -- Invalid password generator after applying all options -- Neplatný generátor hesla po aplikovaní všetkých volieb -- -- -- Show the protected attributes in clear text. -- Zobraziť chránené atribúty ako prostý text. -- -- -- Browser Plugin Failure -- Chyba doplnku prehlaidača -- -- -- Could not save the native messaging script file for %1. -- Nemožno uložiť súbor skriptu správ medzi prehliadačom a KeePassXC (native messaging) pre %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Prekopírovať zadaný atribút do schránky. Ak nie je zadané, predvolene bude „password”. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Kopírovať aktuálny TOTP do schránky (ekvivalent „-a totp”). -- -- -- Copy an entry's attribute to the clipboard. -- Skopírovať atribút položky do schránky. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- CHYBA: Prosím, zadajte len jedno z --attribute alebo --totp, nie oba. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- CHYBA: atribút %1 je nejednoznačný, vyhovuje %2. -- -- -- Attribute "%1" not found. -- Atribút „%1” nenájdený. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Atribút „%1” položky skopírovaný do schránky! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Slot Yubikey a voliteľné sériové číslo na prístup k databáze (napr. 1:7370001). -- -- -- slot[:serial] -- slot[:ser.číslo] -- -- -- Target decryption time in MS for the database. -- Cieľový čas dešifrovania databázy v ms. -- -- -- time -- čas -- -- -- Set the key file for the database. -- Nastaviť súbor kľúča databázy. -- -- -- Set a password for the database. -- Nastaviť heslo databázy. -- -- -- Invalid decryption time %1. -- Neplatný čas dešifrovania %1. -- -- -- Target decryption time must be between %1 and %2. -- Cieľový čas dešifrovania databázy má byť medzi %1 a %2. -- -- -- Failed to set database password. -- Zlyhalo nastavenie hesla databázy. -- -- -- Benchmarking key derivation function for %1ms delay. -- meranie výkonu funkcie odvodenia kľúča pre %1ms trvanie. -- -- -- Setting %1 rounds for key derivation function. -- Nastavenie %1 opakovaní pre funkciu odvodenia kľúča. -- -- -- error while setting database key derivation settings. -- chyba nastavovania kľúča databázy pri nastavení odvodenia kľúča. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Formát exportu. Dostupné voľby sú „xml” alebo „csv”. Predvolene „xml”. -- -- -- Unable to import XML database: %1 -- Nemožno importovať databázu XML: %1 -- -- -- Show a database's information. -- Zobraziť informácie databázy. -- -- -- UUID: -- UUID: -- -- -- Name: -- Názov: -- -- -- Description: -- Popis: -- -- -- Cipher: -- Šifra: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Odpadkový kôš je zapnutý. -- -- -- Recycle bin is not enabled. -- Odpadkový kôš nie je zapnutý. -- -- -- Invalid command %1. -- Neplatný príkaz %1. -- -- -- Invalid YubiKey serial %1 -- Neplatné sériové číslo Yubikey %1 -- -- -- Please touch the button on your YubiKey to continue… -- Prosím, stlačte tlačidlo svojho YubiKey na pokračovanie*… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Naozaj chcete vytvoriť databázu s prázdnym heslom? [y/N] -- -- -- Repeat password: -- Zopakujte heslo: -- -- -- Error: Passwords do not match. -- Chyba: Heslá sa nezhodujú. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- AES (%1 opakovaní) -- -- -- AES 256-bit -- AES 256b -- -- -- Twofish 256-bit -- Twofish 256b -- -- -- ChaCha20 256-bit -- ChaCha20: 256b {20 256-?} -- -- -- Benchmark %1 delay -- Meranie výkonu %1 oneskorenie -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms%1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s%1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Pri komprimácii sa vyskytla interná chyba zlib: -- -- -- Error writing to underlying device: -- Chyba zápisu na zariadenie: -- -- -- Error opening underlying device: -- Chyba otvorenia zariadenia: -- -- -- Error reading data from underlying device: -- Chyba čítania dát zo zariadenia: -- -- -- Internal zlib error when decompressing: -- Pri dekomprimácii sa vyskytla interná chyba zlib: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Formát gzip nie je touto verziou zlib podporovaný. -- -- -- Internal zlib error: -- Interná chyba zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Zobraziť aj položky vylúčené z hlásení -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Prejdite myšou na príčinou, na zobrazenie dodatočných podrobností. Dvojklikom na položku ju upravíte. -- -- -- Bad -- Password quality -- Zlé -- -- -- Bad — password must be changed -- Zlé — heslo treba zmeniť -- -- -- Poor -- Password quality -- Biedne -- -- -- Poor — password should be changed -- Biedne — heslo by ste mali zmeniť -- -- -- Weak -- Password quality -- Slabé -- -- -- Weak — consider changing the password -- Slabé — zvážte zmenu hesla -- -- -- (Excluded) -- (Vylúčené) -- -- -- This entry is being excluded from reports -- Táto položka je vylúčená z hlásení -- -- -- Please wait, health data is being calculated... -- Prosím počkajte, počítanie dát zdravia… -- -- -- Congratulations, everything is healthy! -- Blahoželáme, všetko je v poriadku! -- -- -- Title -- Nadpis -- -- -- Path -- Cesta -- -- -- Score -- Skóre -- -- -- Reason -- Dôvod -- -- -- Edit Entry... -- Upraviť položku… -- -- -- Exclude from reports -- Vylúčiť z hlásení -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- VÝSTRAHA: Toto hlásenie vyžaduje odoslanie informácií do online služby Have I Been Pwned (https://haveibeenpwned.com). Ak budete pokračovať, z databáza Vašich hesiel budú urobené kryptografické odtlačky a prvých päť znakov týchto odtlačkov bude zabezpečene poslaných do tejto služby. Vaša databáza ostane bezpečná a nebude možné ju z týchto informácií spätne zostaviť. Ale službe bude známy počet odoslaných hesiel a vaša adresa IP. -- -- -- Perform Online Analysis -- Vykonať online analýzu -- -- -- Also show entries that have been excluded from reports -- Zobraziť aj položky vylúčené z hlásení -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Toto zostavenie KeePassXC nemá sieťové funkcie. Sieť je potrebná na overenie vašich hesiel pomocou databáz Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Blahoželáme, žiadne uniknuté heslá! -- -- -- Title -- Nadpis -- -- -- Path -- Cesta -- -- -- Password exposed… -- Heslo uniknuté… -- -- -- (Excluded) -- (Vylúčené) -- -- -- This entry is being excluded from reports -- Táto položka je vylúčená z hlásení -- -- -- once -- raz -- -- -- up to 10 times -- až 10 krát -- -- -- up to 100 times -- až 100 krát -- -- -- up to 1000 times -- až 1 000 krát -- -- -- up to 10,000 times -- až 10 000 krát -- -- -- up to 100,000 times -- až 100 000 krát -- -- -- up to a million times -- až milión krát -- -- -- millions of times -- milión krát -- -- -- Edit Entry... -- Upraviť položku… -- -- -- Exclude from reports -- Vylúčiť z hlásení -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Pre ďalšie informácie umiestnite kurzor myši na riadky s ikonami chýb. -- -- -- Name -- Názov -- -- -- Value -- Hodnota -- -- -- Please wait, database statistics are being calculated... -- Prosím počkajte, počítanie štatistík databázy… -- -- -- Database name -- Názov databázy -- -- -- Description -- Popis -- -- -- Location -- Umiestnenie -- -- -- Last saved -- Naposledy uložené -- -- -- Unsaved changes -- Neuložené zmeny -- -- -- yes -- áno -- -- -- no -- nie -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Databáza bola zmenená, ale zmeny ešte neboli uložené na disk. -- -- -- Number of groups -- Počet skupín -- -- -- Number of entries -- Počet položiek -- -- -- Number of expired entries -- Počet položiek po dobe platnosti -- -- -- The database contains entries that have expired. -- Databáza obsahuje položky ktoré expirovali. -- -- -- Unique passwords -- Jedinečné heslá -- -- -- Non-unique passwords -- Nie jedinečné heslá -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Viac ako 10 % hesiel je použitých opakovanie. Použite jedinečné heslá, vždy keď je to možné. -- -- -- Maximum password reuse -- Maximálny počet opakovane použitých hesiel -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Niektoré heslá sú použité viac tri krát. Použite jedinečné heslá, vždy keď je to možné. -- -- -- Number of short passwords -- Počet krátkych hesiel -- -- -- Recommended minimum password length is at least 8 characters. -- Odporúčaná minimálna dĺžka hesla je aspoň 8 znakov. -- -- -- Number of weak passwords -- Počet slabých hesiel -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Odporúčame použiť dlhé, náhodné heslá s hodnotením „dobré” alebo „výborné” good' or 'excellent'. -- -- -- Entries excluded from reports -- Položky vylúčené z hlásení -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Vylúčenie položiek z hlásení, napr. pretože je známe ich slabé heslo, zvyčajne nemusí byť problém, ale mali by ste sa na to dávať pozor. -- -- -- Average password length -- Priemerná dĺžka hesla -- -- -- %1 characters -- %1 znakov -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Priemerná dĺžka hesla je menšia ako desať znakov. Dlhšie heslá poskytujú vyššiu bezpečnosť. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Spojenie agenta zlyhalo. -- -- -- Agent protocol error. -- Chyba protokolu agenta. -- -- -- No agent running, cannot add identity. -- Nie je spustený žiadny agent, nemožno identifikovať. -- -- -- No agent running, cannot remove identity. -- Nie je spustený žiadny agent, nemožno odstrániť identitu. -- -- -- Agent refused this identity. Possible reasons include: -- Agent odmietol túto identitu. Možné príčiny: -- -- -- The key has already been added. -- Kľúč už bol pridaný. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Obmedzená doba platnosti nie je agentom podporovaná (skontrolujte voľby) -- -- -- A confirmation request is not supported by the agent (check options). -- Potrvrdzovací požiadavok nie je podporovaný (skontrolujte voľby). -- -- -- Key identity ownership conflict. Refusing to add. -- Konflikt identity vlastníctva kľúča. Odmietnuté pridať. -- -- -- No agent running, cannot list identities. -- Nie je spustený agent, nemožno získať zoznam identít. -- -- -- -- SearchHelpWidget -- -- Search Help -- Hľadať v pomocníkovi -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Hľadané výrazy sú nasledovné: [modifikátory] [pole:] ["] výraz ["] -- -- -- Every search term must match (ie, logical AND) -- Každý hľadaný výraz sa musí zhodovať (tj. platí logické AND) -- -- -- Modifiers -- Modifikátory -- -- -- exclude term from results -- vylúčiť hľadaný výraz z výsledkov -- -- -- match term exactly -- presná zhoda výrazu -- -- -- use regex in term -- použiť regex vo výraze -- -- -- Fields -- Polia -- -- -- Term Wildcards -- zástupné znaky (wildcards) vo výraze -- -- -- match anything -- zhoda s ktorýmkoľvek z výrazov -- -- -- match one -- zhoda s jedným z výrazov -- -- -- logical OR -- logické OR (alebo) -- -- -- Examples -- Príklady -- -- -- -- SearchWidget -- -- Search -- Hľadať -- -- -- Limit search to selected group -- Obmedziť hľadanie na zvolenú skupinu -- -- -- Search Help -- Hľadať v pomocníkovi -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Hľadanie (%1)... -- -- -- Case sensitive -- Rozlišovať veľkosť písmen -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Voľby -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Zapne Integráciu KeepassXC Freedesktop.org Secret Service -- -- -- General -- Všeobecné -- -- -- Show notification when credentials are requested -- Zobraziť upozornenie, keď sú požadované prihlasovacie údaje -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Ak je pre databázu zapnutý kôš, položky budú presunuté priamo do koša. V opačnom prípade budú odstránené bez potvrdenia.</p><p>Potvrdenie bude vyžadované, len ak sú položky odkazované inými.</p></body></html> -- -- -- Exposed database groups: -- Zverejnené skupiny databázy: -- -- -- Authorization -- Autorizácia -- -- -- These applications are currently connected: -- Aktuálne pripojené aplikácie: -- -- -- Don't confirm when entries are deleted by clients -- Nepotvrdzovať pri odstránení položiek klientmi. -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Chyba:</b> Zlyhalo pripojenie k DBus. Prosím, skontrolujte nastavenie svojho DBus. -- -- -- <b>Warning:</b> -- <b>Upozornenie:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Uložte aktuálne zmeny na aktiváciu zásuvného modulu a zapnutie úpravy tejto sekcie. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktívne -- -- -- Allow export -- Povoliť export -- -- -- Allow import -- Povoliť import -- -- -- Own certificate -- Vlastný certifikát -- -- -- Fingerprint: -- Odtlačok: -- -- -- Certificate: -- Certifikát: -- -- -- Signer -- Podpísal -- -- -- Key: -- Kľúč: -- -- -- Generate -- Generovať -- -- -- Import -- Importovať -- -- -- Export -- Export -- -- -- Imported certificates -- Importované certifikáty -- -- -- Trust -- Dôverovať -- -- -- Ask -- Spýtať sa -- -- -- Untrust -- Nedôverovať -- -- -- Remove -- Odstrániť -- -- -- Path -- Cesta -- -- -- Status -- Status -- -- -- Fingerprint -- Odtlačok -- -- -- Certificate -- Certifikát -- -- -- Trusted -- Dôveryhodný -- -- -- Untrusted -- Nedôveryhodný -- -- -- Unknown -- Neznámy -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Kľúčový súbor KeeShare -- -- -- All files -- Všetky súbory -- -- -- Select path -- Zvoľte cestu -- -- -- Exporting changed certificate -- Exportuje sa zmenený certifikát -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Exportovaný certifikát nie je rovnaký ako ten, ktorý sa používa. Chcete exportovať aktuálny certifikát? -- -- -- Signer: -- Podpísaný: -- -- -- Allow KeeShare imports -- Povoliť importy KeeShare -- -- -- Allow KeeShare exports -- Povoliť exporty KeeShare -- -- -- Only show warnings and errors -- Zobraziť len upozornenia a chyby -- -- -- Key -- Kľúč -- -- -- Signer name field -- Pole mena podpisovaného -- -- -- Generate new certificate -- Generovať nový certifikát -- -- -- Import existing certificate -- Importovať existujúci certifikát -- -- -- Export own certificate -- Exportuje vlastný certifikát -- -- -- Known shares -- Známe zdieľania -- -- -- Trust selected certificate -- Dôverovať zvolenému certifikátu -- -- -- Ask whether to trust the selected certificate every time -- Vždy sa spýtať, či dôverovať zvolenému certifikátu -- -- -- Untrust selected certificate -- Zrušiť dôveru zvoleného certifikátu -- -- -- Remove selected certificate -- Odstrániť zvolený certifikát -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutočnil -- -- -- Could not write export container (%1) -- Nemožno zapísať do exportného kontajnera (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Podpis sa nedá vložiť: nedá sa otvoriť súbor na zápis (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Podpis sa nedá vložiť: do súboru sa nedá zapísať (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Nedá sa vložiť databáza: nedá sa otvoriť súbor na zápis (%1) -- -- -- Could not embed database: Could not write file (%1) -- Nedá sa vložiť databáza: súbor sa nedá zapísať (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Prepis nepodpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutočnil -- -- -- Could not write export container -- Nemožno zapísať do exportného kontajnera -- -- -- Unexpected export error occurred -- Vyskytla sa neočakávaná chyba exportu -- -- -- -- ShareImport -- -- Import from container without signature -- Import z kontajnera bez podpisu -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Nie je možné overiť zdroj zdieľaného kontajnera, pretože nie je podpísaný. Naozaj chcete importovať z %1? -- -- -- Import from container with certificate -- Importovať z kontajnera s certifikátom -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Chcete dôverovať %1 s odtlačkom prsta %2 z %3? {1?} {2?} -- -- -- Not this time -- Teraz nie -- -- -- Never -- Nikdy -- -- -- Always -- Vždy -- -- -- Just this time -- Len tentokrát -- -- -- Signed share container are not supported - import prevented -- Podpísané zdieľané kontajnery nie sú podporované - import sa neuskutočnil -- -- -- File is not readable -- Súbor nie je čitateľný -- -- -- Invalid sharing container -- Neplatný kontajner zdieľania -- -- -- Untrusted import prevented -- Bolo zabránené nedôveryhodnému importu -- -- -- Successful signed import -- Úspešný podpísaný import -- -- -- Unsigned share container are not supported - import prevented -- Nepodpísané zdieľané kontajnery nie sú podporované - import sa neuskutočnil -- -- -- Successful unsigned import -- Úspešný nepodpísaný import -- -- -- File does not exist -- Súbor neexistuje -- -- -- Unknown share container type -- Neznámy typ kontajnera zdieľania -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import z %1 zlyhal (%2) -- -- -- Import from %1 successful (%2) -- Import z %1 úspešný (%2) -- -- -- Imported from %1 -- Importované z %1 -- -- -- Export to %1 failed (%2) -- Exportovanie do %1 zlyhalo (%2) -- -- -- Export to %1 successful (%2) -- Export do %1 úspešný (%2) -- -- -- Export to %1 -- Exportovať do %1 -- -- -- Multiple import source path to %1 in %2 -- Viaceré cesty zdroja importu do %1 v %2 -- -- -- Conflicting export target path %1 in %2 -- Konfliktná cieľová cesta exportu %1 v %2 -- -- -- -- TotpDialog -- -- Timed Password -- Časové heslo -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopírovať -- -- -- Expires in <b>%n</b> second(s) -- Uplynie v <b>% n</b> sekunda (s)Uplynie v <b>% n</b> sekunda (s)Uplynie v <b>% n</b> sekunda (s)Expiruje za <b>% n</b> sekúnd -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopírovať -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- Poznámka: tieto nastavenia TOTP sú používateľské a nemusia pracovať s inými autentikátormi. -- -- -- There was an error creating the QR code. -- Pri vytváraní QR kódu sa vyskytla chyba. -- -- -- Closing in %1 seconds. -- Zatvorí sa za %1 sekúnd. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Nastaviť TOTP -- -- -- Default RFC 6238 token settings -- Predvolené nastavenia tokenu RFC 6238 -- -- -- Steam token settings -- Nastavenie Steam tokenu -- -- -- Use custom settings -- Použiť vlastné nastavenia -- -- -- Custom Settings -- Používateľské nastavenia -- -- -- Time step: -- Časový krok: -- -- -- sec -- Seconds -- s -- -- -- Code size: -- Veľkosť kódu: -- -- -- Secret Key: -- Tajný kľúč: -- -- -- Secret key must be in Base32 format -- Tajný kľúč musí byť vo formáte Base32 -- -- -- Secret key field -- Pole tajného kľúča -- -- -- Algorithm: -- Algoritmus: -- -- -- Time step field -- Pole kroku času -- -- -- digits -- číslice -- -- -- Invalid TOTP Secret -- Neplatné tajomstvo TOTP -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Zadali ste neplatný tajný kľúč. Kľúč musí byť vo formáte Base32. --Napríklad: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Potvrďte odstránenie nastavení TOTP -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Naozaj chcete odstrániť nastavenia TOTP tejto položky? -- -- -- -- URLEdit -- -- Invalid URL -- Neplatná URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Kontrola aktualizácií -- -- -- Checking for updates... -- Kontrola aktualizácií... -- -- -- Close -- Zatvoriť -- -- -- Update Error! -- Chyba pri aktualizácii! -- -- -- An error occurred in retrieving update information. -- Pri získavaní informácií o aktualizácii sa vyskytla chyba. -- -- -- Please try again later. -- Skúste znova neskôr. -- -- -- Software Update -- Aktualizácia softvéru -- -- -- A new version of KeePassXC is available! -- Už existuje nová verzia KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- Už existuje KeePassXC %1 — vy máte %2. -- -- -- Download it at keepassxc.org -- Stiahnite si ho na keepassxc.org -- -- -- You're up-to-date! -- Máte najnovšiu verziu. -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 je v súčasnosti najnovšia verzia -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Začnite ukladať svoje heslá bezpečne v databáze KeePassXC -- -- -- Create new database -- Vytvoriť novú databázu -- -- -- Open existing database -- Otvoriť existujúcu databázu -- -- -- Import from KeePass 1 -- Importovať z KeePass 1 -- -- -- Import from CSV -- Importované z CSV -- -- -- Recent databases -- Nedávne databázy -- -- -- Welcome to KeePassXC %1 -- Vitajte v KeePassXC %1 -- -- -- Import from 1Password -- Importovať z 1Password -- -- -- Open a recent database -- Otvoriť nedávnu databázu -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Nastavený slot – %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1[%2] Výzva – odpoveď – slot %3 – %4 -- -- -- Press -- Stlačiť -- -- -- Passive -- Pasívne -- -- -- %1 Invalid slot specified - %2 -- %1 zadaný neplatný slot – %2 -- -- -- The YubiKey interface has not been initialized. -- Rozhranie YubiKey nebolo inicializované. -- -- -- Hardware key is currently in use. -- Hardvérový kľúč je práve používaný. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Nemožno nájsť hardvérový kľúč so sériovým číslom %1. Prosím, pripojte ho na pokračovanie. -- -- -- Hardware key timed out waiting for user interaction. -- Uplynul časový limit hardvérového kľúča pri čakaní na činnosť používateľa. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Pri prístupe k hardvérovému kľúču nastala chyba USB: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Zlyhalo dokončenie výzvy.odpovede, konkrétna chyba bola: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Obnoviť -- -- -- YubiKey Challenge-Response -- YubiKey výzva-odpoveď (Challenge-Response) -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Ak vlastníte <a href="https://www.yubico.com/">Yubikey</a>, môžete ho použiť na dodatočné zabezpečenie.</p><p>YubiKey vyžaduje, aby jeden z jeho slotov bol naprogramovaný ako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Obnoviť hardvérové tokeny -- -- -- Hardware key slot selection -- Výber slotu hardvérového kľúča -- -- -- Could not find any hardware keys! -- Nemožno nájsť žiadny hardvérový kľúč! -- -- -- Selected hardware key slot does not support challenge-response! -- Zvolený slot hardvérového kľúča nepodporuje výzvu.dopoveď! -- -- -- Detecting hardware keys… -- Detekcia hardvérových kľúčov… -- -- -- No hardware keys detected -- Nenájdené žiadne hardvérové kľúče -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sl_SI.ts keepassxc-2.6.4-patched/share/translations/keepassx_sl_SI.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_sl_SI.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_sl_SI.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7838 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- O programu KeePassXC -- -- -- About -- O programu -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Napake sporočite na:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC je distribuiran pod pogojih GNU splošne javne licence (GPL) različica 2 ali (po vaši presoji) različica 3. -- -- -- Contributors -- Sodelujoči -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Poglej sodelujoče na GitHub</a> -- -- -- Debug Info -- Debug Informacije -- -- -- Include the following information whenever you report a bug: -- Pri poročanju o napaki vključi naslednje informacije: -- -- -- Copy to clipboard -- Kopiraj v odložišče -- -- -- Project Maintainers: -- Vzdrževalci projekta: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- S strani KeePassXC ekipe gre posebna zahvala debfx za ustvarjanje izvirnega KeePassX programa. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Uporabi Windows OpenSSH namesto Pageant -- -- -- Enable SSH Agent integration -- Omogoči integracijo z SSH agentom -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK vrednost -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK prepis -- -- -- (empty) -- (prazno) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- SSH Agent connection is working! -- Povezava s SSH agentom deluje! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Nastavitve aplikacije -- -- -- General -- Splošno -- -- -- Security -- Varnost -- -- -- Access error for config file %1 -- Napaka pri dostopu do konfiguracijske datoteke %1 -- -- -- Icon only -- Samo ikone -- -- -- Text only -- Samo besedilo -- -- -- Text beside icon -- Besedilo poleg ikone -- -- -- Text under icon -- Besedilo pod ikono -- -- -- Follow style -- -- -- -- Reset Settings? -- Ponastavim nastavitve? -- -- -- Are you sure you want to reset all general and security settings to default? -- Ali ste prepričani, da želite ponastaviti vse splošne in varnostne nastavitve na privzete vrednosti? -- -- -- Monochrome (light) -- Monochrome (svetla) -- -- -- Monochrome (dark) -- Monochrome (temna) -- -- -- Colorful -- -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Da se nastavi novi jezik je potrebno ponovno zagnati aplikacijo. Ali želite ponovno zagnati sedaj? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Osnovne nastavitve -- -- -- Startup -- Zagon -- -- -- Start only a single instance of KeePassXC -- Zaženi samo eno instanco KeePassXC programa -- -- -- Minimize window at application startup -- Minimiziraj okno, ko se aplikacija zažene -- -- -- File Management -- Urejanje datoteke -- -- -- Backup database file before saving -- Pred shranjevanjem naredi varnostno kopijo -- -- -- Automatically save after every change -- Samodejno shrani po vsaki spremembi -- -- -- Automatically reload the database when modified externally -- Samodejno osveži bazo, kadar je spremenjena iz zunanjih virov -- -- -- Entry Management -- Urejanje vnosa -- -- -- Use group icon on entry creation -- Za nove vnose uporabi ikono skupine -- -- -- Minimize instead of app exit -- Minimiziraj aplikacijo, da se zapre -- -- -- Show a system tray icon -- Pokaži ikono v sistemski vrstici -- -- -- Hide window to system tray when minimized -- Minimiziraj v sistemsko vrstico -- -- -- Auto-Type -- Samodejno tipkanje -- -- -- Use entry title to match windows for global Auto-Type -- -- -- -- Use entry URL to match windows for global Auto-Type -- -- -- -- Always ask before performing Auto-Type -- -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Premična orodna vrstica -- -- -- Remember previously used databases -- Zapomni si od prej odprte baze -- -- -- Load previously open databases on startup -- Ob zagonu naloži zadnje odprte baze -- -- -- Remember database key files and security dongles -- Zapomni si datoteke ključev in varnostne ključe od baze -- -- -- Check for updates at application startup once per week -- Enkrat na teden preveri za posodobitve ob zagonu aplikacije -- -- -- Include beta releases when checking for updates -- -- -- -- Language: -- Jezik: -- -- -- (restart program to activate) -- (za aktivacijo ponovno zaženi program ) -- -- -- Minimize window after unlocking database -- -- -- -- Minimize when opening a URL -- -- -- -- Hide window when copying to clipboard -- -- -- -- Minimize -- Minimiziraj -- -- -- Drop to background -- -- -- -- Favicon download timeout: -- -- -- -- Website icon download timeout in seconds -- -- -- -- sec -- Seconds -- s -- -- -- Toolbar button style -- Slog gumba v orodni vrstici -- -- -- Language selection -- Izbira jezika -- -- -- Global auto-type shortcut -- -- -- -- Auto-type character typing delay milliseconds -- -- -- -- Auto-type start delay milliseconds -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- -- -- -- Toolbar button style: -- Slog gumba v orodni vrstici: -- -- -- Use monospaced font for notes -- Za opombe uporabljaj pisavo monospaced -- -- -- Tray icon type: -- -- -- -- Reset settings to default… -- Ponastavi nastavitve na privzete vrednosti… -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Časovne omejitve -- -- -- Clear clipboard after -- Pobriši odložišče po -- -- -- sec -- Seconds -- s -- -- -- Lock databases after inactivity of -- Zakleni podatkovne baze po neaktivnosti -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- -- -- -- Convenience -- Priročnost -- -- -- Lock databases when session is locked or lid is closed -- -- -- -- Forget TouchID when session is locked or lid is closed -- -- -- -- Lock databases after minimizing the window -- -- -- -- Re-lock previously locked database after performing Auto-Type -- -- -- -- Hide passwords in the entry preview panel -- -- -- -- Hide entry notes by default -- -- -- -- Privacy -- Zasebnost -- -- -- Use DuckDuckGo service to download website icons -- Uporabi storitev DuckDuckGo za prenos ikon od spletnih strani -- -- -- Clipboard clear seconds -- -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Pobriši iskalno poizvedbo po -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- Skrij gesla med urejanjem -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Ne najdem vnosa, ki bi ustrezal: -- -- -- Auto-Type - KeePassXC -- -- -- -- Auto-Type -- Samodejno tipkanje -- -- -- The Syntax of your Auto-Type statement is incorrect! -- -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- -- -- -- Permission Required -- Zahtevano je dovoljenje -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Okno -- -- -- Sequence -- Zaporedje -- -- -- Default sequence -- Privzeto zaporedje -- -- -- -- AutoTypeMatchModel -- -- Group -- Skupina -- -- -- Title -- Naslov -- -- -- Username -- Uporabniško ime -- -- -- Sequence -- Zaporedje -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopiraj &uporabniško ime -- -- -- Copy &password -- Kopiraj &geslo -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Zahtevano je dovoljenje -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- -- -- -- Select entry to Auto-Type: -- Izberi vnos za samodejno tipkanje: -- -- -- Search... -- Išči... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- Zapomnite si dostop za označene vnose -- -- -- Remember -- Zapomni si -- -- -- Allow access to entries -- Dovoli dostop do vnosov -- -- -- Allow Selected -- Dovoli izbrano -- -- -- Deny All -- Zavrni vse -- -- -- Disable for this site -- Onemogoči za to stran -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- -- -- -- Ok -- V redu -- -- -- Cancel -- Prekliči -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- -- -- -- Save and allow access -- Shrani in dovoli dostop -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Prepišem obstoječi ključ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- -- -- -- KeePassXC: Update Entry -- KeePassXC: Posodobi vnos -- -- -- Do you want to update the information in %1 - %2? -- Ali želite posodobiti podatke v %1 - %2? -- -- -- Abort -- Prekini -- -- -- Converting attributes to custom data… -- -- -- -- KeePassXC: Converted KeePassHTTP attributes -- -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- -- -- -- Successfully moved %n keys to custom data. -- -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- -- -- -- KeePassXC: Legacy browser integration settings detected -- -- -- -- KeePassXC: Create a new group -- -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- -- -- -- Don't show this warning again -- Ne prikaži ponovno tega opozorila -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- -- -- -- Enable browser integration -- Omogoči integracijo s spletni brskalnikom -- -- -- General -- Splošno -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- Enable integration for these browsers: -- Omogoči integracijo za te spletne brskalnike: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Prikaži obvestilo, ko so zahtevane poverilnice -- -- -- Request to unlock the database if it is locked -- Naredi zahtevo za odklenite baze, če je zaklenjena -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- Napredno -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- -- -- -- Browse... -- Button for opening file dialog -- Prebrskaj... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- Vrsta spletnega brskalnika: -- -- -- Toolbar button style -- Slog gumba v orodni vrstici -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- -- -- -- Please see special instructions for browser extension use below -- -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- -- -- -- Executable Files -- Programske datoteke -- -- -- All Files -- Vse datoteke -- -- -- Select custom proxy location -- -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- Možnosti kloniranja -- -- -- Append ' - Clone' to title -- Dodaj niz "- Klon" v naslov -- -- -- Replace username and password with references -- Zamenjaj uporabniško ime in geslo z referencami -- -- -- Copy history -- Kopiraj zgodovino -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Uvozi polja iz CSV -- -- -- filename -- ime datoteke -- -- -- size, rows, columns -- velikost, vrstic, stolpcev -- -- -- Encoding -- -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Besedilo je kvalificirano z -- -- -- Fields are separated by -- Polja so ločena z -- -- -- Comments start with -- Komentarji se začnejo z -- -- -- Consider '\' an escape character -- Smatraj '\' za ubežni znak -- -- -- Preview -- Preview -- -- -- Imported from CSV file -- Uvoženo iz CSV datoteke -- -- -- Original data: -- Izvorni podatki: -- -- -- Error -- Napaka -- -- -- Error(s) detected in CSV file! -- Zaznane so bila napaka(e) v CSV datoteki! -- -- -- [%n more message(s) skipped] -- [%n več preskok sporočil][%n več preskok sporočil][%n več preskok sporočil][še %n sporočil je preskočenih] -- -- -- CSV import: writer has errors: --%1 -- -- -- -- Text qualification -- Kvalifikacija besedila -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- Predogled CSV uvoza -- -- -- Column Association -- -- -- -- Last Modified -- Nazadnje spremenjeno -- -- -- Password -- Geslo -- -- -- Created -- Ustvarjeno -- -- -- Notes -- Opombe -- -- -- Title -- Naslov -- -- -- Group -- Skupina -- -- -- URL -- URL -- -- -- Username -- Uporabniško ime -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- Ni prisoten -- -- -- Column %1 -- Stolpec %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- -- CsvParserModel -- -- %n column(s) -- %n stolpcev%n stolpcev%n stolpcev%n stolpcev -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n byte%n byte%n bajtov -- -- -- %n row(s) -- %n vrstic%n vrstic%n vrstic%n vrstic -- -- -- -- Database -- -- File %1 does not exist. -- Datoteka %1 ne obstaja. -- -- -- Unable to open file %1. -- Datoteke %1 ni bilo mogoče odpreti. -- -- -- Error while reading the database: %1 -- Napaka pri branju baze: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Datoteke ni mogoče zapisati, saj je odprta v načinu samo za branje. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Key not transformed. This is a bug, please report it to the developers! -- -- -- %1 --Backup database located at %2 -- %1 --Varnostna kopija baze se nahaja na %2 -- -- -- Could not save, database does not point to a valid file. -- Ni bilo mogoče shraniti, baza podatkov ne kaže na veljavno datoteko. -- -- -- Could not save, database file is read-only. -- Ni bilo mogoče shraniti, datoteka baze je samo za branje. -- -- -- Database file has unmerged changes. -- Datoteka zbirke podatkov ima nepretočnjene spremembe. --Datoteka baze ima še ne združene spremembe. -- -- -- Recycle Bin -- Koš -- -- -- Passwords -- Root group name -- Gesla -- -- -- Database save is already in progress. -- Shranjevanje baze je že v teku. -- -- -- Could not save, database has not been initialized! -- Ni bilo mogoče shraniti, baza ni bila inicializirana! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Odkleni bazo - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Datoteka s ključi: -- -- -- Refresh -- Osveži -- -- -- Don't show this warning again -- Ne prikaži ponovno tega opozorila -- -- -- All files -- Vse datoteke -- -- -- Key files -- Datoteke s ključi -- -- -- Select key file -- Izberi datoteko s ključi -- -- -- Failed to open key file: %1 -- Datoteke s ključem ni bilo mogoče odpreti: %1 -- -- -- Unlock KeePassXC Database -- Odkleni KeePassXC bazo -- -- -- Enter Password: -- Vnesite geslo: -- -- -- Password field -- Polje za geslo -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- Prebrskaj za datoteko s ključi -- -- -- Browse... -- Prebrskaj... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- Odklepanje ni uspelo in geslo ni bilo podano -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- Znova poskusite s praznim geslom -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- Prosim, dotaknite se gumba na vaši YubiKey napravi! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Gesla -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Napredne nastavitve -- -- -- General -- Splošno -- -- -- Security -- Varnost -- -- -- Encryption Settings -- Nastavitve šifriranja -- -- -- Browser Integration -- Integracija s spletnim brskalnikom -- -- -- Database Credentials -- Poverilnice baze -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Nastavitve spletnega brskalnika -- -- -- Stored keys -- Shranjeni ključi -- -- -- Remove -- Odstrani -- -- -- Delete the selected key? -- Izbriši izbrani ključ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Ali zares želite izbrisati izbrani ključ? --To lahko prepreči povezavo z vtičnikom spletnega brskalnika. -- -- -- Key -- Ključ -- -- -- Value -- Vrednost -- -- -- Enable Browser Integration to access these settings. -- Za dostop do teh nastavitev omogočite integracijo s spletnim brskalnikom. -- -- -- Disconnect all browsers -- Odklopi vse spletne brskalnike -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- -- -- -- KeePassXC: No keys found -- KeePassXC: Ključev ni bilo mogoče najti -- -- -- No shared encryption keys found in KeePassXC settings. -- -- -- -- KeePassXC: Removed keys from database -- -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- -- -- -- Forget all site-specific settings on entries -- -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- -- -- -- Removing stored permissions… -- -- -- -- Abort -- Prekini -- -- -- KeePassXC: Removed permissions -- -- -- -- Successfully removed permissions from %n entry(s). -- -- -- -- KeePassXC: No entry with permissions found! -- -- -- -- The active database does not contain an entry with permissions. -- -- -- -- Move KeePassHTTP attributes to custom data -- -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- -- -- -- Stored browser keys -- Shranjeni ključi spletnega brskalnika -- -- -- Remove selected key -- Odstrani izbrani ključ -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- Ustvarjeno -- -- -- Refresh database ID -- Osveži ID baze -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Dodajte dodatno zaščito... -- -- -- No password set -- Geslo ni nastavljeno -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- -- -- -- Continue without password -- Nadaljujte brez gesla -- -- -- No encryption key added -- Ključ za šifriranje ni dodan -- -- -- You must add at least one encryption key to secure your database! -- Za zaščito vaše baze morate dodati vsaj en šifrirni ključ! -- -- -- Unknown error -- Neznana napaka -- -- -- Failed to change database credentials -- Spreminjanje poverilnic baze je spodletelo -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Šifrirni algoritem: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (default) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Funkcija izpeljavo ključa: -- -- -- Transform rounds: -- -- -- -- Memory Usage: -- Poraba pomnilnika: -- -- -- Parallelism: -- -- -- -- Decryption Time: -- Čas dešifriranja: -- -- -- ?? s -- ?? s -- -- -- Change -- Spremeni -- -- -- Higher values offer more protection, but opening the database will take longer. -- Višje vrednosti nudijo več zaščite, vendar bo odpiranje baze trajalo dlje. -- -- -- Database format: -- Format baze: -- -- -- This is only important if you need to use your database with other programs. -- To je pomembno le, če želite uporabljati bazo z drugimi programi. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (priporočeno) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- nespremenjeno -- -- -- Number of rounds too high -- Key transformation rounds -- -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- -- -- -- Understood, keep number -- -- -- -- Cancel -- Prekliči -- -- -- Number of rounds too low -- Key transformation rounds -- -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- -- -- -- KDF unchanged -- KDF nespremenjen -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- Mib Mib Mib MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- nit(e) nit(e) nit(e) nit -- -- -- Change existing decryption time -- Spremeni obstoječi čas dešifriranja -- -- -- Decryption time in seconds -- Čas dešifriranja v sekundah -- -- -- Database format -- Format baze -- -- -- Encryption algorithm -- Šifrirni algoritem -- -- -- Key derivation function -- Funkcija izpeljavo ključa -- -- -- Transform rounds -- -- -- -- Memory usage -- Uporaba pomnilnika -- -- -- Parallelism -- -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Izpostavljeni vnosi -- -- -- Don't expose this database -- Ne izpostavi te baze -- -- -- Expose entries under this group: -- Izpostavi vnose v tej skupini: -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Metapodatki baze -- -- -- Database name: -- Ime podatkovne baze: -- -- -- Database description: -- Opis podatkovne baze: -- -- -- Default username: -- Privzeto uporabniško ime: -- -- -- History Settings -- Nastavitve zgodovine -- -- -- Max. history items: -- Max. vnosov zgodovine: -- -- -- Max. history size: -- Max. velikost zgodovine: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Uporabi koš -- -- -- Additional Database Settings -- Dodatne nastavitve baze -- -- -- Database name field -- Polje ime baze -- -- -- Database description field -- Polje opis baze -- -- -- Default username field -- Polje privzeto uporabniško ime -- -- -- Maximum number of history items per entry -- Največje število zgodovinskih elementov na vnos -- -- -- Maximum size of history per entry -- Največja velikost zgodovine na vnos -- -- -- Delete Recycle Bin -- Izbrišite koš -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Ali želite izbrisati trenutni koš in vso njegovo vsebino? --To dejanje ni mogoče razveljaviti. -- -- -- (old) -- (staro) -- -- -- Enable compression (recommended) -- Omogoči stiskanje (priporočeno) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Skupna raba -- -- -- Breadcrumb -- -- -- -- Type -- Vrsta -- -- -- Path -- Pot -- -- -- Last Signer -- Zadnji podpisnik -- -- -- Certificates -- Certifikati -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Ime baze: -- -- -- Description: -- Opis: -- -- -- Database name field -- Polje ime baze -- -- -- Database description field -- Polje opis baze -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 podatkovna baza -- -- -- All files -- Vse datoteke -- -- -- Open database -- Odpri podatkovno bazo -- -- -- CSV file -- CSV datoteka -- -- -- Merge database -- Združi bazo -- -- -- Open KeePass 1 database -- Odpri KeePass 1 podatkovno bazo -- -- -- KeePass 1 database -- KeePass 1 podatkovna baza -- -- -- Export database to CSV file -- Izvozi podatkovno bazo v CSV datoteko -- -- -- Writing the CSV file failed. -- Pisanje v CSV datoteko ni uspelo -- -- -- Database creation error -- Napaka pri ustvarjanju baze -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- -- -- -- Select CSV file -- Izberite CSV datoteko -- -- -- New Database -- Nova baza -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Nova baza] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Zaklenjeno] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Pregled] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- Izvoz baze v datoteko HTML -- -- -- HTML file -- HTML datoteka -- -- -- Writing the HTML file failed. -- Shranjevanje HTML datoteke ni uspelo. -- -- -- Export Confirmation -- Potrditev izvoza -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Bazo boste izvozili v nešifrirano datoteko. Gesla in občutljivi podatki bodo s tem dejanjem postali ranljivi! Ali ste prepričani, da želite nadaljevati? -- -- -- Open OPVault -- Odpri OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Iskanje... -- -- -- Do you really want to delete the entry "%1" for good? -- Ali res želite izbrisati "%1"? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Ali zares želite premakniti vnos "%1" v koš? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Ali res želite premakniti %n v koš?Ali res želite premakniti %n v koš?Ali res želite premakniti %n v koš?Ali zares želite premakniti %n vnos(ov) v koš? -- -- -- Execute command? -- Izvedi ukaz? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Ali resnično želite izvesti naslednji ukaz?<br><br>%1<br> -- -- -- Remember my choice -- Zapomni si mojo izbiro -- -- -- Do you really want to delete the group "%1" for good? -- Ali res želite izbrisati skupino "%1"? -- -- -- No current database. -- Ni trenutne baze. -- -- -- No source database, nothing to do. -- Ni izvorne baze, nič ni za postoriti. -- -- -- Search Results (%1) -- Rezultati iskanja (%1) -- -- -- No Results -- Ni rezultatov -- -- -- File has changed -- Datoteka je bila spremenjena -- -- -- The database file has changed. Do you want to load the changes? -- Datoteka baze je bila spremenjena. Ali želite naložiti spremembe? -- -- -- Merge Request -- Zahteva za združitev -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Datoteka baze se je spremenila in imate ne shranjene spremembe. --Ali želite združiti vaše spremembe? -- -- -- Empty recycle bin? -- Izprazni koš? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Ali ste prepričani, da želite trajno izbrisati vse iz koša? -- -- -- Do you really want to delete %n entry(s) for good? -- Ali res želite izbrisati %n vnosov za vedno?Ali res želite izbrisati %n vnosov za vedno?Ali res želite izbrisati %n vnosov za vedno?Ali zares želite dokončno izbrisati %n vnosov? -- -- -- Delete entry(s)? -- Ali želite izbrisati vnose?Ali želite izbrisati vnose?Ali želite izbrisati vnose?Izbriši vnos(e)? -- -- -- Move entry(s) to recycle bin? -- Premikanje vnosov v koš?Premikanje vnosov v koš?Premikanje vnosov v koš?Premakni vnos(e) v koš? -- -- -- Lock Database? -- Želite zakleniti bazo? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Trenutno urejate vnos. Želite vseeno zakleniti bazo in zavreči spremembe? -- -- -- "%1" was modified. --Save changes? -- "%1" spremenjeno. --Želite shraniti spremembe? -- -- -- Database was modified. --Save changes? -- Baza je bila spremenjena. --Želite shraniti spremembe? -- -- -- Save changes? -- Shrani spremembe? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- -- -- -- Disable safe saves? -- -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- -- -- -- Passwords -- Gesla -- -- -- Save database as -- Shrani podatkovno bazo kot -- -- -- KeePass 2 Database -- KeePass 2 podatkovna baza -- -- -- Replace references to entry? -- Želite zamenjati reference za vnos? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- -- -- -- Delete group -- Izbriši skupino -- -- -- Move group to recycle bin? -- Premakniti skupino v koš? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Ali zares želite premakniti skupino "% 1" v koš? -- -- -- Successfully merged the database files. -- Datoteke baz so bile uspešno združene. -- -- -- Database was not modified by merge operation. -- Z operacijo združevanja baza ni bila spremenjena. -- -- -- Shared group... -- Deljena skupina... -- -- -- Writing the database failed: %1 -- Shranjevanje baze ni uspelo: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Baza je odprta v načinu samo za branje. Samodejno shranjevanje je onemogočeno. -- -- -- Save database backup -- Shrani varnostno kopijo baze -- -- -- Could not find database file: %1 -- Datoteke baze ni bilo mogoče najti: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Vnos -- -- -- Advanced -- Napredno -- -- -- Icon -- Ikona -- -- -- Auto-Type -- Samodejno tipkanje -- -- -- Properties -- Lastnosti -- -- -- History -- Zgodovina -- -- -- SSH Agent -- SSH Agent -- -- -- n/a -- ni na voljo -- -- -- (encrypted) -- (šifrirano) -- -- -- Select private key -- Izberite zasebni ključ -- -- -- Entry history -- Zgodovina vnosov -- -- -- Add entry -- Dodaj vnos -- -- -- Edit entry -- Uredi vnos -- -- -- New attribute -- Nov atribut -- -- -- Are you sure you want to remove this attribute? -- Ali ste prepričani, da želite odstraniti ta atribut? -- -- -- Tomorrow -- Jutri -- -- -- %n week(s) -- %n ted(ov)%n ted(ov)%n ted(ov)%n teden(ov) -- -- -- %n month(s) -- %n mesecev%n mesecev%n mesecev%n mesec(ev) -- -- -- Entry updated successfully. -- Vnos je bil uspešno posodobljen. -- -- -- New attribute %1 -- Nov atribut %1 -- -- -- %n year(s) -- %n let%n let%n let%n let -- -- -- Confirm Removal -- Potrdite odstranitev -- -- -- Browser Integration -- Integracija s spletnim brskalnikom -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Ali ste prepričani, da želite odstraniti ta URL? -- -- -- Reveal -- Pokaži -- -- -- Hide -- Skrij -- -- -- Unsaved Changes -- Neshranjene spremembe -- -- -- Would you like to save changes to this entry? -- Ali želite shraniti spremembe tega vnosa? -- -- -- [PROTECTED] Press Reveal to view or edit -- [ZAŠČITENO] Pritisni gumb Pokaži za ogled ali urejanje -- -- -- Invalid Entry -- Neveljaven vnos -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- Zunanja operacija združevanja je razveljavila ta vnos. --Na žalost so bile vse spremembe izgubljene. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Dodatni atributi -- -- -- Add -- Dodaj -- -- -- Remove -- Odstrani -- -- -- Edit Name -- Uredi ime -- -- -- Protect -- Zaščititi -- -- -- Reveal -- Pokaži -- -- -- Attachments -- Priponke -- -- -- Foreground Color: -- Barva ospredja: -- -- -- Background Color: -- Barva ozadja: -- -- -- Attribute selection -- Izbira atributa -- -- -- Attribute value -- Vrednost atributa -- -- -- Add a new attribute -- Dodajte nov atribut -- -- -- Remove selected attribute -- Odstrani izbrani atribut -- -- -- Edit attribute name -- Uredi ime atributa -- -- -- Toggle attribute protection -- Preklopi zaščito atributa -- -- -- Show a protected attribute -- Prikaži zaščiten atribut -- -- -- Foreground color selection -- Izbira barve ospredja -- -- -- Background color selection -- Izbira barve ozadja -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- Izvzemi iz poročil o bazi -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Omogoči samodejno tipkanje za ta vnos -- -- -- Window Associations -- -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Naslov okna: -- -- -- Use a specific sequence for this association: -- -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- Dedovanje privzete sekvence za samodejno tipkanje iz skupine -- -- -- Use custom Auto-Type sequence: -- Uporabi poljubno sekvenco za samodejno tipkanje: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- General -- Splošno -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- -- -- -- Additional URL's -- Dodatni URL-ji -- -- -- Add -- Dodaj -- -- -- Remove -- Odstrani -- -- -- Edit -- Uredi -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- Prikaži -- -- -- Restore -- Obnovi -- -- -- Delete -- Izbriši -- -- -- Delete all -- Izbriši vse -- -- -- Entry history selection -- Izbor zgodovine vnosa -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- -- -- -- Delete all history -- -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Geslo: -- -- -- Title: -- Naslov: -- -- -- Presets -- Prednastavljeno -- -- -- Toggle the checkbox to reveal the notes section. -- -- -- -- Username: -- Uporabniško ime: -- -- -- Url field -- Polje Url -- -- -- Download favicon for URL -- Prenesite favicon ikono za URL -- -- -- Password field -- Polje za geslo -- -- -- Toggle notes visible -- Preklopi vidnost opomb -- -- -- Expiration field -- Polje za potek -- -- -- Expiration Presets -- Prednastavitve za potek -- -- -- Expiration presets -- Prednastavitve za potek -- -- -- Notes field -- Polje za opombe -- -- -- Title field -- Naslovno polje -- -- -- Username field -- Polje za uporabniško ime -- -- -- Toggle expiration -- -- -- -- Notes: -- Opombe: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Poteče: -- -- -- Edit Entry -- Uredi vnos -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Obrazec -- -- -- Remove key from agent after -- Odstrani ključ iz agenta po -- -- -- seconds -- sekundah -- -- -- Fingerprint -- Prstni odtis -- -- -- Remove key from agent when database is closed/locked -- Odstrani ključ iz agenta ko je baza zaprta/zaklenjena -- -- -- Public key -- Javni ključ -- -- -- Add key to agent when database is opened/unlocked -- Dodaj ključ v agenta, ko je baza odprta/odklenjena -- -- -- Comment -- Komentar -- -- -- Decrypt -- Dešifriraj -- -- -- n/a -- ni na voljo -- -- -- Copy to clipboard -- Kopiraj v odložišče -- -- -- Private key -- Zasebni ključ -- -- -- External file -- Zunanja datoteka -- -- -- Browse... -- Button for opening file dialog -- Prebrskaj... -- -- -- Attachment -- Priloga -- -- -- Add to agent -- Dodaj v agenta -- -- -- Remove from agent -- Odstrani iz agenta -- -- -- Require user confirmation when this key is used -- Zahtevaj potrditev od uporabnika, ko se uporabi ta ključ -- -- -- Remove key from agent after specified seconds -- Po določenih sekundah odstrani ključ iz agenta -- -- -- Browser for key file -- Prebrskaj za datoteko ključa -- -- -- External key file -- Zunanja datoteka ključa -- -- -- Select attachment file -- Izberite datoteko za prilogami -- -- -- -- EditGroupWidget -- -- Group -- Skupina -- -- -- Icon -- Ikona -- -- -- Properties -- Lastnosti -- -- -- Add group -- Dodaj skupino -- -- -- Edit group -- Uredi skupino -- -- -- Enable -- Omogoči -- -- -- Disable -- Onemogoči -- -- -- Inherit from parent group (%1) -- Podeduj iz nadrejene skupine (%1) -- -- -- Entry has unsaved changes -- Vnos ima ne shranjene spremembe -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Vrsta: -- -- -- Path: -- Pot: -- -- -- Password: -- Geslo: -- -- -- Inactive -- Neaktivno -- -- -- KeeShare unsigned container -- KeeShare podpisan kontejner -- -- -- KeeShare signed container -- KeeShare podpisani kontejner -- -- -- Select import source -- Izberite uvozni vir -- -- -- Select export target -- Izberite cilj izvoza -- -- -- Select import/export file -- Izberite uvozno/izvozno datoteko -- -- -- Clear -- Počisti -- -- -- Import -- Uvozi -- -- -- Export -- Izvozi -- -- -- Synchronize -- Sinhroniziraj -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- Polje načina skupne rabe -- -- -- Path to share file field -- Polje za pot do skupne rabe datoteke -- -- -- Password field -- Polje za geslo -- -- -- Clear fields -- Počisti polja -- -- -- Browse for share file -- Prebrskaj datoteko za skupno rabo -- -- -- Browse... -- Prebrskaj... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Polje za ime -- -- -- Notes field -- Polje za opombe -- -- -- Toggle expiration -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- Polje za potek -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- Poteče: -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- Iskanje: -- -- -- Notes: -- Opombe: -- -- -- Name: -- Ime: -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- Uredi skupino -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Dodaj poljubno ikono -- -- -- Delete custom icon -- Izbriši ikono -- -- -- Download favicon -- Prenesi favicon ikono -- -- -- Unable to fetch favicon. -- Favicona ikono ni mogoče pridobiti. -- -- -- Images -- Slike -- -- -- All files -- Vse datoteke -- -- -- Confirm Delete -- Potrdi izbris -- -- -- Select Image(s) -- Izberi slike -- -- -- Successfully loaded %1 of %n icon(s) -- Uspešno naloženih %1 ikon %nUspešno naloženih %1 ikon %nUspešno naloženih %1 ikon %nUspešno naložene ikone %1 od %n -- -- -- No icons were loaded -- Nobena ikona ni bila naložena -- -- -- %n icon(s) already exist in the database -- %n ikone že obstajajo v zbirki podatkov%n ikone že obstajajo v zbirki podatkov%n ikone že obstajajo v zbirki podatkovV bazi že obstaja %n ikon -- -- -- The following icon(s) failed: -- Te ikone niso uspele:Te ikone niso uspele:Te ikone niso uspele:Te ikone niso uspele: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- Prenesite favicon ikono za URL -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- Izbrana obstoječa ikona. -- -- -- Use default icon -- Uporabi privzeto ikono -- -- -- Use custom icon -- Uporabi ikono po meri -- -- -- Apply icon to... -- Uporabi ikono za... -- -- -- Apply to this group only -- Uporabi samo za to skupino -- -- -- -- EditWidgetProperties -- -- Created: -- Ustvarjeno: -- -- -- Modified: -- Spremenjeno: -- -- -- Accessed: -- Zadnji dostop: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Podatki vtičnika -- -- -- Remove -- Odstrani -- -- -- Delete plugin data? -- Izbris podatkov od vtičnika? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Ali zares želite izbrisati izbrane podatke vtičnika? --To lahko povzroči nepravilno delovanje izbranih vtičnikov. -- -- -- Key -- Ključ -- -- -- Value -- Vrednost -- -- -- Datetime created -- Datum ustvarjenja -- -- -- Datetime modified -- Datum spreminjanja -- -- -- Datetime accessed -- Datum dostopanja -- -- -- Unique ID -- Edinstven ID -- -- -- Plugin data -- Podatki vtičnika -- -- -- Remove selected plugin data -- Odstranite izbrane podatke vtičnika -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Ime -- -- -- Size -- Velikost -- -- -- -- EntryAttachmentsWidget -- -- Form -- Obrazec -- -- -- Add -- Dodaj -- -- -- Remove -- Odstrani -- -- -- Open -- Odpri -- -- -- Save -- Shrani -- -- -- Select files -- Izberi datoteke -- -- -- Are you sure you want to remove %n attachment(s)? -- Ali ste prepričani, da želite odstraniti %n prilog?Ali ste prepričani, da želite odstraniti %n prilog?Ali ste prepričani, da želite odstraniti %n prilog?Ali ste prepričani, da želite odstraniti %n prilog? -- -- -- Save attachments -- Shrani priloge -- -- -- Unable to create directory: --%1 -- Mape ni mogoče ustvariti: --% 1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Ali ste prepričani, da želite zamenjati obstoječo datoteko "%1" s prilogo? -- -- -- Confirm overwrite -- Potrdi zamenjavo -- -- -- Unable to save attachments: --%1 -- -- -- -- Unable to open attachment: --%1 -- -- -- -- Unable to open attachments: --%1 -- -- -- -- Confirm remove -- Potrdi odstranitev -- -- -- Unable to open file(s): --%1 -- -- -- -- Attachments -- Priponke -- -- -- Add new attachment -- Dodaj novo prilogo -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- Ime -- -- -- -- EntryHistoryModel -- -- Last modified -- Zadnja sprememba -- -- -- Title -- Naslov -- -- -- Username -- Uporabniško ime -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Skupina -- -- -- Title -- Naslov -- -- -- Username -- Uporabniško ime -- -- -- URL -- URL -- -- -- Never -- Nikoli -- -- -- Password -- Geslo -- -- -- Notes -- Opombe -- -- -- Expires -- Poteče -- -- -- Created -- Ustvarjeno -- -- -- Modified -- Spremenjeno -- -- -- Accessed -- Dostopano -- -- -- Attachments -- Priponke -- -- -- Size -- Velikost -- -- -- Group name -- Ime skupine -- -- -- Entry title -- Naslov vnosa -- -- -- Entry notes -- Opombe vnosa -- -- -- Entry expires at -- Vnos poteče -- -- -- Creation date -- Datum ustvarjanja -- -- -- Last modification date -- Datum zadnje spremembe -- -- -- Last access date -- Datum zadnjega dostopa -- -- -- Attached files -- Priložene datoteke -- -- -- Entry size -- Velikost vnosa -- -- -- Has attachments -- Ima priloge -- -- -- Has TOTP one-time password -- Ima TOTP enkratno geslo -- -- -- -- EntryPreviewWidget -- -- Close -- Zapri -- -- -- General -- Splošno -- -- -- Username -- Uporabniško ime -- -- -- Password -- Geslo -- -- -- Expiration -- Poteče -- -- -- URL -- URL -- -- -- Attributes -- Atributi -- -- -- Attachments -- Priponke -- -- -- Notes -- Opombe -- -- -- Autotype -- -- -- -- Window -- Okno -- -- -- Sequence -- Zaporedje -- -- -- Searching -- Iskanje -- -- -- Search -- Išči -- -- -- Clear -- Počisti -- -- -- Never -- Nikoli -- -- -- [PROTECTED] -- [ZAŠČITENO] -- -- -- Enabled -- Omogočeno -- -- -- Disabled -- Onemogočen -- -- -- Share -- Deli -- -- -- Display current TOTP value -- Prikaži trenutno vrednost TOTP -- -- -- Advanced -- Napredno -- -- -- Default Sequence -- Privzeto zaporedje -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Neveljaven URL -- -- -- -- EntryView -- -- Fit to window -- Prilagodi oknu -- -- -- Fit to contents -- Prilagodi vsebini -- -- -- Reset to defaults -- Ponastavi na privzeto -- -- -- Has attachments -- Entry attachment icon toggle -- Ima priloge -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Vnos "%1" iz baze "%2" je uporabil %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Registracija storitve DBus v %1 ni uspela.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n vnosov je uporabil %1%n vnosov je uporabil %1%n vnosov je uporabil %1%n vnosov je uporabil %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Ime datoteke -- -- -- Group -- Skupina -- -- -- Manage -- Uredi -- -- -- Unlock to show -- Odkleni za prikaz -- -- -- None -- Nobeden -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Aplikacija -- -- -- Manage -- Uredi -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Neznano -- -- -- Unknown -- Unknown executable path -- Neznano -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Program: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [prazno] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Spletna validacija gesla ni uspela -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Prenos Favicon ikon -- -- -- Cancel -- Prekliči -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Imate težave pri prenosu ikon? --V varnostnem razdelku nastavitev aplikacije lahko omogočite DuckDuckGo storitev za pridobivanje ikon spletnih strani. -- -- -- Close -- Zapri -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Prosimo počakajte, obdelava seznama vnosov... -- -- -- Downloading... -- Prenašanje... -- -- -- Ok -- V redu -- -- -- Already Exists -- Že obstaja -- -- -- Download Failed -- Prenos ni uspel -- -- -- Downloading favicons (%1/%2)... -- Prenos faviconov ikon (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Zapri -- -- -- Close message -- Zapri sporočilo -- -- -- -- Kdbx3Reader -- -- missing database headers -- missing database headers -- -- -- Header doesn't match hash -- Header doesn't match hash -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. --Če se to ponovi, je morda poškodovana datoteka baze. -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- Unable to issue challenge-response: %1 -- Unable to issue challenge-response: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Unable to issue challenge-response: %1 -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- -- Kdbx4Reader -- -- missing database headers -- missing database headers -- -- -- Invalid header checksum size -- Invalid header checksum size -- -- -- Header SHA256 mismatch -- Header SHA256 mismatch -- -- -- Unknown cipher -- Unknown cipher -- -- -- Invalid header id size -- Invalid header id size -- -- -- Invalid header field length -- Invalid header field length -- -- -- Invalid header data length -- Invalid header data length -- -- -- Failed to open buffer for KDF parameters in header -- Failed to open buffer for KDF parameters in header -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Unsupported key derivation function (KDF) or invalid parameters -- -- -- Legacy header fields found in KDBX4 file. -- Zapuščina polj glave, ki so najdena v datoteki KDBX4. -- -- -- Invalid inner header id size -- Invalid inner header id size -- -- -- Invalid inner header field length -- Invalid inner header field length -- -- -- Invalid inner header binary size -- Invalid inner header binary size -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Unsupported KeePass variant map version. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name length -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry name data -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry value length -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Invalid variant map entry value data -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Bool entry value length -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int32 entry value length -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt32 entry value length -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map Int64 entry value length -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Invalid variant map UInt64 entry value length -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Invalid variant map entry type -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Invalid variant map field type size -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. --Če se to ponovi, je morda poškodovana datoteka baze. -- -- -- (HMAC mismatch) -- (HMAC mismatch) -- -- -- Unable to calculate database key: %1 -- Unable to calculate database key: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Invalid symmetric cipher algorithm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Invalid symmetric cipher IV size. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Failed to serialize KDF parameters variant map -- -- -- Unable to calculate database key: %1 -- Unable to calculate database key: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Unsupported cipher -- -- -- Invalid compression flags length -- Invalid compression flags length -- -- -- Unsupported compression algorithm -- Unsupported compression algorithm -- -- -- Invalid master seed size -- Invalid master seed size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid transform rounds size -- Invalid transform rounds size -- -- -- Invalid start bytes size -- Invalid start bytes size -- -- -- Invalid random stream id size -- Invalid random stream id size -- -- -- Invalid inner random stream cipher -- Invalid inner random stream cipher -- -- -- Not a KeePass database. -- Datoteka ni KeePass podatkovna baza. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- -- -- -- Unsupported KeePass 2 database version. -- Nepodprta različica KeePass 2 baze. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Invalid cipher uuid length: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- Unable to parse UUID: %1 -- -- -- Failed to read database file. -- Branje baze ni uspelo. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML parsing failure: %1 -- -- -- No root group -- No root group -- -- -- Missing icon uuid or data -- Missing icon uuid or data -- -- -- Missing custom data key or value -- Missing custom data key or value -- -- -- Multiple group elements -- Multiple group elements -- -- -- Null group uuid -- Null group uuid -- -- -- Invalid group icon number -- Invalid group icon number -- -- -- Invalid EnableAutoType value -- Neveljavna vrednost EnableAutoType -- -- -- Invalid EnableSearching value -- Invalid EnableSearching value -- -- -- No group uuid found -- No group uuid found -- -- -- Null DeleteObject uuid -- Null DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Missing DeletedObject uuid or time -- -- -- Null entry uuid -- Null entry uuid -- -- -- Invalid entry icon number -- Neveljavna številka ikone vnosa -- -- -- History element in history entry -- -- -- -- No entry uuid found -- uuid vnosa ni bil najden -- -- -- History element with different uuid -- -- -- -- Duplicate custom attribute found -- -- -- -- Entry string key or value missing -- -- -- -- Entry binary key or value missing -- -- -- -- Auto-type association window or sequence missing -- -- -- -- Invalid bool value -- Invalid bool value -- -- -- Invalid date time value -- Invalid date time value -- -- -- Invalid color value -- Invalid color value -- -- -- Invalid color rgb part -- Invalid color rgb part -- -- -- Invalid number value -- Invalid number value -- -- -- Invalid uuid value -- Invalid uuid value -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Unable to decompress binary -- -- -- XML error: --%1 --Line %2, column %3 -- XML error: --%1 --Line %2, column %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Invalid KeeAgent settings file structure. -- -- -- Private key is an attachment but no attachments provided. -- Zasebni ključ je priloga, vendar nobena priloga ni priloženih. -- -- -- Private key is empty -- Zasebni ključ je prazen -- -- -- File too large to be a private key -- Datoteka je prevelika, da bi bila zasebna ključ -- -- -- Failed to open private key -- Odpiranje zasebnega ključa ni uspelo -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Odpiranje podatkovne baze ni uspelo. -- -- -- Import KeePass1 Database -- Uvoz KeePass1 baze -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Branje datoteke s ključi ni uspelo. -- -- -- Not a KeePass database. -- Datoteka ni KeePass podatkovna baza. -- -- -- Unsupported encryption algorithm. -- Algoritem za enkripcijo ni podprt. -- -- -- Unsupported KeePass database version. -- Različica KeePass podatkovne baze ni podprta. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- šifrirni IV ni mogoče prebrati -- -- -- Invalid number of groups -- Neveljavno število skupin -- -- -- Invalid number of entries -- Neveljavno število vnosov -- -- -- Invalid content hash size -- Invalid content hash size -- -- -- Invalid transform seed size -- Invalid transform seed size -- -- -- Invalid number of transform rounds -- Invalid number of transform rounds -- -- -- Unable to construct group tree -- Unable to construct group tree -- -- -- Root -- Koren -- -- -- Key transformation failed -- Key transformation failed -- -- -- Invalid group field type number -- Invalid group field type number -- -- -- Invalid group field size -- Invalid group field size -- -- -- Read group field data doesn't match size -- Read group field data doesn't match size -- -- -- Incorrect group id field size -- Incorrect group id field size -- -- -- Incorrect group creation time field size -- Incorrect group creation time field size -- -- -- Incorrect group modification time field size -- Incorrect group modification time field size -- -- -- Incorrect group access time field size -- Incorrect group access time field size -- -- -- Incorrect group expiry time field size -- Incorrect group expiry time field size -- -- -- Incorrect group icon field size -- Incorrect group icon field size -- -- -- Incorrect group level field size -- Incorrect group level field size -- -- -- Invalid group field type -- Invalid group field type -- -- -- Missing group id or level -- Missing group id or level -- -- -- Missing entry field type number -- Missing entry field type number -- -- -- Invalid entry field size -- Invalid entry field size -- -- -- Read entry field data doesn't match size -- Read entry field data doesn't match size -- -- -- Invalid entry uuid field size -- Invalid entry uuid field size -- -- -- Invalid entry group id field size -- Invalid entry group id field size -- -- -- Invalid entry icon field size -- Invalid entry icon field size -- -- -- Invalid entry creation time field size -- Invalid entry creation time field size -- -- -- Invalid entry modification time field size -- Invalid entry modification time field size -- -- -- Invalid entry expiry time field size -- Invalid entry expiry time field size -- -- -- Invalid entry field type -- Invalid entry field type -- -- -- unable to seek to content position -- unable to seek to content position -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. --Če se to ponovi, je morda poškodovana datoteka baze. -- -- -- Unable to calculate database key -- Unable to calculate database key -- -- -- -- KeeShare -- -- Invalid sharing reference -- Neveljavna referenca za skupno rabo -- -- -- Inactive share %1 -- Neaktivna skupna raba %1 -- -- -- Imported from %1 -- Uvoženo iz %1 -- -- -- Exported to %1 -- Izvoženo v %1 -- -- -- Synchronized with %1 -- Sinhronizirano s %1 -- -- -- Import is disabled in settings -- Uvoz je onemogočen v nastavitvah -- -- -- Export is disabled in settings -- Izvoz je onemogočen v nastavitvah -- -- -- Inactive share -- Neaktivna skupna raba -- -- -- Imported from -- Uvoženo iz -- -- -- Exported to -- Izvoženo v -- -- -- Synchronized with -- Sinhronizirano s -- -- -- -- KeyComponentWidget -- -- Key Component -- Komponenta ključa -- -- -- Key Component Description -- Opis komponente ključa -- -- -- Cancel -- Prekliči -- -- -- Key Component set, click to change or remove -- Komponenta ključa je postavljena, kliknite za spremembo ali odstranitev -- -- -- Add %1 -- Add a key component -- Dodaj %1 -- -- -- Change %1 -- Change a key component -- Spremeni %1 -- -- -- Remove %1 -- Remove a key component -- Odstrani %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 je nastavljen, kliknite, če želite spremeniti ali odstraniti -- -- -- -- KeyFileEditWidget -- -- Generate -- Ustvari -- -- -- Key File -- Datoteka s ključi -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- -- -- -- Error loading the key file '%1' --Message: %2 -- -- -- -- Key files -- Datoteke s ključi -- -- -- All files -- Vse datoteke -- -- -- Create Key File... -- Ustvari datoteko s ključi... -- -- -- Error creating key file -- Napaka pri ustvarjanju datoteke ključev -- -- -- Unable to create key file: %1 -- Ni mogoče ustvariti datoteke s ključi: %1 -- -- -- Select a key file -- Izberi datoteko s kljući -- -- -- Key file selection -- Izbira datoteke s ključi -- -- -- Browse for key file -- Prebrskaj za datoteko s ključi -- -- -- Browse... -- Prebrskaj... -- -- -- Generate a new key file -- Ustvari novo datoteko ključa -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Opomba: Ne uporabljajte datoteke, ki se lahko spremeni, saj vam bo to preprečilo odklepanje baze! -- -- -- Invalid Key File -- Neveljavna datoteka ključa -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Trenutne baze ne morete uporabiti kot datoteko ključa. Prosimo izberite drugo datoteko ali ustvarite novo datoteko ključa. -- -- -- Suspicious Key File -- Sumljiva datoteka ključa -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Baza -- -- -- &Help -- &Pomoč -- -- -- &Groups -- &Skupine -- -- -- &Tools -- &Orodja -- -- -- &Quit -- &Izhod -- -- -- &About -- &O programu -- -- -- Database settings -- Nastavitve podatkovne baze -- -- -- Copy username to clipboard -- Kopiraj uporabniško ime v odložišče -- -- -- Copy password to clipboard -- Kopiraj geslo v odložišče -- -- -- &Settings -- &Nastavitve -- -- -- &Title -- &Naslov -- -- -- Copy title to clipboard -- Kopiraj naslov v odložišče -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopiraj URL v odložišče -- -- -- &Notes -- &Opombe -- -- -- Copy notes to clipboard -- Kopiraj opombe v odložišče -- -- -- Copy &TOTP -- Kopiraj &TOTP -- -- -- E&mpty recycle bin -- &Izprazni koš -- -- -- Clear history -- Počisti zgodovino -- -- -- Access error for config file %1 -- Napaka pri dostopu do konfiguracijske datoteke %1 -- -- -- Settings -- Nastavitve -- -- -- Toggle window -- Preklopi okno -- -- -- Quit KeePassXC -- Izhod iz KeePassXC -- -- -- Please touch the button on your YubiKey! -- Prosim, dotaknite se gumba na vaši YubiKey napravi! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- -- -- -- &Donate -- -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- -- -- -- &Import -- &Uvoz -- -- -- Create a new database -- Ustvarjanje nove bazo -- -- -- Merge from another KDBX database -- -- -- -- Add a new entry -- Dodaj nov vnos -- -- -- View or edit entry -- Ogled ali uredi vnos -- -- -- Add a new group -- Dodaj novo skupino -- -- -- Perform &Auto-Type -- -- -- -- Open &URL -- Odpri &URL -- -- -- Import a KeePass 1 database -- Uvoz KeePass 1 baze -- -- -- Import a CSV file -- Uvoz CSV datoteke -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- -- -- -- Check for updates on startup? -- Ali ob zagonu želite preveriti, če so na voljo posodobitve? -- -- -- Would you like KeePassXC to check for updates on startup? -- Ali želite, da KeePassXC preveri ob zagonu, če so na voljo posodobitve? -- -- -- You can always check for updates manually from the application menu. -- Posodobitve lahko vedno preverite ročno v meniju programa. -- -- -- &Export -- &Izvoz -- -- -- Sort &A-Z -- Razvrsti &A-Z -- -- -- Sort &Z-A -- Razvrsti &Z-A -- -- -- &Password Generator -- &Generator gesel -- -- -- Import a 1Password Vault -- Uvoz 1Password Vault -- -- -- &Getting Started -- &Kako začeti -- -- -- &User Guide -- &Uporabniški priročnik -- -- -- &Keyboard Shortcuts -- &Bližnjice na tipkovnici -- -- -- &Recent Databases -- &Nedavno odprte baze -- -- -- &Entries -- &Vnosi -- -- -- Copy Att&ribute -- Kopiraj a&tribut -- -- -- TOTP -- TOTP -- -- -- View -- Pogled -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Preveri za posodobitve -- -- -- &Open Database… -- &Odpri bazo... -- -- -- &Save Database -- &Shrani bazo -- -- -- &Close Database -- &Zapri bazo -- -- -- &New Database… -- &Nova baza... -- -- -- &Merge From Database… -- &Združi z bazo... -- -- -- &New Entry… -- &Novi vnos... -- -- -- &Edit Entry… -- &Uredi vnos... -- -- -- &Delete Entry… -- &Izbriši vnos... -- -- -- &New Group… -- &Nova skupina... -- -- -- &Edit Group… -- &Uredi skupino... -- -- -- &Delete Group… -- &Izbriši skupino ... -- -- -- Download All &Favicons… -- Prenesi vse &favicon ikone... -- -- -- Sa&ve Database As… -- S&hrani bazo kot... -- -- -- Database &Security… -- &Varnost baze... -- -- -- Database &Reports... -- &Poročila baze... -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- &Nastavitve baze... -- -- -- &Clone Entry… -- &Kloniraj vnos... -- -- -- Move u&p -- Premakni v&išje -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- Kopiraj &uporabniško ime -- -- -- Copy &Password -- Kopiraj &geslo -- -- -- Download &Favicon -- &Prenos favicon ikono -- -- -- &Lock Databases -- &Zakleni baze -- -- -- &CSV File… -- &CSV datoteka... -- -- -- &HTML File… -- &HTML datoteka... -- -- -- KeePass 1 Database… -- KeePass 1 baza... -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- Datoteka CSV... -- -- -- Show TOTP -- Pokaži TOTP -- -- -- Show QR Code -- Pokaži QR kodo -- -- -- Set up TOTP… -- Nastavitev TOTP... -- -- -- Report a &Bug -- Poročaj o &napaki -- -- -- Open Getting Started Guide -- Odpri vodnik za začetek -- -- -- &Online Help -- &Spletna pomoč -- -- -- Go to online documentation -- Pojdi na spletno dokumentacijo -- -- -- Open User Guide -- Odpri navodila -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- Dodaj ključ v SSH agenta -- -- -- Remove key from SSH Agent -- Odstrani ključ iz SSH agenta -- -- -- Compact Mode -- -- -- -- Automatic -- Samodejno -- -- -- Light -- Svetla -- -- -- Dark -- Temna -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- Pokaži orodno vrstico -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- Želite znova zagnati aplikacijo? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Če želite uporabiti to nastavitev, morate znova zagnati aplikacijo. Ali želite znova zagnati zdaj? -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- Vedno na vrhu -- -- -- Hide Usernames -- Skrij uporabniška imena -- -- -- Hide Passwords -- Skrij gesla -- -- -- -- ManageDatabase -- -- Database settings -- Nastavitve podatkovne baze -- -- -- Edit database settings -- Uredi nastavitve baze -- -- -- Unlock database -- Odkleni podatkovno bazo -- -- -- Unlock database to show more information -- Za več informacij odklenite bazo -- -- -- Lock database -- Zakleni podatkovno bazo -- -- -- -- ManageSession -- -- Disconnect -- Prekiniti -- -- -- Disconnect this application -- Prekinite povezavo tega programa -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Ustvarjanje manjkajočega %1 [%2] -- -- -- Relocating %1 [%2] -- Prestavljanje %1 [%2] -- -- -- Overwriting %1 [%2] -- Prepisovanje %1 [%2] -- -- -- older entry merged from database "%1" -- -- -- -- Adding backup for older target %1 [%2] -- -- -- -- Adding backup for older source %1 [%2] -- -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- -- -- -- Synchronizing from newer source %1 [%2] -- -- -- -- Synchronizing from older source %1 [%2] -- -- -- -- Deleting child %1 [%2] -- -- -- -- Deleting orphan %1 [%2] -- -- -- -- Changed deleted objects -- -- -- -- Adding missing icon %1 -- -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- -- -- -- Root -- Root group -- Koren -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Čarovnik -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- Advanced Settings -- Napredne nastavitve -- -- -- Simple Settings -- Enostavne nastavitve -- -- -- Encryption Settings -- Nastavitve šifriranja -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Poverilnice baze -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Nastavitve šifriranja -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- -- -- -- Please fill in the display name and an optional description for your new database: -- -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- -- -- -- PEM boundary mismatch -- -- -- -- Base64 decoding failed -- -- -- -- Key file way too small. -- -- -- -- Key file magic header id invalid -- -- -- -- Found zero keys -- -- -- -- Failed to read public key. -- -- -- -- Corrupted key file, reading private key failed -- -- -- -- No private key payload to decrypt -- -- -- -- Trying to run KDF without cipher -- -- -- -- Passphrase is required to decrypt this key -- -- -- -- Key derivation failed, key file corrupted? -- -- -- -- Decryption failed, wrong passphrase? -- -- -- -- Unexpected EOF while reading public key -- -- -- -- Unexpected EOF while reading private key -- -- -- -- Can't write public key as it is empty -- -- -- -- Unexpected EOF when writing public key -- -- -- -- Can't write private key as it is empty -- -- -- -- Unexpected EOF when writing private key -- -- -- -- Unsupported key type: %1 -- -- -- -- Unknown cipher: %1 -- -- -- -- Cipher IV is too short for MD5 kdf -- -- -- -- Unknown KDF: %1 -- -- -- -- Unknown key type: %1 -- -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- Vnos gesla: -- -- -- Confirm password: -- Potrditev gesla: -- -- -- Password -- Geslo -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- -- -- -- Passwords do not match. -- -- -- -- Password field -- Polje za geslo -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- -- -- -- entropy -- entropija -- -- -- Password -- Geslo -- -- -- Character Types -- Tipi znakov -- -- -- Numbers -- Številke -- -- -- Extended ASCII -- Razširjeni ASCII nabor -- -- -- Exclude look-alike characters -- Izključi podobne znake -- -- -- Pick characters from every group -- Izbir znake iz vsake skupine -- -- -- &Length: -- &Dolžina: -- -- -- Passphrase -- Fraza -- -- -- Wordlist: -- Seznam besed: -- -- -- Word Separator: -- Ločilo besed: -- -- -- Close -- Zapri -- -- -- Entropy: %1 bit -- Entropija: %1 bit -- -- -- Password Quality: %1 -- Kakovost gesla: %1 -- -- -- Poor -- Password quality -- Slaba -- -- -- Weak -- Password quality -- Šibka -- -- -- Good -- Password quality -- Dobra -- -- -- Excellent -- Password quality -- Odlična -- -- -- Switch to advanced mode -- Preklopi v napredni način -- -- -- Advanced -- Napredno -- -- -- Braces -- Oklepaji -- -- -- Punctuation -- Ločila -- -- -- Quotes -- Narekovaji -- -- -- Logograms -- Logogrami -- -- -- Character set to exclude from generated password -- Nabor znakov ki so izključeni pri ustvarjanju gesla -- -- -- Do not include: -- Ne vključi: -- -- -- Add non-hex letters to "do not include" list -- Dodaj na seznam "ne vključi" ne-šestnajstiške črke -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Izključeni znaki: "0", "1", "l", "I", "O", "|", "." -- -- -- Generated password -- Ustvarjeno geslo -- -- -- Upper-case letters -- Velike črke -- -- -- Lower-case letters -- Male črke -- -- -- Special characters -- Posebni znaki -- -- -- Math Symbols -- Matematični simboli -- -- -- Dashes and Slashes -- Poševnice -- -- -- Excluded characters -- Izključeni znaki -- -- -- Hex Passwords -- Hex gesla -- -- -- Password length -- Dolžina gesla -- -- -- Word Case: -- -- -- -- Regenerate password -- Regeneriraj geslo -- -- -- Copy password -- Kopiraj geslo -- -- -- lower case -- male črke -- -- -- UPPER CASE -- Velike črke -- -- -- Title Case -- -- -- -- Generate Password -- Ustvari geslo -- -- -- Also choose from: -- Izberi tudi med: -- -- -- Additional characters to use for the generated password -- Dodatni znaki za generirano geslo -- -- -- Additional characters -- Dodatni znaki -- -- -- Word Count: -- Število besed: -- -- -- Esc -- Esc -- -- -- Apply Password -- Uporabi geslo -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Regeneriraj geslo (%1) -- -- -- Special Characters -- Posebni znaki -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistika -- -- -- Very weak password -- Zelo šibko geslo -- -- -- Password entropy is %1 bits -- Entropija gesla je %1 bitov -- -- -- Weak password -- Šibko geslo -- -- -- Used in %1/%2 -- Uporablja se v %1/%2 -- -- -- Password is used %1 times -- Geslo se uporablja %1 krat -- -- -- Password has expired -- Geslo je poteklo -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- Geslo bo poteklo -- -- -- Password expires in %1 days -- Geslo poteče v %1 dneh -- -- -- Password will expire soon -- Geslo bo kmalu poteklo -- -- -- Password expires on %1 -- Geslo poteče %1 -- -- -- Health Check -- -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Prepiši -- -- -- Delete -- Izbriši -- -- -- Move -- Premakni -- -- -- Empty -- Prazno -- -- -- Remove -- Odstrani -- -- -- Skip -- Preskoči -- -- -- Disable -- Onemogoči -- -- -- Merge -- Združi -- -- -- Continue -- Nadaljuj -- -- -- -- QObject -- -- Database not opened -- Baza ni odprta -- -- -- Database hash not available -- -- -- -- Client public key not received -- -- -- -- Cannot decrypt message -- Sporočila ni mogoče dešifrirati -- -- -- Action cancelled or denied -- Dejanje preklicano ali zavrnjeno -- -- -- KeePassXC association failed, try again -- -- -- -- Encryption key is not recognized -- Šifrirnega ključa ni mogoče prepoznati -- -- -- Incorrect action -- Neveljavno dejanje -- -- -- Empty message received -- Prejeto prazno sporočilo -- -- -- No URL provided -- URL ni naveden -- -- -- No logins found -- Nobene prijave ni bilo mogoče najti -- -- -- Unknown error -- Neznana napaka -- -- -- Add a new entry to a database. -- Dodajte nov vnos v bazo. -- -- -- Path of the database. -- Pot do baze. -- -- -- Key file of the database. -- -- -- -- path -- pot -- -- -- Username for the entry. -- Uporabniško ime za vnos. -- -- -- username -- uporabniško ime -- -- -- URL for the entry. -- URL za vnos. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- -- -- -- Generate a password for the entry. -- Ustvarite geslo za vnos. -- -- -- length -- dolžina -- -- -- Path of the entry to add. -- Pot vnosa, ki jo želite dodati. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- -- -- -- Timeout in seconds before clearing the clipboard. -- -- -- -- Edit an entry. -- Uredi vnos. -- -- -- Title for the entry. -- -- -- -- title -- naslov -- -- -- Path of the entry to edit. -- -- -- -- Estimate the entropy of a password. -- -- -- -- Password for which to estimate the entropy. -- -- -- -- Perform advanced analysis on the password. -- -- -- -- -- --Available commands: -- -- -- -- -- Name of the command to execute. -- -- -- -- List database entries. -- -- -- -- Path of the group to list. Default is / -- -- -- -- Find entries quickly. -- -- -- -- Search term. -- -- -- -- Merge two databases. -- -- -- -- Path of the database to merge from. -- -- -- -- Use the same credentials for both database files. -- -- -- -- Key file of the database to merge from. -- -- -- -- Show an entry's information. -- -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- -- -- -- attribute -- -- -- -- Name of the entry to show. -- -- -- -- NULL device -- -- -- -- error reading from device -- -- -- -- malformed string -- -- -- -- missing closing quote -- -- -- -- Group -- Skupina -- -- -- Title -- Naslov -- -- -- Username -- Uporabniško ime -- -- -- Password -- Geslo -- -- -- Notes -- Opombe -- -- -- Last Modified -- Nazadnje spremenjeno -- -- -- Created -- Ustvarjeno -- -- -- Browser Integration -- Integracija s spletnim brskalnikom -- -- -- SSH Agent -- SSH Agent -- -- -- Generate a new random diceware passphrase. -- -- -- -- Word count for the diceware passphrase. -- -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- -- -- -- Generate a new random password. -- -- -- -- Could not create entry with path %1. -- -- -- -- Enter password for new entry: -- -- -- -- Writing the database failed %1. -- -- -- -- Successfully added entry %1. -- -- -- -- Invalid timeout value %1. -- -- -- -- Entry %1 not found. -- -- -- -- Entry with path %1 has no TOTP set up. -- -- -- -- Clearing the clipboard in %1 second(s)... -- -- -- -- Clipboard cleared! -- -- -- -- Silence password prompt and other secondary outputs. -- -- -- -- count -- CLI parameter -- -- -- -- Could not find entry with path %1. -- -- -- -- Not changing any field for entry %1. -- -- -- -- Enter new password for entry: -- -- -- -- Writing the database failed: %1 -- Shranjevanje baze ni uspelo: -- -- -- Successfully edited entry %1. -- -- -- -- Length %1 -- Dolžina %1 -- -- -- Entropy %1 -- -- -- -- Log10 %1 -- -- -- -- Multi-word extra bits %1 -- -- -- -- Type: Bruteforce -- -- -- -- Type: Dictionary -- -- -- -- Type: Dict+Leet -- -- -- -- Type: User Words -- -- -- -- Type: User+Leet -- -- -- -- Type: Repeated -- -- -- -- Type: Sequence -- -- -- -- Type: Spatial -- -- -- -- Type: Date -- -- -- -- Type: Bruteforce(Rep) -- -- -- -- Type: Dictionary(Rep) -- -- -- -- Type: Dict+Leet(Rep) -- -- -- -- Type: User Words(Rep) -- -- -- -- Type: User+Leet(Rep) -- -- -- -- Type: Repeated(Rep) -- -- -- -- Type: Sequence(Rep) -- -- -- -- Type: Spatial(Rep) -- -- -- -- Type: Date(Rep) -- -- -- -- Type: Unknown%1 -- -- -- -- Entropy %1 (%2) -- -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- -- -- -- Failed to load key file %1: %2 -- -- -- -- Length of the generated password -- -- -- -- Use lowercase characters -- -- -- -- Use uppercase characters -- -- -- -- Use special characters -- -- -- -- Use extended ASCII -- -- -- -- Exclude character set -- -- -- -- chars -- -- -- -- Exclude similar looking characters -- -- -- -- Include characters from every selected group -- -- -- -- Recursively list the elements of the group. -- -- -- -- Cannot find group %1. -- -- -- -- Error reading merge file: --%1 -- -- -- -- Unable to save database to file : %1 -- -- -- -- Unable to save database to file: %1 -- -- -- -- Successfully recycled entry %1. -- -- -- -- Successfully deleted entry %1. -- -- -- -- Show the entry's current TOTP. -- -- -- -- ERROR: unknown attribute %1. -- -- -- -- No program defined for clipboard manipulation -- Noben program ni določen za manipulacijo odložišča -- -- -- file empty -- datoteka prazna -- -- -- %1: (row, col) %2,%3 -- -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Neveljavne nastavitve -- -- -- Invalid Key -- TOTP -- Neveljaven ključ -- -- -- Message encryption failed. -- -- -- -- No groups found -- -- -- -- Create a new database. -- Ustvarite novo bazo. -- -- -- File %1 already exists. -- Datoteka %1 že obstaja. -- -- -- Loading the key file failed -- -- -- -- No key is set. Aborting database creation. -- -- -- -- Failed to save the database: %1. -- -- -- -- Successfully created new database. -- -- -- -- Creating KeyFile %1 failed: %2 -- -- -- -- Loading KeyFile %1 failed: %2 -- -- -- -- Path of the entry to remove. -- -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- -- -- -- The lock file could not be created. Single-instance mode disabled. -- -- -- -- KeePassXC - cross-platform password manager -- -- -- -- filenames of the password databases to open (*.kdbx) -- -- -- -- path to a custom config file -- pot do konfiguracijske datoteke po meri -- -- -- key file of the database -- datoteka s ključi podatkovne baze -- -- -- read password of the database from stdin -- -- -- -- Another instance of KeePassXC is already running. -- -- -- -- Fatal error while testing the cryptographic functions. -- Napaka pri testiranju kriptografskih funkcij. -- -- -- KeePassXC - Error -- KeePassXC - Napaka -- -- -- Database password: -- Geslo za bazo: -- -- -- Cannot create new group -- Ni mogoče ustvariti nove skupine -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- Različica %1 -- -- -- Build Type: %1 -- -- -- -- Revision: %1 -- Revizija: %1 -- -- -- Distribution: %1 -- -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operacijski sistem: %1 --arhitektura procesorja: %2 --Jedro: %3 %4 -- -- -- Auto-Type -- Samodejno tipkanje -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Nobeden -- -- -- Enabled extensions: -- Omogočene razširitve: -- -- -- Cryptographic libraries: -- Kriptografske knjižnice: -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- V bazo doda novo skupino. -- -- -- Path of the group to add. -- Pot skupine, ki jo želite dodati. -- -- -- Group %1 already exists! -- Skupina %1 že obstaja! -- -- -- Group %1 not found. -- Skupine %1 ni mogoče najti. -- -- -- Successfully added group %1. -- Uspešno dodana skupina %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- Nepodprta format %1 -- -- -- Use numbers -- Uporabi številke -- -- -- Invalid password length %1 -- Neveljavna dolžina gesla %1 -- -- -- Display command help. -- -- -- -- Available commands: -- Razpoložljivi ukazi: -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- Pot nove baze. -- -- -- Successfully imported database. -- Uspešno uvožena baza. -- -- -- Unknown command %1 -- Neznan ukaz %1 -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- %1 je uspešno združen v %2. -- -- -- Database was not modified by merge operation. -- Z operacijo združevanja baza ni bila spremenjena. -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- Pot vnosa za premikanje. -- -- -- Path of the destination group. -- Pot ciljne skupine. -- -- -- Could not find group with path %1. -- Ni bilo mogoče najti skupine s potjo %1. -- -- -- Entry is already in group %1. -- Vnos je že v skupini %1. -- -- -- Successfully moved entry %1 to group %2. -- Vnos %1 je bil uspešno premaknjen v skupino %2. -- -- -- Open a database. -- Odpri bazo. -- -- -- Path of the group to remove. -- Pot do skupine, ki jo želite odstraniti. -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- Vnesite geslo za odklepanje %1: -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- Vnesite geslo za šifriranje baze (neobvezno): -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- Uporabniško ime -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- Atribut "%1" ni bil najden. -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- Nastavi geslo za bazo. -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- UUID: -- -- -- Name: -- ime: -- -- -- Description: -- Opis: -- -- -- Cipher: -- -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Koš je omogočen. -- -- -- Recycle bin is not enabled. -- Koš ni omogočen. -- -- -- Invalid command %1. -- Neveljaven ukaz %1. -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- Error: Passwords do not match. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- AES (%1 rounds) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms%1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s%1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 rounds, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – priporočeno) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikona -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Notranja zlib napaka pri stiskanju: -- -- -- Error writing to underlying device: -- Napaka pri pisanju na napravo: -- -- -- Error opening underlying device: -- Napaka pri odpiranju naprave: -- -- -- Error reading data from underlying device: -- Napak pri branju iz naprave: -- -- -- Internal zlib error when decompressing: -- Notranja zlib napaka pri dekompresiranju: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Ta različica zlib ne podpira gzip formata. -- -- -- Internal zlib error: -- Notranja zlib napaka: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Prikaži tudi vnosi, ki so bili izključeni iz poročil -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- Zelo slabo -- -- -- Bad — password must be changed -- Zelo slabo — geslo je treba spremeniti -- -- -- Poor -- Password quality -- Slabo -- -- -- Poor — password should be changed -- Slabo — geslo je treba spremeniti -- -- -- Weak -- Password quality -- Šibko -- -- -- Weak — consider changing the password -- Šibko — razmislite o spremembi gesla -- -- -- (Excluded) -- (Izključeno) -- -- -- This entry is being excluded from reports -- Ta vnos je izključen iz poročil -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- Naslov -- -- -- Path -- Pot -- -- -- Score -- Rezultat -- -- -- Reason -- Razlog -- -- -- Edit Entry... -- Uredi vnos... -- -- -- Exclude from reports -- Izključi iz poročil -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- Izvedite spletno analizo -- -- -- Also show entries that have been excluded from reports -- Prikaži tudi vnosi, ki so bili izključeni iz poročil -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- Čestitke, brez izpostavljenih gesel! -- -- -- Title -- Naslov -- -- -- Path -- Pot -- -- -- Password exposed… -- Geslo je izpostavljeno... -- -- -- (Excluded) -- (Izključeno) -- -- -- This entry is being excluded from reports -- Ta vnos je izključen iz poročil -- -- -- once -- enkrat -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- Uredi vnos ... -- -- -- Exclude from reports -- Izključi iz poročil -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- Ime -- -- -- Value -- Vrednost -- -- -- Please wait, database statistics are being calculated... -- Prosimo počakajte, statistika baze se izračunava... -- -- -- Database name -- Ime baze -- -- -- Description -- Opis -- -- -- Location -- Lokacijo -- -- -- Last saved -- Nazadnje shranjeno -- -- -- Unsaved changes -- Neshranjene spremembe -- -- -- yes -- da -- -- -- no -- ne -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Baza je bila spremenjena, vendar spremembe še niso bile shranjene na disk. -- -- -- Number of groups -- Število skupin -- -- -- Number of entries -- Število vnosov -- -- -- Number of expired entries -- Število vnosov, ki so potekli -- -- -- The database contains entries that have expired. -- Baza vsebuje vnose, ki so potekli. -- -- -- Unique passwords -- Unikatna gesla -- -- -- Non-unique passwords -- Neunikatna gesla -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- -- -- -- Agent protocol error. -- -- -- -- No agent running, cannot add identity. -- -- -- -- No agent running, cannot remove identity. -- -- -- -- Agent refused this identity. Possible reasons include: -- -- -- -- The key has already been added. -- -- -- -- Restricted lifetime is not supported by the agent (check options). -- -- -- -- A confirmation request is not supported by the agent (check options). -- -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- Pomoč pri iskanju -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- -- -- -- Every search term must match (ie, logical AND) -- -- -- -- Modifiers -- -- -- -- exclude term from results -- -- -- -- match term exactly -- -- -- -- use regex in term -- -- -- -- Fields -- -- -- -- Term Wildcards -- -- -- -- match anything -- -- -- -- match one -- -- -- -- logical OR -- -- -- -- Examples -- Primeri -- -- -- -- SearchWidget -- -- Search -- Išči -- -- -- Limit search to selected group -- -- -- -- Search Help -- Pomoč pri iskanju -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Iskanje (%1)... -- -- -- Case sensitive -- Razlikuj med velikimi in malimi črkami -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Možnosti -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- Splošno -- -- -- Show notification when credentials are requested -- Pokaži obvestilo, ko so zahtevane poverilnice -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- Pooblastilo -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- <b>Opozorilo:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktivno -- -- -- Allow export -- Dovoli izvoz -- -- -- Allow import -- Dovoli uvoz -- -- -- Own certificate -- Lastni certifikat -- -- -- Fingerprint: -- -- -- -- Certificate: -- Certifikat: -- -- -- Signer -- Podpisnik -- -- -- Key: -- Ključ: -- -- -- Generate -- Ustvari -- -- -- Import -- Uvozi -- -- -- Export -- Izvozi -- -- -- Imported certificates -- Uvoženi certifikati -- -- -- Trust -- Zaupaj -- -- -- Ask -- Vprašaj -- -- -- Untrust -- -- -- -- Remove -- Odstrani -- -- -- Path -- Pot -- -- -- Status -- Status -- -- -- Fingerprint -- Prstni odtis -- -- -- Certificate -- Certifikat -- -- -- Trusted -- -- -- -- Untrusted -- -- -- -- Unknown -- Neznano -- -- -- key.share -- Filetype for KeeShare key -- -- -- -- KeeShare key file -- KeeShare datoteka ključa -- -- -- All files -- Vse datoteke -- -- -- Select path -- -- -- -- Exporting changed certificate -- -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- -- -- -- Signer: -- Podpisnik: -- -- -- Allow KeeShare imports -- Dovoli uvoze preko KeeShare -- -- -- Allow KeeShare exports -- -- -- -- Only show warnings and errors -- -- -- -- Key -- Ključ -- -- -- Signer name field -- -- -- -- Generate new certificate -- Ustvari nov certifikat -- -- -- Import existing certificate -- Uvozi obstoječ certifikat -- -- -- Export own certificate -- Izvozi lastni certifikat -- -- -- Known shares -- -- -- -- Trust selected certificate -- Zaupaj izbranemu certifikatu -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- Nezaupanj izbranemu certifikatu -- -- -- Remove selected certificate -- Odstrani izbran certifikat -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- -- -- -- Could not write export container (%1) -- -- -- -- Could not embed signature: Could not open file to write (%1) -- -- -- -- Could not embed signature: Could not write file (%1) -- -- -- -- Could not embed database: Could not open file to write (%1) -- -- -- -- Could not embed database: Could not write file (%1) -- -- -- -- Overwriting unsigned share container is not supported - export prevented -- -- -- -- Could not write export container -- -- -- -- Unexpected export error occurred -- Pri izvozu je prišlo do nepričakovane napake -- -- -- -- ShareImport -- -- Import from container without signature -- Uvozi iz nepodpisanega kontejnerja -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- -- -- -- Import from container with certificate -- Uvozi iz kontejnerja s certifikatom -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- -- -- -- Not this time -- Ne tokrat -- -- -- Never -- Nikoli -- -- -- Always -- Vedno -- -- -- Just this time -- -- -- -- Signed share container are not supported - import prevented -- Podpisan deljeni kontejner ni podprt - uvoz preprečen -- -- -- File is not readable -- Datoteko ni možno prebrati -- -- -- Invalid sharing container -- -- -- -- Untrusted import prevented -- -- -- -- Successful signed import -- Uspešen podpisan uvoz -- -- -- Unsigned share container are not supported - import prevented -- Nepodpisan deljeni kontejner ni podprt - uvoz preprečen -- -- -- Successful unsigned import -- Uspešen nepodpisan uvoz -- -- -- File does not exist -- Datoteka ne obstaja -- -- -- Unknown share container type -- Neznana vrsta deljenega kontejnerja -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Uvoz iz %1 je spodletel (%2) -- -- -- Import from %1 successful (%2) -- Uspešen uvoz iz %1 (%2) -- -- -- Imported from %1 -- Uvoženo iz -- -- -- Export to %1 failed (%2) -- -- -- -- Export to %1 successful (%2) -- -- -- -- Export to %1 -- -- -- -- Multiple import source path to %1 in %2 -- -- -- -- Conflicting export target path %1 in %2 -- -- -- -- -- TotpDialog -- -- Timed Password -- -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopiraj -- -- -- Expires in <b>%n</b> second(s) -- Poteče v <b>%n sekundah</b>Poteče v <b>%n sekundah</b>Poteče v <b>%n sekundah</b>Poteče čez <b>%n</b> sekund(o) -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopiraj -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- OPOMBA: TOTP nastavitve niso standardne in lahko ne bodo delovale z drugimi avtentikator-ji. -- -- -- There was an error creating the QR code. -- Pri ustvarjanju QR kode je prišlo do napake. -- -- -- Closing in %1 seconds. -- Zapiranje čez% 1 sekund(o). -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Nastavi TOTP -- -- -- Default RFC 6238 token settings -- Privzete nastavitve RFC 6238 žetona -- -- -- Steam token settings -- -- -- -- Use custom settings -- Uporabi nastavitve po meri -- -- -- Custom Settings -- Nastavitve po meri -- -- -- Time step: -- -- -- -- sec -- Seconds -- s -- -- -- Code size: -- -- -- -- Secret Key: -- -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- Algoritem: -- -- -- Time step field -- -- -- -- digits -- številke -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- P -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Ali ste prepričani, da želite izbrisati TOTP nastavitve za ta vnos? -- -- -- -- URLEdit -- -- Invalid URL -- Neveljaven URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Preverjam za nove posodobitve -- -- -- Checking for updates... -- Preverjam za nove posodobitve... -- -- -- Close -- Zapri -- -- -- Update Error! -- Napaka pri posodabljanju! -- -- -- An error occurred in retrieving update information. -- Pri pridobivanju informacij o posodobitvi je prišlo do napake. -- -- -- Please try again later. -- Prosim ponovno poskusite kasneje. -- -- -- Software Update -- Posodobitve -- -- -- A new version of KeePassXC is available! -- Na voljo je nova različica KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- Na voljo je KeePassXC %1 — trenutno je nameščena %2. -- -- -- Download it at keepassxc.org -- Prenesi jo iz keepassxc.org -- -- -- You're up-to-date! -- -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 je trenutno zadnja različica, ki je na voljo -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- -- -- -- Create new database -- ustvari novo bazo -- -- -- Open existing database -- Odpri obstoječo bazo -- -- -- Import from KeePass 1 -- Uvozi iz KeePass 1 -- -- -- Import from CSV -- Uvozi iz CSV -- -- -- Recent databases -- Nedavne podatkovne baze -- -- -- Welcome to KeePassXC %1 -- -- -- -- Import from 1Password -- -- -- -- Open a recent database -- -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- -- -- -- Passive -- -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Osveži -- -- -- YubiKey Challenge-Response -- -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sv.ts keepassxc-2.6.4-patched/share/translations/keepassx_sv.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_sv.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_sv.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7892 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Om KeePassXC -- -- -- About -- Om -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Rapportera fel på: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC distribueras enligt villkoren i GNU General Public License (GPL) version 2 eller (om du vill) version 3. -- -- -- Contributors -- Medverkande -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se alla bidrag på GitHub</a> -- -- -- Debug Info -- Felsökningsinformation -- -- -- Include the following information whenever you report a bug: -- Inkludera följande information när du rapporterar ett fel: -- -- -- Copy to clipboard -- Kopiera till urklipp -- -- -- Project Maintainers: -- Projektansvariga: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Ett särskilt tack från teamet bakom KeePassXC riktas till debfx som skapade den ursprungliga KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Använd OpenSSH för Windows istället för Pageant -- -- -- Enable SSH Agent integration -- Aktivera SSH-tjänstintegrering -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK värde -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK åsidosättning -- -- -- (empty) -- (tomt) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Ingen socket för SSH-tjänsten tillgänglig. Tillse antingen att SSH_AUTH_SOCK miljövaiabel finns eller eller ange en åsidosättning. -- -- -- SSH Agent connection is working! -- SSH-tjänstens anslutning arbetar! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Programinställningar -- -- -- General -- Allmänt -- -- -- Security -- Säkerhet -- -- -- Access error for config file %1 -- Åtkomstfel för konfigurationsfil %1 -- -- -- Icon only -- Endast Ikon -- -- -- Text only -- Endast text -- -- -- Text beside icon -- Text bredvid ikon -- -- -- Text under icon -- Text under ikon -- -- -- Follow style -- Följ stil -- -- -- Reset Settings? -- Vill du återställa inställningarna? -- -- -- Are you sure you want to reset all general and security settings to default? -- Vill du verkligen återställa alla allmäna och säkerhetsinställningar till standardinställning? -- -- -- Monochrome (light) -- Monochrome (ljus) -- -- -- Monochrome (dark) -- Monochrome (mörk) -- -- -- Colorful -- Färgstark -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Du måste starta om programmet för att tillämpa det nya språket. Vill du starta om nu? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Grundinställningar -- -- -- Startup -- Uppstart -- -- -- Start only a single instance of KeePassXC -- Tillåt endast en instans av KeePassXC -- -- -- Minimize window at application startup -- Minimera fönstret vid programstart -- -- -- File Management -- Filhantering -- -- -- Backup database file before saving -- Säkerhetskopiera databasfilen innan den sparas -- -- -- Automatically save after every change -- Spara automatiskt efter varje ändring -- -- -- Automatically reload the database when modified externally -- Läs om databasen automatiskt när den ändrats externt -- -- -- Entry Management -- Posthantering -- -- -- Use group icon on entry creation -- Använd gruppikon för nya poster -- -- -- Minimize instead of app exit -- Minimera istället för att avsluta programmet -- -- -- Show a system tray icon -- Visa en systemfältsikon -- -- -- Hide window to system tray when minimized -- Minimera fönstret till systemfältet, vid minimering -- -- -- Auto-Type -- Autoskriv -- -- -- Use entry title to match windows for global Auto-Type -- Använd postens titel för att matcha fönster vid global autoskriv -- -- -- Use entry URL to match windows for global Auto-Type -- Använd postens URL för att matcha fönster vid global autoskriv -- -- -- Always ask before performing Auto-Type -- Fråga alltid innan autoskriv utförs -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Flyttbart verktygsfält -- -- -- Remember previously used databases -- Kom ihåg tidigare databaser -- -- -- Load previously open databases on startup -- Läs in tidigare öppna databaser vid programstart -- -- -- Remember database key files and security dongles -- Kom ihåg databasnyckelfiler och säkerhetsenheter -- -- -- Check for updates at application startup once per week -- Sök efter uppdateringar vid programstart, en gång per vecka -- -- -- Include beta releases when checking for updates -- Inkludera betaversioner vid sökning efter uppdateringar -- -- -- Language: -- Språk: -- -- -- (restart program to activate) -- (starta om programmet för att aktivera) -- -- -- Minimize window after unlocking database -- Minimera fönstret efter upplåsning av databas -- -- -- Minimize when opening a URL -- Minimera vid öppning av URL -- -- -- Hide window when copying to clipboard -- Dölj fönstret vid kopiering till urklipp -- -- -- Minimize -- Mimimera -- -- -- Drop to background -- Flytta till bakgrunden -- -- -- Favicon download timeout: -- Tidsgräns för nerladdning av favicon: -- -- -- Website icon download timeout in seconds -- Tidsgräns för nerladdning av webbsideikon, i sekunder. -- -- -- sec -- Seconds -- sek -- -- -- Toolbar button style -- Knappstil för verktygsfält -- -- -- Language selection -- Språkval -- -- -- Global auto-type shortcut -- Övergripande autoskrivgenväg -- -- -- Auto-type character typing delay milliseconds -- Fördröjning vid utomatisk skrivning, i millisekunder. -- -- -- Auto-type start delay milliseconds -- Autoskrivfördröjning i millisekunder -- -- -- Automatically launch KeePassXC at system startup -- Starta KeePassXC automatiskt vid systemstart -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Spara databasfiler säkert (inaktivera vid problem med Dropbox etc) -- -- -- User Interface -- Användargränssnitt -- -- -- Toolbar button style: -- Knappstil för verktygsfält: -- -- -- Use monospaced font for notes -- Använd teckensnitt med fast teckenbredd för anteckningar -- -- -- Tray icon type: -- Typ av systemfältsikon: -- -- -- Reset settings to default… -- Återställ inställningarna till standard... -- -- -- Auto-Type typing delay: -- Autoskriv skrivfördröjning: -- -- -- Global Auto-Type shortcut: -- Övergripande autoskrivgenväg: -- -- -- Auto-Type start delay: -- Autoskriv startfördröjning: -- -- -- Automatically save when locking database -- Spara automatiskt när databasen låses -- -- -- Automatically save non-data changes when locking database -- Spara icke-dataändringar automatiskt när databasen låses -- -- -- Tray icon type -- Typ av systemfältsikon -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Tidsgränser -- -- -- Clear clipboard after -- Rensa urklipp efter -- -- -- sec -- Seconds -- sek -- -- -- Lock databases after inactivity of -- Lås databaser efter inaktivitet i -- -- -- min -- min -- -- -- Forget TouchID after inactivity of -- Glöm TouchID efter inaktivitet i -- -- -- Convenience -- Bekvämlighet -- -- -- Lock databases when session is locked or lid is closed -- Lås databaserna när sessionen låses eller locket stängs -- -- -- Forget TouchID when session is locked or lid is closed -- Glöm TouchID när sessionen låses eller locket stängs -- -- -- Lock databases after minimizing the window -- Lås databaserna när fönstret minimeras -- -- -- Re-lock previously locked database after performing Auto-Type -- Lås tidigare låst databas efter att ha utfört autoskriv -- -- -- Hide passwords in the entry preview panel -- Dölj lösenord i förhandsgranskningsrutan -- -- -- Hide entry notes by default -- Dölj posters anteckningar som standard -- -- -- Privacy -- Integritet -- -- -- Use DuckDuckGo service to download website icons -- Använd DuckDuckGo för att ladda ner webbplatsikoner -- -- -- Clipboard clear seconds -- Tidsgräns för urklippsrensing i sekunder -- -- -- Touch ID inactivity reset -- Återställning av Touch-ID vid inaktivitet -- -- -- Database lock timeout seconds -- Tidsgräns för databaslås i sekunder -- -- -- min -- Minutes -- min -- -- -- Clear search query after -- Radera söksträng efter -- -- -- Require password repeat when it is visible -- Kräv lösenordsupprepning när det är synligt -- -- -- Hide passwords when editing them -- Dölj lösenord när de redigeras -- -- -- Use placeholder for empty password fields -- Använd platshållare för tomma lösenordfält -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Kunde inte hitta någon post som matchar fönstertiteln: -- -- -- Auto-Type - KeePassXC -- Autoskriv – KeePassXC -- -- -- Auto-Type -- Autoskriv -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Din autoskrivsats innehåller ett syntaxfel! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Det här autoskrivkommandot innehåller en lång fördröjning. Vill du verkligen fortsätta? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Det här autoskrivkommandot innehåller mycket långsamma tangenttryckningar. Vill du verkligen fortsätta? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Det här autoskrivkommandot innehåller parametrar som upprepas många gånger. Vill du verkligen fortsätta? -- -- -- Permission Required -- Tillstånd krävs -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC kräver åtkomsttillstånd för att utföra automatisk skrivning på postnivå. Om du redan har beviljat tillstånd, kanske du behöver styarta om KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Fönster -- -- -- Sequence -- Sekvens -- -- -- Default sequence -- Standardsekvens -- -- -- -- AutoTypeMatchModel -- -- Group -- Grupp -- -- -- Title -- Titel -- -- -- Username -- Användarnamn -- -- -- Sequence -- Sekvens -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Kopiera användar&namn -- -- -- Copy &password -- Kopiera &lösenord -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Tillstånd krävs -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC kräver åtkomst- och inspelningstillstånd för att utföra automatisk skrivning på övergripande nivå. Skärminspelning krävs för att använda fönstertiteln till att identifiera poster. Om du redan har beviljat tillstånd, kanske du behöver styarta om KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Autoskriv – KeePassXC -- -- -- Select entry to Auto-Type: -- Välj post att skriva automatiskt: -- -- -- Search... -- Sök... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Webbläsaråtkomst -- -- -- %1 is requesting access to the following entries: -- %1 begär åtkomst till följande poster: -- -- -- Remember access to checked entries -- Kom ihåg åtkomst till markerade poster -- -- -- Remember -- Kom ihåg -- -- -- Allow access to entries -- Tillåt åtkomst till poster -- -- -- Allow Selected -- Tillåt markerade -- -- -- Deny All -- Neka alla -- -- -- Disable for this site -- Inaktivera för denna sida -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser spara post -- -- -- Ok -- OK -- -- -- Cancel -- Avbryt -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Du ha flera databaser öppna. --Välj rätt databas för att spara inloggningsuppgifterna. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Ny nyckelassocieringsbegäran -- -- -- Save and allow access -- Spara och tillåt åtkomst -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Vill du skriva över befintlig nyckel? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- En delad krypteringsnyckel med namnet "%1" finns redan. --Vill du skriva över den? -- -- -- KeePassXC: Update Entry -- KeePassXC: Uppdatera post -- -- -- Do you want to update the information in %1 - %2? -- Vill du uppdatera informationen i %1 - %2? -- -- -- Abort -- Avbryt -- -- -- Converting attributes to custom data… -- Konverterar attribut till anpassad data... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Konverterade KeePassHTTP-attribut -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Konverterade attribut från %1 post(er). --Flyttade %2 nycklar till anpassad data. -- -- -- Successfully moved %n keys to custom data. -- Flyttade %n nyckel till anpassad data.Flyttade %n nycklar till anpassad data. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Hittade ingen post med KeePassHTTP-attribut! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Den aktiva databasen innehåller inte någon post med KeePassHTTP-attribut. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Föråldrade inställningar för webbläsarintegrering har identifierats -- -- -- KeePassXC: Create a new group -- KeePassXC: Skapa en ny grupp -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- En begäran om att skapa en ny grupp "%1" har tagits emot. --Vill du skapa denna grupp? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Dina inställningar för KeePassXC-Browser behöver flyttas in i databasinställningarna. --Detta är nödvändigt för att behålla dina aktuella webbläsaranslutningar. --Vill du migrera dina befintliga inställningar nu? -- -- -- Don't show this warning again -- Visa inte denna varning igen -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Du har fått en associationsbegäran för följande databas: --%1 -- --Ge anslutningen ett unikt namn eller ID, som t.ex.: --chrome-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Dialog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Detta krävs för att KeePassXC-Browser ska kunna komma åt dina databaser -- -- -- Enable browser integration -- Aktivera webbläsarintegration -- -- -- General -- Allmänt -- -- -- Browsers installed as snaps are currently not supported. -- Webbläsare installerade via Snap, stöds för närvarande inte. -- -- -- Enable integration for these browsers: -- Aktivera integrering i dessa webbläsare: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Visa en avisering när inloggningsuppgifter begärs -- -- -- Request to unlock the database if it is locked -- Be om upplåsning av databasen när den är låst -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Bara poster med samma protokoll (http://, https:// etc.) returneras. -- -- -- Match URL scheme (e.g., https://...) -- Matcha URL-mall (t.ex. https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Returnerar bara de lämpligaste posterna för en viss webbadress istället för alla poster som rör den domänen. -- -- -- Return only best-matching credentials -- Returnera endast bäst matchande autentiseringsuppgifter -- -- -- Returns expired credentials. String [expired] is added to the title. -- Returnerar förfallna autentiseringsuppgifter [Förfallen] läggs till i titeln. -- -- -- Allow returning expired credentials -- Tillåt utgångna autentiseringsuppgifter som retur -- -- -- All databases connected to the extension will return matching credentials. -- Alla databaser anslutna till tillägget, kommer att returnera matchande autentiseringsuppgifter. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Sök i alla öppnade databaser efter matchande autentiseringsuppgifter -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Sortera matchande autentiseringsuppgifter efter titel -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Sortera matchande autentiseringsuppgifter efter användarnamn -- -- -- Advanced -- Avancerat -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Fråga aldrig innan åtkomst till autentiseringsuppgifter -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Fråga aldrig innan autentiseringsuppgifter uppdateras -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Be inte om lov för HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Automatiskt skapande eller uppdaterande av textfält stöds inte. -- -- -- Return advanced string fields which start with "KPH: " -- Returnera avancerade strängar som börjar med "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Visa inte popup-fönstret som föreslår migrering av äldre KeePassHTTP-inställningar. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Fråga inte efter migrering av KeePassHTTP-inställningar. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Uppdaterar KeePassXC eller keepassxc-proxyns binärsökväg automatiskt, till ursprungliga meddelandeskript vid uppstart. -- -- -- Update native messaging manifest files at startup -- Uppdatera inbyggda meddelandemanifestfiler vid start -- -- -- Use a custom proxy location if you installed a proxy manually. -- Använd en anpassad proxy-inställning om du har installerat en proxy manuellt. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Använd en anpassad proxyplats: -- -- -- Custom proxy location field -- Fält för anpassad proxyplats -- -- -- Browser for custom proxy file -- Webbläsare för anpassad proxyfil -- -- -- Browse... -- Button for opening file dialog -- Bläddra... -- -- -- Use a custom browser configuration location: -- Använd en anpassad plats för webbläsarkonfiguration: -- -- -- Browser type: -- Webbläsartyp: -- -- -- Toolbar button style -- Knappstil för verktygsfält -- -- -- Config Location: -- Konfigurationsplats: -- -- -- Custom browser location field -- Platsfält för anpassad webbläsare -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Bläddra efter anpassad webbläsarsökväg -- -- -- Custom extension ID: -- Anpassat tilläggs-ID: -- -- -- Custom extension ID -- Anpassat tilläggs-ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- På grund av Snaps sandlådeteknik, måste du köra ett skript för att aktivera webbläsarintegration.<br />Du kan hämta skriptet från %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- KeePassXC-Browser behövs för att webbläsarintegrationen ska fungera. <br />Ladda ner dent för %1 och %2 och %3. %4 -- -- -- Please see special instructions for browser extension use below -- Se specialinstruktioner för webbläsarintegreringens användning nedan -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Fel:</b> Det går inte att hitta den anpassade proxyplatsen!<br/>Webbläsarintegration KOMMER INTE ATT FUNGERA utan proxyprogrammet. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Varning:</b> Följande alternativ kan vara farliga! -- -- -- Executable Files -- Körbara filer -- -- -- All Files -- Alla filer -- -- -- Select custom proxy location -- Välj en anpassad proxy -- -- -- Select native messaging host folder location -- Välj plats för den inbyggda värdmappen för meddelanden -- -- -- -- CloneDialog -- -- Clone Options -- Kloningsalternativ -- -- -- Append ' - Clone' to title -- Lägg till " - Klon" i titeln -- -- -- Replace username and password with references -- Ersätt användarnamn och lösenord med referenser -- -- -- Copy history -- Kopiera historik -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Importera CSV-fält -- -- -- filename -- filnamn -- -- -- size, rows, columns -- storlek, rader, kolumner -- -- -- Encoding -- Kodning -- -- -- Codec -- Kodek -- -- -- Text is qualified by -- Text är kvalificerad av -- -- -- Fields are separated by -- Fält är separerade med -- -- -- Comments start with -- Kommentarer inleds med -- -- -- Consider '\' an escape character -- Betrakta "\" som ett kommentarstecken -- -- -- Preview -- Förhandsgranska -- -- -- Imported from CSV file -- Importerat från CSV-fil -- -- -- Original data: -- Ursprunglig data: -- -- -- Error -- Fel -- -- -- Error(s) detected in CSV file! -- Fel upptäckta i CSV-fil! -- -- -- [%n more message(s) skipped] -- [%n meddelande hoppades över][%n meddelanden hoppades över] -- -- -- CSV import: writer has errors: --%1 -- CSV-import: Skrivare har fel: --%1 -- -- -- Text qualification -- Textkvalificering -- -- -- Field separation -- Fältseparation -- -- -- Number of header lines to discard -- Antal rubrikrader att kassera -- -- -- CSV import preview -- Förhandsgranskning av CSV-import -- -- -- Column Association -- Kolumnassociering -- -- -- Last Modified -- Ändrad -- -- -- Password -- Lösenord -- -- -- Created -- Skapad -- -- -- Notes -- Anteckningar -- -- -- Title -- Titel -- -- -- Group -- Grupp -- -- -- URL -- URL -- -- -- Username -- Användarnamn -- -- -- Header lines skipped -- Rubriker undantagna -- -- -- First line has field names -- Första raden har fältnamn -- -- -- Not Present -- Inte tillgänglig -- -- -- Column %1 -- Kolumn %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- -- CsvParserModel -- -- %n column(s) -- %n kolumn%n kolumner -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n byte%n byte -- -- -- %n row(s) -- %n rad%n rader -- -- -- -- Database -- -- File %1 does not exist. -- Filen %1 finns inte. -- -- -- Unable to open file %1. -- Kunde inte öppna filen %1. -- -- -- Error while reading the database: %1 -- Fel vid inläsning av databas: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Filen kan inte skrivas eftersom den är öppnad i skrivskyddat läge. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Nyckeln har inte transformerats. Detta är ett programfel, rapportera det till utvecklarna! -- -- -- %1 --Backup database located at %2 -- %1 --Säkerhetskopierad databas hittad i %2 -- -- -- Could not save, database does not point to a valid file. -- Kunde inte spara. Databasen pekar inte mot en giltig fil. -- -- -- Could not save, database file is read-only. -- Kunde inte spara. Databasfilen är skrivskyddad. -- -- -- Database file has unmerged changes. -- Databasfilen har ändringar som inte har infogats. -- -- -- Recycle Bin -- Papperskorg -- -- -- Passwords -- Root group name -- Lösenord -- -- -- Database save is already in progress. -- Dtabasens sparande pågår redan. -- -- -- Could not save, database has not been initialized! -- Kunde inte spara, databasen har inte startats! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Lås upp databas - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Nyckelfil: -- -- -- Refresh -- Uppdatera -- -- -- Don't show this warning again -- Visa inte denna varning igen -- -- -- All files -- Alla filer -- -- -- Key files -- Nyckelfiler -- -- -- Select key file -- Välj nyckelfil -- -- -- Failed to open key file: %1 -- Kunde inte öppna nyckelfil: %1 -- -- -- Unlock KeePassXC Database -- Lås upp KeePassXC-databas -- -- -- Enter Password: -- Ange lösenord: -- -- -- Password field -- Lösenord -- -- -- Hardware key slot selection -- Val av plats för hårdvarunyckel -- -- -- Browse for key file -- Bläddra efter nyckelfil -- -- -- Browse... -- Bläddra... -- -- -- Refresh hardware tokens -- Uppdatera hårdvaru-tokens -- -- -- Hardware Key: -- Hårdvarunyckel: -- -- -- Hardware key help -- Hjälp med hårdvarunyckel -- -- -- TouchID for Quick Unlock -- TouchID för snabb upplåsning -- -- -- Unlock failed and no password given -- Upplåsning misslyckades och lösenord saknas -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Kunde inte låsa upp databasen och du angav inget lösenord. --Vill du försöka igen, med ett "tomt" lösenord istället? -- --För att förhindra att detta fel uppstår igen, måste du gå till "Databasinställningar/Säkerhet" och återställa dittlösenord. -- -- -- Retry with empty password -- Försök med tomt lösenord -- -- -- Enter Additional Credentials (if any): -- Ange fler autentiseringsuppgifter (om det finns några): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Du kan använda en hårdvarunyckel såsom <strong>YubiKey</strong> eller <strong>OnlyKey</strong> med anslutningsplatser konfigurerade för HMAC-SHA1.</p> --<p>Klicka för mer information...</p> -- -- -- Key file help -- Nyckelfilshjälp -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Kan inte använda en databasfil som nyckelfil -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Du kan inte använda din databasfil som nyckelfil. --Om du inte har någon nyckelfil, lämnar du fältet tomt. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Som tillägg till ditt huvudlösenord, kan du använda en hemlig fil för att förbättra säkerheten i din databas. En sådan fil kan genereras i databasens säkerhetsinställningar.</p><p>Detta är <strong>inte</strong> din *.kdbx-databasfil!<br>Om du inte har någon nyckelfil, lämnar du fältet tomt.</p><p>Klicka för mer information...</p> -- -- -- Key file to unlock the database -- Nyckelfil för att låsa upp databasen -- -- -- Please touch the button on your YubiKey! -- Rör vid knappen på din YubiKey! -- -- -- Detecting hardware keys… -- Identifierar hårdvarunycklar... -- -- -- No hardware keys detected -- Inga hårdvarunycklar identifierade -- -- -- Select hardware key… -- Välj hårdvarunyckel... -- -- -- Old key file format -- Gammalt nyckelfilsformat -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- Du använder ett äldre nyckelfilsformat som kanske<br>inte kommer att stödjas i framtiden.<br><br>Överväg att generera en ny nyckelfil genom att gå till: <br><strong>Databas / Databassäkerhet / Ändra nyckelfil.</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Lösenord -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Avancerade inställningar -- -- -- General -- Allmänt -- -- -- Security -- Säkerhet -- -- -- Encryption Settings -- Krypteringsinställningar -- -- -- Browser Integration -- Webbläsarintegrering -- -- -- Database Credentials -- Databasens inloggningsuppgifter -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser-inställningar -- -- -- Stored keys -- Lagrade nycklar -- -- -- Remove -- Ta bort -- -- -- Delete the selected key? -- Vill du ta bort den valda nyckeln? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Vill du verkligen ta bort den valda nyckeln? --Detta kan förhindra anslutning till webbläsartillägget. -- -- -- Key -- Nyckel -- -- -- Value -- Värde -- -- -- Enable Browser Integration to access these settings. -- Aktivera webbläsarintegrering för åtkomst till dessa inställningar. -- -- -- Disconnect all browsers -- Koppla bort alla webbläsare -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Vill du verkligen koppla bort alla webbläsare? --Detta kan förhindra anslutning till webbläsartillägget. -- -- -- KeePassXC: No keys found -- KeePassXC: Inga nycklar hittades -- -- -- No shared encryption keys found in KeePassXC settings. -- Inga delade krypteringsnycklar hittades i KeePassXC:s inställningar. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Tog bort nycklar från databasen -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Tog bort %n krypteringsnyckel från KeePassXC:s inställningar.Tog bort %n krypteringsnycklar från KeePassXC:s inställningar. -- -- -- Forget all site-specific settings on entries -- Glöm alla sidspecifika inställningar i befintliga poster -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Vill du verkligen glömma alla sidspecifika inställningar i varje post? --Behörighet att komma åt posterna kommer att återkallas. -- -- -- Removing stored permissions… -- Tar bort lagrade rättigheter... -- -- -- Abort -- Avbryt -- -- -- KeePassXC: Removed permissions -- KeePassXC: Tog bort behörigheter -- -- -- Successfully removed permissions from %n entry(s). -- Tog bort behörighet från %n post.Tog bort behörigheter från %n poster. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: Ingen post med behörigheter hittades! -- -- -- The active database does not contain an entry with permissions. -- Den aktiva databasen innehåller ingen post med behörigheter. -- -- -- Move KeePassHTTP attributes to custom data -- Flytta KeePassHTTP-attribut till anpassad data -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Vill du verkligen flytta all äldre webbläsarintegrationsdata till den senaste standarden? --Detta är nödvändigt för att få kompatibilitet med webbläsartillägget. -- -- -- Stored browser keys -- Lagrade webbläsarnycklar -- -- -- Remove selected key -- Ta bort markerad nyckel -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Flytta KeePassHTTP-attribut till anpassad data för KeePassXC-Browser -- -- -- Refresh database root group ID -- Uppdatera databasens rotgrupps-ID -- -- -- Created -- Skapad -- -- -- Refresh database ID -- Uppdatera databas-ID -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Vill du verkligen uppdatera databas-ID? --Detta är bara nödvändigt om databasen är en kopia av en annan och webbläsartillägget inte kan ansluta. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Lägg till ytterligare skydd... -- -- -- No password set -- Inget lösenord angivet -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- VARNING! Du har inte angivit något lösenord. Du avråds bestämt från att använda en databas utan lösenord! -- --Vill du verkligen fortsätta utan lösenord? -- -- -- Continue without password -- Fortsätt utan lösenord -- -- -- No encryption key added -- Ingen krypteringsnyckel tillagd -- -- -- You must add at least one encryption key to secure your database! -- Du måste lägga till minst en krypteringsnyckel, för att säkra din databas! -- -- -- Unknown error -- Okänt fel -- -- -- Failed to change database credentials -- Kunde inte ändra databasens inloggningsuppgifter -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Krypteringsalgoritm: -- -- -- AES: 256 Bit (default) -- AES: 256 bitar (standard) -- -- -- Twofish: 256 Bit -- Twofish: 256 bitar -- -- -- Key Derivation Function: -- Nyckelhärledningsfunktion: -- -- -- Transform rounds: -- Transformeringsrundor: -- -- -- Memory Usage: -- Minnesanvändning: -- -- -- Parallelism: -- Parallellitet: -- -- -- Decryption Time: -- Dekrypteringstid: -- -- -- ?? s -- ?? s -- -- -- Change -- Ändra -- -- -- Higher values offer more protection, but opening the database will take longer. -- Högre värde medger bättre skydd, men databasen tar längre tid att öppna. -- -- -- Database format: -- Databasformat: -- -- -- This is only important if you need to use your database with other programs. -- Detta är bara viktigt om du behöver använda din databas med andra program. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (rekommenderas) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- oförändrad -- -- -- Number of rounds too high -- Key transformation rounds -- För högt antal rundor -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Du använder ett mycket högt antal nyckeltransformeringsrundor med Argon2. -- --Om du behåller detta antal, kan din databas ta timmar eller dagar (eller t.om. längre) att öppna! -- -- -- Understood, keep number -- Uppfattat, behåll antalet -- -- -- Cancel -- Avbryt -- -- -- Number of rounds too low -- Key transformation rounds -- För lågt antal rundor -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Du använder ett mycket lågt antal nyckeltransformeringsrundor med AES-KDF. -- --Om du behåller detta antal, kan din databas bli för lätt att hacka! -- -- -- KDF unchanged -- KDF oförändrad -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Kunde inte transformera nyckeln med nya KDF-parametrar. KDF oförändrad. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- tråd trådar -- -- -- Change existing decryption time -- Ändra befintlig avkrypteringstid -- -- -- Decryption time in seconds -- Avkrypteringstid i sekunder -- -- -- Database format -- Databasformat -- -- -- Encryption algorithm -- Krypteringsalgoritm -- -- -- Key derivation function -- Nyckelhärledningsfunktion -- -- -- Transform rounds -- Transformeringsrundor -- -- -- Memory usage -- Minnesanvändning -- -- -- Parallelism -- Parallellitet -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Exponerade poster -- -- -- Don't expose this database -- Visa inte denna databas -- -- -- Expose entries under this group: -- Visa poster under denna grupp: -- -- -- Enable Secret Service to access these settings. -- Aktivera Secret Service för att komma åt dessa inställningar. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Databasens metadata -- -- -- Database name: -- Databasnamn: -- -- -- Database description: -- Databasbeskrivning: -- -- -- Default username: -- Standardanvändarnamn: -- -- -- History Settings -- Historikinställningar -- -- -- Max. history items: -- Max antal historikposter: -- -- -- Max. history size: -- Maximal historikstorlek: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Använd papperskorgen -- -- -- Additional Database Settings -- Ytterligare databasinställningar -- -- -- Database name field -- Databasens namn -- -- -- Database description field -- Databasens beskrivning -- -- -- Default username field -- Standard användarnamn -- -- -- Maximum number of history items per entry -- Max antal historikobjekt per post -- -- -- Maximum size of history per entry -- Max historikstorlek per post -- -- -- Delete Recycle Bin -- Ta bort papperskorgen -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Vill du ta bort papperskorgen med allt innehåll? --Denna åtgärd kan inte ångras. -- -- -- (old) -- (gammal) -- -- -- Enable compression (recommended) -- Aktivera komprimering (rekommenderas) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Delning -- -- -- Breadcrumb -- Synlig sökväg -- -- -- Type -- Typ -- -- -- Path -- Sökväg -- -- -- Last Signer -- Senaste undertecknare -- -- -- Certificates -- Certifikat -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Databasnamn: -- -- -- Description: -- Beskrivning: -- -- -- Database name field -- Databasens namn -- -- -- Database description field -- Databasens beskrivning -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2-databas -- -- -- All files -- Alla filer -- -- -- Open database -- Öppna databas -- -- -- CSV file -- CSV-fil -- -- -- Merge database -- Slå samman databas -- -- -- Open KeePass 1 database -- Öppna KeePass 1-databas -- -- -- KeePass 1 database -- KeePass 1-databas -- -- -- Export database to CSV file -- Exportera databasen till en CSV-fil -- -- -- Writing the CSV file failed. -- Kunde inte skriva CSV-filen. -- -- -- Database creation error -- Fel vid databasskapande -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Den skapade databasen har ingen nyckel eller KDF, vägrar att spara den. --Detta är definitivt ett programfel, rapportera det till utvecklarna. -- -- -- Select CSV file -- Välj CSV-fil -- -- -- New Database -- Ny databas -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Ny databas] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Låst] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Skrivskyddad] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Kunde öppna %1. Antingen finns den inte eller också är den inte åtkomstbar. -- -- -- Export database to HTML file -- Exportera databas till HTML-fil -- -- -- HTML file -- HTML-fil -- -- -- Writing the HTML file failed. -- Kunde inte skriva HTML-filen. -- -- -- Export Confirmation -- Exportbekräftelse -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Du är på väg att exportera din databas till en okrypterad fil. Detta kommer att lämna dina lösenord annan känslig information i ett sårbart skick (klartext). Vill du verkligen fortsätta? -- -- -- Open OPVault -- Öppna OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- Söker... -- -- -- Do you really want to delete the entry "%1" for good? -- Vill du verkligen ta bort "%1" för gott? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Vill du verkligen flytta "%1" till papperskorgen? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Vill du verkligen flytta %n post till papperskorgen?Vill du verkligen flytta %n poster till papperskorgen? -- -- -- Execute command? -- Vill du köra kommandot? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Vill du verkligen köra följande kommando?<br><br>%1<br> -- -- -- Remember my choice -- Komihåg mitt val -- -- -- Do you really want to delete the group "%1" for good? -- Vill du verkligen ta bort gruppen "%1" för gott? -- -- -- No current database. -- Ingen aktuell databas. -- -- -- No source database, nothing to do. -- Ingen källdatabas, inget att göra. -- -- -- Search Results (%1) -- Sökresultat (%1) -- -- -- No Results -- Inget resultat -- -- -- File has changed -- Filen har ändrats -- -- -- The database file has changed. Do you want to load the changes? -- Databasfilen har ändrats. Vill du läsa in ändringarna? -- -- -- Merge Request -- Slå samman begäran -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Databasfilen har ändrats och du har osparade ändringar. --Vill du slå samman dina ändringar? -- -- -- Empty recycle bin? -- Vill du tömma papperskorgen? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Vill du verkligen ta bort allt från din papperskorg permanent? -- -- -- Do you really want to delete %n entry(s) for good? -- Vill du verkligen ta bort %n post för gott?Vill du verkligen ta bort %n poster för gott? -- -- -- Delete entry(s)? -- Vill du ta bort posten?Vill du ta bort posterna? -- -- -- Move entry(s) to recycle bin? -- Vill du flytta posten till papperskorgen?Vill du flytta posterna till papperskorgen? -- -- -- Lock Database? -- Vill du låsa databasen? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Du redigerar en post. Vill du förkasta ändringarna och låsa ändå? -- -- -- "%1" was modified. --Save changes? -- "%1" har ändrats. --Vill du spara ändringarna? -- -- -- Database was modified. --Save changes? -- Databasen har ändrats. --Vill du spara ändringarna? -- -- -- Save changes? -- Vill du spara ändringarna? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Kunde inte öppna den nya databasen vid försök att läsa in automatisk. --Fel: %1 -- -- -- Disable safe saves? -- Vill du inaktivera "Spara säkert"? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC har misslyckats med att spara databasen flera gånger. Det beror troligen på att filsynkroniseringstjänsten har låst filsparandet. --Vill du inaktivera "Spara säkert" och försöka igen? -- -- -- Passwords -- Lösenord -- -- -- Save database as -- Spara databasen som -- -- -- KeePass 2 Database -- KeePass 2-databas -- -- -- Replace references to entry? -- Vill du ersätta referenserna till posten? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Posten "%1" har %2 referens. Vill du skriva över referensen med nya värden, hoppa över den här posten eller ta bort ändå?Posten "%1" har %2 referenser. Vill du skriva över referenserna med nya värden, hoppa över den här posten eller ta bort ändå? -- -- -- Delete group -- Ta bort gruppen -- -- -- Move group to recycle bin? -- Vill du flytta gruppen till papperskorgen? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Vill du verkligen flytta "%1" till papperskorgen? -- -- -- Successfully merged the database files. -- Slog samman databasfilerna. -- -- -- Database was not modified by merge operation. -- Databasen ändrades inte av sammanslagningen. -- -- -- Shared group... -- Delad grupp... -- -- -- Writing the database failed: %1 -- Kunde inte skriva databasen: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Databasen är öppnad i skrivskyddat läge. Autospar är inaktiverat. -- -- -- Save database backup -- Spara säkerhetskopia av databasen -- -- -- Could not find database file: %1 -- Kunde inte hitta databasfilen: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Post -- -- -- Advanced -- Avancerat -- -- -- Icon -- Ikon -- -- -- Auto-Type -- Autoskriv -- -- -- Properties -- Egenskaper -- -- -- History -- Historik -- -- -- SSH Agent -- SSH-tjänst -- -- -- n/a -- n/a -- -- -- (encrypted) -- (krypterad) -- -- -- Select private key -- Välj privat nyckel -- -- -- Entry history -- Posthistorik -- -- -- Add entry -- Lägg till post -- -- -- Edit entry -- Redigera post -- -- -- New attribute -- Nytt attribut -- -- -- Are you sure you want to remove this attribute? -- Vill du verkligen ta bort detta attribut? -- -- -- Tomorrow -- Imorgon -- -- -- %n week(s) -- %n vecka%n veckor -- -- -- %n month(s) -- %n månad%n månader -- -- -- Entry updated successfully. -- Posten uppdaterad. -- -- -- New attribute %1 -- Nytt attribut %1 -- -- -- %n year(s) -- %n år%n år -- -- -- Confirm Removal -- Bekräfta borttagning -- -- -- Browser Integration -- Webbläsarintegrering -- -- -- <empty URL> -- <tom URL> -- -- -- Are you sure you want to remove this URL? -- Vill du verkligen ta bort denna URL? -- -- -- Reveal -- Visa -- -- -- Hide -- Dölj -- -- -- Unsaved Changes -- Osparade ändringar -- -- -- Would you like to save changes to this entry? -- Vill du spara ändringarna i denna post? -- -- -- [PROTECTED] Press Reveal to view or edit -- [SKYDDAD] Tryck "Visa" för att visa eller redigera -- -- -- Invalid Entry -- Ogiltig post -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- En extern sammanslagningsåtgärd har ogiltigförklarat denna post. --Alla genomförda ändringar kan tyvärr ha förlorats. -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Ytterligare attribut -- -- -- Add -- Lägg till -- -- -- Remove -- Ta bort -- -- -- Edit Name -- Redigera namn -- -- -- Protect -- Skydda -- -- -- Reveal -- Visa -- -- -- Attachments -- Bilagor -- -- -- Foreground Color: -- Förgrundsfärg: -- -- -- Background Color: -- Bakgrundsfärg: -- -- -- Attribute selection -- Attributval -- -- -- Attribute value -- Attributvärde -- -- -- Add a new attribute -- Lägg till nytt attribut -- -- -- Remove selected attribute -- Ta bort markerade attribut -- -- -- Edit attribute name -- Redigera attributnamn -- -- -- Toggle attribute protection -- Attributskydd av/på -- -- -- Show a protected attribute -- Visa ett skyddat attribut -- -- -- Foreground color selection -- Val av förgrundsfärg -- -- -- Background color selection -- Val av bakgrundsfärg -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Vid aktivering visas posten inte i rapporter som Hälsokontroll och HIBP även om den inte matchar kvalitetskraven (t.ex. lösenordsentropin eller återanvändning). Du kan aktivera om lösenordet ligger utanför din kontroll (t.ex. om det behöver vara en fyrsiffrig PIN-kod) för att förhindra att det belamrar rapporterna.</p></body></html> -- -- -- Exclude from database reports -- Undanta från databasrapporter -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Aktivera autoskriv för denna post -- -- -- Window Associations -- Fönsterassociering -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Fönstertitel: -- -- -- Use a specific sequence for this association: -- Använd en specifik sekvens för denna association: -- -- -- Custom Auto-Type sequence -- Anpassad autoskrivsekvens -- -- -- Open Auto-Type help webpage -- Öppna autoskrivhjälpens hemsida -- -- -- Existing window associations -- Befintliga fönsterassociationer -- -- -- Add new window association -- Lägg till ny fönsterassociation -- -- -- Remove selected window association -- Ta bort markerad fönsterassociation -- -- -- You can use an asterisk (*) to match everything -- Du kan använda en asterisk (*) för att matcha allt (jokertecken) -- -- -- Set the window association title -- Ange fönsterassociationstitel -- -- -- You can use an asterisk to match everything -- Du kan använda en asterisk som jokertecken -- -- -- Custom Auto-Type sequence for this window -- Anpassad autoskrivsekvens för detta fönster -- -- -- Inherit default Auto-Type sequence from the group -- Ärv standard auto-skriv sekvens för grupp -- -- -- Use custom Auto-Type sequence: -- Använd egen auto-skriv sekvens: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Dessa inställningar påverkar posternas beteende i webbläsartillägget. -- -- -- General -- Allmänt -- -- -- Skip Auto-Submit for this entry -- Undanta autoskriv för den här posten -- -- -- Hide this entry from the browser extension -- Dölj den här posten från webbläsartillägget -- -- -- Additional URL's -- Ytterligare URL:er -- -- -- Add -- Lägg till -- -- -- Remove -- Ta bort -- -- -- Edit -- Redigera -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Skicka bara den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten i normala inloggningsformulär. -- -- -- Use this entry only with HTTP Basic Auth -- Använd den här posten endast med HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Visa -- -- -- Restore -- Återställ -- -- -- Delete -- Ta bort -- -- -- Delete all -- Ta bort alla -- -- -- Entry history selection -- Posthistorik -- -- -- Show entry at selected history state -- Visa posten i markerad historikstatus -- -- -- Restore entry to selected history state -- Återställ posten till markerad historikstatus -- -- -- Delete selected history state -- Ta bort markerad historikstatus -- -- -- Delete all history -- Ta bort all historik -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Lösenord: -- -- -- Title: -- Titel: -- -- -- Presets -- Förinställningar -- -- -- Toggle the checkbox to reveal the notes section. -- Klicka i kryssrutan för att visa anteckningssektionen. -- -- -- Username: -- Användarnamn: -- -- -- Url field -- URL -- -- -- Download favicon for URL -- Ladda ner favicon för URL:en -- -- -- Password field -- Lösenord -- -- -- Toggle notes visible -- Visa/Dölj anteckningar -- -- -- Expiration field -- Förfaller -- -- -- Expiration Presets -- Förinställningar för förfallodag -- -- -- Expiration presets -- Förinställningar för förfallodag -- -- -- Notes field -- Anteckningar -- -- -- Title field -- Titel -- -- -- Username field -- Användarnamn -- -- -- Toggle expiration -- Förfallodag på/av -- -- -- Notes: -- Anteckningar: -- -- -- https://example.com -- https://exempel.com -- -- -- Expires: -- Förfaller: -- -- -- Edit Entry -- Redigera post -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Formulär -- -- -- Remove key from agent after -- Ta bort nyckeln från agenten efter -- -- -- seconds -- sekunder -- -- -- Fingerprint -- Fingeravtryck -- -- -- Remove key from agent when database is closed/locked -- Ta bort nyckeln från bakgrundstjänsten när databasen stängs/låses -- -- -- Public key -- Offentlig nyckel -- -- -- Add key to agent when database is opened/unlocked -- Lägg till nyckeln till bakgrundstjänsten när databasen öppnas/låses upp -- -- -- Comment -- Kommentar -- -- -- Decrypt -- Avkryptera -- -- -- n/a -- Ej tillämplig -- -- -- Copy to clipboard -- Kopiera till urklipp -- -- -- Private key -- Privat nyckel -- -- -- External file -- Extern fil -- -- -- Browse... -- Button for opening file dialog -- Bläddra... -- -- -- Attachment -- Bilaga -- -- -- Add to agent -- Lägg till i bakgrundstjänsten -- -- -- Remove from agent -- Ta bort från bakgrundstjänsten -- -- -- Require user confirmation when this key is used -- Kräv användarbekräftelse när denna nyckel används -- -- -- Remove key from agent after specified seconds -- Ta bort nyckeln från bakgrundstjänsten efter specificerat antal sekunder -- -- -- Browser for key file -- Bläddra efter nyckelfil -- -- -- External key file -- Extern nyckelfil -- -- -- Select attachment file -- Välj bilagefil -- -- -- -- EditGroupWidget -- -- Group -- Grupp -- -- -- Icon -- Ikon -- -- -- Properties -- Egenskaper -- -- -- Add group -- Lägg till grupp -- -- -- Edit group -- Redigera grupp -- -- -- Enable -- Aktivera -- -- -- Disable -- Avaktivera -- -- -- Inherit from parent group (%1) -- Ärv från överordnad grupp (%1) -- -- -- Entry has unsaved changes -- Posten har osparade ändringar -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Typ: -- -- -- Path: -- Sökväg: -- -- -- Password: -- Lösenord: -- -- -- Inactive -- Inaktiv -- -- -- KeeShare unsigned container -- KeeShare osignerad behållare -- -- -- KeeShare signed container -- KeeShare signerad behållare -- -- -- Select import source -- Välj importkälla -- -- -- Select export target -- Välj exportmål -- -- -- Select import/export file -- Välj import-/exportfil -- -- -- Clear -- Rensa -- -- -- Import -- Importera -- -- -- Export -- Exportera -- -- -- Synchronize -- Synkronisera -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Din PassXC-version stöder inte delning av den här behållartypen. --Filtyper som stöds är: %1. -- -- -- %1 is already being exported by this database. -- %1 exporteras redan av den här databasen. -- -- -- %1 is already being imported by this database. -- %1 importeras redan av den här databasen. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 importeras och exporteras av olika grupper i den här databasen. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare är inaktiverat. Du kan aktivera import/export i programinställningarna. -- -- -- Database export is currently disabled by application settings. -- Databasexport är inaktiverat av programinställningarna. -- -- -- Database import is currently disabled by application settings. -- Databasimport är inaktiverat av programinställningarna. -- -- -- Sharing mode field -- Delningsläge -- -- -- Path to share file field -- Sökväg till delningsfil -- -- -- Password field -- Lösenord -- -- -- Clear fields -- Rensa -- -- -- Browse for share file -- Bläddra efter delningsfil -- -- -- Browse... -- Bläddra... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Namn -- -- -- Notes field -- Anteckningar -- -- -- Toggle expiration -- Förfallodag på/av -- -- -- Auto-Type toggle for this and sub groups -- Autoskriv på/av för denna grupp och undergrupper -- -- -- Expiration field -- Förfaller -- -- -- Search toggle for this and sub groups -- Sökning på/av för denna grupp och undergrupper -- -- -- Default auto-type sequence field -- Standard autoskrivsekvens -- -- -- Expires: -- Förfaller: -- -- -- Use default Auto-Type sequence of parent group -- Använd standard autoskrivsekvens för överordnad grupp -- -- -- Auto-Type: -- Autoskriv: -- -- -- Search: -- Sök: -- -- -- Notes: -- Anteckningar: -- -- -- Name: -- Namn: -- -- -- Set default Auto-Type sequence -- Ange standard autoskrivsekvens -- -- -- Edit Group -- Redigera grupp -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Lägg till anpassad ikon -- -- -- Delete custom icon -- Ta bort anpassad ikon -- -- -- Download favicon -- Ladda ner favicon -- -- -- Unable to fetch favicon. -- Kunde inte hämta favicon. -- -- -- Images -- Bilder -- -- -- All files -- Alla filer -- -- -- Confirm Delete -- Bekräfta borttagning -- -- -- Select Image(s) -- Välj bild(er) -- -- -- Successfully loaded %1 of %n icon(s) -- Läste in %1 av %n ikonerLäste in %1 av %n ikoner -- -- -- No icons were loaded -- Inga ikoner lästes in -- -- -- %n icon(s) already exist in the database -- %n ikon finns redan i databasen%n ikoner finns redan i databasen -- -- -- The following icon(s) failed: -- Följande ikon misslyckades:Följande ikoner misslyckades: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Denna ikon används av %n post och kommer att ersättas av standardikonen. Vill du verkligen ta bort den?Denna ikon används av %n poster och kommer att ersättas av standardikonen. Vill du verkligen ta bort den? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Du kan aktivera ikontjänsten från DuckDuckGo under Verktyg -> Inställningar -> Säkerhet -- -- -- Download favicon for URL -- Ladda ner favicon för URL:en -- -- -- Apply selected icon to subgroups and entries -- Använd markerad ikon till undergrupper och poster -- -- -- Also apply to child groups -- Använd även till undergrupper -- -- -- Also apply to child entries -- Använd även till underposter -- -- -- Also apply to all children -- Använd även till alla undergrupper/-poster -- -- -- Existing icon selected. -- Befintlig ikon vald. -- -- -- Use default icon -- Använd standard ikon -- -- -- Use custom icon -- Använd egen ikon -- -- -- Apply icon to... -- Tillämpa ikonen på... -- -- -- Apply to this group only -- Använd endast till denna grupp -- -- -- -- EditWidgetProperties -- -- Created: -- Skapad: -- -- -- Modified: -- Ändrad: -- -- -- Accessed: -- Använd: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- Tilläggsdata -- -- -- Remove -- Ta bort -- -- -- Delete plugin data? -- Vill du ta bort tilläggsdata? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Vill du verkligen ta bort den valda tilläggsdatan? --Det kan medföra att de berörda tilläggen inte fungerar. -- -- -- Key -- Nyckel -- -- -- Value -- Värde -- -- -- Datetime created -- Skapad datum/tid -- -- -- Datetime modified -- Ändrad datum/tid -- -- -- Datetime accessed -- Använd datum/tid -- -- -- Unique ID -- Unikt ID -- -- -- Plugin data -- Tilläggsdata -- -- -- Remove selected plugin data -- Ta bort markerad tilläggsdata -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klona -- -- -- -- EntryAttachmentsModel -- -- Name -- Namn -- -- -- Size -- Storlek -- -- -- -- EntryAttachmentsWidget -- -- Form -- Formulär -- -- -- Add -- Lägg till -- -- -- Remove -- Ta bort -- -- -- Open -- Öppna -- -- -- Save -- Spara -- -- -- Select files -- Välj filer -- -- -- Are you sure you want to remove %n attachment(s)? -- Vill du verkligen ta bort %n bilaga?Vill du verkligen ta bort %n bilagor? -- -- -- Save attachments -- Spara bilagor -- -- -- Unable to create directory: --%1 -- Kan inte skapa mappen: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Vill du verkligen skriva över den befintliga filen "%1" med bilagan? -- -- -- Confirm overwrite -- Bekräfta överskrivning -- -- -- Unable to save attachments: --%1 -- Kan inte spara bilagor: --%1 -- -- -- Unable to open attachment: --%1 -- Kan inte öppna bilaga: --%1 -- -- -- Unable to open attachments: --%1 -- Kan inte öppna bilagor: --%1 -- -- -- Confirm remove -- Bekräfta borttagning -- -- -- Unable to open file(s): --%1 -- Kan inte öppna fil:Kan inte öppna filer: --%1 -- -- -- Attachments -- Bilagor -- -- -- Add new attachment -- Lägg tillny bilaga -- -- -- Remove selected attachment -- Ta bort markerad bilaga -- -- -- Open selected attachment -- Öppna markerad bilaga -- -- -- Save selected attachment to disk -- Spara markerad bilaga på disk -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 är en stor fil (%2 MB). --Databasen kan bli mycket stor och försämra prestanda. -- --Vill du verkligen lägga till den här filen? -- -- -- Confirm Attachment -- Bekräfta bilaga -- -- -- -- EntryAttributesModel -- -- Name -- Namn -- -- -- -- EntryHistoryModel -- -- Last modified -- Ändrad -- -- -- Title -- Titel -- -- -- Username -- Användarnamn -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Grupp -- -- -- Title -- Titel -- -- -- Username -- Användarnamn -- -- -- URL -- URL -- -- -- Never -- Aldrig -- -- -- Password -- Lösenord -- -- -- Notes -- Anteckningar -- -- -- Expires -- Förfaller -- -- -- Created -- Skapad -- -- -- Modified -- Ändrad -- -- -- Accessed -- Använd -- -- -- Attachments -- Bilagor -- -- -- Size -- Storlek -- -- -- Group name -- Gruppnamn -- -- -- Entry title -- Posttitel -- -- -- Entry notes -- Postanteckning -- -- -- Entry expires at -- Posten upphör att gälla -- -- -- Creation date -- Skapad -- -- -- Last modification date -- Ändrad -- -- -- Last access date -- Senast använd -- -- -- Attached files -- Bifogade filer -- -- -- Entry size -- Postens storlek -- -- -- Has attachments -- Har bilagor -- -- -- Has TOTP one-time password -- Har TOTP engångslösenord -- -- -- -- EntryPreviewWidget -- -- Close -- Stäng -- -- -- General -- Allmänt -- -- -- Username -- Användarnamn -- -- -- Password -- Lösenord -- -- -- Expiration -- Förfaller -- -- -- URL -- URL -- -- -- Attributes -- Attribut -- -- -- Attachments -- Bilagor -- -- -- Notes -- Anteckningar -- -- -- Autotype -- Autoskriv -- -- -- Window -- Fönster -- -- -- Sequence -- Sekvens -- -- -- Searching -- Söker -- -- -- Search -- Sök -- -- -- Clear -- Rensa -- -- -- Never -- Aldrig -- -- -- [PROTECTED] -- [SKYDDAD] -- -- -- Enabled -- Aktiverad -- -- -- Disabled -- Inaktiverad -- -- -- Share -- Dela -- -- -- Display current TOTP value -- Visa aktuellt TOTP-värde -- -- -- Advanced -- Avancerat -- -- -- Default Sequence -- Standardsekvens -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- Ogiltig URL -- -- -- -- EntryView -- -- Fit to window -- Anpassa till fönster -- -- -- Fit to contents -- Anpassa till innehåll -- -- -- Reset to defaults -- Återställ till standardvärden -- -- -- Has attachments -- Entry attachment icon toggle -- Har bilagor -- -- -- Has TOTP -- Entry TOTP icon toggle -- Har TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Posten "%1" från databas "%2" har använts av %3 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- Kunde inte registrera DBus-tjänsten på %1.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n post användes av %1%n poster användes av %1 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Filnamn -- -- -- Group -- Grupp -- -- -- Manage -- Hantera -- -- -- Unlock to show -- Lås upp för att visa -- -- -- None -- Ingen -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Program -- -- -- Manage -- Hantera -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Secret Service:</b> %1 -- -- -- Unknown -- Unknown PID -- Okänd -- -- -- Unknown -- Unknown executable path -- Okänd -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Körbar: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- En annan Secret Service körs (%1).<br/> Stoppa/ta bort den innan du aktiverar Secret Service-integreringen igen. -- -- -- -- Group -- -- [empty] -- group has no children -- [tom] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Lösenordsvalidering online misslyckades -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Ladda ner faviconer -- -- -- Cancel -- Avbryt -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Har du problem att ladda ner ikoner? --Du kan aktivera ikontjänsten från DuckDuckGo, i säkerhetssektionen av programinställningarna. -- -- -- Close -- Stäng -- -- -- URL -- URL -- -- -- Status -- Status -- -- -- Please wait, processing entry list... -- Vänta, postlistan bearbetas... -- -- -- Downloading... -- Laddar ner... -- -- -- Ok -- OK -- -- -- Already Exists -- Finns redan -- -- -- Download Failed -- Nerladdning misslyckades -- -- -- Downloading favicons (%1/%2)... -- Laddar ner faviconer (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Stäng -- -- -- Close message -- Stäng meddelandet -- -- -- -- Kdbx3Reader -- -- missing database headers -- saknade databashuvuden -- -- -- Header doesn't match hash -- Huvudet stämmer inte med hashen -- -- -- Invalid header id size -- Ogiltig storlek på sidhuvudets ID -- -- -- Invalid header field length -- Ogiltig storlek på sidhuvudets fältlängd -- -- -- Invalid header data length -- Ogiltig storlek på sidhuvudets datalängd -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ogiltiga autentiseringsuppgifter angavs. Försök igen. --Om detta upprepas, kan din databasfil vara skadad. -- -- -- Unable to calculate database key -- Kan inte beräkna databasnyckeln -- -- -- Unable to issue challenge-response: %1 -- Kunde inte utfärda challenge-response: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Kunde inte utfärda challenge-response: %1 -- -- -- Unable to calculate database key -- Kan inte beräkna databasnyckeln -- -- -- -- Kdbx4Reader -- -- missing database headers -- saknade databashuvuden -- -- -- Invalid header checksum size -- Ogiltig storlek på sidhuvudets kontrollsumma -- -- -- Header SHA256 mismatch -- Sidhuvudets SHA256 stämmer inte -- -- -- Unknown cipher -- Okänt chiffer -- -- -- Invalid header id size -- Ogiltig storlek på sidhuvudets ID -- -- -- Invalid header field length -- Ogiltig storlek på sidhuvudets fältlängd -- -- -- Invalid header data length -- Ogiltig storlek på sidhuvudets datalängd -- -- -- Failed to open buffer for KDF parameters in header -- Kunde inte öppna buffert för KDF-parametrar i sidhuvudet -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Nyckelhärledningen stöds inte (KDF), eller ogiltiga parametrar. -- -- -- Legacy header fields found in KDBX4 file. -- Äldre sidhuvudfält hittades i KDBX4-filen. -- -- -- Invalid inner header id size -- Ogiltig storlek på inre sidhuvud-ID -- -- -- Invalid inner header field length -- Ogiltig längd på inre sidhuvudfält -- -- -- Invalid inner header binary size -- Ogiltig storlek på inre sidhuvudbinär -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- KeePass-versionen av datastruktur för lagring av metadata stöds inte. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ogiltiga autentiseringsuppgifter angavs. Försök igen. --Om detta upprepas, kan din databasfil vara skadad. -- -- -- (HMAC mismatch) -- (HMAC matchningsfel) -- -- -- Unable to calculate database key: %1 -- Kan inte beräkna databasnyckel: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Ogiltig symetrisk chifferalgoritm. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Ogiltig symmetrisk chiffer IV-storlek. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Det gick inte att serialisera KDF-parametrarnas datastruktur för lagring av metadata -- -- -- Unable to calculate database key: %1 -- Kunde inte beräkna databasnyckel: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Chiffret stöds inte -- -- -- Invalid compression flags length -- -- -- -- Unsupported compression algorithm -- Stöd saknas för komprimeringsalgoritmen -- -- -- Invalid master seed size -- -- -- -- Invalid transform seed size -- -- -- -- Invalid transform rounds size -- Ogiltig storlek på transformeringsrundor -- -- -- Invalid start bytes size -- -- -- -- Invalid random stream id size -- -- -- -- Invalid inner random stream cipher -- -- -- -- Not a KeePass database. -- Inte en KeePass-databas. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Den valda filen är en gammal KeePass 1-databas (.kdb). -- --Du kan importera den genom att klicka på "Databas > Importera > KeePass 1-databas...". --Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade databasen med den gamla KeePassX 0.4-versionen. -- -- -- Unsupported KeePass 2 database version. -- KeePass 2 databasversion som inte stöds. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Ogiltig uuid-längd för chiffer: %1 (längd=%2) -- -- -- Unable to parse UUID: %1 -- Kan inte tolka UUID: %1 -- -- -- Failed to read database file. -- Kunde inte läsa databasfilen. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML-tolkning misslyckades: %1 -- -- -- No root group -- Ingen root-grupp -- -- -- Missing icon uuid or data -- Saknar uuid eller data för ikon -- -- -- Missing custom data key or value -- Anpassad datanyckel eller värde saknas -- -- -- Multiple group elements -- Flera gruppelement -- -- -- Null group uuid -- uuid för grupp är null -- -- -- Invalid group icon number -- Ogiltigt gruppnummer för ikon -- -- -- Invalid EnableAutoType value -- Ogiltigt värde för EnableAutoType -- -- -- Invalid EnableSearching value -- Ogiltigt värde för EnableSearching -- -- -- No group uuid found -- Inget grupp-uuid hittades -- -- -- Null DeleteObject uuid -- -- -- -- Missing DeletedObject uuid or time -- Saknar DeletedObject uuid eller tid -- -- -- Null entry uuid -- Null post-uuid -- -- -- Invalid entry icon number -- Ogiltigt post ikon nummer -- -- -- History element in history entry -- Historikelement i historikpost -- -- -- No entry uuid found -- Inget post-uuid hittades -- -- -- History element with different uuid -- Historikelement med annat uuid -- -- -- Duplicate custom attribute found -- Dubbla anpassade attribut hittades -- -- -- Entry string key or value missing -- Postens text-nyckel eller värde saknas -- -- -- Entry binary key or value missing -- Postens binär-nyckel eller värde saknas -- -- -- Auto-type association window or sequence missing -- Auto-skrivassociationsfönster eller sekvens saknas -- -- -- Invalid bool value -- Ogiltigt bool värde -- -- -- Invalid date time value -- Ogiltigt datum-/tidsvärde -- -- -- Invalid color value -- Ogiltigt färgvärde -- -- -- Invalid color rgb part -- Ogiltigt färg rgb del -- -- -- Invalid number value -- Felaktigt numeriskt värde -- -- -- Invalid uuid value -- Ogiltigt uuid-värde -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Kunde inte dekomprimera binären. -- -- -- XML error: --%1 --Line %2, column %3 -- XML-fel: --%1 --Rad %2, kolumn: %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Ogiltig KeeAgent-inställningsfilstruktur. -- -- -- Private key is an attachment but no attachments provided. -- Privat nyckel är en bifogad fil men inga bilagor tillhandahålls. -- -- -- Private key is empty -- Privat nyckel är tom -- -- -- File too large to be a private key -- Filen är för stor för att vara en privat nyckel -- -- -- Failed to open private key -- Kunde inte öppna privat nyckel -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Kan inte öppna databasen. -- -- -- Import KeePass1 Database -- Importera KeePass1-databas -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Kan inte läsa nyckelfilen. -- -- -- Not a KeePass database. -- Inte en KeePass-databas. -- -- -- Unsupported encryption algorithm. -- Krypteringsalgoritnmen stöds ej. -- -- -- Unsupported KeePass database version. -- KeePass-databasversionen stöds ej. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Kan inte läsa kryptering IV -- -- -- Invalid number of groups -- Ogiltigt antal grupper -- -- -- Invalid number of entries -- Ogiltigt antal poster -- -- -- Invalid content hash size -- Ogiltig storlek på innehålls-hash -- -- -- Invalid transform seed size -- -- -- -- Invalid number of transform rounds -- Ogiltigt antal transformeringsrundor -- -- -- Unable to construct group tree -- Kan inte konstruera gruppträd -- -- -- Root -- Root -- -- -- Key transformation failed -- Nyckeltransformering misslyckades -- -- -- Invalid group field type number -- -- -- -- Invalid group field size -- Ogiltig fältstorlek för grupp -- -- -- Read group field data doesn't match size -- -- -- -- Incorrect group id field size -- -- -- -- Incorrect group creation time field size -- -- -- -- Incorrect group modification time field size -- -- -- -- Incorrect group access time field size -- -- -- -- Incorrect group expiry time field size -- -- -- -- Incorrect group icon field size -- Felaktig gruppikonstorlek -- -- -- Incorrect group level field size -- Felaktig gruppnivåstorlek -- -- -- Invalid group field type -- Ogiltig grupptyp -- -- -- Missing group id or level -- Grupp-ID eller nivå saknas -- -- -- Missing entry field type number -- -- -- -- Invalid entry field size -- Ogiltig fältstorlek -- -- -- Read entry field data doesn't match size -- Inläst data stämmer inte med fältstorleken -- -- -- Invalid entry uuid field size -- Ogiltig fältstorlek för uuid -- -- -- Invalid entry group id field size -- Ogiltig fältstorlek för grupp-id -- -- -- Invalid entry icon field size -- Ogiltig fältstorlek för ikon -- -- -- Invalid entry creation time field size -- Ogiltig fältstorlek för skapandedatum -- -- -- Invalid entry modification time field size -- Ogiltig fältstorlek för ändringsdatum -- -- -- Invalid entry expiry time field size -- Ogiltig fältstorlek för utgångsdatum -- -- -- Invalid entry field type -- Ogiltig posttyp -- -- -- unable to seek to content position -- kunde inte söka till innehållets position -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Ogiltiga autentiseringsuppgifter angavs. Försök igen. --Om detta upprepas, kan din databasfil vara skadad. -- -- -- Unable to calculate database key -- Kan inte beräkna databasnyckeln -- -- -- -- KeeShare -- -- Invalid sharing reference -- Ogiltig delningsreferens -- -- -- Inactive share %1 -- Inaktiv delning %1 -- -- -- Imported from %1 -- Importerat från %1 -- -- -- Exported to %1 -- Exporterat till %1 -- -- -- Synchronized with %1 -- Synkroniserat med %1 -- -- -- Import is disabled in settings -- Import är inaktiverat i inställningarna -- -- -- Export is disabled in settings -- Export är inaktiverat i inställningarna -- -- -- Inactive share -- Inaktiv delning -- -- -- Imported from -- Importerat från -- -- -- Exported to -- Exporterat till -- -- -- Synchronized with -- Synkroniserat med -- -- -- -- KeyComponentWidget -- -- Key Component -- Nyckelkomponent -- -- -- Key Component Description -- Beskrivning för nyckelkomponent -- -- -- Cancel -- Avbryt -- -- -- Key Component set, click to change or remove -- Nyckelkomponent angiven, klicka för att ändra eller ta bort -- -- -- Add %1 -- Add a key component -- Lägg till %1 -- -- -- Change %1 -- Change a key component -- Ändra %1 -- -- -- Remove %1 -- Remove a key component -- Ta bort %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 angivet, klicka för att ändra eller ta bort -- -- -- -- KeyFileEditWidget -- -- Generate -- Generera -- -- -- Key File -- Nyckelfil -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Du kan lägga till en nyckelfil innehållande slumpmässiga byte för ytterligare säkerhet.</p><p>Du måste lagra den säkert och aldrig förlora den, för att inte bli utestängd</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Kunde inte läsa in nyckelfilen "%1" --Meddelande: %2 -- -- -- Key files -- Nyckelfiler -- -- -- All files -- Alla filer -- -- -- Create Key File... -- Skapa nyckelfil... -- -- -- Error creating key file -- Kunde inte skapa nyckelfil -- -- -- Unable to create key file: %1 -- Kunde inte skapa nyckelfil: %1 -- -- -- Select a key file -- Välj nyckelfil -- -- -- Key file selection -- Nyckelfiler -- -- -- Browse for key file -- Bläddra efter nyckelfil -- -- -- Browse... -- Bläddra... -- -- -- Generate a new key file -- Generera en ny nyckelfil -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- OBS! Använd inte en fil som kanske kommer att modifieras, eftersom det kommer att förhindra upplåsning av databasen! -- -- -- Invalid Key File -- Ogiltig nyckelfil -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Du kan inte använda den aktuella databasen som sin egen nyckelfil. Välj en annan fil eller generera en ny nyckelfil. -- -- -- Suspicious Key File -- Misstänkt nyckelfil -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Den valda filen ser ut som en lösenordsdatabas. En nyckelfil måste vara en statisk fil som aldrig ändras, annars förlorar du åtkomst till databasen för alltid. --Vill du verkligen fortsätta med den här filen? -- -- -- Old key file format -- Gammalt nyckelfilsformat -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Databas -- -- -- &Help -- &Hjälp -- -- -- &Groups -- &Grupper -- -- -- &Tools -- &Verktyg -- -- -- &Quit -- &Avsluta -- -- -- &About -- &Om -- -- -- Database settings -- Databasinställningar -- -- -- Copy username to clipboard -- Kopiera användarnamn till urklipp -- -- -- Copy password to clipboard -- Kopiera lösenord till urklipp -- -- -- &Settings -- &Inställningar -- -- -- &Title -- &Titel -- -- -- Copy title to clipboard -- Kopiera titel till urklipp -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Kopiera URL till urklipp -- -- -- &Notes -- &Anteckningar -- -- -- Copy notes to clipboard -- Kopiera anteckningar till urklipp -- -- -- Copy &TOTP -- Kopiera &TOTP -- -- -- E&mpty recycle bin -- T&öm papperskorg -- -- -- Clear history -- Rensa historiken -- -- -- Access error for config file %1 -- Åtkomstfel för konfigurationsfil %1 -- -- -- Settings -- Inställningar -- -- -- Toggle window -- Visa/Dölj fönster -- -- -- Quit KeePassXC -- Avsluta KeePassXC -- -- -- Please touch the button on your YubiKey! -- Rör vid knappen på din YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- VARNING! Du använder en instabil kompilering av KeePassXC! --Det är hög risk för fel, säkerhetskopiera dina databaser. --Denna version är inte ämnad för daglig användning. -- -- -- &Donate -- &Donera -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- VARNING! Din Qt-version kan leda till att KeePassXC kraschar vid användning av skärmtangentbord! --Vi rekommenderar att du använder tillgänglig AppImage, från vår nerladdningssida. -- -- -- &Import -- &Importera -- -- -- Create a new database -- Skapa en ny databas -- -- -- Merge from another KDBX database -- Infoga från annan KDBX-databas -- -- -- Add a new entry -- Lägg till en ny post -- -- -- View or edit entry -- Visa eller redigera posten -- -- -- Add a new group -- Lägg till en ny grupp -- -- -- Perform &Auto-Type -- &Utför autoskriv -- -- -- Open &URL -- &Öppna URL -- -- -- Import a KeePass 1 database -- Importera en KeePass1-databas -- -- -- Import a CSV file -- Importera en CSV-fil -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- OBS! Du använder en förhandsversion av KeePassXC! --Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dagligt bruk. -- -- -- Check for updates on startup? -- Vill du söka efter uppdateringar vid uppstart? -- -- -- Would you like KeePassXC to check for updates on startup? -- Vill du att KeePassXC skall söka efter uppdateringar vid uppstart? -- -- -- You can always check for updates manually from the application menu. -- Du kan alltid söka efter uppdateringar manuellt, från programmenyn. -- -- -- &Export -- &Exportera -- -- -- Sort &A-Z -- Sortera &A-Z -- -- -- Sort &Z-A -- Sortera &Z-A -- -- -- &Password Generator -- &Lösenordsgenerator -- -- -- Import a 1Password Vault -- Importera ett 1Password-valv -- -- -- &Getting Started -- &Kom igång -- -- -- &User Guide -- &Användarmanual -- -- -- &Keyboard Shortcuts -- &Tangentbordsgenvägar -- -- -- &Recent Databases -- &Tidigare databaser -- -- -- &Entries -- &Poster -- -- -- Copy Att&ribute -- Kopiera att&ribut -- -- -- TOTP -- TOTP -- -- -- View -- Vy -- -- -- Theme -- Tema -- -- -- &Check for Updates -- Sök efter &uppdateringar -- -- -- &Open Database… -- &Öppna databas... -- -- -- &Save Database -- &Spara databas -- -- -- &Close Database -- S&täng databas -- -- -- &New Database… -- &Ny databas... -- -- -- &Merge From Database… -- S&lå samman från databas... -- -- -- &New Entry… -- &Ny post... -- -- -- &Edit Entry… -- &Redigera post... -- -- -- &Delete Entry… -- &Ta bort post... -- -- -- &New Group… -- &Ny grupp... -- -- -- &Edit Group… -- &Redigera grupp... -- -- -- &Delete Group… -- &Ta bort grupp... -- -- -- Download All &Favicons… -- Ladda ner alla favikoner... -- -- -- Sa&ve Database As… -- S&para databas som... -- -- -- Database &Security… -- Databas&säkerhet... -- -- -- Database &Reports... -- Databas&rapporter... -- -- -- Statistics, health check, etc. -- Statistik, hälsokontroll, etc. -- -- -- &Database Settings… -- &Databasinställningar... -- -- -- &Clone Entry… -- &Klona post... -- -- -- Move u&p -- Flytta u&pp -- -- -- Move entry one step up -- Flytta upp posten ett steg -- -- -- Move do&wn -- Flytta &ner -- -- -- Move entry one step down -- Flytta ner posten ett steg -- -- -- Copy &Username -- Kopiera an&vändarnamn -- -- -- Copy &Password -- Kopiera &lösenord -- -- -- Download &Favicon -- Ladda ner &favikon -- -- -- &Lock Databases -- &Lås databasen -- -- -- &CSV File… -- &CSV-fil... -- -- -- &HTML File… -- &HTML-fil... -- -- -- KeePass 1 Database… -- KeePass 1-databas… -- -- -- 1Password Vault… -- 1Password Vault… -- -- -- CSV File… -- CSV-file… -- -- -- Show TOTP -- Visa TOTP -- -- -- Show QR Code -- Visa QR-kod -- -- -- Set up TOTP… -- Konfigurera TOTP... -- -- -- Report a &Bug -- Rapportera ett &fel -- -- -- Open Getting Started Guide -- Öppna Kom-igång-guiden -- -- -- &Online Help -- &Online-hjälp -- -- -- Go to online documentation -- Gå till online-dokumentationen -- -- -- Open User Guide -- Öppna användarmanualen -- -- -- Save Database Backup... -- Spara säkerhetskopia av databasen... -- -- -- Add key to SSH Agent -- Lägg till nyckel till SSH-tjänsten -- -- -- Remove key from SSH Agent -- Ta bort nyckel från SSH-tjänsten -- -- -- Compact Mode -- Kompakt läge -- -- -- Automatic -- Automatisk -- -- -- Light -- Ljus -- -- -- Dark -- Mörk -- -- -- Classic (Platform-native) -- Klassisk (Platfformsintegration) -- -- -- Show Toolbar -- Visa verktygsfält -- -- -- Show Preview Panel -- Visa förhandsgranskningspanelen -- -- -- Don't show again for this version -- Visa inte igen för denna version -- -- -- Restart Application? -- Vill du starta om programmet? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Du måste starta om programmet för att tillämpa den här inställningen. Vill du starta om nu? -- -- -- Perform Auto-Type Sequence -- Utför auto-skrivsekvens -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Dölj användarnamn -- -- -- Hide Passwords -- Dölj lösenord -- -- -- -- ManageDatabase -- -- Database settings -- Databasinställningar -- -- -- Edit database settings -- Avsluta databasinställningar -- -- -- Unlock database -- Lås upp databasen -- -- -- Unlock database to show more information -- Lås upp databasen för att visa mer information -- -- -- Lock database -- Lås databasen -- -- -- -- ManageSession -- -- Disconnect -- Kopla ifrån -- -- -- Disconnect this application -- Koppla ifrån detta program -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Skapar saknad %1 [%2] -- -- -- Relocating %1 [%2] -- Omplacerar %1 [%2] -- -- -- Overwriting %1 [%2] -- Skriver över %1[%2] -- -- -- older entry merged from database "%1" -- äldre post infogad från databas "%1" -- -- -- Adding backup for older target %1 [%2] -- Lägger till säkerhetskopia från äldre mål %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Lägger till säkerhetskopia från äldre källa %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Återanvänder äldre målpost ovanpå nyare källa %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Återanvänder äldre källpost ovanpå nyare mål %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Synkroniserar från nyare källa %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Synkroniserar från äldre källa %1 [%2] -- -- -- Deleting child %1 [%2] -- Tar bort underpost %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Tar bort post %1 [%2] -- -- -- Changed deleted objects -- Ändrade borttagna objekt -- -- -- Adding missing icon %1 -- Lägger till saknad ikon %1 -- -- -- Removed custom data %1 [%2] -- Tog bort anpassad data %1 [%2] -- -- -- Adding custom data %1 [%2] -- Lägger till anpassad data %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Skapa en ny KeePassXC-databas... -- -- -- Root -- Root group -- Root -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Guidesida -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna. -- -- -- Advanced Settings -- Avancerade inställningar -- -- -- Simple Settings -- Förenklade inställningar -- -- -- Encryption Settings -- Krypteringsinställningar -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Databasens inloggningsuppgifter -- -- -- A set of credentials known only to you that protects your database. -- En uppsättning inloggningsuppgifter som bara du känner till, skyddar din databas. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Krypteringsinställningar -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Allmän databasinformation -- -- -- Please fill in the display name and an optional description for your new database: -- Fyll i visningsnamnet och en frivillig beskrivning för din nya databas: -- -- -- -- NixUtils -- -- Password Manager -- Lösenordshanterare -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Ogiltig OpData01, innehåller inget huvud -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Kan inte läsa alla IV-byte, förväntade 16 men fick %1 -- -- -- Unable to init cipher for opdata01: %1 -- Kan inte initiera chiffer för opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Kan inte läsa alla byte i HMAC signatur -- -- -- Malformed OpData01 due to a failed HMAC -- Felaktigt formaterad OpData01 på grund av en misslyckad HMAC -- -- -- Unable to process clearText in place -- Kan inte att bearbeta klartext på plats -- -- -- Expected %1 bytes of clear-text, found %2 -- Förväntade %1 byte klartext, hittade %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Läsning av databas producerade inte någon instans --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Mappen .opvault måste finnas -- -- -- Directory .opvault must be readable -- Mappen .opvault måste vara läsbar -- -- -- Directory .opvault/default must exist -- Mappen .opvault/default måste finnas -- -- -- Directory .opvault/default must be readable -- Mappen .opvault/default måste vara läsbar -- -- -- Unable to decode masterKey: %1 -- Kan inte avkoda huvudnyckel: %1 -- -- -- Unable to derive master key: %1 -- Kan inte härleda huvudnyckel: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Ogiltig nyckelfil, en OpenSSH-nyckel förväntas -- -- -- PEM boundary mismatch -- PEM-gränsfel -- -- -- Base64 decoding failed -- Base64-avkodning misslyckades -- -- -- Key file way too small. -- Nyckelfilen är alldeles för liten. -- -- -- Key file magic header id invalid -- Nyckelfilens magiska huvud-ID är ogiltigt -- -- -- Found zero keys -- Hittade inga nycklar -- -- -- Failed to read public key. -- Kunde inte läsa offentlig nyckel. -- -- -- Corrupted key file, reading private key failed -- Skadad nyckelfil, kunde inte läsa privat nyckel -- -- -- No private key payload to decrypt -- Ingen nyttolast att avkryptera, från privat nyckel -- -- -- Trying to run KDF without cipher -- Försöker köra KDF utan chiffer -- -- -- Passphrase is required to decrypt this key -- Lösenordsfras krävs för att avkryptera denna nyckel -- -- -- Key derivation failed, key file corrupted? -- Nyckelhärledning misslyckades, är nyckelfilen skadad? -- -- -- Decryption failed, wrong passphrase? -- Avkryptering misslyckades, är det fel lösenord? -- -- -- Unexpected EOF while reading public key -- Oväntad EOF, under inläsning av offentlig nyckel -- -- -- Unexpected EOF while reading private key -- Oväntad EOF, under inläsning av privat nyckel -- -- -- Can't write public key as it is empty -- Kan inte skriva offentlig nyckel, eftersom den är tom -- -- -- Unexpected EOF when writing public key -- Oväntad EOF, vid skrivning av offentlig nyckel -- -- -- Can't write private key as it is empty -- Kan inte skriva privat nyckel, eftersom den är tom -- -- -- Unexpected EOF when writing private key -- Oväntad EOF, vid skrivning av privat nyckel -- -- -- Unsupported key type: %1 -- Nyckeltypen stöds ej: %1 -- -- -- Unknown cipher: %1 -- Okänt chiffer: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Chiffer IV är för kort för MD5 kdf -- -- -- Unknown KDF: %1 -- Okänd KDF: %1 -- -- -- Unknown key type: %1 -- Okänd nyckeltyp: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Lösenorden stämmer inte överens -- -- -- Passwords match so far -- Lösenorden stämmer så långt -- -- -- Toggle Password (%1) -- Växla lösenord (%1) -- -- -- Generate Password (%1) -- Generera lösenord (%1) -- -- -- Warning: Caps Lock enabled! -- Varning! Caps Lock aktiverat! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Ange lösenord: -- -- -- Confirm password: -- Bekräfta lösenord: -- -- -- Password -- Lösenord -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Ett lösenord är den primära metoden för att säkra din databas.</p><p>Bra lösenord är långa, komplexa och unika. KeePassXC kan skapa dem åt dig.</p> -- -- -- Passwords do not match. -- Lösenorden stämmer inte. -- -- -- Password field -- Lösenord -- -- -- Repeat password field -- Upprepa lösenordet -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- styrka -- -- -- entropy -- entropi -- -- -- Password -- Lösenord -- -- -- Character Types -- Teckentyper -- -- -- Numbers -- Siffror -- -- -- Extended ASCII -- Utökad ASCII -- -- -- Exclude look-alike characters -- Undanta tecken som liknar varandra -- -- -- Pick characters from every group -- Plocka tecken från alla grupper -- -- -- &Length: -- &Längd: -- -- -- Passphrase -- Lösenordsfras -- -- -- Wordlist: -- Ordlista: -- -- -- Word Separator: -- Ordavdelare: -- -- -- Close -- Stäng -- -- -- Entropy: %1 bit -- Entropi: %1 bitar -- -- -- Password Quality: %1 -- Lösenordskvalitet: %1 -- -- -- Poor -- Password quality -- Dålig -- -- -- Weak -- Password quality -- Svag -- -- -- Good -- Password quality -- Bra -- -- -- Excellent -- Password quality -- Utmärkt -- -- -- Switch to advanced mode -- Växla till avancerat läge -- -- -- Advanced -- Avancerat -- -- -- Braces -- Klammerparenteser -- -- -- Punctuation -- Skiljetecken -- -- -- Quotes -- Citationstecken -- -- -- Logograms -- Logogram -- -- -- Character set to exclude from generated password -- Tecken som undantas från genererade lösenord -- -- -- Do not include: -- Undanta: -- -- -- Add non-hex letters to "do not include" list -- Lägg till icke-hexadecimala tecken till undantagslistan -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Undanta tecknen: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Genererat lösenord -- -- -- Upper-case letters -- VERSALER -- -- -- Lower-case letters -- gemener -- -- -- Special characters -- Specialtecken -- -- -- Math Symbols -- Mattematiksymboler -- -- -- Dashes and Slashes -- Streck och snedstreck -- -- -- Excluded characters -- Undantagna tecken -- -- -- Hex Passwords -- Hexadecimala lösenord -- -- -- Password length -- Lösenordslängd -- -- -- Word Case: -- Skiftläge: -- -- -- Regenerate password -- Generera om lösenordet -- -- -- Copy password -- Kopiera lösenordet -- -- -- lower case -- gemener -- -- -- UPPER CASE -- VERSALER -- -- -- Title Case -- Titelns skiftläge -- -- -- Generate Password -- Generera lösenord -- -- -- Also choose from: -- Välj också från: -- -- -- Additional characters to use for the generated password -- Fler tecken att användas för lösenordsgenerering -- -- -- Additional characters -- Fler tecken -- -- -- Word Count: -- Antal ord: -- -- -- Esc -- Esc -- -- -- Apply Password -- Tillämpa lösenordet -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Generera om lösenordet (%1) -- -- -- Special Characters -- Specialtecken -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Statistik -- -- -- Very weak password -- Mycket svagt lösenord -- -- -- Password entropy is %1 bits -- Lösenordsentropin är %1 bitar -- -- -- Weak password -- Svagt lösenord -- -- -- Used in %1/%2 -- Använt i %1/%2 -- -- -- Password is used %1 times -- Lösenordet används %1 gånger -- -- -- Password has expired -- Lösenordet har upphört att gälla -- -- -- Password expiry was %1 -- Lösenordet upphörde att gälla %1 -- -- -- Password is about to expire -- Lösenordet upphör snart att gälla -- -- -- Password expires in %1 days -- Lösenordet upphör att gälla om %1 dagar -- -- -- Password will expire soon -- Lösenordet upphör snart att gälla -- -- -- Password expires on %1 -- Lösenordet upphör att gälla %1 -- -- -- Health Check -- Hälsokontroll -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Skriv över -- -- -- Delete -- Ta bort -- -- -- Move -- Flytta -- -- -- Empty -- Töm -- -- -- Remove -- Ta bort -- -- -- Skip -- Hoppa över -- -- -- Disable -- Inaktivera -- -- -- Merge -- Sammanfoga -- -- -- Continue -- Fortsätt -- -- -- -- QObject -- -- Database not opened -- Databasen är inte öppen -- -- -- Database hash not available -- Databas-hash inte tillgänglig -- -- -- Client public key not received -- Klientens offentliga nyckel inte mottagen -- -- -- Cannot decrypt message -- Kan inte avkryptera meddelande -- -- -- Action cancelled or denied -- Åtgärden avbröts eller avisades -- -- -- KeePassXC association failed, try again -- KeePassXC-association misslyckades, försök igen! -- -- -- Encryption key is not recognized -- Krypteringsnyckeln känns inte igen -- -- -- Incorrect action -- Felaktig åtgärd -- -- -- Empty message received -- Tomt meddelande mottaget -- -- -- No URL provided -- Ingen URL angiven -- -- -- No logins found -- Inga inloggningar hittades -- -- -- Unknown error -- Okänt fel -- -- -- Add a new entry to a database. -- Lägga till en ny post i en databas. -- -- -- Path of the database. -- Sökväg till databasen. -- -- -- Key file of the database. -- Nyckelfilen för databasen. -- -- -- path -- sökväg -- -- -- Username for the entry. -- Användarnamn för posten. -- -- -- username -- användarnamn -- -- -- URL for the entry. -- URL för posten. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Fråga efter postens lösenord. -- -- -- Generate a password for the entry. -- Generera ett lösenord för posten. -- -- -- length -- längd -- -- -- Path of the entry to add. -- Sökväg till den tillagda posten. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Sökväg att kopiera. -- -- -- Timeout in seconds before clearing the clipboard. -- Tidsgräns i sekunder innan urklipp rensas. -- -- -- Edit an entry. -- Redigera en post. -- -- -- Title for the entry. -- Titel för posten. -- -- -- title -- titel -- -- -- Path of the entry to edit. -- Sökväg till posten att redigera. -- -- -- Estimate the entropy of a password. -- Uppskatta ett lösenords entropi. -- -- -- Password for which to estimate the entropy. -- Lösenord som entropin skall uppskattas för. -- -- -- Perform advanced analysis on the password. -- Utföra avancerad analys av lösenordet. -- -- -- -- --Available commands: -- -- -- --Tillgängliga kommandon: -- -- -- -- Name of the command to execute. -- Namn på kommandot som skall köras. -- -- -- List database entries. -- Lista databasposter. -- -- -- Path of the group to list. Default is / -- Sökväg till gruppen som skall listas. Standard är / -- -- -- Find entries quickly. -- Hitta poster snabbt. -- -- -- Search term. -- Sökterm. -- -- -- Merge two databases. -- Sammanfoga två databaser. -- -- -- Path of the database to merge from. -- Sökväg till databas att infoga från. -- -- -- Use the same credentials for both database files. -- Använd samma autentiseringsuppgifter för bägge databasfilerna. -- -- -- Key file of the database to merge from. -- Nyckelfil för databas att infoga från. -- -- -- Show an entry's information. -- Visa en information för en post. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Attributnamn att visa. Detta alternativ kan specificeras fler än en gång, med varje attribut visat, ett per rad i given ordning. Om inga attribut specificeras, kommer en summering av standardattributen att ges. -- -- -- attribute -- attribut -- -- -- Name of the entry to show. -- Visningsnamn för posten. -- -- -- NULL device -- NULL-enhet -- -- -- error reading from device -- fel vid läsning från enhet -- -- -- malformed string -- felaktigt uppbyggd sträng -- -- -- missing closing quote -- saknar avslutande citationstecken -- -- -- Group -- Grupp -- -- -- Title -- Titel -- -- -- Username -- Användarnamn -- -- -- Password -- Lösenord -- -- -- Notes -- Anteckningar -- -- -- Last Modified -- Ändrad -- -- -- Created -- Skapad -- -- -- Browser Integration -- Webbläsarintegration -- -- -- SSH Agent -- SSH-tjänst -- -- -- Generate a new random diceware passphrase. -- Generera en ny slumpmässig lösenordsfras. -- -- -- Word count for the diceware passphrase. -- Antal ord för lösenordsfrasen. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Ordlista för lösenordgeneratorn. --[Standard: EFF English] -- -- -- Generate a new random password. -- Skapa ett nytt slumpmässigt lösenord. -- -- -- Could not create entry with path %1. -- Kunde inte skapa post med sökvägen %1. -- -- -- Enter password for new entry: -- Ange lösenord för ny post: -- -- -- Writing the database failed %1. -- Kunde inte skriva databas %1. -- -- -- Successfully added entry %1. -- Posten %1 tillagd. -- -- -- Invalid timeout value %1. -- Ogiltig tidsgräns %1. -- -- -- Entry %1 not found. -- Posten %1 hittades inte. -- -- -- Entry with path %1 has no TOTP set up. -- Posten med sökväg %1 har ingen TOTP konfigurerad. -- -- -- Clearing the clipboard in %1 second(s)... -- Rensar urklipp om %1 sekund...Rensar urklipp om %1 sekunder... -- -- -- Clipboard cleared! -- Urklipp rensat! -- -- -- Silence password prompt and other secondary outputs. -- Fråga inte efter lösenord och andra sekundära utdata. -- -- -- count -- CLI parameter -- antal -- -- -- Could not find entry with path %1. -- Kunde inte hitta post på sökvägen %1. -- -- -- Not changing any field for entry %1. -- Ändrar inga fält för posten %1. -- -- -- Enter new password for entry: -- Ange nytt lösenord för posten: -- -- -- Writing the database failed: %1 -- Kunde inte skriva databas: %1 -- -- -- Successfully edited entry %1. -- Redigerade posten %1. -- -- -- Length %1 -- Längd %1 -- -- -- Entropy %1 -- Entropi %1 -- -- -- Log10 %1 -- Logg10 %1 -- -- -- Multi-word extra bits %1 -- Extra bitar för flerord %1 -- -- -- Type: Bruteforce -- Typ: Bruteforce -- -- -- Type: Dictionary -- Typ: Ordbok -- -- -- Type: Dict+Leet -- Typ: Ordbok+Leet -- -- -- Type: User Words -- Typ: Användarord -- -- -- Type: User+Leet -- Typ: Användare+Leet -- -- -- Type: Repeated -- Typ: Repeterad -- -- -- Type: Sequence -- Typ: Sekvens -- -- -- Type: Spatial -- Typ: Spatial -- -- -- Type: Date -- Typ: Datum -- -- -- Type: Bruteforce(Rep) -- Typ: Bruteforce (Rep) -- -- -- Type: Dictionary(Rep) -- Typ: Ordbok (Rep) -- -- -- Type: Dict+Leet(Rep) -- Typ: Ordbok+Leet (Rep) -- -- -- Type: User Words(Rep) -- Typ: Användarord (Rep) -- -- -- Type: User+Leet(Rep) -- Typ: Användare+Leet (Rep) -- -- -- Type: Repeated(Rep) -- Typ: Repeterad (Rep) -- -- -- Type: Sequence(Rep) -- Typ: Sekvens (Rep) -- -- -- Type: Spatial(Rep) -- Typ: Spatial (Rep) -- -- -- Type: Date(Rep) -- Typ: Datum (Rep) -- -- -- Type: Unknown%1 -- Typ: Okänd %1 -- -- -- Entropy %1 (%2) -- Entropi %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Lösenordslängd (%1) != sammanlagd längd av delar (%2) *** -- -- -- Failed to load key file %1: %2 -- Kunde inte läsa in nyckelfil %1: %2 -- -- -- Length of the generated password -- Längd på det genererade lösenordet -- -- -- Use lowercase characters -- Använd gemener -- -- -- Use uppercase characters -- Amvänd VERSALER -- -- -- Use special characters -- Använd specialtecken -- -- -- Use extended ASCII -- Använd utökad ASCII -- -- -- Exclude character set -- Undanta teckenupsättning -- -- -- chars -- tecken -- -- -- Exclude similar looking characters -- Undanta tecken som liknar varandra -- -- -- Include characters from every selected group -- Ta med tecken från samtliga valda grupper -- -- -- Recursively list the elements of the group. -- Lista elementen i gruppen rekursivt. -- -- -- Cannot find group %1. -- Kan inte hitta gruppen %1. -- -- -- Error reading merge file: --%1 -- Fel vid läsning av sammanslagningsfil: --%1 -- -- -- Unable to save database to file : %1 -- Kan inte spara databas till fil: %1 -- -- -- Unable to save database to file: %1 -- Kan inte spara databas till fil: %1 -- -- -- Successfully recycled entry %1. -- Återvinning av posten %1 slutförd. -- -- -- Successfully deleted entry %1. -- Tog bort posten %1. -- -- -- Show the entry's current TOTP. -- Visa postens aktuella TOTP. -- -- -- ERROR: unknown attribute %1. -- FEL: Okänt attribut %1. -- -- -- No program defined for clipboard manipulation -- Inget program definierat för urklippsmanipulation -- -- -- file empty -- filen är tom -- -- -- %1: (row, col) %2,%3 -- %1: (rad, kolumn) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Ogiltiga inställningar -- -- -- Invalid Key -- TOTP -- Ogiltig nyckel -- -- -- Message encryption failed. -- Meddelandekryptering misslyckaes. -- -- -- No groups found -- Inga grupper hittades -- -- -- Create a new database. -- Skapa en ny databas. -- -- -- File %1 already exists. -- Filen %1 finns redan. -- -- -- Loading the key file failed -- Kunde inte läsa in nyckelfilen -- -- -- No key is set. Aborting database creation. -- Ingen nyckel angiven. Avbryter skapande av databas. -- -- -- Failed to save the database: %1. -- Kunde inte spara databasen: %1. -- -- -- Successfully created new database. -- Ny databas skapad. -- -- -- Creating KeyFile %1 failed: %2 -- Kunde inte skapa nyckelfilen %1: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Kunde inte läsa in nyckelfilen %1: %2 -- -- -- Path of the entry to remove. -- Sökväg till posten som tas bort. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Låsfilen för befintlig enkelinstans är ogiltig. Startar en ny instans. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Låsfilen kunde inte skapas. Enkelinstansläge inaktiverat. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - Plattformsoberoende lösenordshanterare -- -- -- filenames of the password databases to open (*.kdbx) -- filnamn på lösenordsdatabaser att öppna (*.kdbx) -- -- -- path to a custom config file -- Sökväg till en anpassad konfigurationsfil -- -- -- key file of the database -- nyckelfil för databasen -- -- -- read password of the database from stdin -- hämta databaslösenordet från stdin -- -- -- Another instance of KeePassXC is already running. -- En annan instans av KeePassXC körs redan. -- -- -- Fatal error while testing the cryptographic functions. -- Allvarligt fel vid test av kryptografiska funktioner. -- -- -- KeePassXC - Error -- KeePassXC - Fel -- -- -- Database password: -- Databaslösenord: -- -- -- Cannot create new group -- Kan inte skapa ny grupp -- -- -- Deactivate password key for the database. -- Inaktivera lösenordsnyckeln för databasen. -- -- -- Displays debugging information. -- Visa felsökningsinformation. -- -- -- Deactivate password key for the database to merge from. -- Avaktivera lösenordsnyckel för databas som infogas ifrån. -- -- -- Version %1 -- Version %1 -- -- -- Build Type: %1 -- Kompileringstyp: %1 -- -- -- Revision: %1 -- Revision: %1 -- -- -- Distribution: %1 -- Distribution: %1 -- -- -- Debugging mode is disabled. -- Felsökningsläget är inaktiverat. -- -- -- Debugging mode is enabled. -- Felsökningsläget är aktiverat. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Operativsystem: %1 --Processorarkitektur: %2 --Kärna: %3 %4 -- -- -- Auto-Type -- Autoskriv -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (signerad och osignerad delning) -- -- -- KeeShare (only signed sharing) -- KeeShare (endast signerad delning) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (endast osignerad delning) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Ingen -- -- -- Enabled extensions: -- Aktiverade tillägg: -- -- -- Cryptographic libraries: -- Kryptografiska bibliotek: -- -- -- Cannot generate a password and prompt at the same time! -- Kan inte generera lösenord och fråga på samma gång! -- -- -- Adds a new group to a database. -- Lägger till en ny grupp i en databas. -- -- -- Path of the group to add. -- Sökväg till gruppen som läggs till. -- -- -- Group %1 already exists! -- Gruppen %1 finns redan! -- -- -- Group %1 not found. -- Gruppen %1 hittades inte. -- -- -- Successfully added group %1. -- Lade till gruppen %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Kontrollera om om några lösenord har läckt ut offentligt. FILNAMN måste vara sökvägen till en SHA-1-hashad fillista med läckta lösenord i HIBP-format, såsom tillgänglig från https://haveibeenpwned.com/Passwords. -- -- -- FILENAME -- FILNAMN -- -- -- Analyze passwords for weaknesses and problems. -- Analysera lösenord efter svagheter och problem. -- -- -- Failed to open HIBP file %1: %2 -- Kunde inte öppna HIBP-filen %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Utvärderar databasposter mot HIBP-fil. Detta kommer att ta en stund... -- -- -- Close the currently opened database. -- Stäng den öppna databasen. -- -- -- Display this help. -- Visa den här hjälpen. -- -- -- slot -- anslutningsplats -- -- -- Invalid word count %1 -- Ogiltigt antal ord %1 -- -- -- The word list is too small (< 1000 items) -- Ordlistan är för liten (<1000 objekt) -- -- -- Exit interactive mode. -- Avsluta interaktivt läge. -- -- -- Exports the content of a database to standard output in the specified format. -- Exporterar innehållet i en databas till standardutdata i angivet format. -- -- -- Unable to export database to XML: %1 -- Kan inte exportera databas till XML: %1 -- -- -- Unsupported format %1 -- Formatet stöd inte, %1 -- -- -- Use numbers -- Använd siffror -- -- -- Invalid password length %1 -- Ogiltig lösenordslängd %1 -- -- -- Display command help. -- Visa kommandohjälp. -- -- -- Available commands: -- Tillgängliga kommandon: -- -- -- Import the contents of an XML database. -- Importera innehållet från en XML-databas. -- -- -- Path of the XML database export. -- Målsökväg för XML-databasexport. -- -- -- Path of the new database. -- Sökväg till den nya databasen. -- -- -- Successfully imported database. -- Databas importera. -- -- -- Unknown command %1 -- Okänt kommando %1 -- -- -- Flattens the output to single lines. -- Slätar ut utdata till enkelrader. -- -- -- Only print the changes detected by the merge operation. -- Skriv bara ut de ändringar som upptäckts av sammanfogningsoperationen. -- -- -- Yubikey slot for the second database. -- Yubikey-plats för den andra databasen. -- -- -- Successfully merged %1 into %2. -- Infogade %1 i %2. -- -- -- Database was not modified by merge operation. -- Databasen ändrades inte av sammanslagningen. -- -- -- Moves an entry to a new group. -- Flyttar en post till ny grupp. -- -- -- Path of the entry to move. -- Sökväg till posten som skall flyttas. -- -- -- Path of the destination group. -- Sökväg till målgruppen. -- -- -- Could not find group with path %1. -- Kunde inte hitta någon grupp med sökväg %1. -- -- -- Entry is already in group %1. -- Posten finns redan i gruppen %1. -- -- -- Successfully moved entry %1 to group %2. -- Flyttade posten %1 till gruppen %2. -- -- -- Open a database. -- Öppna en databas. -- -- -- Path of the group to remove. -- Sökväg till gruppen som skall tas bort. -- -- -- Cannot remove root group from database. -- Kan inte ta bort root-gruppen från databasen. -- -- -- Successfully recycled group %1. -- Gruppen %1 har återvunnits. -- -- -- Successfully deleted group %1. -- Gruppen %1 har tagits bort. -- -- -- Failed to open database file %1: not found -- Kunde inte öppna databasfilen %1: Hittades inte -- -- -- Failed to open database file %1: not a plain file -- Kunde inte öppna databasfilen %1: Ingen vanlig fil -- -- -- Failed to open database file %1: not readable -- Kunde inte öppna databasfilen %1: Inte läsbar -- -- -- Enter password to unlock %1: -- Ange lösenord för att låsa upp %1: -- -- -- Invalid YubiKey slot %1 -- Ogiltig YubiKey-plats %1 -- -- -- Enter password to encrypt database (optional): -- Ange lösenord för att avkryptera databasen (valfritt): -- -- -- HIBP file, line %1: parse error -- HIBP-fil, rad %1: tolkningsfel -- -- -- Secret Service Integration -- Secret Service-integration -- -- -- User name -- Användarnamn -- -- -- Password for '%1' has been leaked %2 time(s)! -- Lösenordet för "%1" har läckts %2 gång!Lösenordet för "%1" har läckts %2 gånger! -- -- -- Invalid password generator after applying all options -- Ogiltig lösenordsgenerator efter tillämpning av alla alternativ -- -- -- Show the protected attributes in clear text. -- Visa de skyddade attributen i klartext. -- -- -- Browser Plugin Failure -- Webbläsartillägget misslyckades -- -- -- Could not save the native messaging script file for %1. -- Kunde inte spara den inbyggda meddelandeskriptfilen för %1. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Kopiera det angivna attributet till urklipp. Standardvärdet är "password" om inget annat anges. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Kopiera aktuell TOTP till urklipp (motsvarar "-a totp"). -- -- -- Copy an entry's attribute to the clipboard. -- Kopiera en posts attribut till urklipp. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- FEL: Ange antingen --attribute eller --totp, inte bägge. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- FEL: attributet %1 är tvetydigt, det matchar %2. -- -- -- Attribute "%1" not found. -- Kunde inte hitta attributet "%1". -- -- -- Entry's "%1" attribute copied to the clipboard! -- Attributet "%1" kopierat till urklipp! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey-plats och valfritt serienummer som används för att komma åt databasen (t.ex. 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- Målets avkrypteringstid i ms för databasen. -- -- -- time -- tid -- -- -- Set the key file for the database. -- Ange nyckelfil för databasen. -- -- -- Set a password for the database. -- Ange lösenord för databasen. -- -- -- Invalid decryption time %1. -- Ogiltig avkrypteringstid %1. -- -- -- Target decryption time must be between %1 and %2. -- Målets avkrypteringstid måste vara mellan %1 och %2. -- -- -- Failed to set database password. -- Kunde inte ange databaslösenord. -- -- -- Benchmarking key derivation function for %1ms delay. -- Benchmarking nyckelhärledningsfunktion för %1ms fördröjning. -- -- -- Setting %1 rounds for key derivation function. -- Anger %1 rundor för nyckelhärledningsfunktionen. -- -- -- error while setting database key derivation settings. -- fel vid inställning av databasens nyckel härledning. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Format att använda vid export. Tillgängliga alternativ är "xml" eller "csv". Standardvärdet är "xml". -- -- -- Unable to import XML database: %1 -- Kunde inte importera XML-databas: %1 -- -- -- Show a database's information. -- Visa en databas information. -- -- -- UUID: -- UUID: -- -- -- Name: -- Namn: -- -- -- Description: -- Beskrivning: -- -- -- Cipher: -- Chiffer: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- Papperskorgen är aktiverad. -- -- -- Recycle bin is not enabled. -- Papperskorgen är inte aktiverad. -- -- -- Invalid command %1. -- Ogiltigt kommando %1. -- -- -- Invalid YubiKey serial %1 -- Ogiltigt YubiKey serienummer %1 -- -- -- Please touch the button on your YubiKey to continue… -- Tryck på knappen på din YubiKey för att fortsätta... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Vill du skapa en databas med ett tomt lösenord? [y/N]: -- -- -- Repeat password: -- Upprepa lösenordet: -- -- -- Error: Passwords do not match. -- Fel: Lösenorden stämmer inte. -- -- -- All clipping programs failed. Tried %1 -- -- Alla klippprogram misslyckades. Försökte med %1 -- -- -- -- AES (%1 rounds) -- AES (%1 rundor) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20 256-bit -- -- -- Benchmark %1 delay -- Benchmark %1 fördröjning -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Ikon -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Internt zlib-fel vid komprimering: -- -- -- Error writing to underlying device: -- Kunde inte skriva till underliggande enhet: -- -- -- Error opening underlying device: -- Kunde inte öppna underliggande enhet: -- -- -- Error reading data from underlying device: -- Kunde inte läsa data från underliggande enhet: -- -- -- Internal zlib error when decompressing: -- Internt zlib-fel vid extrahering: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Gzip-formatet stöds inte i denna version av zlib. -- -- -- Internal zlib error: -- Internt zlib-fel: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Visa också poster som har undantagits från rapporter -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Håll muspekaren över anledning, för att visa fler detaljer. Dubbelklicka på posten för att redigera. -- -- -- Bad -- Password quality -- Usel -- -- -- Bad — password must be changed -- Usel — Lösenordet måste ändras -- -- -- Poor -- Password quality -- Dålig -- -- -- Poor — password should be changed -- Dålig — Lösenordet måste ändras -- -- -- Weak -- Password quality -- Svag -- -- -- Weak — consider changing the password -- Svag — Överväg att ändra lösenordet -- -- -- (Excluded) -- (Undantagen) -- -- -- This entry is being excluded from reports -- Denna post undantas från rapporter -- -- -- Please wait, health data is being calculated... -- Vänta, hälsodata beräknas... -- -- -- Congratulations, everything is healthy! -- Grattis! Allt är friskt! -- -- -- Title -- Titel -- -- -- Path -- Sökväg -- -- -- Score -- Poäng -- -- -- Reason -- Anledning -- -- -- Edit Entry... -- Redigera post... -- -- -- Exclude from reports -- Undanta från rapporter -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- VARNING! Denna rapport kräver att du skickar information till onlinetjänsten Have I Been Pwned (https://haveibeenpwned.com). Om du fortsätter kommer dina databaslösenord att hashas kryptografiskt och de första fem tecknen i dessa hashar kommer att skickas säkert till den här tjänsten. Databasen förblir säker och kan inte rekonstitueras från denna information. Antalet lösenord som du skickar och din IP-adress kommer dock att exponeras för den här tjänsten. -- -- -- Perform Online Analysis -- Utför online-analys -- -- -- Also show entries that have been excluded from reports -- Visa även poster som har uteslutits från rapporter -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Denna version av KeePassXC har inga nätverksfunktioner. Nätverk krävs för att kontrollera dina lösenord mot Have I Been Pwned-databaser. -- -- -- Congratulations, no exposed passwords! -- Grattis, inga exponerade lösenord! -- -- -- Title -- Titel -- -- -- Path -- Sökväg -- -- -- Password exposed… -- Lösenord exponerat... -- -- -- (Excluded) -- (Undantaget) -- -- -- This entry is being excluded from reports -- Denna post har undantagits från rapporter -- -- -- once -- en gång -- -- -- up to 10 times -- upp till 10 gånger -- -- -- up to 100 times -- upp till 100 gånger -- -- -- up to 1000 times -- upp till 1000 gånger -- -- -- up to 10,000 times -- upp till 10000 gånger -- -- -- up to 100,000 times -- upp till 100000 gånger -- -- -- up to a million times -- upp till en miljon gånger -- -- -- millions of times -- milljoner gånger -- -- -- Edit Entry... -- Redigera posten... -- -- -- Exclude from reports -- Undanta från rapporter -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Håll muspekaren över rader med felikoner för mer information. -- -- -- Name -- Namn -- -- -- Value -- Värde -- -- -- Please wait, database statistics are being calculated... -- Vänta, databasstatistiken håller på att beräknas... -- -- -- Database name -- Databasnamn -- -- -- Description -- Beskrivning -- -- -- Location -- Plats -- -- -- Last saved -- Senast sparad -- -- -- Unsaved changes -- Osparade ändringar -- -- -- yes -- Ja -- -- -- no -- Nej -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Databasen har ändrats, men ändringarna har ännu inte sparats till disk. -- -- -- Number of groups -- Antal grupper -- -- -- Number of entries -- Antal poster -- -- -- Number of expired entries -- Antal förfallna poster -- -- -- The database contains entries that have expired. -- Databasen innehåller poster som har förfallit. -- -- -- Unique passwords -- Unika lösenord -- -- -- Non-unique passwords -- Icke unika lösenord -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Mer än 10% av lösenorden är återanvända. Försök använda unika lösenord om möjligt. -- -- -- Maximum password reuse -- Max antal återanvända lösenord -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Vissa lösenord är använda mer än tre gånger. Använd unika lösenord om möjligt. -- -- -- Number of short passwords -- Antal korta lösenord -- -- -- Recommended minimum password length is at least 8 characters. -- Rekommenderad minimilängd på lösenord är minst 8 tecken. -- -- -- Number of weak passwords -- Antal svaga lösenord -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Långa slumpartade lösenord med betyget "Bra" eller "Utmärkt" rekommenderas. -- -- -- Entries excluded from reports -- Poster undantagna från rapporter -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Att utesluta poster från rapporter, t.ex. för att de har ett svagt lösenord, är inte nödvändigtvis ett problem, men du bör hålla ett öga på dem. -- -- -- Average password length -- Genomsnittlig lösenordslängd -- -- -- %1 characters -- %1 tecken -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Genomsnittlig lösenordslängd är mindre än 10 tecken. Längre lösenord är säkrare. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Anslutning till tjänsten misslyckades. -- -- -- Agent protocol error. -- Fel i tjänstprotokollet. -- -- -- No agent running, cannot add identity. -- Ingen tjänst körs. Kan inte lägga till identitet. -- -- -- No agent running, cannot remove identity. -- Ingen tjänst körs. Kan inte ta bort identitet. -- -- -- Agent refused this identity. Possible reasons include: -- Tjänsten avvisade denna identitet. Möjliga orsaker inkluderar: -- -- -- The key has already been added. -- Nyckeln har redan lagts till. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Begränsad livstid stöds inte av tjänsten (kontrollera alternativen). -- -- -- A confirmation request is not supported by the agent (check options). -- Bekräftelsebegäran stöds inte av tjänsten (kontrollera alternativen). -- -- -- Key identity ownership conflict. Refusing to add. -- Nyckelidentitets ägarskapskonflikt. Nekar att lägga till. -- -- -- No agent running, cannot list identities. -- Tjänsten körs inte, kan inte lista identiteter. -- -- -- -- SearchHelpWidget -- -- Search Help -- Sökhjälp -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Söktermer är följande: [modifierare][fält:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- Varje sökterm måste matcha (ex. logisk OCH) -- -- -- Modifiers -- Modifierare -- -- -- exclude term from results -- Undanta termen från resultat -- -- -- match term exactly -- Matcha termen exakt -- -- -- use regex in term -- Använd RegEx i termen -- -- -- Fields -- Fält -- -- -- Term Wildcards -- Jokertecken -- -- -- match anything -- Matcha allt -- -- -- match one -- Matcha en -- -- -- logical OR -- Logisk ELLER -- -- -- Examples -- Exempel -- -- -- -- SearchWidget -- -- Search -- Sök -- -- -- Limit search to selected group -- Begränsa sökningen till vald grupp -- -- -- Search Help -- Sökhjälp -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Sök (%1)... -- -- -- Case sensitive -- Skiftlägeskänslig -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Alternativ -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Aktivera KeePassXC Secret Service-integration från Freedesktop.org -- -- -- General -- Allmänt -- -- -- Show notification when credentials are requested -- Visa avisering när autentiseringsuppgifter begärs -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Om papperskorgen är aktiverad för databasen, kommer posterna att flyttas direkt till papperskorgen. Annars kommer de att tas bort utan bekräftelse.</p><p>Du kommer fortfarande att tillfrågas om några poster refereras av andra.</p></body></html> -- -- -- Exposed database groups: -- Exponerade databasgrupper: -- -- -- Authorization -- Auktorisation -- -- -- These applications are currently connected: -- Dessa program är för närvarande anslutna: -- -- -- Don't confirm when entries are deleted by clients -- Bekräfta inte när poster tas bort av klienter -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Fel:</b> Kunde inte ansluta till DBus. Kontrollera din DBus-installation. -- -- -- <b>Warning:</b> -- <b>Varning!</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Spara aktuella ändringar för att aktivera insticksmodulen och aktivera redigering av det här avsnittet. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktiv -- -- -- Allow export -- Tillåt export -- -- -- Allow import -- Tillåt import -- -- -- Own certificate -- Eget certifikat -- -- -- Fingerprint: -- Fingeravtryck: -- -- -- Certificate: -- Certifikat: -- -- -- Signer -- Undertecknare -- -- -- Key: -- Nyckel: -- -- -- Generate -- Generera -- -- -- Import -- Importera -- -- -- Export -- Exportera -- -- -- Imported certificates -- Importerade certifikat -- -- -- Trust -- Betrodd -- -- -- Ask -- Fråga -- -- -- Untrust -- Ej betrodd -- -- -- Remove -- Ta bort -- -- -- Path -- Sökväg -- -- -- Status -- Status -- -- -- Fingerprint -- Fingeravtryck -- -- -- Certificate -- Certifikat -- -- -- Trusted -- Betrodd -- -- -- Untrusted -- Ej betrodd -- -- -- Unknown -- Okänd -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare nyckelfil -- -- -- All files -- Alla filer -- -- -- Select path -- Välj sökväg -- -- -- Exporting changed certificate -- Exporterar ändrat certifikat -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Det exporterade certifikatet är inte detsamma som det som används. Vill du exportera det aktuella certifikatet? -- -- -- Signer: -- Undertecknare: -- -- -- Allow KeeShare imports -- Tillåt KeeShare-import -- -- -- Allow KeeShare exports -- Tillåt KeeShare-export -- -- -- Only show warnings and errors -- Visa bara varningar och fel -- -- -- Key -- Nyckel -- -- -- Signer name field -- Undertecknarens namn -- -- -- Generate new certificate -- Generera nytt certifikat -- -- -- Import existing certificate -- Importera befintligt certifikat -- -- -- Export own certificate -- Exportera eget certifikat -- -- -- Known shares -- Kända delningar -- -- -- Trust selected certificate -- Lita på markerat certifikat -- -- -- Ask whether to trust the selected certificate every time -- Fråga om markerat certifikat alltid skall betraktas som pålitligt varje gång -- -- -- Untrust selected certificate -- Lita inte på markerat certifikat -- -- -- Remove selected certificate -- Ta bort markerat certifikat -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Det saknas stöd för att skriva över signerad delningsbehållare. - Export förhindrad. -- -- -- Could not write export container (%1) -- Kunde inte skriva exportbehållare (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Kunde inte bädda in signatur: Kunde inte öppna filen för skrivning (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Kunde inte bädda in signatur: Kunde inte skriva filen (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Kunde inte bädda in databas: Kunde inte öppna filen för skrivning (%1) -- -- -- Could not embed database: Could not write file (%1) -- Kunde inte bädda in databa: Kunde inte skriva filen (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Det saknas stöd för att skriva över osignerad delningsbehållare. - Export förhindrad. -- -- -- Could not write export container -- Kunde inte skriva exportbehållare -- -- -- Unexpected export error occurred -- Ett oväntat exportfel inträffade -- -- -- -- ShareImport -- -- Import from container without signature -- Importera från behållare utan signatur -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Vi kan inte verifiera källan för den delade behållaren, eftersom den inte är signerad. Vill du verkligen importera från %1? -- -- -- Import from container with certificate -- Importera från behållare med certifikat -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Vill du lita på %1, med fingeravtryck för %2, från %3? -- -- -- Not this time -- Inte den här gången -- -- -- Never -- Aldrig -- -- -- Always -- Alltid -- -- -- Just this time -- Endast den här gången -- -- -- Signed share container are not supported - import prevented -- Signerad delningsbehållare stöds inte. - Import förhindrad. -- -- -- File is not readable -- Filen kan inte läsas -- -- -- Invalid sharing container -- Ogiltig delningsbehållare -- -- -- Untrusted import prevented -- Ej betrodd import förhindrad -- -- -- Successful signed import -- Signerad import slutförd -- -- -- Unsigned share container are not supported - import prevented -- Osignerad delningsbehållare stöds inte. - Import förhindrad. -- -- -- Successful unsigned import -- Osignerad import slutförd -- -- -- File does not exist -- Filen finns inte -- -- -- Unknown share container type -- Okänd typ av delningsbehållare -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Import från %1 misslyckades (%2) -- -- -- Import from %1 successful (%2) -- Import från %1 slutförd (%2) -- -- -- Imported from %1 -- Importerad ifrån %1 -- -- -- Export to %1 failed (%2) -- Export till %1 misslyckades (%2) -- -- -- Export to %1 successful (%2) -- Export till %1 slutförd (%2) -- -- -- Export to %1 -- Exportera till %1 -- -- -- Multiple import source path to %1 in %2 -- Sökväg till flerfaldig importkälla för %1 i %2 -- -- -- Conflicting export target path %1 in %2 -- Motstridiga sökvägar för exportmål %1 i %2 -- -- -- -- TotpDialog -- -- Timed Password -- Tidsbegränsat lösenord -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopiera -- -- -- Expires in <b>%n</b> second(s) -- Upphör att gälla om <b>%n</b> sekundUpphör att gälla om <b>%n</b> sekunder -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopiera -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- OBS! Dessa TOTP-inställningar är anpassade och kanske inte fungerar med andra autentiserare. -- -- -- There was an error creating the QR code. -- Det uppstod ett fel när QR-koden skapades. -- -- -- Closing in %1 seconds. -- Stänger om %1 sekunder. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Konfigurera TOTP -- -- -- Default RFC 6238 token settings -- Standard RFC 6238 token-inställningar -- -- -- Steam token settings -- Steam token-inställningar -- -- -- Use custom settings -- Använd anpassade inställningar -- -- -- Custom Settings -- Anpassade inställningar -- -- -- Time step: -- Tidsteg: -- -- -- sec -- Seconds -- sek -- -- -- Code size: -- Kodstorlek: -- -- -- Secret Key: -- Hemlig nyckel: -- -- -- Secret key must be in Base32 format -- En hemlig nyckel måste vara i Base32-format -- -- -- Secret key field -- Hemlig nyckel -- -- -- Algorithm: -- Algoritm: -- -- -- Time step field -- Tidssteg -- -- -- digits -- siffror -- -- -- Invalid TOTP Secret -- Ogiltig TOTP-hemlighet -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Du har angivit en ogiltig hemlig nyckel. Nyckeln måste vara i Base32-format. --Exempel: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Bekräfta borttagning av TOTP-inställningar -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Vill du verkligen ta bort TOTP-inställningarna för den här posten? -- -- -- -- URLEdit -- -- Invalid URL -- Ogiltig URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Söker efter uppdateringar -- -- -- Checking for updates... -- Söker efter uppdateringar... -- -- -- Close -- Stäng -- -- -- Update Error! -- Uppdateringsfel! -- -- -- An error occurred in retrieving update information. -- Ett fel inträffade vid inhämtning av uppdateringsinformation. -- -- -- Please try again later. -- Försök igen senare. -- -- -- Software Update -- Mjukvaruuppdatering -- -- -- A new version of KeePassXC is available! -- En ny version av KeePassXC finns tillgänglig! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 är nu tillgänglig — Du har %2. -- -- -- Download it at keepassxc.org -- Ladda ner den på keepassxc.org -- -- -- You're up-to-date! -- Du är uppdaterad! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 är för närvarande den nyaste tillgängliga versionen -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Börja spara dina lösenord säkert, i en KeePassXC-databas. -- -- -- Create new database -- Skapa ny databas -- -- -- Open existing database -- Öppna befintlig databas -- -- -- Import from KeePass 1 -- Importera från KeePass 1 -- -- -- Import from CSV -- Importera från CSV -- -- -- Recent databases -- Tidigare databaser -- -- -- Welcome to KeePassXC %1 -- Välkommen till KeePassXC %1 -- -- -- Import from 1Password -- Importera från 1Password -- -- -- Open a recent database -- Öppna en tidigare databas -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] Konfigurerad plats - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Challenge Response - Plats %3 - %4 -- -- -- Press -- Tryck -- -- -- Passive -- Passiv -- -- -- %1 Invalid slot specified - %2 -- %1 Ogiltig plats specificerad - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey-gränssnittet har inte startats. -- -- -- Hardware key is currently in use. -- Hårdvarunyckel används för närvarande. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- Kunde hitta hårdvarunyckel med serienummer %1. Anslut den för att fortsätta. -- -- -- Hardware key timed out waiting for user interaction. -- Hårdvarunyckelns tidsgräns för användarinteraktion överskreds. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Ett USB-fel uppstod vid åtkomst till maskinvarunyckeln: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Kunde inte slutföra en challenge-response, det specifika felet var: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Uppdatera -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Om du äger en <a href="https://www.yubico.com/">YubiKey</a>, kan du använda den för ytterligare säkerhet.</p><p>YubiKey kräver att en av dess platser programmeras som <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Uppdatera hårdvaru-tokens -- -- -- Hardware key slot selection -- Val av plats för hårdvarunyckel -- -- -- Could not find any hardware keys! -- Kunde inte hitta några hårdvarunycklar! -- -- -- Selected hardware key slot does not support challenge-response! -- Den valda maskinvarunyckelplatsen stöder inte challenge-response! -- -- -- Detecting hardware keys… -- Identifierar hårdvarunycklar... -- -- -- No hardware keys detected -- Inga hårdvarunycklar identifierade -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_th.ts keepassxc-2.6.4-patched/share/translations/keepassx_th.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_th.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_th.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7861 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- เกี่ยวกับ KeePassXC -- -- -- About -- เกี่ยวกับ -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- รายงานจุดบกพร่องที่ <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC เผยแพร่ภายใต้เงื่อนไขของสัญญาอนุญาตสาธารณะทั่วไปของกนู (GNU GPL) รุ่น 2 หรือรุ่น 3 (คุณสามารถเลือกได้) -- -- -- Contributors -- ผู้ร่วมสมทบ -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ดูรายชื่อผู้สมทบบน GitHub</a> -- -- -- Debug Info -- ข้อมูลการแก้จุดบกพร่อง -- -- -- Include the following information whenever you report a bug: -- ใส่ข้อมูลดังต่อไปนี้ทุกครั้งที่คุณรายงานจุดบกพร่องของซอฟต์แวร์ -- -- -- Copy to clipboard -- คัดลอกไปยังคลิปบอร์ด -- -- -- Project Maintainers: -- ผู้ดูแลโครงการ -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- ทีมงาน KeePassXC ขอขอบคุณ debfx สำหรับการสร้างตัวต้นฉบับของ KeePassX -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- ใช้ OpenSSH สำหรับ Windows แทน Pageant -- -- -- Enable SSH Agent integration -- -- -- -- SSH_AUTH_SOCK value -- -- -- -- SSH_AUTH_SOCK override -- -- -- -- (empty) -- (ว่าง) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- -- -- -- SSH Agent connection is working! -- -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- การตั้งค่าโปรแกรม -- -- -- General -- ทั่วไป -- -- -- Security -- ความปลอดภัย -- -- -- Access error for config file %1 -- มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 -- -- -- Icon only -- ไอคอนเท่านั้น -- -- -- Text only -- ข้อความเท่านั้น -- -- -- Text beside icon -- ข้อความข้างไอคอน -- -- -- Text under icon -- ข้อความข้างล่างไอคอน -- -- -- Follow style -- ปฏิบัติตามสไตล์ -- -- -- Reset Settings? -- ล้างการตั้งค่าหรือไม่? -- -- -- Are you sure you want to reset all general and security settings to default? -- -- -- -- Monochrome (light) -- สีเดียว (สว่าง) -- -- -- Monochrome (dark) -- สีเดียว (มืด) -- -- -- Colorful -- สีสดใส -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- การตั้งค่าพื้นฐาน -- -- -- Startup -- เริ่มต้น -- -- -- Start only a single instance of KeePassXC -- เริ่มต้นอินสแตนซ์เดี่ยวของ KeePassXC เท่านั้น -- -- -- Minimize window at application startup -- ย่อหน้าต่างลงเล็กสุดตอนเริ่มโปรแกรม -- -- -- File Management -- การจัดการไฟล์ -- -- -- Backup database file before saving -- สำรองไฟล์ฐานข้อมูลก่อนการบันทึก -- -- -- Automatically save after every change -- บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง -- -- -- Automatically reload the database when modified externally -- โหลดฐานข้อมูลใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงจากภายนอก -- -- -- Entry Management -- การจัดการรายการ -- -- -- Use group icon on entry creation -- ใช้ไอคอนกลุ่มบนการสร้างรายการ -- -- -- Minimize instead of app exit -- ย่อหน้าต่างแทนที่การปิดแอป -- -- -- Show a system tray icon -- แสดงไอคอนของซิสเต็มเทรย์ -- -- -- Hide window to system tray when minimized -- ซ่อนหน้าต่างในซิสเต็มเทรย์เมื่อถูกย่อ -- -- -- Auto-Type -- Auto-Type -- -- -- Use entry title to match windows for global Auto-Type -- ใช้หัวข้อของรายการในการจับคู่หน้าต่างกับ Auto-Type สากล -- -- -- Use entry URL to match windows for global Auto-Type -- ใช้ URL ของรายการในการจับคู่หน้าต่างกับ Auto-Type สากล -- -- -- Always ask before performing Auto-Type -- ถามก่อนเสมอเมื่อจะทำการ Auto-Type -- -- -- ms -- Milliseconds -- มิลลิวินาที -- -- -- Movable toolbar -- แถบเครื่องมือที่เคลื่อนย้ายได้ -- -- -- Remember previously used databases -- จำฐานข้อมูลที่ใช้ครั้งที่แล้ว -- -- -- Load previously open databases on startup -- เรียกใช้ฐานข้อมูลที่เปิดใช้ก่อนหน้าในตอนเริ่มโปรแกรม -- -- -- Remember database key files and security dongles -- จำแฟ้มกุญแจและดองเกิลความปลอดภัยที่ใช้กับฐานข้อมูล -- -- -- Check for updates at application startup once per week -- ตรวจสอบการปรับปรุงสัปดาห์ละครั้งขณะเปิดแอป -- -- -- Include beta releases when checking for updates -- ให้ตรวจสอบรุ่นทดสอบเบตาด้วย ขณะตรวจสอบการปรับปรุง -- -- -- Language: -- ภาษา: -- -- -- (restart program to activate) -- (เริ่มโปรแกรมใหม่เพื่อใช้งาน) -- -- -- Minimize window after unlocking database -- -- -- -- Minimize when opening a URL -- -- -- -- Hide window when copying to clipboard -- ซ่อนหน้าต่างขณะที่คัดลอกไปยังคลิปบอร์ด -- -- -- Minimize -- ย่อเล็ก -- -- -- Drop to background -- หลบไปอยู่ที่ฉากหลัง -- -- -- Favicon download timeout: -- ระยะหมดเวลาดาวน์โหลด favicon: -- -- -- Website icon download timeout in seconds -- จำนวนวินาทีที่จะพยายามดาวน์โหลดไอคอนของเว็บไซต์ -- -- -- sec -- Seconds -- วินาที -- -- -- Toolbar button style -- รูปแบบปุ่มบนแถบเครื่องมือ -- -- -- Language selection -- เลือกภาษา -- -- -- Global auto-type shortcut -- ปุ่มลัดพิมพ์อัตโนมัติในทุกโปรแกรม -- -- -- Auto-type character typing delay milliseconds -- หน่วงเวลาพิมพ์อัตโนมัติแต่ละตัวอักษร หน่วยเป็นมิลลิวินาที -- -- -- Auto-type start delay milliseconds -- หน่วงเวลาเริ่มพิมพ์อัตโนมัติ หน่วยเป็นมิลลิวินาที -- -- -- Automatically launch KeePassXC at system startup -- เรียกให้ KeePassXC โดยอัตโนมัติเมื่อเริ่มระบบ -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- -- User Interface -- ส่วนติดต่อผู้ใช้ -- -- -- Toolbar button style: -- -- -- -- Use monospaced font for notes -- -- -- -- Tray icon type: -- ชนิดไอคอนที่ถาด: -- -- -- Reset settings to default… -- -- -- -- Auto-Type typing delay: -- -- -- -- Global Auto-Type shortcut: -- -- -- -- Auto-Type start delay: -- -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- หมดเวลา -- -- -- Clear clipboard after -- ล้างคลิปบอร์ดหลัง -- -- -- sec -- Seconds -- วินาที -- -- -- Lock databases after inactivity of -- ล็อคฐานข้อมูลหลังไม่มีการใช้งาน -- -- -- min -- นาที -- -- -- Forget TouchID after inactivity of -- ไม่จำ TouchID หลังไม่มีการใช้งาน -- -- -- Convenience -- ความสะดวก -- -- -- Lock databases when session is locked or lid is closed -- ล็อคฐานข้อมูลเมื่อเซสชันถูกล็อคหรือฝาถูกปิด -- -- -- Forget TouchID when session is locked or lid is closed -- ไม่จำ TouchID เมื่อเซสชันถูกล็อคหรือฝาถูกปิด -- -- -- Lock databases after minimizing the window -- ล็อคฐานข้อมูลหลังย่อหน้าต่างลง -- -- -- Re-lock previously locked database after performing Auto-Type -- ล็อคฐานข้อมูลก่อนหน้าอีกครั้งหลังทำการ Auto-Type -- -- -- Hide passwords in the entry preview panel -- ซ่อนรหัสผ่านในแผงแสดงตัวอย่างรายการ -- -- -- Hide entry notes by default -- ซ่อนบันทึกรายการเป็นค่าตั้งต้น -- -- -- Privacy -- ความเป็นส่วนตัว -- -- -- Use DuckDuckGo service to download website icons -- ใช้บริการของ DuckDuckGo เพื่อดาวน์โหลดไอคอนของเว็บไซต์ -- -- -- Clipboard clear seconds -- ล้างคลิปบอร์ดภายใน หน่วยเป็นวินาที -- -- -- Touch ID inactivity reset -- -- -- -- Database lock timeout seconds -- -- -- -- min -- Minutes -- นาที -- -- -- Clear search query after -- ล้างคำค้นหลังจาก -- -- -- Require password repeat when it is visible -- -- -- -- Hide passwords when editing them -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- ไม่พบรายการที่ตรงกับหัวข้อเว็บไซต์ -- -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Auto-Type -- Auto-Type -- -- -- The Syntax of your Auto-Type statement is incorrect! -- ไวยากรณ์ของคำสั่ง Auto-Type ไม่ถูกต้อง -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- คำสั่ง Auto-Type นี้ล่าช้า ต้องการดำเนินการต่อหรือไม่ -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- คำสั่ง Auto-Type นี้กดแป้นพิมพ์ช้า ต้องการดำเนินการต่อหรือไม่ -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- คำสั่ง Auto-Type นี้มีอาร์กิวเมนต์ซ้ำกันหลายครั้ง ต้องการดำเนินการต่อหรือไม่ -- -- -- Permission Required -- ต้องการการอนุญาต -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeAssociationsModel -- -- Window -- หน้าต่าง -- -- -- Sequence -- ลำดับ -- -- -- Default sequence -- ลำดับมาตรฐาน -- -- -- -- AutoTypeMatchModel -- -- Group -- กลุ่ม -- -- -- Title -- หัวเรื่อง -- -- -- Username -- ชื่อผู้ใช้ -- -- -- Sequence -- ลำดับ -- -- -- -- AutoTypeMatchView -- -- Copy &username -- คัดลอกชื่อผู้ใช้ (&U) -- -- -- Copy &password -- คัดลอกรหัสผ่าน -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- ต้องการการอนุญาต -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Auto-Type - KeePassXC -- -- -- Select entry to Auto-Type: -- เลือกรายการเพื่อ Auto-Type -- -- -- Search... -- ค้นหา... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - การขอเข้าถึงเบราว์เซอร์ -- -- -- %1 is requesting access to the following entries: -- -- -- -- Remember access to checked entries -- -- -- -- Remember -- -- -- -- Allow access to entries -- -- -- -- Allow Selected -- -- -- -- Deny All -- -- -- -- Disable for this site -- -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- เบราว์เซอร์ KeePassXC บันทึกข้อมูล -- -- -- Ok -- โอเค -- -- -- Cancel -- ยกเลิก -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- คุณเปิดหลายฐานข้อมูล กรุณาเลือกฐานข้อมูลที่ถูกต้องเพื่อบันทึกข้อมูลของคุณ -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC คำขอกุญแจที่เชื่อมโยงใหม่ -- -- -- Save and allow access -- บันทึกและอนุญาติให้เข้าถึง -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC เขียนทับกุญแจที่มีอยู่เดิม -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- กุญแจถอดรหัสลับที่ถูกแบ่งปันด้วยชื่อ "%1" มีอยู่ก่อนแล้ว --คุณต้องการจะเขียนทับมันหรือไม่ -- -- -- KeePassXC: Update Entry -- KeePassXC ปรับปรุงรายการ -- -- -- Do you want to update the information in %1 - %2? -- เธอต้องการจะปรับปรุงข้อมูลให้ทันสมัยใน %1 - %2 หรือไม่ -- -- -- Abort -- หยุด -- -- -- Converting attributes to custom data… -- กำลังแปลงคุณสมบัติต่างๆเป็นข้อมูลที่กำหนดเอง ... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: แปลงคุณลักษณะของ KeePassHTTP -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- แปลงคุณสมบัติจากรายการ %1 สำเร็จ --ย้าย %2 กุญแจไปยังข้อมูลที่กำหนดเอง -- -- -- Successfully moved %n keys to custom data. -- ย้ายกุญแจ %n ไปยังข้อมูลที่กำหนดเองได้สำเร็จ -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC ไม่พบรายการที่มีคุณสมบัติ KeePassHTTP -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- ฐานข้อมูลที่ยังใช้งานอยู่ไม่มีรายการตามคุณสมบัติ KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC ตรวจพบการตั้งค่าการรวมเบราว์เซอร์ดั้งเดิม -- -- -- KeePassXC: Create a new group -- KeePassXC สร้างกลุ่มใหม่ -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- ได้รับคำขอสำหรับการสร้างกลุ่มใหม่ "%1". --คุณต้องการสร้างกลุ่มนี้หรือ? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- การตั้งค่าเบราว์เซอร์ KeePassXC ของคุณต้องถูกย้ายไปสู่การตั้งค่าฐานข้อมูล นี่จำเป็นต่อการรักษาการเชื่อมต่อเบราว์เซอร์ปัจจุบันของคุณ คุณต้องการย้ายการตั้งค่าที่มีอยู่แล้วตอนนี้หรือไม่ -- -- -- Don't show this warning again -- ไม่ต้องแสดงคำเตือนนี้อีก -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- -- -- -- -- BrowserSettingsWidget -- -- Dialog -- หน้าต่าง -- -- -- This is required for accessing your databases with KeePassXC-Browser -- สิ่งนี้จำเป็นเพื่อการเข้าถึงฐานข้อมูลผ่านเบราว์เซอร์ KeePassXC -- -- -- Enable browser integration -- เปิดใช้การผสานกับเว็บเบราว์เซอร์ -- -- -- General -- ทั่วไป -- -- -- Browsers installed as snaps are currently not supported. -- ยังไม่รองรับเบราว์เซอร์ที่ถูกติดตั้งจาก Snap -- -- -- Enable integration for these browsers: -- เปิดการใช้เบราว์เซอร์เหล่านี้ร่วมกับ -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- -- -- -- Request to unlock the database if it is locked -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- ข้อมูลรูปแบบเดียวกันเท่านั้น (http://, https://, ...) จะถูกส่งคืน -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- ส่งคืนรายการเฉพาะที่ตรงกับ URL มากที่สุด แทนที่จะส่งคืนรายการทั้งหมดของทั้งโดเมน -- -- -- Return only best-matching credentials -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- -- Allow returning expired credentials -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- -- -- -- Advanced -- ขั้นสูง -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- -- -- -- Automatically creating or updating string fields is not supported. -- ไม่รองรับการสร้างหรืออัพเดท string fields โดยอัตโนมัติ -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- ปรับปรุงข้อมูล KeePassXC หรือเส้นทางของไบนารี keepassxc-proxy โดยอัตโนมัติไปยังการส่งข้อความฉบับดั้งเดิมเมื่อเริ่มต้น -- -- -- Update native messaging manifest files at startup -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- ใช้พร็อกซีแบบกำหนดเอง ในกรณีที่คุณติดตั้งพร็อกซีด้วยตนเอง -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- -- -- -- Custom proxy location field -- -- -- -- Browser for custom proxy file -- เรียกดูแฟ้มพร็อกซีที่กำหนดเอง -- -- -- Browse... -- Button for opening file dialog -- เรียกดู... -- -- -- Use a custom browser configuration location: -- -- -- -- Browser type: -- ชนิดเบราว์เซอร์: -- -- -- Toolbar button style -- รูปแบบปุ่มบนแถบเครื่องมือ -- -- -- Config Location: -- -- -- -- Custom browser location field -- -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- Browse for custom browser path -- เบราว์เซอร์จากพาธที่ตั้งเบราว์เซอร์ที่ระบุเอง -- -- -- Custom extension ID: -- -- -- -- Custom extension ID -- -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- เนื่องจาก Snap sandbox คุณต้องเรียกใช้สคริปต์เพื่อเปิดใช้งานการรวมเบราว์เซอร์ <br /> คุณสามารถรับสคริปต์นี้จาก %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- จำเป็นต้องมีโปรแกรม KeePassXC-Browser เพื่อให้การผสานกับเบราว์เซอร์ทำงานได้ <br />ดาวน์โหลดมันสำหรับ %1 และ %2 และ %3. %4 -- -- -- Please see special instructions for browser extension use below -- โปรดดูคำแนะนำพิเศษสำหรับการใช้งานส่วนขยายเบราว์เซอร์ด้านล่าง -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b> คำเตือน </b> ตัวเลือกต่อไปนี้อาจจะอันตราย -- -- -- Executable Files -- ไฟล์ปฏิบัติการ -- -- -- All Files -- ไฟล์ทั้งหมด -- -- -- Select custom proxy location -- เลือกตำแหน่งพร็อกซีที่กำหนดเอง -- -- -- Select native messaging host folder location -- -- -- -- -- CloneDialog -- -- Clone Options -- ตัวเลือกการโคลน -- -- -- Append ' - Clone' to title -- เติม '- Clone' ต่อท้ายชื่อ -- -- -- Replace username and password with references -- แทนที่ชื่อผู้ใช้และรหัสผ่านด้วยข้อมูลอ้างอิง -- -- -- Copy history -- ทำสำเนาประวัติ -- -- -- -- CsvImportWidget -- -- Import CSV fields -- นำเข้าฟิลด์ CSV -- -- -- filename -- ชื่อไฟล์ -- -- -- size, rows, columns -- ขนาด, แถว, หลัก -- -- -- Encoding -- การเข้ารหัส -- -- -- Codec -- ตัวเข้ารหัส -- -- -- Text is qualified by -- ข้อความถูกกำกับด้วย -- -- -- Fields are separated by -- ฟิลด์ถูกแบ่งด้วย -- -- -- Comments start with -- บันทึกความเห็นเริ่มต้นด้วย -- -- -- Consider '\' an escape character -- ให้นับ '\' เป็น escape character -- -- -- Preview -- ดูตัวอย่าง -- -- -- Imported from CSV file -- นำเข้าจากไฟล์ CSV แล้ว -- -- -- Original data: -- ข้อมูลต้นฉบับ -- -- -- Error -- ผิดพลาด -- -- -- Error(s) detected in CSV file! -- ตรวจพบข้อผิดพลาดในไฟล์ CSV -- -- -- [%n more message(s) skipped] -- [อีก %n ข้อความถูกข้าม] -- -- -- CSV import: writer has errors: --%1 -- นำเข้า CSV ผู้เขียนมีข้อผิดพลาด %1 -- -- -- Text qualification -- -- -- -- Field separation -- -- -- -- Number of header lines to discard -- -- -- -- CSV import preview -- -- -- -- Column Association -- -- -- -- Last Modified -- ถูกแก้ไขล่าสุด -- -- -- Password -- รหัสผ่าน -- -- -- Created -- ถูกสร้าง -- -- -- Notes -- บันทึก -- -- -- Title -- หัวข้อ -- -- -- Group -- กลุ่ม -- -- -- URL -- URL -- -- -- Username -- ชื่อผู้ใช้ -- -- -- Header lines skipped -- -- -- -- First line has field names -- -- -- -- Not Present -- -- -- -- Column %1 -- -- -- -- TOTP -- TOTP -- -- -- Icon -- ไอคอน -- -- -- -- CsvParserModel -- -- %n column(s) -- %n คอลัมน์ -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1 %2 %3 -- -- -- %n byte(s) -- %n ไบท์ -- -- -- %n row(s) -- %n แถว -- -- -- -- Database -- -- File %1 does not exist. -- ไม่มีไฟล์ %1 -- -- -- Unable to open file %1. -- ไม่สามารถเปิดไฟล์ %1 -- -- -- Error while reading the database: %1 -- เกิดข้อผิดพลาดระหว่างอ่านฐานข้อมูล %1 -- -- -- File cannot be written as it is opened in read-only mode. -- ไม่สามารถเขียนไฟล์ได้เนื่องจากถูกเปิดอยู่ในโหมดอ่านเท่านั้น -- -- -- Key not transformed. This is a bug, please report it to the developers! -- กุญแจไม่ถูกเปลี่ยนแปลง นี่คือจุดบกพร่อง กรุณารายงานไปที่นักพัฒนา -- -- -- %1 --Backup database located at %2 -- %1 --พบฐานข้อมูลสำรองที่ %2 -- -- -- Could not save, database does not point to a valid file. -- ไม่สามารถบันทึกได้ ฐานข้อมูลไม่ได้ถูกชี้ไปยังแฟ้มที่ใช้งานได้ -- -- -- Could not save, database file is read-only. -- ไม่สามารถบันทึกได้ แฟ้มฐานข้อมูลเป็นแบบอ่านอย่างเดียว -- -- -- Database file has unmerged changes. -- แฟ้มฐานข้อมูลมีความเปลี่ยนแปลงที่ยังไม่ถูกบันทึกกลับ -- -- -- Recycle Bin -- ถังขยะ -- -- -- Passwords -- Root group name -- รหัสผ่าน -- -- -- Database save is already in progress. -- -- -- -- Could not save, database has not been initialized! -- -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- ปลดล็อกฐานข้อมูล - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- ไฟล์กุญแจคือ -- -- -- Refresh -- รีเฟรช -- -- -- Don't show this warning again -- ไม่ต้องแสดงคำเตือนนี้อีก -- -- -- All files -- ทุกไฟล์ -- -- -- Key files -- ไฟล์กุญแจ -- -- -- Select key file -- เลือกไฟล์กุญแจ -- -- -- Failed to open key file: %1 -- ไม่สามารถเปิดแฟ้มกุญแจได้: %1 -- -- -- Unlock KeePassXC Database -- ปลดล็อกฐานข้อมูล KeePassXC -- -- -- Enter Password: -- ใส่รหัสผ่าน: -- -- -- Password field -- ช่องรหัสผ่าน -- -- -- Hardware key slot selection -- -- -- -- Browse for key file -- เลือกแฟ้มกุญแจ -- -- -- Browse... -- เรียกดู... -- -- -- Refresh hardware tokens -- -- -- -- Hardware Key: -- กุญแจฮาร์ดแวร์: -- -- -- Hardware key help -- -- -- -- TouchID for Quick Unlock -- -- -- -- Unlock failed and no password given -- -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- -- -- -- Retry with empty password -- ลองด้วยรหัสผ่านว่างเปล่า -- -- -- Enter Additional Credentials (if any): -- -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- -- Key file help -- ช่วยเหลือเรื่องแฟ้มกุญแจ -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- ไม่สามารถใช้แฟ้มฐานข้อมูลเป็นแฟ้มกุญแจได้ -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- -- Key file to unlock the database -- -- -- -- Please touch the button on your YubiKey! -- กรุณาแตะปุ่มบน YubiKey ของคุณ! -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- Select hardware key… -- เลือกกุญแจกายภาพ... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- รหัสผ่าน -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- การตั้งค่าขั้นสูง -- -- -- General -- ทั่วไป -- -- -- Security -- การรักษาความปลอดภัย -- -- -- Encryption Settings -- การตั้งค่าการเข้ารหัสลับ -- -- -- Browser Integration -- การทำงานร่วมกับเบราว์เซอร์ -- -- -- Database Credentials -- -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- การตั้งค่าของเบราว์เซอร์ KeePassXC -- -- -- Stored keys -- กุญแจที่ถูกเก็บไว้ -- -- -- Remove -- ลบ -- -- -- Delete the selected key? -- ลบกุญแจที่เลือกหรือไม่ -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- คุณต้องการจะลบกุญแจที่เลือกหรือไม่ --สิ่งนี้อาจทำให้การเชื่อมต่อกับโปรแกรมเสริมบนเบราว์เซอร์มีปัญหา -- -- -- Key -- กุญแจ -- -- -- Value -- ค่า -- -- -- Enable Browser Integration to access these settings. -- เปิดการใช้ Browser Integration เพื่อเข้าถึงการตั้งค่านี้ -- -- -- Disconnect all browsers -- หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- คุณต้องการหยุดการเชื่อมต่อกับทุกเบราวเซอร์หรือไม่ --สิ่งนี้อาจทำให้การเชื่อมต่อกับโปรแกรมเสริมบนเบราว์เซอร์มีปัญหา -- -- -- KeePassXC: No keys found -- KeePassXC: ไม่พบกุญแจ -- -- -- No shared encryption keys found in KeePassXC settings. -- ไม่พบการแบ่งปันกุญแจที่ถูกเข้ารหัสลับแล้วในการตั้งค่า KeePassXC -- -- -- KeePassXC: Removed keys from database -- KeePassXC: กุญแจถูกนำออกจากฐานข้อมูล -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- ลบ %n กุญแจเข้ารหัสลับจากการตั้งค่า KeePassXC สำเร็จ -- -- -- Forget all site-specific settings on entries -- ไม่จำการตั้งค่าเฉพาะสำหรับทุกไซต์บนรายการ -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- คุณจะไม่จำการตั้งค่าเฉพาะสำหรับทุกไซต์บนทุกรายการหรือไม่ --การอนุญาตให้เข้าถึงรายการต่างๆ จะถูกยกเลิก -- -- -- Removing stored permissions… -- กำลังลบการอนุญาตที่บันทึกออก -- -- -- Abort -- ยกเลิกการทำงาน -- -- -- KeePassXC: Removed permissions -- KeePassXC: การอนุญาตถูกลบออก -- -- -- Successfully removed permissions from %n entry(s). -- ลบการอนุญาตจากรายการ %n -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: ไม่มีรายการที่ได้รับอนุญาต -- -- -- The active database does not contain an entry with permissions. -- ฐานข้อมูลที่ปฏิบัติการอยู่ไม่มีรายการที่ได้รับอนุญาต -- -- -- Move KeePassHTTP attributes to custom data -- ย้ายลักษณะ KeePassHTTP ไปยังข้อมูลตามคำสั่ง -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- คุณต้องการที่จะย้ายข้อมูลผสานในเบราว์เซอร์แบบเดิมไปยังมาตรฐานล่าสุดจริงหรือ นี่เป็นสิ่งที่จำเป็นในการรักษาความเข้ากับโปรแกรเสริมของเบราว์เซอร์ -- -- -- Stored browser keys -- กุญแจเบราว์เซอร์ที่ถูกเก็บอยู่ -- -- -- Remove selected key -- ลบกุญแจที่เลือก -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- Refresh database root group ID -- -- -- -- Created -- ถูกสร้าง -- -- -- Refresh database ID -- -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- เพิ่มเติมส่วนป้องกันเพิ่มเติม -- -- -- No password set -- รหัสผ่านยังไม่ได้ติดตั้ง -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- คำเตือน! คุณยังไม่ได้ตั้งรหัสผ่าน. การใช้ฐานข้อมูลโดยไม่ใช้รหัสผ่านเป็นเรื่องที่ไม่สนับสนุนเป็นอย่างยิ่ง -- --คุณแน่ใจหรือไม่ที่จะดำเนินการต่อโดยไม่ใช้รหัสผ่าน? -- -- -- Continue without password -- -- -- -- No encryption key added -- ไม่มีกุญแจถอดรหัสลับที่เพิ่มเข้ามา -- -- -- You must add at least one encryption key to secure your database! -- คุณต้องเพิ่มกุญแจเปิดรหัสลับอย่างน้อย 1 อันเพื่อป้องกันฐานข้อมูลของคุณ -- -- -- Unknown error -- ความผิดพลาดที่ไม่อาจระบุได้ -- -- -- Failed to change database credentials -- -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- อัลกอริทึมเข้ารหัสลับ: -- -- -- AES: 256 Bit (default) -- AES: 256 บิต (ค่าเริ่มต้น) -- -- -- Twofish: 256 Bit -- Twofish: 256 บิต -- -- -- Key Derivation Function: -- อนุพันธ์ของฟังก์ชันหลัก -- -- -- Transform rounds: -- รอบเปลี่ยนรูป -- -- -- Memory Usage: -- การใช้หน่วยความจำ -- -- -- Parallelism: -- การทำงานแบบขนาน -- -- -- Decryption Time: -- เวลาการเข้ารหัสลับ -- -- -- ?? s -- ?? วินาที -- -- -- Change -- เปลี่ยนแปลง -- -- -- Higher values offer more protection, but opening the database will take longer. -- ค่าที่สูงกว่าจะมีการป้องกันมากกว่า แต่จะใช้เวลาในการเปิดฐานข้อมูลนานกว่า -- -- -- Database format: -- รูปแบบฐานข้อมูล -- -- -- This is only important if you need to use your database with other programs. -- ส่วนนี้สำคัญเฉพาะเมื่อคุณต้องการใช้ฐานข้อมูลกับโปรแกรมอื่น -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (แนะนำ) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- ไม่เปลี่ยนแปลง -- -- -- Number of rounds too high -- Key transformation rounds -- จำนวนรอบยาวเกินไป -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- คุณกำลังใช้จำนวนของรอบการแปลงกุญแจกับ Argon2 สูง --ถ้าคุณใช้จำนวนนี้ ฐานข้อมูลของคุณอาจจะใช้เวลาหลายชั่วโมง หรือหลายวัน (หรือนานกว่านั้น) เพื่อเปิด -- -- -- Understood, keep number -- เข้าใจแล้ว เก็บตัวเลขไว้ -- -- -- Cancel -- ยกเลิก -- -- -- Number of rounds too low -- Key transformation rounds -- จำนวนรอบต่ำเกินไป -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- คุณกำลังใช้จำนวนของรอบการแปลงกุญแจกับ AES-KDF ต่ำ --ถ้าคุณใช้จำนวนนี้ ฐานข้อมูลของคุณอาจจะถูกถอดได้อย่างง่าย -- -- -- KDF unchanged -- KDF ไม่เปลี่ยนแปลง -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- ล้มเหลวการเปลี่ยนกุญแจกับเครื่องวัด KDF ใหม่ KDF จึงไม่เปลี่นแปลง -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- thread(s) -- -- -- Change existing decryption time -- -- -- -- Decryption time in seconds -- เวลาถอดรหัสลับ หน่วยเป็นวินาที -- -- -- Database format -- รูปแบบฐานข้อมูล -- -- -- Encryption algorithm -- อัลกอริทึมการเข้ารหัสลับ -- -- -- Key derivation function -- -- -- -- Transform rounds -- -- -- -- Memory usage -- หน่วยความจำที่ใช้ -- -- -- Parallelism -- -- -- -- ?? ms -- ?? มิลลิวินาที -- -- -- ? s -- ? วิ -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- -- -- -- Don't expose this database -- -- -- -- Expose entries under this group: -- -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- เมทาดาทาฐานข้อมูล -- -- -- Database name: -- ชื่อฐานข้อมูล -- -- -- Database description: -- รายละเอียดฐานข้อมูล -- -- -- Default username: -- ค่าเริ่มต้นของชื่อผู้ใช้ -- -- -- History Settings -- การตั้งค่าประวัติ -- -- -- Max. history items: -- จำนวนมากสุดของรายการประวัติ -- -- -- Max. history size: -- ขนาดมากสุดของรายการประวัติ -- -- -- MiB -- MiB -- -- -- Use recycle bin -- ใช้ถังขยะรีไซเคิล -- -- -- Additional Database Settings -- การตั้งค่าฐานข้อมูลเพิ่มเติม -- -- -- Database name field -- ช่องข้อมูลชื่อฐานข้อมูล -- -- -- Database description field -- ช่องข้อมูลคำอธิบายฐานข้อมูล -- -- -- Default username field -- ช่องข้อมูลชื่อผู้ใช้ฐานข้อมูล -- -- -- Maximum number of history items per entry -- -- -- -- Maximum size of history per entry -- -- -- -- Delete Recycle Bin -- ลบถังขยะ -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- -- -- -- (old) -- (เก่า) -- -- -- Enable compression (recommended) -- -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- แบ่งปัน -- -- -- Breadcrumb -- ชิ้นส่วนย่อย -- -- -- Type -- ชนิด -- -- -- Path -- เส้นทาง -- -- -- Last Signer -- ผู้ลงชื่อเข้าใช้คนล่าสุด -- -- -- Certificates -- ใบรับรอง -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- ชื่อฐานข้อมูล -- -- -- Description: -- รายละเอียด -- -- -- Database name field -- ช่องข้อมูลชื่อฐานข้อมูล -- -- -- Database description field -- ช่องข้อมูลคำอธิบายฐานข้อมูล -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- ฐานข้อมูล KeePass 2 -- -- -- All files -- ทุกไฟล์ -- -- -- Open database -- เปิดฐานข้อมูล -- -- -- CSV file -- ไฟล์ CSV -- -- -- Merge database -- ผสานฐานข้อมูล -- -- -- Open KeePass 1 database -- เปิดฐานข้อมูล KeePass 1 -- -- -- KeePass 1 database -- ฐานข้อมูล KeePass 1 -- -- -- Export database to CSV file -- ส่งออกฐานข้อมูลเป็นไฟล์ CSV -- -- -- Writing the CSV file failed. -- การเขียนไฟล์ CSV ล้มเหลว -- -- -- Database creation error -- การสร้างฐานข้อมูลเกิดข้อผิดพลาด -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- ฐานข้อมูลที่สร้างขึ้นไม่มีรหัสหรือ KDF ปฏิเสธที่จะบันทึก --สิ่งนี้มีจุดบกพร่องแน่นอนโปรดรายงานต่อนักพัฒนาเวป -- -- -- Select CSV file -- เลือกไฟล์ CSV -- -- -- New Database -- ฐานข้อมูลใหม่ -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [ฐานข้อมูลใหม่] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [ถูกล็อก] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [อ่านอย่างเดียว] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- -- -- -- Export database to HTML file -- -- -- -- HTML file -- แฟ้ม HTML -- -- -- Writing the HTML file failed. -- -- -- -- Export Confirmation -- -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- กำลังค้นหา -- -- -- Do you really want to delete the entry "%1" for good? -- คุณต้องการจะลบรายการ "%1" ให้หายไปอย่างถาวรจริงหรือไม่ -- -- -- Do you really want to move entry "%1" to the recycle bin? -- คุณต้องการจะย้ายรายการ "%1" ไปยังถังขยะจริงหรือไม่ -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- คุณต้องการจะลบ %n รายการไปยังถังขยะจริงหรือไม่ -- -- -- Execute command? -- เริ่มดำเนินการตามคำสั่งเลยหรือไม่ -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- คุณต้องการดำเนินการตามคำสั่งหรือไม่<br><br>%1<br> -- -- -- Remember my choice -- จำสิ่งที่ฉันเลือก -- -- -- Do you really want to delete the group "%1" for good? -- คุณต้องการจะลบกลุ่ม "%1" ให้หายไปอย่างถาวรจริงหรือไม่ -- -- -- No current database. -- ไม่มีฐานข้อมูลปัจจุบัน -- -- -- No source database, nothing to do. -- ไม่มีฐานข้อมูลต้นทาง ไม่ต้องทำอะไร -- -- -- Search Results (%1) -- ผลการค้นหา (%1) -- -- -- No Results -- ไม่มีผลลัพธ์ -- -- -- File has changed -- ไฟล์เปลี่ยนไปแล้ว -- -- -- The database file has changed. Do you want to load the changes? -- ฐานข้อมูลไฟล์เปลี่ยนไปแล้ว คุณต้องการโหลดการเปลี่ยนแปลงหรือไม่ -- -- -- Merge Request -- คำร้องเพื่อผสาน -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- ไฟล์ฐานข้อมูลเปลี่ยนไปแล้วและคุณได้ยกเลิกบันทึกการเปลี่ยนแปลงแล้ว --คุณต้องการผสานการเปลี่ยนแปลงของคุณหรือไม่ -- -- -- Empty recycle bin? -- ล้างถังขยะหรือไม่ -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- คุณแน่ใจว่าจะลบทุกอย่างออกจากถังขยะของคุณอย่างถาวรหรือไม่ -- -- -- Do you really want to delete %n entry(s) for good? -- คุณต้องการจะลบ %n รายการอย่างถาวรหรือไม่ -- -- -- Delete entry(s)? -- ลบรายการหรือไม่ -- -- -- Move entry(s) to recycle bin? -- ย้ายรายการไปยังถังขยะหรือไม่ -- -- -- Lock Database? -- ล็อคฐานข้อมูลหรือไม่ -- -- -- You are editing an entry. Discard changes and lock anyway? -- กำลังอยู่ในระหว่างแก้ไขรายการ คุณต้องการจะยกเลิกการแก้ไขและล็อคตอนนี้จริงหรือไม่ -- -- -- "%1" was modified. --Save changes? -- "%1" ถูกแก้ไขแล้ว --บันทึกการเปลี่ยนแปลงหรือไม่ -- -- -- Database was modified. --Save changes? -- ฐานข้อมูลถูกแก้ไขแล้ว --บันทึกการเปลี่ยนแปลงหรือไม่ -- -- -- Save changes? -- บันทึกการเปลี่ยนแปลง? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- ไม่สามารถเปิดไฟล์ฐานข้อมูลใหม่ขณะกำลังพยายามรีโหลดอัตโนมัติ --ข้อผิดพลาด %1 -- -- -- Disable safe saves? -- ปิดการบันทึกแบบปลอดภัยหรือไม่ -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC ไม่สามารถบันทึกฐานข้อมูลแล้วหลายครั้ง สิ่งนี้อาจทำให้บริการเชื่อมโยงไฟล์ล็อคไฟล์ที่ถูกบันทึกไว้แล้ว --ปิดการบันทึกแบบปลอดภัยและลองอีกครั้งหรือไม่ -- -- -- Passwords -- รหัสผ่าน -- -- -- Save database as -- บันทึกฐานข้อมูลเป็น -- -- -- KeePass 2 Database -- ฐานข้อมูล KeePass 2 -- -- -- Replace references to entry? -- เปลี่ยนแหล่งอ้างอิงของรายการหรือไม่ -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- รายการ "%1" มี %2 แหล่งอ้างอิง คุณต้องการจะเขียนทับแหล่งอ้างอิงด้วยค่า หรือข้ามรายการนี้ หรือต้องการลบหรือไม่ -- -- -- Delete group -- ลบกลุ่ม -- -- -- Move group to recycle bin? -- ย้ายกลุ่มไปถังขยะ -- -- -- Do you really want to move the group "%1" to the recycle bin? -- คุณต้องการย้ายกลุ่ม "%1" ไปถังขยะจริงหรือไม่ -- -- -- Successfully merged the database files. -- รวมไฟล์ฐานข้อมูลเรียบร้อยแล้ว -- -- -- Database was not modified by merge operation. -- ฐานข้อมูลไม่ถูกเปลี่ยนแปลงโดยการดำเนินการผสาน -- -- -- Shared group... -- กลุ่มที่ใช้ร่วมกัน -- -- -- Writing the database failed: %1 -- เขียนฐานข้อมูลล้มเหลว %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- -- -- -- Save database backup -- -- -- -- Could not find database file: %1 -- -- -- -- -- EditEntryWidget -- -- Entry -- รายการ -- -- -- Advanced -- ขั้นสูง -- -- -- Icon -- ไอคอน -- -- -- Auto-Type -- Auto-Type -- -- -- Properties -- คุณสมบัติ -- -- -- History -- ประวัติ -- -- -- SSH Agent -- ตัวแทน SSH -- -- -- n/a -- n/a -- -- -- (encrypted) -- (เข้ารหัสลับอยู่) -- -- -- Select private key -- เลือกกุญแจส่วนตัว -- -- -- Entry history -- ประวัติรายการ -- -- -- Add entry -- เพิ่มรายการ -- -- -- Edit entry -- แก้ไขรายการ -- -- -- New attribute -- คุณสมบัติใหม่ -- -- -- Are you sure you want to remove this attribute? -- คุณแน่ใจหรือไม่ว่าต้องการลบคุณสมบัตินี้ -- -- -- Tomorrow -- พรุ่งนี้ -- -- -- %n week(s) -- %n สัปดาห์ -- -- -- %n month(s) -- %n เดือน -- -- -- Entry updated successfully. -- รายการถูกอัปเดตสำเร็จแล้ว -- -- -- New attribute %1 -- คุณสมบัติใหม่ %1 -- -- -- %n year(s) -- %n ปี -- -- -- Confirm Removal -- ยืนยันการนำออก -- -- -- Browser Integration -- การทำงานร่วมกับเบราว์เซอร์ -- -- -- <empty URL> -- -- -- -- Are you sure you want to remove this URL? -- -- -- -- Reveal -- เปิดเผย -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- คุณสมบัติเพิ่มเติม -- -- -- Add -- เพิ่ม -- -- -- Remove -- นำออก -- -- -- Edit Name -- แก้ไขชื่อ -- -- -- Protect -- ป้องกัน -- -- -- Reveal -- เปิดเผย -- -- -- Attachments -- แฟ้มแนบ -- -- -- Foreground Color: -- สีพื้นหน้า -- -- -- Background Color: -- สีพื้นหลัง -- -- -- Attribute selection -- -- -- -- Attribute value -- -- -- -- Add a new attribute -- -- -- -- Remove selected attribute -- -- -- -- Edit attribute name -- -- -- -- Toggle attribute protection -- -- -- -- Show a protected attribute -- -- -- -- Foreground color selection -- -- -- -- Background color selection -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- -- Exclude from database reports -- -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- เปิดใช้ Auto -Type สำหรับรายการนี้ -- -- -- Window Associations -- หน้าต่างการเชื่อมโยง -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- หัวเรื่องของหน้าต่าง -- -- -- Use a specific sequence for this association: -- ใช้ลำดับเฉพาะในการเชื่อมโยง -- -- -- Custom Auto-Type sequence -- -- -- -- Open Auto-Type help webpage -- -- -- -- Existing window associations -- -- -- -- Add new window association -- -- -- -- Remove selected window association -- -- -- -- You can use an asterisk (*) to match everything -- -- -- -- Set the window association title -- -- -- -- You can use an asterisk to match everything -- -- -- -- Custom Auto-Type sequence for this window -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- การตั้งค่าเหล่านี้จะส่งผลต่อพฤติกรรมการป้อนข้อมูลด้วยส่วนเสริมในเบราว์เซอร์ -- -- -- General -- ทั่วไป -- -- -- Skip Auto-Submit for this entry -- -- -- -- Hide this entry from the browser extension -- ซ่อนรายการข้อมูลนี้จากส่วนเสริมในเบราว์เซอร์ -- -- -- Additional URL's -- URL เพิ่มเติม -- -- -- Add -- เพิ่ม -- -- -- Remove -- ลบ -- -- -- Edit -- แก้ไข -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- EditEntryWidgetHistory -- -- Show -- แสดง -- -- -- Restore -- เรียกคืน -- -- -- Delete -- ลบ -- -- -- Delete all -- ลบทั้งหมด -- -- -- Entry history selection -- -- -- -- Show entry at selected history state -- -- -- -- Restore entry to selected history state -- -- -- -- Delete selected history state -- ลบช่วงประวัติที่เลือก -- -- -- Delete all history -- ลบประวัติทั้งหมด -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- รหัสผ่าน -- -- -- Title: -- หัวเรื่อง -- -- -- Presets -- ค่าปรับแต่งสำเร็จรูป -- -- -- Toggle the checkbox to reveal the notes section. -- สลับกล่องกาเครื่องหมายเพื่อแสดงส่วนบันทึก -- -- -- Username: -- ชื่อผู้ใช้งาน -- -- -- Url field -- -- -- -- Download favicon for URL -- -- -- -- Password field -- ช่องรหัสผ่าน -- -- -- Toggle notes visible -- สลับให้เห็นบันทึก -- -- -- Expiration field -- ช่องการหมดอายุ -- -- -- Expiration Presets -- -- -- -- Expiration presets -- -- -- -- Notes field -- ชื่อบันทึก -- -- -- Title field -- ช่องหัวเรื่อง -- -- -- Username field -- ช่องชื่อผู้ใช้ -- -- -- Toggle expiration -- สลับการหมดอายุ -- -- -- Notes: -- บันทึก -- -- -- https://example.com -- -- -- -- Expires: -- หมดอายุ: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- จาก -- -- -- Remove key from agent after -- ลบกุญแจออกจากตัวแทน -- -- -- seconds -- วินาที -- -- -- Fingerprint -- ลายนิ้วมือ -- -- -- Remove key from agent when database is closed/locked -- ลบกุญแจออกจากตัวแทน เมือฐานข้อมูลถูกปิดหรือล๊อค -- -- -- Public key -- กุญแจสาธารณะ -- -- -- Add key to agent when database is opened/unlocked -- เพิ่มกุญแจไปยังตัวยแทน เมื่อฐานข้อมูลถูกเปิดออกหรือถูกปลดล๊อด -- -- -- Comment -- ข้อคิดเห็น -- -- -- Decrypt -- ถอดรหัสลับ -- -- -- n/a -- ไม่มีข้อมูล -- -- -- Copy to clipboard -- คัดลอกไปยังคลิปบอร์ด -- -- -- Private key -- กุญแจส่วนตัว -- -- -- External file -- แฟ้มภายนอก -- -- -- Browse... -- Button for opening file dialog -- เรียกดู... -- -- -- Attachment -- แฟ้มแนบ -- -- -- Add to agent -- เพิ่มไปยังตัวแทน -- -- -- Remove from agent -- ลบออกจากตัวแทน -- -- -- Require user confirmation when this key is used -- จำเป็นต้องยืนยันผู้ใช้เมื่อมีการใช้กุญแจ -- -- -- Remove key from agent after specified seconds -- -- -- -- Browser for key file -- เรียกดูแฟ้มกุญแจ -- -- -- External key file -- -- -- -- Select attachment file -- -- -- -- -- EditGroupWidget -- -- Group -- กลุ่ม -- -- -- Icon -- ไอคอน -- -- -- Properties -- คุณสมบัติ -- -- -- Add group -- เพิ่มกลุ่ม -- -- -- Edit group -- แก้ไขกลุ่ม -- -- -- Enable -- เปิดใช้ -- -- -- Disable -- ปิดใช้ -- -- -- Inherit from parent group (%1) -- รับช่วงจากกลุ่มหลัก (%1) -- -- -- Entry has unsaved changes -- รายการมีการเปลี่ยนแปลงที่ไม่ถูกบันทึก -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- ชนิด -- -- -- Path: -- เส้นทาง -- -- -- Password: -- รหัสผ่าน -- -- -- Inactive -- ไม่มีการใช้งาน -- -- -- KeeShare unsigned container -- ที่จัดเก็บที่ไม่ได้เซ็นไว้ของ KeeShare -- -- -- KeeShare signed container -- ที่จัดเก็บที่เซ็นไว้ของ KeeShare -- -- -- Select import source -- เลือกนำฐานข้อมูลที่นำเข้า -- -- -- Select export target -- เลือกเป้าหมายที่นำออก -- -- -- Select import/export file -- เลือกแฟ้มนำเข้า/นำออก -- -- -- Clear -- ล้าง -- -- -- Import -- นำเข้า -- -- -- Export -- นำออก -- -- -- Synchronize -- -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- -- -- -- %1 is already being exported by this database. -- -- -- -- %1 is already being imported by this database. -- -- -- -- %1 is being imported and exported by different groups in this database. -- -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- -- -- -- Database export is currently disabled by application settings. -- -- -- -- Database import is currently disabled by application settings. -- -- -- -- Sharing mode field -- -- -- -- Path to share file field -- -- -- -- Password field -- ช่องรหัสผ่าน -- -- -- Clear fields -- -- -- -- Browse for share file -- เรียกดูแฟ้มที่แบ่งปัน -- -- -- Browse... -- เรียกดู... -- -- -- -- EditGroupWidgetMain -- -- Name field -- ช่องชื่อ -- -- -- Notes field -- ชื่อบันทึก -- -- -- Toggle expiration -- สลับการหมดอายุ -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- Expiration field -- ช่องการหมดอายุ -- -- -- Search toggle for this and sub groups -- -- -- -- Default auto-type sequence field -- -- -- -- Expires: -- หมดอายุ: -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- Auto-Type: -- -- -- Search: -- -- -- -- Notes: -- บันทึก -- -- -- Name: -- ชื่อ: -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- เพิ่มไอคอนที่กำหนดเอง -- -- -- Delete custom icon -- ลบไอคอนที่กำหนดเอง -- -- -- Download favicon -- ดาวน์โหลด favicon -- -- -- Unable to fetch favicon. -- ไม่สามารถดึงข้อมูล favicon ได้ -- -- -- Images -- ภาพ -- -- -- All files -- ทุกแฟ้ม -- -- -- Confirm Delete -- ยืนยันการลบ -- -- -- Select Image(s) -- เลือกรูปภาพ -- -- -- Successfully loaded %1 of %n icon(s) -- การโหลดไอคอน %1 ของ %1 ประสบความสำเร็จ -- -- -- No icons were loaded -- ไอคอนไม่ถูกโหลด -- -- -- %n icon(s) already exist in the database -- %n ไอคอนมีอยู่แล้วในฐานข้อมูล -- -- -- The following icon(s) failed: -- ไอคอนต่อไปนี้ล้มเหลว -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- ไอคอนนี้ถูกใช้โดย %n เอ็นทรี และจะถูกแทนที่ด้วยไอคอนตั้งต้น คุณแน่ใจหรือไม่ว่าคุณต้องการลบไอคอน -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- -- -- -- Download favicon for URL -- -- -- -- Apply selected icon to subgroups and entries -- -- -- -- Also apply to child groups -- -- -- -- Also apply to child entries -- -- -- -- Also apply to all children -- -- -- -- Existing icon selected. -- -- -- -- Use default icon -- -- -- -- Use custom icon -- -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- สร้าง -- -- -- Modified: -- แก้ไข -- -- -- Accessed: -- เข้าถึง -- -- -- Uuid: -- Uuid -- -- -- Plugin Data -- ข้อมูลโปรแกรมเสริม -- -- -- Remove -- นำออก -- -- -- Delete plugin data? -- ลบข้อมูลโปรแกรมเสริมหรือไม่ -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- คุณต้องการลบข้อมูลโปรแกรมเสริมที่เลือกไว้หรือไม่ --การกระทำนี้อาจจะกระทบโปรแกรมเสริมให้ทำงานผิดพลาด -- -- -- Key -- กุญแจ -- -- -- Value -- ค่า -- -- -- Datetime created -- -- -- -- Datetime modified -- -- -- -- Datetime accessed -- -- -- -- Unique ID -- รหัสระบุตัวที่ไม่ซ้ำ -- -- -- Plugin data -- -- -- -- Remove selected plugin data -- -- -- -- -- Entry -- -- %1 - Clone -- %1 -ลอกแบบ -- -- -- -- EntryAttachmentsModel -- -- Name -- ชื่อ -- -- -- Size -- ขนาด -- -- -- -- EntryAttachmentsWidget -- -- Form -- รูปแบบ -- -- -- Add -- เพิ่ม -- -- -- Remove -- นำออก -- -- -- Open -- เปิด -- -- -- Save -- บันทึก -- -- -- Select files -- เลือกแฟ้ม -- -- -- Are you sure you want to remove %n attachment(s)? -- คุณแน่ใจหรือไม่ว่าคุณต้องการลบไฟล์แนบ -- -- -- Save attachments -- บันทึกแฟ้มแนบ -- -- -- Unable to create directory: --%1 -- ไม่สามารถสร้างไดเรคทอรี --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- คุณแน่ใจหรือว่าจะเขียนทับแฟ้มที่มีอยู่ "1%" ด้วยแฟ้มแนบ -- -- -- Confirm overwrite -- ยืนยันการเขียนทับ -- -- -- Unable to save attachments: --%1 -- ไม่สามารถบันทึกแฟ้มแนบ: --%1 -- -- -- Unable to open attachment: --%1 -- ไม่สามารถเปิดแฟ้มแนบ: --%1 -- -- -- Unable to open attachments: --%1 -- ไม่สามารถเปิดแฟ้มแนบ: --%1 -- -- -- Confirm remove -- ยืนยันการลบ -- -- -- Unable to open file(s): --%1 -- ไม่สามารถเปิดไฟล์ -- -- -- Attachments -- แฟ้มแนบ -- -- -- Add new attachment -- -- -- -- Remove selected attachment -- -- -- -- Open selected attachment -- -- -- -- Save selected attachment to disk -- -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- -- -- -- Confirm Attachment -- -- -- -- -- EntryAttributesModel -- -- Name -- ชื่อ -- -- -- -- EntryHistoryModel -- -- Last modified -- ถูกแก้ไขครั้งสุดท้าย -- -- -- Title -- หัวเรื่อง -- -- -- Username -- ชื่อผู้ใช้ -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- อ้างอิง -- -- -- Group -- กลุ่ม -- -- -- Title -- หัวเรื่อง -- -- -- Username -- ชื่อผู้ใช้ -- -- -- URL -- URL -- -- -- Never -- ไม่เลย -- -- -- Password -- รหัสผ่าน -- -- -- Notes -- บันทึก -- -- -- Expires -- หมดอายุ -- -- -- Created -- ถูกสร้าง -- -- -- Modified -- แก้ไข -- -- -- Accessed -- เข้าถึง -- -- -- Attachments -- แฟ้มแนบ -- -- -- Size -- ขนาด -- -- -- Group name -- -- -- -- Entry title -- -- -- -- Entry notes -- -- -- -- Entry expires at -- -- -- -- Creation date -- -- -- -- Last modification date -- -- -- -- Last access date -- -- -- -- Attached files -- -- -- -- Entry size -- -- -- -- Has attachments -- -- -- -- Has TOTP one-time password -- -- -- -- -- EntryPreviewWidget -- -- Close -- ปิด -- -- -- General -- ทั่วไป -- -- -- Username -- ชื่อผู้ใช้ -- -- -- Password -- รหัสผ่าน -- -- -- Expiration -- หมดอายุ -- -- -- URL -- URL -- -- -- Attributes -- คุณสมบัติ -- -- -- Attachments -- แฟ้มแนบ -- -- -- Notes -- บันทึก -- -- -- Autotype -- Autotype -- -- -- Window -- หน้าต่าง -- -- -- Sequence -- ลำดับ -- -- -- Searching -- กำลังค้นหา -- -- -- Search -- ค้นหา -- -- -- Clear -- ล้าง -- -- -- Never -- ไม่เลย -- -- -- [PROTECTED] -- [ถูกป้องกันอยู่] -- -- -- Enabled -- เปิดใช้ -- -- -- Disabled -- ปิดใช้ -- -- -- Share -- แบ่งปัน -- -- -- Display current TOTP value -- -- -- -- Advanced -- ขั้นสูง -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- -- -- -- -- EntryView -- -- Fit to window -- พอดีกับ window -- -- -- Fit to contents -- พอดีกับเนื้อหา -- -- -- Reset to defaults -- เริ่มใหม่เป็นค่าเริ่มต้น -- -- -- Has attachments -- Entry attachment icon toggle -- -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- ชื่อแฟ้ม -- -- -- Group -- กลุ่ม -- -- -- Manage -- จัดการ -- -- -- Unlock to show -- -- -- -- None -- ไม่มี -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- แอปพลิเคชัน -- -- -- Manage -- จัดการ -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- ไม่รู้จัก -- -- -- Unknown -- Unknown executable path -- ไม่รู้จัก -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- (ที่ว่าง) -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- -- -- -- Cancel -- ยกเลิก -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- -- Close -- ปิด -- -- -- URL -- URL -- -- -- Status -- สถานะ -- -- -- Please wait, processing entry list... -- -- -- -- Downloading... -- กำลังดาวน์โหลด... -- -- -- Ok -- โอเค -- -- -- Already Exists -- มีอยู่แล้ว -- -- -- Download Failed -- การดาวน์โหลดล้มเหลว -- -- -- Downloading favicons (%1/%2)... -- กำลังดาวน์โหลด favicon (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- ปิด (&C) -- -- -- Close message -- ปิดข้อความ -- -- -- -- Kdbx3Reader -- -- missing database headers -- ฐานข้อมูลส่วนหัวหายไป -- -- -- Header doesn't match hash -- ส่วนหัวไม่ตรงกับรายละเอียด -- -- -- Invalid header id size -- ขนาดบัญชีส่วนหัวไม่ถูกต้อง -- -- -- Invalid header field length -- ความยาวของฟิลด์ส่วนหัวไม่ถูกต้อง -- -- -- Invalid header data length -- ความยาวของข้อมูลส่วนหัวไม่ถูกต้อง -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- ฐานข้อมูลส่วนหัวหายไป -- -- -- Invalid header checksum size -- ขนาดผลรวมหัวข้อไม่ถูกต้อง -- -- -- Header SHA256 mismatch -- หัวข้อ SHA256 ไม่ตรงกัน -- -- -- Unknown cipher -- การเข้ารหัสที่ไม่รู้จัก -- -- -- Invalid header id size -- ขนาด ID ส่วนหัวไม่ถูกต้อง -- -- -- Invalid header field length -- ความยาวฟิลด์ส่วนหัวไม่ถูกต้อง -- -- -- Invalid header data length -- ความยาวข้อมูลส่วนหัวไม่ถูกต้อง -- -- -- Failed to open buffer for KDF parameters in header -- ไม่สามารถเปิดบัฟเฟอร์สำหรับพารามิเตอร์ KDF ในส่วนต้น -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- ไม่รองรับฟังก์ชั่นการค้นพบกุญแจ (KDF) หรือพารามิเตอร์ที่ไม่ถูกต้อง -- -- -- Legacy header fields found in KDBX4 file. -- หัวข้อฟิลด์เลกาซีในไฟล์ KDBX4 -- -- -- Invalid inner header id size -- ขนาดบัญชีส่วนหัวด้านในไม่ถูกต้อง -- -- -- Invalid inner header field length -- ความยาวของสนามวงในไม่ถูกต้อง -- -- -- Invalid inner header binary size -- ขนาดไบนารีส่วนหัวภายในไม่ถูกต้อง -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- ไม่รองรับ KeePass รุ่น variant map -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- ความยาวชื่อรายการ variant map ไม่ถูกต้อง -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- ข้อมูลชื่อรายการ variant map ไม่ถูกต้อง -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวรายการ variant map ไม่ถูกต้อง -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- ข้อมูลรายการเริ่มต้น variant map ไม่ถูกต้อง -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวค่ารายการ Bool variant map ไม่ถูกต้อง -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวค่ารายการ Int32 variant map ไม่ถูกต้อง -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวค่ารายการ UInt32 variant map ไม่ถูกต้อง -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวค่ารายการ Int64 variant map ไม่ถูกต้อง -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- ความยาวค่ารายการ UInt64 variant map ไม่ถูกต้อง -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- ประเภทรายการ variant map ไม่ถูกต้อง -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- ขนาดชนิดของเขตข้อมูล variant map ไม่ถูกต้อง -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- (HMAC mismatch) -- -- -- -- Unable to calculate database key: %1 -- -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- ขั้นตอนการเข้ารหัสแบบสมมาตรไม่ถูกต้อง -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- ขนาด IV การเข้ารหัสแบบสมมาตรไม่ถูกต้อง -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- ล้มเหลวในการลำดับแผนที่แปรผันพารามิเตอร์ KDF -- -- -- Unable to calculate database key: %1 -- -- -- -- -- KdbxReader -- -- Unsupported cipher -- ไม่รองรับการเข้ารหัส -- -- -- Invalid compression flags length -- ความยาวแฟล็กบีบอัดไม่ถูกต้อง -- -- -- Unsupported compression algorithm -- อัลกอริทีมการบีบอัดไม่รองรับ -- -- -- Invalid master seed size -- การแปลงขนาดมาสเตอร์ไม่ถูกต้อง -- -- -- Invalid transform seed size -- การแปลงขนาดค่าเริ่มต้นไม่ถูกต้อง -- -- -- Invalid transform rounds size -- ขนาดรอบการแปลงไม่ถูกต้อง -- -- -- Invalid start bytes size -- ขนาดของไบต์เริ่มต้นไม่ถูกต้อง -- -- -- Invalid random stream id size -- ขนาด ID สตรีมแบบสุ่มไม่ถูกต้อง -- -- -- Invalid inner random stream cipher -- การเข้ารหัสสตรีมแบบสุ่มด้านในไม่ถูกต้อง -- -- -- Not a KeePass database. -- ไม่ใช่ฐานข้อมูล KeePass -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- ไฟล์ที่เลือกเป็นฐานข้อมูล KeePass 1 เก่า (.kdb) -- --คุณสามารถนำเข้าได้โดยคลิกที่ฐานข้อมูล นำเข้าฐานข้อมูล KeePass 1 --นี่คือการโอนย้ายทางเดียว คุณจะไม่สามารถเปิดฐานข้อมูลที่นำเข้าด้วยรุ่น KeePassX 0.4 รุ่นเก่าได้ -- -- -- Unsupported KeePass 2 database version. -- ไม่สนับสนุนรุ่นฐานข้อมูล KeePass 2 -- -- -- Invalid cipher uuid length: %1 (length=%2) -- ความยาวรหัสตัวเลขไม่ถูกต้อง:% 1 (ความยาว =% 2) -- -- -- Unable to parse UUID: %1 -- ไม่สามารถแยกวิเคราะห์ UUID :% 1 -- -- -- Failed to read database file. -- ไม่สามารถอ่านไฟล์ฐานข้อมูล -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- การแยกวิเคราะห์ XML ล้มเหลว : % 1 -- -- -- No root group -- ไม่มีกลุ่มรูต -- -- -- Missing icon uuid or data -- ไอคอน uuid หรือ ข้อมูล หายไป -- -- -- Missing custom data key or value -- ไม่มีข้อมูลกุญแจหรือค่าที่กำหนดเอง -- -- -- Multiple group elements -- กลุ่มองค์ประกอบหลายฐานข้อมูล -- -- -- Null group uuid -- กลุ่ม uuid ที่ว่าง -- -- -- Invalid group icon number -- กลุ่มตัวเลขไอคอนไม่ถูกต้อง -- -- -- Invalid EnableAutoType value -- ค่า EnableAutoType ไม่ถูกต้อง -- -- -- Invalid EnableSearching value -- ค่า EnableSearching ไม่ถูกต้อง -- -- -- No group uuid found -- ไม่พบกลุ่ม uuid -- -- -- Null DeleteObject uuid -- DeleteObject uuid ที่ว่าง -- -- -- Missing DeletedObject uuid or time -- ไม่มี DeleteObject uuid หรือ เวลา -- -- -- Null entry uuid -- รายการ uuid ที่ว่าง -- -- -- Invalid entry icon number -- ตัวเลขไอคอนไม่ถูกต้อง -- -- -- History element in history entry -- ประวัติของส่วนประกอบในประวัติรายการ -- -- -- No entry uuid found -- ไม่พบรายการ uuid -- -- -- History element with different uuid -- ประวัติของส่วนประกอบที่ uuid ต่างกัน -- -- -- Duplicate custom attribute found -- ค้นพบคัดลอกคุณสมบัติที่กำหนดเอง -- -- -- Entry string key or value missing -- รายการสายกุญแจหรือค่าที่หายไป -- -- -- Entry binary key or value missing -- รายการกุญแจไบนารีหรือค่าที่หายไป -- -- -- Auto-type association window or sequence missing -- ไม่พบการพิมพ์อัตโนมัติของหน้าต่างที่เชื่อมต่อ หรือลำดับ -- -- -- Invalid bool value -- ค่าบูลไม่ถูกต้อง -- -- -- Invalid date time value -- ค่าวันที่และเวลาไม่ถูกต้อง -- -- -- Invalid color value -- ค่าสีไม่ถูกต้อง -- -- -- Invalid color rgb part -- ค่าสีส่วนRGBไม่ถูกต้อง -- -- -- Invalid number value -- ค่าตัวเลขไม่ถูกต้อง -- -- -- Invalid uuid value -- ค่า uuid ไม่ถูกต้อง -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- การขยายไบนารีล้มเหลว -- -- -- XML error: --%1 --Line %2, column %3 -- XML ผิดพลาด --%1 --บรรทัด %2 --หลัก %3 -- -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- ไฟล์ใหญ่เกินกว่าจะเป็นกุญแจส่วนตัว -- -- -- Failed to open private key -- ล้มเหลวระหว่างการเปิดกุญแจส่วนตัว -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- ไม่สามารถเปิดฐานข้อมูลดังกล่าว -- -- -- Import KeePass1 Database -- -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- ไม่สามารถอ่านแฟ้มกุญแจได้ -- -- -- Not a KeePass database. -- ไม่ใช่ฐานข้อมูล KeePass -- -- -- Unsupported encryption algorithm. -- อัลกอริทีมเข้ารหัสลับไม่รองรับ -- -- -- Unsupported KeePass database version. -- รุ่นของฐานข้อมูล Keepass ไม่รองรับ -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- ไม่สามารถอ่านการเข้ารหัสลับ IV -- -- -- Invalid number of groups -- จำนวนกลุ่มไม่ถูกต้อง -- -- -- Invalid number of entries -- จำนวนรายการไม่ถูกต้อง -- -- -- Invalid content hash size -- ขนาดเนื้อหาโดยละเอียดไม่ถูกต้อง -- -- -- Invalid transform seed size -- การแปลงขนาดค่าเริ่มต้นไม่ถูกต้อง -- -- -- Invalid number of transform rounds -- การแปลงจำนวนรอบของการเปลี่ยนแปลงไม่ถูกต้อง -- -- -- Unable to construct group tree -- ไม่สามารถสร้าง group tree -- -- -- Root -- รูต -- -- -- Key transformation failed -- การแปลงรหัสล้มเหลว -- -- -- Invalid group field type number -- กรุ๊ปตัวเลขฟิลด์ไทป์ไม่ถูกต้อง -- -- -- Invalid group field size -- ขนาดกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Read group field data doesn't match size -- ข้อมูลการอ่านกรุ๊ปฟิลด์ฟิลด์จับคู่ไม่ได้ขนาด -- -- -- Incorrect group id field size -- ขนาดกรุ๊ปไอดีฟิลด์ไม่ถูกต้อง -- -- -- Incorrect group creation time field size -- เวลาการสร้างกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Incorrect group modification time field size -- การแก้ไขเวลากรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Incorrect group access time field size -- เวลาการเข้าถึงกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Incorrect group expiry time field size -- เวลาหมดอายุของกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Incorrect group icon field size -- ขนาดกรุ๊ปฟิลด์ไอคอนไม่ถูกต้อง -- -- -- Incorrect group level field size -- ขนาดเลเวลกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Invalid group field type -- กลุ่มกรุ๊ปฟิลด์ไม่ถูกต้อง -- -- -- Missing group id or level -- บัญชีกลุ่มหรือเลเวลหายไป -- -- -- Missing entry field type number -- ตัวเลขเอ็นทรีฟิลด์ไทป์หายไป -- -- -- Invalid entry field size -- ขนาดเอ็นทรีฟิลด์ไม่ถูกต้อง -- -- -- Read entry field data doesn't match size -- ขนาดการอ่านข้อมูลเอ็นทรีฟิลด์ไม่เหมาะสมกับขนาด -- -- -- Invalid entry uuid field size -- ขนาดฟิลด์ UUID เอ็นทรีไม่ถูกต้อง -- -- -- Invalid entry group id field size -- ขนาดบัญชีเอ็นทรีกรุ๊ปไม่ถูกต้อง -- -- -- Invalid entry icon field size -- ขนาดฟิลด์ไอคอนเอ็นทรีไม่ถูกต้อง -- -- -- Invalid entry creation time field size -- เวลาสร้างขนาดฟิลด์เอ็นทรีไม่ถูกต้อง -- -- -- Invalid entry modification time field size -- เวลาแก้ไขขนาดฟิลด์เอ็นทรีไม่ถูกต้อง -- -- -- Invalid entry expiry time field size -- เวลาหมดอายุขนาดฟิลด์เอ็นทรีไม่ถูกต้อง -- -- -- Invalid entry field type -- กลุ่มเอ็นทรีฟิลด์ไม่ถูกต้อง -- -- -- unable to seek to content position -- ไม่สามารถที่จะหาตำแหน่งเนื้อหาได้ -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- -- -- -- Inactive share %1 -- -- -- -- Imported from %1 -- นำเข้า จาก 1% -- -- -- Exported to %1 -- -- -- -- Synchronized with %1 -- -- -- -- Import is disabled in settings -- -- -- -- Export is disabled in settings -- -- -- -- Inactive share -- -- -- -- Imported from -- นำเข้าจาก -- -- -- Exported to -- ส่งออกไป -- -- -- Synchronized with -- -- -- -- -- KeyComponentWidget -- -- Key Component -- ส่วนโปรแกรมหลัก -- -- -- Key Component Description -- คำบรรยายส่วนโปรแกรมหลัก -- -- -- Cancel -- ยกเลิก -- -- -- Key Component set, click to change or remove -- จัดตั้งส่วนโปรแกรมหลักสำเร็จ คลิกเพื่อเปลี่ยนแปลงหรือลบออก -- -- -- Add %1 -- Add a key component -- เพิ่ม %1 -- -- -- Change %1 -- Change a key component -- เปลี่ยนแปลง %1 -- -- -- Remove %1 -- Remove a key component -- ลบออก %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- ตั้งค่า %1 คลิกเพื่อเปลี่ยนแปลงหรือยกเลิก -- -- -- -- KeyFileEditWidget -- -- Generate -- สร้าง -- -- -- Key File -- แฟ้มกุญแจ -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>คุณสามารถเพิ่มแฟ้มกุญแจที่ประกอบไปด้วยไบต์แบบสุ่มเพื่อความปลอดภัยที่มากขึ้น</p><p>คุณต้องเก็บข้อมูลเป็นความลับห้ามทำหาย ไม่เช่นนั้นจะหลุดออกจากระบบ -- -- -- Error loading the key file '%1' --Message: %2 -- มีปัญหาในการโหลดแฟ้มกุญแจ %1 --ข้อความ %2 -- -- -- Key files -- แฟ้มกุญแจ -- -- -- All files -- ทุกแฟ้ม -- -- -- Create Key File... -- สร้างแฟ้มกุญแจ... -- -- -- Error creating key file -- พบปัญหาในการสร้างแฟ้มกุญแจ -- -- -- Unable to create key file: %1 -- ไม่สามารถสร้างแฟ้มกุญแจ %1 -- -- -- Select a key file -- เลือกแฟ้มกุญแจ -- -- -- Key file selection -- เลือกแฟ้มกุญแจ -- -- -- Browse for key file -- เลือกแฟ้มกุญแจ -- -- -- Browse... -- เรียกดู... -- -- -- Generate a new key file -- สร้างแฟ้มกุญแจใหม่ -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- -- Invalid Key File -- -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- -- -- -- Suspicious Key File -- -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- ฐานข้อมูล (&D) -- -- -- &Help -- ช่วยเหลือ (&H) -- -- -- &Groups -- กลุ่ม (&G) -- -- -- &Tools -- เครื่องมือ (&T) -- -- -- &Quit -- ออก (&Q) -- -- -- &About -- เกี่ยวกับ (&A) -- -- -- Database settings -- การตั้งค่าฐานข้อมูล -- -- -- Copy username to clipboard -- คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด -- -- -- Copy password to clipboard -- คัดลอกรหัสผ่านไปคลิปบอร์ด -- -- -- &Settings -- การตั้งค่า (&S) -- -- -- &Title -- หัวเรื่อง (&T) -- -- -- Copy title to clipboard -- คัดลอกหัวข้อไปยังคลิปบอร์ด -- -- -- &URL -- URL (&U) -- -- -- Copy URL to clipboard -- คัดลอก URL ไปยัง คลิปบอร์ด -- -- -- &Notes -- บันทึก (&N) -- -- -- Copy notes to clipboard -- คัดลอกข้อมูลไปยังคลิปบอร์ด -- -- -- Copy &TOTP -- คัดลอก &TOTP -- -- -- E&mpty recycle bin -- ล้างถังรีไซเคิล -- -- -- Clear history -- ล้างประวัติ -- -- -- Access error for config file %1 -- มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 -- -- -- Settings -- ตั้งค่า -- -- -- Toggle window -- สลับหน้าต่าง -- -- -- Quit KeePassXC -- ออกจาก KeePassXC -- -- -- Please touch the button on your YubiKey! -- กรุณาแตะปุ่มบน YubiKey ของคุณ! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- คำเตือน คุณกำลังใช้งานที่ไม่เสถียรของ KeePassXC! --มีความเสี่ยงสูงในการเกิดความเสียหาย เก็บสำรองข้อมูลของคุณ --รุ่นนี้ไม่ได้มีไว้สำหรับการใช้ -- -- -- &Donate -- บริจาค -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- คำเตือน รุ่น Qt ของคุณอาจทำให้ KeePassXC ขัดข้องกับบนหน้าจอคีย์บอร์ท --พวกเราแนะนำให้คุณใช้ Applmage อยู่หน้าดาวน์โหลด -- -- -- &Import -- &นำเข้า -- -- -- Create a new database -- สร้างฐานข้อมูลใหม่ -- -- -- Merge from another KDBX database -- รวมฐานข้อมูลKDBXอีกชุด -- -- -- Add a new entry -- เพิ่มรายการใหม่ -- -- -- View or edit entry -- ดู หรือ แก้ไขรายการ -- -- -- Add a new group -- เพิ่มกลุ่มใหม่ -- -- -- Perform &Auto-Type -- ดำเนินการและพิมพ์อัตโนมัติ -- -- -- Open &URL -- เปิดและ URL -- -- -- Import a KeePass 1 database -- นำเข้า ฐานข้อมูล KeePass1... -- -- -- Import a CSV file -- นำเข้า แฟ้ม CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- หมายเหตุ คุณกำลังใช้งาน KeePassXC รุ่นก่อนวางจำหน่าย คาดว่าข้อบกพร่องบางอย่างและปัญหาเล็กน้อย รุ่นนี้ไม่ได้มีไว้สำหรับการใช้งานจริง -- -- -- Check for updates on startup? -- ตรวจสอบการอัปเดทเมื่อเริ่มโปรแกรม -- -- -- Would you like KeePassXC to check for updates on startup? -- คุณต้องการให้ KeePassXC ตรวจสอบเพื่ออัปเดตคลิกที่ปุ่มเปิด -- -- -- You can always check for updates manually from the application menu. -- คุณสามารถตรวจสอบการอัปเดตได้ด้วยตนเองจากเมนูแอปพลิเคชัน -- -- -- &Export -- -- -- -- Sort &A-Z -- -- -- -- Sort &Z-A -- -- -- -- &Password Generator -- -- -- -- Import a 1Password Vault -- -- -- -- &Getting Started -- -- -- -- &User Guide -- -- -- -- &Keyboard Shortcuts -- -- -- -- &Recent Databases -- -- -- -- &Entries -- -- -- -- Copy Att&ribute -- -- -- -- TOTP -- TOTP -- -- -- View -- -- -- -- Theme -- -- -- -- &Check for Updates -- -- -- -- &Open Database… -- -- -- -- &Save Database -- -- -- -- &Close Database -- -- -- -- &New Database… -- -- -- -- &Merge From Database… -- -- -- -- &New Entry… -- -- -- -- &Edit Entry… -- -- -- -- &Delete Entry… -- -- -- -- &New Group… -- -- -- -- &Edit Group… -- -- -- -- &Delete Group… -- -- -- -- Download All &Favicons… -- -- -- -- Sa&ve Database As… -- -- -- -- Database &Security… -- -- -- -- Database &Reports... -- -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- -- -- -- &Clone Entry… -- -- -- -- Move u&p -- -- -- -- Move entry one step up -- -- -- -- Move do&wn -- -- -- -- Move entry one step down -- -- -- -- Copy &Username -- -- -- -- Copy &Password -- -- -- -- Download &Favicon -- -- -- -- &Lock Databases -- -- -- -- &CSV File… -- -- -- -- &HTML File… -- -- -- -- KeePass 1 Database… -- -- -- -- 1Password Vault… -- -- -- -- CSV File… -- -- -- -- Show TOTP -- แสดง TOTP -- -- -- Show QR Code -- -- -- -- Set up TOTP… -- -- -- -- Report a &Bug -- -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- -- -- -- Go to online documentation -- -- -- -- Open User Guide -- -- -- -- Save Database Backup... -- -- -- -- Add key to SSH Agent -- -- -- -- Remove key from SSH Agent -- -- -- -- Compact Mode -- -- -- -- Automatic -- -- -- -- Light -- -- -- -- Dark -- -- -- -- Classic (Platform-native) -- -- -- -- Show Toolbar -- -- -- -- Show Preview Panel -- -- -- -- Don't show again for this version -- -- -- -- Restart Application? -- -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- ซ่อนชื่อผู้ใช้ -- -- -- Hide Passwords -- ซ่อนรหัสผ่าน -- -- -- -- ManageDatabase -- -- Database settings -- การตั้งค่าฐานข้อมูล -- -- -- Edit database settings -- แก้ไขการตั้งค่าฐานข้อมูล -- -- -- Unlock database -- ปลดล็อกฐานข้อมูล -- -- -- Unlock database to show more information -- -- -- -- Lock database -- ล็อกฐานข้อมูล -- -- -- -- ManageSession -- -- Disconnect -- หยุดเชื่อมต่อ -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- กำลังสร้างส่วนที่หายไป %1 [%2] -- -- -- Relocating %1 [%2] -- ย้าย% 1 [% 2] -- -- -- Overwriting %1 [%2] -- เขียนทับ % 1 [% 2] -- -- -- older entry merged from database "%1" -- รวมข้อมูลที่เก่ากว่าเข้ากับฐานข้อมูล "% 1" -- -- -- Adding backup for older target %1 [%2] -- กำลังเพิ่มการสำรองข้อมูลสำหรับเป้าหมายที่เก่ากว่า% 1 [% 2] -- -- -- Adding backup for older source %1 [%2] -- กำลังเพิ่มการสำรองข้อมูลสำหรับแหล่งข้อมูลที่เก่ากว่า% 1 [% 2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- การนำรายการแหล่งข้อมูลเก่ามาใช้ใหม่ที่ด้านบนของฐานข้อมูลใหม่กว่า% 1 [% 2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- การนำรายการแหล่งข้อมูลเก่ามาใช้ใหม่ที่ด้านบนของเป้าหมายใหม่กว่า% 1 [% 2] -- -- -- Synchronizing from newer source %1 [%2] -- เชื่อมต่อจากฐานข้อมูลใหม่ %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- เชื่อมต่อจากฐานข้อมูลเดิม %1 [%2] -- -- -- Deleting child %1 [%2] -- ลบข้อมูลลูก %1 [%2] -- -- -- Deleting orphan %1 [%2] -- ลบข้อมูลกำพร้า %1 [%2] -- -- -- Changed deleted objects -- เปลี่ยนสิ่งที่ถูกลบ -- -- -- Adding missing icon %1 -- เพิ่มไอคอนขาดหายไป % 1 -- -- -- Removed custom data %1 [%2] -- -- -- -- Adding custom data %1 [%2] -- -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- สร้าง ฐานข้อมูล Keepass XC ใหม่ -- -- -- Root -- Root group -- รูต -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- วิซาร์ดเพจ -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่า ฐานข้อมูล -- -- -- Advanced Settings -- การตั้งค่าขั้นสูง -- -- -- Simple Settings -- การตั้งค่าพื้นฐาน -- -- -- Encryption Settings -- การตั้งค่าการเข้ารหัสลับ -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- -- -- -- A set of credentials known only to you that protects your database. -- -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- การตั้งค่าการเข้ารหัส -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่าฐานข้อมูล -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- ข้อมูล ฐานข้อมูล ทั่วไป -- -- -- Please fill in the display name and an optional description for your new database: -- กรุณากรอกชื่อที่แสดง และคำอธิบายเพิ่มเติมสำหรับ ฐานข้อมูล ใหม่ของคุณ -- -- -- -- NixUtils -- -- Password Manager -- -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- -- -- -- Unable to init cipher for opdata01: %1 -- -- -- -- Unable to read all HMAC signature bytes -- -- -- -- Malformed OpData01 due to a failed HMAC -- -- -- -- Unable to process clearText in place -- -- -- -- Expected %1 bytes of clear-text, found %2 -- -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- -- -- -- Directory .opvault must be readable -- -- -- -- Directory .opvault/default must exist -- -- -- -- Directory .opvault/default must be readable -- -- -- -- Unable to decode masterKey: %1 -- -- -- -- Unable to derive master key: %1 -- -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- แฟ้มกุญแจ ไม่ถูกต้อง คาดว่าจะมี กุญแจ OpenSSH -- -- -- PEM boundary mismatch -- เงื่อนไข PEM ไม่ตรงกัน -- -- -- Base64 decoding failed -- การถอดรหัส Base64 ล้มเหลว -- -- -- Key file way too small. -- แฟ้มกุญแจ มีขนาดเล็กมาก -- -- -- Key file magic header id invalid -- รหัสหัวไฟล์กุญแจเมจิกไม่ถูกต้อง -- -- -- Found zero keys -- ไมพบกุญแจ -- -- -- Failed to read public key. -- ไม่สามารถอ่านกุญแจสาธารณะ -- -- -- Corrupted key file, reading private key failed -- ไฟล์กุญแจเสียหาย การอ่านกุญแจส่วนตัวล้มเหลว -- -- -- No private key payload to decrypt -- ไม่มีส่วนข้อมูลของกุญแจส่วนตัวเพื่อถอดรหัสลับ -- -- -- Trying to run KDF without cipher -- พยายามจะเรียกใช้ KDF โดยไม่ใช้การเข้ารหัส -- -- -- Passphrase is required to decrypt this key -- จำเป็นต้องใช้วลีรหัสผ่านเพื่อถอดรหัสผ่านกุญแจนี้ -- -- -- Key derivation failed, key file corrupted? -- การสร้างกุญแจล้มเหลว ไฟล์กุญแจมีปัญหาหรือไม่ -- -- -- Decryption failed, wrong passphrase? -- การถอดรหัสลับล้มเหลว ใส่วลีรหัสผ่านผิดหรือไม่ -- -- -- Unexpected EOF while reading public key -- เกิด EOF ที่ไม่คาดคิดขณะอ่านกุญแจสาธารณะ -- -- -- Unexpected EOF while reading private key -- เกิด EOF ที่ไม่คาดคิดขณะอ่านกุญแจส่วนตัว -- -- -- Can't write public key as it is empty -- ไม่สามารถเขียนกุญแจสาธารณะได้เนื่องจากไม่มี -- -- -- Unexpected EOF when writing public key -- เกิด EOF ที่ไม่คาดคิดขณะเขียนกุญแจสาธารณะ -- -- -- Can't write private key as it is empty -- ไม่สามารถเขียนกุญแจส่วนตัวได้เนื่องจากไม่มี -- -- -- Unexpected EOF when writing private key -- เกิด EOF ที่ไม่คาดคิดขณะเขียนกุญแจส่วนตัว -- -- -- Unsupported key type: %1 -- ชนิดกุญแจที่ไม่รองรับ: %1 -- -- -- Unknown cipher: %1 -- การเข้ารหัสที่ไม่รู้จัก: %1 -- -- -- Cipher IV is too short for MD5 kdf -- การเข้ารหัส IV สั้นเกินไปสำหรับ MD5 kdf -- -- -- Unknown KDF: %1 -- KDF ที่ไม่รู้จัก: %1 -- -- -- Unknown key type: %1 -- ประเภทกุญแจที่ไม่รู้จัก: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- -- -- -- Passwords match so far -- -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- -- -- -- -- PasswordEditWidget -- -- Enter password: -- กรอกรหัสผ่าน -- -- -- Confirm password: -- ยืนยันรหัสผ่าน -- -- -- Password -- รหัสผ่าน -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>รหัสผ่านเป็นวิธีพื้นฐานในการปกป้องฐานข้อมูลของคุณ</p><p>รหัสผ่านที่ดีควรยาวและมีเอกลักษณ์ KeePassXC สร้างรหัสผ่านให้คุณได้</p> -- -- -- Passwords do not match. -- รหัสผ่านไม่ตรง -- -- -- Password field -- ช่องรหัสผ่าน -- -- -- Repeat password field -- -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- ความแข็งแรง -- -- -- entropy -- เอนโทรปี -- -- -- Password -- รหัสผ่าน -- -- -- Character Types -- ชนิดอักขระ -- -- -- Numbers -- ตัวเลข -- -- -- Extended ASCII -- Extended ASCII -- -- -- -- Exclude look-alike characters -- ไม่ใช้อักขระที่หน้าตาคล้ายกัน -- -- -- Pick characters from every group -- เลือกใช้ตัวอักขระจากทุกกลุ่ม -- -- -- &Length: -- ความยาว (&L) -- -- -- Passphrase -- วลีรหัสผ่าน -- -- -- Wordlist: -- รายการคำ -- -- -- Word Separator: -- ตัวแบ่งคำ -- -- -- Close -- ปิด -- -- -- Entropy: %1 bit -- เอนโทรปี: %1 บิต -- -- -- Password Quality: %1 -- คุณภาพรหัสผ่าน: %1 -- -- -- Poor -- Password quality -- แย่ -- -- -- Weak -- Password quality -- อ่อนแอ -- -- -- Good -- Password quality -- ดี -- -- -- Excellent -- Password quality -- ดีมาก -- -- -- Switch to advanced mode -- เปลี่ยนเป็นโหมดใช้งานขั้นสูง -- -- -- Advanced -- ขั้นสูง -- -- -- Braces -- วงเล็บปีกกา -- -- -- Punctuation -- วรรคตอน -- -- -- Quotes -- คำพูด -- -- -- Logograms -- สัญลักษณ์หรือตัวอักษรที่ใช้แทนคำ -- -- -- Character set to exclude from generated password -- ชุดอักขระที่ต้องการยกเว้นจากรหัสผ่านที่สร้างขึ้น -- -- -- Do not include: -- ไม่รวม -- -- -- Add non-hex letters to "do not include" list -- เพิ่มตัวอักขระที่ไม่ใช่เลขฐานสิบหกในรายการ "ห้ามรวม" -- -- -- Hex -- เลขฐานสิบหก -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- อักขระที่ยกเว้น: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- -- -- -- Upper-case letters -- -- -- -- Lower-case letters -- -- -- -- Special characters -- -- -- -- Math Symbols -- -- -- -- Dashes and Slashes -- -- -- -- Excluded characters -- -- -- -- Hex Passwords -- -- -- -- Password length -- -- -- -- Word Case: -- -- -- -- Regenerate password -- -- -- -- Copy password -- -- -- -- lower case -- -- -- -- UPPER CASE -- -- -- -- Title Case -- -- -- -- Generate Password -- -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- -- -- -- Word Count: -- จำนวนคำ: -- -- -- Esc -- -- -- -- Apply Password -- -- -- -- Ctrl+S -- -- -- -- Regenerate password (%1) -- -- -- -- Special Characters -- อักขระพิเศษ -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- สถิติ -- -- -- Very weak password -- -- -- -- Password entropy is %1 bits -- -- -- -- Weak password -- -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- -- -- -- Password has expired -- -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- -- -- -- Password expires in %1 days -- -- -- -- Password will expire soon -- -- -- -- Password expires on %1 -- -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- เขียนทับ -- -- -- Delete -- ลบ -- -- -- Move -- เคลื่อนย้าย -- -- -- Empty -- ว่างเปล่า -- -- -- Remove -- นำออก -- -- -- Skip -- ข้ามไป -- -- -- Disable -- ปิดใช้ -- -- -- Merge -- ผสาน -- -- -- Continue -- -- -- -- -- QObject -- -- Database not opened -- ไม่ได้เปิดฐานข้อมูล -- -- -- Database hash not available -- ฐานข้อมูล hash ไม่พร้อมใช้งาน -- -- -- Client public key not received -- ไม่ได้รับกุญแจสาธารณะของผู้รับบริการ -- -- -- Cannot decrypt message -- ไม่สามารถถอดรหัสข้อความ -- -- -- Action cancelled or denied -- การกระทำถูกยกเลิกหรือปฏิเสธ -- -- -- KeePassXC association failed, try again -- การเชื่อมโยง KeePassXC ล้มเหลว ลองอีกครั้ง -- -- -- Encryption key is not recognized -- ไม่รู้จักกุญแจเข้ารหัสลับ -- -- -- Incorrect action -- การดำเนินการที่ไม่ถูกต้อง -- -- -- Empty message received -- ได้รับข้อความว่างเปล่า -- -- -- No URL provided -- ไม่ได้ระบุ URL -- -- -- No logins found -- ไม่พบการเข้าสู่ระบบ -- -- -- Unknown error -- ความผิดพลาดที่ไม่อาจระบุได้ -- -- -- Add a new entry to a database. -- เพิ่มรายการใหม่ไปยังฐานข้อมูล -- -- -- Path of the database. -- เส้นทางของฐานข้อมูล -- -- -- Key file of the database. -- แฟ้มกุญแจของฐานข้อมูล -- -- -- path -- เส้นทาง -- -- -- Username for the entry. -- ชื่อผู้ใช้สำหรับรายการ -- -- -- username -- ชื่อผู้ใช้ -- -- -- URL for the entry. -- URL สำหรับรายการ. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- พร้อมสำหรับรหัสผ่านของรายการ -- -- -- Generate a password for the entry. -- สร้างรหัสผ่านสำหรับรายการ -- -- -- length -- ความยาว -- -- -- Path of the entry to add. -- เส้นทางของรายการที่จะเพิ่ม -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- เส้นทางของรายการไปยังคลิป -- -- -- Timeout in seconds before clearing the clipboard. -- ใกล้หมดเวลาก่อนที่จะล้างคลิปบอร์ด -- -- -- Edit an entry. -- แก้ไขรายการ -- -- -- Title for the entry. -- หัวข้อสำหรับรายการ -- -- -- title -- หัวข้อ -- -- -- Path of the entry to edit. -- เส้นทางของรายการที่จะแก้ไข -- -- -- Estimate the entropy of a password. -- คาดคะเนเอนโทรปีของรหัสผ่าน -- -- -- Password for which to estimate the entropy. -- รหัสผ่านสำหรับคาดคะเนเอนโทรปี -- -- -- Perform advanced analysis on the password. -- วิเคราะห์รหัสผ่านชั้นสูง -- -- -- -- --Available commands: -- -- -- --คำสั่งที่พร้อมใช้งานคือ -- -- -- -- Name of the command to execute. -- ชื่อของคำสั่งที่จะดำเนินการ -- -- -- List database entries. -- แสดงรายการฐานข้อมูล -- -- -- Path of the group to list. Default is / -- เส้นทางของกลุ่มที่จะสร้างรายการ ค่าเริ่มต้นคือ -- -- -- Find entries quickly. -- ค้นหารายการอย่างรวดเร็ว -- -- -- Search term. -- คำที่ใช้ค้นหา -- -- -- Merge two databases. -- ผสานสองฐานข้อมูลเข้าด้วยกัน -- -- -- Path of the database to merge from. -- เส้นทางของฐานข้อมูลที่จะเอามาผสาน -- -- -- Use the same credentials for both database files. -- ใช้ข้อมูลประจำตัวชุดเดียวกันเพื่อเข้าระบบสำหรับไฟล์ฐานข้อมูลทั้งคู่ -- -- -- Key file of the database to merge from. -- ไฟล์กุญแจของฐานข้อมูลที่จะเอามาผสาน -- -- -- Show an entry's information. -- แสดงข้อมูลของรายการ -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- ชื่อของคุณสมบัติที่จะแสดง ตัวเลือกนี้สามารถถูกระบุได้มากกว่าหนึ่งครั้ง โดยคุณสมบัติถูกแสดงบรรทัดอันหนึ่งอันตามลำดับ ถ้าไม่มีคุณสมบัติใดถูกระบุ คุณสมบัติเริ่มต้นจะถูกเลือกแทน -- -- -- attribute -- คุณสมบัติ -- -- -- Name of the entry to show. -- ชื่อของรายการที่จะแสดง -- -- -- NULL device -- อุปกรณ์ NULL -- -- -- error reading from device -- ข้อผิดพลาดการอ่านจากอุปกรณ์ -- -- -- malformed string -- รูปแบบสตริงไม่ถูกต้อง -- -- -- missing closing quote -- เครื่องหมายปิดคำพูดหายไป -- -- -- Group -- กลุ่ม -- -- -- Title -- หัวข้อ -- -- -- Username -- ชื่อผู้ใช้ -- -- -- Password -- รหัสผ่าน -- -- -- Notes -- บันทึก -- -- -- Last Modified -- ถูกแก้ไขล่าสุด -- -- -- Created -- ถูกสร้าง -- -- -- Browser Integration -- การทำงานร่วมกับเบราว์เซอร์ -- -- -- SSH Agent -- ตัวแทน SSH -- -- -- Generate a new random diceware passphrase. -- สร้างวลีรหัสผ่าน diceware ใหม่แบบสุ่ม -- -- -- Word count for the diceware passphrase. -- จำนวนคำสำหรับวลีรหัสผ่าน diceware -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- รายการคำสำหรับการสร้าง diceware --[ค่าเริ่มต้น: EFF ภาษาอังกฤษ] -- -- -- Generate a new random password. -- สร้างรหัสผ่านใหม่แบบสุ่ม -- -- -- Could not create entry with path %1. -- ไม่สามารถสร้างรายการด้วยเส้นทาง %1 -- -- -- Enter password for new entry: -- ใส่รหัสผ่านสำหรับรายการใหม่ -- -- -- Writing the database failed %1. -- การเขียนฐานข้อมูลล้มเหลว %1 -- -- -- Successfully added entry %1. -- เพิ่มรายการ %1 สำเร็จแล้ว -- -- -- Invalid timeout value %1. -- ค่าหมดเวลาไม่ถูกต้อง %1 -- -- -- Entry %1 not found. -- ไม่พบรายการ %1 -- -- -- Entry with path %1 has no TOTP set up. -- รายการด้วยเส้นทาง %1 ไม่มีการตั้งค่า TOTP -- -- -- Clearing the clipboard in %1 second(s)... -- ล้างข้อมูลคลิปบอร์ดใน %1 วินาที -- -- -- Clipboard cleared! -- คลิปบอร์ดถูกล้างแล้ว -- -- -- Silence password prompt and other secondary outputs. -- รหัสผ่านเงียบพร้อมท์และผลลัพธ์รองอื่น -- -- -- count -- CLI parameter -- การนับจำนวน -- -- -- Could not find entry with path %1. -- ไม่สามารถหารายการสำหรับเส้นทาง %1 -- -- -- Not changing any field for entry %1. -- ไม่มีการเปลี่ยนแปลงฟิลด์ของรายการ %1 -- -- -- Enter new password for entry: -- ใส่รหัสผ่านใหม่สำหรับรายการ -- -- -- Writing the database failed: %1 -- เขียนฐานข้อมูลล้มเหลว %1 -- -- -- Successfully edited entry %1. -- แก้ไขรายการสำเร็จแล้ว %1 -- -- -- Length %1 -- ความยาว %1 -- -- -- Entropy %1 -- เอนโทรปี %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Multi-word บิตมากพิเศษ %1 -- -- -- Type: Bruteforce -- ชนิด บรู๊ทฟอร์ส -- -- -- Type: Dictionary -- ชนิด ไดเรคทอรี -- -- -- Type: Dict+Leet -- ชนิด: พจนานุกรม+ลีท -- -- -- Type: User Words -- ชนิด: User Words -- -- -- Type: User+Leet -- ชนิด: ผู้ใช้+ ลีท -- -- -- Type: Repeated -- ชนิด: คำซ้ำ -- -- -- Type: Sequence -- ชนิด: ลำดับ -- -- -- Type: Spatial -- ชนิด: เชิงพื้นที่ -- -- -- Type: Date -- ชนิด: วันที่ -- -- -- Type: Bruteforce(Rep) -- ชนิด: บรู๊ทฟอร์ส(Rep) -- -- -- Type: Dictionary(Rep) -- พิมพ์: Dictionary(Rep) -- -- -- Type: Dict+Leet(Rep) -- พิมพ์: Dict+Leet(Rep) -- -- -- Type: User Words(Rep) -- พิมพ์: User Words(Rep) -- -- -- Type: User+Leet(Rep) -- พิมพ์: User+Leet(Rep) -- -- -- Type: Repeated(Rep) -- พิมพ์: Repeated(Rep) -- -- -- Type: Sequence(Rep) -- พิมพ์: Sequence(Rep) -- -- -- Type: Spatial(Rep) -- พิมพ์: Spatial(Rep) -- -- -- Type: Date(Rep) -- พิมพ์: Date(Rep) -- -- -- Type: Unknown%1 -- ชนิด: ไม่รู้จัก%1 -- -- -- Entropy %1 (%2) -- เอนโทรปี: %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- ***รหัสผ่านความยาว (%1) != sum of length of parts (%2) *** -- -- -- Failed to load key file %1: %2 -- การโหลดไฟล์กุญแจล้มเหลว %1: %2 -- -- -- Length of the generated password -- ความยาวของรหัสผ่านที่สร้างแล้ว -- -- -- Use lowercase characters -- ใช้ตัวพิมพ์เล็ก -- -- -- Use uppercase characters -- ใช้ตัวพิมพ์ใหญ่ -- -- -- Use special characters -- ใช้อักขระพิเศษ -- -- -- Use extended ASCII -- ใช้ extended ASCII -- -- -- Exclude character set -- ไม่รวมชุดตัวอักษร -- -- -- chars -- อักขระ -- -- -- Exclude similar looking characters -- ไม่รวมตัวอักษรที่ดูคล้ายกัน -- -- -- Include characters from every selected group -- รวมตัวอักษรจากทุกกลุ่มที่เลือกไว้ -- -- -- Recursively list the elements of the group. -- สร้างรายกายส่วนประกอบของกลุ่มซ้ำไปมา -- -- -- Cannot find group %1. -- ไม่สามารถหากลุ่ม %1 -- -- -- Error reading merge file: --%1 -- การอ่านไฟล์ที่รวมกันล้มเหลวคือ %1 -- -- -- Unable to save database to file : %1 -- ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์คือ %1 -- -- -- Unable to save database to file: %1 -- ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์คือ %1 -- -- -- Successfully recycled entry %1. -- รายการรีไซเคิลสำเร็จ %1 -- -- -- Successfully deleted entry %1. -- ลบรายการสำเร็จ %1 -- -- -- Show the entry's current TOTP. -- แสดงรายการ TOTP ปัจจุบัน -- -- -- ERROR: unknown attribute %1. -- ข้อผิดพลาด: ไม่รู้จักคุณสมบัติ %1 -- -- -- No program defined for clipboard manipulation -- ไม่มีโปรแกรมกำหนดสำหรับการจัดการคลิปบอร์ด -- -- -- file empty -- ไฟล์ว่างเปล่า -- -- -- %1: (row, col) %2,%3 -- %1: (row, col) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- การตั้งค่าไม่ถูกต้อง -- -- -- Invalid Key -- TOTP -- กุญแจไม่ถูกต้อง -- -- -- Message encryption failed. -- การเข้ารหัสลับข้อความล้มเหลว -- -- -- No groups found -- ไม่พบกลุ่ม -- -- -- Create a new database. -- สร้างฐานข้อมูลใหม่ -- -- -- File %1 already exists. -- มีไฟล์ %1 อยู่แล้ว -- -- -- Loading the key file failed -- การโหลดไฟล์กุญแจล้มเหลว -- -- -- No key is set. Aborting database creation. -- ไม่มีการตั้งค่ากุญแจ ยกเลิกการสร้างฐานข้อมูล -- -- -- Failed to save the database: %1. -- การบันทึกฐานข้อมูลล้มเหลว % 1 -- -- -- Successfully created new database. -- การสร้างฐานข้อมูลใหม่ประสบความสำเร็จ -- -- -- Creating KeyFile %1 failed: %2 -- การสร้างกุญแจไฟล์ %1 ล้มเหลว: %2 -- -- -- Loading KeyFile %1 failed: %2 -- การโหลดกุญแจไฟล์ % 1 ล้มเหลว:% 2 -- -- -- Path of the entry to remove. -- เส้นทางของรายการที่จะลบ -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- ไฟล์ single-instance lock ที่มีอยู่ไม่ถูกต้อง เปิด instance ใหม่ -- -- -- The lock file could not be created. Single-instance mode disabled. -- ไม่สามารถสร้าง lock file ได้ โหมด Single-instance ถูกปิดใช้งาน -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - แอปจัดการรหัสผ่านข้ามแพลตฟอร์ม -- -- -- filenames of the password databases to open (*.kdbx) -- ชื่อไฟล์ของรหัสผ่านฐานข้อมูลที่จะเปิด (*.kdbx) -- -- -- path to a custom config file -- เส้นทางไปยังไฟล์ปรับแต่งที่กำหนดเอง -- -- -- key file of the database -- แฟ้มกุญแจสำหรับฐานข้อมูลดังกล่าว -- -- -- read password of the database from stdin -- อ่านรหัสผ่านของฐานข้อมูลจาก stdin -- -- -- Another instance of KeePassXC is already running. -- อีกอินสแตนซ์ของ KeePassXC กำลังทำงานอยู่ -- -- -- Fatal error while testing the cryptographic functions. -- เกิดข้อผิดพลาดร้ายแรงขณะทดสอบฟังก์ชั่นการเข้ารหัส -- -- -- KeePassXC - Error -- KeePassXC - ข้อผิดพลาด -- -- -- Database password: -- รหัสผ่านฐานข้อมูล -- -- -- Cannot create new group -- ไม่สามารถสร้างกลุ่มใหม่ได้ -- -- -- Deactivate password key for the database. -- -- -- -- Displays debugging information. -- -- -- -- Deactivate password key for the database to merge from. -- -- -- -- Version %1 -- -- -- -- Build Type: %1 -- ชนิดรุ่นที่สร้าง: %1 -- -- -- Revision: %1 -- การปรับปรุง: %1 -- -- -- Distribution: %1 -- การจัดจำหน่าย: %1 -- -- -- Debugging mode is disabled. -- -- -- -- Debugging mode is enabled. -- -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- ระบบปฏิบัติการ: %1 --สถาปัตยกรรม CPU: %2 --เคอร์เนล: %3 %4 -- -- -- Auto-Type -- Auto-Type -- -- -- KeeShare (signed and unsigned sharing) -- -- -- -- KeeShare (only signed sharing) -- -- -- -- KeeShare (only unsigned sharing) -- -- -- -- YubiKey -- -- -- -- TouchID -- -- -- -- None -- ไม่มี -- -- -- Enabled extensions: -- ส่วนขยายที่เปิดใช้: -- -- -- Cryptographic libraries: -- -- -- -- Cannot generate a password and prompt at the same time! -- -- -- -- Adds a new group to a database. -- -- -- -- Path of the group to add. -- -- -- -- Group %1 already exists! -- -- -- -- Group %1 not found. -- -- -- -- Successfully added group %1. -- -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- -- -- -- FILENAME -- -- -- -- Analyze passwords for weaknesses and problems. -- -- -- -- Failed to open HIBP file %1: %2 -- -- -- -- Evaluating database entries against HIBP file, this will take a while... -- -- -- -- Close the currently opened database. -- -- -- -- Display this help. -- -- -- -- slot -- -- -- -- Invalid word count %1 -- -- -- -- The word list is too small (< 1000 items) -- -- -- -- Exit interactive mode. -- -- -- -- Exports the content of a database to standard output in the specified format. -- -- -- -- Unable to export database to XML: %1 -- -- -- -- Unsupported format %1 -- -- -- -- Use numbers -- -- -- -- Invalid password length %1 -- -- -- -- Display command help. -- -- -- -- Available commands: -- -- -- -- Import the contents of an XML database. -- -- -- -- Path of the XML database export. -- -- -- -- Path of the new database. -- -- -- -- Successfully imported database. -- -- -- -- Unknown command %1 -- -- -- -- Flattens the output to single lines. -- -- -- -- Only print the changes detected by the merge operation. -- -- -- -- Yubikey slot for the second database. -- -- -- -- Successfully merged %1 into %2. -- -- -- -- Database was not modified by merge operation. -- ฐานข้อมูลไม่ถูกเปลี่ยนแปลงโดยการดำเนินการผสาน -- -- -- Moves an entry to a new group. -- -- -- -- Path of the entry to move. -- -- -- -- Path of the destination group. -- -- -- -- Could not find group with path %1. -- -- -- -- Entry is already in group %1. -- -- -- -- Successfully moved entry %1 to group %2. -- -- -- -- Open a database. -- -- -- -- Path of the group to remove. -- -- -- -- Cannot remove root group from database. -- -- -- -- Successfully recycled group %1. -- -- -- -- Successfully deleted group %1. -- -- -- -- Failed to open database file %1: not found -- -- -- -- Failed to open database file %1: not a plain file -- -- -- -- Failed to open database file %1: not readable -- -- -- -- Enter password to unlock %1: -- -- -- -- Invalid YubiKey slot %1 -- -- -- -- Enter password to encrypt database (optional): -- -- -- -- HIBP file, line %1: parse error -- -- -- -- Secret Service Integration -- -- -- -- User name -- -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- -- -- -- Show the protected attributes in clear text. -- -- -- -- Browser Plugin Failure -- โปรแกรมเสริมเบราว์เซอร์ล้มเหลว -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- -- -- -- Entry's "%1" attribute copied to the clipboard! -- -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- -- -- -- Set the key file for the database. -- -- -- -- Set a password for the database. -- -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- -- -- -- Unable to import XML database: %1 -- -- -- -- Show a database's information. -- -- -- -- UUID: -- -- -- -- Name: -- -- -- -- Description: -- -- -- -- Cipher: -- -- -- -- KDF: -- -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- -- -- -- Do you want to create a database with an empty password? [y/N]: -- -- -- -- Repeat password: -- -- -- -- Error: Passwords do not match. -- -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- -- -- -- AES 256-bit -- -- -- -- Twofish 256-bit -- -- -- -- ChaCha20 256-bit -- -- -- -- Benchmark %1 delay -- -- -- -- %1 ms -- milliseconds -- -- -- -- %1 s -- seconds -- -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- ไอคอน -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- เกิดข้อผิดพลาด zlib ภายในในระหว่างการบีบอัด -- -- -- Error writing to underlying device: -- เกิดข้อผิดพลาดในการเขียนไปยังอุปกรณ์ที่รองรับ -- -- -- Error opening underlying device: -- เกิดข้อผิดพลาดในการเปิดอุปกรณ์อ้างอิง -- -- -- Error reading data from underlying device: -- เกิดข้อผิดพลาดในการอ่านอุปกรณ์อ้างอิง -- -- -- Internal zlib error when decompressing: -- ข้อผิดพลาด zlib ภายในเมื่อคลายการบีบอัด -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- รูปแบบ gzip ไม่รองรับ zlib เวอร์ชั่นนี้ -- -- -- Internal zlib error: -- ความผิดพลาดภายในของ zlib -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- -- -- -- Bad -- Password quality -- -- -- -- Bad — password must be changed -- -- -- -- Poor -- Password quality -- แย่ -- -- -- Poor — password should be changed -- -- -- -- Weak -- Password quality -- อ่อนแอ -- -- -- Weak — consider changing the password -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- Please wait, health data is being calculated... -- -- -- -- Congratulations, everything is healthy! -- -- -- -- Title -- หัวข้อ -- -- -- Path -- เส้นทาง -- -- -- Score -- -- -- -- Reason -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- -- -- -- Perform Online Analysis -- -- -- -- Also show entries that have been excluded from reports -- -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- -- -- -- Congratulations, no exposed passwords! -- -- -- -- Title -- หัวข้อ -- -- -- Path -- เส้นทาง -- -- -- Password exposed… -- -- -- -- (Excluded) -- -- -- -- This entry is being excluded from reports -- -- -- -- once -- -- -- -- up to 10 times -- -- -- -- up to 100 times -- -- -- -- up to 1000 times -- -- -- -- up to 10,000 times -- -- -- -- up to 100,000 times -- -- -- -- up to a million times -- -- -- -- millions of times -- -- -- -- Edit Entry... -- -- -- -- Exclude from reports -- -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- -- -- -- Name -- ชื่อ -- -- -- Value -- ค่า -- -- -- Please wait, database statistics are being calculated... -- -- -- -- Database name -- ชื่อฐานข้อมูล -- -- -- Description -- คำอธิบาย -- -- -- Location -- ที่ตั้ง -- -- -- Last saved -- บันทึกครั้งสุดท้าย -- -- -- Unsaved changes -- ความเปลี่ยนแปลงที่ยังไม่ได้บันทึก -- -- -- yes -- ใช่ -- -- -- no -- ไม่ -- -- -- The database was modified, but the changes have not yet been saved to disk. -- -- -- -- Number of groups -- จำนวนกลุ่ม -- -- -- Number of entries -- จำนวนรายการ -- -- -- Number of expired entries -- จำนวนรายการที่หมดอายุ -- -- -- The database contains entries that have expired. -- ฐานข้อมูลมีรายการที่หมดอายุแล้ว -- -- -- Unique passwords -- รหัสผ่านที่ไม่ซ้ำ -- -- -- Non-unique passwords -- รหัสผ่านที่ซ้ำ -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- มากกว่า 10% ของรหัสผ่านถูกใช้ซ้ำ ควรใช้รหัสผ่านที่ไม่ซ้ำถ้าทำได้ -- -- -- Maximum password reuse -- -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- -- -- -- Number of short passwords -- -- -- -- Recommended minimum password length is at least 8 characters. -- -- -- -- Number of weak passwords -- -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- -- -- -- Entries excluded from reports -- -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- -- -- -- Average password length -- -- -- -- %1 characters -- %1 ตัวอักษร -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- -- -- -- -- SSHAgent -- -- Agent connection failed. -- การเชื่อมต่อตัวแทนล้มเหลว -- -- -- Agent protocol error. -- ตัวแทนโพรโทคอลผิดพลาด -- -- -- No agent running, cannot add identity. -- ไม่มีการเรียกใช้ตัวแทน ไม่สามารถเพิ่มตัวตน -- -- -- No agent running, cannot remove identity. -- ไม่มีการใช้ตัวแทน ไม่สามารถลบตัวตน -- -- -- Agent refused this identity. Possible reasons include: -- ตัวแทนปฏิเสธตัวตนนี้ เหตุผลที่เป็นไปได้คือ -- -- -- The key has already been added. -- เพิ่มกุญแจแล้ว -- -- -- Restricted lifetime is not supported by the agent (check options). -- ไม่รับรองอายุการใช้งานที่จำกัดโดยตัวแทน ตรวจสอบตัวเลือก -- -- -- A confirmation request is not supported by the agent (check options). -- ไม่รองรับการยืนยันคำร้องโดยตัวแทน ตรวจสอบตัวเลือก -- -- -- Key identity ownership conflict. Refusing to add. -- -- -- -- No agent running, cannot list identities. -- -- -- -- -- SearchHelpWidget -- -- Search Help -- ตัวช่วยค้นหา -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- คำค้นมีดังนี้: [modifiers][field:]["]term["] -- -- -- Every search term must match (ie, logical AND) -- คำค้นทุกคำต้องสอดคล้อง เช่น โลจิคัล AND -- -- -- Modifiers -- ตัวแก้ไข -- -- -- exclude term from results -- แยกคำออกจากผลลัพธ์ -- -- -- match term exactly -- การจับคู่คำสอดคล้องกัน -- -- -- use regex in term -- ใช้ regex ในคำ -- -- -- Fields -- ฟิลด์ -- -- -- Term Wildcards -- อักขระตัวแทนคำ -- -- -- match anything -- จับคู่ทุกๆอย่าง -- -- -- match one -- จับคู่หนึ่ง -- -- -- logical OR -- โลจิคัล OR -- -- -- Examples -- ตัวอย่าง -- -- -- -- SearchWidget -- -- Search -- ค้นหา -- -- -- Limit search to selected group -- จำกัดการค้นไว้สำหรับเฉพาะกลุ่มที่เลือก -- -- -- Search Help -- ตัวช่วยค้นหา -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- ค้นหา %1 -- -- -- Case sensitive -- คำนึงถึงอักษรทั้งตัวใหญ่และเล็ก -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- ตัวเลือก -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- General -- ทั่วไป -- -- -- Show notification when credentials are requested -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- -- Exposed database groups: -- -- -- -- Authorization -- ตรวจยืนยันสิทธิ์ -- -- -- These applications are currently connected: -- -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- ใช้งานอยู่ -- -- -- Allow export -- อนุญาติให้นำออก -- -- -- Allow import -- อนุญาติให้นำเข้า -- -- -- Own certificate -- เป็นเจ้าของใบรับรอง -- -- -- Fingerprint: -- ลายนิ้วมือ -- -- -- Certificate: -- ใบรับรอง -- -- -- Signer -- ผู้เซ็นชื่อ -- -- -- Key: -- กุญแจ -- -- -- Generate -- สร้าง -- -- -- Import -- นำเข้า -- -- -- Export -- นำออก -- -- -- Imported certificates -- นำเข้าใบรับรองแล้ว -- -- -- Trust -- น่าเชื่อถือ -- -- -- Ask -- ถาม -- -- -- Untrust -- ไม่น่าเชื่อถือ -- -- -- Remove -- นำออก -- -- -- Path -- เส้นทาง -- -- -- Status -- สถานะ -- -- -- Fingerprint -- ลายนิ้วมือ -- -- -- Certificate -- ใบรับรอง -- -- -- Trusted -- เชื่อถือได้ -- -- -- Untrusted -- เชื่อถือไม่ได้ -- -- -- Unknown -- ไม่รู้จัก -- -- -- key.share -- Filetype for KeeShare key -- แบ่งปันกุญแจ -- -- -- KeeShare key file -- แฟ้มกุญแจ KeeShare หลัก -- -- -- All files -- ทุกไฟล์ -- -- -- Select path -- เลือกเส้นทาง -- -- -- Exporting changed certificate -- นำออกใบรับรองที่เปลี่ยนแปลงแล้ว -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- ใบรับรองที่นำออกแล้วไม่ใช่ฉบับเดียวกับที่ใช้งานอยู่ คุณต้องการนำใบรับรองปัจจุบันออกหรือไม่ -- -- -- Signer: -- ผู้ลงชื่อ -- -- -- Allow KeeShare imports -- อนุญาตการนำเข้า KeeShare -- -- -- Allow KeeShare exports -- อนุญาตการส่งออก KeeShare -- -- -- Only show warnings and errors -- -- -- -- Key -- กุญแจ -- -- -- Signer name field -- -- -- -- Generate new certificate -- -- -- -- Import existing certificate -- -- -- -- Export own certificate -- -- -- -- Known shares -- -- -- -- Trust selected certificate -- -- -- -- Ask whether to trust the selected certificate every time -- -- -- -- Untrust selected certificate -- -- -- -- Remove selected certificate -- -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- ไม่สามารถเขียนทับที่จัดเก็บ ที่แบ่งปันไว้ และเซ็นแล้ว- ไม่อนุญาตการนำออก -- -- -- Could not write export container (%1) -- ไม่สามารถเขียนที่จัดเก็บที่ส่งออกได้ (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- ไม่สามารถฝังลายเซ็น ไม่สามารถเปิดไฟล์เพือเขียน (%1) -- -- -- Could not embed signature: Could not write file (%1) -- ไม่สามารถฝังลายเซ็น ไม่สามารถเขียนไฟล์ (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- ไม่สามารถฝังฐานข้อมูล ไม่สามารถเปิดไฟล์เพื่อทำการเขียน (%1) -- -- -- Could not embed database: Could not write file (%1) -- ไม่สามารถฝังฐานข้อมูล ไม่สามารถเขียนไฟล์ได้ (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- ไม่รองรับการเขียนทับการแชร์ที่จัดเก็บที่ไม่ได้ลงชื่อ - ป้องกันการส่งออก -- -- -- Could not write export container -- ไม่สามารถนำออกที่จัดเก็บได้ -- -- -- Unexpected export error occurred -- เกิดข้อผิดพลาดในการส่งออกที่ไม่คาดคิด -- -- -- -- ShareImport -- -- Import from container without signature -- นำเข้าจากที่จัดเก็บโดยไม่มีลายเซ็น -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- เราไม่สามารถยืนยันความถูกต้องของฐานข้อมูลในที่จัดเก็บที่แบ่งปันไว้ เพราะไม่ถูกเซ็น คุณต้องการนำเข้าจาก %1 จริงๆหรือไม่ -- -- -- Import from container with certificate -- นำเข้าที่จัดเก็บด้วยใบรับรอง -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- คุณเชื่อถือ %1 การพิมพ์ลายนิ้วมือ %2 จาก%3? {1 ?} {2 ?} -- -- -- Not this time -- ไม่ใช่เวลานี้ -- -- -- Never -- ไม่เคย -- -- -- Always -- เสมอ -- -- -- Just this time -- เวลานี้ -- -- -- Signed share container are not supported - import prevented -- ไม่รองรับที่จัดเก็บแบ่งปันที่เซ็นไว้ - ไม่อนุญาตการนำเข้า -- -- -- File is not readable -- ไฟล์ไม่สามารถอ่านได้ -- -- -- Invalid sharing container -- ที่จัดเก็บที่แชร์ไม่ถูกต้อง -- -- -- Untrusted import prevented -- การนำเข้าไม่น่าเชื่อถือ -- -- -- Successful signed import -- การนำเข้าลายเซ็นสำเร็จ -- -- -- Unsigned share container are not supported - import prevented -- ไม่รองรับที่จัดเก็บแบ่งปันที่ไม่ได้เซ็นไว้ -ไม่อนุญาตการนำเข้า -- -- -- Successful unsigned import -- การนำเข้าลายเซ็นสำเร็จ -- -- -- File does not exist -- ไม่มีไฟล์ -- -- -- Unknown share container type -- การแบ่งปันที่จัดเก็บจากแหล่งที่ไม่รู้จัก -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- นำเข้า 1% ล้มเหลว 2% -- -- -- Import from %1 successful (%2) -- นำเข้าจาก 1% สำเร็จ 2% -- -- -- Imported from %1 -- นำเข้า จาก 1% -- -- -- Export to %1 failed (%2) -- การส่งออก %1 ไม่สำเร็จ (%2) -- -- -- Export to %1 successful (%2) -- การนำออก %1 สำเร็จ (%2) -- -- -- Export to %1 -- นำออก %1 -- -- -- Multiple import source path to %1 in %2 -- นำเข้าจากแหล่งพาทหลายแห่งไปยัง %1 ใน %2 -- -- -- Conflicting export target path %1 in %2 -- การนำเป้าหมายพาทออกขัดแย้งกัน %1 ใน %2 -- -- -- -- TotpDialog -- -- Timed Password -- รหัสผ่านกำหนดเวลา -- -- -- 000000 -- 000000 -- -- -- Copy -- คัดลอก -- -- -- Expires in <b>%n</b> second(s) -- หมดอายุภายใน <b>%n</b> วินาที -- -- -- -- TotpExportSettingsDialog -- -- Copy -- คัดลอก -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- บันทึก การตั้งค่า TOTP เป็นแบบกำหนดเอง อาจไม่สามารถใช้งานกับตัวรับรองความถูกต้องอื่นๆ -- -- -- There was an error creating the QR code. -- มีข้อผิดพลาดในการสร้าง QR code -- -- -- Closing in %1 seconds. -- กำลังปิดภายใน %1 วินาที -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- ติดตั้ง TOTP -- -- -- Default RFC 6238 token settings -- การตั้งค่าโทเค็น RFC 6238 ตั้งต้น -- -- -- Steam token settings -- การตั้งค่าสตีมโทเค็น -- -- -- Use custom settings -- ใช้การตั้งค่าที่กำหนดเอง -- -- -- Custom Settings -- การตั้งค่าแบบปรับแต่งเอง -- -- -- Time step: -- ขั้นเวลา -- -- -- sec -- Seconds -- วินาที -- -- -- Code size: -- ขนาดรหัส -- -- -- Secret Key: -- กุญแจลับ: -- -- -- Secret key must be in Base32 format -- -- -- -- Secret key field -- -- -- -- Algorithm: -- อัลกอริทึม: -- -- -- Time step field -- -- -- -- digits -- หลัก -- -- -- Invalid TOTP Secret -- -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- -- -- -- Confirm Remove TOTP Settings -- -- -- -- Are you sure you want to delete TOTP settings for this entry? -- -- -- -- -- URLEdit -- -- Invalid URL -- -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- ตรวจสอบการอัปเดท -- -- -- Checking for updates... -- ตรวจสอบการอัปเดท... -- -- -- Close -- ปิด -- -- -- Update Error! -- การอัปเดทผิดพลาด -- -- -- An error occurred in retrieving update information. -- ข้อผิดพลาดที่เกิดขึ้นในการอัปเดตเรียกใช้ข้อมูล -- -- -- Please try again later. -- กรุณาลองอีกครั้งภายหลัง -- -- -- Software Update -- อัปเดทซอฟต์แวร์ -- -- -- A new version of KeePassXC is available! -- KeePassXC เวอร์ชั่นใหม่พร้อมใช้แล้ว -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 มีให้ใช้แล้ว — คุณมี %2 -- -- -- Download it at keepassxc.org -- ดาวน์โหลดได้ที่ keepassxc.org -- -- -- You're up-to-date! -- คุณอัปเดตแล้ว -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 เป็นรุ่นใหม่ล่าสุดที่พร้อมใช้งานแล้ว -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- เริ่มเก็บรหัสผ่านของคุณให้ปลอดภัยในฐานข้อมูลของ KeePassXC -- -- -- Create new database -- สร้างฐานข้อมูลใหม่ -- -- -- Open existing database -- เปิดฐานข้อมูลที่มีอยู่ -- -- -- Import from KeePass 1 -- นำเข้าจาก KeePass 1 -- -- -- Import from CSV -- นำเข้าจาก CSV -- -- -- Recent databases -- ฐานข้อมูลที่เพิ่งใช้ -- -- -- Welcome to KeePassXC %1 -- ยินดีต้อนรับสู่ KeePassXC %1 -- -- -- Import from 1Password -- นำเข้าจาก 1Password -- -- -- Open a recent database -- เปิดฐานข้อมูลล่าสุด -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- กด -- -- -- Passive -- แพสซีฟ -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- -- -- -- -- YubiKeyEditWidget -- -- Refresh -- เรียกใหม่ -- -- -- YubiKey Challenge-Response -- YubiKey ตอบกลับการตรวจสอบไม่ถูกต้อง -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>หากคุณเป็นเจ้าของ<a href="https://www.yubico.com/">YubiKey</a>คุณสามารถใช้มันสำหรับความปลอดภัยเพิ่มเติมได้</p><p>YubiKeyจำเป็นต้องใช้ช่องว่างเพื่อลงโปรแกรมเป็น<a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a></p> -- -- -- Refresh hardware tokens -- -- -- -- Hardware key slot selection -- -- -- -- Could not find any hardware keys! -- -- -- -- Selected hardware key slot does not support challenge-response! -- -- -- -- Detecting hardware keys… -- -- -- -- No hardware keys detected -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_tr.ts keepassxc-2.6.4-patched/share/translations/keepassx_tr.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_tr.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_tr.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7893 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- KeePassXC Hakkında -- -- -- About -- Hakkında -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Hataları bildir: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC GNU Genel Kamu Lisansı (GPL) sürüm 2 veya (isteğinize göre) sürüm 3 şartları altında dağıtılmıştır. -- -- -- Contributors -- Katkıcılar -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Katkıları GitHub'da Gör</a> -- -- -- Debug Info -- Hata Ayıklama Bilgisi -- -- -- Include the following information whenever you report a bug: -- Bir hata bildirirken şu bilgileri ekleyin: -- -- -- Copy to clipboard -- Panoya kopyala -- -- -- Project Maintainers: -- Proje Sahipleri: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC ekibinden özel teşekkürler, özgün KeePassX'i yaptığı için debfx'e gider. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Pageant yerine Windows için OpenSSH kullan -- -- -- Enable SSH Agent integration -- SSH İstemci bütünleşmesini etkinleştir -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK değeri -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK yeni değer -- -- -- (empty) -- (boş) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Hiç bir SSH Vekili kullanılabilir değil. SSH_AUTH_SOCK ortam değişkeninin var olduğundan emin olun veya yeni değer girin. -- -- -- SSH Agent connection is working! -- SSH İstemci bağlantısı çalışıyor! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Uygulama Ayarları -- -- -- General -- Genel -- -- -- Security -- Güvenlik -- -- -- Access error for config file %1 -- Yapılandırma dosyası erişim hatası %1 -- -- -- Icon only -- Sadece simge -- -- -- Text only -- Sadece yazı -- -- -- Text beside icon -- Simge yanında yazı -- -- -- Text under icon -- Simge altında yazı -- -- -- Follow style -- Takip tipi -- -- -- Reset Settings? -- Ayarları Sıfırla? -- -- -- Are you sure you want to reset all general and security settings to default? -- Tüm genel ayarları ve güvenlik ayarlarını varsayılan ayarlara getirmek istediğinizden emin misiniz? -- -- -- Monochrome (light) -- Tek renkli (açık) -- -- -- Monochrome (dark) -- Tek renkli (koyu) -- -- -- Colorful -- Renkli -- -- -- You must restart the application to set the new language. Would you like to restart now? -- Yeni dili ayarlamak için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlamak ister misin? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Temel Ayarlar -- -- -- Startup -- Başlangıç -- -- -- Start only a single instance of KeePassXC -- KeePassXC 'nin yalnızca tek bir örneğini başlat -- -- -- Minimize window at application startup -- Uygulama başlangıcında pencereyi simge durumuna küçült -- -- -- File Management -- Dosya Yönetimi -- -- -- Backup database file before saving -- Kaydetmeden önce veritabanı dosyasını yedekle -- -- -- Automatically save after every change -- Her değişiklik sonrası otomatik kaydet -- -- -- Automatically reload the database when modified externally -- Harici olarak değiştirildiğinde veritabanını otomatik olarak yeniden yükle -- -- -- Entry Management -- Girdi Yönetimi -- -- -- Use group icon on entry creation -- Girdi oluşturmada küme simgesini kullan -- -- -- Minimize instead of app exit -- Uygulamadan çıkmak yerine simge durumuna küçült -- -- -- Show a system tray icon -- Sistem tepsisi simgesi göster -- -- -- Hide window to system tray when minimized -- Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle -- -- -- Auto-Type -- Otomatik Yazım -- -- -- Use entry title to match windows for global Auto-Type -- Genel Otomatik Yazım için pencereleri karşılaştırmada girdi başlığını kullan -- -- -- Use entry URL to match windows for global Auto-Type -- Genel Otomatik Yazım için pencereleri karşılaştırmada girdi URL'sini kullan -- -- -- Always ask before performing Auto-Type -- Otomatik Yazım gerçekleştirmeden önce her zaman sor -- -- -- ms -- Milliseconds -- ms -- -- -- Movable toolbar -- Hareketli araç çubuğu -- -- -- Remember previously used databases -- Daha önce kullanılan veritabanlarını hatırla -- -- -- Load previously open databases on startup -- Başlangıçta önceden açılmış veritabanlarını yükle -- -- -- Remember database key files and security dongles -- Veritabanı anahtar dosyalarını ve güvenlik donanımlarını hatırla -- -- -- Check for updates at application startup once per week -- Uygulama başlangıcında güncellemeleri haftada bir kontrol et -- -- -- Include beta releases when checking for updates -- Güncellemeleri kontrol ederken beta sürümleri dahil et -- -- -- Language: -- Dil: -- -- -- (restart program to activate) -- (etkinleştirmek için programı yeniden başlat) -- -- -- Minimize window after unlocking database -- Veritabanı kilidini açınca pencereyi simge durumuna küçült -- -- -- Minimize when opening a URL -- URL açarken simge durumuna küçült -- -- -- Hide window when copying to clipboard -- Panoya kopyalarken pencereyi gizle -- -- -- Minimize -- Küçült -- -- -- Drop to background -- Arkaplana sürükle -- -- -- Favicon download timeout: -- Site simgesi indirme zaman aşımı: -- -- -- Website icon download timeout in seconds -- Web sitesi simge indirme zaman aşımı süresi -- -- -- sec -- Seconds -- sn -- -- -- Toolbar button style -- Araç çubuğu düğme tipi -- -- -- Language selection -- Dil seçimi -- -- -- Global auto-type shortcut -- Genel otomatik yazım kısayolu -- -- -- Auto-type character typing delay milliseconds -- Otomatik yazım karakter yazma gecikmesi milisaniye -- -- -- Auto-type start delay milliseconds -- Otomatik yazım başlangıç gecikmesi milisaniye -- -- -- Automatically launch KeePassXC at system startup -- Sistem başlangıcında KeePassXC'yi otomatik olarak başlat -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Veritabanı dosyalarını güvenle kaydet (Dropbox, vb. İle ilgili sorun olursa devre dışı bırak) -- -- -- User Interface -- Kullanıcı Arayüzü -- -- -- Toolbar button style: -- Araç çubuğu düğme tipi: -- -- -- Use monospaced font for notes -- Notlar için tek aralıklı yazı tipi kullan -- -- -- Tray icon type: -- Tepsi simgesi türü: -- -- -- Reset settings to default… -- Ayarları varsayılanlara sıfırla… -- -- -- Auto-Type typing delay: -- Otomatik Yazım yazma gecikmesi: -- -- -- Global Auto-Type shortcut: -- Genel Otomatik Yazım kısayolu: -- -- -- Auto-Type start delay: -- Otomatik Yazım başlangıç gecikmesi: -- -- -- Automatically save when locking database -- Veritabanını kilitlerken otomatik kaydet -- -- -- Automatically save non-data changes when locking database -- Veritabanını kilitlerken veri dışı değişiklikleri otomatik olarak kaydet -- -- -- Tray icon type -- Tepsi simgesi türü -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Zaman Aşımları -- -- -- Clear clipboard after -- Sonrasında panoyu temizle -- -- -- sec -- Seconds -- san -- -- -- Lock databases after inactivity of -- Etkinliğini kaybettikten sonra veritabanlarını kilitle -- -- -- min -- dak -- -- -- Forget TouchID after inactivity of -- Etkin olmadığında TouchID'yi unut -- -- -- Convenience -- Elverişlilik -- -- -- Lock databases when session is locked or lid is closed -- Oturum kilitlendiğinde veya kapak kapandığında veritabanlarını kilitle -- -- -- Forget TouchID when session is locked or lid is closed -- Oturum kilitlendiğinde veya kapak kapatıldığında TouchID'yi unut -- -- -- Lock databases after minimizing the window -- Pencereyi küçülttükten sonra veritabanlarını kilitle -- -- -- Re-lock previously locked database after performing Auto-Type -- Otomatik Yazım gerçekleştirdikten sonra önceden kilitli veritabanını yeniden kilitle -- -- -- Hide passwords in the entry preview panel -- Önizleme giriş panelinde parolaları gizle -- -- -- Hide entry notes by default -- Girdi notlarını öntanımlı olarak gizle -- -- -- Privacy -- Gizlilik -- -- -- Use DuckDuckGo service to download website icons -- Web sitesi simgelerini indirmek için DuckDuckGo kullan -- -- -- Clipboard clear seconds -- Pano temizleme süresi -- -- -- Touch ID inactivity reset -- Dokunmatik kimlik işlemsizlik sıfırlandı -- -- -- Database lock timeout seconds -- Veritabanı kilidi zaman aşımı süresi -- -- -- min -- Minutes -- dak -- -- -- Clear search query after -- Sonrasında arama sorgusunu temizle -- -- -- Require password repeat when it is visible -- Görünür durumdayken parola tekrarı iste -- -- -- Hide passwords when editing them -- Parolaları düzenlerken gizle -- -- -- Use placeholder for empty password fields -- Boş parola alanları için yer tutucu kullan -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Pencere başlığı ile eşleşen bir girdi bulunamadı: -- -- -- Auto-Type - KeePassXC -- Otomatik Yazım - KeePassXC -- -- -- Auto-Type -- Otomatik Yazım -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Otomatik Yazım ifadenizin söz dizimi yanlış! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Bu Otomatik Yazım komutu çok uzun bir gecikme içeriyor. Gerçekten devam etmek istiyor musun? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Bu Otomatik Yazım komutu çok yavaş tuşa basar. Gerçekten devam etmek istiyor musun? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Bu Otomatik Yazım komutu çok sık tekrarlanan argümanlar içerir. Gerçekten devam etmek istiyor musun? -- -- -- Permission Required -- İzin Gerekli -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC, giriş seviyesi Otomatik Yazım gerçekleştirmek için Erişilebilirlik iznine ihtiyaç duyar. Zaten izin verdiyseniz, KeePassXC'yi yeniden başlatmanız gerekebilir. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Pencere -- -- -- Sequence -- Sıra -- -- -- Default sequence -- Öntanımlı sıra -- -- -- -- AutoTypeMatchModel -- -- Group -- Küme -- -- -- Title -- Başlık -- -- -- Username -- Kullanıcı adı -- -- -- Sequence -- Sıra -- -- -- -- AutoTypeMatchView -- -- Copy &username -- &Kullanıcı adını kopyala -- -- -- Copy &password -- &Parolayı kopyala -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- İzin Gerekli -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC, genel Otomatik Yazım gerçekleştirmek için Erişilebilirlik ve Ekran Kaydedici iznine ihtiyaç duyar. Ekran Kaydı, girişleri bulmak için pencere başlığını kullanmak için gereklidir. Zaten izin verdiyseniz, KeePassXC'yi yeniden başlatmanız gerekebilir. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Otomatik Yazım - KeePassXC -- -- -- Select entry to Auto-Type: -- Otomatik Yazım için girdi seç: -- -- -- Search... -- Ara... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - Tarayıcı Erişim İsteği -- -- -- %1 is requesting access to the following entries: -- %1 aşağıdaki girdilere erişim istiyor: -- -- -- Remember access to checked entries -- İşaretli girdilere erişimi hatırla -- -- -- Remember -- Hatırla -- -- -- Allow access to entries -- Girdilere erişime izin ver -- -- -- Allow Selected -- Seçilene izin ver -- -- -- Deny All -- Tümünü Reddet -- -- -- Disable for this site -- Bu site için devre dışı bırak -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Tarayıcı Girdiyi Kaydet -- -- -- Ok -- Tamam -- -- -- Cancel -- İptal -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- Çok sayıda açık veritabanı var. --Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: Yeni anahtar ilişkilendirme isteği -- -- -- Save and allow access -- Kaydet ve erişime izin ver -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: Var olan anahtarın üstüne yaz? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- "%1" adıyla paylaşılan bir şifreleme anahtarı zaten var. --Üzerine yazmak istiyor musun? -- -- -- KeePassXC: Update Entry -- KeePassXC: Girdiyi Güncelle -- -- -- Do you want to update the information in %1 - %2? -- %1 -%2 bilgilerini güncellemek istiyor musun? -- -- -- Abort -- İptal -- -- -- Converting attributes to custom data… -- Öznitelikler özel verilere dönüştürüyor… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- %1 girdiden özellikler başarıyla dönüştürüldü. --%2 anahtar özel veriye taşındı. -- -- -- Successfully moved %n keys to custom data. -- %n anahtarları başarıyla özel veriye taşındı.%n anahtar başarıyla özel veriye taşındı. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: KeePassHTTP özniteliklerine sahip bir girdi bulunamadı! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Aktif veritabanı KeePassHTTP özelliklerine sahip bir giriş içermiyor. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: Eski tarayıcı bütünleştirme ayarları tespit edildi -- -- -- KeePassXC: Create a new group -- KeePassXC: Yeni bir küme oluştur -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- "%1" adlı yeni bir küme oluşturma isteği alındı. --Bu kümeyi oluşturmak ister misiniz? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- KeePassXC-Tarayıcı ayarlarınızın veritabanı ayarlarına taşınması gerekir. --Bu, mevcut tarayıcı bağlantılarınızı korumak için gereklidir. --Mevcut ayarlarınızı şimdi taşımak ister misiniz? -- -- -- Don't show this warning again -- Bu uyarıyı bir daha gösterme -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Aşağıdaki veritabanı için bir ilişkilendirme isteği aldınız: --%1 -- --Bağlantıya benzersiz bir ad veya kimlik verin, örneğin: --linux-laptop. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Diyalog -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Bu, KeePassXC-Tarayıcı ile veritabanlarınıza erişmek için gereklidir. -- -- -- Enable browser integration -- Tarayıcı bütünleşmesini etkinleştir -- -- -- General -- Genel -- -- -- Browsers installed as snaps are currently not supported. -- Ek olarak yüklenen tarayıcılar şu anda desteklenmemektedir. -- -- -- Enable integration for these browsers: -- Bu tarayıcılar için tümleştirmeyi etkinleştir: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Tarayıcı -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Kimlik bilgileri istendiğinde bir bildirim göster -- -- -- Request to unlock the database if it is locked -- Veritabanı kilitliyse, kilidin açılmasını iste -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Yalnızca aynı şemadaki girdiler (http://, https://, ...) döndürülür. -- -- -- Match URL scheme (e.g., https://...) -- URL şablonunu eşleştir (örn., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Tüm alan adı için tüm girdiler yerine yalnızca belirli bir URL için en iyi eşleşenleri döndürür. -- -- -- Return only best-matching credentials -- Sadece en iyi eşleşen kimlik bilgilerini getir -- -- -- Returns expired credentials. String [expired] is added to the title. -- Süresi dolmuş kimlik bilgilerini döndürür. Dize [süresi doldu] başlığa eklendi. -- -- -- Allow returning expired credentials -- Vadesi dolan kimlik bilgilerinin getirilmesine izin ver -- -- -- All databases connected to the extension will return matching credentials. -- Eklentiye bağlı tüm veritabanları eşleşen kimlik bilgilerini döndürür. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Tüm açık veritabanlarında eşleşen kimlik bilgilerini araştır -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Eşleşen kimlik bilgilerini başlığa göre sırala -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Eşleşen kimlik bilgilerini kullanıcı adına göre sırala -- -- -- Advanced -- Gelişmiş -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Kimlik bilgilerine erişmeden önce asla sorma -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Kimlik bilgilerini güncellemeden önce asla sorma -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- HTTP ve Temel Kimlik Doğrulama için izin isteme -- -- -- Automatically creating or updating string fields is not supported. -- Dizge alanlarını otomatik oluşturma veya güncelleme desteklenmiyor. -- -- -- Return advanced string fields which start with "KPH: " -- "KPH: " ile başlayan gelişmiş dizge alanları &döndür -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Eski KeePassHTTP ayarlarının taşınmasını öneren açılır pencereyi görüntülemeyin. -- -- -- Do not prompt for KeePassHTTP settings migration. -- KeePassHTTP ayarlarının taşınmasını &istemeyin. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Başlangıçta yerel mesajlaşma komut dosyalarına KeePassXC veya keepassxc-proxy ikili yolunu otomatik olarak günceller. -- -- -- Update native messaging manifest files at startup -- Başlangıçta yerel mesajlaşma açıklama dosyalarını güncelle -- -- -- Use a custom proxy location if you installed a proxy manually. -- Elle bir vekil sunucu kurduysanız, özel vekil sunucu konumu kullanın. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Özel vekil sunucu konumunu seç -- -- -- Custom proxy location field -- Özel vekil sunucu konum alanı -- -- -- Browser for custom proxy file -- Özel vekil sunucu dosyası seç -- -- -- Browse... -- Button for opening file dialog -- Gözat... -- -- -- Use a custom browser configuration location: -- Özel tarayıcı ayarı konumu kullan -- -- -- Browser type: -- Tarayıcı tipi: -- -- -- Toolbar button style -- Araç çubuğu düğme tipi -- -- -- Config Location: -- Ayar Konumu: -- -- -- Custom browser location field -- Özel tarayıcı konum alanı -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Özel tarayıcı yolu için gözat -- -- -- Custom extension ID: -- Özel eklenti tanımlayıcısı(ID): -- -- -- Custom extension ID -- Özel eklenti tanımlayıcısı(ID): -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Snap sanal alanı nedeniyle, tarayıcı bütünleşmesini etkinleştirmek için bir komut dosyası çalıştırmalısınız.<br />Bu betiği %1 adresinden edinebilirsiniz. -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Tarayıcı bütünleşmesinin çalışması için KeePassXC-Tarayıcı gereklidir. <br /> %1, %2, %3 ve %4 tarayıcıları için indir. -- -- -- Please see special instructions for browser extension use below -- Lütfen aşağıdaki tarayıcı eklentisi kullanımına ilişkin özel talimatlara bakın -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Hata:</b> Özel vekil sunucu konumu bulunamıyor !<br/>Tarayıcı bütünleşmesi vekil sunucu uygulaması olmadan ÇALIŞMAYACAKTIR. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Uyarı:</b> Aşağıdaki seçenekler tehlikeli olabilir! -- -- -- Executable Files -- Yürütülebilir Dosyalar -- -- -- All Files -- Tüm Dosyalar -- -- -- Select custom proxy location -- Özel vekil sunucu konumunu seç -- -- -- Select native messaging host folder location -- Yerel mesajlaşma bilgisayar klasör konumunu seç -- -- -- -- CloneDialog -- -- Clone Options -- Klonlama Seçenekleri -- -- -- Append ' - Clone' to title -- Başlık sonuna ' - Klon' ekle -- -- -- Replace username and password with references -- Kullanıcı adı ve parolayı referanslarla değiştir -- -- -- Copy history -- Kopyalama geçmişi -- -- -- -- CsvImportWidget -- -- Import CSV fields -- CSV alanlarını içe aktar -- -- -- filename -- dosya adı -- -- -- size, rows, columns -- boyut, satırlar, sütunlar -- -- -- Encoding -- Kodlayıcı -- -- -- Codec -- Kod çözücü -- -- -- Text is qualified by -- Şu tarafından metin yetkilendirildi -- -- -- Fields are separated by -- Şu tarafından alanlar bölümlendi -- -- -- Comments start with -- Yorumlar şununla başlar -- -- -- Consider '\' an escape character -- '\' kaçış karakteri olduğunu göz önünde bulundurun -- -- -- Preview -- Ön izle -- -- -- Imported from CSV file -- CSV dosyasından içe aktarıldı -- -- -- Original data: -- Özgün veri: -- -- -- Error -- Hata -- -- -- Error(s) detected in CSV file! -- CSV dosyasında hata saptandı! -- -- -- [%n more message(s) skipped] -- [%n daha fazla ileti atlandı][%n daha fazla ileti atlandı] -- -- -- CSV import: writer has errors: --%1 -- CSV içe aktarma: yazarken hatalar var: --%1 -- -- -- Text qualification -- Metin niteliği -- -- -- Field separation -- Alan ayrıştırma -- -- -- Number of header lines to discard -- Atılacak başlık satırı sayısı -- -- -- CSV import preview -- CSV içe aktarma önizlemesi -- -- -- Column Association -- Sütun İlişkilendirmeleri -- -- -- Last Modified -- Son Değişiklik -- -- -- Password -- Parola -- -- -- Created -- Oluşturuldu -- -- -- Notes -- Notlar -- -- -- Title -- Başlık -- -- -- Group -- Küme -- -- -- URL -- URL -- -- -- Username -- Kullanıcı adı -- -- -- Header lines skipped -- Başlık satırları atlanıldı -- -- -- First line has field names -- İlk satır alan adlarını içerir -- -- -- Not Present -- Mevcut Değil -- -- -- Column %1 -- Sütun %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- Simge -- -- -- -- CsvParserModel -- -- %n column(s) -- %n sütun%n sütun -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n bayt%n bayt -- -- -- %n row(s) -- %n satır%n satır -- -- -- -- Database -- -- File %1 does not exist. -- %1 dosyası mevcut değil. -- -- -- Unable to open file %1. -- Dosya açılamıyor %1. -- -- -- Error while reading the database: %1 -- Veritabanını okurken hata: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Dosya salt okunur kipinde açıldığı için yazılamıyor. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Anahtar dönüştürülmedi. Bu bir hatadır, lütfen geliştiricilere bildirin! -- -- -- %1 --Backup database located at %2 -- %1 --Yedek veritabanının konumu %2 -- -- -- Could not save, database does not point to a valid file. -- Kaydedilemedi, veritabanı geçerli bir dosyayı göstermiyor. -- -- -- Could not save, database file is read-only. -- Kaydedilemedi, veritabanı dosyası salt okunur. -- -- -- Database file has unmerged changes. -- Veritabanı dosyasında birleştirilmemiş değişiklikler var. -- -- -- Recycle Bin -- Geri Dönüşüm Kutusu -- -- -- Passwords -- Root group name -- Parolalar -- -- -- Database save is already in progress. -- Veritabanı kaydı şu anda işleniyor. -- -- -- Could not save, database has not been initialized! -- Kaydedilemiyor, veritabanı başlatılamadı! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Veritabanı Kilidini Aç - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Anahtar Dosyası: -- -- -- Refresh -- Yenile -- -- -- Don't show this warning again -- Bu uyarıyı bir daha gösterme -- -- -- All files -- Tüm dosyalar -- -- -- Key files -- Anahtar dosyaları -- -- -- Select key file -- Anahtar dosyası seç -- -- -- Failed to open key file: %1 -- Anahtar dosyası açılamadı: %1 -- -- -- Unlock KeePassXC Database -- KeePassXC Veritabanı Kilidini Aç -- -- -- Enter Password: -- Parolayı Gir: -- -- -- Password field -- Parola alanı -- -- -- Hardware key slot selection -- Donanım anahtarı yuvası seçimi -- -- -- Browse for key file -- Anahtar dosyasına göz at -- -- -- Browse... -- Gözat... -- -- -- Refresh hardware tokens -- Donanım belirteçlerini yenile -- -- -- Hardware Key: -- Donanım Anahtarı: -- -- -- Hardware key help -- Donanım anahtarı yardım -- -- -- TouchID for Quick Unlock -- Hızlı Kilit Açma için TouchID -- -- -- Unlock failed and no password given -- Kilit açma başarısız oldu ve parola verilmedi -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Veritabanı açılamadı ve parola girmediniz. --Onun yerine boş bir parola ile tekrar denemek ister misiniz ? -- --Bu hatanın oluşmasını engellemek için, "Veritabanı Ayarları / Güvenlik" e gitmeli ve parolanızı sıfırlamalısınız. -- -- -- Retry with empty password -- Boş parola ile tekrar deneyin -- -- -- Enter Additional Credentials (if any): -- Ek Kimlik Bilgileri Gir (varsa): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p> <strong>YubiKey</strong> ve ya <strong>OnlyKey</strong> gibi donanım bazlı güvenlik anahtarlarının HMAC-SHA1 için ayarlanmış yuvaları olanlarını kullanabilirsiniz.</p> --<p>Daha fazla bilgi için tıklayınız...</p> -- -- -- Key file help -- Anahtar dosyası yardım -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Veritabanı dosyası anahtar dosyası olarak kullanılamaz -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Veritabanı dosyanızı bir anahtar dosyası olarak kullanamazsınız. --Bir anahtar dosyanız yoksa, lütfen alanı boş bırakınız. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>Bir parolaya ek olarak, bir gizli dosyayı veritabanınızın güvenliğini arttırmak için kullanabilirsiniz. .Bu dosya veritabanınızın güvenlik ayarlarında oluşturulabilir.</p><p>Bu sizin *.kdbx veritabanı dosyanız <strong>değil</strong>!<br>Bir anahtar dosyanız yoksa, bu alanı boş bırakınız.</p><p>Daha fazla bilgi için tıklayınız...</p> -- -- -- Key file to unlock the database -- Veritanını açmak için anahtar dosyası -- -- -- Please touch the button on your YubiKey! -- Lütfen YubiKey'inizdeki düğmeye dokunun! -- -- -- Detecting hardware keys… -- Donanım anahtarları tespit ediliyor... -- -- -- No hardware keys detected -- Hiç bir donanım anahtarı tespit edilmedi -- -- -- Select hardware key… -- Donanım anahtarı seçin... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Parolalar -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Gelişmiş Ayarlar -- -- -- General -- Genel -- -- -- Security -- Güvenlik -- -- -- Encryption Settings -- Şifreleme Ayarları -- -- -- Browser Integration -- Tarayıcı Bütünleşmesi -- -- -- Database Credentials -- Veritabanı Kimlik Bilgileri -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Tarayıcı ayarları -- -- -- Stored keys -- Depolanan anahtarlar -- -- -- Remove -- Kaldır -- -- -- Delete the selected key? -- Seçili anahtarı silmek istiyor musun? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Seçili anahtarı gerçekten silmek istiyor musunuz? --Bu işlem, tarayıcı eklentisine bağlantıyı engelleyebilir. -- -- -- Key -- Anahtar -- -- -- Value -- Değer -- -- -- Enable Browser Integration to access these settings. -- Bu ayarlara erişmek için Tarayıcı Bütünleşmesini etkinleştir. -- -- -- Disconnect all browsers -- Tüm tarayıcıların bağlantısını kes -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Tüm tarayıcıların bağlantısını kesmek istiyor musunuz? --Bu işlem, tarayıcı eklentisi bağlantısını engelleyebilir. -- -- -- KeePassXC: No keys found -- KeePassXC: Anahtar bulunamadı -- -- -- No shared encryption keys found in KeePassXC settings. -- KeePassXC ayarlarında paylaşılan şifreleme anahtarı bulunamadı. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: Anahtarlar veritabanından kaldırıldı -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- %n şifreleme anahtarı KeePassXC ayarlarından başarıyla çıkarıldı.%n şifreleme anahtarı KeePassXC ayarlarından başarıyla çıkarıldı. -- -- -- Forget all site-specific settings on entries -- Girdilerde siteye özgü tüm ayarları unut -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- %n girişindeki izinler kaldırıldı. --Girişlere erişim izinleri iptal edilecek. -- -- -- Removing stored permissions… -- Depolanmış izinler kaldırılıyor… -- -- -- Abort -- İptal -- -- -- KeePassXC: Removed permissions -- KeePassXC: Kaldırılan izinler -- -- -- Successfully removed permissions from %n entry(s). -- %n girişindeki izinler başarıyla kaldırıldı.%n girişindeki izinler başarıyla kaldırıldı. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: İzinli girdi bulunamadı! -- -- -- The active database does not contain an entry with permissions. -- Etkin veritabanı, izinleri olan bir girdi içermiyor. -- -- -- Move KeePassHTTP attributes to custom data -- KeePassHTTP özniteliklerini özel verilere taşı -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Tüm eski tarayıcı bütünleşme verilerini gerçekten en son standarda taşımak istiyor musunuz? --Tarayıcı eklentisiyle uyumluluğu korumak için bu gereklidir. -- -- -- Stored browser keys -- Saklanan tarayıcı tuşları -- -- -- Remove selected key -- Seçili anahtarı kaldır -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- KeePassHTTP özniteliklerini KeePassXC-Tarayıcı özel verisine taşı -- -- -- Refresh database root group ID -- Veritabanı root group ID değerini yenile -- -- -- Created -- Oluşturuldu -- -- -- Refresh database ID -- Veritabanı ID yenile -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Gerçekten veritabanı ID değerini yenilemek istiyor musunuz ? --Bu sadece veritabanınız başka bir veritabanının kopyasıysa ve tarayıcı eklentisi bağlanamıyorsa gereklidir. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Ek koruma ekle... -- -- -- No password set -- Parola ayarlanmadı -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez! -- --Parola olmadan devam etmek istediğinize emin misiniz? -- -- -- Continue without password -- Parola olmadan devam et -- -- -- No encryption key added -- Şifreleme anahtarı eklenmedi -- -- -- You must add at least one encryption key to secure your database! -- Veritabanınızı korumak için en az bir şifreleme anahtarı eklemelisiniz! -- -- -- Unknown error -- Bilinmeyen hata -- -- -- Failed to change database credentials -- Veritabanı kimlik bilgileri değiştirilemedi -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Şifreleme Algoritması: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit (öntanımlı) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- Anahtar Türetme İşlevi: -- -- -- Transform rounds: -- Dönüşüm turları: -- -- -- Memory Usage: -- Bellek Kullanımı: -- -- -- Parallelism: -- Benzerlik: -- -- -- Decryption Time: -- Şifre Çözme Zamanı: -- -- -- ?? s -- ?? s -- -- -- Change -- Değiştir -- -- -- Higher values offer more protection, but opening the database will take longer. -- Daha yüksek değerler daha fazla koruma sağlar, ancak veritabanını açmak daha uzun sürer. -- -- -- Database format: -- Veritabanı biçimi: -- -- -- This is only important if you need to use your database with other programs. -- Bu, veritabanınızı başka programlarla birlikte kullanmanız gerektiğinde önemlidir. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (önerilen) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- değişmedi -- -- -- Number of rounds too high -- Key transformation rounds -- Tur sayısı çok yüksek -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Argon2 ile çok yüksek sayıda anahtar dönüştürme turu kullanıyorsunuz. -- --Eğer bu sayı ile devam ederseniz, veritabanınızın açılması saatler veya günler (hatta daha uzun) sürebilir! -- -- -- Understood, keep number -- Anlaşıldı, sayıyı koru -- -- -- Cancel -- İptal -- -- -- Number of rounds too low -- Key transformation rounds -- Tur sayısı çok düşük -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- AES-KDF ile çok düşük sayıda anahtar dönüştürme turu kullanıyorsunuz. -- --Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kırılabilir! -- -- -- KDF unchanged -- KDF değişmedi -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Yeni KDF parametreleri ile anahtar dönüştürülemedi; KDF değişmedi. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MBMB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- iş parçacığıiş parçacığı -- -- -- Change existing decryption time -- Mevcut şifre çözme süresini değiştir -- -- -- Decryption time in seconds -- Saniyede şifre çözme süresi -- -- -- Database format -- Veritabanı biçimi -- -- -- Encryption algorithm -- Şifreleme algoritması -- -- -- Key derivation function -- Anahtar türetme işlevi -- -- -- Transform rounds -- Dönüşüm çevrimleri -- -- -- Memory usage -- Bellek kullanımı -- -- -- Parallelism -- Benzerlik -- -- -- ?? ms -- ?? ms -- -- -- ? s -- ? s -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Maruz Kalan Girdiler -- -- -- Don't expose this database -- Bu veritabanını açma -- -- -- Expose entries under this group: -- Bu grubun altındaki girdileri aç: -- -- -- Enable Secret Service to access these settings. -- Gizli Servisin bu ayarlara erişmesini izin ver. -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Veritabanı Üst Veri -- -- -- Database name: -- Veritabanı adı: -- -- -- Database description: -- Veritabanı açıklaması: -- -- -- Default username: -- Öntanımlı kullanıcı adı: -- -- -- History Settings -- Geçmiş Ayarları -- -- -- Max. history items: -- Azami geçmiş ögesi: -- -- -- Max. history size: -- Azami geçmiş boyutu: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- Geri dönüşüm kutusunu kullan -- -- -- Additional Database Settings -- Ek Veritabanı Ayarları -- -- -- Database name field -- Veritabanı isim alanı -- -- -- Database description field -- Veritabanı açıklama alanı -- -- -- Default username field -- Varsayılan kullanıcı adı alanı -- -- -- Maximum number of history items per entry -- Girdi başına azami geçmiş ögesi sayısı -- -- -- Maximum size of history per entry -- Girdi başına azami geçmiş boyutu -- -- -- Delete Recycle Bin -- Geri Dönüşüm Kutusunu Sil -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Mevcut geri dönüşüm kutusunu ve tüm içeriğini silmek istiyor musunuz? --Bu eylem geri alınamaz. -- -- -- (old) -- (eski) -- -- -- Enable compression (recommended) -- Sıkıştırmayı etkinleştir (önerilir) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Paylaşım -- -- -- Breadcrumb -- İçerik Haritası -- -- -- Type -- Tür -- -- -- Path -- Yol -- -- -- Last Signer -- Son İmzalayan -- -- -- Certificates -- Sertifikalar -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Veritabanı Adı: -- -- -- Description: -- Açıklama: -- -- -- Database name field -- Veritabanı isim alanı -- -- -- Database description field -- Veritabanı açıklama alanı -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 Veritabanı -- -- -- All files -- Tüm dosyalar -- -- -- Open database -- Veritabanı aç -- -- -- CSV file -- CSV dosyası -- -- -- Merge database -- Veritabanını birleştir -- -- -- Open KeePass 1 database -- KeePass 1 veritabanı aç -- -- -- KeePass 1 database -- KeePass 1 veritabanı -- -- -- Export database to CSV file -- Veritabanını CSV dosyasına dışa aktar -- -- -- Writing the CSV file failed. -- CSV dosyasına yazma başarısız. -- -- -- Database creation error -- Veritabanı oluşturma hatası -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Oluşturulan veritabanının anahtarı veya KDF'si yoktur, kaydetme reddedilir. --Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin. -- -- -- Select CSV file -- CSV dosyası seç -- -- -- New Database -- Yeni Veritabanı -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Yeni Veritabanı] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Kilitli] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [Salt okunur] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- %1 açılamadı. Ya mevcut değil ya da erişilebilir değil. -- -- -- Export database to HTML file -- Veritabanını HTML dosyasına aktar -- -- -- HTML file -- HTML dosyası -- -- -- Writing the HTML file failed. -- HTML dosyası yazılamadı. -- -- -- Export Confirmation -- Dışa Aktarım Onayı -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Veritabanınızı şifrelenmemiş bir dosyaya vermek üzeresiniz. Bu, parolalarınızı ve hassas bilgilerinizi savunmasız bırakacaktır! Devam etmek istediğine emin misin? -- -- -- Open OPVault -- OPVault u aç -- -- -- -- DatabaseWidget -- -- Searching... -- Aranıyor... -- -- -- Do you really want to delete the entry "%1" for good? -- "%1" girdisini tümüyle silmek istediğinize emin misiniz? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- "%1" girdisini geri dönüşüm kutusuna taşımak istediğinize emin misiniz? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- %n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz?%n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz? -- -- -- Execute command? -- Komut çalıştır? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Şu komutu çalıştırmak istediğinize emin misiniz?<br><br>%1<br> -- -- -- Remember my choice -- Seçimimi hatırla -- -- -- Do you really want to delete the group "%1" for good? -- Gerçekten "%1" grubunu tamamen silmek istiyor musunuz? -- -- -- No current database. -- Geçerli veritabanı yok. -- -- -- No source database, nothing to do. -- Kaynak veritabanı yok, yapılacak bir şey yok. -- -- -- Search Results (%1) -- Arama Sonuçları (%1) -- -- -- No Results -- Sonuç Yok -- -- -- File has changed -- Dosya değişti -- -- -- The database file has changed. Do you want to load the changes? -- Veritabanı dosyası değiştirildi. Değişiklikleri yüklemek ister misiniz? -- -- -- Merge Request -- Birleştirme İsteği -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Veritabanı dosyası değişti ve kaydedilmemiş değişiklikleriniz var. --Değişikliklerinizi birleştirmek ister misiniz? -- -- -- Empty recycle bin? -- Geri dönüşüm kutusunu boşalt? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Geri dönüşüm kutunuzdaki her şeyi kalıcı olarak silmek istediğinize emin misiniz? -- -- -- Do you really want to delete %n entry(s) for good? -- %n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz?%n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz? -- -- -- Delete entry(s)? -- Girdiyi sil?Girdiyi sil? -- -- -- Move entry(s) to recycle bin? -- Girdiyi geri dönüşüm kutusuna taşı?Girdiyi geri dönüşüm kutusuna taşı? -- -- -- Lock Database? -- Veritabanını Kilitle? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Bir girişi düzenliyorsunuz. Değişiklikleri iptal et ve yine de kilitle? -- -- -- "%1" was modified. --Save changes? -- "%1" değiştirildi. --Değişiklikler kaydedilsin mi? -- -- -- Database was modified. --Save changes? -- Veritabanı değiştirildi. --Değişiklikleri kaydet? -- -- -- Save changes? -- Değişiklikleri kaydet? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Otomatik yükleme denenirken yeni veritabanı dosyası açılamadı. --Hata: %1 -- -- -- Disable safe saves? -- Güvenli kaydetme devre dışı? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC veritabanını birkaç kez kaydetmeyi başaramadı. Buna genellikle bir kayıt dosyası üzerinde kilit tutan dosya eşitleme hizmetleri neden olur. --Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? -- -- -- Passwords -- Parolalar -- -- -- Save database as -- Veritabanını farklı kaydet -- -- -- KeePass 2 Database -- KeePass 2 Veritabanı -- -- -- Replace references to entry? -- Giriş referansları değiştirilsin mi? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Girdi "%1" , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz?Girdi "%1" , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz? -- -- -- Delete group -- Kümeyi sil -- -- -- Move group to recycle bin? -- Kümeyi geri dönüşüm kutusuna taşı? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- "%1" kümesini gerçekten geri dönüşüm kutusuna taşımak istiyor musunuz? -- -- -- Successfully merged the database files. -- Veritabanı dosyaları başarıyla birleştirildi. -- -- -- Database was not modified by merge operation. -- Veritabanı birleştirme işlemi tarafından değiştirilmedi. -- -- -- Shared group... -- Paylaşılan küme... -- -- -- Writing the database failed: %1 -- Veritabanına yazma başarısız: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Bu veritabanı salt okunur kipte açılır. Otomatik kaydetme devre dışı. -- -- -- Save database backup -- Veritabanı yedeğini kaydet -- -- -- Could not find database file: %1 -- Veritabanı dosyası bulunamadı: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Girdi -- -- -- Advanced -- Gelişmiş -- -- -- Icon -- Simge -- -- -- Auto-Type -- Otomatik Yazım -- -- -- Properties -- Özellikler -- -- -- History -- Geçmiş -- -- -- SSH Agent -- SSH İstemci -- -- -- n/a -- yok -- -- -- (encrypted) -- (şifrelenmiş) -- -- -- Select private key -- Özel anahtar seç -- -- -- Entry history -- Girdi geçmişi -- -- -- Add entry -- Girdi ekle -- -- -- Edit entry -- Girdiyi düzenle -- -- -- New attribute -- Yeni öznitelik -- -- -- Are you sure you want to remove this attribute? -- Bu özniteliği silmek istediğinizden emin misiniz? -- -- -- Tomorrow -- Yarın -- -- -- %n week(s) -- %n hafta%n hafta -- -- -- %n month(s) -- %n ay%n ay -- -- -- Entry updated successfully. -- Girdi güncelleme başarılı. -- -- -- New attribute %1 -- Yeni öznitelik %1 -- -- -- %n year(s) -- %n yıl%n yıl -- -- -- Confirm Removal -- Kaldırmayı Onayla -- -- -- Browser Integration -- Tarayıcı Bütünleşmesi -- -- -- <empty URL> -- <empty URL> -- -- -- Are you sure you want to remove this URL? -- Bu URL'yi kaldırmak istediğinizden emin misiniz? -- -- -- Reveal -- Göster -- -- -- Hide -- Gizle -- -- -- Unsaved Changes -- Kaydedilmemiş Değişiklikler -- -- -- Would you like to save changes to this entry? -- Bu girdideki değişiklikleri kaydetmek istiyor musunuz ? -- -- -- [PROTECTED] Press Reveal to view or edit -- [KORUMALI] Görmek veya düzenlemek için Göster e basın -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Ek öznitelikler -- -- -- Add -- Ekle -- -- -- Remove -- Kaldır -- -- -- Edit Name -- Adı Düzenle -- -- -- Protect -- Koru -- -- -- Reveal -- Göster -- -- -- Attachments -- Ekler -- -- -- Foreground Color: -- Ön Plan Rengi: -- -- -- Background Color: -- Arka Plan Rengi: -- -- -- Attribute selection -- Öznitelik seçimi -- -- -- Attribute value -- Öznitelik değeri -- -- -- Add a new attribute -- Yeni öznitelik ekle -- -- -- Remove selected attribute -- Seçili özniteliği kaldır -- -- -- Edit attribute name -- Öznitelik adını düzenle -- -- -- Toggle attribute protection -- Öznitlik korumasını aç/kapat -- -- -- Show a protected attribute -- Korumalı bir özelliği göster -- -- -- Foreground color selection -- Ön plan renk seçimi -- -- -- Background color selection -- Arka plan rengi seçimi -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>İşaretlenirse, girdi kalite gereksinimlerine(örn. parola entropisi veya tekrar kulllanımı) uymasa dahi Sağlık Taraması ve HIBP gibi raporlarda görünmez. Parola kontrolünüzün dışındaysa(örn. dört basamaklı bir pin olması gerekiyorsa) raporların gereksiz yere şişmesini engellemek için işaretleyebilirsiniz .</p></body></html> -- -- -- Exclude from database reports -- Veritabanını raporlardan hariç tut -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Bu girdi için Otomatik Yazımı etkinleştir -- -- -- Window Associations -- Pencere İlişkilendirmeleri -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Pencere başlığı: -- -- -- Use a specific sequence for this association: -- Bu ilişki için belirli bir sıra kullan: -- -- -- Custom Auto-Type sequence -- Özel Otomatik Yazım sırası -- -- -- Open Auto-Type help webpage -- Otomatik Yazım yardım sayfasını aç -- -- -- Existing window associations -- Mevcut pencere ilişkilendirmeleri -- -- -- Add new window association -- Yeni pencere ilişkilendirmesi ekle -- -- -- Remove selected window association -- Seçili pencere ilişkilendirmesini kaldır -- -- -- You can use an asterisk (*) to match everything -- Her şeyi eşleştirmek için yıldız işareti (*) kullanabilirsiniz -- -- -- Set the window association title -- Pencere ilişkilendirme başlığını ayarla -- -- -- You can use an asterisk to match everything -- Her şeyi eşleştirmek için yıldız işareti kullanabilirsiniz -- -- -- Custom Auto-Type sequence for this window -- Bu pencere için özel Otomatik Yazım sırası -- -- -- Inherit default Auto-Type sequence from the group -- Varsayılan Oto-Yazım sırasını gruptan devral -- -- -- Use custom Auto-Type sequence: -- Özel Oto-Yazım sırasını kullan -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Bu ayarlar, girdinin tarayıcı eklentisiyle davranışını etkiler. -- -- -- General -- Genel -- -- -- Skip Auto-Submit for this entry -- Bu girdi için Otomatik Gönder'i atla -- -- -- Hide this entry from the browser extension -- Bu girdiyi tarayıcı eklentisi üstünde gizle -- -- -- Additional URL's -- Ek URL'ler -- -- -- Add -- Ekle -- -- -- Remove -- Kaldır -- -- -- Edit -- Düzenle -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Bu ayarı tarayıcıya sadece HRRP Auth diyalogları için gönder. Etkinleştirildiğinde, normal giriş formları bu girdiyi seçmek için göstermeyecektir. -- -- -- Use this entry only with HTTP Basic Auth -- Bu girdiyi sadece HTTP Basic Auth ile kullan -- -- -- -- EditEntryWidgetHistory -- -- Show -- Göster -- -- -- Restore -- Geri yükle -- -- -- Delete -- Sil -- -- -- Delete all -- Tümünü sil -- -- -- Entry history selection -- Girdi geçmişi seçimi -- -- -- Show entry at selected history state -- Seçili tarih durumundaki girdiyi göster -- -- -- Restore entry to selected history state -- Girdiyi seçilen tarih durumuna geri yükle -- -- -- Delete selected history state -- Seçili geçmiş durumunu sil -- -- -- Delete all history -- Tüm geçmişi sil -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Parola: -- -- -- Title: -- Başlık: -- -- -- Presets -- Öndeğerler -- -- -- Toggle the checkbox to reveal the notes section. -- Notlar bölümünü göstermek için onay kutusunu değiştirin. -- -- -- Username: -- Kullanıcı adı: -- -- -- Url field -- URL alanı -- -- -- Download favicon for URL -- URL üstünden simge indir -- -- -- Password field -- Parola alanı -- -- -- Toggle notes visible -- Notların görünürlüğünü değiştirir -- -- -- Expiration field -- Son kullanma alanı -- -- -- Expiration Presets -- Son Kullanma Önayarları -- -- -- Expiration presets -- Son kullanma öntanımları -- -- -- Notes field -- Notlar alanı -- -- -- Title field -- Başlık alanı -- -- -- Username field -- Kullanıcı adı alanı -- -- -- Toggle expiration -- Son kullanma tarihi var / yok -- -- -- Notes: -- Notlar -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- Son Kul.Tarihi: -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Form -- -- -- Remove key from agent after -- Anahtarı istemciden sonra kaldır -- -- -- seconds -- saniye -- -- -- Fingerprint -- Parmak izi -- -- -- Remove key from agent when database is closed/locked -- Veritabanı kapalı/kilitliyken istemciden anahtarı kaldır -- -- -- Public key -- Genel anahtar -- -- -- Add key to agent when database is opened/unlocked -- Veritabanı kapalı/kilitliyken istemciye anahtar ekle -- -- -- Comment -- Yorum -- -- -- Decrypt -- Şifreyi çöz -- -- -- n/a -- yok -- -- -- Copy to clipboard -- Panoya kopyala -- -- -- Private key -- Özel anahtar -- -- -- External file -- Harici dosya -- -- -- Browse... -- Button for opening file dialog -- Gözat... -- -- -- Attachment -- Dosya eki -- -- -- Add to agent -- İstemciye ekle -- -- -- Remove from agent -- İstemciden kaldır -- -- -- Require user confirmation when this key is used -- Bu tuş kullanıldığında kullanıcı onayı iste -- -- -- Remove key from agent after specified seconds -- Belirtilen saniye sonra anahtarı aracıdan kaldır -- -- -- Browser for key file -- Anahtar dosyasına göz at -- -- -- External key file -- Harici anahtar dosyası -- -- -- Select attachment file -- Ek dosyasını seç -- -- -- -- EditGroupWidget -- -- Group -- Küme -- -- -- Icon -- Simge -- -- -- Properties -- Özellikler -- -- -- Add group -- Küme ekle -- -- -- Edit group -- Kümeyi düzenle -- -- -- Enable -- Etkinleştir -- -- -- Disable -- Devre dışı -- -- -- Inherit from parent group (%1) -- Üst kümeden devral (%1) -- -- -- Entry has unsaved changes -- Girdi kaydedilmemiş değişikliklere sahip -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Tür: -- -- -- Path: -- Yol: -- -- -- Password: -- Parola: -- -- -- Inactive -- Etkisiz -- -- -- KeeShare unsigned container -- KeeShare imzalanmamış konteyner -- -- -- KeeShare signed container -- KeeShare imzalanmış konteyner -- -- -- Select import source -- İçe aktarım kaynağını seç -- -- -- Select export target -- Dışa aktarma hedefini seç -- -- -- Select import/export file -- Aktarma dosyasını seç içe/dışa -- -- -- Clear -- Temizle -- -- -- Import -- İçe aktar -- -- -- Export -- Dışa aktar -- -- -- Synchronize -- Eşitle -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- KeePassXC sürümü bu konteyner türünün paylaşılmasını desteklemiyor. --Desteklenen eklentiler: %1. -- -- -- %1 is already being exported by this database. -- %1 zaten bu veritabanından dışarı verildi. -- -- -- %1 is already being imported by this database. -- %1 zaten bu veritabanına içeri alınmıştı. -- -- -- %1 is being imported and exported by different groups in this database. -- %1 bu veritabanındaki farklı gruplar tarafından içeri alınıyor ve dışarı veriliyor. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare şu anda devre dışı, içe/dışa aktarmayı uygulama ayarlarından etkinleştirebilirsiniz. -- -- -- Database export is currently disabled by application settings. -- Veritabanı dışa aktarma uygulama ayarları tarafından devre dışı bırakıldı. -- -- -- Database import is currently disabled by application settings. -- Veritabanı içe aktarma uygulama ayarları tarafından devre dışı bırakıldı. -- -- -- Sharing mode field -- Paylaşma kipi alanı -- -- -- Path to share file field -- Dosya paylaşım yolu -- -- -- Password field -- Parola alanı -- -- -- Clear fields -- Alanları temizle -- -- -- Browse for share file -- Paylaşılan dosyayı seç -- -- -- Browse... -- Gözat... -- -- -- -- EditGroupWidgetMain -- -- Name field -- İsim alanı -- -- -- Notes field -- Notlar alanı -- -- -- Toggle expiration -- Son kullanma tarihi olsun / olmasın -- -- -- Auto-Type toggle for this and sub groups -- Bu ve alt gruplar için Otomatik Yazım geçişi -- -- -- Expiration field -- Son kullanma alanı -- -- -- Search toggle for this and sub groups -- Bu ve alt gruplar için arama seçimi -- -- -- Default auto-type sequence field -- Varsayılan oto-yazım sıralama alanı -- -- -- Expires: -- Son Kul.Tarihi: -- -- -- Use default Auto-Type sequence of parent group -- Üst grubun varsayılan oto-yazım sıralamasını kullan -- -- -- Auto-Type: -- Otomatik Yazım: -- -- -- Search: -- Ara: -- -- -- Notes: -- Notlar -- -- -- Name: -- Adı -- -- -- Set default Auto-Type sequence -- Varsayılan Oto-Yazım sırasını ayarla -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Özel simge ekle -- -- -- Delete custom icon -- Özel simgeyi sil -- -- -- Download favicon -- Simge indir -- -- -- Unable to fetch favicon. -- Simge getirilemedi. -- -- -- Images -- Resimler -- -- -- All files -- Tüm dosyalar -- -- -- Confirm Delete -- Silmeyi Onayla -- -- -- Select Image(s) -- Resim Seç -- -- -- Successfully loaded %1 of %n icon(s) -- %n simgesinin %1'i başarıyla yüklendi%n simgesinin %1'i başarıyla yüklendi -- -- -- No icons were loaded -- Hiçbir simge yüklenmedi -- -- -- %n icon(s) already exist in the database -- %n simgesi veritabanında zaten var%n simgesi veritabanında zaten var -- -- -- The following icon(s) failed: -- Aşağıdaki simge başarısız oldu:Aşağıdaki simge başarısız oldu: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz?Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- DuckDuckGo web sitesi simge hizmetini Araçlar -> Ayarlar -> Güvenlik altından etkinleştirebilirsiniz -- -- -- Download favicon for URL -- URL üstünden simge indir -- -- -- Apply selected icon to subgroups and entries -- Seçili simgeyi alt gruplara ve girdilere uygula -- -- -- Also apply to child groups -- Aynı zamanda ast gruplara uygula -- -- -- Also apply to child entries -- Aynı zamanda ast girdilere uygula -- -- -- Also apply to all children -- Aynı zamanda tüm astlara uygula -- -- -- Existing icon selected. -- Var olan simge seçildi. -- -- -- Use default icon -- Varsayılan simgeyi kullan -- -- -- Use custom icon -- Özel simge kullan -- -- -- Apply icon to... -- Simgeyi uygula... -- -- -- Apply to this group only -- Sadece bu gruba uygula -- -- -- -- EditWidgetProperties -- -- Created: -- Oluşturuldu: -- -- -- Modified: -- Değiştirildi: -- -- -- Accessed: -- Erişildi: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Eklenti Verisi -- -- -- Remove -- Kaldır -- -- -- Delete plugin data? -- Eklenti verisi silinsin mi? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Seçilen eklenti verilerini gerçekten silmek istiyor musunuz? --Bu etkilenen eklentilerin bozulmasına neden olabilir. -- -- -- Key -- Anahtar -- -- -- Value -- Değer -- -- -- Datetime created -- Oluşturulma tarih saati -- -- -- Datetime modified -- Düzenlenme tarih saati -- -- -- Datetime accessed -- Erişim tarih saati -- -- -- Unique ID -- Benzersiz ID -- -- -- Plugin data -- Eklenti verisi -- -- -- Remove selected plugin data -- Seçili eklenti verilerini kaldır -- -- -- -- Entry -- -- %1 - Clone -- %1 - Klon -- -- -- -- EntryAttachmentsModel -- -- Name -- Ad -- -- -- Size -- Boyut -- -- -- -- EntryAttachmentsWidget -- -- Form -- Form -- -- -- Add -- Ekle -- -- -- Remove -- Kaldır -- -- -- Open -- -- -- -- Save -- Kaydet -- -- -- Select files -- Dosyaları seç -- -- -- Are you sure you want to remove %n attachment(s)? -- %n eki kaldırmak istediğinize emin misiniz?%n eki kaldırmak istediğinize emin misiniz? -- -- -- Save attachments -- Ekleri kaydet -- -- -- Unable to create directory: --%1 -- Dizin oluşturulamadı: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Eki, var olan "%1" dosyasının üstüne yazmak istediğinize emin misiniz? -- -- -- Confirm overwrite -- Üzerine yazımı onayla -- -- -- Unable to save attachments: --%1 -- Ekler kaydedilemiyor: --%1 -- -- -- Unable to open attachment: --%1 -- Ek açılamıyor: --%1 -- -- -- Unable to open attachments: --%1 -- Açılamayan ekler: --%1 -- -- -- Confirm remove -- Kaldırmayı onayla -- -- -- Unable to open file(s): --%1 -- Dosyalar açılamıyor: --%1Dosyalar açılamıyor: --%1 -- -- -- Attachments -- Ekler -- -- -- Add new attachment -- Yeni ek ekle -- -- -- Remove selected attachment -- Seçili eki kaldır -- -- -- Open selected attachment -- Seçili eki aç -- -- -- Save selected attachment to disk -- Seçili eki diske kaydet -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 büyük bir dosya (%2 MB). --Veritabanınız çok büyüyebilir ve performans düşebilir. -- --Bu dosyayı eklemek istediğinize emin misiniz? -- -- -- Confirm Attachment -- Dosya ekini onaylayın -- -- -- -- EntryAttributesModel -- -- Name -- Ad -- -- -- -- EntryHistoryModel -- -- Last modified -- Son değiştirilme -- -- -- Title -- Başlık -- -- -- Username -- Kullanıcı adı -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Ref: -- -- -- Group -- Küme -- -- -- Title -- Başlık -- -- -- Username -- Kullanıcı adı -- -- -- URL -- URL -- -- -- Never -- Asla -- -- -- Password -- Parola -- -- -- Notes -- Notlar -- -- -- Expires -- Süre bitimi -- -- -- Created -- Oluşturuldu -- -- -- Modified -- Düzenlendi -- -- -- Accessed -- Erişildi -- -- -- Attachments -- Ekler -- -- -- Size -- Boyut -- -- -- Group name -- Grup adı -- -- -- Entry title -- Girdi başlığı -- -- -- Entry notes -- Girdi notları -- -- -- Entry expires at -- Girdi son kullanma tarihi -- -- -- Creation date -- Yaratılma tarihi -- -- -- Last modification date -- Son değişiklik tarihi -- -- -- Last access date -- Son erişim tarihi -- -- -- Attached files -- Eklenen dosyalar -- -- -- Entry size -- Girdi byüklüğü -- -- -- Has attachments -- Eklentileri var -- -- -- Has TOTP one-time password -- TOTP tek kullanımlık parolası var -- -- -- -- EntryPreviewWidget -- -- Close -- Kapat -- -- -- General -- Genel -- -- -- Username -- Kullanıcı adı -- -- -- Password -- Parola -- -- -- Expiration -- Süre bitimi -- -- -- URL -- URL -- -- -- Attributes -- Öznitelikler -- -- -- Attachments -- Dosya ekleri -- -- -- Notes -- Notlar -- -- -- Autotype -- Otomatik yazım -- -- -- Window -- Pencere -- -- -- Sequence -- Sıra -- -- -- Searching -- Aranıyor -- -- -- Search -- Ara -- -- -- Clear -- Temizle -- -- -- Never -- Asla -- -- -- [PROTECTED] -- [KORUMALI] -- -- -- Enabled -- Etkin -- -- -- Disabled -- Devre dışı -- -- -- Share -- Paylaş -- -- -- Display current TOTP value -- Geçerli TOTP değerini göster -- -- -- Advanced -- Gelişmiş -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Geçersiz URL -- -- -- -- EntryView -- -- Fit to window -- Pencereye sığdır -- -- -- Fit to contents -- İçeriklere sığdır -- -- -- Reset to defaults -- Öntanımlılara sıfırla -- -- -- Has attachments -- Entry attachment icon toggle -- Eklentileri var -- -- -- Has TOTP -- Entry TOTP icon toggle -- TOTP si var -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- "%2" veritabanındaki "%1" girdisi "%3" tarafından kullanıldı -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- %1 deki DBus servisi tescil edilemedi.<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n Girdi %1 tarafından kullanıldı%n Girdi %1 tarafından kullanıldı -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Dosya Adı -- -- -- Group -- Küme -- -- -- Manage -- Yönetim -- -- -- Unlock to show -- Göstermek için kilidi aç -- -- -- None -- Yok -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Uygulama -- -- -- Manage -- Yönetim -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo Gizli Servisi:</b> %1 -- -- -- Unknown -- Unknown PID -- Bilinmeyen -- -- -- Unknown -- Unknown executable path -- Bilinmeyen -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1, Çalıştırılabilir: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- Başka bir gizli servis çalışıyor (%1).<br/>Gizli Servis Bütünleşmesini tekrar etkinleştirmeden önce bunu durdurun/kaldırın. -- -- -- -- Group -- -- [empty] -- group has no children -- [boş] -- -- -- -- HibpDownloader -- -- Online password validation failed -- Çevrimiçi parola onaylanması hata verdi -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Simge İndir -- -- -- Cancel -- İptal -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Simgeleri indirmede sorun mu yaşıyorsunuz? --DuckDuckGo web sitesi simge servisini uygulama ayarlarının güvenlik bölümünden etkinleştirin. -- -- -- Close -- Kapat -- -- -- URL -- URL -- -- -- Status -- Durum -- -- -- Please wait, processing entry list... -- Lütfen bekleyin, girdi listesi işleniyor... -- -- -- Downloading... -- İndiriliyor... -- -- -- Ok -- Tamam -- -- -- Already Exists -- Zaten Var -- -- -- Download Failed -- İndirme Başarısız -- -- -- Downloading favicons (%1/%2)... -- Simgeler indiriliyor (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Kapat -- -- -- Close message -- İletiyi kapat -- -- -- -- Kdbx3Reader -- -- missing database headers -- eksik veritabanı başlıkları -- -- -- Header doesn't match hash -- Başlık sağlama ile eşleşmiyor -- -- -- Invalid header id size -- Geçersiz başlık kimliği boyutu -- -- -- Invalid header field length -- Geçersiz başlık alanı genişliği -- -- -- Invalid header data length -- Geçersiz başlık veri genişliği -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin. --Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir. -- -- -- Unable to calculate database key -- Veritabanı anahtarı hesaplanamadı -- -- -- Unable to issue challenge-response: %1 -- Zorluk-tepki gerçekleştirilemiyor: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Zorluk-tepki gerçekleştirilemiyor: %1 -- -- -- Unable to calculate database key -- Veritabanı anahtarı hesaplanamadı -- -- -- -- Kdbx4Reader -- -- missing database headers -- eksik veritabanı başlıkları -- -- -- Invalid header checksum size -- Geçersiz başlık dosya özeti boyutu -- -- -- Header SHA256 mismatch -- Başlık SHA256 verisi uyuşmuyor -- -- -- Unknown cipher -- Bilinmeyen şifreleme -- -- -- Invalid header id size -- Geçersiz başlık kimliği boyutu -- -- -- Invalid header field length -- Geçersiz başlık alanı uzunluğu -- -- -- Invalid header data length -- Geçersiz başlık veri genişliği -- -- -- Failed to open buffer for KDF parameters in header -- Üstbilgideki KDF parametreleri için arabellek açılamadı -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Desteklenmeyen anahtar türetme işlevi (KDF) veya geçersiz parametreler -- -- -- Legacy header fields found in KDBX4 file. -- KDBX4 dosyasında eski başlık alanları bulundu. -- -- -- Invalid inner header id size -- Geçersiz iç başlık kimlik boyutu -- -- -- Invalid inner header field length -- Geçersiz iç başlık alanı uzunluğu -- -- -- Invalid inner header binary size -- Geçersiz iç başlık ikili boyutu -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Desteklenmeyen KeePass değişken harita sürümü. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita girdi adı uzunluğu -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita girdi adı verisi -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita girdi değeri uzunluğu -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Geçersiz değişken harita girdi değeri verisi -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita Bool girdi değeri uzunluğu -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita Int32 girdi değeri uzunluğu -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita UInt32 girdi değeri uzunluğu -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita Int64 girdi değeri uzunluğu -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita UInt64 girdi değeri uzunluğu -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita girdi türü -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Geçersiz değişken harita alan tipi boyutu -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin. --Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir. -- -- -- (HMAC mismatch) -- (HMAC uyumsuzluğu) -- -- -- Unable to calculate database key: %1 -- Veritabanı anahtarı hesaplanamıyor: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Geçersiz simetrik şifreleme algoritması. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Geçersiz simetrik şifreleme IV boyutu. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- KDF parametreleri değişken haritası serileştirme başarısız -- -- -- Unable to calculate database key: %1 -- Veritabanı anahtarı hesaplanamıyor: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Desteklenmeyen şifreleme -- -- -- Invalid compression flags length -- Geçersiz sıkıştırma bayrakları uzunluğu -- -- -- Unsupported compression algorithm -- Desteklenmeyen sıkıştırma algoritması -- -- -- Invalid master seed size -- Geçersiz ana çekirdek boyutu -- -- -- Invalid transform seed size -- Geçersiz dönüşüm çekirdek boyutu -- -- -- Invalid transform rounds size -- Geçersiz dönüşüm turu boyutu -- -- -- Invalid start bytes size -- Geçersiz başlangıç bayt boyutu -- -- -- Invalid random stream id size -- Geçersiz rastgele akış kimliği boyutu -- -- -- Invalid inner random stream cipher -- Geçersiz dahili rastgele akış şifrelemesi -- -- -- Not a KeePass database. -- KeePass veritabanı değil. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Seçilen dosya eski bir KeePass1 veritabanıdır (.kdb). -- --Veritabanı > 'KeePass1 veritabanı içe aktar...' üzerine tıklayarak içe aktarabilirsiniz. --Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski KeePassX 0.4 sürümüyle açamayacaksınız. -- -- -- Unsupported KeePass 2 database version. -- Desteklenmeyen KeePass 2 veritabanı sürümü. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Geçersiz şifreleme UUID uzunluğu: %1 (uzunluk=%2) -- -- -- Unable to parse UUID: %1 -- UUID ayrıştırılamadı: %1 -- -- -- Failed to read database file. -- Veritabanı dosyası okunamadı. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML ayrıştırma başarısız: %1 -- -- -- No root group -- Kök küme yok -- -- -- Missing icon uuid or data -- Uuid simgesi veya veri eksik -- -- -- Missing custom data key or value -- Özel veri anahtarı veya değeri eksik -- -- -- Multiple group elements -- Çoklu küme elementleri -- -- -- Null group uuid -- Boş küme uuid -- -- -- Invalid group icon number -- Geçersiz küme simge numarası -- -- -- Invalid EnableAutoType value -- Geçersiz Otomatik Yazım Etkinleştirme değeri -- -- -- Invalid EnableSearching value -- Geçersiz Arama Etkin değeri -- -- -- No group uuid found -- Kümede uuid bulunamadı -- -- -- Null DeleteObject uuid -- Boş "DeleteObject" UUID -- -- -- Missing DeletedObject uuid or time -- SilinmişNesne uuid veya zamanı eksik -- -- -- Null entry uuid -- Boş uuid girdisi -- -- -- Invalid entry icon number -- Geçersiz simge numarası girdisi -- -- -- History element in history entry -- Geçmiş girdisinde geçmiş element -- -- -- No entry uuid found -- Uuid girdisi bulunamadı -- -- -- History element with different uuid -- Farklı uuid ile geçmiş ögesi -- -- -- Duplicate custom attribute found -- Yinelenen özel öznitelik bulundu -- -- -- Entry string key or value missing -- Giriş dizesi anahtarı veya değeri eksik -- -- -- Entry binary key or value missing -- Girdi ikili anahtarı veya değeri eksik -- -- -- Auto-type association window or sequence missing -- Otomatik Yazım ilişkilendirme penceresi veya sırası eksik -- -- -- Invalid bool value -- Geçersiz bool değeri -- -- -- Invalid date time value -- Geçersiz tarih zaman değeri -- -- -- Invalid color value -- Geçersiz renk değeri -- -- -- Invalid color rgb part -- Geçersiz rgb renk parçası -- -- -- Invalid number value -- Geçersiz sayı değeri -- -- -- Invalid uuid value -- Geçersiz uuid değeri -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- İkili dosya sıkıştırması açılamıyor -- -- -- XML error: --%1 --Line %2, column %3 -- XML hatası: --%1 --Satır %2, sütun %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- Geçersiz KeeAgent ayar dosyası yapısı. -- -- -- Private key is an attachment but no attachments provided. -- Özel anahtar bir dosya eki ama hiç bir dosya eki sağlanmadı. -- -- -- Private key is empty -- Özel anahtar boş -- -- -- File too large to be a private key -- Dosya bir özel anahtar olmak için çok büyük -- -- -- Failed to open private key -- Özel anahtarı açma başarısız -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Veritabanı açılamıyor. -- -- -- Import KeePass1 Database -- KeePass1 veritabanı içe aktar -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Anahtar dosyası okunamıyor. -- -- -- Not a KeePass database. -- KeePass veritabanı değil. -- -- -- Unsupported encryption algorithm. -- Desteklenmeyen şifreleme algoritması. -- -- -- Unsupported KeePass database version. -- Desteklenmeyen KeePass veritabanı sürümü. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Şifreleme IV okunamadı -- -- -- Invalid number of groups -- Geçersiz küme numarası -- -- -- Invalid number of entries -- Geçersiz giriş numarası -- -- -- Invalid content hash size -- Geçersiz içerik karma boyutu -- -- -- Invalid transform seed size -- Geçersiz dönüşüm çekirdek boyutu -- -- -- Invalid number of transform rounds -- Geçersiz dönüşüm turu sayısı -- -- -- Unable to construct group tree -- Küme ağacı oluşturulamadı -- -- -- Root -- Kök -- -- -- Key transformation failed -- Anahtar dönüştürme başarısız -- -- -- Invalid group field type number -- Geçersiz küme alanı türü numarası -- -- -- Invalid group field size -- Geçersiz küme alanı boyutu -- -- -- Read group field data doesn't match size -- Okuma kümesi alanı verileri boyutla eşleşmiyor -- -- -- Incorrect group id field size -- Hatalı küme kimliği alan boyutu -- -- -- Incorrect group creation time field size -- Hatalı küme oluşturma zaman alanı boyutu -- -- -- Incorrect group modification time field size -- Hatalı küme değişiklik zaman alanı boyutu -- -- -- Incorrect group access time field size -- Hatalı küme erişim zamanı alan boyutu -- -- -- Incorrect group expiry time field size -- Hatalı küme zaman aşımı alan boyutu -- -- -- Incorrect group icon field size -- Geçersiz küme simge alanı boyutu -- -- -- Incorrect group level field size -- Geçersiz küme seviye alanı boyutu -- -- -- Invalid group field type -- Geçersiz küme alanı tipi -- -- -- Missing group id or level -- Eksik küme kimliği veya seviyesi -- -- -- Missing entry field type number -- Eksik girdi alanı tipi numarası -- -- -- Invalid entry field size -- Geçersiz girdi alanı boyutu -- -- -- Read entry field data doesn't match size -- Giriş alan verisi okuma boyutuyla eşleşmiyor -- -- -- Invalid entry uuid field size -- Geçersiz girdi UUID alan boyutu -- -- -- Invalid entry group id field size -- Geçersiz küme kimliği alan boyutu girdisi -- -- -- Invalid entry icon field size -- Geçersiz giriş simgesi alan boyutu -- -- -- Invalid entry creation time field size -- Geçersiz giriş oluşturma zamanı alan boyutu -- -- -- Invalid entry modification time field size -- Geçersiz giriş değiştirme zamanı alan boyutu -- -- -- Invalid entry expiry time field size -- Geçersiz giriş süre sonu alan boyutu -- -- -- Invalid entry field type -- Geçersiz girdi alanı tipi -- -- -- unable to seek to content position -- içerik konumuna ulaşılamıyor -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin. --Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir. -- -- -- Unable to calculate database key -- Veritabanı anahtarı hesaplanamadı -- -- -- -- KeeShare -- -- Invalid sharing reference -- Geçersiz paylaşım referansı -- -- -- Inactive share %1 -- Etkin olmayan paylaşım %1 -- -- -- Imported from %1 -- %1 den içe aktarıldı -- -- -- Exported to %1 -- %1 klasörüne aktarıldı -- -- -- Synchronized with %1 -- %1 ile eşitlendi -- -- -- Import is disabled in settings -- Ayarlarda içe aktarma devre dışı -- -- -- Export is disabled in settings -- Ayarlarda dışa aktarma devre dışı -- -- -- Inactive share -- Etkin olmayan paylaşım -- -- -- Imported from -- İçe aktarıldı -- -- -- Exported to -- Dışa aktarıldı -- -- -- Synchronized with -- Eşitlendi -- -- -- -- KeyComponentWidget -- -- Key Component -- Anahtar Bileşen -- -- -- Key Component Description -- Anahtar Bileşen Açıklaması -- -- -- Cancel -- İptal -- -- -- Key Component set, click to change or remove -- Anahtar Bileşen seti, değiştirmek veya kaldırmak için tıkla -- -- -- Add %1 -- Add a key component -- Ekle %1 -- -- -- Change %1 -- Change a key component -- Değiştir %1 -- -- -- Remove %1 -- Remove a key component -- Kaldır %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 ayarlı, değiştirmek veya kaldırmak için tıkla -- -- -- -- KeyFileEditWidget -- -- Generate -- Oluştur -- -- -- Key File -- Anahtar Dosyası -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Ek güvenlik için rasgele bayt içeren bir anahtar dosyası ekleyebilirsiniz.</p><p>Gizli tutmalı ve asla kaybetmemelisin yoksa kilitleneceksin!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- '%1' anahtar dosyası yüklenirken hata --İleti: %2 -- -- -- Key files -- Anahtar dosyaları -- -- -- All files -- Tüm dosyalar -- -- -- Create Key File... -- Anahtar Dosyası Oluştur... -- -- -- Error creating key file -- Anahtar dosyası oluşturulurken hata -- -- -- Unable to create key file: %1 -- Anahtar dosyası oluşturulamıyor: %1 -- -- -- Select a key file -- Bir anahtar dosyası seç -- -- -- Key file selection -- Anahtar dosya seçimi -- -- -- Browse for key file -- Anahtar dosyasına göz at -- -- -- Browse... -- Gözat... -- -- -- Generate a new key file -- Yeni anahtar dosyası oluştur -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Not: Veritabanınızın kilidini açmanızı engelleyeceği için değişebilecek bir dosya kullanmayın! -- -- -- Invalid Key File -- Geçersiz Anahtar Dosyası -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Mevcut veritabanını kendi anahtar dosyası olarak kullanamazsınız. Lütfen farklı bir dosya seçin veya yeni bir anahtar dosyası oluşturun. -- -- -- Suspicious Key File -- Şüpheli Anahtar Dosyası -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Seçilen anahtar dosyası bir parola veritabanı dosyasına benziyor. Anahtar dosya, değişmeyen statik bir dosya olmalıdır, aksi takdirde veritabanınıza sonsuza kadar erişiminizi kaybedersiniz. --Bu dosyaya devam etmek istediğinizden emin misiniz? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Veritabanı -- -- -- &Help -- &Yardım -- -- -- &Groups -- &Kümeler -- -- -- &Tools -- &Araçlar -- -- -- &Quit -- &Çık -- -- -- &About -- &Hakkında -- -- -- Database settings -- Veritabanı ayarları -- -- -- Copy username to clipboard -- Kullanıcı adını panoya kopyala -- -- -- Copy password to clipboard -- Parolayı panoya kopyala -- -- -- &Settings -- &Ayarlar -- -- -- &Title -- &Başlık -- -- -- Copy title to clipboard -- Başlığı panoya kopyala -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- URL'yi panoya kopyala -- -- -- &Notes -- &Notlar -- -- -- Copy notes to clipboard -- Notları panoya kopyala -- -- -- Copy &TOTP -- &TOTP'yi kopyala -- -- -- E&mpty recycle bin -- Geri dönüşüm kutusunu b&oşalt -- -- -- Clear history -- Geçmişi temizle -- -- -- Access error for config file %1 -- Yapılandırma dosyası için erişim hatası %1 -- -- -- Settings -- Ayarlar -- -- -- Toggle window -- Pencereyi aç/kapa -- -- -- Quit KeePassXC -- KeePassXC'den Çık -- -- -- Please touch the button on your YubiKey! -- Lütfen YubiKey'inizdeki düğmeye dokunun! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- UYARI: KeePassXC'nin kararsız inşasını kullanıyorsunuz! --Yüksek bozulma tehlikesi bulunmaktadır, veri tabanlarınızın yedeğini alın. --Bu sürüm, üretimde kullanıma uygun değildir. -- -- -- &Donate -- &Bağış -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- Uyarı: Qt sürümünüz Keepassxc'nin ekran klavyesiyle çökmesine neden olabilir! --Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz. -- -- -- &Import -- &İçe Aktar -- -- -- Create a new database -- Yeni veritabanı oluştur -- -- -- Merge from another KDBX database -- Başka bir KDBX veritabanından birleştir -- -- -- Add a new entry -- Yeni girdi ekle -- -- -- View or edit entry -- Girdiyi görüntüle veya düzenle -- -- -- Add a new group -- Yeni bir küme ekle -- -- -- Perform &Auto-Type -- &Otomatik Yazım Gerçekleştir -- -- -- Open &URL -- URL'yi &Aç -- -- -- Import a KeePass 1 database -- KeePass 1 veritabanını içe aktar -- -- -- Import a CSV file -- CSV dosyasını içe aktar -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- NOT: KeePassXC'nin yayın öncesi bir sürümünü kullanıyorsunuz! --Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değildir. -- -- -- Check for updates on startup? -- Başlangıçta güncellemeleri kontrol et? -- -- -- Would you like KeePassXC to check for updates on startup? -- KeePassXC'in başlangıçta güncellemeleri kontrol etmesini ister misiniz? -- -- -- You can always check for updates manually from the application menu. -- Güncellemeleri her zaman elle uygulama menüsünden kontrol edebilirsiniz. -- -- -- &Export -- Dışa &Aktar -- -- -- Sort &A-Z -- Sırala &A-Z -- -- -- Sort &Z-A -- Sırala &Z-A -- -- -- &Password Generator -- &Parola Oluşturucu -- -- -- Import a 1Password Vault -- Bir 1Password kasasını içeri al -- -- -- &Getting Started -- &Başlangıç -- -- -- &User Guide -- &Kullanıcı Rehberi -- -- -- &Keyboard Shortcuts -- &Klavye Kısayolları -- -- -- &Recent Databases -- &Geçmiş Veritabanları -- -- -- &Entries -- &Girdiler -- -- -- Copy Att&ribute -- &Özniteliği Kopyala -- -- -- TOTP -- TOTP -- -- -- View -- Görünüm -- -- -- Theme -- Tema -- -- -- &Check for Updates -- &Güncellemeleri Denetle -- -- -- &Open Database… -- &Veritabanı Aç... -- -- -- &Save Database -- &Veritabanını Kaydet -- -- -- &Close Database -- &Veritabanını Kapat -- -- -- &New Database… -- &Yeni Veritabanı... -- -- -- &Merge From Database… -- &Veritabanından Birleştir... -- -- -- &New Entry… -- &Yeni Girdi... -- -- -- &Edit Entry… -- &Girdiyi Düzenle... -- -- -- &Delete Entry… -- &Girdiyi Sil... -- -- -- &New Group… -- &Yeni Küme... -- -- -- &Edit Group… -- &Kümeyi Düzenle... -- -- -- &Delete Group… -- &Kümeyi Sil... -- -- -- Download All &Favicons… -- &Tüm Simgeleri İndir... -- -- -- Sa&ve Database As… -- &Veritabanını Farklı Kaydet... -- -- -- Database &Security… -- &Veritabanı Güvenliği... -- -- -- Database &Reports... -- &Veritabanı Raporları... -- -- -- Statistics, health check, etc. -- İstatistikler, sağlık kontrolü vb. -- -- -- &Database Settings… -- &Veritabanı Ayarları… -- -- -- &Clone Entry… -- &Girdiyi Klonla... -- -- -- Move u&p -- &Yukarı taşı -- -- -- Move entry one step up -- Girdiyi bir adım yukarı taşı -- -- -- Move do&wn -- &Aşağı taşı -- -- -- Move entry one step down -- Girdiyi bir adım aşağı taşı -- -- -- Copy &Username -- &Kullanıcı Adını Kopyala -- -- -- Copy &Password -- &Parolayı Kopyala -- -- -- Download &Favicon -- &Simge İndir -- -- -- &Lock Databases -- &Veritabanlarını Kilitle -- -- -- &CSV File… -- &CSV Dosyası... -- -- -- &HTML File… -- &HTML Dosyası... -- -- -- KeePass 1 Database… -- KeePass 1 Veritabanı... -- -- -- 1Password Vault… -- 1Password Kasası... -- -- -- CSV File… -- CSV Dosyası... -- -- -- Show TOTP -- ZTSP'yi göster -- -- -- Show QR Code -- QR Kodunu Göster -- -- -- Set up TOTP… -- TOTP Ayarla... -- -- -- Report a &Bug -- Hata &Bildir -- -- -- Open Getting Started Guide -- Başlangıç Klavuzunu aç -- -- -- &Online Help -- &Çevrimiçi Yardım -- -- -- Go to online documentation -- Çevrimiçi Belgelere git -- -- -- Open User Guide -- Kullanıcı Klavuzunu aç -- -- -- Save Database Backup... -- Veritabanı Yedeğini Kaydet... -- -- -- Add key to SSH Agent -- SSH Vekiline bir anahtar ekle -- -- -- Remove key from SSH Agent -- SSH Vekilinden bir anahtarı sil -- -- -- Compact Mode -- Küçültülmüş Kip -- -- -- Automatic -- Otomatik -- -- -- Light -- Açık -- -- -- Dark -- Koyu -- -- -- Classic (Platform-native) -- Klasik (Doğal sistem) -- -- -- Show Toolbar -- Araç Çubuğunu Göster -- -- -- Show Preview Panel -- Önizleme Panelini Göster -- -- -- Don't show again for this version -- Bu sürüm için bir daha gösterme -- -- -- Restart Application? -- Uygulamayı yeniden başlat? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- Bu ayarı uygulamak için uygulamayı yeniden başlatmalısınız. Şimdi uygulamayı yeniden başlatmak ister misiniz ? -- -- -- Perform Auto-Type Sequence -- Otomatik Yazım Sırası -- -- -- {USERNAME} -- {KULLANICI ADI} -- -- -- {USERNAME}{ENTER} -- {KULLANICI ADI}{ENTER} -- -- -- {PASSWORD} -- {PAROLA} -- -- -- {PASSWORD}{ENTER} -- {PAROLA}{ENTER} -- -- -- Always on Top -- -- -- -- Hide Usernames -- Kullanıcı Adlarını Gizle -- -- -- Hide Passwords -- Parolaları Gizle -- -- -- -- ManageDatabase -- -- Database settings -- Veritabanı ayarları -- -- -- Edit database settings -- Veritabanı ayarlarını düzenle -- -- -- Unlock database -- Veritabanı kilidini kaldır -- -- -- Unlock database to show more information -- Daha fazla bilgi göstermek için veritabanı kilidini aç -- -- -- Lock database -- Veritabanını kilitle -- -- -- -- ManageSession -- -- Disconnect -- Bağlantıyı kes -- -- -- Disconnect this application -- Bu uygulamanın bağlanntısını kes -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Eksik oluşturuluyor %1 [%2] -- -- -- Relocating %1 [%2] -- Taşınıyor %1 [%2] -- -- -- Overwriting %1 [%2] -- Üzerine yazılıyor %1 [%2] -- -- -- older entry merged from database "%1" -- eski girdi "%1" veritabanıyla birleştirildi -- -- -- Adding backup for older target %1 [%2] -- Eski hedef için yedekleme ekle %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Eski kaynak için yedekleme ekle %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Eski hedef girişini yeni kaynağın üstüne yeniden uygula %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Eski kaynak girişini yeni hedefin üstüne yeniden uygulama %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Yeni kaynaktan eşitle %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Eski kaynaktan eşitle %1 [%2] -- -- -- Deleting child %1 [%2] -- Alt girişler siliniyor %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Sahipsizler siliniyor %1 [%2] -- -- -- Changed deleted objects -- Değiştirilen silinmiş nesneler -- -- -- Adding missing icon %1 -- Eksik simge ekleniyor %1 -- -- -- Removed custom data %1 [%2] -- Özel veri kaldırıldı %1 [%2] -- -- -- Adding custom data %1 [%2] -- Özel veri eklendi %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Yeni bir KeePassXC veritabanı oluştur... -- -- -- Root -- Root group -- Kök -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- SayfaSihirbazı -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz. -- -- -- Advanced Settings -- Gelişmiş Ayarlar -- -- -- Simple Settings -- Temel Ayarlar -- -- -- Encryption Settings -- Şifreleme Ayarları -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Veritabanı Kimlik Bilgileri -- -- -- A set of credentials known only to you that protects your database. -- Veritabanınızı koruyan, sadece sizce bilinen bir grup kimlik bilgisi -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Şifreleme Ayarları -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Genel Veritabanı Bilgileri -- -- -- Please fill in the display name and an optional description for your new database: -- Lütfen yeni veritabanı için görünen bir isim ve isteğe bağlı bir açıklama girin: -- -- -- -- NixUtils -- -- Password Manager -- Parola Yönetici -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Geçersiz OpData01, başlık içermiyor -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Tüm IV baytları okunamadı, 16 istendi ama %1 alındı -- -- -- Unable to init cipher for opdata01: %1 -- opdata01 için şifreleme başlatılamıyor: %1 -- -- -- Unable to read all HMAC signature bytes -- Tüm HMAC imza bayları okunamadı -- -- -- Malformed OpData01 due to a failed HMAC -- Hatalı HMAC yüzünden OpData01 kusurlu -- -- -- Unable to process clearText in place -- Bulunulan yerde clearText komutu çalıştırılamıyor -- -- -- Expected %1 bytes of clear-text, found %2 -- %1 bayt boş-yazı bekleniyordu, %2 bulundu -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Read Database komutu bir örnek oluşturmadı --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Dizin .opvault mevcut olmalıdır -- -- -- Directory .opvault must be readable -- Dizin .opvault okunabilir olmalıdır -- -- -- Directory .opvault/default must exist -- Dizin .opvault/default mevcut olmalıdır -- -- -- Directory .opvault/default must be readable -- Dizin .opvault/default okunabilir olmalıdır -- -- -- Unable to decode masterKey: %1 -- masterKey çözümlenemedi: %1 -- -- -- Unable to derive master key: %1 -- master key türetilemedi: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Geçersiz anahtar dosyası, OpenSSH anahtarı bekleniyor -- -- -- PEM boundary mismatch -- PEM limitleri uyumsuz -- -- -- Base64 decoding failed -- Base64 çözme başarısız -- -- -- Key file way too small. -- Anahtar dosyası çok küçük. -- -- -- Key file magic header id invalid -- Anahtar dosyası sihirbazı başlık kimliği geçersiz -- -- -- Found zero keys -- Sıfır anahtar bulundu -- -- -- Failed to read public key. -- Genel anahtar okunamadı. -- -- -- Corrupted key file, reading private key failed -- Bozuk anahtar dosyası, özel anahtar okuma başarısız -- -- -- No private key payload to decrypt -- Şifresini çözmek için yüklü özel anahtar yok -- -- -- Trying to run KDF without cipher -- KDF'yi şifreleme olmadan çalıştırmayı dene -- -- -- Passphrase is required to decrypt this key -- Bu anahtarın şifresini çözmek için parola gerekiyor -- -- -- Key derivation failed, key file corrupted? -- Anahtar türetme başarısız, anahtar dosya bozuk mu? -- -- -- Decryption failed, wrong passphrase? -- Şifre çözme başarısız, parola yanlış mı? -- -- -- Unexpected EOF while reading public key -- Ortak anahtar okunurken beklenmeyen dosya sonu -- -- -- Unexpected EOF while reading private key -- Özel anahtar okunurken beklenmeyen dosya sonu -- -- -- Can't write public key as it is empty -- Genel anahtar boş olduğundan yazılamıyor -- -- -- Unexpected EOF when writing public key -- Ortak anahtar yazılırken beklenmeyen dosya sonu -- -- -- Can't write private key as it is empty -- Özel anahtar boş olduğu için yazılamıyor -- -- -- Unexpected EOF when writing private key -- Özel anahtar yazarken beklenmeyen EOF -- -- -- Unsupported key type: %1 -- Desteklenmeyen anahtar türü: %1 -- -- -- Unknown cipher: %1 -- Bilinmeyen şifreleme: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Cipher IV, MD5 kdf için çok kısa -- -- -- Unknown KDF: %1 -- Bilinmeyen KDF: %1 -- -- -- Unknown key type: %1 -- Bilinmeyen anahtar türü: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Parolalar eşleşmiyor -- -- -- Passwords match so far -- Parolalar şu ana kadar eşleşiyor -- -- -- Toggle Password (%1) -- Parolayı Göster/Gizle (%1) -- -- -- Generate Password (%1) -- Parola Oluştur (%1) -- -- -- Warning: Caps Lock enabled! -- Uyarı: Caps Lock basılı! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Parolayı gir: -- -- -- Confirm password: -- Parolayı onayla: -- -- -- Password -- Parola -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Parola, veritabanınızın güvenliğini sağlamak için birincil yöntemdir.</p><p>Güçlü parolalar uzun ve benzersizdir. KeePassXC sizin için bir tane üretebilir.</p> -- -- -- Passwords do not match. -- Parolalar uyuşmuyor. -- -- -- Password field -- Parola alanı -- -- -- Repeat password field -- Parola tekrarlama alanı -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %%p -- -- -- strength -- Password strength -- güç -- -- -- entropy -- entropi -- -- -- Password -- Parola -- -- -- Character Types -- Karakter Türleri -- -- -- Numbers -- Rakamlar -- -- -- Extended ASCII -- Genişletilmiş ASCII -- -- -- Exclude look-alike characters -- Benzer karakterleri dışla -- -- -- Pick characters from every group -- Her kümeden karakter seç -- -- -- &Length: -- &Uzunluk: -- -- -- Passphrase -- Parola Öbeği -- -- -- Wordlist: -- Sözcük listesi: -- -- -- Word Separator: -- Sözcük Ayırıcı: -- -- -- Close -- Kapat -- -- -- Entropy: %1 bit -- Entropi: %1 bit -- -- -- Password Quality: %1 -- Parola Kalitesi: %1 -- -- -- Poor -- Password quality -- Kötü -- -- -- Weak -- Password quality -- Zayıf -- -- -- Good -- Password quality -- İyi -- -- -- Excellent -- Password quality -- Harika -- -- -- Switch to advanced mode -- Gelişmiş kipe geç -- -- -- Advanced -- Gelişmiş -- -- -- Braces -- Ayraç -- -- -- Punctuation -- Noktalama -- -- -- Quotes -- Tırnak -- -- -- Logograms -- Logogramlar -- -- -- Character set to exclude from generated password -- Oluşturulan paroladan dışlanacak karakter kümesi -- -- -- Do not include: -- Dahil etme: -- -- -- Add non-hex letters to "do not include" list -- Listeye onaltılık (hex) olmayan harfler ekleme "dahil etmeyin" -- -- -- Hex -- Hex -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Dışlanan karakterler: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Oluşturulan parola -- -- -- Upper-case letters -- Büyük harfler -- -- -- Lower-case letters -- Küçük harfler -- -- -- Special characters -- Özel karakterler -- -- -- Math Symbols -- Matematiksel Semboller -- -- -- Dashes and Slashes -- Tire ve Eğik çizgiler -- -- -- Excluded characters -- Hariç tutulan karakterler -- -- -- Hex Passwords -- Onaltılı Parolalar -- -- -- Password length -- Parola uzunluğu -- -- -- Word Case: -- Kelime Örneği: -- -- -- Regenerate password -- Yeniden parola oluştur -- -- -- Copy password -- Parolayı kopyala -- -- -- lower case -- küçük harf -- -- -- UPPER CASE -- Büyük Harf -- -- -- Title Case -- Başlık Örneği -- -- -- Generate Password -- Parola oluştur -- -- -- Also choose from: -- Aynı zamanda bunlardan seç: -- -- -- Additional characters to use for the generated password -- Oluşturulan parolalar için kullanılacak ek karakterler -- -- -- Additional characters -- Ek karakterler -- -- -- Word Count: -- Sözcük Sayısı: -- -- -- Esc -- Esc -- -- -- Apply Password -- Parolayı Onayla -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Parolayı tekrar üret (%1) -- -- -- Special Characters -- Özel Karakterler -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- İstatistikler -- -- -- Very weak password -- Çok zayıf parola -- -- -- Password entropy is %1 bits -- Parola entropisi %1 bits -- -- -- Weak password -- Zayıf parola -- -- -- Used in %1/%2 -- %1/%2 de kullanıldı -- -- -- Password is used %1 times -- Parola %1 kere kullanıldı -- -- -- Password has expired -- Parolanın süresi doldu -- -- -- Password expiry was %1 -- Parola süresi dolalı %1 -- -- -- Password is about to expire -- Parola son kullanma süresini doldurmak üzere -- -- -- Password expires in %1 days -- Parolanın %1 gün içinde son kullanma süresi dolacak -- -- -- Password will expire soon -- Parolanın yakında son kullanma süresi bitecek -- -- -- Password expires on %1 -- Parolanın son kullanma tarihi %1 -- -- -- Health Check -- Sağlık Taraması -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- Üzerine yaz -- -- -- Delete -- Sil -- -- -- Move -- Taşı -- -- -- Empty -- Boş -- -- -- Remove -- Kaldır -- -- -- Skip -- Atla -- -- -- Disable -- Devre dışı -- -- -- Merge -- Birleştir -- -- -- Continue -- Devam -- -- -- -- QObject -- -- Database not opened -- Veritabanı açılmadı -- -- -- Database hash not available -- Veritabanı sağlaması mevcut değil -- -- -- Client public key not received -- İstemci genel anahtarı alınmadı -- -- -- Cannot decrypt message -- İletinin şifresi çözülemedi -- -- -- Action cancelled or denied -- Eylem iptal edildi veya reddedildi -- -- -- KeePassXC association failed, try again -- KeePassXC ilişkilendirmesi başarısız, yeniden dene -- -- -- Encryption key is not recognized -- Şifreleme anahtarı tanınmadı -- -- -- Incorrect action -- Doğru olmayan eylem -- -- -- Empty message received -- Boş ileti alındı -- -- -- No URL provided -- URL sağlanmadı -- -- -- No logins found -- Giriş bulunamadı -- -- -- Unknown error -- Bilinmeyen hata -- -- -- Add a new entry to a database. -- Veritabanına yeni bir girdi ekle. -- -- -- Path of the database. -- Veritabanının yolu. -- -- -- Key file of the database. -- Veritabanının anahtar dosyası. -- -- -- path -- yol -- -- -- Username for the entry. -- Girdi için kullanıcı adı. -- -- -- username -- kullanıcı adı -- -- -- URL for the entry. -- Girdi için URL. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Girdi parolasını sor. -- -- -- Generate a password for the entry. -- Girdi için parola oluştur. -- -- -- length -- uzunluk -- -- -- Path of the entry to add. -- Eklenecek girdinin yolu. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Girişi kısaltmanın yolu. -- -- -- Timeout in seconds before clearing the clipboard. -- Pano temizlenmeden önce geçecek saniye. -- -- -- Edit an entry. -- Bir girdi düzenle. -- -- -- Title for the entry. -- Girdi için başlık. -- -- -- title -- başlık -- -- -- Path of the entry to edit. -- Düzenlenecek girdinin yolu. -- -- -- Estimate the entropy of a password. -- Parolanın entropisini ölç. -- -- -- Password for which to estimate the entropy. -- Entropisi ölçülecek parola. -- -- -- Perform advanced analysis on the password. -- Parola üzerinde gelişmiş inceleme gerçekleştir. -- -- -- -- --Available commands: -- -- -- --Kullanılabilir komutlar: -- -- -- -- Name of the command to execute. -- Çalıştırılacak komutun adı. -- -- -- List database entries. -- Veritabanı girdilerini listele. -- -- -- Path of the group to list. Default is / -- Listelenecek kümenin yolu. Öntanımlı / -- -- -- Find entries quickly. -- Hızlıca girdi bul. -- -- -- Search term. -- Arama terimi. -- -- -- Merge two databases. -- İki veritabanını birleştir. -- -- -- Path of the database to merge from. -- Birleştirilecek veritabanının yolu. -- -- -- Use the same credentials for both database files. -- Her iki veritabanı dosyası için aynı kimliği kullan. -- -- -- Key file of the database to merge from. -- Birleştirilecek veritabanının anahtar dosyası. -- -- -- Show an entry's information. -- Bir girdinin bilgilerini göster. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Gösterilecek özniteliklerin isimleri. Bu seçenek, her bir özniteliğin verilen sıraya göre bir satırda gösterilmesiyle birden fazla kez belirtilebilir. Eğer hiçbir öznitelik belirtilmediyse, öntanımlı özniteliklerin bir özeti verilir. -- -- -- attribute -- öznitelik -- -- -- Name of the entry to show. -- Gösterilecek girdinin adı. -- -- -- NULL device -- Geçersiz cihaz -- -- -- error reading from device -- cihazdan okuma hatası -- -- -- malformed string -- kusurlu dizge -- -- -- missing closing quote -- kapanış tırnak işareti eksik -- -- -- Group -- Küme -- -- -- Title -- Başlık -- -- -- Username -- Kullanıcı adı -- -- -- Password -- Parola -- -- -- Notes -- Notlar -- -- -- Last Modified -- Son Değişiklik -- -- -- Created -- Oluşturuldu -- -- -- Browser Integration -- Tarayıcı Bütünleşmesi -- -- -- SSH Agent -- SSH İstemci -- -- -- Generate a new random diceware passphrase. -- Yeni bir rastgele diceware parolası oluştur. -- -- -- Word count for the diceware passphrase. -- Diceware parolası için kelime sayısı. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Diceware oluşturucu için Kelime Listesi. --[Öntanımlı: EFF İngilizce] -- -- -- Generate a new random password. -- Yeni bir rastgele parola oluştur. -- -- -- Could not create entry with path %1. -- %1 yolu ile giriş oluşturulamadı. -- -- -- Enter password for new entry: -- Yeni girdi için parolayı gir: -- -- -- Writing the database failed %1. -- Veritabanına yazma başarısız: %1 -- -- -- Successfully added entry %1. -- %1 girişi başarıyla eklendi. -- -- -- Invalid timeout value %1. -- Geçersiz zaman aşımı değeri %1. -- -- -- Entry %1 not found. -- Girdi %1 bulunamadı. -- -- -- Entry with path %1 has no TOTP set up. -- %1 yolunun girişinde TOTP ayarlanmadı. -- -- -- Clearing the clipboard in %1 second(s)... -- %1 saniye içinde pano temizleniyor...%1 saniye içinde pano temizleniyor... -- -- -- Clipboard cleared! -- Pano temizlendi! -- -- -- Silence password prompt and other secondary outputs. -- Sessiz parola istemi ve diğer ikincil çıkışlar. -- -- -- count -- CLI parameter -- sayım -- -- -- Could not find entry with path %1. -- Giriş yolu bulunamadı %1. -- -- -- Not changing any field for entry %1. -- %1 girişi için herhangi bir alanı değiştirmez. -- -- -- Enter new password for entry: -- Girdi için yeni parola gir: -- -- -- Writing the database failed: %1 -- Veritabanına yazma başarısız: %1 -- -- -- Successfully edited entry %1. -- %1 girişi başarıyla düzenlendi. -- -- -- Length %1 -- Uzunluk %1 -- -- -- Entropy %1 -- Entropi %1 -- -- -- Log10 %1 -- Günlük10 %1 -- -- -- Multi-word extra bits %1 -- Çok kelimeli ekstra bit %1 -- -- -- Type: Bruteforce -- Tür: Zorla -- -- -- Type: Dictionary -- Tür: Sözlük -- -- -- Type: Dict+Leet -- Tür: Sözlük+Leet -- -- -- Type: User Words -- Tür: Kullanıcı Sözcükleri -- -- -- Type: User+Leet -- Tür: Kullanıcı+Leet -- -- -- Type: Repeated -- Tür: Tekrarlanan -- -- -- Type: Sequence -- Tür: Sıra -- -- -- Type: Spatial -- Tür: Mekansal -- -- -- Type: Date -- Tür: Tarih -- -- -- Type: Bruteforce(Rep) -- Tür: Zorla(Rep) -- -- -- Type: Dictionary(Rep) -- Tür: Sözlük(Rep) -- -- -- Type: Dict+Leet(Rep) -- Tür: Sözlük+Leet(Rep) -- -- -- Type: User Words(Rep) -- Tür: Kullanıcı Sözcükleri(Rep) -- -- -- Type: User+Leet(Rep) -- Tür: Kullanıcı+Leet(Rep) -- -- -- Type: Repeated(Rep) -- Tür: Tekrarlanan(Rep) -- -- -- Type: Sequence(Rep) -- Tür: Sıra(Rep) -- -- -- Type: Spatial(Rep) -- Tür: Mekansal(Rep) -- -- -- Type: Date(Rep) -- Tür: Tarih(Rep) -- -- -- Type: Unknown%1 -- Tür: Bilinmiyor%1 -- -- -- Entropy %1 (%2) -- Entropi %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Parola uzunluğu (%1) != parçaların uzunluğu toplamı (%2) *** -- -- -- Failed to load key file %1: %2 -- Anahtar dosyası yüklenemedi %1: %2 -- -- -- Length of the generated password -- Oluşturulan parolanın uzunluğu -- -- -- Use lowercase characters -- Küçük harfli karakterler kullan -- -- -- Use uppercase characters -- Büyük harfli karakterler kullan -- -- -- Use special characters -- Özel karakterler kullan -- -- -- Use extended ASCII -- Genişletilmiş ASCII kullan -- -- -- Exclude character set -- Karakter kümesini hariç tut -- -- -- chars -- karakter -- -- -- Exclude similar looking characters -- Benzer görünen karakterleri hariç tut -- -- -- Include characters from every selected group -- Seçilen her kümedeki karakterleri dahil et -- -- -- Recursively list the elements of the group. -- Kümenin ögelerini özyinelemeli olarak listeler. -- -- -- Cannot find group %1. -- %1 kümesi bulunamıyor. -- -- -- Error reading merge file: --%1 -- Birleştirme dosyası okunurken hata: --%1 -- -- -- Unable to save database to file : %1 -- Veritabanı dosyaya kaydedilemedi: %1 -- -- -- Unable to save database to file: %1 -- Veritabanı dosyaya kaydedilemedi: %1 -- -- -- Successfully recycled entry %1. -- %1 girişi başarıyla geri dönüştürüldü. -- -- -- Successfully deleted entry %1. -- Girdi başarıyla silindi %1 -- -- -- Show the entry's current TOTP. -- Girişin mevcut TOTP'sini göster. -- -- -- ERROR: unknown attribute %1. -- HATA: bilinmeyen öznitelik %1. -- -- -- No program defined for clipboard manipulation -- Pano manipülasyonu için tanımlanmış bir program yok -- -- -- file empty -- dosya boş -- -- -- %1: (row, col) %2,%3 -- %1: (satır, sütun) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Geçersiz Ayarlar -- -- -- Invalid Key -- TOTP -- Geçersiz Anahtar -- -- -- Message encryption failed. -- İleti şifreleme başarısız. -- -- -- No groups found -- Hiçbir küme bulunamadı -- -- -- Create a new database. -- Yeni veritabanı oluştur. -- -- -- File %1 already exists. -- %1 dosyası zaten var. -- -- -- Loading the key file failed -- Anahtar dosyası yüklenemedi -- -- -- No key is set. Aborting database creation. -- Hiçbir anahtar ayarlanmadı. Veritabanı oluşturma iptal ediliyor. -- -- -- Failed to save the database: %1. -- Veritabanı kaydedilemedi: %1. -- -- -- Successfully created new database. -- Yeni veritabanı başarıyla oluşturuldu. -- -- -- Creating KeyFile %1 failed: %2 -- %1 AnahtarDosyası oluşturulamadı: %2 -- -- -- Loading KeyFile %1 failed: %2 -- %1 AnahtarDosyası yüklenemedi:%2 -- -- -- Path of the entry to remove. -- Kaldırılacak girdinin yolu. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Var olan tekil oluşum kilit dosyası geçersiz. Yeni oluşum başlatılıyor. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Kilit dosyası oluşturulamadı. Tekil oluşum kipi devre dışı bırakıldı. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - çapraz platformlu parola yöneticisi -- -- -- filenames of the password databases to open (*.kdbx) -- açılacak parola veritabanlarının dosya adları (*.kdbx) -- -- -- path to a custom config file -- özel yapılandırma dosyası yolu -- -- -- key file of the database -- veritabanı anahtar dosyası -- -- -- read password of the database from stdin -- veritabanının parolasını stdin'den oku -- -- -- Another instance of KeePassXC is already running. -- KeePassXC'nin başka bir örneği zaten çalışıyor. -- -- -- Fatal error while testing the cryptographic functions. -- Kriptografik işlevler sınanırken ölümcül hata. -- -- -- KeePassXC - Error -- KeePassXC - Hata -- -- -- Database password: -- Veritabanı parolası: -- -- -- Cannot create new group -- Yeni küme oluşturulamıyor -- -- -- Deactivate password key for the database. -- Veritabanı için parola anahtarını devre dışı bırak. -- -- -- Displays debugging information. -- Hata ayıklama bilgilerini görüntüler. -- -- -- Deactivate password key for the database to merge from. -- Veritabanının birleştirileceği parola anahtarını devre dışı bırak. -- -- -- Version %1 -- Sürüm %1 -- -- -- Build Type: %1 -- Yapı: %1 -- -- -- Revision: %1 -- Düzeltme: %1 -- -- -- Distribution: %1 -- Dağıtım: %1 -- -- -- Debugging mode is disabled. -- Hata ayıklama kipi devre dışı. -- -- -- Debugging mode is enabled. -- Hata ayıklama kipi etkin. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- İşletim sistemi: %1 --MİB mimarisi: %2 --Çekirdek: %3 %4 -- -- -- Auto-Type -- Otomatik Yazım -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (imzalı ve imzasız paylaşım) -- -- -- KeeShare (only signed sharing) -- KeeShare (sadece imzalanmış paylaşım) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (sadece imzasız paylaşım) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Yok -- -- -- Enabled extensions: -- Etkin eklentiler: -- -- -- Cryptographic libraries: -- Şifreleme kütüphaneleri: -- -- -- Cannot generate a password and prompt at the same time! -- Parola ve komut istemi aynı anda oluşturulamaz! -- -- -- Adds a new group to a database. -- Veritabanına yeni bir küme ekler. -- -- -- Path of the group to add. -- Eklenecek kümenin yolu. -- -- -- Group %1 already exists! -- %1 grubu zaten var! -- -- -- Group %1 not found. -- %1 grubu bulunamadı. -- -- -- Successfully added group %1. -- Başarıyla %1 grubuna eklendi -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Parolalar açıktan sızdırıldı mı diye kontrol et. FILENAME sızdırılmış parolaların SHA-1 karmalarını HIBP biçiminde listeleyen bir dosyanın yolu olmalı, https://haveibeenpwned.com/Passwords adresindeki bulunabildiği gibi. -- -- -- FILENAME -- DOSYAADI -- -- -- Analyze passwords for weaknesses and problems. -- Parolaları zayıflıklar ve problemler için incele. -- -- -- Failed to open HIBP file %1: %2 -- HIBP dosya açılamadı: %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Veritabanı girdileri HIBP dosyasına çevriliyor, bu biraz zaman alacak... -- -- -- Close the currently opened database. -- Şu anda açık olan veritabanını kapat. -- -- -- Display this help. -- Bu yardımı görüntüle. -- -- -- slot -- yuva -- -- -- Invalid word count %1 -- Geçersiz kelime sayımı %1 -- -- -- The word list is too small (< 1000 items) -- Kelime listesi çok küçük(< 1000 öge) -- -- -- Exit interactive mode. -- Etkileşimli kipten çık. -- -- -- Exports the content of a database to standard output in the specified format. -- Bir veritabanının içeriğini belirtilen biçimde standart çıktıya aktarır. -- -- -- Unable to export database to XML: %1 -- Veritabanı XML'ye dışa aktarılamıyor: %1 -- -- -- Unsupported format %1 -- Desteklenmeyen biçim %1 -- -- -- Use numbers -- Sayıları kullan -- -- -- Invalid password length %1 -- Geçersiz parola uzunluğu %1 -- -- -- Display command help. -- Komut yardımını görüntüle. -- -- -- Available commands: -- Kullanılabilir komutlar: -- -- -- Import the contents of an XML database. -- XML veritabanının içeriğini içe aktar. -- -- -- Path of the XML database export. -- XML veritabanının dışa aktarılacağı dosya yolu. -- -- -- Path of the new database. -- Yeni veritabanının yolu. -- -- -- Successfully imported database. -- Veritabanı başarıyla içe aktarıldı. -- -- -- Unknown command %1 -- Bilinmeyen komut %1 -- -- -- Flattens the output to single lines. -- Çıkışı tekil satırlara indirger. -- -- -- Only print the changes detected by the merge operation. -- Yalnızca birleştirme işlemi tarafından algılanan değişiklikleri yazdır. -- -- -- Yubikey slot for the second database. -- İkinci veritabanı için Yubikey yuvası. -- -- -- Successfully merged %1 into %2. -- Başarıyla %1 ile %2 birleştirildi. -- -- -- Database was not modified by merge operation. -- Veritabanı birleştirme işlemi tarafından değiştirilmedi. -- -- -- Moves an entry to a new group. -- Bir girdiyi yeni bir gruba taşır. -- -- -- Path of the entry to move. -- Taşınacak girdini yolu. -- -- -- Path of the destination group. -- Hedef grubun yolu. -- -- -- Could not find group with path %1. -- %1 yolundaki grup bulunamadı. -- -- -- Entry is already in group %1. -- Girdi zaten grup %1 in içinde. -- -- -- Successfully moved entry %1 to group %2. -- Başarıyla girdi %1 grubundan %2 ye taşındı. -- -- -- Open a database. -- Bir veritabanı aç. -- -- -- Path of the group to remove. -- Kaldırılacak kümenin yolu. -- -- -- Cannot remove root group from database. -- root grubunu veritabanından kaldıramayız. -- -- -- Successfully recycled group %1. -- Grup %1 başarıyla geri dönüştürüldü. -- -- -- Successfully deleted group %1. -- Grup %1 başarıyla silindi. -- -- -- Failed to open database file %1: not found -- Veritabanı dosyası açılamadı %1: bulunamadı -- -- -- Failed to open database file %1: not a plain file -- Veritabanı dosyası %1 açılamadı: basit bir dosya değil -- -- -- Failed to open database file %1: not readable -- Veritabanı dosyası %1 açılamadı: okunamıyor -- -- -- Enter password to unlock %1: -- %1 in kilidini açmak için parola girin: -- -- -- Invalid YubiKey slot %1 -- Geçersiz YubiKey yuvası %1 -- -- -- Enter password to encrypt database (optional): -- Veritabanını şifrelemek için parola gir (isteğe bağlı): -- -- -- HIBP file, line %1: parse error -- HIBP dosyası, satır %1: çözümleme hatası -- -- -- Secret Service Integration -- Gizli Servis Bütünleşmesi -- -- -- User name -- Kullanıcı adı -- -- -- Password for '%1' has been leaked %2 time(s)! -- '%1' girdisinin parolası %2 kere sızdırıldı!'%1' girdisinin parolası %2 kere sızdırıldı! -- -- -- Invalid password generator after applying all options -- Tüm şeçenekler uygulandıktan sonra geçersiz parola üretiliyor. -- -- -- Show the protected attributes in clear text. -- Korumalı öznitelikleri açık yazı olarak göster. -- -- -- Browser Plugin Failure -- Tarayıcı Eklenti Hatası -- -- -- Could not save the native messaging script file for %1. -- %1 için yerel mesajlaşma komut dosyası kaydedilemedi. -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- Verilen özniteliği parolayı kopyalar. Belirtilmemişse varsayılan olarak "password" özniteliğini panoya kopyalar. -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- Geçerli TOTP değerini panoya kopyala ("-a totp" ye eşdeğer). -- -- -- Copy an entry's attribute to the clipboard. -- Bir girdinin özniteliğini panoya kopyala. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- HATA: --attribute veya --totp seçeneklerinden birini belirtiniz, ikisini birden değil. -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- HATA: %1 özniteliğinin birden fazla karşılığı var, %2 eşleşme var. -- -- -- Attribute "%1" not found. -- "%1" özniteliği bulunamadı. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Girdinin "%1" özniteliği panoya kopyalandı! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey yuvası ve seçimlik seri numarası, veritabanına erişmek için kullanıldı (örn., 1:7370001). -- -- -- slot[:serial] -- slot[:serial] -- -- -- Target decryption time in MS for the database. -- ms cinsinden veritabanı şifre çözme süresi hedefi. -- -- -- time -- zaman -- -- -- Set the key file for the database. -- Veritanı için anahtar dosyasını belirleyin. -- -- -- Set a password for the database. -- Veritabanı için bir parola belirleyin. -- -- -- Invalid decryption time %1. -- Geçersiz şifre çözme süresi %1. -- -- -- Target decryption time must be between %1 and %2. -- Hedef şifre çözme süresi %1 ile %2 arasında olmalı. -- -- -- Failed to set database password. -- Veritabanı parolası ayarlanamadı. -- -- -- Benchmarking key derivation function for %1ms delay. -- Anahtar türetme işlevi, %1ms geçikme için kıyaslanıyor. -- -- -- Setting %1 rounds for key derivation function. -- Anahtar türetme işlevi için %1 çevrim ayarlanıyor. -- -- -- error while setting database key derivation settings. -- veritabanı anahtar türetme ayarları belirlenirken hata oluştu. -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Dışarı verirken kullanılacak format. Uygun olan seçenekler 'xml' veya 'csv'. Varsayılan 'xml'. -- -- -- Unable to import XML database: %1 -- XML veritabanı içeri alınamadı: %1 -- -- -- Show a database's information. -- Bir veritabanının bilgisini göster. -- -- -- UUID: -- UUID: -- -- -- Name: -- İsim: -- -- -- Description: -- Açıklama: -- -- -- Cipher: -- Şifreleme: -- -- -- KDF: -- Anahtar Türetme İşlevi: -- -- -- Recycle bin is enabled. -- Çöp kutusu etkinleştirildi. -- -- -- Recycle bin is not enabled. -- Çöp kutusu etkinleştirilmedi. -- -- -- Invalid command %1. -- Geçersiz komut %1. -- -- -- Invalid YubiKey serial %1 -- Geçersiz YubiKey seri numarası %1 -- -- -- Please touch the button on your YubiKey to continue… -- Lütfen, devam etmek için YubiKey üzerindeki tuşa dokunun... -- -- -- Do you want to create a database with an empty password? [y/N]: -- Boş bir parolayla veritabanı oluşturmak ister misiniz ? [y/N]: -- -- -- Repeat password: -- Parola tekrar: -- -- -- Error: Passwords do not match. -- Hata: Parolalar eşleşmiyor. -- -- -- All clipping programs failed. Tried %1 -- -- Tüm kesme programları başarısız oldu. Denedi %1 -- -- -- -- AES (%1 rounds) -- AES (%1 çevrim) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20: 256-bit {20 256-?} -- -- -- Benchmark %1 delay -- Karşılaştırma deneyi %1 gecikmeli -- -- -- %1 ms -- milliseconds -- %1 ms%1 ms -- -- -- %1 s -- seconds -- %1 s%1 s -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- TOTP -- -- -- Icon -- Simge -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Sıkıştırılırken dahili zlib hatası: -- -- -- Error writing to underlying device: -- Temel aygıta yazma hatası: -- -- -- Error opening underlying device: -- Temel cihaz açılırken hata oluştu: -- -- -- Error reading data from underlying device: -- Temel aygıttan veri okuma hatası: -- -- -- Internal zlib error when decompressing: -- Açma sırasında dahili zlib hatası: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- gzip biçimi zlib'in bu sürümünde desteklenmiyor. -- -- -- Internal zlib error: -- Dahili zlib hatası: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Raporlardan hariç tutulan girdileri de göster -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Ek ayrıntılar göstermek için fareyi sebep üzerinde gezdir. --Girdiyi düzenlemek için tıkla. -- -- -- Bad -- Password quality -- Kötü -- -- -- Bad — password must be changed -- Kötü — parola mutlaka değiştirilmeli -- -- -- Poor -- Password quality -- Kötü -- -- -- Poor — password should be changed -- Yetersiz — parola değiştirilmeli -- -- -- Weak -- Password quality -- Zayıf -- -- -- Weak — consider changing the password -- Zayıf — parolayı değiştirmeyi düşünün -- -- -- (Excluded) -- (Hariç tutuldu) -- -- -- This entry is being excluded from reports -- Bu girdi raporlardan hariç tutuldu -- -- -- Please wait, health data is being calculated... -- Lütfen bekleyiniz, sağlık verisi hesaplanıyor... -- -- -- Congratulations, everything is healthy! -- Tebrikler, herşey sağlıklı! -- -- -- Title -- Başlık -- -- -- Path -- Yol -- -- -- Score -- Puan -- -- -- Reason -- Sebep -- -- -- Edit Entry... -- Girdiyi Düzenle... -- -- -- Exclude from reports -- Raporlardan hariç tut -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- UYARI: Bu rapor "Have I Been Pwned" çevrimiçi servisine (https://haveibeenpwned.com) bilgi göndermeyi gerektirir. Devam ederseniz, veritabanı parolalarınız kriptografik olarak karıştırılıp bu karmanın ilk beş karakteri güvenli olarak bu servise gönderilecek. Veritabanınız güvenli kalır ve bu bilgiyle yeniden oluşturulamaz. Fakat, gönderdiğiniz parolaların sayısı ve IP adresiniz bu servise açılmış olacak. -- -- -- Perform Online Analysis -- Çevrimiçi Analiz Yapın -- -- -- Also show entries that have been excluded from reports -- Raporlardan hariç tutulan girdileri de göster -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- KeePassXC'nin bu yapımı ağ işlevleri içermez. Ağ, parolalarınızı Have I Been Pwned veritabanlarıyla kontrol etmek için gereklidir. -- -- -- Congratulations, no exposed passwords! -- Tebrikler, hiç bir açığa çıkmış parolanız yok! -- -- -- Title -- Başlık -- -- -- Path -- Yol -- -- -- Password exposed… -- Parola açığa çıktı... -- -- -- (Excluded) -- (Hariç tutuldu) -- -- -- This entry is being excluded from reports -- Bu girdi raporlardan hariç tutuldu -- -- -- once -- bir kere -- -- -- up to 10 times -- 10 defaya kadar -- -- -- up to 100 times -- 100 defaya kadar -- -- -- up to 1000 times -- 1000 defaya kadar -- -- -- up to 10,000 times -- 10000 defaya kadar -- -- -- up to 100,000 times -- 100000 defaya kadar -- -- -- up to a million times -- milyon defaya kadar -- -- -- millions of times -- milyonlarca kere -- -- -- Edit Entry... -- Girdiyi Düzenle... -- -- -- Exclude from reports -- Raporlardan hariç tut -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Daha fazla bilgi için farenizi hata simgeli satırların üzerine getirin. -- -- -- Name -- Adı -- -- -- Value -- Değer -- -- -- Please wait, database statistics are being calculated... -- Lütfen bekleyin, veritabanı istatistikleri hesaplanıyor... -- -- -- Database name -- Veritabanı adı -- -- -- Description -- Açıklama -- -- -- Location -- Konum -- -- -- Last saved -- Son kaydedilen -- -- -- Unsaved changes -- Kaydedilmemiş değişiklikler -- -- -- yes -- evet -- -- -- no -- hayır -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Veritabanı değiştirildi, ancak değişiklikler henüz diske kaydedilmedi. -- -- -- Number of groups -- Küme sayısı -- -- -- Number of entries -- Girdilerin sayısı -- -- -- Number of expired entries -- Süresi dolmuş girdi sayısı -- -- -- The database contains entries that have expired. -- Veritabanı süresi dolmuş girdiler içeriyor. -- -- -- Unique passwords -- Benzersiz parolalar -- -- -- Non-unique passwords -- Benzersiz olmayan parolalar -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Parolaların %10'undan fazlası yeniden kullanılır. Mümkünse benzersiz parolalar kullanın. -- -- -- Maximum password reuse -- Azami parola kullanımı -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Bazı parolalar üç kereden fazla kullanılır. Mümkünse benzersiz parolalar kullanın. -- -- -- Number of short passwords -- Kısa parola sayısı -- -- -- Recommended minimum password length is at least 8 characters. -- Önerilen asgari parola uzunluğu en az 8 karakterdir. -- -- -- Number of weak passwords -- Zayıf parola sayısı -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- 'İyi' veya 'mükemmel' derecesine sahip uzun, rastgele parolalar kullanmanızı öneririz. -- -- -- Entries excluded from reports -- Raporlardan hariç tutulan girdiler -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Girdileri raporlardan hariç tutuyoruz, örn. çünkü yetersiz bir parola sahip oldukları biliniyor, mutlak bir problem değil ama gözünüzün üzerinde olması lazım. -- -- -- Average password length -- Ortalama parola uzunluğu -- -- -- %1 characters -- %1 karakter -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Ortalama parola uzunluğu on karakterden az. Daha uzun parolalar daha fazla güvenlik sağlar. -- -- -- -- SSHAgent -- -- Agent connection failed. -- İstemci bağlantısı başarısız. -- -- -- Agent protocol error. -- İstemci protokol hatası. -- -- -- No agent running, cannot add identity. -- Çalışan istemci yok, kimlik ekleyemezsiniz. -- -- -- No agent running, cannot remove identity. -- Çalışan istemci yok, kimlik kaldırılamaz. -- -- -- Agent refused this identity. Possible reasons include: -- İstemci bu kimliği reddetti. Olası nedenler şunlardır: -- -- -- The key has already been added. -- Anahtar zaten eklendi. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Kısıtlı süre istemci tarafından desteklenmez (seçenekleri kontrol edin). -- -- -- A confirmation request is not supported by the agent (check options). -- Onay isteği istemci tarafından desteklenmiyor (seçenekleri kontrol edin). -- -- -- Key identity ownership conflict. Refusing to add. -- Anahtar kimlik sahipliği uyuşmazlığı. Ekleme reddediliyor. -- -- -- No agent running, cannot list identities. -- Hiç bir istemci çalışmıyor, kimlikler listelenemiyor. -- -- -- -- SearchHelpWidget -- -- Search Help -- Yardım Ara -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Arama terimleri şunlar gibidir: [değiştiren][alan:]["]terim["] -- -- -- Every search term must match (ie, logical AND) -- Her arama terimi eşleşmelidir (yani, mantıksal ve) -- -- -- Modifiers -- Düzenleyen -- -- -- exclude term from results -- terimi sonuçların dışında tut -- -- -- match term exactly -- tam eşleşme terimi -- -- -- use regex in term -- regex terimini kullan -- -- -- Fields -- Alanlar -- -- -- Term Wildcards -- Terim Joker Karakterler -- -- -- match anything -- her şeyle eşleştir -- -- -- match one -- birini eşleştir -- -- -- logical OR -- mantıksal yada -- -- -- Examples -- Örnekler -- -- -- -- SearchWidget -- -- Search -- Ara -- -- -- Limit search to selected group -- Aramayı seçilen kümeyle sınırla -- -- -- Search Help -- Yardım Ara -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Ara (%1)... -- -- -- Case sensitive -- Harfe duyarlı -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Seçenekler -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- KeepassXC Freedesktop.org Gizli Servis bütünleşmesini etkinleştir -- -- -- General -- Genel -- -- -- Show notification when credentials are requested -- Kimlik bilgileri istendiğinde bir bildirim göster -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Çöp kutusu veritabanı için etkinleştirilmişse, girdiler doğrudan çöp kutusuna taşınacaklar. Değilse, onay alınmadan silinecekler.</p><p>Herhangi bir girdi diğerleri tarafından kaynak gösterildiyse hala uyarılacaksınız.</p></body></html> -- -- -- Exposed database groups: -- Maruz kalan veritabanı kümeleri: -- -- -- Authorization -- Yetki -- -- -- These applications are currently connected: -- Bu uygulamalar şu anda bağlı: -- -- -- Don't confirm when entries are deleted by clients -- Girdiler istemciler tarafından silinirse onay isteme -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>Hata:</b> DBus'a vağlanılamadı. Lütfen DBus ayarlarınızı kontrol edin. -- -- -- <b>Warning:</b> -- <b>Uyarı:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- Eklentiyi etkinleştirmek için şu anki değişiklikleri kaydedin ve bu bölümü düzenlemeyi etkinleştirin. -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Aktif -- -- -- Allow export -- Dışa aktarmaya izin ver -- -- -- Allow import -- İçe aktarmaya izin ver -- -- -- Own certificate -- Öz sertifika -- -- -- Fingerprint: -- Parmak izi: -- -- -- Certificate: -- Sertifika: -- -- -- Signer -- İmzalayan -- -- -- Key: -- Anahtar: -- -- -- Generate -- Oluştur -- -- -- Import -- İçe aktar -- -- -- Export -- Dışa aktar -- -- -- Imported certificates -- Alınan sertifikalar -- -- -- Trust -- Güven -- -- -- Ask -- Sor -- -- -- Untrust -- Güvenme -- -- -- Remove -- Kaldır -- -- -- Path -- Yol -- -- -- Status -- Durum -- -- -- Fingerprint -- Parmak izi -- -- -- Certificate -- Sertifika -- -- -- Trusted -- Güvenilir -- -- -- Untrusted -- Güvenilmez -- -- -- Unknown -- Bilinmeyen -- -- -- key.share -- Filetype for KeeShare key -- anahtar.paylaş -- -- -- KeeShare key file -- KeeShare anahtar dosyası -- -- -- All files -- Tüm dosyalar -- -- -- Select path -- Yol seç -- -- -- Exporting changed certificate -- Değişen sertifikayı dışa aktar -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Aktarılan sertifika kullanılan sertifika ile aynı değil. Mevcut sertifikayı vermek aktarmak musunuz? -- -- -- Signer: -- İmzalayan: -- -- -- Allow KeeShare imports -- KeeShare içe aktarımlara izin ver -- -- -- Allow KeeShare exports -- KeeShare dışa aktarımlara izin ver -- -- -- Only show warnings and errors -- Yalnızca uyarıları ve hataları göster -- -- -- Key -- Anahtar -- -- -- Signer name field -- İmzalayan adı alanı -- -- -- Generate new certificate -- Yeni sertifika oluştur -- -- -- Import existing certificate -- Var olan sertifikayı içeri al -- -- -- Export own certificate -- Kendi sertifikanı dışarı ver -- -- -- Known shares -- Bilinen paylaşımlar -- -- -- Trust selected certificate -- Seçili sertifikaya güven -- -- -- Ask whether to trust the selected certificate every time -- Seçili sertifikaya güvenilecek mi diye her seferinde sor -- -- -- Untrust selected certificate -- Seçili sertifikaya güvenme -- -- -- Remove selected certificate -- Seçilen sertifikayı kaldır -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- İmzalı paylaşım konteynerin üzerine yazma desteklenmiyor -dışa aktarma engellendi -- -- -- Could not write export container (%1) -- Dışa aktarım konteynere yazılamadı (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- İmza gömülemedi: Yazılacak dosya açılamadı (%1) -- -- -- Could not embed signature: Could not write file (%1) -- İmza gömülemedi: Dosya yazılamadı (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Veritabanı gömülemedi: Yazılacak dosya açılamadı (%1) -- -- -- Could not embed database: Could not write file (%1) -- Veritabanı gömülemedi: dosya yazılamadı (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- İmzasız paylaşım konteynerin üzerine yazma desteklenmiyor -dışa aktarma engellendi -- -- -- Could not write export container -- Dışa aktarım konteynere yazılamadı -- -- -- Unexpected export error occurred -- Beklenmeyen dışa aktarma hatası oluştu -- -- -- -- ShareImport -- -- Import from container without signature -- İmzayı konteynerden içeri aktar -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- İmzalı olmadığından paylaşılan konteynerin kaynağını doğrulayamazsınız. %1 ögesinden içeri aktarmak istiyor musunuz? -- -- -- Import from container with certificate -- Sertifikayı konteynerden içe aktar -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- %3'ten %2 parmak izi ile %1'e güvenmek ister misiniz? {1 ?} {2 ?} -- -- -- Not this time -- Bu sefer değil -- -- -- Never -- Asla -- -- -- Always -- Daima -- -- -- Just this time -- Sadece bu seferlik -- -- -- Signed share container are not supported - import prevented -- İmzalı paylaşım konteyneri desteklenmiyor -içeri alma engellendi -- -- -- File is not readable -- Dosya okunamıyor -- -- -- Invalid sharing container -- Geçersiz konteyner paylaşımı -- -- -- Untrusted import prevented -- Güvenilmeyen içe aktarma önlendi -- -- -- Successful signed import -- İmzalı içe aktarma başarılı -- -- -- Unsigned share container are not supported - import prevented -- İmzalanmamış paylaşım konteyneri desteklenmiyor -içeri alma engellendi -- -- -- Successful unsigned import -- İmzasız içe aktarma başarılı -- -- -- File does not exist -- Dosya mevcut değil -- -- -- Unknown share container type -- Bilinmeyen konteyner paylaşım türü -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- % 1'den içe aktarma başarısız (%2) -- -- -- Import from %1 successful (%2) -- %1'den içe aktarma başarılı (%2) -- -- -- Imported from %1 -- %1 den içe aktarıldı -- -- -- Export to %1 failed (%2) -- %1'e aktarma başarısız oldu (%2) -- -- -- Export to %1 successful (%2) -- %1’e aktarma başarılı (%2) -- -- -- Export to %1 -- %1'e aktar -- -- -- Multiple import source path to %1 in %2 -- %2 içinde %1'e çoklu içe aktarma kaynak yolu -- -- -- Conflicting export target path %1 in %2 -- Çakışan aktarma hedef yolu %1 %2 -- -- -- -- TotpDialog -- -- Timed Password -- Zamanlı Parola -- -- -- 000000 -- 000000 -- -- -- Copy -- Kopyala -- -- -- Expires in <b>%n</b> second(s) -- <b>%n</b> saniye içinde sona erecek<b>%n</b> saniye içinde sona erecek -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Kopyala -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- NOT: Bu TOTP ayarları özeldir ve diğer kimlik doğrulayıcılarla çalışmayabilir. -- -- -- There was an error creating the QR code. -- QR kodunu oluştururken bir hata oluştu. -- -- -- Closing in %1 seconds. -- %1 saniye içinde kapanıyor. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- TOTP Kurulum -- -- -- Default RFC 6238 token settings -- Öntanımlı RFC 6238 anahtar ayarları -- -- -- Steam token settings -- Steam anahtar ayarları -- -- -- Use custom settings -- Özel ayarlar kullan -- -- -- Custom Settings -- Özel Ayarlar -- -- -- Time step: -- Zaman adımı: -- -- -- sec -- Seconds -- san -- -- -- Code size: -- Kod boyutu: -- -- -- Secret Key: -- Gizli Anahtar: -- -- -- Secret key must be in Base32 format -- Gizli anahtar Base32 biçiminde olmalıdır -- -- -- Secret key field -- Gizli anahtar alanı -- -- -- Algorithm: -- Algoritma: -- -- -- Time step field -- Zaman adımı alanı -- -- -- digits -- basamak -- -- -- Invalid TOTP Secret -- Geçersiz TOTP gizli anahtarı -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Geçersiz bir gizli anahtar girdiniz. Anahtar Base32 formatında olmalı. --Örneğin: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- TOTP Ayarlarını Kaldırmayı Onaylayın -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Bu girdi için TOTP ayarlarını silmek istediğinize emin misiniz ? -- -- -- -- URLEdit -- -- Invalid URL -- Geçersiz URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Güncellemeleri kontrol et -- -- -- Checking for updates... -- Güncellemeler kontrol ediliyor... -- -- -- Close -- Kapat -- -- -- Update Error! -- Güncelleme Hatası! -- -- -- An error occurred in retrieving update information. -- Güncelleme bilgileri alınırken bir hata oluştu. -- -- -- Please try again later. -- Lütfen daha sonra tekrar deneyin. -- -- -- Software Update -- Yazılım Güncellemesi -- -- -- A new version of KeePassXC is available! -- KeePassXC'in yeni bir sürümü mevcut! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 şimdi kullanılabilir — sizdeki %2. -- -- -- Download it at keepassxc.org -- Keepassxc.org adresinden indirin -- -- -- You're up-to-date! -- Güncelsin! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 şu anda mevcut en yeni sürüm -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Parolalarınızı KeePassXC veritabanında güvenle depolamaya başlayın -- -- -- Create new database -- Yeni veritabanı oluştur -- -- -- Open existing database -- Varolan veritabanını aç -- -- -- Import from KeePass 1 -- KeePass 1'den içe aktar -- -- -- Import from CSV -- CSV'den içe aktar -- -- -- Recent databases -- Son veritabanları -- -- -- Welcome to KeePassXC %1 -- KeePassXC'ye hoş geldin %1 -- -- -- Import from 1Password -- 1Password'den içeri al -- -- -- Open a recent database -- Son kullanılan veritabanını aç -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1[%2] Ayarlanmış Yuva - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] Zorluk Tepki - Yuva %3 - %4 -- -- -- Press -- Basın -- -- -- Passive -- Pasif -- -- -- %1 Invalid slot specified - %2 -- %1 Geçersiz yuva belirtilmiş - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey arayüzü başlatılamadı. -- -- -- Hardware key is currently in use. -- Donanım anahtarı şu anda kullanımda. -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- %1 seri numaralı donanım anahtarı bulunamadı. Lütfen devam etmek için anahtarı takınız. -- -- -- Hardware key timed out waiting for user interaction. -- Donanım anahtarı kullanıcı etkileşimini beklerken zaman aşımına uğradı. -- -- -- A USB error ocurred when accessing the hardware key: %1 -- Donanım anahtarın erişilirken bir USB hatası oluştu: %1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Zorluk-tepki tamamlanamadı, ayrıntılı hata : %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Yenile -- -- -- YubiKey Challenge-Response -- YubiKey Karşılama Yanıtı -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Eğer bir <a href="https://www.yubico.com/">YubiKey</a> sahibiyseniz ek güvenlik için kullanabilirsiniz.</p><p>YubiKey yuvalarından birinin programlanması gerekir <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Karşılama-Yanıtı</a>.</p> -- -- -- Refresh hardware tokens -- Donanım belirteçlerini yenile -- -- -- Hardware key slot selection -- Donanım anahtarı yuvası seçimi -- -- -- Could not find any hardware keys! -- Hiç donanım anahtarı bulunamadı! -- -- -- Selected hardware key slot does not support challenge-response! -- Seçili donanım anahtar yuvası zorluk-tepkiyi desteklemiyor! -- -- -- Detecting hardware keys… -- Donanım anahtarları tespit ediliyor... -- -- -- No hardware keys detected -- Hiç bir donanım anahtarı tespit edilmedi -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_uk.ts keepassxc-2.6.4-patched/share/translations/keepassx_uk.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_uk.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_uk.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7891 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- Про KeePassXC -- -- -- About -- Про програму -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- Повідомляйте про вади на <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC розповсюджується на умовах Загальної публічної ліцензії GNU (GPL) версії 2 або (на ваш вибір) версії 3. -- -- -- Contributors -- Спільнота -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Переглянути внесок на GitHub</a> -- -- -- Debug Info -- Зневаджувальна інформація -- -- -- Include the following information whenever you report a bug: -- Повідомляючи про проблему, завжди долучайте наступну інформацію: -- -- -- Copy to clipboard -- Скопіювати в кишеню -- -- -- Project Maintainers: -- Супровідники проекту: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- Команда KeePassXC щиро дякує debfx за створення первісної версії KeePassX. -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- Використовувати OpenSSH для Windows замість Pageant -- -- -- Enable SSH Agent integration -- Увімкнути інтеграцію з SSH Agent -- -- -- SSH_AUTH_SOCK value -- значення SSH_AUTH_SOCK -- -- -- SSH_AUTH_SOCK override -- перевизначення SSH_AUTH_SOCK -- -- -- (empty) -- (порожньо) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- Немає доступних гнізд для SSH Agent. Або переконайтеся, що змінна оточення SSH_AUTH_SOCK існує, або вкажіть перевизначення для неї. -- -- -- SSH Agent connection is working! -- З'єднання з SSH Agent працює! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- Налаштування застосунку -- -- -- General -- Загальне -- -- -- Security -- Безпека -- -- -- Access error for config file %1 -- Помилка доступу до файлу конфігурації %1 -- -- -- Icon only -- Лише значок -- -- -- Text only -- Лише текст -- -- -- Text beside icon -- Текст поруч зі значком -- -- -- Text under icon -- Текст під значком -- -- -- Follow style -- Наслідувати стиль -- -- -- Reset Settings? -- Скинути налаштування? -- -- -- Are you sure you want to reset all general and security settings to default? -- Ви дійсно бажаєте повністю скинути налаштування і повернутись до стандартних параметрів? -- -- -- Monochrome (light) -- Монохромна (світла) -- -- -- Monochrome (dark) -- Монохромна (темна) -- -- -- Colorful -- Кольорова -- -- -- You must restart the application to set the new language. Would you like to restart now? -- -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- Базове налаштування -- -- -- Startup -- Запуск -- -- -- Start only a single instance of KeePassXC -- Запускати лише один примірник KeePassXC -- -- -- Minimize window at application startup -- Згортати вікно після запуску застосунку -- -- -- File Management -- Керування файлами -- -- -- Backup database file before saving -- Створювати резервну копію сховища перед збереженням -- -- -- Automatically save after every change -- Автоматично зберігати після кожної зміни -- -- -- Automatically reload the database when modified externally -- Автоматично перезавантажувати сховище після зовнішніх змін -- -- -- Entry Management -- Керування записами -- -- -- Use group icon on entry creation -- Використовувати для нових записів значок групи -- -- -- Minimize instead of app exit -- Згортати вікно замість закриття -- -- -- Show a system tray icon -- Показувати значок у системному лотку -- -- -- Hide window to system tray when minimized -- Після згортання ховати вікно в системний лоток -- -- -- Auto-Type -- Автозаповнення -- -- -- Use entry title to match windows for global Auto-Type -- Використовувати заголовок запису для знаходження відповідного вікна у глобальному автозаповненні -- -- -- Use entry URL to match windows for global Auto-Type -- Використовувати URL запису для знаходження відповідного вікна у глобальному автозаповненні -- -- -- Always ask before performing Auto-Type -- Завжди питати перед автозаповненням -- -- -- ms -- Milliseconds -- мс -- -- -- Movable toolbar -- Рухома панель інструментів -- -- -- Remember previously used databases -- Пам'ятати раніше використані сховища -- -- -- Load previously open databases on startup -- Завантажувати попередньо відкриті сховища під час запуску -- -- -- Remember database key files and security dongles -- Пам'ятати файлові ключі та апаратні ключі для сховища -- -- -- Check for updates at application startup once per week -- Перевіряти наявність оновлень щотижня під час запуску застосунку -- -- -- Include beta releases when checking for updates -- Пропонувати бета випуски для оновлення -- -- -- Language: -- Мова: -- -- -- (restart program to activate) -- (перезапустіть програму, щоб активувати) -- -- -- Minimize window after unlocking database -- Згортати вікно після розблокування сховища -- -- -- Minimize when opening a URL -- Згортати після відкриття URL -- -- -- Hide window when copying to clipboard -- Ховати вікно після копіювання у кишеню -- -- -- Minimize -- Згорнути -- -- -- Drop to background -- Пересунути на задній план -- -- -- Favicon download timeout: -- Ліміт часу для завантаження фавікону: -- -- -- Website icon download timeout in seconds -- Ліміт часу в секундах для завантаження значка сайту -- -- -- sec -- Seconds -- сек -- -- -- Toolbar button style -- Стиль кнопки для панелі інструментів -- -- -- Language selection -- Вибір мови -- -- -- Global auto-type shortcut -- Глобальне сполучення клавіш для автозаповнення -- -- -- Auto-type character typing delay milliseconds -- Затримка в мілісекундах перед введенням символів під час автозаповнення -- -- -- Auto-type start delay milliseconds -- Затримка в мілісекундах перед початком автозаповнення -- -- -- Automatically launch KeePassXC at system startup -- Автоматично запускати KeePassXC під час завантаженні системи -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- Безпечно зберігати файли сховищ (вимкніть, якщо виникають проблеми з Dropbox та ін.) -- -- -- User Interface -- Інтерфейс користувача -- -- -- Toolbar button style: -- Стиль кнопок панелі інструментів: -- -- -- Use monospaced font for notes -- Використовувати моноширинний шрифт для нотаток -- -- -- Tray icon type: -- Варіант значка в лотку: -- -- -- Reset settings to default… -- Скинути параметри до типових... -- -- -- Auto-Type typing delay: -- Затримка введення символів під час автозаповнення: -- -- -- Global Auto-Type shortcut: -- Глобальне сполучення клавіш для автозаповнення: -- -- -- Auto-Type start delay: -- Затримка початку автозаповнення: -- -- -- Automatically save when locking database -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- Tray icon type -- -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- Час очікування -- -- -- Clear clipboard after -- Очищати кишеню через -- -- -- sec -- Seconds -- сек -- -- -- Lock databases after inactivity of -- Блокувати сховища, неактивні протягом -- -- -- min -- хвилин -- -- -- Forget TouchID after inactivity of -- Забувати TouchID, неактивний протягом -- -- -- Convenience -- Зручність -- -- -- Lock databases when session is locked or lid is closed -- Блокувати сховища після блокування сесії або закриття кришки пристрою -- -- -- Forget TouchID when session is locked or lid is closed -- Забувати TouchID після блокування сесії або закриття кришки пристрою -- -- -- Lock databases after minimizing the window -- Блокувати сховища після згортання вікна -- -- -- Re-lock previously locked database after performing Auto-Type -- Блокувати попередньо заблоковане сховище після завершення автозаповнення -- -- -- Hide passwords in the entry preview panel -- Приховувати паролі у панелі передперегляду запису -- -- -- Hide entry notes by default -- Типово приховувати нотатки до запису -- -- -- Privacy -- Приватність -- -- -- Use DuckDuckGo service to download website icons -- Використовувати сервіс DuckDuckGo для завантаження значків сайтів -- -- -- Clipboard clear seconds -- Очищати кишеню через стільки секунд -- -- -- Touch ID inactivity reset -- Скидання TouchID після бездіяльності -- -- -- Database lock timeout seconds -- Блокування сховища за часом в секундах -- -- -- min -- Minutes -- хвилин -- -- -- Clear search query after -- Очищати пошуковий запит через -- -- -- Require password repeat when it is visible -- Вимагати підтвердження пароля, якщо він не прихований -- -- -- Hide passwords when editing them -- Приховувати паролі під час їх редагування -- -- -- Use placeholder for empty password fields -- Показувати текст-заповнювач для порожніх полів паролів -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- Не знайдено запис, що відповідає заголовку вікна: -- -- -- Auto-Type - KeePassXC -- Автозаповнення – KeePassXC -- -- -- Auto-Type -- Автозаповнення -- -- -- The Syntax of your Auto-Type statement is incorrect! -- Синтаксис виразу Автозаповнення неправильний! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- Команда Автозаповнення містить надто довгу затримку. Ви дійсно хочете продовжити? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- Команда Автозаповнення містить надто повільні натискання клавіш. Ви дійсно хочете продовжити? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- Команда Автозаповнення містить надто часто повторювані параметри. Ви дійсно хочете продовжити? -- -- -- Permission Required -- Необхідний дозвіл -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC потребує дозволу на доступність для виконання автозаповнення на рівні записів. Якщо Ви вже надали цей дозвіл, можливо Вам необхідно перезапустити KeePassXC. -- -- -- -- AutoTypeAssociationsModel -- -- Window -- Вікно -- -- -- Sequence -- Послідовність -- -- -- Default sequence -- Типова послідовність -- -- -- -- AutoTypeMatchModel -- -- Group -- Група -- -- -- Title -- Заголовок -- -- -- Username -- Ім’я користувача -- -- -- Sequence -- Послідовність -- -- -- -- AutoTypeMatchView -- -- Copy &username -- Скопіювати &ім'я користувача -- -- -- Copy &password -- Скопіювати &пароль -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- Необхідний дозвіл -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC потребує дозволу на доступність і запис екрану для виконання глобального автозаповнення. Запис екрану необхідний, щоб виявити зоголовок вікна для пошуку записів. Якщо Ви вже надали цей дозвіл, можливо Вам необхідно перезапустити KeePassXC. -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- Автозаповнення – KeePassXC -- -- -- Select entry to Auto-Type: -- Виберіть запис для автозаповнення: -- -- -- Search... -- Знайти... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- Запит доступу для KeePassXC-Browser -- -- -- %1 is requesting access to the following entries: -- %1 запитує доступ до таких записів: -- -- -- Remember access to checked entries -- Запам'ятати доступ до позначених записів -- -- -- Remember -- Запам'ятати -- -- -- Allow access to entries -- Дозволити доступ до записів -- -- -- Allow Selected -- Дозволити обрані -- -- -- Deny All -- Заборонити всі -- -- -- Disable for this site -- Вимкнути для цього сайту -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser Збереження запису -- -- -- Ok -- Гаразд -- -- -- Cancel -- Скасувати -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- У вас відкрито декілька сховищ. --Будь ласка, оберіть правильне сховище для збереження реєстраційних даних. -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: новий запит на прив'язку ключа -- -- -- Save and allow access -- Зберегти і дозволити доступ -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: перезаписати наявний ключ? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- Спільний ключ шифрування з назвою «%1» вже існує. --Перезаписати його? -- -- -- KeePassXC: Update Entry -- KeePassXC: оновити запис -- -- -- Do you want to update the information in %1 - %2? -- Бажаєте оновити інформацію у %1 – %2? -- -- -- Abort -- Скасувати -- -- -- Converting attributes to custom data… -- Перетворення ознак користувацьких даних… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: Ознаки KeePassHTTP перетворено -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- Ознаки %1 запису(-ів) успішно перетворені. --%2 ключів переміщено до користувацьких даних. -- -- -- Successfully moved %n keys to custom data. -- %n ключ успішно переміщено до користувацьких даних.%n ключа успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних. -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: Записів з ознаками KeePassHTTP не знайдено! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- Поточне сховище не містить запису з ознаками KeePassHTTP. -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: знайдено застаріле налаштування сполучення з переглядачами -- -- -- KeePassXC: Create a new group -- KeePassXC: Створити нову групу -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- Отримано запит для створення нової групи "%1". --Ви хочете створити цю групу? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- Потрібно перемістити Ваші параметри для KeePassXC-Browser до параметрів сховища. --Це необхідно для підтримання сполучень з Вашим поточним переглядачем. --Бажаєте перемістити параметри зараз? -- -- -- Don't show this warning again -- Більше не показувати це попередження -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- Ви одержали запит на сполучення з таким сховищем: --%1 -- --Надайте сполученню унікальне ім'я або ідентифікатор, наприклад: --chrome-на-ноутбуці. -- -- -- -- BrowserSettingsWidget -- -- Dialog -- Діалог -- -- -- This is required for accessing your databases with KeePassXC-Browser -- Це необхідно для надання KeePassXC-Browser доступу до Ваших сховищ -- -- -- Enable browser integration -- Увімкнути сполучення з переглядачами -- -- -- General -- Загальні -- -- -- Browsers installed as snaps are currently not supported. -- Підтримка переглядачів, встановлених через Snap, наразі не втілена. -- -- -- Enable integration for these browsers: -- Увімкнути сполучення з такими переглядачами: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- Показувати повідомлення, коли надходить запит на реєстраційні дані -- -- -- Request to unlock the database if it is locked -- Запитувати щодо розблокування сховища, якщо воно заблоковане -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- Показані тільки записи з такою самою схемою (http://, https://, ftp://, …). -- -- -- Match URL scheme (e.g., https://...) -- Узгоджувати схеми URL (наприклад, https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- Показувати лише найкращі збіги для певного URL замість усіх записів для всієї області. -- -- -- Return only best-matching credentials -- Показувати лише найкращі збіги реєстраційних даних -- -- -- Returns expired credentials. String [expired] is added to the title. -- Показує знечинені реєстраційні дані. Заголовок міститимить позначку [знечинені]. -- -- -- Allow returning expired credentials -- Дозволити показ недійсних реєстраційних даних -- -- -- All databases connected to the extension will return matching credentials. -- Збіги з реєстраційними даними буде знайдено в усіх сполучених сховищах. -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- Шукати збіги з реєстраційними даними в усіх відкритих сховищах -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- Сортувати збіжні реєстраційні дані за заголовком -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- Сортувати збіжні реєстраційні дані за іменем користувача -- -- -- Advanced -- Розширене -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- Ніколи не запитувати перед читанням реєстраційних даних -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- Ніколи не запитувати перед оновленням реєстраційних даних -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- Не запитувати дозвіл для HTTP Basic Auth -- -- -- Automatically creating or updating string fields is not supported. -- Автоматичне створення та оновлення текстових полів не втілене. -- -- -- Return advanced string fields which start with "KPH: " -- Показувати розширені текстові поля, що починаються з "KPH: " -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- Не показувати вигульк, що рекомендує перетворення параметрів застарілого KeePassHTTP. -- -- -- Do not prompt for KeePassHTTP settings migration. -- Не запитувати щодо перетворення параметрів KeePassHTTP. -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- Автоматично оновлює шлях до сценаріїв власного обміну повідомленнями для KeePassXC або двійкового посередника KeePassXC під час запуску. -- -- -- Update native messaging manifest files at startup -- Оновлювати файли маніфесту власного обміну повідомленнями під час запуску -- -- -- Use a custom proxy location if you installed a proxy manually. -- Використовувати власне розташування посередника, якщо Ви встановили посередника вручну. -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- Використовувати власне розташування посередника: -- -- -- Custom proxy location field -- Поле власного розташування посередника -- -- -- Browser for custom proxy file -- Переглядач для файлу власного посередника -- -- -- Browse... -- Button for opening file dialog -- Переглянути... -- -- -- Use a custom browser configuration location: -- Використовувати власне розташування параметрів переглядача: -- -- -- Browser type: -- Тип переглядача: -- -- -- Toolbar button style -- Стиль кнопки для панелі інструментів -- -- -- Config Location: -- Розташування параметрів: -- -- -- Custom browser location field -- Поле власного розташування переглядача -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- Вибрати власний шлях для переглядача -- -- -- Custom extension ID: -- Власний ідентифікатор розширення: -- -- -- Custom extension ID -- Власний ідентифікатор розширення -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- Через заходи безпеки у Snap Вам необхідно виконати сценарій для сполучення з переглядачем. <br />Ви можете знайти файл сценарію в %1 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- Для сполучення з переглядачем потрібен KeePassXC-Browser. <br />Заватнажити для %1 і %2 та %3. %4 -- -- -- Please see special instructions for browser extension use below -- Нижче Ви можете знайти довідку з використання розширення переглядача -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>Помилка:</b> Не можливо знайти власного посередника за вказаним шляхом!<br/>Сполучення з переглядачем <b>не працюватиме</b> без посередницького застосунку. -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>Попередження:</b> ці параметри можуть бути небезпечними! -- -- -- Executable Files -- Виконувані файли -- -- -- All Files -- Всі файли -- -- -- Select custom proxy location -- Вибрати власне розташування посередника -- -- -- Select native messaging host folder location -- Вибрати розташування теки для господаря власного обміну повідомленнями -- -- -- -- CloneDialog -- -- Clone Options -- Параметри клонування -- -- -- Append ' - Clone' to title -- Додати « – клон» до заголовка -- -- -- Replace username and password with references -- Замінити ім'я користувача і пароль посиланнями -- -- -- Copy history -- Скопіювати журнал -- -- -- -- CsvImportWidget -- -- Import CSV fields -- Імпортувати поля CSV -- -- -- filename -- ім'я файлу -- -- -- size, rows, columns -- розмір, рядки, колонки -- -- -- Encoding -- Кодування -- -- -- Codec -- Кодек -- -- -- Text is qualified by -- Текст обмежений символами -- -- -- Fields are separated by -- Поля розділені символом -- -- -- Comments start with -- Коментарі починаються з -- -- -- Consider '\' an escape character -- Використовувати '\' для захисту символів -- -- -- Preview -- Попередній перегляд -- -- -- Imported from CSV file -- Імпортовано з файлу CSV -- -- -- Original data: -- Початкові дані: -- -- -- Error -- Помилка -- -- -- Error(s) detected in CSV file! -- У файлі CSV знайдено помилки! -- -- -- [%n more message(s) skipped] -- [ще %n повідомлення пропущено][ще %n повідомлення пропущено][ще %n повідомлень пропущено][ще %n повідомлень пропущено] -- -- -- CSV import: writer has errors: --%1 -- Імпортування CSV: помилки записувача: --%1 -- -- -- Text qualification -- Обмеження тексту -- -- -- Field separation -- Розділювач полів -- -- -- Number of header lines to discard -- Кількість рядків заголовка, які треба пропустити -- -- -- CSV import preview -- Попередній перегляд імпортованого CSV -- -- -- Column Association -- Прив'язка стовпчиків -- -- -- Last Modified -- Остання зміна -- -- -- Password -- Пароль -- -- -- Created -- Створено -- -- -- Notes -- Примітки -- -- -- Title -- Заголовок -- -- -- Group -- Група -- -- -- URL -- URL -- -- -- Username -- Ім’я користувача -- -- -- Header lines skipped -- Пропущені рядки заголовка -- -- -- First line has field names -- Перший рядок містить назви полів -- -- -- Not Present -- Відсутні -- -- -- Column %1 -- Стовпчик %1 -- -- -- TOTP -- ТОП -- -- -- Icon -- Значок -- -- -- -- CsvParserModel -- -- %n column(s) -- %n колонка%n колонки%n колонок%n колонок -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1, %2, %3 -- -- -- %n byte(s) -- %n байт%n байти%n байтів%n байтів -- -- -- %n row(s) -- %n рядок%n рядки%n рядків%n рядків -- -- -- -- Database -- -- File %1 does not exist. -- Файл %1 не існує. -- -- -- Unable to open file %1. -- Неможливо відкрити файл %1. -- -- -- Error while reading the database: %1 -- Помилка читання сховища: %1 -- -- -- File cannot be written as it is opened in read-only mode. -- Неможливо записати файл, оскільки він відкритий у режимі читання. -- -- -- Key not transformed. This is a bug, please report it to the developers! -- Ключ не перетворено через ваду в програмі. Будь ласка, повідомте про це розробникам! -- -- -- %1 --Backup database located at %2 -- %1 --Резервне сховище знаходиться в %2 -- -- -- Could not save, database does not point to a valid file. -- Збереження неможливе оскільки шлях до сховища не вказує на придатний файл. -- -- -- Could not save, database file is read-only. -- Збереження неможливе оскільки файл сховища доступний лише для читання. -- -- -- Database file has unmerged changes. -- Файл сховища містить необ'єднані зміни. -- -- -- Recycle Bin -- Смітник -- -- -- Passwords -- Root group name -- Паролі -- -- -- Database save is already in progress. -- Збереження сховища вже триває. -- -- -- Could not save, database has not been initialized! -- Збереження неможливе оскільки сховище не започатковане! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- Розблокувати сховище - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- Файловий ключ: -- -- -- Refresh -- Оновити -- -- -- Don't show this warning again -- Більше не показувати це попередження -- -- -- All files -- Всі файли -- -- -- Key files -- Файлові ключі -- -- -- Select key file -- Виберіть файловий ключ -- -- -- Failed to open key file: %1 -- Відкриття файлового ключа зазнало невдачі: %1 -- -- -- Unlock KeePassXC Database -- Розблокувати сховище KeePassXC -- -- -- Enter Password: -- Введіть пароль: -- -- -- Password field -- Поле пароля -- -- -- Hardware key slot selection -- Вибір гнізда апаратного захисту -- -- -- Browse for key file -- Вибір файлового ключа -- -- -- Browse... -- Переглянути... -- -- -- Refresh hardware tokens -- Оновити апаратні позначки -- -- -- Hardware Key: -- Апаратний ключ: -- -- -- Hardware key help -- Довідка щодо апаратних ключів -- -- -- TouchID for Quick Unlock -- TouchID для швидкого розблокування -- -- -- Unlock failed and no password given -- Розблокування зазнало невдачі й пароль не надано -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- Розблокування сховища зазнало невдачі і Ви не ввели пароль. --Бажаєте спробувати натомість з порожнім паролем? -- --Щоб уникати цього повідомлення у майбутньому, Ви мусите вибрати в меню в меню «Налаштування сховища / Безпека» і встановити Ваш пароль. -- -- -- Retry with empty password -- Спробувати знову з порожнім паролем -- -- -- Enter Additional Credentials (if any): -- Введіть додаткові реєстраційні дані (якщо є): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>Ви можете використовувати апаратний ключ захисту на кшталт <strong>YubiKey</strong> чи <strong>OnlyKey</strong> з гніздами налаштованими під HMAC-SHA1.</p> --<p>Натисніть тут для додаткової інформації...</p> -- -- -- Key file help -- Довідка щодо файлового ключа -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- Неможливо використати файл сховища як файловий ключ -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- Ви не можете використовувати файл сховища як файловий ключ. --Якщо у Вас немає файлового ключа, залиште, будь ласка, це поле порожнім. -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>На додаток до Вашого пароля Ви можете використовувати таємний файл для посилення захисту Вашого сховища. Такий файл можна створити у розділі налаштування безпеки Вашого сховища.</p><p>Цей файл <strong>відрізняється</strong> від Вашого файлу сховища *.kdbx!<br>Якщо у Вас немає файлового ключа, залиште це поле порожнім.</p><p>Натисніть тут для додаткової інформації...</p> -- -- -- Key file to unlock the database -- Файловий ключ для розблокування сховища -- -- -- Please touch the button on your YubiKey! -- Натисніть, будь ласка, кнопку на вашому YubiKey! -- -- -- Detecting hardware keys… -- Виявлення апаратних ключів... -- -- -- No hardware keys detected -- Не виявлено апаратних ключів -- -- -- Select hardware key… -- Вибрати ключ апаратного захисту... -- -- -- Old key file format -- -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- Паролі -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- Розширене налаштування -- -- -- General -- Загальне -- -- -- Security -- Безпека -- -- -- Encryption Settings -- Налаштування шифрування -- -- -- Browser Integration -- Сполучення з переглядачем -- -- -- Database Credentials -- Реєстраційні дані сховища -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- Налаштування KeePassXC-Browser -- -- -- Stored keys -- Збережені ключі -- -- -- Remove -- Видалити -- -- -- Delete the selected key? -- Видалити вибраний ключ? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- Ви дійсно бажаєте видалити позначений ключ? --Це може пошкодити сполучення з модулем переглядача. -- -- -- Key -- Ключ -- -- -- Value -- Значення -- -- -- Enable Browser Integration to access these settings. -- Увімкніть сполучення з переглядачем, щоб дістати доступ до цих параметрів. -- -- -- Disconnect all browsers -- Від'єднати від усіх переглядачів -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- Ви дійсно хочете від'єднати усі переглядачі? --Це може пошкодити сполучення з модулем переглядача. -- -- -- KeePassXC: No keys found -- KeePassXC: жодного ключа не знайдено -- -- -- No shared encryption keys found in KeePassXC settings. -- Не знайдено жодного спільного ключа у параметрах KeePassXC. -- -- -- KeePassXC: Removed keys from database -- KeePassXC: ключі видалено зі сховища -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- Успішно видалено %n ключ шифрування з параметрів KeePassXC.Успішно видалено %n ключі шифрування з параметрів KeePassXC.Успішно видалено %n ключів шифрування з параметрів KeePassXC.Успішно видалено %n ключів шифрування з параметрів KeePassXC. -- -- -- Forget all site-specific settings on entries -- Забути особливе налаштування сайтів у всіх записах -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- Ви дійсно бажаєте позбутися особливого налаштування всіх сайтів у кожному записі? --Дозволи доступу до записів будуть скасовані. -- -- -- Removing stored permissions… -- Видалення збережених дозволів... -- -- -- Abort -- Скасувати -- -- -- KeePassXC: Removed permissions -- KeePassXC: дозволи видалено -- -- -- Successfully removed permissions from %n entry(s). -- Успішно видалено дозволи з %n запису.Успішно видалено дозволи з %n записів.Успішно видалено дозволи з %n записів.Успішно видалено дозволи з %n записів. -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: запис з дозволами не знайдено! -- -- -- The active database does not contain an entry with permissions. -- Поточне сховище не містить записів з дозволами. -- -- -- Move KeePassHTTP attributes to custom data -- Перемістити ознаки KeePassHTTP до користувацьких даних -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- Ви дійсно бажаєте оновити застаріле налаштування сполучення з переглядачами згідно з найновішими стандартами? --Це необхідно для підтримання сумісності з модулем переглядача. -- -- -- Stored browser keys -- Збережені ключі переглядачів -- -- -- Remove selected key -- Видалити вибраний ключ -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- Перемістити ознаки KeePassHTTP до власних даних KeePassXC-Browser -- -- -- Refresh database root group ID -- Оновити ідентифікатор кореневої групи сховища -- -- -- Created -- Створено -- -- -- Refresh database ID -- Оновити ідентифікатор сховища -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- Ви дійсно бажаєте оновити ID сховища? --Це необхідно лише тоді, коли ваше сховище є копією іншого і не вдається під'єднати розширення браузера. -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- Поліпшити захист... -- -- -- No password set -- Пароль не встановлено -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- <b>Попередження!</b> Ви не встановили пароль. Недоцільно використовувати сховище без пароля! -- --Ви дійсно хочете продовжити без пароля? -- -- -- Continue without password -- Продовжити без пароля -- -- -- No encryption key added -- Жодного шифрувального ключа не додано -- -- -- You must add at least one encryption key to secure your database! -- Ви мусите додати щонайменьше один шифрувальний ключ, щоб захистити Ваше сховище! -- -- -- Unknown error -- Невідома помилка -- -- -- Failed to change database credentials -- Не вдалося змінити облікові дані сховища -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- Алгоритм шифрування: -- -- -- AES: 256 Bit (default) -- AES: 256 біт (типове) -- -- -- Twofish: 256 Bit -- Twofish: 256 біт -- -- -- Key Derivation Function: -- Функція обчислення ключа: -- -- -- Transform rounds: -- Циклів перетворення: -- -- -- Memory Usage: -- Використана пам'ять: -- -- -- Parallelism: -- Паралельність: -- -- -- Decryption Time: -- Час розшифрування: -- -- -- ?? s -- ?? с -- -- -- Change -- Змінити -- -- -- Higher values offer more protection, but opening the database will take longer. -- Вищі значення поліпшують захист, але сповільнюють відкривання сховища. -- -- -- Database format: -- Формат сховища: -- -- -- This is only important if you need to use your database with other programs. -- Це важливо тільки якщо Вам потрібно використовувати Ваше сховище з іншими програмами. -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0 (рекомендовано) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- без змін -- -- -- Number of rounds too high -- Key transformation rounds -- Кількість циклів надто висока -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- Ви використовуєте надто багато циклів перетворення для ключа у форматі Argon2. -- --Якщо Ви залишите таку кількість циклів, відкриття Вашого сховища може тривати кілька годин або днів (чи навіть довше)! -- -- -- Understood, keep number -- Зрозуміло, залишити таку кількість -- -- -- Cancel -- Скасувати -- -- -- Number of rounds too low -- Key transformation rounds -- Кількість циклів надто низька -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- Ви використовуєте надто мало циклів перетворення для ключа у форматі AES-KDF. -- --Якщо Ви залишите таку кількість циклів, Ваше сховище буде легко зламати! -- -- -- KDF unchanged -- ФОК не змінено -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- Спроба перетворити ключ згідно з новими налаштуваннями ФОК зазнала невдачі; ФОК залишилась без змін. -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- МіБМіБМіБМіБ -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- потікпотокипотоківпотоків -- -- -- Change existing decryption time -- Змінити наявний час розшифрування -- -- -- Decryption time in seconds -- Час розшифрування в секундах -- -- -- Database format -- Формат сховища -- -- -- Encryption algorithm -- Алгоритм шифрування -- -- -- Key derivation function -- Функція обчислення ключа -- -- -- Transform rounds -- Кількість циклів перетворення -- -- -- Memory usage -- Використана пам'ять -- -- -- Parallelism -- Паралельність -- -- -- ?? ms -- ?? мс -- -- -- ? s -- ? с -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- Виставлені записи -- -- -- Don't expose this database -- Не виставляти це сховище -- -- -- Expose entries under this group: -- Виставити записи з такої групи: -- -- -- Enable Secret Service to access these settings. -- -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- Метадані сховища -- -- -- Database name: -- Назва сховища: -- -- -- Database description: -- Опис сховища: -- -- -- Default username: -- Типове ім’я користувача: -- -- -- History Settings -- Налаштування журналу -- -- -- Max. history items: -- Макс. записів журналу: -- -- -- Max. history size: -- Макс. розмір журналу: -- -- -- MiB -- МіБ -- -- -- Use recycle bin -- Використовувати смітник -- -- -- Additional Database Settings -- Додаткове налаштування сховища -- -- -- Database name field -- Поле назви сховища -- -- -- Database description field -- Поле опису сховища -- -- -- Default username field -- Поле типового імені користувача -- -- -- Maximum number of history items per entry -- Найбільша кількість заміток журналу для запису -- -- -- Maximum size of history per entry -- Максимальний розмір журналу для запису -- -- -- Delete Recycle Bin -- Видалити смітник -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- Ви дійсно хочете видалити смітник і весь його вміст? --Відновлення буде неможливим. -- -- -- (old) -- (старий) -- -- -- Enable compression (recommended) -- Увімкнути стиснення (рекомендовано) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- Спільне користування -- -- -- Breadcrumb -- Хлібні крихти -- -- -- Type -- Тип -- -- -- Path -- Шлях -- -- -- Last Signer -- Останній підписувач -- -- -- Certificates -- Сертифікати -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- Назва сховища: -- -- -- Description: -- Опис: -- -- -- Database name field -- Поле назви сховища -- -- -- Database description field -- Поле опису сховища -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- Сховище KeePass 2 -- -- -- All files -- Всі файли -- -- -- Open database -- Відкрити сховище -- -- -- CSV file -- Файл CSV -- -- -- Merge database -- Об'єднати сховище -- -- -- Open KeePass 1 database -- Відкрити сховище KeePass 1 -- -- -- KeePass 1 database -- Сховище KeePass 1 -- -- -- Export database to CSV file -- Експортувати сховище до файлу CSV -- -- -- Writing the CSV file failed. -- Не вдалось записати CSV файл. -- -- -- Database creation error -- Помилка створення сховища -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- Створене сховище не має ані ключа, ані ФОК, і тому не може бути збереженим. --Це певно є вадою програми, будь ласка, повідомте про це розробникам. -- -- -- Select CSV file -- Вибрати файл CSV -- -- -- New Database -- Нове сховище -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [Нове сховище] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [Заблоковане] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [лише читання] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- Не вдалося відкрити %1. Він або не існує, або не є доступним. -- -- -- Export database to HTML file -- Експортувати сховище до файлу HTML -- -- -- HTML file -- Файл HTML -- -- -- Writing the HTML file failed. -- Не вдалося записати файл HTML. -- -- -- Export Confirmation -- Схвалення експортування -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- Ви збираєтесь експортувати Ваше сховище в незашифрований файл. Це зробить Ваші паролі і вразливі дані незахищеними! Ви дійсно бажаєте продовжити? -- -- -- Open OPVault -- -- -- -- -- DatabaseWidget -- -- Searching... -- Триває пошук… -- -- -- Do you really want to delete the entry "%1" for good? -- Ви дійсно хочете остаточно видалити запис «%1»? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- Ви дійсно хочете перемістити запис «%1» у смітник? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- Ви дійсно хочете перемістити %n запис у смітник?Ви дійсно хочете перемістити %n записи у смітник?Ви дійсно хочете перемістити %n записів у смітник?Ви дійсно хочете перемістити %n записів у смітник? -- -- -- Execute command? -- Виконати команду? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- Ви дійсно хочете виконати таку команду? <br><br>%1<br> -- -- -- Remember my choice -- Запам'ятати мій вибір -- -- -- Do you really want to delete the group "%1" for good? -- Ви дійсно хочете остаточно видалити групу «%1»? -- -- -- No current database. -- Сховище не обране. -- -- -- No source database, nothing to do. -- Джерельне сховище відсутнє, оброблення не потрібне. -- -- -- Search Results (%1) -- Результати пошуку (%1) -- -- -- No Results -- Збіги відсутні -- -- -- File has changed -- Файл був змінений -- -- -- The database file has changed. Do you want to load the changes? -- Файл сховища змінено. Завантажити зміни? -- -- -- Merge Request -- Запит на об'єднання -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- Файл сховища було змінено, а Ви маєте незбережені зміни. --Об‘єднати ці зміни? -- -- -- Empty recycle bin? -- Спорожнити смітник? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- Ви дійсно бажаєте остаточно видалити все зі смітника? -- -- -- Do you really want to delete %n entry(s) for good? -- Ви дійсно хочете остаточно видалити %n запис?Ви дійсно хочете остаточно видалити %n записи?Ви дійсно хочете остаточно видалити %n записів?Ви дійсно хочете остаточно видалити %n записів? -- -- -- Delete entry(s)? -- Видалити запис?Видалити записи?Видалити записи?Видалити записи? -- -- -- Move entry(s) to recycle bin? -- Перемістити запис у смітник?Перемістити записи в смітник?Перемістити записи в смітник?Перемістити записи в смітник? -- -- -- Lock Database? -- Заблокувати сховище? -- -- -- You are editing an entry. Discard changes and lock anyway? -- Ви змінюєте запис. Відкинути зміни і все одно заблокувати? -- -- -- "%1" was modified. --Save changes? -- «%1» змінено. --Зберегти зміни? -- -- -- Database was modified. --Save changes? -- Сховище змінено. --Зберегти зміни? -- -- -- Save changes? -- Зберегти зміни? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- Відкриття нового файлу сховища зазнало невдачі під час автоматичного перевантаження. --Помилка: %1 -- -- -- Disable safe saves? -- Вимкнути безпечне збереження? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC не зміг зберегти сховище кілька разів поспіль. Швидше за все це сталося тому, що служба узгодження файлів блокує файл для запису. --Вимкнути безпечне збереження і спробувати знов? -- -- -- Passwords -- Паролі -- -- -- Save database as -- Зберегти сховище як -- -- -- KeePass 2 Database -- Сховище KeePass 2 -- -- -- Replace references to entry? -- Замінити посилання на запис? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- Запис «%1» має %2 посилання. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилання. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилань. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилань. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити? -- -- -- Delete group -- Видалити групу -- -- -- Move group to recycle bin? -- Перемістити групу у смітник? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- Ви дійсно хочете перемістити групу «%1» у смітник? -- -- -- Successfully merged the database files. -- Файли сховищ вдало об'єднано. -- -- -- Database was not modified by merge operation. -- Об'єднання не змінило сховище. -- -- -- Shared group... -- Спільна група... -- -- -- Writing the database failed: %1 -- Записати сховище не вдалося: %1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- Сховище відкрито у режимі читання. Автоматичне збереження вимкнено. -- -- -- Save database backup -- Зберегти резервну копію сховища -- -- -- Could not find database file: %1 -- Не вдалося знайти файл сховища: %1 -- -- -- -- EditEntryWidget -- -- Entry -- Запис -- -- -- Advanced -- Розширене -- -- -- Icon -- Значок -- -- -- Auto-Type -- Автозаповнення -- -- -- Properties -- Властивості -- -- -- History -- Журнал -- -- -- SSH Agent -- Посередник SSH -- -- -- n/a -- немає -- -- -- (encrypted) -- (зашифровано) -- -- -- Select private key -- Вибрати таємний ключ -- -- -- Entry history -- Журнал запису -- -- -- Add entry -- Додати запис -- -- -- Edit entry -- Змінити запис -- -- -- New attribute -- Нова ознака -- -- -- Are you sure you want to remove this attribute? -- Ви дійсно бажаєте видалити цю ознаку? -- -- -- Tomorrow -- Завтра -- -- -- %n week(s) -- %n тиждень%n тижня%n тижнів%n тижнів -- -- -- %n month(s) -- %n місяць%n місяця%n місяців%n місяців -- -- -- Entry updated successfully. -- Запис успішно оновлено. -- -- -- New attribute %1 -- Нова ознака %1 -- -- -- %n year(s) -- %n рік%n роки%n років%n років -- -- -- Confirm Removal -- Схваліть видалення -- -- -- Browser Integration -- Сполучення з переглядачем -- -- -- <empty URL> -- <порожній URL> -- -- -- Are you sure you want to remove this URL? -- Ви дійсно бажаєте видалити цей URL? -- -- -- Reveal -- Показати -- -- -- Hide -- -- -- -- Unsaved Changes -- -- -- -- Would you like to save changes to this entry? -- Бажаєте зберегти зміни внесені до цього запису? -- -- -- [PROTECTED] Press Reveal to view or edit -- -- -- -- Invalid Entry -- -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- Додаткові ознаки -- -- -- Add -- Додати -- -- -- Remove -- Видалити -- -- -- Edit Name -- Змінити назву -- -- -- Protect -- Захистити -- -- -- Reveal -- Показати -- -- -- Attachments -- Вкладення -- -- -- Foreground Color: -- Колір переднього плану: -- -- -- Background Color: -- Колір тла: -- -- -- Attribute selection -- Вибір ознаки -- -- -- Attribute value -- Значення ознаки -- -- -- Add a new attribute -- Додати нову ознаку -- -- -- Remove selected attribute -- Видалити вибрану ознаку -- -- -- Edit attribute name -- Змінити назву ознаки -- -- -- Toggle attribute protection -- Перемкнути захист ознаки -- -- -- Show a protected attribute -- Показати захищену ознаку -- -- -- Foreground color selection -- Вибір кольору переднього плану -- -- -- Background color selection -- Вибір кольору тла -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>Якщо відмічено, запис не буде показано у таких звітах, як Health Check та HIBP, навіть якщо він не відповідає вимогам безпеки (наприклад, ентропія пароля чи повторність використання). Ви можете встановити цей прапорець у випадках, коли вибір пароля є Вашим контролем (наприклад, чотиризначний PIN-код), аби не захаращувати звіти.</p></body></html> -- -- -- Exclude from database reports -- Виключити зі звітів по сховищам -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- Увімкнути автозаповнення для цього запису -- -- -- Window Associations -- Прив'язки вікон -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- Заголовок вікна: -- -- -- Use a specific sequence for this association: -- Використовувати певну послідовність для цієї прив'язки: -- -- -- Custom Auto-Type sequence -- Власна послідовність автозаповнення -- -- -- Open Auto-Type help webpage -- Відкрити сторінку довідки щодо автозаповнення -- -- -- Existing window associations -- Наявні прив'язки вікон -- -- -- Add new window association -- Додати нову прив'язку вікна -- -- -- Remove selected window association -- Видалити вибрану прив'язку вікна -- -- -- You can use an asterisk (*) to match everything -- Ви можете використовувати зірочку (*) для довільних збігів -- -- -- Set the window association title -- Встановити заголовок для прив'язки вікна -- -- -- You can use an asterisk to match everything -- Ви можете використовувати зірочку для довільних збігів -- -- -- Custom Auto-Type sequence for this window -- Власна послідовність автозаповнення для цього вікна -- -- -- Inherit default Auto-Type sequence from the group -- Успадкувати типову послідовність автозаповнення від групи -- -- -- Use custom Auto-Type sequence: -- Використовувати свою послідовність автозаповнення: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- Ці параметри впливають на поведінку запису в розширенні переглядача. -- -- -- General -- Загальні -- -- -- Skip Auto-Submit for this entry -- Пропускати автоматичне надсилання для цього запису -- -- -- Hide this entry from the browser extension -- Сховати цей запис від розширення переглядача -- -- -- Additional URL's -- Додаткові URL -- -- -- Add -- Додати -- -- -- Remove -- Видалити -- -- -- Edit -- Змінити -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- Надсилати це налаштування до браузера лише в діалогах автентифікації HTTP. Якщо увімкнено, цей запис не буде показано для звичайних форм входу. -- -- -- Use this entry only with HTTP Basic Auth -- Використовувати цей запис лише з HTTP Basic Auth -- -- -- -- EditEntryWidgetHistory -- -- Show -- Показати -- -- -- Restore -- Відновити -- -- -- Delete -- Видалити -- -- -- Delete all -- Видалити всі -- -- -- Entry history selection -- Вибір журналу запису -- -- -- Show entry at selected history state -- Показати вибраний хронологічний стан запису -- -- -- Restore entry to selected history state -- Відновити запис з вибраного хронологічного стану -- -- -- Delete selected history state -- Видалити вибраний хронологічний стан -- -- -- Delete all history -- Видалити весь журнал -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- Пароль: -- -- -- Title: -- Заголовок: -- -- -- Presets -- Заготовки -- -- -- Toggle the checkbox to reveal the notes section. -- Натисніть перемикач, щоб показати розділ нотаток. -- -- -- Username: -- Ім’я користувача: -- -- -- Url field -- Поле URL -- -- -- Download favicon for URL -- Завантажити фавікон для URL -- -- -- Password field -- Поле пароля -- -- -- Toggle notes visible -- Перемкнути видимість нотаток -- -- -- Expiration field -- Поле знечинення -- -- -- Expiration Presets -- Типове налаштування знечинення -- -- -- Expiration presets -- Типове налаштування знечинення -- -- -- Notes field -- Поле нотаток -- -- -- Title field -- Поле заголовка -- -- -- Username field -- Поле імені користувача -- -- -- Toggle expiration -- Перемкнути знечинення -- -- -- Notes: -- Примітки: -- -- -- https://example.com -- -- -- -- Expires: -- -- -- -- Edit Entry -- -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- Форма -- -- -- Remove key from agent after -- Видаляти ключ із в'язки посередника після -- -- -- seconds -- секунд -- -- -- Fingerprint -- Відбиток -- -- -- Remove key from agent when database is closed/locked -- Видаляти ключ із в'язки посередника під час блокування або закриття сховища -- -- -- Public key -- Відкритий ключ -- -- -- Add key to agent when database is opened/unlocked -- Надавати ключ посередникові під час відкриття або розблокування сховища -- -- -- Comment -- Коментар -- -- -- Decrypt -- Розшифрувати -- -- -- n/a -- немає -- -- -- Copy to clipboard -- Скопіювати в кишеню -- -- -- Private key -- Таємний ключ -- -- -- External file -- Зовнішній файл -- -- -- Browse... -- Button for opening file dialog -- Переглянути... -- -- -- Attachment -- Вкладення -- -- -- Add to agent -- Додати до в'язки посередника -- -- -- Remove from agent -- Видалити з в'язки посередника -- -- -- Require user confirmation when this key is used -- Запитувати підтвердження для використання цього ключа -- -- -- Remove key from agent after specified seconds -- Видалити ключ з агенту після вказаної кількості секунд -- -- -- Browser for key file -- Переглядач файлових ключів -- -- -- External key file -- Зовнішній файловий ключ -- -- -- Select attachment file -- Вибрати файл вкладення -- -- -- -- EditGroupWidget -- -- Group -- Група -- -- -- Icon -- Значок -- -- -- Properties -- Властивості -- -- -- Add group -- Додати групу -- -- -- Edit group -- Редагувати групу -- -- -- Enable -- Увімкнути -- -- -- Disable -- Вимкнути -- -- -- Inherit from parent group (%1) -- Успадкувати від батьківської групи (%1) -- -- -- Entry has unsaved changes -- Запис має незбережені зміни -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- Тип: -- -- -- Path: -- Шлях: -- -- -- Password: -- Пароль: -- -- -- Inactive -- Неактивна -- -- -- KeeShare unsigned container -- Непідписана оболонка KeeShare -- -- -- KeeShare signed container -- Підписана оболонка KeeShare -- -- -- Select import source -- Вибрати джерело імпорту -- -- -- Select export target -- Вибрати ціль експортування -- -- -- Select import/export file -- Вибрати файл імпорту/експорту -- -- -- Clear -- Очистити -- -- -- Import -- Імпортування -- -- -- Export -- Експортування -- -- -- Synchronize -- Узгодити -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- Ваша версія KeePassXC не підтримує спільне використання цього типу оболонки. --Підтримані розширення: %1. -- -- -- %1 is already being exported by this database. -- Сховище вже експортує %1. -- -- -- %1 is already being imported by this database. -- Сховище вже імпортує %1. -- -- -- %1 is being imported and exported by different groups in this database. -- У цьому сховищі %1 експортують і імпортують різні групи. -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare наразі вимкнено. Ви можете ввімкнути імпортування та експортування у параметрах застосунку. -- -- -- Database export is currently disabled by application settings. -- Експортування сховища наразі вимкнено в параметрах застосунку. -- -- -- Database import is currently disabled by application settings. -- Імпортування сховища наразі вимкнено в параметрах застосунку. -- -- -- Sharing mode field -- Поле режиму спільного використання -- -- -- Path to share file field -- Поле шляху до спільного файлу -- -- -- Password field -- Поле пароля -- -- -- Clear fields -- Очистити поля -- -- -- Browse for share file -- -- -- -- Browse... -- Переглянути... -- -- -- -- EditGroupWidgetMain -- -- Name field -- Поле назви -- -- -- Notes field -- Поле нотаток -- -- -- Toggle expiration -- Перемкнути знечинення -- -- -- Auto-Type toggle for this and sub groups -- Перемикання автозаповнення для цієї групи і всіх дочерніх груп -- -- -- Expiration field -- Поле знечинення -- -- -- Search toggle for this and sub groups -- Перемикання пошуку для цієї групи і всіх дочерніх груп -- -- -- Default auto-type sequence field -- Поле типової послідовності автозаповнення -- -- -- Expires: -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- Auto-Type: -- -- -- -- Search: -- -- -- -- Notes: -- Примітки: -- -- -- Name: -- -- -- -- Set default Auto-Type sequence -- -- -- -- Edit Group -- -- -- -- -- EditWidgetIcons -- -- Add custom icon -- Додати свій значок -- -- -- Delete custom icon -- Видалити свій значок -- -- -- Download favicon -- Завантажити фавікон -- -- -- Unable to fetch favicon. -- Неможливо дістати фавікон. -- -- -- Images -- Зображення -- -- -- All files -- Всі файли -- -- -- Confirm Delete -- Схвалити видалення -- -- -- Select Image(s) -- Вибрати зображення -- -- -- Successfully loaded %1 of %n icon(s) -- Успішно завантажено %1 з %n значкаУспішно завантажено %1 з %n значківУспішно завантажено %1 з %n значківУспішно завантажено %1 з %n значків -- -- -- No icons were loaded -- Жодного значка не завантажено -- -- -- %n icon(s) already exist in the database -- %n значок вже існує у сховищі%n значки вже існують у сховищі%n значків вже існують у сховищі%n значків вже існують у сховищі -- -- -- The following icon(s) failed: -- Такий значок зазнав невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- Цей значок використовує %n запис і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записи і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- Ви можете ввімкнути службу значків DuckDuckGo в меню Інструменти -> Налаштування -> Безпека -- -- -- Download favicon for URL -- Завантажити фавікон для URL -- -- -- Apply selected icon to subgroups and entries -- Застосувати вибраній значок для дочерніх груп і записів -- -- -- Also apply to child groups -- Також застосувати до дочерніх груп -- -- -- Also apply to child entries -- Також застосувати до дочерніх записів -- -- -- Also apply to all children -- Також застосувати до всіх дочерніх елементів -- -- -- Existing icon selected. -- Вибрано наявний значок. -- -- -- Use default icon -- Використовувати типовий значок -- -- -- Use custom icon -- Використовувати свій значок -- -- -- Apply icon to... -- -- -- -- Apply to this group only -- -- -- -- -- EditWidgetProperties -- -- Created: -- Створено: -- -- -- Modified: -- Змінено: -- -- -- Accessed: -- Доступ: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- Дані модуля -- -- -- Remove -- Видалити -- -- -- Delete plugin data? -- Видалити дані модуля? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- Ви дійсно хочете видалити всі дані позначеного модуля? --Це може призвести до порушень у роботі інших модулів. -- -- -- Key -- Ключ -- -- -- Value -- Значення -- -- -- Datetime created -- Дата й час створення -- -- -- Datetime modified -- Дата й час зміни -- -- -- Datetime accessed -- Дата й час доступу -- -- -- Unique ID -- Унікальний ідентифікатор -- -- -- Plugin data -- Дані модуля -- -- -- Remove selected plugin data -- Видалити дані вибраного модуля -- -- -- -- Entry -- -- %1 - Clone -- %1 - Клон -- -- -- -- EntryAttachmentsModel -- -- Name -- Назва -- -- -- Size -- Розмір -- -- -- -- EntryAttachmentsWidget -- -- Form -- Форма -- -- -- Add -- Додати -- -- -- Remove -- Видалити -- -- -- Open -- Відкрити -- -- -- Save -- Зберегти -- -- -- Select files -- Вибрати файли -- -- -- Are you sure you want to remove %n attachment(s)? -- Ви дійсно бажаєте видалити %n вкладення?Ви дійсно бажаєте видалити %n вкладення?Ви дійсно бажаєте видалити %n вкладень?Ви дійсно бажаєте видалити %n вкладень? -- -- -- Save attachments -- Зберегти вкладення -- -- -- Unable to create directory: --%1 -- Неможливо створити директорію: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- Ви дійсно бажаєте перезаписати наявний файл «%1» цим вкладенням? -- -- -- Confirm overwrite -- Схвалити перезапис -- -- -- Unable to save attachments: --%1 -- Неможливо зберегти вкладення: --%1 -- -- -- Unable to open attachment: --%1 -- Неможливо відкрити вкладення: --%1 -- -- -- Unable to open attachments: --%1 -- Неможливо відкрити вкладення: --%1 -- -- -- Confirm remove -- Схвалити видалення -- -- -- Unable to open file(s): --%1 -- Неможливо відкрити файл: --%1Неможливо відкрити файли: --%1Неможливо відкрити файли: --%1Неможливо відкрити файли: --%1 -- -- -- Attachments -- Вкладення -- -- -- Add new attachment -- Долучити нове вкладення -- -- -- Remove selected attachment -- Видалити вибране вкладення -- -- -- Open selected attachment -- Відкрити вибране вкладення -- -- -- Save selected attachment to disk -- Зберегти вибране вкладення на диск -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 є великим файлом (%2 MБ). --Ваше сховище може стати завеликим і швидкодія знизиться. -- --Ви дійсно бажаєте додати цей файл? -- -- -- Confirm Attachment -- Схвалити долучення -- -- -- -- EntryAttributesModel -- -- Name -- Назва -- -- -- -- EntryHistoryModel -- -- Last modified -- Остання зміна -- -- -- Title -- Заголовок -- -- -- Username -- Ім’я користувача -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- Пос.: -- -- -- Group -- Група -- -- -- Title -- Заголовок -- -- -- Username -- Ім’я користувача -- -- -- URL -- URL -- -- -- Never -- Ніколи -- -- -- Password -- Пароль -- -- -- Notes -- Примітки -- -- -- Expires -- Знечинюється -- -- -- Created -- Створено -- -- -- Modified -- Змінено -- -- -- Accessed -- Доступ -- -- -- Attachments -- Вкладення -- -- -- Size -- Розмір -- -- -- Group name -- Назва групи -- -- -- Entry title -- Назва запису -- -- -- Entry notes -- Нотатки до запису -- -- -- Entry expires at -- Термін дії спливає -- -- -- Creation date -- Дата створення -- -- -- Last modification date -- Дата останньої зміни -- -- -- Last access date -- Дата останнього доступу -- -- -- Attached files -- Вкладені файли -- -- -- Entry size -- Розмір запису -- -- -- Has attachments -- Містить вкладення -- -- -- Has TOTP one-time password -- Має одноразовий пароль ТОП -- -- -- -- EntryPreviewWidget -- -- Close -- Закрити -- -- -- General -- Загальне -- -- -- Username -- Ім’я користувача -- -- -- Password -- Пароль -- -- -- Expiration -- Знечинюється -- -- -- URL -- URL -- -- -- Attributes -- Ознаки -- -- -- Attachments -- Вкладення -- -- -- Notes -- Примітки -- -- -- Autotype -- Автозаповнення -- -- -- Window -- Вікно -- -- -- Sequence -- Послідовність -- -- -- Searching -- Пошук -- -- -- Search -- Пошук -- -- -- Clear -- Очистити -- -- -- Never -- Ніколи -- -- -- [PROTECTED] -- [ЗАХИЩЕНО] -- -- -- Enabled -- Увімкнено -- -- -- Disabled -- Вимкнено -- -- -- Share -- Спільне використання -- -- -- Display current TOTP value -- Показати значення поточного ТОП -- -- -- Advanced -- Розширене -- -- -- Default Sequence -- -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- -- -- -- -- EntryURLModel -- -- Invalid URL -- Непридатний URL -- -- -- -- EntryView -- -- Fit to window -- Припасовувати до вікна -- -- -- Fit to contents -- Припасовувати до вмісту -- -- -- Reset to defaults -- Повернути до типового налаштування -- -- -- Has attachments -- Entry attachment icon toggle -- Містить вкладення -- -- -- Has TOTP -- Entry TOTP icon toggle -- -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- Програма %3 використала запис "%1" зі сховища "%2" -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- Ім'я файлу -- -- -- Group -- Група -- -- -- Manage -- Керувати -- -- -- Unlock to show -- Розблокуйте для показу -- -- -- None -- Відсутні -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- Застосунок -- -- -- Manage -- Керувати -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- -- -- -- Unknown -- Unknown PID -- Невідомий -- -- -- Unknown -- Unknown executable path -- Невідомий -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- -- -- -- -- Group -- -- [empty] -- group has no children -- [порожня] -- -- -- -- HibpDownloader -- -- Online password validation failed -- -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- Завантажити фавікони -- -- -- Cancel -- Скасувати -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- Маєте проблеми з завантаженням значків? --Ви можете ввімкнути службу значків DuckDuckGo в налаштуванні застосунку в розділі безпеки. -- -- -- Close -- Закрити -- -- -- URL -- URL -- -- -- Status -- Стан -- -- -- Please wait, processing entry list... -- Зачекайте, будь ласка, триває оброблення списку записів... -- -- -- Downloading... -- Завантаження... -- -- -- Ok -- Гаразд -- -- -- Already Exists -- Вже існує -- -- -- Download Failed -- Завантаження зазнало невдачі -- -- -- Downloading favicons (%1/%2)... -- Завантаження фавіконів (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- &Закрити -- -- -- Close message -- Закрити повідомлення -- -- -- -- Kdbx3Reader -- -- missing database headers -- відсутні заголовки сховища -- -- -- Header doesn't match hash -- Заголовок не відповідає контрольній сумі -- -- -- Invalid header id size -- Непридатний розмір ідентифікатора заголовка -- -- -- Invalid header field length -- Непридатна довжина поля заголовка -- -- -- Invalid header data length -- Непридатна довжина даних заголовка -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Надано непридатні реєстраційні дані. Спробуйте, будь ласка, ще раз. --Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим. -- -- -- Unable to calculate database key -- -- -- -- Unable to issue challenge-response: %1 -- Неможливо видати виклик-відповідь: %1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- Неможливо видати виклик-відповідь: %1 -- -- -- Unable to calculate database key -- -- -- -- -- Kdbx4Reader -- -- missing database headers -- відсутні заголовки сховища -- -- -- Invalid header checksum size -- Непридатний розмір контрольної суми заголовка -- -- -- Header SHA256 mismatch -- Невідповідність заголовку SHA256 -- -- -- Unknown cipher -- Невідомий шифр -- -- -- Invalid header id size -- Непридатний розмір ідентифікатора заголовка -- -- -- Invalid header field length -- Непридатна довжина поля заголовка -- -- -- Invalid header data length -- Непридатна довжина даних заголовка -- -- -- Failed to open buffer for KDF parameters in header -- Не вдалося відкрити буфер для параметрів ФОК у заголовку -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- Непідтримувана функція обчислення ключа (ФОК) або непридатні параметри -- -- -- Legacy header fields found in KDBX4 file. -- Знайдені застарілі поля заголовка у файлі KDBX4. -- -- -- Invalid inner header id size -- Непридатний розмір ідентифікатора внутрішнього заголовка -- -- -- Invalid inner header field length -- Непридатна довжина поля внутрішнього заголовка -- -- -- Invalid inner header binary size -- Непридатний розмір двійкового внутрішнього заголовка -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- Непідтримувана версія структури метаданих KeePass. -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина назви запису в структурі метаданих -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- Непридатна назва запису в структурі метаданих -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина значення запису в структурі метаданих -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- Непридатне значення запису в структурі метаданих -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина логічного запису в структурі метаданих -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина Int32 запису в структурі метаданих -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина UInt32 запису в структурі метаданих -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина Int64 запису в структурі метаданих -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- Непридатна довжина UInt64 запису в структурі метаданих -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- Непридатний тип запису в структурі метаданих -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- Непридатний розмір типу поля в структурі метаданих -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Надано непридатні реєстраційні дані. Спробуйте, будь ласка, ще раз. --Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим. -- -- -- (HMAC mismatch) -- (неузгідність HMAC) -- -- -- Unable to calculate database key: %1 -- Неможливо обчислити ключ сховища: %1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- Непридатний алгоритм симетричного шифру. -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- Непридатний розмір симетричного шифру IV. -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- Переведення у послідовний формат структури параметрів ФОК зазнало невдачі -- -- -- Unable to calculate database key: %1 -- Неможливо обчислити ключ сховища: %1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- Непідтримуваний шифр -- -- -- Invalid compression flags length -- Непридатна довжина прапорців стиснення -- -- -- Unsupported compression algorithm -- Непідтримуваний алгоритм стиснення -- -- -- Invalid master seed size -- Непридатний розмір головного початкового числа -- -- -- Invalid transform seed size -- Непридатний розмір початкового числа перетворення -- -- -- Invalid transform rounds size -- Непридатний розмір циклу перетворення -- -- -- Invalid start bytes size -- Непридатний розмір початкових байтів -- -- -- Invalid random stream id size -- Непридатний розмір ідентифікатора випадкового потоку -- -- -- Invalid inner random stream cipher -- Непридатний шифр внутрішнього випадкового потоку -- -- -- Not a KeePass database. -- Це не сховище KeePass. -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- Вибраний файл є старим сховищем для KeePass 1 (.kdb). -- --Щоб імпортувати його, виберіть пункт меню «Сховище > Імпортувати > Сховище KeePass 1…». --Перетворення можливе лише в одному напрямку. Ви не зможете відкрити імпортоване сховище старою версією KeePassX 0.4. -- -- -- Unsupported KeePass 2 database version. -- Непідтримувана версія сховища KeePass 2. -- -- -- Invalid cipher uuid length: %1 (length=%2) -- Непридатна довжина uuid шифру: %1 (довжина=%2) -- -- -- Unable to parse UUID: %1 -- Неможливо розібрати UUID: %1 -- -- -- Failed to read database file. -- Зчитування файлу сховища зазнало невдачі. -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- Помилка синтаксичного аналізу XML: %1 -- -- -- No root group -- Коренева група відсутня -- -- -- Missing icon uuid or data -- Бракує uuid або даних значка -- -- -- Missing custom data key or value -- Бракує ключа або значення для власних даних -- -- -- Multiple group elements -- Декілька елементів групи -- -- -- Null group uuid -- Порожній uuid групи -- -- -- Invalid group icon number -- Непридатна кількість значків групи -- -- -- Invalid EnableAutoType value -- Непридатне значення параметру ввімкнення автозаповнення -- -- -- Invalid EnableSearching value -- Непридатне значення параметру ввімкнення пошуку -- -- -- No group uuid found -- Uuid групи не знайдено -- -- -- Null DeleteObject uuid -- Порожній DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- Бракує значення часу або uuid для DeleteObject -- -- -- Null entry uuid -- Порожній uuid запису -- -- -- Invalid entry icon number -- Непридатна кількість значків запису -- -- -- History element in history entry -- Журнальний елемент у запису журналу -- -- -- No entry uuid found -- Uuid запису не знайдено -- -- -- History element with different uuid -- Елемент журналу з відмінним uuid -- -- -- Duplicate custom attribute found -- Знайдено дублікат Вашої власної ознаки -- -- -- Entry string key or value missing -- Запису бракує текстового ключа або значення -- -- -- Entry binary key or value missing -- Запису бракує двійкового ключа або значення -- -- -- Auto-type association window or sequence missing -- Відсутнє вікно або послідовність прив'язки автозаповнення -- -- -- Invalid bool value -- Непридатне логічне значення -- -- -- Invalid date time value -- Непридатне часове значення -- -- -- Invalid color value -- Непридатне значення кольору -- -- -- Invalid color rgb part -- Непридатна частина кольору rgb -- -- -- Invalid number value -- Непридатне числове значення -- -- -- Invalid uuid value -- Непридатне значення uuid -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- Неможливо розпакувати двійковий код -- -- -- XML error: --%1 --Line %2, column %3 -- Помилка XML: --%1 --Рядок %2, знакопозиція %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- -- -- -- Private key is an attachment but no attachments provided. -- -- -- -- Private key is empty -- -- -- -- File too large to be a private key -- Файл занадто великий для таємного ключа -- -- -- Failed to open private key -- Відкриття таємного ключа зазнало невдачі -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- Неможливо відкрити сховище. -- -- -- Import KeePass1 Database -- Імпортувати сховище KeePass1 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- Неможливо прочитати файловий ключ. -- -- -- Not a KeePass database. -- Це не сховище KeePass. -- -- -- Unsupported encryption algorithm. -- Непідтримуваний алгоритм шифрування. -- -- -- Unsupported KeePass database version. -- Непідтримувана версія сховища KeePass. -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- Неможливо прочитати шифрування IV -- -- -- Invalid number of groups -- Непридатна кількість груп -- -- -- Invalid number of entries -- Непридатна кількість записів -- -- -- Invalid content hash size -- Непридатний розмір контрольної суми вмісту -- -- -- Invalid transform seed size -- Непридатний розмір початкового числа перетворення -- -- -- Invalid number of transform rounds -- Непридатний кількість циклів перетворення -- -- -- Unable to construct group tree -- Неможливо побудувати дерево групи -- -- -- Root -- Корінь -- -- -- Key transformation failed -- Перетворення ключа зазнало невдачі -- -- -- Invalid group field type number -- Непридатна кількість типів поля групи -- -- -- Invalid group field size -- Непридатний розмір поля групи -- -- -- Read group field data doesn't match size -- Дані у полі групи читання не відповідають розміру -- -- -- Incorrect group id field size -- Хибний розмір поля ідентифікатора групи -- -- -- Incorrect group creation time field size -- Хибний розмір поля часу створення групи -- -- -- Incorrect group modification time field size -- Значення часу у полі останньої зміни групи має хибний розмір -- -- -- Incorrect group access time field size -- Значення часу у полі останнього доступу має хибний розмір -- -- -- Incorrect group expiry time field size -- Значення часу у полі закінчення терміну чинності групи має хибний розмір -- -- -- Incorrect group icon field size -- Хибний розмір поля значка групи -- -- -- Incorrect group level field size -- Хибний розмір поля для рівня групи -- -- -- Invalid group field type -- Непридатний тип поля групи -- -- -- Missing group id or level -- Бракує ідентифікатора або рівня групи -- -- -- Missing entry field type number -- Бракує кількості типів для поля запису -- -- -- Invalid entry field size -- Непридатний розмір поля запису -- -- -- Read entry field data doesn't match size -- Дані у полі запису читання не відповідають розміру -- -- -- Invalid entry uuid field size -- Непридатний розмір поля uuid запису -- -- -- Invalid entry group id field size -- Непридатний розмір поля для ідентифікатора групи запису -- -- -- Invalid entry icon field size -- Непридатний розмір поля для значка запису -- -- -- Invalid entry creation time field size -- Непридатний розмір поля для часу створення запису -- -- -- Invalid entry modification time field size -- Непридатний розмір значення у полі останньої зміни запису -- -- -- Invalid entry expiry time field size -- Поле закінчення терміну чинності запису має непридатний розмір -- -- -- Invalid entry field type -- Непридатний тип поля запису -- -- -- unable to seek to content position -- неможливо знайти позицію вмісту -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- Надано непридатні реєстраційні дані. Спробуйте, будь ласка, ще раз. --Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим. -- -- -- Unable to calculate database key -- -- -- -- -- KeeShare -- -- Invalid sharing reference -- Непридатне спільне посилання -- -- -- Inactive share %1 -- Бездіяльне спільне використання %1 -- -- -- Imported from %1 -- Імпортовано з %1 -- -- -- Exported to %1 -- Експортовано в %1 -- -- -- Synchronized with %1 -- Узгоджено з %1 -- -- -- Import is disabled in settings -- Імпортування вимкнено у параметрах -- -- -- Export is disabled in settings -- Експортування вимкнено у параметрах -- -- -- Inactive share -- Бездіяльне спільне використання -- -- -- Imported from -- Імпортовано з -- -- -- Exported to -- Експортовано в -- -- -- Synchronized with -- Узгоджено з -- -- -- -- KeyComponentWidget -- -- Key Component -- Складник ключа -- -- -- Key Component Description -- Опис складника ключа -- -- -- Cancel -- Скасувати -- -- -- Key Component set, click to change or remove -- Набір складників ключа, клацніть щоб змінити або видалити -- -- -- Add %1 -- Add a key component -- Додати %1 -- -- -- Change %1 -- Change a key component -- Змінити %1 -- -- -- Remove %1 -- Remove a key component -- Видалити %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 встановлено, клацніть, щоб змінити або видалити -- -- -- -- KeyFileEditWidget -- -- Generate -- Створити -- -- -- Key File -- Файловий ключ -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>Ви можете додати файловий ключ, що містить випадкові байти для покращення безпеки.</p><p>Ви мусите зберігати його таємно і не губити, інакше Ви не зможете відкрити сховище.</p> -- -- -- Error loading the key file '%1' --Message: %2 -- Помилка завантаження файлового ключа '%1' --Повідомлення: %2 -- -- -- Key files -- Файлові ключі -- -- -- All files -- Всі файли -- -- -- Create Key File... -- Створити файловий ключ... -- -- -- Error creating key file -- Помилка створення файлового ключа -- -- -- Unable to create key file: %1 -- Неможливо створити файловий ключ: %1 -- -- -- Select a key file -- Обрати файловий ключ -- -- -- Key file selection -- Вибір файлового ключа -- -- -- Browse for key file -- Вибір файлового ключа -- -- -- Browse... -- Переглянути... -- -- -- Generate a new key file -- Створити новий файловий ключ -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- Увага: не використовуйте файл, що може змінитися у майбутньому, інакше Ви не зможете розблокувати Ваше сховище! -- -- -- Invalid Key File -- Непридатний файловий ключ -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- Ви не можете використати поточне сховище як файловий ключ. Будь ласка, виберіть інший файл або створіть новий файловий ключ. -- -- -- Suspicious Key File -- Підозрілий файловий ключ -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- Вибраний фаловий ключ схожий на файл сховища паролів. Файловий ключ мусить бути незмінним файлом, який ніколи не змінюють, інакше Ви назавжди втратите доступ до Вашого сховища. --Ви певні, що хочете продовжити з цим файлом? -- -- -- Old key file format -- -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- -- -- -- -- MainWindow -- -- &Database -- &Сховище -- -- -- &Help -- &Довідка -- -- -- &Groups -- &Групи -- -- -- &Tools -- &Інструменти -- -- -- &Quit -- &Вихід -- -- -- &About -- &Про KeePassXC -- -- -- Database settings -- Налаштування сховища -- -- -- Copy username to clipboard -- Скопіювати ім’я користувача до кишені -- -- -- Copy password to clipboard -- Скопіювати пароль до кишені -- -- -- &Settings -- Нала&штування -- -- -- &Title -- Заголовок -- -- -- Copy title to clipboard -- Скопіювати заголовок до кишені -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- Скопіювати URL до кишені -- -- -- &Notes -- Нотатки -- -- -- Copy notes to clipboard -- Скопіювати примітки в кишеню -- -- -- Copy &TOTP -- Скопіювати ТОП -- -- -- E&mpty recycle bin -- Спорожнити смітник -- -- -- Clear history -- Очистити журнал -- -- -- Access error for config file %1 -- Помилка доступу до файлу конфігурації %1 -- -- -- Settings -- Налаштування -- -- -- Toggle window -- Перемкнути вікно -- -- -- Quit KeePassXC -- Вийти з KeePassXC -- -- -- Please touch the button on your YubiKey! -- Натисніть, будь ласка, кнопку на вашому YubiKey! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- Попередження: Ви використовуєте нестійку збірку KeePassXC! --Зберігайте резервну копію Ваших сховищ через підвищений ризик пошкодження даних. --Ця версія не призначена для повсякденного користування. -- -- -- &Donate -- Пожерт&вувати -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- <b>Попередження</b>: Використання Вашої версії Qt з екранною клавіатурою може призвести до збою KeePassXC. -- -- -- &Import -- Імпортувати -- -- -- Create a new database -- Створити нове сховище -- -- -- Merge from another KDBX database -- Об'єднати з іншого сховища KDBX -- -- -- Add a new entry -- Додати новий запис -- -- -- View or edit entry -- Переглянути або змінити запис -- -- -- Add a new group -- Додати нову групу -- -- -- Perform &Auto-Type -- Виконати Автозаповнення -- -- -- Open &URL -- Відкрити URL -- -- -- Import a KeePass 1 database -- Імпортувати сховище KeePass 1 -- -- -- Import a CSV file -- Імпортувати файл CSV -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- <b>Примітка</b>: Ви використовуєте попередній випуск KeePassXC! --Зважайте на ймовірні помилки та незначні проблеми, ця версія не призначена для повсякденного користування. -- -- -- Check for updates on startup? -- Перевіряти наявність оновлень під час запуску? -- -- -- Would you like KeePassXC to check for updates on startup? -- Ви хочете, щоб KeePassXC перевіряв наявність оновлень під час запуску? -- -- -- You can always check for updates manually from the application menu. -- Ви завжди можете перевірити наявність оновлень з меню застосунку. -- -- -- &Export -- &Експортувати -- -- -- Sort &A-Z -- Впорядкувати &А-Я -- -- -- Sort &Z-A -- Впорядкувати &Я-А -- -- -- &Password Generator -- Генератор паролів -- -- -- Import a 1Password Vault -- Імпортувати сховище 1Password -- -- -- &Getting Started -- &Вступ -- -- -- &User Guide -- Довідник &користувача -- -- -- &Keyboard Shortcuts -- &Сполучення клавіш -- -- -- &Recent Databases -- Недавні сховища -- -- -- &Entries -- Записи -- -- -- Copy Att&ribute -- Скопіювати ознаку -- -- -- TOTP -- ТОП -- -- -- View -- Вигляд -- -- -- Theme -- Тема -- -- -- &Check for Updates -- Перевірити наявність оновлень -- -- -- &Open Database… -- Відкрити сховище... -- -- -- &Save Database -- Зберегти сховище -- -- -- &Close Database -- Закрити сховище -- -- -- &New Database… -- Нове сховище -- -- -- &Merge From Database… -- Об'&єднати зі сховищем… -- -- -- &New Entry… -- Новий запис... -- -- -- &Edit Entry… -- Змінити запис... -- -- -- &Delete Entry… -- Видалити запис... -- -- -- &New Group… -- Нова група... -- -- -- &Edit Group… -- Змінити групу... -- -- -- &Delete Group… -- Видалити групу... -- -- -- Download All &Favicons… -- Завантажити всі фавікони... -- -- -- Sa&ve Database As… -- Зберегти сховище як... -- -- -- Database &Security… -- Безпека сховища... -- -- -- Database &Reports... -- Звіти для сховища... -- -- -- Statistics, health check, etc. -- -- -- -- &Database Settings… -- Налаштування сховища... -- -- -- &Clone Entry… -- Склонувати запис... -- -- -- Move u&p -- Перемістити вгору -- -- -- Move entry one step up -- Посунути запис на один крок вище -- -- -- Move do&wn -- Перемістити вниз -- -- -- Move entry one step down -- Посунути запис на один крок нижче -- -- -- Copy &Username -- Скопіювати ім'я користувача -- -- -- Copy &Password -- Скопіювати пароль -- -- -- Download &Favicon -- Завантажити &Favicon -- -- -- &Lock Databases -- Замкнути сховища -- -- -- &CSV File… -- &CSV-файл... -- -- -- &HTML File… -- &HTML-файл... -- -- -- KeePass 1 Database… -- Сховище KeePass 1… -- -- -- 1Password Vault… -- Сховище 1Password... -- -- -- CSV File… -- CSV-файл... -- -- -- Show TOTP -- Показати ТОП -- -- -- Show QR Code -- Показати QR-код -- -- -- Set up TOTP… -- Встановити ТОП… -- -- -- Report a &Bug -- Повідомит&и про ваду -- -- -- Open Getting Started Guide -- -- -- -- &Online Help -- &Довідка в мережі... -- -- -- Go to online documentation -- Перейти до документації в мережі -- -- -- Open User Guide -- Відкрити довідник користувача -- -- -- Save Database Backup... -- Зберегти резервну копію сховища... -- -- -- Add key to SSH Agent -- Додати до в'язки посередника SSH -- -- -- Remove key from SSH Agent -- Видалити з в'язки посередника SSH -- -- -- Compact Mode -- Компактний режим -- -- -- Automatic -- Автоматично -- -- -- Light -- Світла -- -- -- Dark -- Темна -- -- -- Classic (Platform-native) -- Класична (тема платформи) -- -- -- Show Toolbar -- Показувати панель инструментів -- -- -- Show Preview Panel -- Показувати панель перегляду -- -- -- Don't show again for this version -- Не показувати знову для цієї версії -- -- -- Restart Application? -- Перезапустити програму? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- -- -- -- Perform Auto-Type Sequence -- -- -- -- {USERNAME} -- -- -- -- {USERNAME}{ENTER} -- -- -- -- {PASSWORD} -- -- -- -- {PASSWORD}{ENTER} -- -- -- -- Always on Top -- -- -- -- Hide Usernames -- Приховувати імена користувача -- -- -- Hide Passwords -- Приховувати паролі -- -- -- -- ManageDatabase -- -- Database settings -- Налаштування сховища -- -- -- Edit database settings -- Змінити параметри сховища -- -- -- Unlock database -- Розблокувати сховище -- -- -- Unlock database to show more information -- Розблокуйте сховище, щоб показати додаткову інформацію -- -- -- Lock database -- Заблокувати сховище -- -- -- -- ManageSession -- -- Disconnect -- Від'єднати -- -- -- Disconnect this application -- -- -- -- -- Merger -- -- Creating missing %1 [%2] -- Створення відсутніх %1 [%2] -- -- -- Relocating %1 [%2] -- Переміщення %1 [%2] -- -- -- Overwriting %1 [%2] -- Перезапис %1 [%2] -- -- -- older entry merged from database "%1" -- об'єднано зі старішим записом зі сховища "%1" -- -- -- Adding backup for older target %1 [%2] -- Створення резервної копії старішої цілі %1 [%2] -- -- -- Adding backup for older source %1 [%2] -- Створення резервної копії старішого джерела %1 [%2] -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- Накладання старішого цільового запису на новіше джерело %1 [%2] -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- Накладання новішого джерельного запису на старішу ціль %1 [%2] -- -- -- Synchronizing from newer source %1 [%2] -- Узгодження з новішим джерелом %1 [%2] -- -- -- Synchronizing from older source %1 [%2] -- Узгодження зі старішим джерелом %1 [%2] -- -- -- Deleting child %1 [%2] -- Видалення нащадка %1 [%2] -- -- -- Deleting orphan %1 [%2] -- Видалення поодинокого об'єкту %1 [%2] -- -- -- Changed deleted objects -- Змінено видалені об'єкти -- -- -- Adding missing icon %1 -- Додавання відсутнього значка %1 -- -- -- Removed custom data %1 [%2] -- Видалено користувацькі дані %1 [%2] -- -- -- Adding custom data %1 [%2] -- Додавання користувацьких даних %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- Створити нове сховище KeePassXC... -- -- -- Root -- Root group -- Корінь -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- Сторінка майстера налаштування -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. -- -- -- Advanced Settings -- Розширене налаштування -- -- -- Simple Settings -- Просте налаштування -- -- -- Encryption Settings -- Параметри шифрування -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- Облікові дані сховища -- -- -- A set of credentials known only to you that protects your database. -- Набір відомих лише Вам облікових даних, які захищають сховище. -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- Параметри шифрування -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- Загальна інформація про сховище -- -- -- Please fill in the display name and an optional description for your new database: -- Будь ласка, надайте назву для показу і, можливо, іншу необов'язкову інформацію щодо Вашого нового сховища: -- -- -- -- NixUtils -- -- Password Manager -- Керівник паролів -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- Непридатні OpData01, заголовок відсутній -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- Неможливо прочитати всі IV байти, потрібно 16 але одержано %1 -- -- -- Unable to init cipher for opdata01: %1 -- Неможливо започаткувати шифр для opdata01: %1 -- -- -- Unable to read all HMAC signature bytes -- Неможливо прочитати всі байти підпису HMAC -- -- -- Malformed OpData01 due to a failed HMAC -- OpData01 спотворені через схиблений HMAC -- -- -- Unable to process clearText in place -- Неможливо обробити відкритий текст на місці -- -- -- Expected %1 bytes of clear-text, found %2 -- Очікувалось %1 байтів відкритого текстку, знайдено %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- Зчитування сховища не створило примірник --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- Тека .opvault мусить існувати -- -- -- Directory .opvault must be readable -- Тека .opvault мусить бути прочитною -- -- -- Directory .opvault/default must exist -- Тека .opvault/default мусить існувати -- -- -- Directory .opvault/default must be readable -- Тека .opvault/default мусить бути прочитною -- -- -- Unable to decode masterKey: %1 -- Неможливо розшифрувати головний ключ: %1 -- -- -- Unable to derive master key: %1 -- Неможливо вивести головний ключ: %1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- Непридатний файловий ключ. Ключ має бути у форматі OpenSSH -- -- -- PEM boundary mismatch -- Невідповідність межам PEM -- -- -- Base64 decoding failed -- Розшифрування Base64 зазнало невдачі -- -- -- Key file way too small. -- Файловий ключ надто маленький. -- -- -- Key file magic header id invalid -- Непридатний логічний код файлу ключа -- -- -- Found zero keys -- Не знайдено жодного ключа -- -- -- Failed to read public key. -- Зчитування відкритого ключа зазнало невдачі. -- -- -- Corrupted key file, reading private key failed -- Файл ключа пошкоджений, зчитування таємного ключа зазнало невдачі -- -- -- No private key payload to decrypt -- Корисної навантаги таємного ключа не знайдено -- -- -- Trying to run KDF without cipher -- Пробуємо обчислити ФОК без шифру -- -- -- Passphrase is required to decrypt this key -- Для розшифрування цього ключа потрібен вираз пароля -- -- -- Key derivation failed, key file corrupted? -- Обчислення ключа зазнало невдачі. Можливо, файл ключа пошкоджений? -- -- -- Decryption failed, wrong passphrase? -- Розшифрувати не вдалося, можливо, через хибний вираз пароля? -- -- -- Unexpected EOF while reading public key -- Несподіваний кінець файлу під час зчитування відкритого ключа -- -- -- Unexpected EOF while reading private key -- Несподіваний кінець файлу під час зчитування таємного ключа -- -- -- Can't write public key as it is empty -- Неможливо записати відкритий ключ, оскільки він пустий -- -- -- Unexpected EOF when writing public key -- Несподіваний кінець файлу під час запису відкритого ключа -- -- -- Can't write private key as it is empty -- Неможливо записати таємний ключ, оскільки він пустий -- -- -- Unexpected EOF when writing private key -- Несподіваний кінець файлу під час запису таємного ключа -- -- -- Unsupported key type: %1 -- Непідтримуваний тип ключа: %1 -- -- -- Unknown cipher: %1 -- Невідомий шифр: %1 -- -- -- Cipher IV is too short for MD5 kdf -- Шифр IV занадто короткий для ФОК MD5 -- -- -- Unknown KDF: %1 -- Невідома ФОК: %1 -- -- -- Unknown key type: %1 -- Невідомий тип ключа: %1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- Паролі не співпадають -- -- -- Passwords match so far -- Паролі поки що співпадають -- -- -- Toggle Password (%1) -- -- -- -- Generate Password (%1) -- -- -- -- Warning: Caps Lock enabled! -- Увага: Caps Lock увімкнено! -- -- -- -- PasswordEditWidget -- -- Enter password: -- Введіть пароль: -- -- -- Confirm password: -- Підтвердження пароля: -- -- -- Password -- Пароль -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>Пароль є основним засобом для убезпечення Вашого сховища.</p><p>Найкращі паролі мають бути довгими та унікальними. KeePassXC може створити такий для Вас.</p> -- -- -- Passwords do not match. -- Паролі не збігаються. -- -- -- Password field -- Поле пароля -- -- -- Repeat password field -- Поле повторення пароля -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- надійність -- -- -- entropy -- ентропія -- -- -- Password -- Пароль -- -- -- Character Types -- Види символів -- -- -- Numbers -- Цифри -- -- -- Extended ASCII -- Розширені ASCII -- -- -- Exclude look-alike characters -- Виключити неоднозначні символи -- -- -- Pick characters from every group -- Використати символи з кожної групи -- -- -- &Length: -- Довжина: -- -- -- Passphrase -- Вираз пароля -- -- -- Wordlist: -- Перелік слів: -- -- -- Word Separator: -- Розділювач слів: -- -- -- Close -- Закрити -- -- -- Entropy: %1 bit -- Ентропія: %1 біт -- -- -- Password Quality: %1 -- Якість пароля: %1 -- -- -- Poor -- Password quality -- Погана -- -- -- Weak -- Password quality -- Низька -- -- -- Good -- Password quality -- Добра -- -- -- Excellent -- Password quality -- Відмінна -- -- -- Switch to advanced mode -- Перемкнути в розширений режим -- -- -- Advanced -- Розширене -- -- -- Braces -- Дужки -- -- -- Punctuation -- Знаки пунктуації -- -- -- Quotes -- Лапки -- -- -- Logograms -- Логограми -- -- -- Character set to exclude from generated password -- Набір символів, яких треба уникати -- -- -- Do not include: -- Не залучати: -- -- -- Add non-hex letters to "do not include" list -- Не залучати літери, що не представляють шистнадцятковий код (G - Z) -- -- -- Hex -- Шістнадцяткові числа -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- Виключені знаки: "0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- Створений пароль -- -- -- Upper-case letters -- Великі літери -- -- -- Lower-case letters -- Маленькі літери -- -- -- Special characters -- Спеціальні символи -- -- -- Math Symbols -- Математичні символи -- -- -- Dashes and Slashes -- Риски -- -- -- Excluded characters -- Виключені символи -- -- -- Hex Passwords -- Шістнадцяткові паролі -- -- -- Password length -- Довжина пароля -- -- -- Word Case: -- Регістр слів: -- -- -- Regenerate password -- Створити пароль знову -- -- -- Copy password -- Копіювати пароль -- -- -- lower case -- нижній регістр -- -- -- UPPER CASE -- ВЕРХНІЙ РЕГІСТР -- -- -- Title Case -- З заголовної літери -- -- -- Generate Password -- Створити пароль -- -- -- Also choose from: -- -- -- -- Additional characters to use for the generated password -- -- -- -- Additional characters -- Додаткові символи -- -- -- Word Count: -- Кількість слів: -- -- -- Esc -- Esc -- -- -- Apply Password -- Застосувати пароль -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- Створити пароль знову (%1) -- -- -- Special Characters -- Спеціальні символи -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- Статистика -- -- -- Very weak password -- Дуже слабкий пароль -- -- -- Password entropy is %1 bits -- Ентропія пароля: %1 біт -- -- -- Weak password -- Слабкий пароль -- -- -- Used in %1/%2 -- -- -- -- Password is used %1 times -- Пароль використано %1 разів -- -- -- Password has expired -- Термін дії пароля сплив -- -- -- Password expiry was %1 -- -- -- -- Password is about to expire -- Термін дії пароля ось-ось спливе -- -- -- Password expires in %1 days -- Термін дії пароля спливає через %1 днів -- -- -- Password will expire soon -- Термін дії пароля спливає незабаром -- -- -- Password expires on %1 -- Термін дії пароля спливає %1 -- -- -- Health Check -- -- -- -- HIBP -- -- -- -- -- QMessageBox -- -- Overwrite -- Перезаписати -- -- -- Delete -- Видалити -- -- -- Move -- Перемістити -- -- -- Empty -- Спорожнити -- -- -- Remove -- Видалити -- -- -- Skip -- Пропустити -- -- -- Disable -- Вимкнути -- -- -- Merge -- Об'єднати -- -- -- Continue -- Продовжити -- -- -- -- QObject -- -- Database not opened -- Сховище не відкрите -- -- -- Database hash not available -- Контрольна сума сховища недоступна -- -- -- Client public key not received -- Відкритий ключ користувача не одержано -- -- -- Cannot decrypt message -- Неможливо розшифрувати повідомлення -- -- -- Action cancelled or denied -- Дію скасовано або заборонено -- -- -- KeePassXC association failed, try again -- Прив'язка KeePassXC зазнала невдачі, спробуйте ще раз -- -- -- Encryption key is not recognized -- Шифрувальний ключ не розпізнано -- -- -- Incorrect action -- Хибна дія -- -- -- Empty message received -- Одержано порожнє повідомлення -- -- -- No URL provided -- URL не надано -- -- -- No logins found -- Імен користувача не знайдено -- -- -- Unknown error -- Невідома помилка -- -- -- Add a new entry to a database. -- Додати новий запис до сховища. -- -- -- Path of the database. -- Шлях до сховища. -- -- -- Key file of the database. -- Файловий ключа для сховища. -- -- -- path -- шлях -- -- -- Username for the entry. -- Ім'я користувача для запису. -- -- -- username -- ім'я користувача -- -- -- URL for the entry. -- URL для запису. -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- Запитати введення пароля для запису. -- -- -- Generate a password for the entry. -- Створити пароль для запису. -- -- -- length -- довжина -- -- -- Path of the entry to add. -- Шлях до запису, що підлягає додаванню. -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- Шлях до запису, що підлягає копіюванню. -- -- -- Timeout in seconds before clearing the clipboard. -- Час очікування в секундах перед очищенням кишені. -- -- -- Edit an entry. -- Змінити запис. -- -- -- Title for the entry. -- Заголовок запису. -- -- -- title -- Заголовок -- -- -- Path of the entry to edit. -- Шлях до запису, що підлягає зміні. -- -- -- Estimate the entropy of a password. -- Обчислити ентропію пароля. -- -- -- Password for which to estimate the entropy. -- Пароль, що підлягає обчисленню ентропії. -- -- -- Perform advanced analysis on the password. -- Виконати поглиблений аналіз пароля. -- -- -- -- --Available commands: -- -- -- --Доступні команди: -- -- -- -- Name of the command to execute. -- Назва команди до виконання. -- -- -- List database entries. -- Показати перелік сховищ. -- -- -- Path of the group to list. Default is / -- Шлях групи. Типовим є / -- -- -- Find entries quickly. -- Знаходити записи швидко. -- -- -- Search term. -- Слово для пошуку. -- -- -- Merge two databases. -- Об'єднати два сховища. -- -- -- Path of the database to merge from. -- Шлях до сховища, яке підлягає об'єднанню. -- -- -- Use the same credentials for both database files. -- Використовувати однакові реєстраційні дані для обох сховищ. -- -- -- Key file of the database to merge from. -- Файловий ключ для сховища, яке підлягає об'єднанню. -- -- -- Show an entry's information. -- Показати дані запису. -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- Назви ознак для показу. Цей параметр можна вказати кілька разів, тим часом у кожному рядку може бути тільки один примірник у заданому порядку. Якщо ознаки не вказані, буде показано типові ознаки. -- -- -- attribute -- ознака -- -- -- Name of the entry to show. -- Назва запису для показу. -- -- -- NULL device -- NULL пристрій -- -- -- error reading from device -- помилка читання з пристрою -- -- -- malformed string -- хибне рядкове значення -- -- -- missing closing quote -- бракує закривальних лапок -- -- -- Group -- Група -- -- -- Title -- Заголовок -- -- -- Username -- Ім’я користувача -- -- -- Password -- Пароль -- -- -- Notes -- Примітки -- -- -- Last Modified -- Остання зміна -- -- -- Created -- Створено -- -- -- Browser Integration -- Сполучення з переглядачем -- -- -- SSH Agent -- Посередник SSH -- -- -- Generate a new random diceware passphrase. -- Створити новий вираз пароля методом гральних кісток (diceware). -- -- -- Word count for the diceware passphrase. -- Кількість слів у виразі пароля. -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Список слів для генератора паролів методом diceware. --[Типово: англійська версія EFF] -- -- -- Generate a new random password. -- Створити новий випадковий пароль. -- -- -- Could not create entry with path %1. -- Неможливо створити запис із шляхом %1. -- -- -- Enter password for new entry: -- Введіть пароль для нового запису: -- -- -- Writing the database failed %1. -- Записати сховище не вдалося %1. -- -- -- Successfully added entry %1. -- Успішно додано запис %1. -- -- -- Invalid timeout value %1. -- Непридатне значення ліміту часу %1. -- -- -- Entry %1 not found. -- Запис %1 не знайдено. -- -- -- Entry with path %1 has no TOTP set up. -- Запис із шляхом %1 не має налаштованого ТОП. -- -- -- Clearing the clipboard in %1 second(s)... -- Очищення кишені через %1 секунду...Очищення кишені через %1 секунди...Очищення кишені через %1 секунд...Очищення буфера обміну через %1 секунд... -- -- -- Clipboard cleared! -- Кишеню очищено! -- -- -- Silence password prompt and other secondary outputs. -- Тихе запрошення пароля та інші вторинні виводи. -- -- -- count -- CLI parameter -- кількість -- -- -- Could not find entry with path %1. -- Неможливо знайти запис із шляхом %1. -- -- -- Not changing any field for entry %1. -- Поля запису %1 залишаються без змін. -- -- -- Enter new password for entry: -- Введіть новий пароль для запису: -- -- -- Writing the database failed: %1 -- Записати сховище не вдалося: %1 -- -- -- Successfully edited entry %1. -- Успішно змінено запис %1. -- -- -- Length %1 -- Довжина: %1 -- -- -- Entropy %1 -- Ентропія: %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- Багатословні додаткові біти %1 -- -- -- Type: Bruteforce -- Тип: Метод грубої сили -- -- -- Type: Dictionary -- Тип: Словник -- -- -- Type: Dict+Leet -- Тип: Словник+Leet -- -- -- Type: User Words -- Тип: Користувацькі слова -- -- -- Type: User+Leet -- Тип: Користувач+Leet -- -- -- Type: Repeated -- Тип: Повторювання -- -- -- Type: Sequence -- Тип: Послідовність -- -- -- Type: Spatial -- Тип: Просторовий -- -- -- Type: Date -- Тип: Дата -- -- -- Type: Bruteforce(Rep) -- Тип: Метод грубої сили (повт.) -- -- -- Type: Dictionary(Rep) -- Тип: Словник (повт.) -- -- -- Type: Dict+Leet(Rep) -- Тип: Словник+Leet (повт.) -- -- -- Type: User Words(Rep) -- Тип: Користувацькі слова (повт.) -- -- -- Type: User+Leet(Rep) -- Тип: Користувач+Leet (повт.) -- -- -- Type: Repeated(Rep) -- Тип: Повторювання (повт.) -- -- -- Type: Sequence(Rep) -- Тип: Послідовність (повт.) -- -- -- Type: Spatial(Rep) -- Тип: Просторовий (повт.) -- -- -- Type: Date(Rep) -- Тип: Дата (повт.) -- -- -- Type: Unknown%1 -- Тип: Невідомий%1 -- -- -- Entropy %1 (%2) -- Ентропія: %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** Довжина пароля (%1) != сума довжин частин (%2) *** -- -- -- Failed to load key file %1: %2 -- Завантаження файлу ключа зазнало невдачі %1: %2 -- -- -- Length of the generated password -- Довжина створюваного пароля -- -- -- Use lowercase characters -- Використовувати малі літери -- -- -- Use uppercase characters -- Використовувати великі літери -- -- -- Use special characters -- Використовувати спеціальні символи -- -- -- Use extended ASCII -- Використовувати розширені ASCII -- -- -- Exclude character set -- Виключити набір символів -- -- -- chars -- символи -- -- -- Exclude similar looking characters -- Виключати схожі символи -- -- -- Include characters from every selected group -- Використовувати символи з кожної групи -- -- -- Recursively list the elements of the group. -- Показувати елементи групи рекурсивно. -- -- -- Cannot find group %1. -- Неможливо знайти групу %1. -- -- -- Error reading merge file: --%1 -- Помилка читання файлу для об'єднання: --%1 -- -- -- Unable to save database to file : %1 -- Неможливо зберегти сховище до файлу : %1 -- -- -- Unable to save database to file: %1 -- Неможливо зберегти сховище до файлу: %1 -- -- -- Successfully recycled entry %1. -- Успішно видалено запис %1. -- -- -- Successfully deleted entry %1. -- Успішно вилучено запис %1. -- -- -- Show the entry's current TOTP. -- Показати поточний ТОП запису. -- -- -- ERROR: unknown attribute %1. -- ПОМИЛКА: невідома ознака %1. -- -- -- No program defined for clipboard manipulation -- Програму для роботи з кишенею не визначено -- -- -- file empty -- порожній файл -- -- -- %1: (row, col) %2,%3 -- %1: (рядок, позиція) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- Непридатні параметри -- -- -- Invalid Key -- TOTP -- Непридатний ключ -- -- -- Message encryption failed. -- Шифрування повідомлення зазнало невдачі. -- -- -- No groups found -- Жодної групи не знайдено -- -- -- Create a new database. -- Створити нове сховище. -- -- -- File %1 already exists. -- Файл %1 вже існує. -- -- -- Loading the key file failed -- Завантаження ключа зазнало невдачі -- -- -- No key is set. Aborting database creation. -- Ключ не встановлено. Створення сховища скасовано. -- -- -- Failed to save the database: %1. -- Зберегти сховище не вдалося %1. -- -- -- Successfully created new database. -- Нове сховище успішно створено. -- -- -- Creating KeyFile %1 failed: %2 -- Створення файлового ключа %1 зазнало невдачі: %2 -- -- -- Loading KeyFile %1 failed: %2 -- Завантаження файлового ключа %1 зазнало невдачі: %2 -- -- -- Path of the entry to remove. -- Шлях до запису, що підлягає видаленню. -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- Наявний блокувальний файл режиму одного примірника є непридатним. Запускаємо новий примірник. -- -- -- The lock file could not be created. Single-instance mode disabled. -- Неможливо створити блокувальний файл. Режим одного примірника вимкнено. -- -- -- KeePassXC - cross-platform password manager -- KeePassXC – багатоплатформний розпорядник паролів -- -- -- filenames of the password databases to open (*.kdbx) -- назви файлів сховищ, які треба відкрити (*.kdbx) -- -- -- path to a custom config file -- шлях до власного файлу параметрів -- -- -- key file of the database -- файловий ключ сховища -- -- -- read password of the database from stdin -- отримати пароль до сховища із stdin -- -- -- Another instance of KeePassXC is already running. -- Інший примірник KeePassXC вже запущено. -- -- -- Fatal error while testing the cryptographic functions. -- Невиправна помилка в процесі тестування криптографічних функцій. -- -- -- KeePassXC - Error -- KeePassXC – помилка -- -- -- Database password: -- Пароль сховища: -- -- -- Cannot create new group -- Неможливо створити нову групу -- -- -- Deactivate password key for the database. -- Вимкнути парольний ключ для сховища. -- -- -- Displays debugging information. -- Показаує інформацію щодо зневадження. -- -- -- Deactivate password key for the database to merge from. -- Вимкнути парольний ключ для сховища, яке підлягає об'єднанню. -- -- -- Version %1 -- Версія %1 -- -- -- Build Type: %1 -- Тип збірки: %1 -- -- -- Revision: %1 -- Ревізія: %1 -- -- -- Distribution: %1 -- Дистрибутив: %1 -- -- -- Debugging mode is disabled. -- Режим зневадження вимкнено. -- -- -- Debugging mode is enabled. -- Режим зневадження ввімкнено. -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- Операційна система: %1 --Архітектура ЦП: %2 --Ядро: %3 %4 -- -- -- Auto-Type -- Автозаповнення -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare (підписане і непідписане спільне використання) -- -- -- KeeShare (only signed sharing) -- KeeShare (тільки підписане спільне використання) -- -- -- KeeShare (only unsigned sharing) -- KeeShare (тільки непідписане спільне використання) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- Відсутні -- -- -- Enabled extensions: -- Увімкнені розширення: -- -- -- Cryptographic libraries: -- Шифрувальні бібліотеки: -- -- -- Cannot generate a password and prompt at the same time! -- Неможливо створити пароль і запросити його водночасно! -- -- -- Adds a new group to a database. -- Додає нову групу для сховища. -- -- -- Path of the group to add. -- Шлях до групи, яку треба додати. -- -- -- Group %1 already exists! -- Група %1 вже існує! -- -- -- Group %1 not found. -- Групу %1 не знайдено. -- -- -- Successfully added group %1. -- Успішно додано групу %1. -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- Перевіряє, чи стали якісь паролі відомими. ІМ'Я ФАЙЛУ має бути шляхом до файлу, який містить контрольні суми SHA-1 відомих паролів у форматі HIBP. Такий файл можна завантажити, наприклад, з https://haveibeenpwned.com/Passwords . -- -- -- FILENAME -- ІМʼЯ ФАЙЛУ -- -- -- Analyze passwords for weaknesses and problems. -- Проаналізувати паролі на слабкість та інші проблеми. -- -- -- Failed to open HIBP file %1: %2 -- Не вдалося відкрити файл HIBP %1: %2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- Звіряння записів сховища з файлом HIBP, це може тривате досить довго... -- -- -- Close the currently opened database. -- Закрити наразі відкрите сховище. -- -- -- Display this help. -- Показати цю довідку. -- -- -- slot -- гніздо -- -- -- Invalid word count %1 -- Непридатна кількість слів %1 -- -- -- The word list is too small (< 1000 items) -- Список слів надто малий (< 1000 одиниць) -- -- -- Exit interactive mode. -- Вийти з діалогового режиму. -- -- -- Exports the content of a database to standard output in the specified format. -- Надсилає вміст сховища до стандартного виходу в зазначеному форматі. -- -- -- Unable to export database to XML: %1 -- Неможливо експортувати сховище в XML: %1 -- -- -- Unsupported format %1 -- Непідтримуваний формат %1 -- -- -- Use numbers -- Використовувати цифри -- -- -- Invalid password length %1 -- Непридатна довжина пароля %1 -- -- -- Display command help. -- Показати довідку щодо команд. -- -- -- Available commands: -- Доступні команди: -- -- -- Import the contents of an XML database. -- Імпортувати вміст сховища XML. -- -- -- Path of the XML database export. -- Шлях для експортування сховища XML. -- -- -- Path of the new database. -- Шлях до нового сховища. -- -- -- Successfully imported database. -- Сховище вдало імпортовано. -- -- -- Unknown command %1 -- Невідома команда %1 -- -- -- Flattens the output to single lines. -- Сплощує вивід до єдиного рядка. -- -- -- Only print the changes detected by the merge operation. -- Лише надрукувати зміни, знайдені операцією об'єднання. -- -- -- Yubikey slot for the second database. -- Гніздо Yubikey для другого сховища. -- -- -- Successfully merged %1 into %2. -- %1 успішно об́'єднано з %2. -- -- -- Database was not modified by merge operation. -- Об'єднання не змінило сховище. -- -- -- Moves an entry to a new group. -- Переміщує запис до нової групи. -- -- -- Path of the entry to move. -- Шлях до запису, що підлягає переміщенню. -- -- -- Path of the destination group. -- Шлях до групи призначення. -- -- -- Could not find group with path %1. -- Неможливо знайти групу за шляхом %1. -- -- -- Entry is already in group %1. -- Запис вже в групі %1. -- -- -- Successfully moved entry %1 to group %2. -- Запис %1 успішно переміщено до групи %2. -- -- -- Open a database. -- Відкрити сховище. -- -- -- Path of the group to remove. -- Шлях до групи, що підлягає видаленню. -- -- -- Cannot remove root group from database. -- Неможливо видалити кореневу групу зі сховища. -- -- -- Successfully recycled group %1. -- Успішно перероблено групу %1. -- -- -- Successfully deleted group %1. -- Групу %1 успішно вилучено. -- -- -- Failed to open database file %1: not found -- Не вдалося відкрити файл сховища %1: файл не знайдено -- -- -- Failed to open database file %1: not a plain file -- Не вдалося відкрити файл сховища %1: не звичайний файл -- -- -- Failed to open database file %1: not readable -- Не вдалося відкрити файл сховища %1: недоступний для читання -- -- -- Enter password to unlock %1: -- Введіть пароль для розблокування %1: -- -- -- Invalid YubiKey slot %1 -- Непридатне гніздо YubiKey %1 -- -- -- Enter password to encrypt database (optional): -- Введіть пароль для шифрування сховища (необов'язково): -- -- -- HIBP file, line %1: parse error -- Файл HIBP, рядок %1: помилка синтаксичного аналізу -- -- -- Secret Service Integration -- Сполучення з Таємною службою -- -- -- User name -- Ім’я користувача -- -- -- Password for '%1' has been leaked %2 time(s)! -- -- -- -- Invalid password generator after applying all options -- Після застосування всіх параметрів генератор паролів став непридатним -- -- -- Show the protected attributes in clear text. -- Показувати захищені ознаки незахищеним текстом. -- -- -- Browser Plugin Failure -- Помилка розширення переглядача -- -- -- Could not save the native messaging script file for %1. -- -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- -- -- -- Copy an entry's attribute to the clipboard. -- Скопіювати атрибут запису в буфер обміну. -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- -- -- -- Attribute "%1" not found. -- Ознаку "%1" не знайдено. -- -- -- Entry's "%1" attribute copied to the clipboard! -- Ознаку запису "%1" скопійовано до кишені! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- -- -- -- slot[:serial] -- -- -- -- Target decryption time in MS for the database. -- -- -- -- time -- час -- -- -- Set the key file for the database. -- Вкажіть файловий ключ для сховища. -- -- -- Set a password for the database. -- Вкажіть пароль для сховища. -- -- -- Invalid decryption time %1. -- -- -- -- Target decryption time must be between %1 and %2. -- -- -- -- Failed to set database password. -- Не вдалося встановити пароль для сховища. -- -- -- Benchmarking key derivation function for %1ms delay. -- -- -- -- Setting %1 rounds for key derivation function. -- -- -- -- error while setting database key derivation settings. -- -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- Формат для експортування. Можливі формати: xml або csv. Типовий формат – xml. -- -- -- Unable to import XML database: %1 -- Неможливо імпортувати сховище XML: %1 -- -- -- Show a database's information. -- Показати інформацію про сховище. -- -- -- UUID: -- UUID: -- -- -- Name: -- Назва: -- -- -- Description: -- Опис: -- -- -- Cipher: -- Шифр: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- -- -- -- Recycle bin is not enabled. -- -- -- -- Invalid command %1. -- -- -- -- Invalid YubiKey serial %1 -- -- -- -- Please touch the button on your YubiKey to continue… -- Натисніть, будь ласка, кнопку на вашому YubiKey для продовження… -- -- -- Do you want to create a database with an empty password? [y/N]: -- Ви дійсно бажаєте створити сховище з порожнім паролем? [y/N]: -- -- -- Repeat password: -- Повторіть пароль: -- -- -- Error: Passwords do not match. -- Помилка: паролі не збігаються. -- -- -- All clipping programs failed. Tried %1 -- -- -- -- -- AES (%1 rounds) -- AES (%1 раундів) -- -- -- AES 256-bit -- AES 256-біт -- -- -- Twofish 256-bit -- Twofish 256-біт -- -- -- ChaCha20 256-bit -- ChaCha20: 256-біт {20 256-?} -- -- -- Benchmark %1 delay -- Оцінити %1 затримку еталонним тестом -- -- -- %1 ms -- milliseconds -- %1 мс%1 мс%1 мс%1 мс -- -- -- %1 s -- seconds -- %1 с%1 с%1 с%1 с -- -- -- path to a custom local config file -- -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- -- -- -- Argon2%1 (%2 rounds, %3 KB) -- -- -- -- Argon2d (KDBX 4 – recommended) -- -- -- -- Argon2id (KDBX 4) -- -- -- -- TOTP -- ТОП -- -- -- Icon -- Значок -- -- -- Unsupported key file version: %1 -- -- -- -- Checksum mismatch! Key file may be corrupt. -- -- -- -- Unexpected key file data! Key file may be corrupt. -- -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- Внутрішня помилка zlib під час стиснення: -- -- -- Error writing to underlying device: -- Помилка запису на основний пристрій: -- -- -- Error opening underlying device: -- Помилка відкриття основного пристрою: -- -- -- Error reading data from underlying device: -- Помилка читання з основного пристрою: -- -- -- Internal zlib error when decompressing: -- Внутрішня помилка zlib під час розпакування: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- Ця версія zlib не підтримує формат gzip. -- -- -- Internal zlib error: -- Внутрішня помилка zlib: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- Також показувати записи, які було виключено зі звітів -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- Наведіть курсор на причину, щоб переглянути додаткові відомості. Клацніть двічі по запису для його редагування. -- -- -- Bad -- Password quality -- Погана -- -- -- Bad — password must be changed -- Погана – пароль необхідно змінити -- -- -- Poor -- Password quality -- Погана -- -- -- Poor — password should be changed -- Слабка – пароль слід змінити -- -- -- Weak -- Password quality -- Низька -- -- -- Weak — consider changing the password -- Слабка – розгляньте можливість змінити пароль -- -- -- (Excluded) -- (Виключено) -- -- -- This entry is being excluded from reports -- Цей запис виключено зі звітів -- -- -- Please wait, health data is being calculated... -- Зачекайте, будь ласка, триває обчислення даних стану... -- -- -- Congratulations, everything is healthy! -- Вітаємо, все здорово! -- -- -- Title -- Заголовок -- -- -- Path -- Шлях -- -- -- Score -- Оцінка -- -- -- Reason -- Причина -- -- -- Edit Entry... -- Змінити запис... -- -- -- Exclude from reports -- Виключити зі звітів -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- УВАГА: цей звіт вимагає надсилання інформації до онлайн-сервісу Have I Been Pwned (https://haveibeenpwned.com). Якщо Ви продовжите, паролі з вашого сховища буде криптографічно гешовано, а перші п'ять символів отриманих гешів буде безпечно надіслано до цього сервісу. Ваше сховище залишається в безпеці і не може бути відтвореним на основі переданої інформації. Однак, кількість паролів, які ви надсилаєте, та вашу IP-адресу буде розкрито цьому сервісу. -- -- -- Perform Online Analysis -- Виконати онлайн-аналіз -- -- -- Also show entries that have been excluded from reports -- Також показувати записи, які було виключено зі звітів -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- Ця збірка KeePassXC не має мережевих функцій. Мережа необхідна для перевіряння наявності паролів в базах даних Have I Been Pwned. -- -- -- Congratulations, no exposed passwords! -- Вітаємо, розкритих паролів немає! -- -- -- Title -- Заголовок -- -- -- Path -- Шлях -- -- -- Password exposed… -- Пароль розкрито... -- -- -- (Excluded) -- (Виключено) -- -- -- This entry is being excluded from reports -- Цей запис виключено зі звітів -- -- -- once -- одноразово -- -- -- up to 10 times -- до 10 разів -- -- -- up to 100 times -- до 100 разів -- -- -- up to 1000 times -- до 1000 разів -- -- -- up to 10,000 times -- до 10 000 разів -- -- -- up to 100,000 times -- до 100 000 разів -- -- -- up to a million times -- до мільйона разів -- -- -- millions of times -- мільйони разів -- -- -- Edit Entry... -- Змінити запис... -- -- -- Exclude from reports -- Виключити зі звітів -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- Наведіть мишкою на рядки зі значком помилки для додаткової інформації. -- -- -- Name -- Назва -- -- -- Value -- Значення -- -- -- Please wait, database statistics are being calculated... -- Зачекайте, будь ласка, триває обчислення статистики сховища... -- -- -- Database name -- Назва сховища -- -- -- Description -- Опис -- -- -- Location -- Розташування -- -- -- Last saved -- Останнє збереження -- -- -- Unsaved changes -- Незбережені зміни -- -- -- yes -- так -- -- -- no -- ні -- -- -- The database was modified, but the changes have not yet been saved to disk. -- Сховище було змінено, але поточні зміни ще не було записано на диск. -- -- -- Number of groups -- Кількість груп -- -- -- Number of entries -- Кількість записів -- -- -- Number of expired entries -- Кількість знечинених записів -- -- -- The database contains entries that have expired. -- Сховище містить знечинені записи. -- -- -- Unique passwords -- Унікальні паролі -- -- -- Non-unique passwords -- Повторювані паролі -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- Понад 10% паролів повторюються. Використовуйте унікальні паролі завжди, коли це можливо. -- -- -- Maximum password reuse -- Найбільша кількість повторень пароля -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- Деякі паролі використано понад три рази. Використовуйте унікальні паролі завжди, коли це можливо. -- -- -- Number of short passwords -- Кількість коротких паролів -- -- -- Recommended minimum password length is at least 8 characters. -- Рекомендована найменша довжина пароля — 8 символів. -- -- -- Number of weak passwords -- Кількість слабких паролів -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- Рекомендовано використовувати довгі, випадкові паролі з оцінкою «добре» або «відмінно». -- -- -- Entries excluded from reports -- Записи, виключені зі звітів -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- Виключати записи зі звітів, наприклад, тому що в них слабкий пароль, що не обов'язково є проблемою, але ви повинні стежити за ними. -- -- -- Average password length -- Середня довжина пароля -- -- -- %1 characters -- %1 символів -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- Середня довжина пароля менша 10 символів. Довші паролі покращують безпеку. -- -- -- -- SSHAgent -- -- Agent connection failed. -- Не вдалося з'єднатися з посередником. -- -- -- Agent protocol error. -- Помилка протоколу посередника. -- -- -- No agent running, cannot add identity. -- Немає запущеного посередника, неможливо додати ключ до в'язки. -- -- -- No agent running, cannot remove identity. -- Немає запущеного посередника, неможливо видалити ключ із в'язки. -- -- -- Agent refused this identity. Possible reasons include: -- Посередник відхилив цей ключ. Ймовірні причини: -- -- -- The key has already been added. -- Цей ключ вже додано. -- -- -- Restricted lifetime is not supported by the agent (check options). -- Обмеження часу не підтримується цим посередником (перевірте налаштування). -- -- -- A confirmation request is not supported by the agent (check options). -- Запит підтвердження не підтримується цим посередником (перевірте налаштування). -- -- -- Key identity ownership conflict. Refusing to add. -- Конфлікт власності ключа. Додавання скасовано. -- -- -- No agent running, cannot list identities. -- Немає запущеного посередника, неможливо відобразити перелік ключів. -- -- -- -- SearchHelpWidget -- -- Search Help -- Довідка з пошуку -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- Пошукові терміни мають такий формат: [модифікатори][поле:]["]термін["] -- -- -- Every search term must match (ie, logical AND) -- Всі пошукові терміни повинні співпадати (тобто, логічне І) -- -- -- Modifiers -- Модифікатори -- -- -- exclude term from results -- Виключити термін з результатів -- -- -- match term exactly -- лише точні збіги з терміном -- -- -- use regex in term -- увімкнути реґулярні вирази у терміні -- -- -- Fields -- Поля -- -- -- Term Wildcards -- Байдужі символи у термінах -- -- -- match anything -- відповідає будь-якому текстові -- -- -- match one -- відповідає одному символові -- -- -- logical OR -- логічне АБО -- -- -- Examples -- Приклади -- -- -- -- SearchWidget -- -- Search -- Пошук -- -- -- Limit search to selected group -- Обмежити пошук вибраною групою -- -- -- Search Help -- Довідка з пошуку -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- Знайти (%1)... -- -- -- Case sensitive -- Враховується регістр -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- Параметри -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- Увімкнути сполучення KeePassXC з Таємною службою Freedesktop.org -- -- -- General -- Загальні -- -- -- Show notification when credentials are requested -- Показувати повідомлення, коли надходить запит на реєстраційні дані -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>Якщо смітник увімкнено для сховища, записи будуть переміщені у смітник, а не видалені. Інакше їх буде видалено без додаткового схвалення.</p><p>Ви одержуватими повідомлення тільки якщо існують посилання на записи, що Ви видаляєте.</p></body></html> -- -- -- Exposed database groups: -- Виставлені групи сховища: -- -- -- Authorization -- Дозвіл -- -- -- These applications are currently connected: -- Такі застосунки зараз сполучені: -- -- -- Don't confirm when entries are deleted by clients -- Не запитувати схвалення, коли записи видаляють інші клієнти -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- -- -- -- <b>Warning:</b> -- <b>Попередження:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- -- -- -- -- SettingsWidgetKeeShare -- -- Active -- Активний -- -- -- Allow export -- Дозволити експортування -- -- -- Allow import -- Дозволити імпортування -- -- -- Own certificate -- Власний сертифікат -- -- -- Fingerprint: -- Відбиток: -- -- -- Certificate: -- Сертифікат: -- -- -- Signer -- Підписувач -- -- -- Key: -- Ключ: -- -- -- Generate -- Створити -- -- -- Import -- Імпортування -- -- -- Export -- Експортувати -- -- -- Imported certificates -- Імпортовані сертифікати -- -- -- Trust -- Довірити -- -- -- Ask -- Запитати -- -- -- Untrust -- Не довіряти -- -- -- Remove -- Видалити -- -- -- Path -- Шлях -- -- -- Status -- Стан -- -- -- Fingerprint -- Відбиток -- -- -- Certificate -- Сертифікат -- -- -- Trusted -- Перевірений -- -- -- Untrusted -- Неперевірений -- -- -- Unknown -- Невідомий -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- Файл ключа KeeShare -- -- -- All files -- Всі файли -- -- -- Select path -- Вибрати шлях -- -- -- Exporting changed certificate -- Експортування зміненого сертифікату -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- Експортований сертифікат не відповідає чинному сертифікатові. Бажаєте експортувати чинний сертифікат? -- -- -- Signer: -- Підписувач: -- -- -- Allow KeeShare imports -- Дозволити імпортування KeeShare -- -- -- Allow KeeShare exports -- Дозволити експортування KeeShare -- -- -- Only show warnings and errors -- Показувати лише попередження і помилки -- -- -- Key -- Ключ -- -- -- Signer name field -- Поле імені підписувача -- -- -- Generate new certificate -- Створити новий сертифікат -- -- -- Import existing certificate -- Імпортувати наявний сертифікат -- -- -- Export own certificate -- Експортувати власний сертифікат -- -- -- Known shares -- Відоме спільне використання -- -- -- Trust selected certificate -- Довіряти вибраним сертифікатам -- -- -- Ask whether to trust the selected certificate every time -- Запитувати кожного разу, чи довіряти вибраному сертифікатові -- -- -- Untrust selected certificate -- Скасувати довіру вибраним сертифікатам -- -- -- Remove selected certificate -- Видалити вибраний сертифікат -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- Перезаписування підписаної спільної оболонки не підтримане – експортування відвернуте -- -- -- Could not write export container (%1) -- Неможливо записати експортовану оболонку (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- Неможливо вкласти підпис: неможливо відкрити файл для запису (%1) -- -- -- Could not embed signature: Could not write file (%1) -- Неможливо вкласти підпис: неможливо записати файл (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- Неможливо вкласти сховище: неможливо відкрити файл для запису (%1) -- -- -- Could not embed database: Could not write file (%1) -- Неможливо вкласти сховище: неможливо записати файл (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- Перезаписування непідписаної спільної оболонки не підтримане – експортування відвернуте -- -- -- Could not write export container -- Неможливо записати експортовану оболонку -- -- -- Unexpected export error occurred -- Неочікувана помилка під час експортування -- -- -- -- ShareImport -- -- Import from container without signature -- Імпортування з оболонки без підпису -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- Ми не можемо перевірити джерело спільної оболонки, тому що вона не підписана. Ви дійсно хочете імпортувати з %1? -- -- -- Import from container with certificate -- Імпортування з оболонки, що має сертифікат -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- Довірити %1, що має відбиток %2 з %3? {1 ?} {2 ?} -- -- -- Not this time -- Не зараз -- -- -- Never -- Ніколи -- -- -- Always -- Завжди -- -- -- Just this time -- Тільки зараз -- -- -- Signed share container are not supported - import prevented -- Підтримання підписаних спільних оболонок відсутнє - імпортування відвернуте -- -- -- File is not readable -- Файл непридатний до опрацювання -- -- -- Invalid sharing container -- Непридатна спільна оболонка -- -- -- Untrusted import prevented -- Неперевірене імпортування відвернуте -- -- -- Successful signed import -- Успішне підписане імпортування -- -- -- Unsigned share container are not supported - import prevented -- Підтримання непідписаних спільних оболонок відсутнє – імпортування відвернуте -- -- -- Successful unsigned import -- Успішне непідписане імпортування -- -- -- File does not exist -- Файл не існує -- -- -- Unknown share container type -- Невідомий тип спільної оболонки -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- Імпортування з %1 зазнало невдачі (%2) -- -- -- Import from %1 successful (%2) -- Успішно імпортовано з %1 (%2) -- -- -- Imported from %1 -- Імпортовано з %1 -- -- -- Export to %1 failed (%2) -- Експортування з %1 зазнало невдачі (%2) -- -- -- Export to %1 successful (%2) -- Успішно експортовано %1 (%2) -- -- -- Export to %1 -- Експортування до %1 -- -- -- Multiple import source path to %1 in %2 -- Шлях до %1 має декілька джерел імпорту в %2. -- -- -- Conflicting export target path %1 in %2 -- Суперечливий шлях для експортування %1 до %2 -- -- -- -- TotpDialog -- -- Timed Password -- Тимчасовий пароль -- -- -- 000000 -- 000000 -- -- -- Copy -- Cкопіювати -- -- -- Expires in <b>%n</b> second(s) -- Втрачає чинність через <b>%n</b> секундуВтрачає чинність через <b>%n</b> секундиВтрачає чинність через <b>%n</b> секундВтрачає чинність через <b>%n</b> секунд -- -- -- -- TotpExportSettingsDialog -- -- Copy -- Cкопіювати -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- УВАГА: Таке налаштування ТОП є нестандартним і може не працювати з іншими автентифікаторами. -- -- -- There was an error creating the QR code. -- Не вдалося створити QR-код. -- -- -- Closing in %1 seconds. -- Закриється через %1 секунд. -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- Налаштування ТОП -- -- -- Default RFC 6238 token settings -- Типове налаштування позначки RFC 6238 -- -- -- Steam token settings -- Налаштування позначки потока -- -- -- Use custom settings -- Використовувати власне налаштування -- -- -- Custom Settings -- Власне налаштування -- -- -- Time step: -- Крок зміни часу: -- -- -- sec -- Seconds -- сек -- -- -- Code size: -- Розмір кодування: -- -- -- Secret Key: -- Таємний ключ: -- -- -- Secret key must be in Base32 format -- Таємний ключ мусить бути в форматі Base32 -- -- -- Secret key field -- Поле таємного ключа -- -- -- Algorithm: -- Алгоритм: -- -- -- Time step field -- Поле кроку часу -- -- -- digits -- цифр -- -- -- Invalid TOTP Secret -- Непридатний таємний ТОП -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- Ви ввели непридатний таємний ключ. Ключ мусить бути в форматі Base32. Наприклад: JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- Схвалити видалення параметрів ТОП -- -- -- Are you sure you want to delete TOTP settings for this entry? -- Ви дійсно хочете видалити параметри ТОП для цього запису? -- -- -- -- URLEdit -- -- Invalid URL -- Непридатний URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- Перевіряння наявності оновлень -- -- -- Checking for updates... -- Перевіряння наявності оновлень... -- -- -- Close -- Закрити -- -- -- Update Error! -- Помилка оновлення! -- -- -- An error occurred in retrieving update information. -- Помилка під час видобування інформації щодо оновлення. -- -- -- Please try again later. -- Будь ласка, спробуйте ще раз пізніше. -- -- -- Software Update -- Оновлення програми -- -- -- A new version of KeePassXC is available! -- Доступна нова версія KeePassXC! -- -- -- KeePassXC %1 is now available — you have %2. -- Доступна версія %1 KeePassXC — Ваша версія %2. -- -- -- Download it at keepassxc.org -- Завантажити її з keepassxc.org -- -- -- You're up-to-date! -- Маєте найновішу версію! -- -- -- KeePassXC %1 is currently the newest version available -- Наразі KeePassXC %1 є найновішую доступною версією -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- Почніть надійно і безпечно зберігати ваші паролі у сховищі KeePassXC -- -- -- Create new database -- Створити нове сховище -- -- -- Open existing database -- Відкрити наявне сховище -- -- -- Import from KeePass 1 -- Імпортувати з KeePass 1 -- -- -- Import from CSV -- Імпортувати з CSV -- -- -- Recent databases -- Недавні сховища -- -- -- Welcome to KeePassXC %1 -- Ласкаво просимо до KeePassXC %1 -- -- -- Import from 1Password -- Імпортувати з 1Password -- -- -- Open a recent database -- Відкрити недавнє сховище -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- -- -- -- Press -- Натиснути -- -- -- Passive -- Пасивне -- -- -- %1 Invalid slot specified - %2 -- -- -- -- The YubiKey interface has not been initialized. -- -- -- -- Hardware key is currently in use. -- -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- -- -- -- Hardware key timed out waiting for user interaction. -- -- -- -- A USB error ocurred when accessing the hardware key: %1 -- -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- Не вдалося завершити виклик-відповідь, конкретна помилка: %1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- Оновити -- -- -- YubiKey Challenge-Response -- YubiKey Challenge-Response -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>Якщо у вас є <a href="https://www.yubico.com/">YubiKey</a>, ви можете використовувати його для додаткової безпеки.</p><p>Один із слотів YubiKey має бути налаштованим як <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- -- -- Refresh hardware tokens -- Оновити апаратні позначки -- -- -- Hardware key slot selection -- Вибір гнізда апаратного захисту -- -- -- Could not find any hardware keys! -- Не вдалося знайти апаратні ключі! -- -- -- Selected hardware key slot does not support challenge-response! -- Обрана комірка апаратного ключа не підтримує виклик-відповідь! -- -- -- Detecting hardware keys… -- Виявлення апаратних ключів... -- -- -- No hardware keys detected -- Не виявлено апаратних ключів -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_zh_CN.ts keepassxc-2.6.4-patched/share/translations/keepassx_zh_CN.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_zh_CN.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_zh_CN.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7892 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- 关于 KeePassXC -- -- -- About -- 关于 -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- 在此报告错误:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC 使用第 2 版 GNU 通用公共授权协议(GPL)分发,(您也可以根据需要)选用第 3 版。 -- -- -- Contributors -- 贡献者 -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">在 GitHub 上查阅贡献信息</a> -- -- -- Debug Info -- 调试信息 -- -- -- Include the following information whenever you report a bug: -- 报告任何错误时,请包含以下信息: -- -- -- Copy to clipboard -- 复制到剪贴板 -- -- -- Project Maintainers: -- 项目维护者: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC 团队特别感谢 debfx 开发了最初版 KeePassX。 -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- 在 Windows 上使用 OpenSSH 而不是 Pageant -- -- -- Enable SSH Agent integration -- 启用 SSH 代理集成 -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK 值 -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK 重写 -- -- -- (empty) -- (空) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- 没有可用的 SSH 代理套接字。确保环境变量 SSH_AUTH_SOCK 存在或已设置重写。 -- -- -- SSH Agent connection is working! -- SSH 代理连接工作正常! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- 应用程序设置 -- -- -- General -- 常规 -- -- -- Security -- 安全 -- -- -- Access error for config file %1 -- 访问配置文件 %1 错误 -- -- -- Icon only -- 仅图标 -- -- -- Text only -- 仅文本 -- -- -- Text beside icon -- 文本在图标旁 -- -- -- Text under icon -- 文本在图标下 -- -- -- Follow style -- 系统风格 -- -- -- Reset Settings? -- 重置选项? -- -- -- Are you sure you want to reset all general and security settings to default? -- 您确定要将所有常规和安全设置重置为默认值吗? -- -- -- Monochrome (light) -- 单色(浅色) -- -- -- Monochrome (dark) -- 单色(深色) -- -- -- Colorful -- 彩色 -- -- -- You must restart the application to set the new language. Would you like to restart now? -- 您必须重新启动应用才能应用新语言。要现在重新启动吗? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- 基础设置 -- -- -- Startup -- 启动 -- -- -- Start only a single instance of KeePassXC -- 只启动一个 KeePassXC 实例 -- -- -- Minimize window at application startup -- 在应用程序启动时最小化窗口 -- -- -- File Management -- 文件管理 -- -- -- Backup database file before saving -- 保存前备份数据库文件 -- -- -- Automatically save after every change -- 修改后自动保存 -- -- -- Automatically reload the database when modified externally -- 当外部修改时自动重新加载数据库 -- -- -- Entry Management -- 条目管理 -- -- -- Use group icon on entry creation -- 新增条目时使用群组图标 -- -- -- Minimize instead of app exit -- 最小化而不是退出应用程序 -- -- -- Show a system tray icon -- 显示任务栏图标 -- -- -- Hide window to system tray when minimized -- 将窗口最小化至任务栏 -- -- -- Auto-Type -- 自动输入 -- -- -- Use entry title to match windows for global Auto-Type -- 全局自动输入时使用条目标题匹配窗口 -- -- -- Use entry URL to match windows for global Auto-Type -- 全局自动输入时使用条目 URL 匹配窗口 -- -- -- Always ask before performing Auto-Type -- 总在执行自动输入前询问 -- -- -- ms -- Milliseconds -- 毫秒 -- -- -- Movable toolbar -- 可移动工具栏 -- -- -- Remember previously used databases -- 记住以前使用的数据库 -- -- -- Load previously open databases on startup -- 启动时加载以前打开的数据库 -- -- -- Remember database key files and security dongles -- 记住数据库密钥文件和安全加密狗 -- -- -- Check for updates at application startup once per week -- 每周在应用程序启动时检查更新 -- -- -- Include beta releases when checking for updates -- 检查更新时包含 Beta 版本 -- -- -- Language: -- 语言: -- -- -- (restart program to activate) -- (重新启动程序以激活) -- -- -- Minimize window after unlocking database -- 解锁数据库后最小化窗口 -- -- -- Minimize when opening a URL -- 打开 URL 时最小化 -- -- -- Hide window when copying to clipboard -- 复制到剪贴板时隐藏窗口 -- -- -- Minimize -- 最小化 -- -- -- Drop to background -- 放到其他窗口底部 -- -- -- Favicon download timeout: -- 网站图标下载超时: -- -- -- Website icon download timeout in seconds -- 网站图标下载超时秒数 -- -- -- sec -- Seconds -- -- -- -- Toolbar button style -- 工具栏按钮样式 -- -- -- Language selection -- 语言选择 -- -- -- Global auto-type shortcut -- 全局自动输入快捷键 -- -- -- Auto-type character typing delay milliseconds -- 自动输入字符键入延迟毫秒数 -- -- -- Auto-type start delay milliseconds -- 自动输入起始延迟毫秒数 -- -- -- Automatically launch KeePassXC at system startup -- 系统启动时自动启动 KeePassXC -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- 安全地保存数据库文件(如果与 Dropbox 发生冲突,请禁用) -- -- -- User Interface -- 用户界面 -- -- -- Toolbar button style: -- 工具栏按钮样式: -- -- -- Use monospaced font for notes -- 备注使用等宽字体 -- -- -- Tray icon type: -- 托盘图标类型: -- -- -- Reset settings to default… -- 将设置重置为默认值... -- -- -- Auto-Type typing delay: -- 自动输入延迟: -- -- -- Global Auto-Type shortcut: -- 全局自动输入快捷键: -- -- -- Auto-Type start delay: -- 自动输入起始延迟: -- -- -- Automatically save when locking database -- 锁定数据库时自动保存 -- -- -- Automatically save non-data changes when locking database -- 锁定数据库时,自动保存非数据更改 -- -- -- Tray icon type -- 状态栏图标类型 -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- 超时 -- -- -- Clear clipboard after -- 在多久后清空剪贴板 -- -- -- sec -- Seconds -- -- -- -- Lock databases after inactivity of -- 在闲置多久后锁定数据库 -- -- -- min -- -- -- -- Forget TouchID after inactivity of -- 在闲置多久后忘记 TouchID -- -- -- Convenience -- 便利性 -- -- -- Lock databases when session is locked or lid is closed -- 系统锁定或合上盖子时锁定数据库 -- -- -- Forget TouchID when session is locked or lid is closed -- 系统锁定或合上盖子时忘记 TouchID -- -- -- Lock databases after minimizing the window -- 在最小化窗口后锁定数据库 -- -- -- Re-lock previously locked database after performing Auto-Type -- 执行自动输入后重新锁定之前锁定的数据库 -- -- -- Hide passwords in the entry preview panel -- 在条目预览面板中隐藏密码 -- -- -- Hide entry notes by default -- 默认情况下隐藏条目备注 -- -- -- Privacy -- 隐私 -- -- -- Use DuckDuckGo service to download website icons -- 使用 DuckDuckGo 来下载网站图标 -- -- -- Clipboard clear seconds -- 剪贴板清空秒数 -- -- -- Touch ID inactivity reset -- Touch ID 闲置重置时间 -- -- -- Database lock timeout seconds -- 数据库超时锁定秒数 -- -- -- min -- Minutes -- -- -- -- Clear search query after -- 在多久后清空搜索框 -- -- -- Require password repeat when it is visible -- 当密码可见时,需要重复密码 -- -- -- Hide passwords when editing them -- 编辑密码时隐藏密码 -- -- -- Use placeholder for empty password fields -- 对空密码字段使用占位符 -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- 无法找到符合窗口标题的条目: -- -- -- Auto-Type - KeePassXC -- 自动输入 - KeePassXC -- -- -- Auto-Type -- 自动输入 -- -- -- The Syntax of your Auto-Type statement is incorrect! -- 自动输入语句的语法不正确! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- 此自动输入命令包含很长的延迟。确定要继续吗? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- 此自动输入命令包含非常慢的按键操作。确定要继续吗? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- 此自动输入命令包含频繁重复的参数。确定要继续吗? -- -- -- Permission Required -- 需要权限 -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC 需要辅助功能权限以实现条目自动输入。如果您已经授予此权限,您可能需要重新启动 KeePassXC。 -- -- -- -- AutoTypeAssociationsModel -- -- Window -- 窗口 -- -- -- Sequence -- 输入序列 -- -- -- Default sequence -- 默认序列 -- -- -- -- AutoTypeMatchModel -- -- Group -- 群组 -- -- -- Title -- 标题 -- -- -- Username -- 用户名 -- -- -- Sequence -- 输入序列 -- -- -- -- AutoTypeMatchView -- -- Copy &username -- 复制用户名(&U) -- -- -- Copy &password -- 复制密码(&P) -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- 需要权限 -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC 需要辅助功能和录制屏幕权限以实现全局自动输入。使用窗口标题匹配条目需要录制屏幕权限。如果您已经授予此权限,您可能需要重新启动 KeePassXC。 -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- 自动输入 - KeePassXC -- -- -- Select entry to Auto-Type: -- 选择自动输入的条目: -- -- -- Search... -- 搜索... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC - 浏览器访问请求 -- -- -- %1 is requesting access to the following entries: -- %1 请求访问以下条目: -- -- -- Remember access to checked entries -- 记住对已选择条目的许可 -- -- -- Remember -- 记住 -- -- -- Allow access to entries -- 允许访问条目 -- -- -- Allow Selected -- 允许选定 -- -- -- Deny All -- 拒绝全部 -- -- -- Disable for this site -- 对此站点禁用 -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC-Browser 保存条目 -- -- -- Ok -- 确定 -- -- -- Cancel -- 取消 -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- 您打开了多个数据库 --请选择正确的数据库以保存凭据。 -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC:新的密钥关联请求 -- -- -- Save and allow access -- 保存并允许访问 -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC:覆盖现有的密钥吗? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- 一个名为“%1”的共享加密密钥已存在。 --确认要覆盖它吗? -- -- -- KeePassXC: Update Entry -- KeePassXC:更新条目 -- -- -- Do you want to update the information in %1 - %2? -- 您想更新 %1 - %2 中的信息吗? -- -- -- Abort -- 中止 -- -- -- Converting attributes to custom data… -- 将属性转换为自定义数据... -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC:已转换为 KeePassHTTP 属性 -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- 已成功转换 %1 个条目的属性。 --已移动 %2 个密钥到自定义数据。 -- -- -- Successfully moved %n keys to custom data. -- 已成功移动 %n 个密钥到自定义数据。 -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC:找不到含有 KeePassHTTP 属性的条目! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- 当前数据库中不存在有 KeePassHTTP 属性的条目。 -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC:检测到旧版浏览器集成设置 -- -- -- KeePassXC: Create a new group -- KeePassXC:创建新群组 -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- 已收到创建新群组“%1”的请求。 --是否要创建此群组? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- 您的 KeePassXC-Browser 设置需要移动到数据库设置中。 --这对于保持当前浏览器连接是必需的。 --是否要立即迁移现有设置? -- -- -- Don't show this warning again -- 不再显示此警告 -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- 您收到下列数据库的关联请求: --%1 -- --请为此连接提供唯一的名称或 ID,例如: --Chrome 笔记本电脑 -- -- -- -- BrowserSettingsWidget -- -- Dialog -- 对话框 -- -- -- This is required for accessing your databases with KeePassXC-Browser -- 要使用 KeePassXC-Browser 访问您的数据库,这是必须的。 -- -- -- Enable browser integration -- 启用浏览器集成 -- -- -- General -- 常规 -- -- -- Browsers installed as snaps are currently not supported. -- 以 Snap 软件包形式安装的浏览器目前不受支持。 -- -- -- Enable integration for these browsers: -- 为这些浏览器开启集成: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor 浏览器 -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- 请求凭据时显示通知 -- -- -- Request to unlock the database if it is locked -- 如果数据库已锁定,则请求解锁 -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- 只返回方案(http://、https:// 等) 相同的条目。 -- -- -- Match URL scheme (e.g., https://...) -- 匹配 URL 方案(例如,https:// 等) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- 对于特定的网址,仅返回最佳匹配,而不是符合域名的所有条目。 -- -- -- Return only best-matching credentials -- 仅返回最佳匹配的凭据 -- -- -- Returns expired credentials. String [expired] is added to the title. -- 允许返回过期的凭据。其标题会注明 [已过期]。 -- -- -- Allow returning expired credentials -- 允许返回过期的凭据 -- -- -- All databases connected to the extension will return matching credentials. -- 所有连接到扩展的数据库都返回匹配的凭据。 -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- 在所有打开的数据库中搜索匹配的凭据 -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- 按标题对匹配的凭据进行排序 -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- 按用户名对匹配的凭据进行排序 -- -- -- Advanced -- 高级 -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- 在访问凭据之前永不询问 -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- 在更新凭据之前永不询问 -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- 不请求 HTTP Basic 认证的权限 -- -- -- Automatically creating or updating string fields is not supported. -- 不支持自动创建或更新字符串字段。 -- -- -- Return advanced string fields which start with "KPH: " -- 返回以“KPH: ”开始的高级字符串字段 -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- 不要显示旧版 KeePassHTTP 设置迁移建议窗口。 -- -- -- Do not prompt for KeePassHTTP settings migration. -- 不要提示迁移 KeePassHTTP 设置。 -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- 启动时自动将 KeePassXC 或 keepassxc-proxy 可执行文件路径更新到 Native Messaging 脚本。 -- -- -- Update native messaging manifest files at startup -- 在启动时更新 Native Messaging 清单文件 -- -- -- Use a custom proxy location if you installed a proxy manually. -- 手动安装代理时,设置自定义代理的路径。 -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- 使用自定义代理: -- -- -- Custom proxy location field -- 自定义代理位置字段 -- -- -- Browser for custom proxy file -- 浏览自定义代理文件 -- -- -- Browse... -- Button for opening file dialog -- 浏览... -- -- -- Use a custom browser configuration location: -- 使用自定义浏览器配置: -- -- -- Browser type: -- 浏览器类型: -- -- -- Toolbar button style -- 工具栏按钮样式 -- -- -- Config Location: -- 配置位置: -- -- -- Custom browser location field -- 自定义浏览器位置字段 -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- 浏览自定义浏览器路径 -- -- -- Custom extension ID: -- 自定义扩展 ID: -- -- -- Custom extension ID -- 自定义扩展 ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- 由于 Snap 沙盒限制,您必须运行一个脚本才能启用浏览器集成。<br />您可以从 %1 获取此脚本 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- 要启用浏览器集成,您必须安装 KeePassXC-Browser。<br />下载适用于 %1、%2 和 %3 的版本。%4 -- -- -- Please see special instructions for browser extension use below -- 请参阅下面的浏览器扩展使用特殊说明 -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>错误:</b>找不到自定义代理位置!<br/>没有代理应用程序,浏览器集成将无法使用。 -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>警告:</b>以下选项可能有危险! -- -- -- Executable Files -- 可执行文件 -- -- -- All Files -- 所有文件 -- -- -- Select custom proxy location -- 选择自定义代理位置 -- -- -- Select native messaging host folder location -- 选择 Native Messaging 主机文件夹位置 -- -- -- -- CloneDialog -- -- Clone Options -- 复制选项 -- -- -- Append ' - Clone' to title -- 在标题后追加“ - 副本” -- -- -- Replace username and password with references -- 替换用户名和密码为引用 -- -- -- Copy history -- 复制历史 -- -- -- -- CsvImportWidget -- -- Import CSV fields -- 导入 CSV 字段 -- -- -- filename -- 文件名 -- -- -- size, rows, columns -- 大小、行、列 -- -- -- Encoding -- 编码 -- -- -- Codec -- 编解码器 -- -- -- Text is qualified by -- 文本限定符 -- -- -- Fields are separated by -- 字段分隔符 -- -- -- Comments start with -- 注释前缀 -- -- -- Consider '\' an escape character -- 将“\”视为转义字符 -- -- -- Preview -- 预览 -- -- -- Imported from CSV file -- 从 CSV 文件中导入 -- -- -- Original data: -- 原始数据: -- -- -- Error -- 错误 -- -- -- Error(s) detected in CSV file! -- 在 CSV 文件中检测到错误! -- -- -- [%n more message(s) skipped] -- [%n 条信息被跳过] -- -- -- CSV import: writer has errors: --%1 -- CSV 导入:写入错误: --%1 -- -- -- Text qualification -- 文本限定 -- -- -- Field separation -- 字段分隔 -- -- -- Number of header lines to discard -- 应该被忽略的表头行数 -- -- -- CSV import preview -- CSV 导入预览 -- -- -- Column Association -- 列关联 -- -- -- Last Modified -- 修改时间 -- -- -- Password -- 密码 -- -- -- Created -- 创建时间 -- -- -- Notes -- 备注 -- -- -- Title -- 标题 -- -- -- Group -- 群组 -- -- -- URL -- 网址 -- -- -- Username -- 用户名 -- -- -- Header lines skipped -- 跳过表头行数 -- -- -- First line has field names -- 第一行作为字段名称 -- -- -- Not Present -- 不存在 -- -- -- Column %1 -- 列 %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- 图标 -- -- -- -- CsvParserModel -- -- %n column(s) -- %n 列 -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1,%2,%3 -- -- -- %n byte(s) -- %n 字节 -- -- -- %n row(s) -- %n 行 -- -- -- -- Database -- -- File %1 does not exist. -- 文件 %1 不存在。 -- -- -- Unable to open file %1. -- 无法打开文件 %1。 -- -- -- Error while reading the database: %1 -- 读取数据库时出错:%1 -- -- -- File cannot be written as it is opened in read-only mode. -- 文件无法写入,因为它以只读模式打开。 -- -- -- Key not transformed. This is a bug, please report it to the developers! -- 密钥未转换。这是一个错误,请报告给开发者! -- -- -- %1 --Backup database located at %2 -- %1 --数据库的备份路径是 %2 -- -- -- Could not save, database does not point to a valid file. -- 无法保存,数据库没有指向一个有效文件。 -- -- -- Could not save, database file is read-only. -- 无法保存,数据库文件为只读。 -- -- -- Database file has unmerged changes. -- 数据库存在未合并的改动。 -- -- -- Recycle Bin -- 回收站 -- -- -- Passwords -- Root group name -- 密码 -- -- -- Database save is already in progress. -- 数据库已经在进行保存。 -- -- -- Could not save, database has not been initialized! -- 无法保存,数据库尚未初始化! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- 解锁数据库 - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- 密钥文件: -- -- -- Refresh -- 刷新 -- -- -- Don't show this warning again -- 不再显示此警告 -- -- -- All files -- 所有文件 -- -- -- Key files -- 密钥文件 -- -- -- Select key file -- 选择密钥文件 -- -- -- Failed to open key file: %1 -- 无法打开密钥文件:%1 -- -- -- Unlock KeePassXC Database -- 解锁 KeePassXC 数据库 -- -- -- Enter Password: -- 输入密码: -- -- -- Password field -- 密码字段 -- -- -- Hardware key slot selection -- 选择实体密钥的插槽 -- -- -- Browse for key file -- 浏览密钥文件 -- -- -- Browse... -- 浏览... -- -- -- Refresh hardware tokens -- 刷新实体令牌 -- -- -- Hardware Key: -- 实体密钥: -- -- -- Hardware key help -- 实体密钥帮助 -- -- -- TouchID for Quick Unlock -- TouchID 快速解锁 -- -- -- Unlock failed and no password given -- 解锁失败,未收到密码 -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- 解锁数据库失败,您没有输入密码。 --您要用空密码再尝试解锁一次吗? -- --为了避免这样的错误,您必须前往“数据库设置/安全”页面重置您的密码。 -- -- -- Retry with empty password -- 使用空密码重试 -- -- -- Enter Additional Credentials (if any): -- 输入附加凭据(如果有): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>您可以使用像 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> 这种带有 HMAC-SHA1 配置插槽的硬件安全密钥。</p> --<p>点击获取更多信息...</p> -- -- -- Key file help -- 密钥文件帮助 -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- 无法使用数据库文件作为密钥 -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- 您不能用您的数据库作为密钥文件。 --如果您没有密钥文件,请留空这个字段。 -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>除了密码之外,您还可以使用机密文件来增强数据库的安全性。此文件可以在数据库的安全设置中生成。</p><p>这<strong>不是</strong>您的 *.kdbx 数据库文件!<br>如果没有密钥文件,请将此字段留空。</p><p>点击获取更多信息...</p> -- -- -- Key file to unlock the database -- 用于解锁数据库的密钥文件 -- -- -- Please touch the button on your YubiKey! -- 请触摸您 YubiKey 上的按键! -- -- -- Detecting hardware keys… -- 正在检测硬件密钥... -- -- -- No hardware keys detected -- 未检测到硬件密钥 -- -- -- Select hardware key… -- 选择硬件密钥... -- -- -- Old key file format -- 旧版密钥文件格式 -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- 您使用的是旧版密钥文件格式,KeePassXC 可能会在将来停止对它的支持。<br><br>请考虑重新生成一个新密钥文件,前往:<br><strong>数据库 / 数据库安全 / 更改密钥文件</strong>。<br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- 密码 -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- 高级设置 -- -- -- General -- 常规 -- -- -- Security -- 安全 -- -- -- Encryption Settings -- 加密设置 -- -- -- Browser Integration -- 浏览器集成 -- -- -- Database Credentials -- 数据库凭据 -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC-Browser 设置 -- -- -- Stored keys -- 存储的密钥 -- -- -- Remove -- 删除 -- -- -- Delete the selected key? -- 删除所选密钥? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- 您确定要删除所选的密钥吗? --这可能会影响与浏览器插件的连接。 -- -- -- Key -- 密钥 -- -- -- Value -- -- -- -- Enable Browser Integration to access these settings. -- 启用浏览器集成以访问这些设置。 -- -- -- Disconnect all browsers -- 断开与所有浏览器的关联 -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- 您确定要断开与所有浏览器的关联吗? --这可能会影响与浏览器插件的连接。 -- -- -- KeePassXC: No keys found -- KeePassXC:未找到密钥 -- -- -- No shared encryption keys found in KeePassXC settings. -- 未在 KeePassXC 设置中找到共享加密密钥。 -- -- -- KeePassXC: Removed keys from database -- KeePassXC:已从数据库中删除密钥 -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- 已成功从 KeePassXC 设置中删除了 %n 个加密密钥。 -- -- -- Forget all site-specific settings on entries -- 取消条目上所有站点特定设置 -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- 您确定要取消每个条目上的所有站点特定设置吗? --访问条目的权限将被撤销。 -- -- -- Removing stored permissions… -- 正在删除存储的权限... -- -- -- Abort -- 中止 -- -- -- KeePassXC: Removed permissions -- KeePassXC:已删除权限 -- -- -- Successfully removed permissions from %n entry(s). -- 已成功从 %n 个条目中删除权限。 -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC:未找到有权限的条目! -- -- -- The active database does not contain an entry with permissions. -- 当前数据库中不包含具有权限的条目。 -- -- -- Move KeePassHTTP attributes to custom data -- 将 KeePassHTTP 属性移动到自定义数据 -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- 您确定要将所有旧版浏览器集成数据移至最新标准吗? --这对于保持与浏览器插件的兼容性是必要的。 -- -- -- Stored browser keys -- 存储的浏览器密钥 -- -- -- Remove selected key -- 移除选择的密钥 -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- 将 KeePassHTTP 属性移动到 KeePassXC-Browser 自定义数据 -- -- -- Refresh database root group ID -- 刷新数据库根群组 ID -- -- -- Created -- 创建时间 -- -- -- Refresh database ID -- 刷新数据库 ID -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- 是否要刷新数据库 ID? --只有当您的数据库是另一个数据库的副本并且浏览器扩展无法连接时,才有必要这样做。 -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- 添加额外保护...... -- -- -- No password set -- 没有设置密码 -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- 警告!您尚未设置密码。强烈建议不要使用无密码的数据库! -- --您确定要在没有密码的情况下继续吗? -- -- -- Continue without password -- 不使用密码继续 -- -- -- No encryption key added -- 没有添加加密密钥 -- -- -- You must add at least one encryption key to secure your database! -- 您必须添加至少一个加密密钥,才能保护您的数据库! -- -- -- Unknown error -- 未知错误 -- -- -- Failed to change database credentials -- 更改数据库凭据失败 -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- 加密算法: -- -- -- AES: 256 Bit (default) -- AES:256 位 (默认) -- -- -- Twofish: 256 Bit -- Twofish:256 位 -- -- -- Key Derivation Function: -- 密钥派生函数: -- -- -- Transform rounds: -- 转换次数: -- -- -- Memory Usage: -- 内存占用: -- -- -- Parallelism: -- 并行计算: -- -- -- Decryption Time: -- 解密时间: -- -- -- ?? s -- ?? 秒 -- -- -- Change -- 更改 -- -- -- Higher values offer more protection, but opening the database will take longer. -- 较高的值可提供更多保护,但打开数据库需要更长时间。 -- -- -- Database format: -- 数据库格式: -- -- -- This is only important if you need to use your database with other programs. -- 只有在需要将数据库与其他程序一起使用时,这一项才重要。 -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0(推荐) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- 无变化 -- -- -- Number of rounds too high -- Key transformation rounds -- 次数过高 -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- 您正在使用的密钥转换次数对于 Argon2 算法过高。 -- --如果执意使用此次数,您的数据库可能需要数小时或数天(甚至更长时间)才能打开! -- -- -- Understood, keep number -- 了解,仍使用此数量 -- -- -- Cancel -- 取消 -- -- -- Number of rounds too low -- Key transformation rounds -- 次数过低 -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- 您正在使用的密钥转换次数对于 AES-KDF 算法过低。 -- --如果执意使用此次数,您的数据库可能会相当易于破解! -- -- -- KDF unchanged -- KDF 无变化 -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- 无法使用新的 KDF 参数转换密钥;KDF 无变化。 -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- 线程 -- -- -- Change existing decryption time -- 改变现在的解密时间 -- -- -- Decryption time in seconds -- 解密时间秒数 -- -- -- Database format -- 数据库格式 -- -- -- Encryption algorithm -- 加密算法 -- -- -- Key derivation function -- 密钥派生函数 -- -- -- Transform rounds -- 转换次数 -- -- -- Memory usage -- 内存占用 -- -- -- Parallelism -- 并行计算 -- -- -- ?? ms -- ?? 毫秒 -- -- -- ? s -- ? 秒 -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- 公开条目 -- -- -- Don't expose this database -- 不公开此数据库 -- -- -- Expose entries under this group: -- 公开此群组下的条目: -- -- -- Enable Secret Service to access these settings. -- 启用保密服务以访问这些设置。 -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- 数据库元数据 -- -- -- Database name: -- 数据库名称: -- -- -- Database description: -- 数据库描述: -- -- -- Default username: -- 默认用户名: -- -- -- History Settings -- 历史设置 -- -- -- Max. history items: -- 最大历史记录数: -- -- -- Max. history size: -- 最大历史记录大小: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- 启用回收站 -- -- -- Additional Database Settings -- 其他数据库设置 -- -- -- Database name field -- 数据库名称字段 -- -- -- Database description field -- 数据库描述字段 -- -- -- Default username field -- 默认用户名字段 -- -- -- Maximum number of history items per entry -- 每个条目最多历史记录数 -- -- -- Maximum size of history per entry -- 每个项目最大历史记录大小 -- -- -- Delete Recycle Bin -- 清空回收站 -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- 确定清空回收站? --这个动作无法逆转。 -- -- -- (old) -- (旧的) -- -- -- Enable compression (recommended) -- 启用压缩(推荐) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- 共享 -- -- -- Breadcrumb -- 位置 -- -- -- Type -- 类型 -- -- -- Path -- 路径 -- -- -- Last Signer -- 最后签名者 -- -- -- Certificates -- 证书 -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- 数据库名称: -- -- -- Description: -- 描述: -- -- -- Database name field -- 数据库名称字段 -- -- -- Database description field -- 数据库描述字段 -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 数据库 -- -- -- All files -- 所有文件 -- -- -- Open database -- 打开数据库 -- -- -- CSV file -- CSV 文件 -- -- -- Merge database -- 合并数据库 -- -- -- Open KeePass 1 database -- 打开 KeePass 1 数据库 -- -- -- KeePass 1 database -- KeePass 1 数据库 -- -- -- Export database to CSV file -- 导出数据库到 CSV 文件 -- -- -- Writing the CSV file failed. -- 写入 CSV 文件失败。 -- -- -- Database creation error -- 数据库创建错误 -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- 已创建的数据库没有密钥或 KDF,拒绝保存。 --这一定是一个错误,请报告给开发者。 -- -- -- Select CSV file -- 选择 CSV 文件 -- -- -- New Database -- 新建数据库 -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [新建数据库] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [锁定] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [只读] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- 打开 %1 失败,它可能不存在或无法访问。 -- -- -- Export database to HTML file -- 导出数据库到 HTML 文件 -- -- -- HTML file -- HTML 文件 -- -- -- Writing the HTML file failed. -- 写入 HTML 文件失败 -- -- -- Export Confirmation -- 导出确认 -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- 您即将导出数据库到未加密文件,这将会直接暴露您的密码或敏感信息!确定要继续吗? -- -- -- Open OPVault -- 打开 OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- 搜索中... -- -- -- Do you really want to delete the entry "%1" for good? -- 您确定要删除“%1”条目吗? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- 您确定要将条目“%1”移动到回收站吗? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- 您确定要将 %n 个条目移到回收站吗? -- -- -- Execute command? -- 执行命令? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- 您确定要执行以下命令?<br><br>%1<br> -- -- -- Remember my choice -- 记住我的选择 -- -- -- Do you really want to delete the group "%1" for good? -- 您确定要永久删除“%1”群组吗? -- -- -- No current database. -- 未打开任何数据库。 -- -- -- No source database, nothing to do. -- 没有源数据库,无可用操作。 -- -- -- Search Results (%1) -- 搜索结果(%1) -- -- -- No Results -- 无结果 -- -- -- File has changed -- 文件已变更 -- -- -- The database file has changed. Do you want to load the changes? -- 数据库文件已发生变化。是否重新载入? -- -- -- Merge Request -- 合并请求 -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- 数据库文件已发生变化,并且您有未保存的更改。 --您想合并您的修改吗? -- -- -- Empty recycle bin? -- 清空回收站? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- 您确定要永久删除回收站中的所有内容? -- -- -- Do you really want to delete %n entry(s) for good? -- 您真的想删除 %n 个条目吗? -- -- -- Delete entry(s)? -- 删除条目? -- -- -- Move entry(s) to recycle bin? -- 将条目移动到回收站? -- -- -- Lock Database? -- 锁定数据库? -- -- -- You are editing an entry. Discard changes and lock anyway? -- 您正在编辑一个条目。确定要放弃更改并锁定吗? -- -- -- "%1" was modified. --Save changes? -- “%1”已被修改。 --保存更改吗? -- -- -- Database was modified. --Save changes? -- 数据库已被修改。 --保存更改吗? -- -- -- Save changes? -- 保存更改吗? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- 尝试自动重载时无法打开新的数据库文件。 --错误:%1 -- -- -- Disable safe saves? -- 禁用安全保存? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC 未能多次保存数据库。这可能是因为文件同步服务锁定了要保存的文件。 --禁用安全保存并重试? -- -- -- Passwords -- 密码 -- -- -- Save database as -- 另存为数据库 -- -- -- KeePass 2 Database -- KeePass 2 数据库 -- -- -- Replace references to entry? -- 替换对条目的引用? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- 条目“%1”含有 %2 的引用。您要用值覆盖引用、跳过此项还是直接删除引用? -- -- -- Delete group -- 删除群组 -- -- -- Move group to recycle bin? -- 要将群组移动到回收站吗? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- 您确实要将组“%1”移动到回收站吗? -- -- -- Successfully merged the database files. -- 已成功合并数据库文件。 -- -- -- Database was not modified by merge operation. -- 合并操作未修改数据库。 -- -- -- Shared group... -- 共享群组... -- -- -- Writing the database failed: %1 -- 写入数据库失败:%1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- 这个数据库通过只读模式打开,自动保存已关闭。 -- -- -- Save database backup -- 保存数据库备份 -- -- -- Could not find database file: %1 -- 找不到数据库文件:%1 -- -- -- -- EditEntryWidget -- -- Entry -- 条目 -- -- -- Advanced -- 高级 -- -- -- Icon -- 图标 -- -- -- Auto-Type -- 自动输入 -- -- -- Properties -- 属性 -- -- -- History -- 历史记录 -- -- -- SSH Agent -- SSH 代理 -- -- -- n/a -- -- -- -- (encrypted) -- (已加密) -- -- -- Select private key -- 选择私钥文件 -- -- -- Entry history -- 条目历史 -- -- -- Add entry -- 添加条目 -- -- -- Edit entry -- 编辑条目 -- -- -- New attribute -- 新属性 -- -- -- Are you sure you want to remove this attribute? -- 您确定要删除这个属性吗? -- -- -- Tomorrow -- 明天 -- -- -- %n week(s) -- %n 周 -- -- -- %n month(s) -- %n 月 -- -- -- Entry updated successfully. -- 条目已成功更新。 -- -- -- New attribute %1 -- 新属性 %1 -- -- -- %n year(s) -- %n 年 -- -- -- Confirm Removal -- 确认删除 -- -- -- Browser Integration -- 浏览器集成 -- -- -- <empty URL> -- <空 URL> -- -- -- Are you sure you want to remove this URL? -- 您确定要删除这个 URL? -- -- -- Reveal -- 显示 -- -- -- Hide -- 隐藏 -- -- -- Unsaved Changes -- 未保存的更改 -- -- -- Would you like to save changes to this entry? -- 您要保存对此条目的更改吗? -- -- -- [PROTECTED] Press Reveal to view or edit -- [已保护] 点击“显示”以查看或编辑 -- -- -- Invalid Entry -- 无效条目 -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- 一次外部合并操作损坏了此条目。 --很遗憾,所有修改都已丢失。 -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- 附加属性 -- -- -- Add -- 添加 -- -- -- Remove -- 删除 -- -- -- Edit Name -- 编辑名称 -- -- -- Protect -- 保护 -- -- -- Reveal -- 显示 -- -- -- Attachments -- 附件 -- -- -- Foreground Color: -- 前景色: -- -- -- Background Color: -- 背景色: -- -- -- Attribute selection -- 属性选择 -- -- -- Attribute value -- 属性值 -- -- -- Add a new attribute -- 添加新属性 -- -- -- Remove selected attribute -- 删除所选的属性 -- -- -- Edit attribute name -- 编辑属性名称 -- -- -- Toggle attribute protection -- 属性保护开关 -- -- -- Show a protected attribute -- 显示被保护的属性 -- -- -- Foreground color selection -- 前景色选择 -- -- -- Background color selection -- 背景色选择 -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>如果选中,该条目将不会显示在健康检查和 HIBP 等报告中,即使它不符合质量要求(例如密码熵或重复使用)。如果密码超出您的控制范围(例如密码必须为四位数的 PIN),您可以勾选此项,防止它使报告过于混乱。</p></body></html> -- -- -- Exclude from database reports -- 从数据库报告中排除 -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- 为此条目启用自动输入 -- -- -- Window Associations -- 窗口关联 -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- 窗口标题: -- -- -- Use a specific sequence for this association: -- 为此关联使用特定序列: -- -- -- Custom Auto-Type sequence -- 自定义自动输入序列 -- -- -- Open Auto-Type help webpage -- 打开自动输入的帮助页面 -- -- -- Existing window associations -- 已有的窗口关联 -- -- -- Add new window association -- 添加一个新的窗口关联 -- -- -- Remove selected window association -- 删除所选的窗口关联 -- -- -- You can use an asterisk (*) to match everything -- 您可以使用通配符星号(*)来匹配任何内容 -- -- -- Set the window association title -- 设定窗口关联标题 -- -- -- You can use an asterisk to match everything -- 您可以使用星号来匹配任何内容 -- -- -- Custom Auto-Type sequence for this window -- 自定义此窗口的自动输入序列 -- -- -- Inherit default Auto-Type sequence from the group -- 从父群组继承默认的自动输入序列 -- -- -- Use custom Auto-Type sequence: -- 使用自定义自动输入序列: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- 这些设置会影响启用浏览器扩展时此条目的行为。 -- -- -- General -- 常规 -- -- -- Skip Auto-Submit for this entry -- 跳过此条目的自动提交 -- -- -- Hide this entry from the browser extension -- 在浏览器扩展中隐藏此条目 -- -- -- Additional URL's -- 附加 URL -- -- -- Add -- 添加 -- -- -- Remove -- 移除 -- -- -- Edit -- 编辑 -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- 仅将此设置发送到浏览器的 HTTP 认证对话框。启用后,普通登录表单不会再显示此条目供选择。 -- -- -- Use this entry only with HTTP Basic Auth -- 此条目仅用于 HTTP Basic 认证 -- -- -- -- EditEntryWidgetHistory -- -- Show -- 显示 -- -- -- Restore -- 还原 -- -- -- Delete -- 删除 -- -- -- Delete all -- 全部删除 -- -- -- Entry history selection -- 选择条目历史记录 -- -- -- Show entry at selected history state -- 在选定的历史状态下显示条目 -- -- -- Restore entry to selected history state -- 还原到这条历史记录 -- -- -- Delete selected history state -- 删除这条历史记录 -- -- -- Delete all history -- 删除所有历史记录 -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- 密码: -- -- -- Title: -- 标题: -- -- -- Presets -- 预设 -- -- -- Toggle the checkbox to reveal the notes section. -- 勾选以显示备注部分。 -- -- -- Username: -- 用户名: -- -- -- Url field -- URL 字段 -- -- -- Download favicon for URL -- 从 URL 下载网站图标 -- -- -- Password field -- 密码字段 -- -- -- Toggle notes visible -- 显示或隐藏备注 -- -- -- Expiration field -- 过期时间字段 -- -- -- Expiration Presets -- 过期时间预设 -- -- -- Expiration presets -- 过期时间预设 -- -- -- Notes field -- 备注字段 -- -- -- Title field -- 标题字段 -- -- -- Username field -- 用户名字段 -- -- -- Toggle expiration -- 启用或禁用过期 -- -- -- Notes: -- 备注: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- 过期时间: -- -- -- Edit Entry -- 编辑条目 -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- 表单 -- -- -- Remove key from agent after -- 一段时间后从代理中删除密钥 -- -- -- seconds -- -- -- -- Fingerprint -- 指纹 -- -- -- Remove key from agent when database is closed/locked -- 数据库关闭或锁定时,从代理中删除密钥 -- -- -- Public key -- 公钥 -- -- -- Add key to agent when database is opened/unlocked -- 在打开或解锁数据库时,向代理添加密钥 -- -- -- Comment -- 注释 -- -- -- Decrypt -- 解密 -- -- -- n/a -- -- -- -- Copy to clipboard -- 复制到剪贴板 -- -- -- Private key -- 私钥 -- -- -- External file -- 外部文件 -- -- -- Browse... -- Button for opening file dialog -- 浏览... -- -- -- Attachment -- 附件 -- -- -- Add to agent -- 添加到代理 -- -- -- Remove from agent -- 从代理中删除 -- -- -- Require user confirmation when this key is used -- 使用此密钥时请求用户确认 -- -- -- Remove key from agent after specified seconds -- 从代理中删除密钥的等待秒数 -- -- -- Browser for key file -- 浏览密钥文件 -- -- -- External key file -- 外部密钥文件 -- -- -- Select attachment file -- 选择附件 -- -- -- -- EditGroupWidget -- -- Group -- 群组 -- -- -- Icon -- 图标 -- -- -- Properties -- 属性 -- -- -- Add group -- 添加群组 -- -- -- Edit group -- 编辑群组 -- -- -- Enable -- 启用 -- -- -- Disable -- 禁用 -- -- -- Inherit from parent group (%1) -- 继承自父群组(%1) -- -- -- Entry has unsaved changes -- 条目有未保存的更改 -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- 类型: -- -- -- Path: -- 路径: -- -- -- Password: -- 密码: -- -- -- Inactive -- 非活跃 -- -- -- KeeShare unsigned container -- KeeShare 未签名容器 -- -- -- KeeShare signed container -- KeeShare 签名容器 -- -- -- Select import source -- 选择导入来源 -- -- -- Select export target -- 选择导出目标 -- -- -- Select import/export file -- 选择导入/导出文件 -- -- -- Clear -- 清空 -- -- -- Import -- 导入 -- -- -- Export -- 导出 -- -- -- Synchronize -- 同步 -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- 您的 KeePassXC 版本不支持共享此容器类型。 --支持的扩展包括:%1。 -- -- -- %1 is already being exported by this database. -- %1 已经从此数据库中导出 -- -- -- %1 is already being imported by this database. -- %1 已经被此数据库导入 -- -- -- %1 is being imported and exported by different groups in this database. -- %1 已由此数据库中其他群组导入和导出。 -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare 未启用,您可以在应用设置中启用导入/导出。 -- -- -- Database export is currently disabled by application settings. -- 应用设置目前已禁用数据库导出。 -- -- -- Database import is currently disabled by application settings. -- 应用设置目前已禁用数据库导入。 -- -- -- Sharing mode field -- 共享模式字段 -- -- -- Path to share file field -- 共享文件路径字段 -- -- -- Password field -- 密码字段 -- -- -- Clear fields -- 清空字段 -- -- -- Browse for share file -- 浏览共享文件 -- -- -- Browse... -- 浏览... -- -- -- -- EditGroupWidgetMain -- -- Name field -- 名称字段 -- -- -- Notes field -- 备注字段 -- -- -- Toggle expiration -- 启用或禁用过期 -- -- -- Auto-Type toggle for this and sub groups -- 切换当前和所有子群组的自动输入 -- -- -- Expiration field -- 过期时间字段 -- -- -- Search toggle for this and sub groups -- 切换当前和所有子群组的搜索 -- -- -- Default auto-type sequence field -- 默认自动输入序列字段 -- -- -- Expires: -- 过期时间: -- -- -- Use default Auto-Type sequence of parent group -- 使用父群组的默认自动输入序列 -- -- -- Auto-Type: -- 自动输入: -- -- -- Search: -- 搜索: -- -- -- Notes: -- 备注: -- -- -- Name: -- 名称: -- -- -- Set default Auto-Type sequence -- 设置默认的自动输入序列 -- -- -- Edit Group -- 编辑群组 -- -- -- -- EditWidgetIcons -- -- Add custom icon -- 添加自定义图标 -- -- -- Delete custom icon -- 删除自定义图标 -- -- -- Download favicon -- 下载网站图标 -- -- -- Unable to fetch favicon. -- 无法获取网站图标。 -- -- -- Images -- 图片 -- -- -- All files -- 所有文件 -- -- -- Confirm Delete -- 确认删除 -- -- -- Select Image(s) -- 选择图片 -- -- -- Successfully loaded %1 of %n icon(s) -- 已成功加载 %1 / %n 个图标 -- -- -- No icons were loaded -- 未加载任何图标 -- -- -- %n icon(s) already exist in the database -- %n 个图标已存在于数据库中 -- -- -- The following icon(s) failed: -- 以下图标失败: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- 此图标由 %n 个条目使用,它们将被替换为默认图标。您确定要删除吗? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- 您可以在“工具 -> 设置 -> 安全”中选择 DuckDuckGo 作为网站图标来源 -- -- -- Download favicon for URL -- 从 URL 下载网站图标 -- -- -- Apply selected icon to subgroups and entries -- 将选择的图标应用于子群组和条目 -- -- -- Also apply to child groups -- 也应用于子群组 -- -- -- Also apply to child entries -- 也应用于子条目 -- -- -- Also apply to all children -- 也应用于所有子群组和条目 -- -- -- Existing icon selected. -- 选择的图标已经存在。 -- -- -- Use default icon -- 使用默认图标 -- -- -- Use custom icon -- 使用自定义图标 -- -- -- Apply icon to... -- 将图标应用于... -- -- -- Apply to this group only -- 仅应用于此群组 -- -- -- -- EditWidgetProperties -- -- Created: -- 创建时间: -- -- -- Modified: -- 修改时间: -- -- -- Accessed: -- 访问时间: -- -- -- Uuid: -- UUID: -- -- -- Plugin Data -- 插件数据 -- -- -- Remove -- 删除 -- -- -- Delete plugin data? -- 是否删除插件数据? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- 您真的想删除所选的插件数据吗? --这可能会导致受影响的插件出现问题。 -- -- -- Key -- -- -- -- Value -- -- -- -- Datetime created -- 创建日期和时间 -- -- -- Datetime modified -- 修改日期和时间 -- -- -- Datetime accessed -- 访问日期和时间 -- -- -- Unique ID -- 唯一 ID -- -- -- Plugin data -- 插件数据 -- -- -- Remove selected plugin data -- 删除所选的插件数据 -- -- -- -- Entry -- -- %1 - Clone -- %1 - 副本 -- -- -- -- EntryAttachmentsModel -- -- Name -- 名称 -- -- -- Size -- 大小 -- -- -- -- EntryAttachmentsWidget -- -- Form -- 表单 -- -- -- Add -- 添加 -- -- -- Remove -- 删除 -- -- -- Open -- 打开 -- -- -- Save -- 保存 -- -- -- Select files -- 选择文件 -- -- -- Are you sure you want to remove %n attachment(s)? -- 您确定要删除 %n 个附件吗? -- -- -- Save attachments -- 保存附件 -- -- -- Unable to create directory: --%1 -- 无法创建目录: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- 您确定要用附件覆盖现有文件“%1”吗? -- -- -- Confirm overwrite -- 确认覆盖 -- -- -- Unable to save attachments: --%1 -- 无法保存附件: --%1 -- -- -- Unable to open attachment: --%1 -- 无法打开附件: --%1 -- -- -- Unable to open attachments: --%1 -- 无法打开附件: --%1 -- -- -- Confirm remove -- 确认删除 -- -- -- Unable to open file(s): --%1 -- 无法打开文件: --%1 -- -- -- Attachments -- 附件 -- -- -- Add new attachment -- 添加新附件 -- -- -- Remove selected attachment -- 删除已选附件 -- -- -- Open selected attachment -- 打开已选附件 -- -- -- Save selected attachment to disk -- 将已选附件保存到磁盘 -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 是一个大文件(%2 MB)。 --您的数据库可能会变得非常大,并降低性能。 -- --您确定要添加此文件吗? -- -- -- Confirm Attachment -- 确认附件 -- -- -- -- EntryAttributesModel -- -- Name -- 名称 -- -- -- -- EntryHistoryModel -- -- Last modified -- 修改时间 -- -- -- Title -- 标题 -- -- -- Username -- 用户名 -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- 引用: -- -- -- Group -- 群组 -- -- -- Title -- 标题 -- -- -- Username -- 用户名 -- -- -- URL -- URL -- -- -- Never -- 从不 -- -- -- Password -- 密码 -- -- -- Notes -- 备注 -- -- -- Expires -- 过期时间 -- -- -- Created -- 创建时间 -- -- -- Modified -- 修改时间 -- -- -- Accessed -- 访问时间 -- -- -- Attachments -- 附件 -- -- -- Size -- 大小 -- -- -- Group name -- 群组名称 -- -- -- Entry title -- 条目标题 -- -- -- Entry notes -- 条目备注 -- -- -- Entry expires at -- 条目过期于 -- -- -- Creation date -- 创建日期 -- -- -- Last modification date -- 上次修改日期 -- -- -- Last access date -- 上次访问日期 -- -- -- Attached files -- 附加文件 -- -- -- Entry size -- 条目大小 -- -- -- Has attachments -- 有附件 -- -- -- Has TOTP one-time password -- 有 TOTP 一次性密码 -- -- -- -- EntryPreviewWidget -- -- Close -- 关闭 -- -- -- General -- 常规 -- -- -- Username -- 用户名 -- -- -- Password -- 密码 -- -- -- Expiration -- 过期时间 -- -- -- URL -- URL -- -- -- Attributes -- 属性 -- -- -- Attachments -- 附件 -- -- -- Notes -- 备注 -- -- -- Autotype -- 自动输入 -- -- -- Window -- 窗口 -- -- -- Sequence -- 序列 -- -- -- Searching -- 搜索 -- -- -- Search -- 搜索 -- -- -- Clear -- 清除 -- -- -- Never -- 从不 -- -- -- [PROTECTED] -- [已保护] -- -- -- Enabled -- 启用 -- -- -- Disabled -- 禁用 -- -- -- Share -- 共享 -- -- -- Display current TOTP value -- 显示当前 TOTP 密码 -- -- -- Advanced -- 高级 -- -- -- Default Sequence -- 默认序列 -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- 无效 URL -- -- -- -- EntryView -- -- Fit to window -- 适应窗口 -- -- -- Fit to contents -- 适应内容 -- -- -- Reset to defaults -- 重置为默认值 -- -- -- Has attachments -- Entry attachment icon toggle -- 有附件 -- -- -- Has TOTP -- Entry TOTP icon toggle -- 有 TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- 数据库“%2”的条目“%1”被 %3 使用 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- 无法在 %1 注册 DBus 服务。<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n 个条目被 %1 使用 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- 文件名 -- -- -- Group -- 群组 -- -- -- Manage -- 管理 -- -- -- Unlock to show -- 解锁以显示 -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- 应用 -- -- -- Manage -- 管理 -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo 保密服务:</b>%1 -- -- -- Unknown -- Unknown PID -- 未知 -- -- -- Unknown -- Unknown executable path -- 未知 -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID:%1,可执行文件:%2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- 另一个保密服务正在运行(%1)。<br/>在重新启用保密服务集成之前,请停止或删除它。 -- -- -- -- Group -- -- [empty] -- group has no children -- [空] -- -- -- -- HibpDownloader -- -- Online password validation failed -- 在线密码验证失败 -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- 下载网站图标 -- -- -- Cancel -- 取消 -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- 下载图标遇到问题? --您可以在应用设置的安全页面启用 DuckDuckGo 图标服务。 -- -- -- Close -- 关闭 -- -- -- URL -- URL -- -- -- Status -- 状态 -- -- -- Please wait, processing entry list... -- 请稍等,正在处理条目列表... -- -- -- Downloading... -- 正在下载... -- -- -- Ok -- 成功 -- -- -- Already Exists -- 已存在 -- -- -- Download Failed -- 下载失败 -- -- -- Downloading favicons (%1/%2)... -- 正在下载图标(%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- 关闭(&C) -- -- -- Close message -- 关闭消息 -- -- -- -- Kdbx3Reader -- -- missing database headers -- 缺少数据库标头 -- -- -- Header doesn't match hash -- 标头与哈希不匹配 -- -- -- Invalid header id size -- 无效的标头 ID 大小 -- -- -- Invalid header field length -- 无效的标头字段长度 -- -- -- Invalid header data length -- 无效的标头数据长度 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 输入的凭据无效,请重试。 --如果此现象重复发生,可能您的数据库文件已损坏。 -- -- -- Unable to calculate database key -- 无法计算数据库密钥 -- -- -- Unable to issue challenge-response: %1 -- 无法发出质询响应:%1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- 无法发出质询响应:%1 -- -- -- Unable to calculate database key -- 无法计算数据库密钥 -- -- -- -- Kdbx4Reader -- -- missing database headers -- 缺少数据库标头 -- -- -- Invalid header checksum size -- 无效的标头校验和大小 -- -- -- Header SHA256 mismatch -- 标头 SHA256 不匹配 -- -- -- Unknown cipher -- 未知加密方法 -- -- -- Invalid header id size -- 无效的标头 ID 大小 -- -- -- Invalid header field length -- 无效的标头字段长度 -- -- -- Invalid header data length -- 无效的标头数据长度 -- -- -- Failed to open buffer for KDF parameters in header -- 为标头中 KDF 参数开启缓冲区失败 -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- 密钥派生函数(KDF)不被支持或参数无效 -- -- -- Legacy header fields found in KDBX4 file. -- 在 KDBX4 文件中找到旧版标头字段。 -- -- -- Invalid inner header id size -- 无效的内部标头 ID 大小 -- -- -- Invalid inner header field length -- 无效的内部标头字段长度 -- -- -- Invalid inner header binary size -- 无效的内部标题二进制文件 -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- 不支持的 KeePass 变量映射版本。 -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射条目名称长度 -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- 无效的变量映射条目名称数据 -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射条目值长度 -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- 无效的变量映射条目值数据 -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射 Bool 条目值长度 -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射 Int32 条目值长度 -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射 UInt32 条目值长度 -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射 Int64 条目值长度 -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- 无效的变量映射 UInt64 条目值长度 -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- 无效的变量映射条目类型 -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- 无效的变量映射字段类型大小 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 输入的凭据无效,请重试。 --如果此现象重复发生,可能您的数据库文件已损坏。 -- -- -- (HMAC mismatch) -- (HMAC 不匹配) -- -- -- Unable to calculate database key: %1 -- 无法计算数据库密钥:%1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- 对称加密算法无效。 -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- 对称密码初始向量大小无效。 -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- 序列化 KDF 参数变量映射失败 -- -- -- Unable to calculate database key: %1 -- 无法计算数据库密钥:%1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- 不支持的加密 -- -- -- Invalid compression flags length -- 无效的压缩标志长度 -- -- -- Unsupported compression algorithm -- 不支持的压缩算法 -- -- -- Invalid master seed size -- 无效的主种子大小 -- -- -- Invalid transform seed size -- 无效的转换种子大小 -- -- -- Invalid transform rounds size -- 无效的转换次数 -- -- -- Invalid start bytes size -- 无效的起始字节大小 -- -- -- Invalid random stream id size -- 无效的随机流 ID 大小 -- -- -- Invalid inner random stream cipher -- 无效的内部随机流密码 -- -- -- Not a KeePass database. -- 不是一个 KeePass 数据库。 -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- 当前选择的文件是旧版本 KeePass 1 数据库(.kdb)。 --您可以点击“数据库 > 导入 KeePass 1 数据库...”来导入。 --这是不可逆的迁移,导入后的数据库将无法由旧版本的 KeePassX 0.4 打开。 -- -- -- Unsupported KeePass 2 database version. -- 不支持的 KeePass 2 数据库版本。 -- -- -- Invalid cipher uuid length: %1 (length=%2) -- 无效的密码 UUID 长度:%1(长度=%2) -- -- -- Unable to parse UUID: %1 -- 无法解析 UUID:%1 -- -- -- Failed to read database file. -- 读取数据库文件失败。 -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML 解析失败:%1 -- -- -- No root group -- 没有根群组 -- -- -- Missing icon uuid or data -- 缺少图标 UUID 或数据 -- -- -- Missing custom data key or value -- 缺少自定义数据键或值 -- -- -- Multiple group elements -- 多个群组元素 -- -- -- Null group uuid -- 空的群组 UUID -- -- -- Invalid group icon number -- 无效的群组图标编号 -- -- -- Invalid EnableAutoType value -- 无效的 EnableAutoType 值 -- -- -- Invalid EnableSearching value -- 无效的 EnableSearching 值 -- -- -- No group uuid found -- 未找到群组 UUID -- -- -- Null DeleteObject uuid -- 空的 DeleteObject UUID -- -- -- Missing DeletedObject uuid or time -- 缺少 DeletedObject UUID 或时间 -- -- -- Null entry uuid -- 空的条目 UUID -- -- -- Invalid entry icon number -- 无效的条目图标编号 -- -- -- History element in history entry -- 历史元素在历史条目中 -- -- -- No entry uuid found -- 未找到条目 UUID -- -- -- History element with different uuid -- 历史元素具有不同的 UUID -- -- -- Duplicate custom attribute found -- 自定义属性重复 -- -- -- Entry string key or value missing -- 缺少条目字符串键或值 -- -- -- Entry binary key or value missing -- 缺少条目二进制键或值 -- -- -- Auto-type association window or sequence missing -- 缺少自动输入关联窗口或序列 -- -- -- Invalid bool value -- 无效的布尔值 -- -- -- Invalid date time value -- 无效的日期时间值 -- -- -- Invalid color value -- 无效的颜色值 -- -- -- Invalid color rgb part -- 无效的颜色 RGB -- -- -- Invalid number value -- 无效的数字值 -- -- -- Invalid uuid value -- 无效的 UUID 值 -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- 无法解压二进制数据 -- -- -- XML error: --%1 --Line %2, column %3 -- XML 错误: --%1 --第 %2 行,第 %3 列 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- 无效的 KeeAgent 设置文件结构。 -- -- -- Private key is an attachment but no attachments provided. -- 私钥应是附件,但未找到。 -- -- -- Private key is empty -- 私钥为空 -- -- -- File too large to be a private key -- 文件太大,无法作为私钥 -- -- -- Failed to open private key -- 打开私钥失败 -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- 无法打开数据库。 -- -- -- Import KeePass1 Database -- 导入 KeePass 1 数据库 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- 无法读取密钥文件。 -- -- -- Not a KeePass database. -- 不是一个 KeePass 数据库 -- -- -- Unsupported encryption algorithm. -- 不支持的加密算法。 -- -- -- Unsupported KeePass database version. -- 不支持的 KeePass 数据库版本。 -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- 无法读取加密初始向量 -- -- -- Invalid number of groups -- 无效的群组数量 -- -- -- Invalid number of entries -- 无效的条目数量 -- -- -- Invalid content hash size -- 无效的内容哈希大小 -- -- -- Invalid transform seed size -- 无效的转换种子大小 -- -- -- Invalid number of transform rounds -- 无效的转换次数 -- -- -- Unable to construct group tree -- 无法创建群组树 -- -- -- Root -- 根群组 -- -- -- Key transformation failed -- 密钥转换失败 -- -- -- Invalid group field type number -- 无效的群组字段类型编号 -- -- -- Invalid group field size -- 无效群组字段大小 -- -- -- Read group field data doesn't match size -- 读取群组字段数据与大小不匹配 -- -- -- Incorrect group id field size -- 群组 ID 字段大小不正确 -- -- -- Incorrect group creation time field size -- 群组创建时间字段大小不正确 -- -- -- Incorrect group modification time field size -- 群组修改时间字段大小不正确 -- -- -- Incorrect group access time field size -- 群组访问时间字段大小不正确 -- -- -- Incorrect group expiry time field size -- 群组过期时间字段大小不正确 -- -- -- Incorrect group icon field size -- 群组图标字段大小不正确 -- -- -- Incorrect group level field size -- 群组级别字段大小不正确 -- -- -- Invalid group field type -- 无效的群组字段类型 -- -- -- Missing group id or level -- 缺少群组 ID 或级别 -- -- -- Missing entry field type number -- 缺少条目字段类型编号 -- -- -- Invalid entry field size -- 无效的条目字段大小 -- -- -- Read entry field data doesn't match size -- 读取条目字段数据与大小不匹配 -- -- -- Invalid entry uuid field size -- 无效的条目 UUID 字段大小 -- -- -- Invalid entry group id field size -- 无效的条目群组 ID 字段大小 -- -- -- Invalid entry icon field size -- 无效的条目图标字段大小 -- -- -- Invalid entry creation time field size -- 无效的条目创建时间字段大小 -- -- -- Invalid entry modification time field size -- 无效的条目修改时间字段大小 -- -- -- Invalid entry expiry time field size -- 无效的条目过期时间字段大小 -- -- -- Invalid entry field type -- 无效的条目字段类型 -- -- -- unable to seek to content position -- 无法寻址内容位置 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 输入的凭据无效,请重试。 --如果此现象重复发生,可能您的数据库文件已损坏。 -- -- -- Unable to calculate database key -- 无法计算数据库密钥 -- -- -- -- KeeShare -- -- Invalid sharing reference -- 无效的共享引用 -- -- -- Inactive share %1 -- 非活跃的共享 %1 -- -- -- Imported from %1 -- 已导入自 %1 -- -- -- Exported to %1 -- 已导出至 %1 -- -- -- Synchronized with %1 -- 已与 %1 同步 -- -- -- Import is disabled in settings -- 导入已在设置中禁用 -- -- -- Export is disabled in settings -- 导出已在设置中禁用 -- -- -- Inactive share -- 非活跃的共享 -- -- -- Imported from -- 已导入 -- -- -- Exported to -- 已导出 -- -- -- Synchronized with -- 已同步 -- -- -- -- KeyComponentWidget -- -- Key Component -- 密钥组件 -- -- -- Key Component Description -- 密钥组件描述 -- -- -- Cancel -- 取消 -- -- -- Key Component set, click to change or remove -- 密钥组件已设置,点击以更改或删除 -- -- -- Add %1 -- Add a key component -- 添加 %1 -- -- -- Change %1 -- Change a key component -- 更改 %1 -- -- -- Remove %1 -- Remove a key component -- 删除 %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 已设置,点击以更改或删除 -- -- -- -- KeyFileEditWidget -- -- Generate -- 生成 -- -- -- Key File -- 密钥文件 -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>您可以添加包含随机字节的密钥文件以获得额外的安全性。</p><p>您必须将其保密,请勿丢失,否则您将无法再打开数据库!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- 加载密钥文件“%1”时出错 --消息:%2 -- -- -- Key files -- 密钥文件 -- -- -- All files -- 所有文件 -- -- -- Create Key File... -- 创建密钥文件... -- -- -- Error creating key file -- 创建密钥文件时出错 -- -- -- Unable to create key file: %1 -- 无法创建密钥文件:%1 -- -- -- Select a key file -- 选择密钥文件 -- -- -- Key file selection -- 选择密钥文件 -- -- -- Browse for key file -- 浏览密钥文件 -- -- -- Browse... -- 浏览... -- -- -- Generate a new key file -- 生成一个新的密钥文件 -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- 注意:不要使用会被更改的文件,文件被更改后将无法解锁数据库! -- -- -- Invalid Key File -- 无效的密钥文件 -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- 您不能用当前数据库作为它本身的密钥文件。请选择不同的文件或生成一个新的密钥文件。 -- -- -- Suspicious Key File -- 有问题的密钥文件 -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- 您选择的密钥文件似乎是个密码数据库文件。密钥文件必须是永远不会被更改的文件,否则您会永久失去对数据库的访问。 --您确定要用这个文件继续吗? -- -- -- Old key file format -- 旧版密钥文件格式 -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- 您选择的文件为旧版密钥格式,KeePassXC 可能会在将来停止对它的支持。<br><br>请考虑重新生成一个新密钥文件。 -- -- -- -- MainWindow -- -- &Database -- 数据库(&D) -- -- -- &Help -- 帮助(&H) -- -- -- &Groups -- 群组(&G) -- -- -- &Tools -- 工具(&T) -- -- -- &Quit -- 退出(&Q) -- -- -- &About -- 关于(&A) -- -- -- Database settings -- 数据库设置 -- -- -- Copy username to clipboard -- 复制用户名到剪贴板 -- -- -- Copy password to clipboard -- 复制密码到剪贴板 -- -- -- &Settings -- 设置(&S) -- -- -- &Title -- 标题(&T) -- -- -- Copy title to clipboard -- 复制标题到剪贴板 -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- 复制 URL 到剪贴板 -- -- -- &Notes -- 备注(&N) -- -- -- Copy notes to clipboard -- 复制备注到剪贴板 -- -- -- Copy &TOTP -- 复制 &TOTP -- -- -- E&mpty recycle bin -- 清空回收站(&M) -- -- -- Clear history -- 清空历史 -- -- -- Access error for config file %1 -- 访问配置文件出错 %1 -- -- -- Settings -- 设置 -- -- -- Toggle window -- 切换窗口 -- -- -- Quit KeePassXC -- 退出 KeePassXC -- -- -- Please touch the button on your YubiKey! -- 请触摸您 YubiKey 上的按钮! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- 警告:您正在使用的是非稳定版的 KeePassXC! --文件损坏的风险较高,请妥善备份您的数据库。 --此版本不适用于生产用途。 -- -- -- &Donate -- 捐助(&D) -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- 警告:您的 Qt 版本可能会导致在使用屏幕键盘时 KeePassXC 崩溃! --我们建议您使用我们的下载页面上提供的 AppImage。 -- -- -- &Import -- 导入(&I) -- -- -- Create a new database -- 创建一个新数据库 -- -- -- Merge from another KDBX database -- 从另一个 KDBX 数据库合并 -- -- -- Add a new entry -- 添加新条目 -- -- -- View or edit entry -- 查看或编辑条目 -- -- -- Add a new group -- 添加一个新群组 -- -- -- Perform &Auto-Type -- 执行自动输入(&A) -- -- -- Open &URL -- 打开 &URL -- -- -- Import a KeePass 1 database -- 导入 KeePass 1 数据库 -- -- -- Import a CSV file -- 导入 CSV 文件 -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- 注意:您使用的是 KeePassXC 的预发布版本! --可能会有一些错误和小问题,此版本不适合在生产环境中使用。 -- -- -- Check for updates on startup? -- 是否在启动时检查更新? -- -- -- Would you like KeePassXC to check for updates on startup? -- 您是否希望 KeePassXC 在启动时检查更新? -- -- -- You can always check for updates manually from the application menu. -- 您始终可以在应用程序菜单中手动检查更新。 -- -- -- &Export -- 导出(&E) -- -- -- Sort &A-Z -- 顺序排列(&A) -- -- -- Sort &Z-A -- 逆序排列(&Z) -- -- -- &Password Generator -- 密码生成器(&P) -- -- -- Import a 1Password Vault -- 导入 1Password 保险库 -- -- -- &Getting Started -- 入门指南(&G) -- -- -- &User Guide -- 用户手册(&U) -- -- -- &Keyboard Shortcuts -- 键盘快捷键(&K) -- -- -- &Recent Databases -- 最近的数据库(&R) -- -- -- &Entries -- 条目(&E) -- -- -- Copy Att&ribute -- 复制属性(&R) -- -- -- TOTP -- TOTP -- -- -- View -- 显示 -- -- -- Theme -- 主题 -- -- -- &Check for Updates -- 检查更新(&C) -- -- -- &Open Database… -- 打开数据库(&O)... -- -- -- &Save Database -- 保存数据库(&S) -- -- -- &Close Database -- 关闭数据库(&C) -- -- -- &New Database… -- 新建数据库(&N)... -- -- -- &Merge From Database… -- 从数据库合并(&M)... -- -- -- &New Entry… -- 新建条目(&N)... -- -- -- &Edit Entry… -- 编辑条目(&E)... -- -- -- &Delete Entry… -- 删除条目(&D)... -- -- -- &New Group… -- 新建群组(&N)... -- -- -- &Edit Group… -- 编辑群组(&E)... -- -- -- &Delete Group… -- 删除群组(&D)… -- -- -- Download All &Favicons… -- 下载所有网站图标(&F)... -- -- -- Sa&ve Database As… -- 另存为数据库(&V)... -- -- -- Database &Security… -- 数据库安全(&S)... -- -- -- Database &Reports... -- 数据库报告(&R)... -- -- -- Statistics, health check, etc. -- 统计、健康检查等 -- -- -- &Database Settings… -- 数据库设置(&D)... -- -- -- &Clone Entry… -- 复制条目(&C)... -- -- -- Move u&p -- 上移(&P) -- -- -- Move entry one step up -- 向上移动条目 -- -- -- Move do&wn -- 下移(&W) -- -- -- Move entry one step down -- 向下移动条目 -- -- -- Copy &Username -- 复制用户名(&U) -- -- -- Copy &Password -- 复制密码(&P) -- -- -- Download &Favicon -- 下载网站图标(&F) -- -- -- &Lock Databases -- 锁定数据库(&L) -- -- -- &CSV File… -- &CSV 文件... -- -- -- &HTML File… -- &HTML 文件... -- -- -- KeePass 1 Database… -- KeePass 1 数据库... -- -- -- 1Password Vault… -- 1Password 保险库... -- -- -- CSV File… -- CSV 文件... -- -- -- Show TOTP -- 显示 TOTP 密码 -- -- -- Show QR Code -- 显示二维码 -- -- -- Set up TOTP… -- 设置 TOTP... -- -- -- Report a &Bug -- 报告错误(&B) -- -- -- Open Getting Started Guide -- 打开入门指南 -- -- -- &Online Help -- 在线帮助(&O) -- -- -- Go to online documentation -- 前往在线文档 -- -- -- Open User Guide -- 打开用户指南 -- -- -- Save Database Backup... -- 保存数据库备份... -- -- -- Add key to SSH Agent -- 向 SSH 代理添加密钥 -- -- -- Remove key from SSH Agent -- 从 SSH 代理中删除密钥 -- -- -- Compact Mode -- 紧凑模式 -- -- -- Automatic -- 自动 -- -- -- Light -- 亮色 -- -- -- Dark -- 暗色 -- -- -- Classic (Platform-native) -- 经典(平台原生) -- -- -- Show Toolbar -- 显示工具栏 -- -- -- Show Preview Panel -- 显示预览面板 -- -- -- Don't show again for this version -- 不在此版本中显示 -- -- -- Restart Application? -- 是否重新启动应用? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- 您必须重新启动应用才能应用此设置。要现在重新启动吗? -- -- -- Perform Auto-Type Sequence -- 执行自动输入序列 -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- 总在最前 -- -- -- Hide Usernames -- 隐藏用户名 -- -- -- Hide Passwords -- 隐藏密码 -- -- -- -- ManageDatabase -- -- Database settings -- 数据库设置 -- -- -- Edit database settings -- 修改数据库设置 -- -- -- Unlock database -- 解锁数据库 -- -- -- Unlock database to show more information -- 解锁数据库以显示更多信息 -- -- -- Lock database -- 锁定数据库 -- -- -- -- ManageSession -- -- Disconnect -- 断开连接 -- -- -- Disconnect this application -- 断开此应用的连接 -- -- -- -- Merger -- -- Creating missing %1 [%2] -- 创建缺少的 %1 [%2] -- -- -- Relocating %1 [%2] -- 重新定位 %1 [%2] -- -- -- Overwriting %1 [%2] -- 覆盖 %1 [%2] -- -- -- older entry merged from database "%1" -- 从数据库“%1”合并的旧条目 -- -- -- Adding backup for older target %1 [%2] -- 为旧目标 %1 [%2] 添加备份 -- -- -- Adding backup for older source %1 [%2] -- 为旧来源 %1 [%2] 添加备份 -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- 在新来源 %1 [%2] 上重新应用旧目标的条目 -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- 在新目标 %1 [%2] 上重新应用旧来源的条目 -- -- -- Synchronizing from newer source %1 [%2] -- 从新来源 %1 [%2] 同步 -- -- -- Synchronizing from older source %1 [%2] -- 从旧来源 %1 [%2] 同步 -- -- -- Deleting child %1 [%2] -- 删除子项 %1 [%2] -- -- -- Deleting orphan %1 [%2] -- 删除孤立项 %1 [%2] -- -- -- Changed deleted objects -- 更改已删除的对象 -- -- -- Adding missing icon %1 -- 添加缺少的图标 %1 -- -- -- Removed custom data %1 [%2] -- 删除自定义数据 %1 [%2] -- -- -- Adding custom data %1 [%2] -- 添加自定义数据 %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- 创建一个新的 KeePassXC 数据库... -- -- -- Root -- Root group -- 根群组 -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- 向导页 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 您可以在此处调整数据库加密设置。不用担心,您随时可以在数据库设置中更改它们。 -- -- -- Advanced Settings -- 高级设置 -- -- -- Simple Settings -- 简单设置 -- -- -- Encryption Settings -- 加密设置 -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- 数据库凭据 -- -- -- A set of credentials known only to you that protects your database. -- 一组只有您知道的凭据,用于保护您的数据库。 -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- 加密设置 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 您可以在此处调整数据库加密设置。 不用担心,您随时可以在数据库设置中更改它们。 -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- 数据库基本信息 -- -- -- Please fill in the display name and an optional description for your new database: -- 请填写新数据库的名称和可选的说明: -- -- -- -- NixUtils -- -- Password Manager -- 密码管理器 -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- 无效的 OpData01,不包含数据标头 -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- 无法读取全部初始向量字节,预期 16 字节但仅读取到 %1 字节 -- -- -- Unable to init cipher for opdata01: %1 -- 无法为 OpData01 初始化加密:%1 -- -- -- Unable to read all HMAC signature bytes -- 无法读取所有 HMAC 签名字节 -- -- -- Malformed OpData01 due to a failed HMAC -- 由于 HMAC 失败,OpData01 读取异常 -- -- -- Unable to process clearText in place -- 无法就地处理明文 -- -- -- Expected %1 bytes of clear-text, found %2 -- 预期长度 %1 字节的明文数据,仅得到 %2 字节 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- 读取数据库未生成实例 --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- 目录 .opvault 必须存在 -- -- -- Directory .opvault must be readable -- 目录 .opvault 必须可读 -- -- -- Directory .opvault/default must exist -- 目录 .opvault/default 必须存在 -- -- -- Directory .opvault/default must be readable -- 目录 .opvault/default 必须存可读 -- -- -- Unable to decode masterKey: %1 -- 无法解码主密钥:%1 -- -- -- Unable to derive master key: %1 -- 无法派生主密钥:%1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- 无效的密钥文件,需要 OpenSSH 密钥 -- -- -- PEM boundary mismatch -- PEM 边界不匹配 -- -- -- Base64 decoding failed -- Base64 解码失败 -- -- -- Key file way too small. -- 密钥文件太小。 -- -- -- Key file magic header id invalid -- 密钥文件魔术标头 ID 无效 -- -- -- Found zero keys -- 未找到密钥 -- -- -- Failed to read public key. -- 读取公钥失败。 -- -- -- Corrupted key file, reading private key failed -- 损坏的密钥文件,读取私钥失败 -- -- -- No private key payload to decrypt -- 没有私钥 Payload 可解密 -- -- -- Trying to run KDF without cipher -- 尝试运行无加密的 KDF -- -- -- Passphrase is required to decrypt this key -- 需要口令解密此密钥 -- -- -- Key derivation failed, key file corrupted? -- 密钥派生失败,可能密钥文件已损坏? -- -- -- Decryption failed, wrong passphrase? -- 解密失败,可能口令错误? -- -- -- Unexpected EOF while reading public key -- 读取公钥时遇到意外的 EOF -- -- -- Unexpected EOF while reading private key -- 读取私钥时遇到意外的 EOF -- -- -- Can't write public key as it is empty -- 无法写入一个空的公钥 -- -- -- Unexpected EOF when writing public key -- 写入公钥时遇到意外的 EOF -- -- -- Can't write private key as it is empty -- 无法写入一个空的私钥 -- -- -- Unexpected EOF when writing private key -- 写入私钥时遇到意外的 EOF -- -- -- Unsupported key type: %1 -- 不支持的密钥类型:%1 -- -- -- Unknown cipher: %1 -- 未知加密:%1 -- -- -- Cipher IV is too short for MD5 kdf -- 密码初始向量对于 MD5 KDF 过短 -- -- -- Unknown KDF: %1 -- 未知 KDF:%1 -- -- -- Unknown key type: %1 -- 未知密钥类型:%1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- 密码不匹配 -- -- -- Passwords match so far -- 密码目前匹配 -- -- -- Toggle Password (%1) -- 切换密码显示(%1) -- -- -- Generate Password (%1) -- 生成密码(%1) -- -- -- Warning: Caps Lock enabled! -- 警告:已启用大写锁定! -- -- -- -- PasswordEditWidget -- -- Enter password: -- 输入密码: -- -- -- Confirm password: -- 确认密码: -- -- -- Password -- 密码 -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>密码是保护数据库的主要方法。</p><p>良好的密码足够长且唯一。KeePassXC 可以为您生成一个密码。</p> -- -- -- Passwords do not match. -- 密码不匹配。 -- -- -- Password field -- 密码字段 -- -- -- Repeat password field -- 重复密码字段 -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- 强度 -- -- -- entropy -- -- -- -- Password -- 密码 -- -- -- Character Types -- 字符类型 -- -- -- Numbers -- 数字 -- -- -- Extended ASCII -- 扩展 ASCII -- -- -- Exclude look-alike characters -- 排除相似的字符 -- -- -- Pick characters from every group -- 包含每一种字符 -- -- -- &Length: -- 长度(&L): -- -- -- Passphrase -- 口令 -- -- -- Wordlist: -- 词表: -- -- -- Word Separator: -- 单词分隔符: -- -- -- Close -- 关闭 -- -- -- Entropy: %1 bit -- 熵:%1 比特 -- -- -- Password Quality: %1 -- 密码强度:%1 -- -- -- Poor -- Password quality -- 差劲 -- -- -- Weak -- Password quality -- 较弱 -- -- -- Good -- Password quality -- 良好 -- -- -- Excellent -- Password quality -- 优秀 -- -- -- Switch to advanced mode -- 切换到高级模式 -- -- -- Advanced -- 高级 -- -- -- Braces -- 括号 -- -- -- Punctuation -- 标点 -- -- -- Quotes -- 引号 -- -- -- Logograms -- 标志符号 -- -- -- Character set to exclude from generated password -- 从生成的密码中排除此字符集 -- -- -- Do not include: -- 不包含: -- -- -- Add non-hex letters to "do not include" list -- 将非十六进制字母添加到“不包含”列表中 -- -- -- Hex -- 十六进制 -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- 排除字符:“0”、“1”、“l”、“I”、“O”、“|”、“﹒” -- -- -- Generated password -- 生成的密码 -- -- -- Upper-case letters -- 大写字母 -- -- -- Lower-case letters -- 小写字母 -- -- -- Special characters -- 特殊字符 -- -- -- Math Symbols -- 数学符号 -- -- -- Dashes and Slashes -- 短线和斜线 -- -- -- Excluded characters -- 排除的字符 -- -- -- Hex Passwords -- 十六进制密码 -- -- -- Password length -- 密码长度 -- -- -- Word Case: -- 单词大小写: -- -- -- Regenerate password -- 重新生成密码 -- -- -- Copy password -- 复制密码 -- -- -- lower case -- 全小写 -- -- -- UPPER CASE -- 全大写 -- -- -- Title Case -- 首字母大写 -- -- -- Generate Password -- 生成密码 -- -- -- Also choose from: -- 也在此选择: -- -- -- Additional characters to use for the generated password -- 用于生成的密码的其他字符 -- -- -- Additional characters -- 其他字符 -- -- -- Word Count: -- 词数: -- -- -- Esc -- Esc -- -- -- Apply Password -- 应用密码 -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- 重新生成密码(%1) -- -- -- Special Characters -- 特殊字符 -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- 统计 -- -- -- Very weak password -- 差劲密码 -- -- -- Password entropy is %1 bits -- 密码熵为 %1 位 -- -- -- Weak password -- 较弱密码 -- -- -- Used in %1/%2 -- 在 %1/%2 中使用 -- -- -- Password is used %1 times -- 密码使用 %1 次 -- -- -- Password has expired -- 密码已过期 -- -- -- Password expiry was %1 -- 密码过期于 %1 -- -- -- Password is about to expire -- 密码即将过期 -- -- -- Password expires in %1 days -- 密码将在 %1 天后过期 -- -- -- Password will expire soon -- 密码即将过期 -- -- -- Password expires on %1 -- 密码将在 %1 过期 -- -- -- Health Check -- 健康检查 -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- 覆盖 -- -- -- Delete -- 删除 -- -- -- Move -- 移动 -- -- -- Empty -- 清空 -- -- -- Remove -- 删除 -- -- -- Skip -- 跳过 -- -- -- Disable -- 禁用 -- -- -- Merge -- 合并 -- -- -- Continue -- 继续 -- -- -- -- QObject -- -- Database not opened -- 数据库未打开 -- -- -- Database hash not available -- 数据库哈希值不可用 -- -- -- Client public key not received -- 未收到客户端公钥 -- -- -- Cannot decrypt message -- 无法解密消息 -- -- -- Action cancelled or denied -- 操作被取消或被拒绝 -- -- -- KeePassXC association failed, try again -- KeePassXC 关联失败,请重试 -- -- -- Encryption key is not recognized -- 无法识别加密密钥 -- -- -- Incorrect action -- 操作错误 -- -- -- Empty message received -- 收到空消息 -- -- -- No URL provided -- 没有提供 URL -- -- -- No logins found -- 未找到登录信息 -- -- -- Unknown error -- 未知错误 -- -- -- Add a new entry to a database. -- 向数据库添加新条目。 -- -- -- Path of the database. -- 数据库路径。 -- -- -- Key file of the database. -- 数据库的密钥文件。 -- -- -- path -- 路径 -- -- -- Username for the entry. -- 条目的用户名。 -- -- -- username -- 用户名 -- -- -- URL for the entry. -- 条目的 URL。 -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- 输入条目密码的提示符。 -- -- -- Generate a password for the entry. -- 为此条目生成一个密码。 -- -- -- length -- 长度 -- -- -- Path of the entry to add. -- 要添加条目的路径。 -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- 要复制条目的路径。 -- -- -- Timeout in seconds before clearing the clipboard. -- 清空剪贴板超时(以秒为单位)。 -- -- -- Edit an entry. -- 编辑一个条目。 -- -- -- Title for the entry. -- 条目的标题。 -- -- -- title -- 标题 -- -- -- Path of the entry to edit. -- 要编辑条目的路径。 -- -- -- Estimate the entropy of a password. -- 估计密码的熵。 -- -- -- Password for which to estimate the entropy. -- 用于估计熵的密码。 -- -- -- Perform advanced analysis on the password. -- 对密码执行高级分析。 -- -- -- -- --Available commands: -- -- -- --可用命令: -- -- -- -- Name of the command to execute. -- 要执行的命令名称。 -- -- -- List database entries. -- 列出数据库条目。 -- -- -- Path of the group to list. Default is / -- 要列出的群组路径,默认为 / -- -- -- Find entries quickly. -- 快速查找条目。 -- -- -- Search term. -- 搜索词。 -- -- -- Merge two databases. -- 合并两个数据库。 -- -- -- Path of the database to merge from. -- 作为合并来源的数据库路径。 -- -- -- Use the same credentials for both database files. -- 对两个数据库文件使用相同的凭据。 -- -- -- Key file of the database to merge from. -- 作为合并来源数据库的密钥文件。 -- -- -- Show an entry's information. -- 显示条目的信息。 -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- 要显示的属性名称。可以多次指定此选项,每个属性按给定顺序显示,每行一个。 如果未指定任何属性,则会给出默认属性的摘要。 -- -- -- attribute -- 属性 -- -- -- Name of the entry to show. -- 要显示的条目名称。 -- -- -- NULL device -- 空设备 -- -- -- error reading from device -- 从设备读取出错 -- -- -- malformed string -- 格式异常字符串 -- -- -- missing closing quote -- 缺少闭合引号 -- -- -- Group -- 群组 -- -- -- Title -- 标题 -- -- -- Username -- 用户名 -- -- -- Password -- 密码 -- -- -- Notes -- 备注 -- -- -- Last Modified -- 修改时间 -- -- -- Created -- 创建时间 -- -- -- Browser Integration -- 浏览器集成 -- -- -- SSH Agent -- SSH 代理 -- -- -- Generate a new random diceware passphrase. -- 新生成一个随机的 Diceware 口令。 -- -- -- Word count for the diceware passphrase. -- Diceware 口令的词数。 -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Diceware 生成器的词表。 --[默认:EFF 英文] -- -- -- Generate a new random password. -- 新生成一个随机密码。 -- -- -- Could not create entry with path %1. -- 无法创建路径为 %1 的条目。 -- -- -- Enter password for new entry: -- 输入新条目的密码: -- -- -- Writing the database failed %1. -- 写入数据库失败 %1 。 -- -- -- Successfully added entry %1. -- 已成功添加条目 %1 。 -- -- -- Invalid timeout value %1. -- 超时值 %1 无效。 -- -- -- Entry %1 not found. -- 未找到条目 %1。 -- -- -- Entry with path %1 has no TOTP set up. -- 路径 %1 的条目没有设置 TOTP。 -- -- -- Clearing the clipboard in %1 second(s)... -- 在 %1 秒后清空剪贴板... -- -- -- Clipboard cleared! -- 剪贴板已清除! -- -- -- Silence password prompt and other secondary outputs. -- 隐藏密码提示符和其他辅助输出。 -- -- -- count -- CLI parameter -- 总数 -- -- -- Could not find entry with path %1. -- 找不到路径为 %1 的条目。 -- -- -- Not changing any field for entry %1. -- 未更改条目 %1 的任何字段。 -- -- -- Enter new password for entry: -- 输入条目新密码: -- -- -- Writing the database failed: %1 -- 写入数据库失败:%1 -- -- -- Successfully edited entry %1. -- 已成功编辑条目 %1。 -- -- -- Length %1 -- 长度 %1 -- -- -- Entropy %1 -- 熵 %1 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- 多字额外位 %1 -- -- -- Type: Bruteforce -- 类型:暴力破解 -- -- -- Type: Dictionary -- 类型:字典 -- -- -- Type: Dict+Leet -- 类型:字典 + 名单 -- -- -- Type: User Words -- 类型:用户词 -- -- -- Type: User+Leet -- 类型:用户 + 名单 -- -- -- Type: Repeated -- 类型:重复 -- -- -- Type: Sequence -- 类型:序列 -- -- -- Type: Spatial -- 类型:空间 -- -- -- Type: Date -- 类型:日期 -- -- -- Type: Bruteforce(Rep) -- 类型:暴力破解(重复) -- -- -- Type: Dictionary(Rep) -- 类型:字典(重复) -- -- -- Type: Dict+Leet(Rep) -- 类型:字典 + 名单(重复) -- -- -- Type: User Words(Rep) -- 类型:用户词(重复) -- -- -- Type: User+Leet(Rep) -- 类型:用户 + 名单(重复) -- -- -- Type: Repeated(Rep) -- 类型:重复(重复) -- -- -- Type: Sequence(Rep) -- 类型:序列(重复) -- -- -- Type: Spatial(Rep) -- 类型:空间(重复) -- -- -- Type: Date(Rep) -- 类型:日期(重复) -- -- -- Type: Unknown%1 -- 类型:未知 %1 -- -- -- Entropy %1 (%2) -- 熵 %1(%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** 密码长度 (%1) != 部分长度之和 (%2) *** -- -- -- Failed to load key file %1: %2 -- 无法加载密钥文件 %1: %2 -- -- -- Length of the generated password -- 生成密码的长度 -- -- -- Use lowercase characters -- 使用小写字符 -- -- -- Use uppercase characters -- 使用大写字符 -- -- -- Use special characters -- 使用特殊字符 -- -- -- Use extended ASCII -- 使用扩展 ASCII -- -- -- Exclude character set -- 排除字符集 -- -- -- chars -- 字符 -- -- -- Exclude similar looking characters -- 排除相似的字符 -- -- -- Include characters from every selected group -- 包含每个选定组中的字符 -- -- -- Recursively list the elements of the group. -- 递归列出群组的元素。 -- -- -- Cannot find group %1. -- 找不到群组 %1。 -- -- -- Error reading merge file: --%1 -- 读取合并文件时出错: --%1 -- -- -- Unable to save database to file : %1 -- 无法将数据库保存到文件:%1 -- -- -- Unable to save database to file: %1 -- 无法将数据库保存到文件:%1 -- -- -- Successfully recycled entry %1. -- 已成功移动条目 %1 到回收站。 -- -- -- Successfully deleted entry %1. -- 已成功删除条目 %1。 -- -- -- Show the entry's current TOTP. -- 显示条目当前的 TOTP。 -- -- -- ERROR: unknown attribute %1. -- 错误:未知属性 %1。 -- -- -- No program defined for clipboard manipulation -- 没有为剪贴板操作定义程序 -- -- -- file empty -- 文件为空 -- -- -- %1: (row, col) %2,%3 -- %1:(行,列)%2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF(KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF(KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- 无效的设置 -- -- -- Invalid Key -- TOTP -- 无效的密钥 -- -- -- Message encryption failed. -- 消息加密失败。 -- -- -- No groups found -- 未找到群组 -- -- -- Create a new database. -- 创建新数据库。 -- -- -- File %1 already exists. -- 文件 %1 已存在。 -- -- -- Loading the key file failed -- 加载密钥文件失败 -- -- -- No key is set. Aborting database creation. -- 没有设置密钥。正在中止数据库创建。 -- -- -- Failed to save the database: %1. -- 保存数据库失败:%1。 -- -- -- Successfully created new database. -- 已成功创建新数据库。 -- -- -- Creating KeyFile %1 failed: %2 -- 创建密钥文件 %1 失败:%2 -- -- -- Loading KeyFile %1 failed: %2 -- 加载密钥文件 %1 失败:%2 -- -- -- Path of the entry to remove. -- 要删除条目的路径。 -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- 已有的单实例锁文件无效。正在启动新实例。 -- -- -- The lock file could not be created. Single-instance mode disabled. -- 无法创建锁文件。单实例模式已禁用。 -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - 跨平台密码管理器 -- -- -- filenames of the password databases to open (*.kdbx) -- 要打开的密码数据库文件名(*.kdbx) -- -- -- path to a custom config file -- 自定义配置文件的路径 -- -- -- key file of the database -- 数据库的密钥文件 -- -- -- read password of the database from stdin -- 从标准输入读取数据库的密码 -- -- -- Another instance of KeePassXC is already running. -- 另一个 KeePassXC 实例已在运行。 -- -- -- Fatal error while testing the cryptographic functions. -- 在测试加密函数时发生致命错误。 -- -- -- KeePassXC - Error -- KeePassXC - 错误 -- -- -- Database password: -- 数据库密码: -- -- -- Cannot create new group -- 无法创建新群组 -- -- -- Deactivate password key for the database. -- 停用此数据库的密码密钥。 -- -- -- Displays debugging information. -- 显示调试信息。 -- -- -- Deactivate password key for the database to merge from. -- 停用作为合并来源数据库使用的密码密钥。 -- -- -- Version %1 -- 版本 %1 -- -- -- Build Type: %1 -- 构建类型: %1 -- -- -- Revision: %1 -- 修订版本:%1 -- -- -- Distribution: %1 -- 发行版:%1 -- -- -- Debugging mode is disabled. -- 已禁用调试模式。 -- -- -- Debugging mode is enabled. -- 已启用调试模式。 -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- 操作系统:%1 --CPU 架构:%2 --内核:%3 %4 -- -- -- Auto-Type -- 自动输入 -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare(签名和未签名共享) -- -- -- KeeShare (only signed sharing) -- KeeShare(仅限签名共享) -- -- -- KeeShare (only unsigned sharing) -- KeeShare(仅限未签名共享) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- -- -- -- Enabled extensions: -- 已启用的扩展: -- -- -- Cryptographic libraries: -- 密码学公共库: -- -- -- Cannot generate a password and prompt at the same time! -- 无法同时生成密码和提示! -- -- -- Adds a new group to a database. -- 向数据库添加新群组。 -- -- -- Path of the group to add. -- 要添加的群组路径。 -- -- -- Group %1 already exists! -- 群组 %1 已经存在! -- -- -- Group %1 not found. -- 未找到群组 %1。 -- -- -- Successfully added group %1. -- 已成功添加群组 %1。 -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- 检查是否有密码已公开泄露。文件名必须是 HIBP 格式的、已泄露密码的 SHA-1 摘要清单,可以在 https://haveibeenpwned.com/Passwords 下载到。 -- -- -- FILENAME -- 文件名 -- -- -- Analyze passwords for weaknesses and problems. -- 分析密码的弱点和问题。 -- -- -- Failed to open HIBP file %1: %2 -- 无法打开 HIBP 文件 %1:%2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- 正通过 HIBP 文件评估数据库条目,这需要一些时间... -- -- -- Close the currently opened database. -- 关闭当前开启的数据库。 -- -- -- Display this help. -- 显示此帮助。 -- -- -- slot -- 插槽 -- -- -- Invalid word count %1 -- 无效的词数 %1 -- -- -- The word list is too small (< 1000 items) -- 词表太小(少于 1000 项) -- -- -- Exit interactive mode. -- 退出交互模式。 -- -- -- Exports the content of a database to standard output in the specified format. -- 将数据库内容按照指定的格式输出至标准输出。 -- -- -- Unable to export database to XML: %1 -- 无法导出数据库至 XML:%1 -- -- -- Unsupported format %1 -- 不支持的格式 %1 -- -- -- Use numbers -- 使用数字 -- -- -- Invalid password length %1 -- 无效的密码长度 %1 -- -- -- Display command help. -- 显示命令帮助。 -- -- -- Available commands: -- 可用命令: -- -- -- Import the contents of an XML database. -- 导入 XML 数据库的内容。 -- -- -- Path of the XML database export. -- XML 数据库导出的路径。 -- -- -- Path of the new database. -- 新数据库的路径。 -- -- -- Successfully imported database. -- 已成功导入数据库。 -- -- -- Unknown command %1 -- 未知命令 %1 -- -- -- Flattens the output to single lines. -- 将输出展平为单行。 -- -- -- Only print the changes detected by the merge operation. -- 仅输出合并操作检测到的更改。 -- -- -- Yubikey slot for the second database. -- 第二个数据库要使用的 Yubikey 插槽。 -- -- -- Successfully merged %1 into %2. -- 成功将 %1 合并入 %2。 -- -- -- Database was not modified by merge operation. -- 合并操作未修改数据库。 -- -- -- Moves an entry to a new group. -- 将条目移至新群组。 -- -- -- Path of the entry to move. -- 要移动的条目路径。 -- -- -- Path of the destination group. -- 目标群组的路径。 -- -- -- Could not find group with path %1. -- 找不到路径为 %1 的群组。 -- -- -- Entry is already in group %1. -- 条目已位于群组 %1。 -- -- -- Successfully moved entry %1 to group %2. -- 已成功将条目 %1 移至群组 %2。 -- -- -- Open a database. -- 打开一个数据库。 -- -- -- Path of the group to remove. -- 要删除的群组路径。 -- -- -- Cannot remove root group from database. -- 不能从数据库移除根群组。 -- -- -- Successfully recycled group %1. -- 已成功回收群组 %1。 -- -- -- Successfully deleted group %1. -- 已成功删除群组 %1。 -- -- -- Failed to open database file %1: not found -- 打开数据库文件 %1 失败:文件未找到 -- -- -- Failed to open database file %1: not a plain file -- 打开数据库文件 %1 失败:不是常规文件 -- -- -- Failed to open database file %1: not readable -- 打开数据库文件 %1 失败:文件不可读 -- -- -- Enter password to unlock %1: -- 输入密码以解锁 %1: -- -- -- Invalid YubiKey slot %1 -- 无效的 YubiKey 插槽 %1 -- -- -- Enter password to encrypt database (optional): -- 输入用于加密数据库的密码(可选): -- -- -- HIBP file, line %1: parse error -- HIBP 文件,第 %1 行:解析错误 -- -- -- Secret Service Integration -- 保密服务集成 -- -- -- User name -- 用户名 -- -- -- Password for '%1' has been leaked %2 time(s)! -- “%1”的密码已泄露了 %2 次! -- -- -- Invalid password generator after applying all options -- 应用所有选项后,密码生成器无效 -- -- -- Show the protected attributes in clear text. -- 明文显示被保护的属性。 -- -- -- Browser Plugin Failure -- 浏览器插件失败 -- -- -- Could not save the native messaging script file for %1. -- 无法为 %1 保存 Native Messaging 脚本文件。 -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- 将指定属性复制到剪贴板。如果未指定,则默认为“密码”。 -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- 将当前 TOTP 复制到剪贴板(相当于“-a totp”)。 -- -- -- Copy an entry's attribute to the clipboard. -- 将条目的属性复制到剪贴板。 -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- 错误:请指定 --attribute 或 --totp 之一,不可同时使用。 -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- 错误:属性 %1 不明确,它匹配 %2。 -- -- -- Attribute "%1" not found. -- 未找到属性“%1”。 -- -- -- Entry's "%1" attribute copied to the clipboard! -- 已复制条目的“%1”属性到剪贴板! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- 用于访问数据库的 Yubikey 插槽和可选的序号(例如 1:7370001)。 -- -- -- slot[:serial] -- 插槽[:序号] -- -- -- Target decryption time in MS for the database. -- 数据库的目标解密时间,单位为毫秒。 -- -- -- time -- 时间 -- -- -- Set the key file for the database. -- 设置数据库的密钥文件。 -- -- -- Set a password for the database. -- 设置数据库的密码。 -- -- -- Invalid decryption time %1. -- 无效解密时间 %1。 -- -- -- Target decryption time must be between %1 and %2. -- 目标解密时间必须在 %1 与 %2 之间。 -- -- -- Failed to set database password. -- 设置数据库密码失败。 -- -- -- Benchmarking key derivation function for %1ms delay. -- 以 %1 毫秒延迟对密钥派生函数进行基准测试。 -- -- -- Setting %1 rounds for key derivation function. -- 为密钥派生函数设置 %1 转换次数。 -- -- -- error while setting database key derivation settings. -- 设置数据库密钥派生设置时出现错误。 -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- 导出时使用的格式。可用的选项是“xml”或“csv”。默认值为“xml”。 -- -- -- Unable to import XML database: %1 -- 无法导入 XML 数据库:%1 -- -- -- Show a database's information. -- 显示数据库的信息。 -- -- -- UUID: -- UUID: -- -- -- Name: -- 名称: -- -- -- Description: -- 描述: -- -- -- Cipher: -- 加密: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- 回收站已启用。 -- -- -- Recycle bin is not enabled. -- 回收站未启用。 -- -- -- Invalid command %1. -- 无效命令 %1。 -- -- -- Invalid YubiKey serial %1 -- 无效的 YubiKey 序号 %1 -- -- -- Please touch the button on your YubiKey to continue… -- 请触摸您 YubiKey 上的按钮以继续... -- -- -- Do you want to create a database with an empty password? [y/N]: -- 是否要创建具有空密码的数据库?[y/N]: -- -- -- Repeat password: -- 重复密码: -- -- -- Error: Passwords do not match. -- 错误:密码不匹配。 -- -- -- All clipping programs failed. Tried %1 -- -- 所有剪贴板程序都失败。已尝试 %1 -- -- -- AES (%1 rounds) -- AES(%1 次) -- -- -- AES 256-bit -- AES 256 位 -- -- -- Twofish 256-bit -- Twofish 256 位 -- -- -- ChaCha20 256-bit -- ChaCha20:256 位 {20 256-?} -- -- -- Benchmark %1 delay -- 基准 %1 延迟 -- -- -- %1 ms -- milliseconds -- %1 毫秒 -- -- -- %1 s -- seconds -- %1 秒 -- -- -- path to a custom local config file -- 自定义本地配置文件的路径 -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- 警告:您使用的是旧版密钥文件格式,KeePassXC 可能会在将来停止对它的支持。 -- --请考虑重新生成一个新密钥文件。 -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1(%2 次,%3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d(KDBX 4 – 推荐) -- -- -- Argon2id (KDBX 4) -- Argon2id(KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- 图标 -- -- -- Unsupported key file version: %1 -- 不支持的密钥文件版本:%1 -- -- -- Checksum mismatch! Key file may be corrupt. -- 校验和不匹配!密钥文件可能已损坏。 -- -- -- Unexpected key file data! Key file may be corrupt. -- 意外的密钥文件数据!密钥文件可能已损坏。 -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- 压缩时内部 zlib 出错: -- -- -- Error writing to underlying device: -- 写入底层设备出错: -- -- -- Error opening underlying device: -- 打开底层设备出错: -- -- -- Error reading data from underlying device: -- 读取底层设备出错: -- -- -- Internal zlib error when decompressing: -- 解压时内部 zlib 错误: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- 当前版本的 zlib 不支持 gzip 格式。 -- -- -- Internal zlib error: -- 内部 zlib 错误: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- 也显示已从报告中排除的条目 -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- 将鼠标指针悬停在原因上以显示其他详细信息。双击条目以编辑。 -- -- -- Bad -- Password quality -- 极差 -- -- -- Bad — password must be changed -- 极差 — 必须更改密码 -- -- -- Poor -- Password quality -- 差劲 -- -- -- Poor — password should be changed -- 差劲 — 应该更改密码 -- -- -- Weak -- Password quality -- 较弱 -- -- -- Weak — consider changing the password -- 较弱 — 可考虑更改密码 -- -- -- (Excluded) -- (已排除) -- -- -- This entry is being excluded from reports -- 此条目已经从报告中排除 -- -- -- Please wait, health data is being calculated... -- 请稍候,正在计算健康数据... -- -- -- Congratulations, everything is healthy! -- 恭喜,一切健康! -- -- -- Title -- 标题 -- -- -- Path -- 路径 -- -- -- Score -- 得分 -- -- -- Reason -- 原因 -- -- -- Edit Entry... -- 编辑条目... -- -- -- Exclude from reports -- 从报告中排除 -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- 注意:此报告需要将信息发送到 Have I Been Pwned 在线服务 (https://haveibeenpwned.com)。如果继续,您数据库内的密码将被哈希加密,这些哈希的前五个字符将安全地发送到此服务。您的数据库仍然安全,其他人无法从此信息中重建数据。但是,您发送的密码数量和 IP 地址将提供给此服务。 -- -- -- Perform Online Analysis -- 执行在线分析 -- -- -- Also show entries that have been excluded from reports -- 也显示已从报告中排除的条目 -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- 此版本 KeePassXC 不包含网络功能。如要通过 Have I Been Pwned 服务检查您的密码,就必须可以访问网络。 -- -- -- Congratulations, no exposed passwords! -- 恭喜,没有已暴露的密码! -- -- -- Title -- 标题 -- -- -- Path -- 路径 -- -- -- Password exposed… -- 已暴露密码... -- -- -- (Excluded) -- (已排除) -- -- -- This entry is being excluded from reports -- 此条目已经从报告中排除 -- -- -- once -- 一次 -- -- -- up to 10 times -- 至多达 10 次 -- -- -- up to 100 times -- 至多达 100 次 -- -- -- up to 1000 times -- 至多达 1000 次 -- -- -- up to 10,000 times -- 至多达一万次 -- -- -- up to 100,000 times -- 至多达十万次 -- -- -- up to a million times -- 至多达一百万次 -- -- -- millions of times -- 数百万次 -- -- -- Edit Entry... -- 编辑条目... -- -- -- Exclude from reports -- 从报告中排除 -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- 将鼠标指针悬停在有错误图标的行以显示更多信息。 -- -- -- Name -- 名称 -- -- -- Value -- -- -- -- Please wait, database statistics are being calculated... -- 请稍候,正在计算数据库统计信息... -- -- -- Database name -- 数据库名称 -- -- -- Description -- 描述 -- -- -- Location -- 位置 -- -- -- Last saved -- 保存时间 -- -- -- Unsaved changes -- 修改尚未保存 -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- 数据库已被修改,但尚未保存到磁盘。 -- -- -- Number of groups -- 群组数 -- -- -- Number of entries -- 条目数 -- -- -- Number of expired entries -- 过期条目数 -- -- -- The database contains entries that have expired. -- 此数据库包含已过期的条目。 -- -- -- Unique passwords -- 唯一密码 -- -- -- Non-unique passwords -- 重复密码 -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- 超过 10% 的密码是重复的,请尽量不使用重复的密码。 -- -- -- Maximum password reuse -- 密码最高重复次数 -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- 一些密码已经重复使用 3 次以上,请尽量不使用重复的密码。 -- -- -- Number of short passwords -- 短密码总数 -- -- -- Recommended minimum password length is at least 8 characters. -- 推荐密码不少于 8 位。 -- -- -- Number of weak passwords -- 弱密码总数 -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- 推荐使用被系统评分为“良好”或“优秀”的、足够长的随机密码。 -- -- -- Entries excluded from reports -- 报告中已排除条目 -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- 从报告中被排除的条目(例如,因为已知其密码较差)不一定是问题,但您应该留意它们。 -- -- -- Average password length -- 平均密码长度 -- -- -- %1 characters -- %1 字符 -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- 密码平均短于 10 位,更长的密码提供更强的安全性。 -- -- -- -- SSHAgent -- -- Agent connection failed. -- 代理连接失败。 -- -- -- Agent protocol error. -- 代理协议错误。 -- -- -- No agent running, cannot add identity. -- 代理未在运行,无法添加身份。 -- -- -- No agent running, cannot remove identity. -- 代理未在运行,无法删除身份。 -- -- -- Agent refused this identity. Possible reasons include: -- 代理拒绝了此身份。可能的原因包括: -- -- -- The key has already been added. -- 此密钥已被添加。 -- -- -- Restricted lifetime is not supported by the agent (check options). -- 代理不支持受限制的生命周期(请检查选项)。 -- -- -- A confirmation request is not supported by the agent (check options). -- 代理不支持确认请求(请检查选项)。 -- -- -- Key identity ownership conflict. Refusing to add. -- 密钥身份所有权冲突。拒绝添加。 -- -- -- No agent running, cannot list identities. -- 代理未在运行,无法列出身份。 -- -- -- -- SearchHelpWidget -- -- Search Help -- 搜索帮助 -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- 搜索词格式为:[修饰符][字段名:]["]关键词["] -- -- -- Every search term must match (ie, logical AND) -- 所有搜索词都必须匹配(即逻辑“与”关系) -- -- -- Modifiers -- 修饰符 -- -- -- exclude term from results -- 从结果中排除关键词 -- -- -- match term exactly -- 精确匹配关键词 -- -- -- use regex in term -- 使用正则表达式 -- -- -- Fields -- 字段 -- -- -- Term Wildcards -- 关键词通配符 -- -- -- match anything -- 匹配任何内容 -- -- -- match one -- 匹配单个字符 -- -- -- logical OR -- 逻辑“或” -- -- -- Examples -- 示例 -- -- -- -- SearchWidget -- -- Search -- 搜索 -- -- -- Limit search to selected group -- 仅搜索选中的群组 -- -- -- Search Help -- 搜索帮助 -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- 搜索(%1)... -- -- -- Case sensitive -- 区分大小写 -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- 选项 -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- 在 KeepassXC 中启用 Freedesktop.org 保密服务集成 -- -- -- General -- 常规 -- -- -- Show notification when credentials are requested -- 请求凭据时显示通知 -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>如果数据库已启用回收站,条目会被移动到回收站。否则条目会不经确认直接删除。</p><p>但如果条目被其他条目引用仍会请求确认。</p></body></html> -- -- -- Exposed database groups: -- 已公开的数据库群组: -- -- -- Authorization -- 认证 -- -- -- These applications are currently connected: -- 现在已经连接到以下应用: -- -- -- Don't confirm when entries are deleted by clients -- 客户端删除条目时无需确认 -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>错误:</b>连接 DBus 失败。请检查您的 DBus 设置。 -- -- -- <b>Warning:</b> -- <b>警告:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- 保存当前更改以激活插件,并启用此部分的编辑。 -- -- -- -- SettingsWidgetKeeShare -- -- Active -- 激活 -- -- -- Allow export -- 允许导出 -- -- -- Allow import -- 允许导入 -- -- -- Own certificate -- 自己的证书 -- -- -- Fingerprint: -- 指纹: -- -- -- Certificate: -- 证书: -- -- -- Signer -- 签名者 -- -- -- Key: -- 密钥: -- -- -- Generate -- 生成 -- -- -- Import -- 导入 -- -- -- Export -- 导出 -- -- -- Imported certificates -- 导入的证书 -- -- -- Trust -- 信任 -- -- -- Ask -- 询问 -- -- -- Untrust -- 不信任 -- -- -- Remove -- 删除 -- -- -- Path -- 路径 -- -- -- Status -- 状态 -- -- -- Fingerprint -- 指纹 -- -- -- Certificate -- 证书 -- -- -- Trusted -- 可信 -- -- -- Untrusted -- 不可信 -- -- -- Unknown -- 未知 -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare 密钥文件 -- -- -- All files -- 所有文件 -- -- -- Select path -- 选择路径 -- -- -- Exporting changed certificate -- 导出已更改的证书 -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- 导出的证书与正在使用的证书不同。是否要导出当前证书? -- -- -- Signer: -- 签名者: -- -- -- Allow KeeShare imports -- 允许 KeeShare 导入 -- -- -- Allow KeeShare exports -- 允许 KeeShare 导出 -- -- -- Only show warnings and errors -- 仅显示警告和错误信息 -- -- -- Key -- 密钥 -- -- -- Signer name field -- 签名者名称字段 -- -- -- Generate new certificate -- 生成新证书 -- -- -- Import existing certificate -- 导入已有的证书 -- -- -- Export own certificate -- 导出自己的证书 -- -- -- Known shares -- 已知共享 -- -- -- Trust selected certificate -- 信任所选证书 -- -- -- Ask whether to trust the selected certificate every time -- 每次都询问是否信任所选证书 -- -- -- Untrust selected certificate -- 不信任所选证书 -- -- -- Remove selected certificate -- 删除所选证书 -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- 不支持覆盖已签名共享容器 - 不可导出 -- -- -- Could not write export container (%1) -- 无法写入导出容器(%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- 无法嵌入签名:无法打开要写入的文件(%1) -- -- -- Could not embed signature: Could not write file (%1) -- 无法嵌入签名:无法写入文件(%1) -- -- -- Could not embed database: Could not open file to write (%1) -- 无法嵌入数据库:无法打开要写入的文件(%1) -- -- -- Could not embed database: Could not write file (%1) -- 无法嵌入数据库:无法写入文件(%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- 不支持覆盖未签名共享容器 - 不可导出 -- -- -- Could not write export container -- 无法写入导出容器 -- -- -- Unexpected export error occurred -- 出现意外的导出错误 -- -- -- -- ShareImport -- -- Import from container without signature -- 从未签名容器导入 -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- 我们无法验证共享容器的来源,因为它未签名。是否确实要从 %1 导入? -- -- -- Import from container with certificate -- 从有证书容器导入 -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- 您是否要信任来自 %3 的 %1,指纹为 %2?{1 ?} {2 ?} -- -- -- Not this time -- 不信任一次 -- -- -- Never -- 总不信任 -- -- -- Always -- 总是信任 -- -- -- Just this time -- 信任一次 -- -- -- Signed share container are not supported - import prevented -- 不支持已签名共享容器 - 不可导入 -- -- -- File is not readable -- 文件不可读 -- -- -- Invalid sharing container -- 无效的共享容器 -- -- -- Untrusted import prevented -- 已阻止不可信的导入 -- -- -- Successful signed import -- 已签名导入成功 -- -- -- Unsigned share container are not supported - import prevented -- 不支持未签名共享容器 - 不可导入 -- -- -- Successful unsigned import -- 未签名导入成功 -- -- -- File does not exist -- 文件不存在 -- -- -- Unknown share container type -- 未知的共享容器类型 -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- 从 %1 导入失败(%2) -- -- -- Import from %1 successful (%2) -- 从 %1 导入成功(%2) -- -- -- Imported from %1 -- 已从 %1 导入 -- -- -- Export to %1 failed (%2) -- 导出到 %1 失败(%2) -- -- -- Export to %1 successful (%2) -- 导出到 %1 成功(%2) -- -- -- Export to %1 -- 已导出到 %1 -- -- -- Multiple import source path to %1 in %2 -- %2 中有多个 %1 的导入来源路径 -- -- -- Conflicting export target path %1 in %2 -- %2 中 %1 的导出目标路径有冲突 -- -- -- -- TotpDialog -- -- Timed Password -- 一次性密码 -- -- -- 000000 -- 000000 -- -- -- Copy -- 复制 -- -- -- Expires in <b>%n</b> second(s) -- 在 <b>%n</b> 秒后过期 -- -- -- -- TotpExportSettingsDialog -- -- Copy -- 复制 -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- 注意:这些 TOTP 设置是自定义的,可能无法与其他验证器一起使用。 -- -- -- There was an error creating the QR code. -- 创建二维码时出错。 -- -- -- Closing in %1 seconds. -- 在 %1 秒后关闭。 -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- 设置 TOTP -- -- -- Default RFC 6238 token settings -- 默认 RFC 6238 令牌设置 -- -- -- Steam token settings -- Steam 令牌设置 -- -- -- Use custom settings -- 使用自定义设置 -- -- -- Custom Settings -- 自定义设置 -- -- -- Time step: -- 刷新时间: -- -- -- sec -- Seconds -- -- -- -- Code size: -- 代码长度: -- -- -- Secret Key: -- Secret 密钥: -- -- -- Secret key must be in Base32 format -- Secret 密钥必须为 Base32 格式 -- -- -- Secret key field -- Secret 密钥字段 -- -- -- Algorithm: -- 算法: -- -- -- Time step field -- 刷新时间字段 -- -- -- digits -- -- -- -- Invalid TOTP Secret -- 无效的 TOTP Secret 密钥 -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- 您输入的 Secret 密钥无效。密钥必须是 Base32 格式。 --例如:JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- 确认删除 TOTP 设置 -- -- -- Are you sure you want to delete TOTP settings for this entry? -- 您确定要删除此条目的 TOTP 设置吗? -- -- -- -- URLEdit -- -- Invalid URL -- 无效 URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- 检查更新 -- -- -- Checking for updates... -- 正在检查更新... -- -- -- Close -- 关闭 -- -- -- Update Error! -- 更新错误! -- -- -- An error occurred in retrieving update information. -- 获取更新信息时出错。 -- -- -- Please try again later. -- 请稍后再试。 -- -- -- Software Update -- 软件更新 -- -- -- A new version of KeePassXC is available! -- 有一个新的 KeePassXC 版本可用! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 现已推出 — 您的版本是 %2。 -- -- -- Download it at keepassxc.org -- 前往 keepassxc.org 下载 -- -- -- You're up-to-date! -- 您正在使用最新版! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 是当前可用的最新版本 -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- 开始将您的密码安全地存储在 KeePassXC 数据库中 -- -- -- Create new database -- 新建数据库 -- -- -- Open existing database -- 打开数据库 -- -- -- Import from KeePass 1 -- 导入 KeePass 1 数据库 -- -- -- Import from CSV -- 导入 CSV 文件 -- -- -- Recent databases -- 最近的数据库 -- -- -- Welcome to KeePassXC %1 -- 欢迎使用 KeePassXC %1 -- -- -- Import from 1Password -- 从 1Password 导入 -- -- -- Open a recent database -- 打开最近的数据库 -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] 配置插槽 - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] 质询响应 - 插槽 %3 - %4 -- -- -- Press -- 按键 -- -- -- Passive -- 被动 -- -- -- %1 Invalid slot specified - %2 -- %1 指定的插槽无效 - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey 接口尚未初始化。 -- -- -- Hardware key is currently in use. -- 当前正在使用硬件密钥。 -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- 找不到序列号为 %1 的硬件密钥。请插入后继续。 -- -- -- Hardware key timed out waiting for user interaction. -- 硬件密钥等待用户操作超时。 -- -- -- A USB error ocurred when accessing the hardware key: %1 -- 访问硬件密钥时出现 USB 错误:%1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- 质询响应失败,错误为:%1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- 刷新 -- -- -- YubiKey Challenge-Response -- YubiKey 质询响应 -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>如果您拥有 <a href="https://www.yubico.com/">YubiKey</a>,则可以使用它来提高安全性。</p><p>YubiKey 要求将其中一个插槽编程为 <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 质询响应</a>。</p> -- -- -- Refresh hardware tokens -- 刷新实体令牌 -- -- -- Hardware key slot selection -- 选择实体密钥的插槽 -- -- -- Could not find any hardware keys! -- 未找到任何硬件密钥! -- -- -- Selected hardware key slot does not support challenge-response! -- 所选硬件密钥插槽不支持质询响应! -- -- -- Detecting hardware keys… -- 正在检测硬件密钥... -- -- -- No hardware keys detected -- 未检测到硬件密钥 -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_zh_TW.ts keepassxc-2.6.4-patched/share/translations/keepassx_zh_TW.ts ---- keepassxc-2.6.4-orig/share/translations/keepassx_zh_TW.ts 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/keepassx_zh_TW.ts 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7894 +0,0 @@ -- -- -- AboutDialog -- -- About KeePassXC -- 關於 KeePassXC -- -- -- About -- 關於 -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- 回報錯誤請至:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- KeePassXC 遵循 GNU 通用公共授權條款 (GPL) 第 2 版或(依您意願以)第 3 版發佈。 -- -- -- Contributors -- 貢獻者 -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">上 GitHub 查看貢獻者名單</a> -- -- -- Debug Info -- 除錯資訊 -- -- -- Include the following information whenever you report a bug: -- 回報錯誤時需包含以下資訊: -- -- -- Copy to clipboard -- 複製到剪貼簿 -- -- -- Project Maintainers: -- 專案維護者: -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- KeePassXC 團隊特別感謝 debfx 開創了原本的 KeePassX 專案。 -- -- -- -- AgentSettingsWidget -- -- Use OpenSSH for Windows instead of Pageant -- 使用 OpenSSH for Windows 而不是 Pageant -- -- -- Enable SSH Agent integration -- 啟用 SSH 代理整合 -- -- -- SSH_AUTH_SOCK value -- SSH_AUTH_SOCK 值 -- -- -- SSH_AUTH_SOCK override -- SSH_AUTH_SOCK 覆蓋值 -- -- -- (empty) -- (空) -- -- -- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. -- 找不到可供 SSH 代理使用的 socket 接口。檢查 SSH_AUTH_SOCK 環境變數是否存在,或是設定一個覆蓋值。 -- -- -- SSH Agent connection is working! -- SSH 代理連線正在運作! -- -- -- -- ApplicationSettingsWidget -- -- Application Settings -- 應用程式設定 -- -- -- General -- 通用 -- -- -- Security -- 安全 -- -- -- Access error for config file %1 -- 設定檔 %1 存取錯誤 -- -- -- Icon only -- 只有圖示 -- -- -- Text only -- 只有文字 -- -- -- Text beside icon -- 文字於圖示旁邊 -- -- -- Text under icon -- 文字於圖示底下 -- -- -- Follow style -- 跟隨樣式 -- -- -- Reset Settings? -- 重置設定? -- -- -- Are you sure you want to reset all general and security settings to default? -- 您確定要重置所有通用和安全設定回預設值? -- -- -- Monochrome (light) -- 單色(亮) -- -- -- Monochrome (dark) -- 單色(暗) -- -- -- Colorful -- 彩色 -- -- -- You must restart the application to set the new language. Would you like to restart now? -- 必須重啟應用程式以使用新語言。您是否要現在重新啟動? -- -- -- -- ApplicationSettingsWidgetGeneral -- -- Basic Settings -- 基本設定 -- -- -- Startup -- 啟動 -- -- -- Start only a single instance of KeePassXC -- 只啟動單一 KeePassXC 程序 -- -- -- Minimize window at application startup -- 程式啟動時將視窗最小化 -- -- -- File Management -- 檔案管理 -- -- -- Backup database file before saving -- 儲存資料庫檔案前先備份 -- -- -- Automatically save after every change -- 每次修改後自動儲存 -- -- -- Automatically reload the database when modified externally -- 有外部修改時自動重新載入資料庫 -- -- -- Entry Management -- 項目管理 -- -- -- Use group icon on entry creation -- 建立項目時使用群組圖示 -- -- -- Minimize instead of app exit -- 以最小化取代關閉程式 -- -- -- Show a system tray icon -- 顯示系統列圖示 -- -- -- Hide window to system tray when minimized -- 視窗最小化時隱藏至系統列 -- -- -- Auto-Type -- 自動輸入 -- -- -- Use entry title to match windows for global Auto-Type -- 全域自動輸入下,使用項目的標題比對視窗 -- -- -- Use entry URL to match windows for global Auto-Type -- 全域自動輸入下,使用項目的 URL 比對視窗 -- -- -- Always ask before performing Auto-Type -- 執行自動輸入前始終詢問 -- -- -- ms -- Milliseconds -- 毫秒 -- -- -- Movable toolbar -- 工具列可移動 -- -- -- Remember previously used databases -- 記住之前使用過的資料庫 -- -- -- Load previously open databases on startup -- 啟動時載入之前開啟的資料庫 -- -- -- Remember database key files and security dongles -- 記住資料庫的金鑰檔與硬體金鑰 -- -- -- Check for updates at application startup once per week -- 每週一次於程式啟動時檢查更新 -- -- -- Include beta releases when checking for updates -- 檢查更新時包括 beta 版本 -- -- -- Language: -- 語言: -- -- -- (restart program to activate) -- (程式重啟後生效) -- -- -- Minimize window after unlocking database -- 解鎖資料庫後將視窗最小化 -- -- -- Minimize when opening a URL -- 開啟 URL 時最小化 -- -- -- Hide window when copying to clipboard -- 複製到剪貼簿時隱藏視窗 -- -- -- Minimize -- 最小化 -- -- -- Drop to background -- 移至背景 -- -- -- Favicon download timeout: -- 網站圖標下載超時: -- -- -- Website icon download timeout in seconds -- 網站圖示的下載超時時間,以秒計算 -- -- -- sec -- Seconds -- -- -- -- Toolbar button style -- 工具列按鈕樣式 -- -- -- Language selection -- 語言選擇 -- -- -- Global auto-type shortcut -- 全域自動輸入的快捷鍵 -- -- -- Auto-type character typing delay milliseconds -- 自動輸入的單一字元輸入延遲,以毫秒計算 -- -- -- Auto-type start delay milliseconds -- 自動輸入的啟動延遲,以毫秒計算 -- -- -- Automatically launch KeePassXC at system startup -- 系統開機時自動啟動 KeePassXC -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- 安全儲存資料庫檔案(若和 Dropbox 等服務不相容,可停用此項) -- -- -- User Interface -- 使用者介面 -- -- -- Toolbar button style: -- 工具列按鈕樣式: -- -- -- Use monospaced font for notes -- 備註使用等寛字體 -- -- -- Tray icon type: -- 系統列圖示類型: -- -- -- Reset settings to default… -- 將設定重置為預設值… -- -- -- Auto-Type typing delay: -- 自動輸入延遲: -- -- -- Global Auto-Type shortcut: -- 全域自動輸入的快捷鍵: -- -- -- Auto-Type start delay: -- 自動輸入的啟動延遲: -- -- -- Automatically save when locking database -- 鎖定資料庫時自動儲存 -- -- -- Automatically save non-data changes when locking database -- 鎖定資料庫時,自動儲存與資料無關的變更 -- -- -- Tray icon type -- 系統列圖示類型 -- -- -- -- ApplicationSettingsWidgetSecurity -- -- Timeouts -- 超時 -- -- -- Clear clipboard after -- 多久後清除剪貼簿 -- -- -- sec -- Seconds -- -- -- -- Lock databases after inactivity of -- 閒置多久後鎖上資料庫 -- -- -- min -- -- -- -- Forget TouchID after inactivity of -- 閒置多久後遺忘 TouchID -- -- -- Convenience -- 便利性 -- -- -- Lock databases when session is locked or lid is closed -- 鎖定工作階段或蓋上螢幕時,將資料庫鎖上 -- -- -- Forget TouchID when session is locked or lid is closed -- 鎖定工作階段或蓋上螢幕時,將 TouchID 遺忘 -- -- -- Lock databases after minimizing the window -- 最小化視窗後鎖上資料庫 -- -- -- Re-lock previously locked database after performing Auto-Type -- 執行自動輸入後,將之前鎖定的資料庫重新鎖上 -- -- -- Hide passwords in the entry preview panel -- 隱藏項目預覽面板內的密碼 -- -- -- Hide entry notes by default -- 預設隱藏項目備註 -- -- -- Privacy -- 隱私 -- -- -- Use DuckDuckGo service to download website icons -- 使用 DuckDuckGo 服務下載網站圖示 -- -- -- Clipboard clear seconds -- 清除剪貼簿的預訂時間,以秒計算 -- -- -- Touch ID inactivity reset -- Touch ID 閒置時間重置 -- -- -- Database lock timeout seconds -- 資料庫鎖定超時時間,以秒計算 -- -- -- min -- Minutes -- -- -- -- Clear search query after -- 多久後清除搜尋字詞 -- -- -- Require password repeat when it is visible -- 密碼可見時仍要求重複輸入密碼 -- -- -- Hide passwords when editing them -- 編輯密碼時將其隱藏 -- -- -- Use placeholder for empty password fields -- 在空的密碼欄位填入佔位符 -- -- -- -- AutoType -- -- Couldn't find an entry that matches the window title: -- 找不到任何符合視窗標題的項目: -- -- -- Auto-Type - KeePassXC -- 自動輸入 - KeePassXC -- -- -- Auto-Type -- 自動輸入 -- -- -- The Syntax of your Auto-Type statement is incorrect! -- 自動輸入敘述的語法不正確! -- -- -- This Auto-Type command contains a very long delay. Do you really want to proceed? -- 此自動輸入命令包含很長的延遲。真的要繼續? -- -- -- This Auto-Type command contains very slow key presses. Do you really want to proceed? -- 此自動輸入命令包含非常緩慢的按鍵操作。真的要繼續? -- -- -- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? -- 此自動輸入命令包含頻繁重複的參數。真的要繼續? -- -- -- Permission Required -- 需要權限 -- -- -- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC 需要「輔助使用」權限才能執行項目層級的自動輸入。若您已授予權限,可能要重新啟動 KeePassXC。 -- -- -- -- AutoTypeAssociationsModel -- -- Window -- 視窗 -- -- -- Sequence -- 序列 -- -- -- Default sequence -- 預設序列 -- -- -- -- AutoTypeMatchModel -- -- Group -- 群組 -- -- -- Title -- 標題 -- -- -- Username -- 使用者名稱 -- -- -- Sequence -- 序列 -- -- -- -- AutoTypeMatchView -- -- Copy &username -- 複製使用者名稱 (&U) -- -- -- Copy &password -- 複製密碼 (&P) -- -- -- -- AutoTypePlatformMac -- -- Permission Required -- 需要權限 -- -- -- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. -- KeePassXC 需要「輔助使用」和「螢幕錄製」權限以執行全域自動輸入。使用視窗標題尋找項目時需要螢幕錄製功能。若您已授予權限,可能要重新啟動 KeePassXC。 -- -- -- -- AutoTypeSelectDialog -- -- Auto-Type - KeePassXC -- 自動輸入 - KeePassXC -- -- -- Select entry to Auto-Type: -- 選擇要自動輸入的項目: -- -- -- Search... -- 搜尋... -- -- -- -- BrowserAccessControlDialog -- -- KeePassXC - Browser Access Request -- KeePassXC 瀏覽器擴充的存取要求 -- -- -- %1 is requesting access to the following entries: -- %1 要求存取以下項目: -- -- -- Remember access to checked entries -- 記住對所選項目的存取 -- -- -- Remember -- 記住 -- -- -- Allow access to entries -- 允許存取項目 -- -- -- Allow Selected -- 允許所選 -- -- -- Deny All -- 全部拒絕 -- -- -- Disable for this site -- 對此網站停用 -- -- -- -- BrowserEntrySaveDialog -- -- KeePassXC-Browser Save Entry -- KeePassXC 瀏覽器擴充保存項目 -- -- -- Ok -- 確定 -- -- -- Cancel -- 取消 -- -- -- You have multiple databases open. --Please select the correct database for saving credentials. -- 您有數個開啟的資料庫。 --請選擇要保存憑證的資料庫。 -- -- -- -- BrowserService -- -- KeePassXC: New key association request -- KeePassXC: 新的金鑰關聯要求 -- -- -- Save and allow access -- 儲存並允許存取 -- -- -- KeePassXC: Overwrite existing key? -- KeePassXC: 覆蓋現有金鑰? -- -- -- A shared encryption key with the name "%1" already exists. --Do you want to overwrite it? -- 已存在名稱為「%1」的共用加密金鑰。 --是否要覆蓋它? -- -- -- KeePassXC: Update Entry -- KeePassXC: 更新項目 -- -- -- Do you want to update the information in %1 - %2? -- 是否要更新 %1 - %2 內的資訊? -- -- -- Abort -- 中止 -- -- -- Converting attributes to custom data… -- 正在轉換屬性至自定義資料… -- -- -- KeePassXC: Converted KeePassHTTP attributes -- KeePassXC: 轉換 KeePassHTTP 屬性 -- -- -- Successfully converted attributes from %1 entry(s). --Moved %2 keys to custom data. -- 已成功轉換 %1 個項目的屬性。 --已移動 %2 組金鑰至自定義資料。 -- -- -- Successfully moved %n keys to custom data. -- 已成功移動 %n 組金鑰至自定義資料。 -- -- -- KeePassXC: No entry with KeePassHTTP attributes found! -- KeePassXC: 找不到擁有 KeePassHTTP 屬性的項目! -- -- -- The active database does not contain an entry with KeePassHTTP attributes. -- 目前作用的資料庫中沒有任何項目擁有 KeePassHTTP 屬性。 -- -- -- KeePassXC: Legacy browser integration settings detected -- KeePassXC: 偵測到過時的瀏覽器整合設定 -- -- -- KeePassXC: Create a new group -- KeePassXC: 建立新群組 -- -- -- A request for creating a new group "%1" has been received. --Do you want to create this group? -- -- 已收到建立新群組「%1」的要求。 --是否要建立此群組? -- -- -- -- Your KeePassXC-Browser settings need to be moved into the database settings. --This is necessary to maintain your current browser connections. --Would you like to migrate your existing settings now? -- 需要將您的 KeePassXC 瀏覽器擴充設定移動至資料庫設定。 --這是為了保持您目前的瀏覽器連結。 --您是否要現在移轉既有設定? -- -- -- Don't show this warning again -- 不再顯示此警告 -- -- -- You have received an association request for the following database: --%1 -- --Give the connection a unique name or ID, for example: --chrome-laptop. -- 你已經接收到以下資料庫的關聯請求: --%1 -- --為連線給予一個獨特的名稱或是 ID,例如: --chrome-laptop。 -- -- -- -- BrowserSettingsWidget -- -- Dialog -- 對話方塊 -- -- -- This is required for accessing your databases with KeePassXC-Browser -- 使用 KeePassXC 瀏覽器擴充存取您的資料庫 -- -- -- Enable browser integration -- 啟用瀏覽器整合 -- -- -- General -- 一般 -- -- -- Browsers installed as snaps are currently not supported. -- 目前並不支援以 Snap 套件安裝的瀏覽器。 -- -- -- Enable integration for these browsers: -- 為以下瀏覽器啟用整合功能: -- -- -- Vivaldi -- Vivaldi -- -- -- &Edge -- &Edge -- -- -- Firefox -- Firefox -- -- -- Tor Browser -- Tor Browser -- -- -- Brave -- Brave -- -- -- Google Chrome -- Google Chrome -- -- -- Chromium -- Chromium -- -- -- Show a notification when credentials are requested -- Credentials mean login data requested via browser extension -- 出現憑證要求時顯示通知 -- -- -- Request to unlock the database if it is locked -- 資料庫被鎖定時要求解鎖 -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- 只回傳具有相同協定 (http://, https://, ...) 的項目。 -- -- -- Match URL scheme (e.g., https://...) -- 匹配 URL 協定 (e.g., https://...) -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- 對給定的 URL 回傳最佳匹配項目,而非所有和網域名匹配的項目。 -- -- -- Return only best-matching credentials -- 只回傳最佳符合的憑證 -- -- -- Returns expired credentials. String [expired] is added to the title. -- 可回傳過期的憑證。標題會加入 [已過期] 字串。 -- -- -- Allow returning expired credentials -- 允許回傳過期的憑證 -- -- -- All databases connected to the extension will return matching credentials. -- 所有與擴充連結的資料庫將回傳相符的憑證。 -- -- -- Search in all opened databases for matching credentials -- Credentials mean login data requested via browser extension -- 在所有開啟的資料庫內搜尋相符的憑證 -- -- -- Sort matching credentials by title -- Credentials mean login data requested via browser extension -- 依標題排序符合的憑證 -- -- -- Sort matching credentials by username -- Credentials mean login data requested via browser extension -- 依用戶名稱排序符合的憑證 -- -- -- Advanced -- 進階 -- -- -- Never ask before accessing credentials -- Credentials mean login data requested via browser extension -- 存取憑證前永不詢問 -- -- -- Never ask before updating credentials -- Credentials mean login data requested via browser extension -- 更新憑證前永不詢問 -- -- -- Do not ask permission for HTTP Basic Auth -- An extra HTTP Basic Auth setting -- 不要詢問 HTTP 基本認證的權限 -- -- -- Automatically creating or updating string fields is not supported. -- 並不支援自動建立或更新文字欄位。 -- -- -- Return advanced string fields which start with "KPH: " -- 回傳以 "KPH: " 開頭的進階文字欄位 -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- 不要顯示建議移轉過時 KeePassHTTP 設定的彈出視窗。 -- -- -- Do not prompt for KeePassHTTP settings migration. -- 不要提示 KeePassHTTP 設定移轉。 -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- 啟動時,自動將 KeePassXC 或 keepassxc-proxy 二進位檔路徑更新至本地消息腳本。 -- -- -- Update native messaging manifest files at startup -- 啟動時,更新本地消息配置檔 -- -- -- Use a custom proxy location if you installed a proxy manually. -- 若您有自行安裝代理,則使用自定義的代理位置。 -- -- -- Use a custom proxy location: -- Meant is the proxy for KeePassXC-Browser -- 使用自定義的代理位置: -- -- -- Custom proxy location field -- 自定義代理位置欄位 -- -- -- Browser for custom proxy file -- 瀏覽自定義的代理檔案 -- -- -- Browse... -- Button for opening file dialog -- 瀏覽... -- -- -- Use a custom browser configuration location: -- 使用自定義的瀏覽器設定檔位置: -- -- -- Browser type: -- 瀏覽器類型: -- -- -- Toolbar button style -- 工具列按鈕樣式 -- -- -- Config Location: -- 設定檔位置: -- -- -- Custom browser location field -- 自定義瀏覽器位置欄位 -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- Browse for custom browser path -- 瀏覽自定義的瀏覽器路徑 -- -- -- Custom extension ID: -- 自定義擴充 ID: -- -- -- Custom extension ID -- 自定義擴充 ID -- -- -- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 -- 由於 Snap 的沙盒機制,您必須執行一個腳本來啟用瀏覽器整合。<br />您可以從 %1 取得這個腳本 -- -- -- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 -- 需要 KeePassXC 瀏覽器擴充才能使用整合功能。<br />可供 %1 和 %2 和 %3 下載。%4 -- -- -- Please see special instructions for browser extension use below -- 請參閱以下的具體指示,學習如何使用瀏覽器擴展 -- -- -- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. -- <b>錯誤:</b>找不到自定義的代理位置!<br/>沒有代理程式,瀏覽器整合將 無 法 運 作 。 -- -- -- <b>Warning:</b> The following options can be dangerous! -- <b>警告:</b>以下選項存在一定風險! -- -- -- Executable Files -- 可執行檔案 -- -- -- All Files -- 所有檔案 -- -- -- Select custom proxy location -- 選擇自定義的代理位置 -- -- -- Select native messaging host folder location -- 選擇本地消息主機的資料夾位置 -- -- -- -- CloneDialog -- -- Clone Options -- 複製選項 -- -- -- Append ' - Clone' to title -- 在標題後追加「 - 複製」字樣 -- -- -- Replace username and password with references -- 以引用資料取代使用者名稱與密碼 -- -- -- Copy history -- 複製歷史記錄 -- -- -- -- CsvImportWidget -- -- Import CSV fields -- 匯入 CSV 欄位 -- -- -- filename -- 檔案名稱 -- -- -- size, rows, columns -- 大小、列、欄位 -- -- -- Encoding -- 編碼方法 -- -- -- Codec -- 編/解碼 -- -- -- Text is qualified by -- 文字包裹符為 -- -- -- Fields are separated by -- 欄位分隔符為 -- -- -- Comments start with -- 註解起始符為 -- -- -- Consider '\' an escape character -- 將 '\' 當作跳脫符號 -- -- -- Preview -- 預覽 -- -- -- Imported from CSV file -- 已從 CSV 檔匯入 -- -- -- Original data: -- 原始資料: -- -- -- Error -- 錯誤 -- -- -- Error(s) detected in CSV file! -- 在 CSV 檔中偵測到錯誤! -- -- -- [%n more message(s) skipped] -- [跳過額外 %n 項訊息] -- -- -- CSV import: writer has errors: --%1 -- CSV 匯入:寫入器出錯: --%1 -- -- -- Text qualification -- 文字包裹 -- -- -- Field separation -- 欄位分隔 -- -- -- Number of header lines to discard -- 從開頭起算要拋棄的列數 -- -- -- CSV import preview -- CSV 匯入預覽 -- -- -- Column Association -- 欄位關聯 -- -- -- Last Modified -- 最後編輯 -- -- -- Password -- 密碼 -- -- -- Created -- 建立於 -- -- -- Notes -- 備註 -- -- -- Title -- 標題 -- -- -- Group -- 群組 -- -- -- URL -- URL -- -- -- Username -- 使用者名稱 -- -- -- Header lines skipped -- 跳過開頭列數 -- -- -- First line has field names -- 首列為欄位名稱 -- -- -- Not Present -- 不顯示 -- -- -- Column %1 -- 欄位 %1 -- -- -- TOTP -- TOTP -- -- -- Icon -- 圖示 -- -- -- -- CsvParserModel -- -- %n column(s) -- %n 個欄位 -- -- -- %1, %2, %3 -- file info: bytes, rows, columns -- %1、%2、%3 -- -- -- %n byte(s) -- %n 位元組 -- -- -- %n row(s) -- %n 列 -- -- -- -- Database -- -- File %1 does not exist. -- 檔案 %1 不存在。 -- -- -- Unable to open file %1. -- 無法開啟檔案 %1。 -- -- -- Error while reading the database: %1 -- 讀取資料庫時出錯:%1 -- -- -- File cannot be written as it is opened in read-only mode. -- 檔案以唯獨模式開啟,無法寫入。 -- -- -- Key not transformed. This is a bug, please report it to the developers! -- 金鑰未被轉換。請向開發者回報此項錯誤! -- -- -- %1 --Backup database located at %2 -- %1 --備份資料庫位於 %2 -- -- -- Could not save, database does not point to a valid file. -- 無法儲存,資料庫未指向任何有效檔案。 -- -- -- Could not save, database file is read-only. -- 無法儲存,資料庫檔案為唯讀狀態。 -- -- -- Database file has unmerged changes. -- 資料庫檔案有未合併的變更。 -- -- -- Recycle Bin -- 回收桶 -- -- -- Passwords -- Root group name -- 密碼 -- -- -- Database save is already in progress. -- 資料庫儲存已在進行當中。 -- -- -- Could not save, database has not been initialized! -- 無法儲存,資料庫尚未初始化! -- -- -- -- DatabaseOpenDialog -- -- Unlock Database - KeePassXC -- 解鎖資料庫 - KeePassXC -- -- -- -- DatabaseOpenWidget -- -- Key File: -- 金鑰檔: -- -- -- Refresh -- 更新 -- -- -- Don't show this warning again -- 不再顯示此警告 -- -- -- All files -- 所有檔案 -- -- -- Key files -- 金鑰檔案 -- -- -- Select key file -- 選擇金鑰檔案 -- -- -- Failed to open key file: %1 -- 開啟金鑰檔案失敗:%1 -- -- -- Unlock KeePassXC Database -- 解鎖 KeePassXC 資料庫 -- -- -- Enter Password: -- 輸入密碼: -- -- -- Password field -- 密碼欄位 -- -- -- Hardware key slot selection -- 硬體金鑰槽位選擇 -- -- -- Browse for key file -- 瀏覽金鑰檔案 -- -- -- Browse... -- 瀏覽... -- -- -- Refresh hardware tokens -- 更新硬體令牌 -- -- -- Hardware Key: -- 硬體金鑰: -- -- -- Hardware key help -- 硬體金鑰幫助 -- -- -- TouchID for Quick Unlock -- TouchID 快速解鎖 -- -- -- Unlock failed and no password given -- 解鎖失敗且未提供密碼 -- -- -- Unlocking the database failed and you did not enter a password. --Do you want to retry with an "empty" password instead? -- --To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. -- 解鎖資料庫失敗,且您未輸入任何密碼。 --是否要改用「空白」密碼重新嘗試? -- --為了避免出現此錯誤,您必須前往「資料庫設定 / 安全」並重新設定您的密碼。 -- -- -- Retry with empty password -- 以空白密碼重試 -- -- -- Enter Additional Credentials (if any): -- 輸入額外的驗證資訊(如有需要): -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- <p>您可以使用諸如 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> 等實體安全金鑰,只要它們擁有可設置 HMAC-SHA1 的槽位。</p> --<p>點擊獲得更多資訊...</p> -- -- -- Key file help -- 金鑰檔案幫助 -- -- -- ? -- ? -- -- -- Cannot use database file as key file -- 無法使用資料庫檔案作為金鑰檔案 -- -- -- You cannot use your database file as a key file. --If you do not have a key file, please leave the field empty. -- 您不能使用資料庫作為自己的金鑰檔案。 --若您沒有金鑰檔案,請將欄位留空。 -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- <p>除了密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。使用資料庫的安全設定可以產生該檔案。</p><p>這個<strong>並不是</strong>您的 *.kdbx 資料庫檔案!<br>若您沒有金鑰檔案,則留空欄位。</p><p>點擊獲得更多資訊...</p> -- -- -- Key file to unlock the database -- 解鎖資料庫的金鑰檔案 -- -- -- Please touch the button on your YubiKey! -- 請觸摸您 YubiKey 上的按鈕! -- -- -- Detecting hardware keys… -- 正在偵測硬體金鑰… -- -- -- No hardware keys detected -- 未偵測到硬體金鑰 -- -- -- Select hardware key… -- 選擇硬體金鑰… -- -- -- Old key file format -- 舊的金鑰檔案格式 -- -- -- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> -- 您使用的金鑰檔案格式版本過舊,KeePassXC 可能<br>在未來停止支援。<br><br>請考慮透過以下方式產生一組新的金鑰檔案:<br><strong>資料庫 / 資料庫安全 / 更改金鑰檔案。</strong><br> -- -- -- -- DatabaseSettingWidgetMetaData -- -- Passwords -- 密碼 -- -- -- -- DatabaseSettingsDialog -- -- Advanced Settings -- 進階設定 -- -- -- General -- 通用 -- -- -- Security -- 安全 -- -- -- Encryption Settings -- 加密設定 -- -- -- Browser Integration -- 瀏覽器整合 -- -- -- Database Credentials -- 資料庫憑證 -- -- -- -- DatabaseSettingsWidgetBrowser -- -- KeePassXC-Browser settings -- KeePassXC 瀏覽器擴充設定 -- -- -- Stored keys -- 已保存金鑰 -- -- -- Remove -- 移除 -- -- -- Delete the selected key? -- 刪除所選金鑰? -- -- -- Do you really want to delete the selected key? --This may prevent connection to the browser plugin. -- 真的要刪除選擇的金鑰? --這可能導致與瀏覽器插件的連結受阻。 -- -- -- Key -- -- -- -- Value -- -- -- -- Enable Browser Integration to access these settings. -- 啟用瀏覽器整合來存取這些設定。 -- -- -- Disconnect all browsers -- 中斷與所有瀏覽器的連結 -- -- -- Do you really want to disconnect all browsers? --This may prevent connection to the browser plugin. -- 真的要中斷與所有瀏覽器的連結? --這可能導致與瀏覽器插件的連結受阻。 -- -- -- KeePassXC: No keys found -- KeePassXC: 找不到金鑰 -- -- -- No shared encryption keys found in KeePassXC settings. -- 在 KeePassXC 設定中找不到共享加密金鑰。 -- -- -- KeePassXC: Removed keys from database -- KeePassXC: 從資料庫移除金鑰 -- -- -- Successfully removed %n encryption key(s) from KeePassXC settings. -- 成功從 KeePassXC 設定中移除 %n 組加密金鑰。 -- -- -- Forget all site-specific settings on entries -- 遺忘項目的網站個別設定 -- -- -- Do you really want forget all site-specific settings on every entry? --Permissions to access entries will be revoked. -- 真的要遺忘每個項目的所有網站個別設定? --存取項目的權限將會被撤銷。 -- -- -- Removing stored permissions… -- 正在移除保存的權限… -- -- -- Abort -- 中止 -- -- -- KeePassXC: Removed permissions -- KeePassXC: 已移除權限 -- -- -- Successfully removed permissions from %n entry(s). -- 成功從 %n 個項目移除權限。 -- -- -- KeePassXC: No entry with permissions found! -- KeePassXC: 找不到擁有權限的項目! -- -- -- The active database does not contain an entry with permissions. -- 目前作用的資料庫中沒有任何項目擁有權限。 -- -- -- Move KeePassHTTP attributes to custom data -- 移動 KeePassHTTP 屬性至自定義資料 -- -- -- Do you really want to move all legacy browser integration data to the latest standard? --This is necessary to maintain compatibility with the browser plugin. -- 真的要將所有過時的瀏覽器整合資料遷移至最新標準? --這是為了維持與瀏覽器插件的相容性。 -- -- -- Stored browser keys -- 已保存的瀏覽器金鑰 -- -- -- Remove selected key -- 移除所選金鑰 -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- 移動 KeePassHTTP 屬性至 KeePassXC 瀏覽器擴充的自定義資料 -- -- -- Refresh database root group ID -- 更新資料庫的根群組 ID -- -- -- Created -- 建立於 -- -- -- Refresh database ID -- 更新資料庫 ID -- -- -- Do you really want refresh the database ID? --This is only necessary if your database is a copy of another and the browser extension cannot connect. -- 真的要更新資料庫的 ID? --只有當資料庫屬於另一份複本,且瀏覽器擴充無法連結時,才有必要進行。 -- -- -- -- DatabaseSettingsWidgetDatabaseKey -- -- Add additional protection... -- 加入額外保護... -- -- -- No password set -- 未設定密碼 -- -- -- WARNING! You have not set a password. Using a database without a password is strongly discouraged! -- --Are you sure you want to continue without a password? -- 警告!您尚未設定一組密碼。強烈不建議使用不帶密碼的資料庫! -- --您確定要在沒有密碼的情形下繼續? -- -- -- Continue without password -- 不使用密碼並繼續 -- -- -- No encryption key added -- 未加入加密金鑰 -- -- -- You must add at least one encryption key to secure your database! -- 您必須加入至少一組加密金鑰來保護您的資料庫! -- -- -- Unknown error -- 未知錯誤 -- -- -- Failed to change database credentials -- 更改資料庫憑證失敗 -- -- -- -- DatabaseSettingsWidgetEncryption -- -- Encryption Algorithm: -- 加密演算法: -- -- -- AES: 256 Bit (default) -- AES: 256 Bit(預設) -- -- -- Twofish: 256 Bit -- Twofish: 256 Bit -- -- -- Key Derivation Function: -- 金鑰推導函式: -- -- -- Transform rounds: -- 轉換回合數: -- -- -- Memory Usage: -- 記憶體用量: -- -- -- Parallelism: -- 平行運算: -- -- -- Decryption Time: -- 解密時間: -- -- -- ?? s -- ?? 秒 -- -- -- Change -- 更改 -- -- -- Higher values offer more protection, but opening the database will take longer. -- 較高的值提供較多保護,但需要更長的時間開啟資料庫。 -- -- -- Database format: -- 資料庫格式: -- -- -- This is only important if you need to use your database with other programs. -- 只有在您需要使用其他程式處理此資料庫時才重要。 -- -- -- KDBX 4.0 (recommended) -- KDBX 4.0(推薦) -- -- -- KDBX 3.1 -- KDBX 3.1 -- -- -- unchanged -- Database decryption time is unchanged -- 不變 -- -- -- Number of rounds too high -- Key transformation rounds -- 回合數太高 -- -- -- You are using a very high number of key transform rounds with Argon2. -- --If you keep this number, your database may take hours or days (or even longer) to open! -- 您為 Argon2 使用了非常高的金鑰轉換回合數。 -- --如果執意使用此數量,您的資料庫可能要花費數小時、數天(甚至更久時間)才能打開! -- -- -- Understood, keep number -- 了解,仍使用此數量 -- -- -- Cancel -- 取消 -- -- -- Number of rounds too low -- Key transformation rounds -- 回合數太低 -- -- -- You are using a very low number of key transform rounds with AES-KDF. -- --If you keep this number, your database may be too easy to crack! -- 您為 AES-KDF 使用了非常低的金鑰轉換回合數。 -- --如果執意使用此數量,要破解您的資料庫會變得非常容易! -- -- -- KDF unchanged -- KDF 不變 -- -- -- Failed to transform key with new KDF parameters; KDF unchanged. -- 無法用新的 KDF 參數轉換金鑰;KDF 保持不變。 -- -- -- MiB -- Abbreviation for Mebibytes (KDF settings) -- MiB -- -- -- thread(s) -- Threads for parallel execution (KDF settings) -- 執行緒 -- -- -- Change existing decryption time -- 更改目前解密時間 -- -- -- Decryption time in seconds -- 解密時間,以秒計算 -- -- -- Database format -- 資料庫格式 -- -- -- Encryption algorithm -- 加密演算法 -- -- -- Key derivation function -- 金鑰推導函式 -- -- -- Transform rounds -- 轉換回合數 -- -- -- Memory usage -- 記憶體用量 -- -- -- Parallelism -- 平行運算 -- -- -- ?? ms -- ?? 毫秒 -- -- -- ? s -- ? 秒 -- -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- Exposed Entries -- 已開放項目 -- -- -- Don't expose this database -- 不要開放此資料庫 -- -- -- Expose entries under this group: -- 開放此群組下的項目: -- -- -- Enable Secret Service to access these settings. -- 啟用保密服務來存取這些設定。 -- -- -- -- DatabaseSettingsWidgetGeneral -- -- Database Meta Data -- 資料庫的中繼資料 -- -- -- Database name: -- 資料庫名稱: -- -- -- Database description: -- 資料庫描述: -- -- -- Default username: -- 預設使用者名稱: -- -- -- History Settings -- 歷史設定 -- -- -- Max. history items: -- 最大歷史記錄數: -- -- -- Max. history size: -- 最大歷史記錄大小: -- -- -- MiB -- MiB -- -- -- Use recycle bin -- 使用回收桶 -- -- -- Additional Database Settings -- 其他資料庫設定 -- -- -- Database name field -- 資料庫名稱欄位 -- -- -- Database description field -- 資料庫描述欄位 -- -- -- Default username field -- 預設使用者名稱欄位 -- -- -- Maximum number of history items per entry -- 每個項目的最大歷史記錄數 -- -- -- Maximum size of history per entry -- 每個項目的最大歷史記錄大小 -- -- -- Delete Recycle Bin -- 刪除回收桶 -- -- -- Do you want to delete the current recycle bin and all its contents? --This action is not reversible. -- 是否要刪除目前的回收桶以及裡面所有內容? --此操作無法復原。 -- -- -- (old) -- (舊) -- -- -- Enable compression (recommended) -- 啟用壓縮(推薦) -- -- -- -- DatabaseSettingsWidgetKeeShare -- -- Sharing -- 分享 -- -- -- Breadcrumb -- 導覽路徑 -- -- -- Type -- 類型 -- -- -- Path -- 路徑 -- -- -- Last Signer -- 最後一次簽署 -- -- -- Certificates -- 證書 -- -- -- > -- Breadcrumb separator -- > -- -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- Database Name: -- 資料庫名稱: -- -- -- Description: -- 描述: -- -- -- Database name field -- 資料庫名稱欄位 -- -- -- Database description field -- 資料庫描述欄位 -- -- -- -- DatabaseTabWidget -- -- KeePass 2 Database -- KeePass 2 資料庫 -- -- -- All files -- 所有檔案 -- -- -- Open database -- 開啟資料庫 -- -- -- CSV file -- CSV 檔 -- -- -- Merge database -- 合併資料庫 -- -- -- Open KeePass 1 database -- 開啟 KeePass 1 資料庫 -- -- -- KeePass 1 database -- KeePass 1 資料庫 -- -- -- Export database to CSV file -- 匯出資料庫至 CSV 檔 -- -- -- Writing the CSV file failed. -- 寫入 CSV 檔失敗。 -- -- -- Database creation error -- 資料庫建立錯誤 -- -- -- The created database has no key or KDF, refusing to save it. --This is definitely a bug, please report it to the developers. -- 建立的資料庫沒有金鑰或 KDF,拒絕儲存。 --請向開發者回報這個明顯的錯誤。 -- -- -- Select CSV file -- 選擇 CSV 檔 -- -- -- New Database -- 新資料庫 -- -- -- %1 [New Database] -- Database tab name modifier -- %1 [新資料庫] -- -- -- %1 [Locked] -- Database tab name modifier -- %1 [已鎖定] -- -- -- %1 [Read-only] -- Database tab name modifier -- %1 [唯讀] -- -- -- Failed to open %1. It either does not exist or is not accessible. -- 開啟 %1 失敗。此項目不存在或無法存取。 -- -- -- Export database to HTML file -- 匯出資料庫至 HTML 檔 -- -- -- HTML file -- HTML 檔 -- -- -- Writing the HTML file failed. -- 寫入 HTML 檔失敗。 -- -- -- Export Confirmation -- 匯出確認 -- -- -- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? -- 您正要匯出資料庫至未加密的檔案。您的密碼及敏感資料將不受任何保護!您確定要繼續進行? -- -- -- Open OPVault -- 開啟 OPVault -- -- -- -- DatabaseWidget -- -- Searching... -- 搜尋中... -- -- -- Do you really want to delete the entry "%1" for good? -- 真的要永遠刪除項目「%1」? -- -- -- Do you really want to move entry "%1" to the recycle bin? -- 真的要將項目「%1」移到回收桶? -- -- -- Do you really want to move %n entry(s) to the recycle bin? -- 真的要將 %n 個項目移到回收桶? -- -- -- Execute command? -- 執行命令? -- -- -- Do you really want to execute the following command?<br><br>%1<br> -- 真的要執行以下命令?<br><br>%1<br> -- -- -- Remember my choice -- 記住我的選擇 -- -- -- Do you really want to delete the group "%1" for good? -- 真的要永遠刪除群組「%1」? -- -- -- No current database. -- 無目前資料庫。 -- -- -- No source database, nothing to do. -- 無來源資料庫,什麼都不做。 -- -- -- Search Results (%1) -- 搜尋結果 (%1) -- -- -- No Results -- 無結果 -- -- -- File has changed -- 檔案已變更 -- -- -- The database file has changed. Do you want to load the changes? -- 資料庫檔案已被修改。是否要載入變更? -- -- -- Merge Request -- 合併要求 -- -- -- The database file has changed and you have unsaved changes. --Do you want to merge your changes? -- 資料庫檔案已被修改,且您有尚未儲存的變更。 --是否合併您的變更? -- -- -- Empty recycle bin? -- 清空回收桶? -- -- -- Are you sure you want to permanently delete everything from your recycle bin? -- 您確定要永久刪除回收桶內的所有項目? -- -- -- Do you really want to delete %n entry(s) for good? -- 真的要永遠刪除 %n 個項目? -- -- -- Delete entry(s)? -- 刪除項目? -- -- -- Move entry(s) to recycle bin? -- 移動項目到回收桶? -- -- -- Lock Database? -- 鎖定資料庫? -- -- -- You are editing an entry. Discard changes and lock anyway? -- 您正在編輯一個項目。放棄變更並直接鎖定? -- -- -- "%1" was modified. --Save changes? -- 「%1」已被修改。 --儲存變更? -- -- -- Database was modified. --Save changes? -- 資料庫已被修改。 --儲存變更? -- -- -- Save changes? -- 儲存變更? -- -- -- Could not open the new database file while attempting to autoreload. --Error: %1 -- 嘗試自動重新載入,無法開啓新的資料庫檔案。 --錯誤:%1 -- -- -- Disable safe saves? -- 停用安全存檔? -- -- -- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. --Disable safe saves and try again? -- KeePassXC 儲存資料庫已失敗數次。可能是檔案同步服務把儲存檔案鎖住了。 --停用安全儲存後再試一次? -- -- -- Passwords -- 密碼 -- -- -- Save database as -- 資料庫另存為 -- -- -- KeePass 2 Database -- KeePass 2 資料庫 -- -- -- Replace references to entry? -- 替換對項目的引用? -- -- -- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? -- 項目「%1」有 %2 個引用。是否要用值覆蓋引用、跳過此項目或直接刪除? -- -- -- Delete group -- 刪除群組 -- -- -- Move group to recycle bin? -- 移動群組到回收桶? -- -- -- Do you really want to move the group "%1" to the recycle bin? -- 真的要將群組「%1」移到回收桶? -- -- -- Successfully merged the database files. -- 成功合併資料庫檔案。 -- -- -- Database was not modified by merge operation. -- 資料庫未被合併操作修改。 -- -- -- Shared group... -- 共享群組... -- -- -- Writing the database failed: %1 -- 寫入資料庫失敗:%1 -- -- -- This database is opened in read-only mode. Autosave is disabled. -- 此資料庫以唯讀模式開啟。自動儲存已停用。 -- -- -- Save database backup -- 儲存資料庫備份 -- -- -- Could not find database file: %1 -- 未找到資料庫檔案:%1 -- -- -- -- EditEntryWidget -- -- Entry -- 項目 -- -- -- Advanced -- 進階 -- -- -- Icon -- 圖示 -- -- -- Auto-Type -- 自動輸入 -- -- -- Properties -- 屬性 -- -- -- History -- 歷史記錄 -- -- -- SSH Agent -- SSH 代理 -- -- -- n/a -- -- -- -- (encrypted) -- (已加密) -- -- -- Select private key -- 選擇私密金鑰 -- -- -- Entry history -- 項目歷史記錄 -- -- -- Add entry -- 加入項目 -- -- -- Edit entry -- 編輯項目 -- -- -- New attribute -- 新屬性 -- -- -- Are you sure you want to remove this attribute? -- 您確定要移除此屬性? -- -- -- Tomorrow -- 明天 -- -- -- %n week(s) -- %n 個禮拜 -- -- -- %n month(s) -- %n 個月 -- -- -- Entry updated successfully. -- 項目已成功更新。 -- -- -- New attribute %1 -- 新屬性 %1 -- -- -- %n year(s) -- %n 年 -- -- -- Confirm Removal -- 確認移除 -- -- -- Browser Integration -- 瀏覽器整合 -- -- -- <empty URL> -- <空白 URL> -- -- -- Are you sure you want to remove this URL? -- 您確定要移除此 URL? -- -- -- Reveal -- 揭示 -- -- -- Hide -- 隱藏 -- -- -- Unsaved Changes -- 未儲存的變更 -- -- -- Would you like to save changes to this entry? -- 您是否要儲存此項目的變更? -- -- -- [PROTECTED] Press Reveal to view or edit -- [受保護內容] 按「揭示」以檢視或編輯 -- -- -- Invalid Entry -- 無效的項目 -- -- -- An external merge operation has invalidated this entry. --Unfortunately, any changes made have been lost. -- 一項外部合併操作使此項目無效。 --不幸的是,所有更改已經損失。 -- -- -- -- EditEntryWidgetAdvanced -- -- Additional attributes -- 其他屬性 -- -- -- Add -- 加入 -- -- -- Remove -- 移除 -- -- -- Edit Name -- 編輯名稱 -- -- -- Protect -- 保護 -- -- -- Reveal -- 揭示 -- -- -- Attachments -- 附件 -- -- -- Foreground Color: -- 前景顏色: -- -- -- Background Color: -- 背景顏色: -- -- -- Attribute selection -- 屬性選擇 -- -- -- Attribute value -- 屬性值 -- -- -- Add a new attribute -- 加入新屬性 -- -- -- Remove selected attribute -- 移除所選屬性 -- -- -- Edit attribute name -- 編輯屬性名稱 -- -- -- Toggle attribute protection -- 切換屬性保護 -- -- -- Show a protected attribute -- 顯示被保護的屬性 -- -- -- Foreground color selection -- 前景顏色選擇 -- -- -- Background color selection -- 背景顏色選擇 -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- <html><head/><body><p>若勾選此項,項目將不會出現在健康檢查或是 HIBP 等報告,即使項目未通過其品質要求(例如,密碼熵值不足或重複使用)。如果密碼本身有所限制(像是必須使用四位數 PIN),您可以設定將其勾選以保持報告清潔。</p></body></html> -- -- -- Exclude from database reports -- 從資料庫報告排除 -- -- -- -- EditEntryWidgetAutoType -- -- Enable Auto-Type for this entry -- 啟用此項目的自動輸入 -- -- -- Window Associations -- 視窗關聯 -- -- -- + -- + -- -- -- - -- - -- -- -- Window title: -- 視窗標題: -- -- -- Use a specific sequence for this association: -- 使用特定序列進行此關聯: -- -- -- Custom Auto-Type sequence -- 自定義自動輸入序列 -- -- -- Open Auto-Type help webpage -- 開啟自動輸入的幫助網頁 -- -- -- Existing window associations -- 即存的視窗關聯 -- -- -- Add new window association -- 加入新的視窗關聯 -- -- -- Remove selected window association -- 移除所選的視窗關聯 -- -- -- You can use an asterisk (*) to match everything -- 您可以使用星號 (*) 匹配任意字詞 -- -- -- Set the window association title -- 設定視窗關聯標題 -- -- -- You can use an asterisk to match everything -- 您可以使用星號匹配任意字詞 -- -- -- Custom Auto-Type sequence for this window -- 自定義此視窗的自動輸入序列 -- -- -- Inherit default Auto-Type sequence from the group -- 從父群組繼承預設的自動輸入序列 -- -- -- Use custom Auto-Type sequence: -- 使用自定義的自動輸入序列: -- -- -- -- EditEntryWidgetBrowser -- -- These settings affect to the entry's behaviour with the browser extension. -- 這些設定影響了項目在瀏覽器擴充下的行為。 -- -- -- General -- 一般 -- -- -- Skip Auto-Submit for this entry -- 為此項目跳過自動送出 -- -- -- Hide this entry from the browser extension -- 在瀏覽器擴充隱藏此項目 -- -- -- Additional URL's -- 其他 URL -- -- -- Add -- 加入 -- -- -- Remove -- 移除 -- -- -- Edit -- 編輯 -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- 只有出現 HTTP 基本認證對話框才會傳送此設定至瀏覽器。啟用之後,將不會在一般的登入表格顯示此項目的選項。 -- -- -- Use this entry only with HTTP Basic Auth -- 對此項目只使用 HTTP 基本認證 -- -- -- -- EditEntryWidgetHistory -- -- Show -- 顯示 -- -- -- Restore -- 還原 -- -- -- Delete -- 刪除 -- -- -- Delete all -- 刪除全部 -- -- -- Entry history selection -- 項目歷史選擇 -- -- -- Show entry at selected history state -- 顯示所選歷史狀態下的項目 -- -- -- Restore entry to selected history state -- 恢復項目至所選歷史狀態 -- -- -- Delete selected history state -- 刪除所選歷史狀態 -- -- -- Delete all history -- 刪除所有歷史 -- -- -- -- EditEntryWidgetMain -- -- URL: -- URL: -- -- -- Password: -- 密碼: -- -- -- Title: -- 標題: -- -- -- Presets -- 預先定義 -- -- -- Toggle the checkbox to reveal the notes section. -- 切換核取方塊以揭示備註欄位。 -- -- -- Username: -- 使用者名稱: -- -- -- Url field -- URL 欄位 -- -- -- Download favicon for URL -- 下載 URL 的網站圖標 -- -- -- Password field -- 密碼欄位 -- -- -- Toggle notes visible -- 切換備註可見性 -- -- -- Expiration field -- 過期欄位 -- -- -- Expiration Presets -- 過期預先定義 -- -- -- Expiration presets -- 過期預先定義 -- -- -- Notes field -- 備註欄位 -- -- -- Title field -- 標題欄位 -- -- -- Username field -- 使用者名稱欄位 -- -- -- Toggle expiration -- 切換過期時間 -- -- -- Notes: -- 附註: -- -- -- https://example.com -- https://example.com -- -- -- Expires: -- 過期: -- -- -- Edit Entry -- 編輯項目 -- -- -- -- EditEntryWidgetSSHAgent -- -- Form -- 表單 -- -- -- Remove key from agent after -- 多久後從代理刪除金鑰 -- -- -- seconds -- -- -- -- Fingerprint -- 指紋 -- -- -- Remove key from agent when database is closed/locked -- 關閉/鎖定資料庫時,從代理刪除金鑰 -- -- -- Public key -- 公開金鑰 -- -- -- Add key to agent when database is opened/unlocked -- 當打開/解鎖資料庫時,向代理加入金鑰 -- -- -- Comment -- 註解 -- -- -- Decrypt -- 解密 -- -- -- n/a -- -- -- -- Copy to clipboard -- 複製到剪貼簿 -- -- -- Private key -- 私密金鑰 -- -- -- External file -- 外部檔案 -- -- -- Browse... -- Button for opening file dialog -- 瀏覽... -- -- -- Attachment -- 附件 -- -- -- Add to agent -- 加入到代理 -- -- -- Remove from agent -- 從代理刪除 -- -- -- Require user confirmation when this key is used -- 使用此金鑰時需要使用者確認 -- -- -- Remove key from agent after specified seconds -- 於指定秒數後從代理移除金鑰 -- -- -- Browser for key file -- 瀏覽金鑰檔案 -- -- -- External key file -- 外部金鑰檔案 -- -- -- Select attachment file -- 選擇附件檔案 -- -- -- -- EditGroupWidget -- -- Group -- 群組 -- -- -- Icon -- 圖示 -- -- -- Properties -- 屬性 -- -- -- Add group -- 加入群組 -- -- -- Edit group -- 編輯群組 -- -- -- Enable -- 啟用 -- -- -- Disable -- 停用 -- -- -- Inherit from parent group (%1) -- 繼承自上層群組 (%1) -- -- -- Entry has unsaved changes -- 項目有未儲存的變更 -- -- -- -- EditGroupWidgetKeeShare -- -- Type: -- 類型: -- -- -- Path: -- 路徑: -- -- -- Password: -- 密碼: -- -- -- Inactive -- 無效 -- -- -- KeeShare unsigned container -- KeeShare 未簽署容器 -- -- -- KeeShare signed container -- KeeShare 簽署容器 -- -- -- Select import source -- 選擇匯入來源 -- -- -- Select export target -- 選擇匯出目標 -- -- -- Select import/export file -- 選擇匯入/匯出檔案 -- -- -- Clear -- 清除 -- -- -- Import -- 匯入 -- -- -- Export -- 匯出 -- -- -- Synchronize -- 同步 -- -- -- Your KeePassXC version does not support sharing this container type. --Supported extensions are: %1. -- 您的 KeePassXC 版本不支援此容器類型。 --受支援的擴充為:%1。 -- -- -- %1 is already being exported by this database. -- %1 已被此資料庫匯出。 -- -- -- %1 is already being imported by this database. -- %1 已被此資料庫匯入。 -- -- -- %1 is being imported and exported by different groups in this database. -- %1 在此資料庫內被不同的群組匯入並匯出。 -- -- -- KeeShare is currently disabled. You can enable import/export in the application settings. -- KeeShare is a proper noun -- KeeShare 目前已被停用。您可以到應用程式設定啟用匯入/匯出功能。 -- -- -- Database export is currently disabled by application settings. -- 資料庫匯出目前被應用程式設定停用。 -- -- -- Database import is currently disabled by application settings. -- 資料庫匯入目前被應用程式設定停用。 -- -- -- Sharing mode field -- 分享模式欄位 -- -- -- Path to share file field -- 分享檔案路徑欄位 -- -- -- Password field -- 密碼欄位 -- -- -- Clear fields -- 清除欄位 -- -- -- Browse for share file -- 瀏覽分享檔案 -- -- -- Browse... -- 瀏覽... -- -- -- -- EditGroupWidgetMain -- -- Name field -- 名稱欄位 -- -- -- Notes field -- 備註欄位 -- -- -- Toggle expiration -- 切換過期時間 -- -- -- Auto-Type toggle for this and sub groups -- 切換此群組及其子群組的自動輸入 -- -- -- Expiration field -- 過期欄位 -- -- -- Search toggle for this and sub groups -- 切換此群組及其子群組的搜尋 -- -- -- Default auto-type sequence field -- 預設自動輸入序列欄位 -- -- -- Expires: -- 過期: -- -- -- Use default Auto-Type sequence of parent group -- 使用父群組預設的自動輸入序列 -- -- -- Auto-Type: -- 自動輸入: -- -- -- Search: -- 搜尋: -- -- -- Notes: -- 附註: -- -- -- Name: -- 名稱: -- -- -- Set default Auto-Type sequence -- 設定預設自動輸入序列 -- -- -- Edit Group -- 編輯群組 -- -- -- -- EditWidgetIcons -- -- Add custom icon -- 加入自定義圖示 -- -- -- Delete custom icon -- 刪除自定義圖示 -- -- -- Download favicon -- 下載網站圖標 -- -- -- Unable to fetch favicon. -- 無法擷取網站圖標。 -- -- -- Images -- 圖片 -- -- -- All files -- 所有檔案 -- -- -- Confirm Delete -- 確認刪除 -- -- -- Select Image(s) -- 選擇圖示 -- -- -- Successfully loaded %1 of %n icon(s) -- 成功載入 %1 / %n 個圖示 -- -- -- No icons were loaded -- 未載入任何圖示 -- -- -- %n icon(s) already exist in the database -- %n 個圖示已存在於資料庫 -- -- -- The following icon(s) failed: -- 以下圖示失敗: -- -- -- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? -- 此圖示由 %n 個項目使用,將會以預設圖示替換。您確定要刪除它? -- -- -- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security -- 您可以到「工具」->「設定」->「安全」啟用 DuckDuckGo 的網站圖示服務 -- -- -- Download favicon for URL -- 下載 URL 的網站圖標 -- -- -- Apply selected icon to subgroups and entries -- 套用所選圖示至子群組與項目 -- -- -- Also apply to child groups -- 也套用至子群組 -- -- -- Also apply to child entries -- 也套用至子項目 -- -- -- Also apply to all children -- 也套用至所有子群組與項目 -- -- -- Existing icon selected. -- 選擇了已存在的圖示。 -- -- -- Use default icon -- 使用預設的圖示 -- -- -- Use custom icon -- 使用自定義圖示 -- -- -- Apply icon to... -- 套用圖示至... -- -- -- Apply to this group only -- 只套用至此群組 -- -- -- -- EditWidgetProperties -- -- Created: -- 建立於: -- -- -- Modified: -- 修改於: -- -- -- Accessed: -- 存取於: -- -- -- Uuid: -- Uuid: -- -- -- Plugin Data -- 插件資料 -- -- -- Remove -- 移除 -- -- -- Delete plugin data? -- 刪除插件資料? -- -- -- Do you really want to delete the selected plugin data? --This may cause the affected plugins to malfunction. -- 真的要刪除選擇的插件資料? --這可能導致受影響的插件出現問題。 -- -- -- Key -- -- -- -- Value -- -- -- -- Datetime created -- 建立日期與時間 -- -- -- Datetime modified -- 修改日期與時間 -- -- -- Datetime accessed -- 存取日期與時間 -- -- -- Unique ID -- 獨立 ID -- -- -- Plugin data -- 插件資料 -- -- -- Remove selected plugin data -- 移除所選的插件資料 -- -- -- -- Entry -- -- %1 - Clone -- %1 - 複製 -- -- -- -- EntryAttachmentsModel -- -- Name -- 名稱 -- -- -- Size -- 大小 -- -- -- -- EntryAttachmentsWidget -- -- Form -- 表單 -- -- -- Add -- 加入 -- -- -- Remove -- 移除 -- -- -- Open -- 開啟 -- -- -- Save -- 儲存 -- -- -- Select files -- 選擇檔案 -- -- -- Are you sure you want to remove %n attachment(s)? -- 您確定要移除 %n 個附件? -- -- -- Save attachments -- 儲存附件 -- -- -- Unable to create directory: --%1 -- 無法建立資料夾: --%1 -- -- -- Are you sure you want to overwrite the existing file "%1" with the attachment? -- 您確定要用附件覆蓋現有的檔案「%1」? -- -- -- Confirm overwrite -- 確認覆蓋 -- -- -- Unable to save attachments: --%1 -- 無法儲存附件: --%1 -- -- -- Unable to open attachment: --%1 -- 無法開啟附件: --%1 -- -- -- Unable to open attachments: --%1 -- 無法開啟附件: --%1 -- -- -- Confirm remove -- 確認移除 -- -- -- Unable to open file(s): --%1 -- 無法開啟檔案: --%1 -- -- -- Attachments -- 附件 -- -- -- Add new attachment -- 加入新附件 -- -- -- Remove selected attachment -- 移除所選附件 -- -- -- Open selected attachment -- 開啟所選附件 -- -- -- Save selected attachment to disk -- 儲存所選附件至磁碟 -- -- -- %1 is a big file (%2 MB). --Your database may get very large and reduce performance. -- --Are you sure to add this file? -- %1 檔案過大 (%2 MB)。 --可能導致您的資料庫過大並降低效能。 --您確定要加入這個檔案? -- -- -- Confirm Attachment -- 確認附件 -- -- -- -- EntryAttributesModel -- -- Name -- 名稱 -- -- -- -- EntryHistoryModel -- -- Last modified -- 最後修改於 -- -- -- Title -- 標題 -- -- -- Username -- 使用者名稱 -- -- -- URL -- URL -- -- -- -- EntryModel -- -- Ref: -- Reference abbreviation -- 引用: -- -- -- Group -- 群組 -- -- -- Title -- 標題 -- -- -- Username -- 使用者名稱 -- -- -- URL -- URL -- -- -- Never -- 從不 -- -- -- Password -- 密碼 -- -- -- Notes -- 備註 -- -- -- Expires -- 過期 -- -- -- Created -- 建立於 -- -- -- Modified -- 修改於 -- -- -- Accessed -- 存取於 -- -- -- Attachments -- 附件 -- -- -- Size -- 大小 -- -- -- Group name -- 群組名稱 -- -- -- Entry title -- 項目標題 -- -- -- Entry notes -- 項目備註 -- -- -- Entry expires at -- 項目過期於 -- -- -- Creation date -- 建立日期 -- -- -- Last modification date -- 最近修改日期 -- -- -- Last access date -- 最近存取日期 -- -- -- Attached files -- 附加檔案 -- -- -- Entry size -- 項目大小 -- -- -- Has attachments -- 有附件 -- -- -- Has TOTP one-time password -- 有 TOTP 一次密碼 -- -- -- -- EntryPreviewWidget -- -- Close -- 關閉 -- -- -- General -- 通用 -- -- -- Username -- 使用者名稱 -- -- -- Password -- 密碼 -- -- -- Expiration -- 過期 -- -- -- URL -- URL -- -- -- Attributes -- 屬性 -- -- -- Attachments -- 附件 -- -- -- Notes -- 備註 -- -- -- Autotype -- 自動輸入 -- -- -- Window -- 視窗 -- -- -- Sequence -- 序列 -- -- -- Searching -- 搜尋 -- -- -- Search -- 搜尋 -- -- -- Clear -- 清除 -- -- -- Never -- 從不 -- -- -- [PROTECTED] -- [受保護內容] -- -- -- Enabled -- 啟用 -- -- -- Disabled -- 停用 -- -- -- Share -- 共享 -- -- -- Display current TOTP value -- 顯示目前 TOTP 值 -- -- -- Advanced -- 進階 -- -- -- Default Sequence -- 預設序列 -- -- -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- attributes line -- <tr><td><b>%1</b>:</td><td>%2</td></tr> -- -- -- -- EntryURLModel -- -- Invalid URL -- 無效的 URL -- -- -- -- EntryView -- -- Fit to window -- 符合視窗 -- -- -- Fit to contents -- 符合內容 -- -- -- Reset to defaults -- 重置為預設值 -- -- -- Has attachments -- Entry attachment icon toggle -- 有附件 -- -- -- Has TOTP -- Entry TOTP icon toggle -- 有 TOTP -- -- -- -- FdoSecrets::Item -- -- Entry "%1" from database "%2" was used by %3 -- 項目「%1」來自資料庫「%2」,被 %3 使用 -- -- -- -- FdoSecrets::Service -- -- Failed to register DBus service at %1.<br/> -- 於 %1 註冊 DBus 服務失敗。<br/> -- -- -- %n Entry(s) was used by %1 -- %1 is the name of an application -- %n 個項目被 %1 使用 -- -- -- -- FdoSecrets::SettingsDatabaseModel -- -- File Name -- 檔案名稱 -- -- -- Group -- 群組 -- -- -- Manage -- 管理 -- -- -- Unlock to show -- 解鎖以顯示 -- -- -- None -- -- -- -- -- FdoSecrets::SettingsSessionModel -- -- Application -- 應用程式 -- -- -- Manage -- 管理 -- -- -- -- FdoSecretsPlugin -- -- <b>Fdo Secret Service:</b> %1 -- <b>Fdo 保密服務:</b> %1 -- -- -- Unknown -- Unknown PID -- 未知 -- -- -- Unknown -- Unknown executable path -- 未知 -- -- -- <i>PID: %1, Executable: %2</i> -- <i>PID: 1234, Executable: /path/to/exe</i> -- <i>PID: %1,執行檔: %2</i> -- -- -- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. -- 另一個保密服務正在執行 (%1)。<br/>請先停止/移除它才能重新啟用保密服務整合。 -- -- -- -- Group -- -- [empty] -- group has no children -- [空白] -- -- -- -- HibpDownloader -- -- Online password validation failed -- 線上密碼驗證失敗 -- -- -- -- IconDownloaderDialog -- -- Download Favicons -- 下載網站圖標 -- -- -- Cancel -- 取消 -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- 下載圖示時碰到問題了? --您可以到應用程式設定的安全一欄啟用 DuckDuckGo 的網站圖示服務。 -- -- -- Close -- 關閉 -- -- -- URL -- URL -- -- -- Status -- 狀態 -- -- -- Please wait, processing entry list... -- 請稍候,正在處理項目清單... -- -- -- Downloading... -- 正在下載... -- -- -- Ok -- 確定 -- -- -- Already Exists -- 已存在 -- -- -- Download Failed -- 下載失敗 -- -- -- Downloading favicons (%1/%2)... -- 正在下載網站圖標 (%1/%2)... -- -- -- -- KMessageWidget -- -- &Close -- 關閉 (&C) -- -- -- Close message -- 關閉訊息 -- -- -- -- Kdbx3Reader -- -- missing database headers -- 缺少資料庫標頭 -- -- -- Header doesn't match hash -- 標頭與雜湊值不匹配 -- -- -- Invalid header id size -- 無效的標頭 ID 大小 -- -- -- Invalid header field length -- 無效的標頭欄位長度 -- -- -- Invalid header data length -- 無效的資料長度 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 所提供的憑證無效,請再嘗試一遍。 --若此情形一再發生,代表您的資料庫檔案可能已損毀。 -- -- -- Unable to calculate database key -- 無法計算資料庫金鑰 -- -- -- Unable to issue challenge-response: %1 -- 無法發佈挑戰應答:%1 -- -- -- -- Kdbx3Writer -- -- Unable to issue challenge-response: %1 -- 無法發佈挑戰應答:%1 -- -- -- Unable to calculate database key -- 無法計算資料庫金鑰 -- -- -- -- Kdbx4Reader -- -- missing database headers -- 缺少資料庫標頭 -- -- -- Invalid header checksum size -- 無效的標頭校驗大小 -- -- -- Header SHA256 mismatch -- SHA256 標頭不相符 -- -- -- Unknown cipher -- 未知的加密法 -- -- -- Invalid header id size -- 無效的標頭 ID 大小 -- -- -- Invalid header field length -- 無效的標頭欄位長度 -- -- -- Invalid header data length -- 無效的資料長度 -- -- -- Failed to open buffer for KDF parameters in header -- 無法打開標頭中 KDF 參數的緩衝區 -- -- -- Unsupported key derivation function (KDF) or invalid parameters -- 不支援的金鑰衍生函數 (KDF) 或參數無效 -- -- -- Legacy header fields found in KDBX4 file. -- 在 KDBX4 檔案中找到的舊版標頭欄位。 -- -- -- Invalid inner header id size -- 無效的內部標頭 ID 大小 -- -- -- Invalid inner header field length -- 無效的內部標頭欄位長度 -- -- -- Invalid inner header binary size -- 無效的內部標頭二進位大小 -- -- -- Unsupported KeePass variant map version. -- Translation: variant map = data structure for storing meta data -- 不支援的 KeePass 變體映射版本。 -- -- -- Invalid variant map entry name length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射項目名稱長度 -- -- -- Invalid variant map entry name data -- Translation: variant map = data structure for storing meta data -- 無效的變體映射項目名稱資料 -- -- -- Invalid variant map entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射項目值長度 -- -- -- Invalid variant map entry value data -- Translation comment: variant map = data structure for storing meta data -- 無效的變體映射項目值資料 -- -- -- Invalid variant map Bool entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射 Bool 項目值長度 -- -- -- Invalid variant map Int32 entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射 Int32 項目值長度 -- -- -- Invalid variant map UInt32 entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射 UInt32 項目值長度 -- -- -- Invalid variant map Int64 entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射 Int64 項目值長度 -- -- -- Invalid variant map UInt64 entry value length -- Translation: variant map = data structure for storing meta data -- 無效的變體映射 UInt64 項目值長度 -- -- -- Invalid variant map entry type -- Translation: variant map = data structure for storing meta data -- 無效的變體映射項目類型 -- -- -- Invalid variant map field type size -- Translation: variant map = data structure for storing meta data -- 無效的變體映射欄位類型大小 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 所提供的憑證無效,請再嘗試一遍。 --若此情形一再發生,代表您的資料庫檔案可能已損毀。 -- -- -- (HMAC mismatch) -- (HMAC 不符) -- -- -- Unable to calculate database key: %1 -- 無法計算資料庫金鑰:%1 -- -- -- -- Kdbx4Writer -- -- Invalid symmetric cipher algorithm. -- 無效的對稱加密演算法。 -- -- -- Invalid symmetric cipher IV size. -- IV = Initialization Vector for symmetric cipher -- 無效的對稱加密初始向量大小。 -- -- -- Failed to serialize KDF parameters variant map -- Translation comment: variant map = data structure for storing meta data -- 無法序列化 KDF 參數變體映射 -- -- -- Unable to calculate database key: %1 -- 無法計算資料庫金鑰:%1 -- -- -- -- KdbxReader -- -- Unsupported cipher -- 不支援的加密法 -- -- -- Invalid compression flags length -- 不正確壓縮旗幟長度 -- -- -- Unsupported compression algorithm -- 不支援的壓縮演算法 -- -- -- Invalid master seed size -- 無效的主種子大小 -- -- -- Invalid transform seed size -- 無效的轉換種子大小 -- -- -- Invalid transform rounds size -- 無效的轉換回合數 -- -- -- Invalid start bytes size -- 無效的起始位元組大小 -- -- -- Invalid random stream id size -- 無效的隨機資料流 ID 大小 -- -- -- Invalid inner random stream cipher -- 無效的內部隨機串流加密法 -- -- -- Not a KeePass database. -- 並非 KeePass 資料庫。 -- -- -- The selected file is an old KeePass 1 database (.kdb). -- --You can import it by clicking on Database > 'Import KeePass 1 database...'. --This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. -- 所選檔案為舊式 KeePass 1 資料庫 (.kdb)。 -- --您可以點擊「資料庫」 > 「匯入 KeePass 1 資料庫...」來匯入它。 --這是單向遷移。你無法用舊的 KeePassX 0.4 的版本開啟已匯入的資料庫。 -- -- -- Unsupported KeePass 2 database version. -- 不支援的 KeePass 2 資料庫版本。 -- -- -- Invalid cipher uuid length: %1 (length=%2) -- 無效的加密法 UUID 長度: %1 (length=%2) -- -- -- Unable to parse UUID: %1 -- 無法剖析 UUID: %1 -- -- -- Failed to read database file. -- 讀取資料庫檔案失敗。 -- -- -- -- KdbxXmlReader -- -- XML parsing failure: %1 -- XML 分析失敗:%1 -- -- -- No root group -- 沒有根群組 -- -- -- Missing icon uuid or data -- 缺少圖示的 uuid 或資料 -- -- -- Missing custom data key or value -- 缺少自定義的資料鍵或值 -- -- -- Multiple group elements -- 多重群組元素 -- -- -- Null group uuid -- 空的群組 uuid -- -- -- Invalid group icon number -- 無效的群組圖示標號 -- -- -- Invalid EnableAutoType value -- 無效的 EnableAutoType 值 -- -- -- Invalid EnableSearching value -- 無效的 EnableSearching 值 -- -- -- No group uuid found -- 找不到群組 uuid -- -- -- Null DeleteObject uuid -- 空的 DeleteObject uuid -- -- -- Missing DeletedObject uuid or time -- 缺少 DeletedObject uuid 或時間 -- -- -- Null entry uuid -- 空的項目 uuid -- -- -- Invalid entry icon number -- 無效的項目圖示編號 -- -- -- History element in history entry -- 歷史記錄項目中的歷史元素 -- -- -- No entry uuid found -- 找不到項目 uuid -- -- -- History element with different uuid -- 具有不同 uuid 的歷史元素 -- -- -- Duplicate custom attribute found -- 找到重複的自定義屬性 -- -- -- Entry string key or value missing -- 缺少項目字串或值 -- -- -- Entry binary key or value missing -- 缺少項目二進位金鑰或值 -- -- -- Auto-type association window or sequence missing -- 缺少自動輸入關聯視窗或序列 -- -- -- Invalid bool value -- 無效的布林值 -- -- -- Invalid date time value -- 無效的日期時間值 -- -- -- Invalid color value -- 無效的顏色值 -- -- -- Invalid color rgb part -- 無效的 rgb 顏色部分 -- -- -- Invalid number value -- 無效的數值 -- -- -- Invalid uuid value -- 無效的 uuid 值 -- -- -- Unable to decompress binary -- Translator meant is a binary data inside an entry -- 無法解壓縮二進位資料 -- -- -- XML error: --%1 --Line %2, column %3 -- XML 錯誤: --%1 --列 %2, 欄位 %3 -- -- -- -- KeeAgentSettings -- -- Invalid KeeAgent settings file structure. -- 無效的 KeeAgent 設定檔架構。 -- -- -- Private key is an attachment but no attachments provided. -- 私密金鑰為附件,但附件未提供。 -- -- -- Private key is empty -- 私密金鑰為空 -- -- -- File too large to be a private key -- 檔案太大,無法作為私密金鑰 -- -- -- Failed to open private key -- 無法打開私密金鑰 -- -- -- -- KeePass1OpenWidget -- -- Unable to open the database. -- 無法開啟資料庫。 -- -- -- Import KeePass1 Database -- 匯入 KeePass1 資料庫 -- -- -- -- KeePass1Reader -- -- Unable to read keyfile. -- 無法讀取金鑰檔案。 -- -- -- Not a KeePass database. -- 並非 KeePass 資料庫。 -- -- -- Unsupported encryption algorithm. -- 不支援的加密演算法。 -- -- -- Unsupported KeePass database version. -- 不支援的 KeePass 資料庫版本。 -- -- -- Unable to read encryption IV -- IV = Initialization Vector for symmetric cipher -- 無法讀取加密 IV -- -- -- Invalid number of groups -- 無效的群組數 -- -- -- Invalid number of entries -- 無效的項目數 -- -- -- Invalid content hash size -- 無效的內容雜湊大小 -- -- -- Invalid transform seed size -- 無效的轉換種子大小 -- -- -- Invalid number of transform rounds -- 無效的轉換回合數 -- -- -- Unable to construct group tree -- 無法構成群組樹 -- -- -- Root -- 根群組 -- -- -- Key transformation failed -- 金鑰轉換失敗 -- -- -- Invalid group field type number -- 無效的群組欄位類型編號 -- -- -- Invalid group field size -- 無效的群組欄位大小 -- -- -- Read group field data doesn't match size -- 讀取群組欄位資料大小不相符 -- -- -- Incorrect group id field size -- 無效的群組 id 欄位大小 -- -- -- Incorrect group creation time field size -- 無效的群組建立時間欄位大小 -- -- -- Incorrect group modification time field size -- 無效的群組修改時間欄位大小 -- -- -- Incorrect group access time field size -- 無效的群組存取時間欄位大小 -- -- -- Incorrect group expiry time field size -- 無效的群組過期時間欄位大小 -- -- -- Incorrect group icon field size -- 無效的群組圖示欄位大小 -- -- -- Incorrect group level field size -- 無效的群組級別欄位大小 -- -- -- Invalid group field type -- 無效的群組欄位類型 -- -- -- Missing group id or level -- 缺少群組 id 或級別 -- -- -- Missing entry field type number -- 缺少項目欄位類型編號 -- -- -- Invalid entry field size -- 無效的項目欄位大小 -- -- -- Read entry field data doesn't match size -- 讀取的項目欄位資料與大小不相符 -- -- -- Invalid entry uuid field size -- 無效的項目 uuid 欄位大小 -- -- -- Invalid entry group id field size -- 無效的項目群組 id 欄位大小 -- -- -- Invalid entry icon field size -- 無效的項目圖示欄位大小 -- -- -- Invalid entry creation time field size -- 無效的項目建立時間欄位大小 -- -- -- Invalid entry modification time field size -- 無效的項目修改時間欄位大小 -- -- -- Invalid entry expiry time field size -- 無效的項目過期時間欄位大小 -- -- -- Invalid entry field type -- 無效的項目欄位類型 -- -- -- unable to seek to content position -- 無法定位內容 -- -- -- Invalid credentials were provided, please try again. --If this reoccurs, then your database file may be corrupt. -- 所提供的憑證無效,請再嘗試一遍。 --若此情形一再發生,代表您的資料庫檔案可能已損毀。 -- -- -- Unable to calculate database key -- 無法計算資料庫金鑰 -- -- -- -- KeeShare -- -- Invalid sharing reference -- 無效的分享引用 -- -- -- Inactive share %1 -- 未激活的分享 %1 -- -- -- Imported from %1 -- 從 %1 匯入 -- -- -- Exported to %1 -- 匯出至 %1 -- -- -- Synchronized with %1 -- 與 %1 同步 -- -- -- Import is disabled in settings -- 匯入於設定停用 -- -- -- Export is disabled in settings -- 匯出於設定停用 -- -- -- Inactive share -- 未激活的分享 -- -- -- Imported from -- 匯入從 -- -- -- Exported to -- 匯出至 -- -- -- Synchronized with -- 同步於 -- -- -- -- KeyComponentWidget -- -- Key Component -- 金鑰組件 -- -- -- Key Component Description -- 金鑰組件描述 -- -- -- Cancel -- 取消 -- -- -- Key Component set, click to change or remove -- 金鑰組件集,點擊以變更或移除 -- -- -- Add %1 -- Add a key component -- 加入 %1 -- -- -- Change %1 -- Change a key component -- 更改 %1 -- -- -- Remove %1 -- Remove a key component -- 移除 %1 -- -- -- %1 set, click to change or remove -- Change or remove a key component -- %1 已設定,點選以更改或移除 -- -- -- -- KeyFileEditWidget -- -- Generate -- 產生 -- -- -- Key File -- 金鑰檔案 -- -- -- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> -- <p>您可以加入一份包含隨機字元的金鑰檔案以提升安全性。</p><p>您必須將其保密,切莫丟失,否則您將會被鎖在外頭!</p> -- -- -- Error loading the key file '%1' --Message: %2 -- 載入金鑰檔案 '%1' 時出錯 --訊息:%2 -- -- -- Key files -- 金鑰檔案 -- -- -- All files -- 所有檔案 -- -- -- Create Key File... -- 建立金鑰檔案... -- -- -- Error creating key file -- 建立金鑰檔案時出錯 -- -- -- Unable to create key file: %1 -- 無法建立金鑰檔案:%1 -- -- -- Select a key file -- 選擇金鑰檔案 -- -- -- Key file selection -- 金鑰檔案選擇 -- -- -- Browse for key file -- 瀏覽金鑰檔案 -- -- -- Browse... -- 瀏覽... -- -- -- Generate a new key file -- 產生新金鑰檔案 -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- 注意:請不要使用可更改的檔案,否則可能導致您無法解鎖資料庫! -- -- -- Invalid Key File -- 無效的金鑰檔案 -- -- -- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. -- 您不能使用目前的資料庫作為自己的金鑰檔案。請選擇一個不同檔案,或者產生一份新的金鑰檔案。 -- -- -- Suspicious Key File -- 可疑的金鑰檔案 -- -- -- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. --Are you sure you want to continue with this file? -- 所選擇的金鑰檔案像是一份密碼資料庫檔案。金鑰檔案必須是一個永不變更的靜態檔案,否則您將永遠失去資料庫的存取權。 --您確定要以此檔案繼續? -- -- -- Old key file format -- 舊的金鑰檔案格式 -- -- -- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. -- 您選擇的金鑰檔案格式版本過舊,KeePassXC 可能<br>在未來停止支援。<br><br>請考慮產生一組新的金鑰檔案。 -- -- -- -- MainWindow -- -- &Database -- 資料庫 (&D) -- -- -- &Help -- 幫助 (&H) -- -- -- &Groups -- 群組 (&G) -- -- -- &Tools -- 工具 (&T) -- -- -- &Quit -- 離開 (&Q) -- -- -- &About -- 關於 (&A) -- -- -- Database settings -- 資料庫設定 -- -- -- Copy username to clipboard -- 將使用者名稱複製到剪貼簿 -- -- -- Copy password to clipboard -- 將密碼複製到剪貼簿 -- -- -- &Settings -- 設定 (&S) -- -- -- &Title -- 標題 (&T) -- -- -- Copy title to clipboard -- 將標題複製到剪貼簿 -- -- -- &URL -- &URL -- -- -- Copy URL to clipboard -- 將 URL 複製到剪貼簿 -- -- -- &Notes -- 備註 (&N) -- -- -- Copy notes to clipboard -- 將備註複製到剪貼簿 -- -- -- Copy &TOTP -- 複製 &TOTP -- -- -- E&mpty recycle bin -- 清空回收桶 (&M) -- -- -- Clear history -- 清除歷史記錄 -- -- -- Access error for config file %1 -- 設定檔存取錯誤:%1 -- -- -- Settings -- 設定 -- -- -- Toggle window -- 切換視窗 -- -- -- Quit KeePassXC -- 退出 KeePassXC -- -- -- Please touch the button on your YubiKey! -- 請接觸您 YubiKey 上的按鈕! -- -- -- WARNING: You are using an unstable build of KeePassXC! --There is a high risk of corruption, maintain a backup of your databases. --This version is not meant for production use. -- 警告:您正在使用非穩定版本的 KeePassXC! --具有高風險的破壞可能,請備份你的資料庫。 --這個版本並不適合生產用途。 -- -- -- &Donate -- 捐贈 (&D) -- -- -- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! --We recommend you use the AppImage available on our downloads page. -- 警告:您的 Qt 版本可能會導致 KeePassXC 與螢幕鍵盤崩潰! --建議您使用我們下載頁面上提供的 AppImage。 -- -- -- &Import -- 匯入 (&I) -- -- -- Create a new database -- 建立新資料庫 -- -- -- Merge from another KDBX database -- 與其他 KDBX 資料庫合併 -- -- -- Add a new entry -- 加入新項目 -- -- -- View or edit entry -- 檢視或編輯項目 -- -- -- Add a new group -- 加入新群組 -- -- -- Perform &Auto-Type -- 進行自動輸入 (&A) -- -- -- Open &URL -- 開啟 &URL -- -- -- Import a KeePass 1 database -- 匯入 KeePass 1 資料庫 -- -- -- Import a CSV file -- 匯入 CSV 檔案 -- -- -- NOTE: You are using a pre-release version of KeePassXC! --Expect some bugs and minor issues, this version is not meant for production use. -- 注意:您正在使用 KeePassXC 的預先發行版本! --此版本並不適合生產用途,可能會出現一些程式錯誤和小問題。 -- -- -- Check for updates on startup? -- 是否在啟動時檢查更新? -- -- -- Would you like KeePassXC to check for updates on startup? -- 你是否要在 KeePassXC 啟動時檢查更新? -- -- -- You can always check for updates manually from the application menu. -- 你可以隨時在應用程式選單中手動檢查更新。 -- -- -- &Export -- 匯出 (&E) -- -- -- Sort &A-Z -- 排序從 &A 到 Z -- -- -- Sort &Z-A -- 排序從 &Z 到 A -- -- -- &Password Generator -- 密碼產生器 (&P) -- -- -- Import a 1Password Vault -- 匯入 1Password 保險庫 -- -- -- &Getting Started -- 開始使用 (&G) -- -- -- &User Guide -- 使用者指南 (&U) -- -- -- &Keyboard Shortcuts -- 鍵盤快捷鍵 (&K) -- -- -- &Recent Databases -- 最近的資料庫 (&R) -- -- -- &Entries -- 項目 (&E) -- -- -- Copy Att&ribute -- 複製屬性 (&R) -- -- -- TOTP -- TOTP -- -- -- View -- 顯示 -- -- -- Theme -- 主題 -- -- -- &Check for Updates -- 檢查更新 (&C) -- -- -- &Open Database… -- 開啟資料庫 (&O)… -- -- -- &Save Database -- 儲存資料庫 (&S) -- -- -- &Close Database -- 關閉資料庫 (&C) -- -- -- &New Database… -- 新建資料庫 (&N)… -- -- -- &Merge From Database… -- 從資料庫合併 (&M)… -- -- -- &New Entry… -- 新建項目 (&N)… -- -- -- &Edit Entry… -- 編輯項目 (&E)… -- -- -- &Delete Entry… -- 刪除項目 (&D)… -- -- -- &New Group… -- 新建群組 (&N)… -- -- -- &Edit Group… -- 編輯群組 (&E)… -- -- -- &Delete Group… -- 刪除群組 (&D)… -- -- -- Download All &Favicons… -- 下載所有網站圖標 (&F)… -- -- -- Sa&ve Database As… -- 儲存資料庫為 (&V)… -- -- -- Database &Security… -- 資料庫安全 (&S)… -- -- -- Database &Reports... -- 資料庫報告 (&R)... -- -- -- Statistics, health check, etc. -- 資料統計與健康檢查等 -- -- -- &Database Settings… -- 資料庫設定 (&D)… -- -- -- &Clone Entry… -- 複製項目 (&C)… -- -- -- Move u&p -- 上移 (&P) -- -- -- Move entry one step up -- 將項目向上移動一步 -- -- -- Move do&wn -- 下移 (&W) -- -- -- Move entry one step down -- 將項目向下移動一步 -- -- -- Copy &Username -- 複製使用者名稱 (&U) -- -- -- Copy &Password -- 複製密碼 (&P) -- -- -- Download &Favicon -- 下載網站圖標 (&F) -- -- -- &Lock Databases -- 鎖定資料庫 (&L) -- -- -- &CSV File… -- &CSV 檔… -- -- -- &HTML File… -- &HTML 檔… -- -- -- KeePass 1 Database… -- KeePass 1 資料庫… -- -- -- 1Password Vault… -- 1Password 保險庫… -- -- -- CSV File… -- CSV 檔… -- -- -- Show TOTP -- 顯示 TOTP -- -- -- Show QR Code -- 顯示 QR 碼 -- -- -- Set up TOTP… -- 設定 TOTP… -- -- -- Report a &Bug -- 回報問題 (&B) -- -- -- Open Getting Started Guide -- 開啟「開始使用」指南 -- -- -- &Online Help -- 線上幫助 (&O) -- -- -- Go to online documentation -- 前往線上文件 -- -- -- Open User Guide -- 開啟使用者指南 -- -- -- Save Database Backup... -- 儲存資料庫備份... -- -- -- Add key to SSH Agent -- 加入金鑰至 SSH 代理 -- -- -- Remove key from SSH Agent -- 從 SSH 代理移除金鑰 -- -- -- Compact Mode -- 緊緻模式 -- -- -- Automatic -- 自動 -- -- -- Light -- 淺色 -- -- -- Dark -- 深色 -- -- -- Classic (Platform-native) -- 經典(平台原生) -- -- -- Show Toolbar -- 顯示工具列 -- -- -- Show Preview Panel -- 顯示預覽面板 -- -- -- Don't show again for this version -- 對此版本不再顯示 -- -- -- Restart Application? -- 重啟應用程式? -- -- -- You must restart the application to apply this setting. Would you like to restart now? -- 必須重啟應用程式來套用此設定。您是否要現在重新啟動? -- -- -- Perform Auto-Type Sequence -- 執行自動輸入序列 -- -- -- {USERNAME} -- {USERNAME} -- -- -- {USERNAME}{ENTER} -- {USERNAME}{ENTER} -- -- -- {PASSWORD} -- {PASSWORD} -- -- -- {PASSWORD}{ENTER} -- {PASSWORD}{ENTER} -- -- -- Always on Top -- 視窗置頂顯示 -- -- -- Hide Usernames -- 隱藏使用者名稱 -- -- -- Hide Passwords -- 隱藏密碼 -- -- -- -- ManageDatabase -- -- Database settings -- 資料庫設定 -- -- -- Edit database settings -- 編輯資料庫設定 -- -- -- Unlock database -- 解鎖資料庫 -- -- -- Unlock database to show more information -- 解鎖資料庫來顯示更多資訊 -- -- -- Lock database -- 鎖定資料庫 -- -- -- -- ManageSession -- -- Disconnect -- 中斷連結 -- -- -- Disconnect this application -- 中斷此程式的連結 -- -- -- -- Merger -- -- Creating missing %1 [%2] -- 建立缺少的 %1 [%2] -- -- -- Relocating %1 [%2] -- 重新定位 %1 [%2] -- -- -- Overwriting %1 [%2] -- 覆寫 %1 [%2] -- -- -- older entry merged from database "%1" -- 較舊的項目從資料庫「%1」合併 -- -- -- Adding backup for older target %1 [%2] -- 為較舊的目標 %1 [%2] 添加備份 -- -- -- Adding backup for older source %1 [%2] -- 為較舊的來源 %1 [%2] 添加備份 -- -- -- Reapplying older target entry on top of newer source %1 [%2] -- 在較新的來源 %1 [%2] 之上重新應用較舊的目標項目 -- -- -- Reapplying older source entry on top of newer target %1 [%2] -- 在較新的目標 %1 [%2] 之上重新應用較舊的來源項目 -- -- -- Synchronizing from newer source %1 [%2] -- 從較新的來源 %1 [%2] 同步 -- -- -- Synchronizing from older source %1 [%2] -- 從較舊的來源 %1 [%2] 同步 -- -- -- Deleting child %1 [%2] -- 刪除子項 %1 [%2] -- -- -- Deleting orphan %1 [%2] -- 刪除孤立項 %1 [%2] -- -- -- Changed deleted objects -- 更改已刪除的對象 -- -- -- Adding missing icon %1 -- 加入缺失的圖示 %1 -- -- -- Removed custom data %1 [%2] -- 移除自定義資料 %1 [%2] -- -- -- Adding custom data %1 [%2] -- 加入自定義資料 %1 [%2] -- -- -- -- NewDatabaseWizard -- -- Create a new KeePassXC database... -- 建立新的 KeePassXC 資料庫... -- -- -- Root -- Root group -- 根群組 -- -- -- -- NewDatabaseWizardPage -- -- WizardPage -- 嚮導頁 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 您可以在此調整資料庫的加密設定。別擔心,之後也可以到資料庫設定更改它們。 -- -- -- Advanced Settings -- 進階設定 -- -- -- Simple Settings -- 簡單設定 -- -- -- Encryption Settings -- 加密設定 -- -- -- -- NewDatabaseWizardPageDatabaseKey -- -- Database Credentials -- 資料庫憑證 -- -- -- A set of credentials known only to you that protects your database. -- 只有您知道的憑證組合才能保護您的資料庫。 -- -- -- -- NewDatabaseWizardPageEncryption -- -- Encryption Settings -- 加密設定 -- -- -- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. -- 您可以在此調整資料庫的加密設定。別擔心,之後也可以到資料庫設定更改它們。 -- -- -- -- NewDatabaseWizardPageMetaData -- -- General Database Information -- 通用資料庫資訊 -- -- -- Please fill in the display name and an optional description for your new database: -- 請為您的新資料庫填寫一個顯示名稱,及一個選擇性的說明: -- -- -- -- NixUtils -- -- Password Manager -- 密碼管理員 -- -- -- -- OpData01 -- -- Invalid OpData01, does not contain header -- 無效的 OpData01,未包含標頭 -- -- -- Unable to read all IV bytes, wanted 16 but got %1 -- 無法讀取初始向量 (IV) 的所有位元組,預期為 16 但得到了 %1 -- -- -- Unable to init cipher for opdata01: %1 -- 無法初始化 opdata01 的加密:%1 -- -- -- Unable to read all HMAC signature bytes -- 無法讀取所有 HMAC 簽名位元組 -- -- -- Malformed OpData01 due to a failed HMAC -- 異常的 OpData01,因為 HMAC 運行失敗 -- -- -- Unable to process clearText in place -- 無法在場處理純文本 -- -- -- Expected %1 bytes of clear-text, found %2 -- 預期 %1 位元組的純文本,實際為 %2 -- -- -- -- OpVaultOpenWidget -- -- Read Database did not produce an instance --%1 -- 讀取資料庫並未產生實體 --%1 -- -- -- -- OpVaultReader -- -- Directory .opvault must exist -- 目錄 .opvault 必須存在 -- -- -- Directory .opvault must be readable -- 目錄 .opvault 必須為可讀取 -- -- -- Directory .opvault/default must exist -- 目錄 .opvault/default 必須存在 -- -- -- Directory .opvault/default must be readable -- 目錄 .opvault/default 必須為可讀取 -- -- -- Unable to decode masterKey: %1 -- 無法解碼主密鑰:%1 -- -- -- Unable to derive master key: %1 -- 無法推導主密鑰:%1 -- -- -- -- OpenSSHKey -- -- Invalid key file, expecting an OpenSSH key -- 無效的金鑰檔案,預期應是 OpenSSH 金鑰 -- -- -- PEM boundary mismatch -- PEM 邊界數量不對稱 -- -- -- Base64 decoding failed -- Base64 解碼失敗 -- -- -- Key file way too small. -- 金鑰檔太小。 -- -- -- Key file magic header id invalid -- 金鑰檔魔術標頭 ID 無效 -- -- -- Found zero keys -- 找到零個金鑰 -- -- -- Failed to read public key. -- 無法讀取公開金鑰。 -- -- -- Corrupted key file, reading private key failed -- 金鑰檔損壞,讀取私密金鑰失敗 -- -- -- No private key payload to decrypt -- 私密金鑰中沒有載體可解密 -- -- -- Trying to run KDF without cipher -- 嘗試執行無密碼的 KDF -- -- -- Passphrase is required to decrypt this key -- 需要密碼短語以解密此金鑰 -- -- -- Key derivation failed, key file corrupted? -- 金鑰推導失敗,金鑰檔已損壞? -- -- -- Decryption failed, wrong passphrase? -- 解密失敗,密碼短語錯誤? -- -- -- Unexpected EOF while reading public key -- 讀取公開金鑰時出現意外的檔案結尾 -- -- -- Unexpected EOF while reading private key -- 讀取私密金鑰時出現意外的檔案結尾 -- -- -- Can't write public key as it is empty -- 無法寫入公開金鑰,因為它是空的 -- -- -- Unexpected EOF when writing public key -- 寫入公開金鑰時出現意外的檔案結尾 -- -- -- Can't write private key as it is empty -- 無法寫入私密金鑰,因為它是空的 -- -- -- Unexpected EOF when writing private key -- 寫入私密金鑰時出現意外的檔案結尾 -- -- -- Unsupported key type: %1 -- 不支援的金鑰類型:%1 -- -- -- Unknown cipher: %1 -- 未知的密語:%1 -- -- -- Cipher IV is too short for MD5 kdf -- 加密初始向量 (IV) 對 MD5 kdf 來說太短了 -- -- -- Unknown KDF: %1 -- 未知的 KDF:%1 -- -- -- Unknown key type: %1 -- 未知的金鑰類型:%1 -- -- -- -- PasswordEdit -- -- Passwords do not match -- 不符合的密碼 -- -- -- Passwords match so far -- 目前符合的密碼 -- -- -- Toggle Password (%1) -- 切換密碼 (%1) -- -- -- Generate Password (%1) -- 生成密碼 (%1) -- -- -- Warning: Caps Lock enabled! -- 警告:Caps Lock 已啟用! -- -- -- -- PasswordEditWidget -- -- Enter password: -- 輸入密碼: -- -- -- Confirm password: -- 確認密碼: -- -- -- Password -- 密碼 -- -- -- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> -- <p>密碼是保全您的資料庫的主要方式。</p><p>好的密碼要夠長且獨特。KeePassXC 可以幫您產生一組。</p> -- -- -- Passwords do not match. -- 密碼不相符。 -- -- -- Password field -- 密碼欄位 -- -- -- Repeat password field -- 重複密碼欄位 -- -- -- -- PasswordGeneratorWidget -- -- %p% -- %p% -- -- -- strength -- Password strength -- 強度 -- -- -- entropy -- 熵值 -- -- -- Password -- 密碼 -- -- -- Character Types -- 字元類型 -- -- -- Numbers -- 數字 -- -- -- Extended ASCII -- 擴展 ASCII 碼 -- -- -- Exclude look-alike characters -- 去除相似的字元 -- -- -- Pick characters from every group -- 從每一組中選擇字元 -- -- -- &Length: -- 長度 (&L): -- -- -- Passphrase -- 密碼短語 -- -- -- Wordlist: -- 詞彙表: -- -- -- Word Separator: -- 單詞分隔符號: -- -- -- Close -- 關閉 -- -- -- Entropy: %1 bit -- 資訊熵:%1 位元 -- -- -- Password Quality: %1 -- 密碼品質:%1 -- -- -- Poor -- Password quality -- 極弱 -- -- -- Weak -- Password quality -- 較弱 -- -- -- Good -- Password quality -- 較好 -- -- -- Excellent -- Password quality -- 極好 -- -- -- Switch to advanced mode -- 切換至進階模式 -- -- -- Advanced -- 進階 -- -- -- Braces -- 括號 -- -- -- Punctuation -- 標點 -- -- -- Quotes -- 引號 -- -- -- Logograms -- 語標符號 -- -- -- Character set to exclude from generated password -- 產生密碼時排除的字元集合 -- -- -- Do not include: -- 不要包括: -- -- -- Add non-hex letters to "do not include" list -- 將非十六進制字母加入「不要包括」清單 -- -- -- Hex -- 十六進制 -- -- -- Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" -- 排除以下字元:"0", "1", "l", "I", "O", "|", "﹒" -- -- -- Generated password -- 已產生密碼 -- -- -- Upper-case letters -- 大寫字母 -- -- -- Lower-case letters -- 小寫字母 -- -- -- Special characters -- 特殊字母 -- -- -- Math Symbols -- 數學符號 -- -- -- Dashes and Slashes -- 破折號與斜線號 -- -- -- Excluded characters -- 排除字元 -- -- -- Hex Passwords -- 十六進制密碼 -- -- -- Password length -- 密碼長度 -- -- -- Word Case: -- 字母大小寫: -- -- -- Regenerate password -- 重新產生密碼 -- -- -- Copy password -- 複製密碼 -- -- -- lower case -- 全部小寫 -- -- -- UPPER CASE -- 全部大寫 -- -- -- Title Case -- 首字母大寫 -- -- -- Generate Password -- 產生密碼 -- -- -- Also choose from: -- 也從此選擇: -- -- -- Additional characters to use for the generated password -- 用於生成密碼的其他字元 -- -- -- Additional characters -- 其他字元 -- -- -- Word Count: -- 詞彙數: -- -- -- Esc -- Esc -- -- -- Apply Password -- 套用密碼 -- -- -- Ctrl+S -- Ctrl+S -- -- -- Regenerate password (%1) -- 重新生成密碼 (%1) -- -- -- Special Characters -- 特殊字元 -- -- -- -- QApplication -- -- KeeShare -- KeeShare -- -- -- Statistics -- 統計 -- -- -- Very weak password -- 極弱密碼 -- -- -- Password entropy is %1 bits -- 密碼熵值為 %1 位元 -- -- -- Weak password -- 弱密碼 -- -- -- Used in %1/%2 -- 使用於 %1/%2 -- -- -- Password is used %1 times -- 密碼被使用 %1 次 -- -- -- Password has expired -- 密碼已過期 -- -- -- Password expiry was %1 -- 密碼過期於 %1 -- -- -- Password is about to expire -- 密碼即將過期 -- -- -- Password expires in %1 days -- 密碼將於 %1 天後過期 -- -- -- Password will expire soon -- 密碼不久後將過期 -- -- -- Password expires on %1 -- 密碼於 %1 過期 -- -- -- Health Check -- 健康檢查 -- -- -- HIBP -- HIBP -- -- -- -- QMessageBox -- -- Overwrite -- 覆寫 -- -- -- Delete -- 刪除 -- -- -- Move -- 移動 -- -- -- Empty -- 清空 -- -- -- Remove -- 移除 -- -- -- Skip -- 跳過 -- -- -- Disable -- 停用 -- -- -- Merge -- 合併 -- -- -- Continue -- 繼續 -- -- -- -- QObject -- -- Database not opened -- 資料庫未開啟 -- -- -- Database hash not available -- 資料庫雜湊不可用 -- -- -- Client public key not received -- 未收到用戶端公開金鑰 -- -- -- Cannot decrypt message -- 無法解密訊息 -- -- -- Action cancelled or denied -- 操作被取消或被拒絕 -- -- -- KeePassXC association failed, try again -- KeePassXC 關聯失敗,請重試 -- -- -- Encryption key is not recognized -- 加密金鑰未被識別 -- -- -- Incorrect action -- 錯誤的操作 -- -- -- Empty message received -- 收到空消息 -- -- -- No URL provided -- 未提供 URL -- -- -- No logins found -- 找不到登入資訊 -- -- -- Unknown error -- 未知的錯誤 -- -- -- Add a new entry to a database. -- 加入項目到資料庫。 -- -- -- Path of the database. -- 資料庫的路徑。 -- -- -- Key file of the database. -- 資料庫的金鑰檔案。 -- -- -- path -- 路徑 -- -- -- Username for the entry. -- 此項目的使用者名稱。 -- -- -- username -- 使用者名稱 -- -- -- URL for the entry. -- 此項目的 URL。 -- -- -- URL -- URL -- -- -- Prompt for the entry's password. -- 提示此項目的密碼。 -- -- -- Generate a password for the entry. -- 產生此項目的密碼。 -- -- -- length -- 長度 -- -- -- Path of the entry to add. -- 要加入的項目路徑。 -- -- -- Path of the entry to clip. -- clip = copy to clipboard -- 欲剪輯的項目路徑。 -- -- -- Timeout in seconds before clearing the clipboard. -- 清除剪貼簿之前保存多久 (秒)。 -- -- -- Edit an entry. -- 編輯項目。 -- -- -- Title for the entry. -- 項目標題。 -- -- -- title -- 標題 -- -- -- Path of the entry to edit. -- 欲編輯的項目路徑。 -- -- -- Estimate the entropy of a password. -- 估計密碼的 entropy。 -- -- -- Password for which to estimate the entropy. -- 用於估計 entropy 的密碼。 -- -- -- Perform advanced analysis on the password. -- 對密碼執行高級分析。 -- -- -- -- --Available commands: -- -- -- --可用命令: -- -- -- -- Name of the command to execute. -- 要執行的命令的名稱。 -- -- -- List database entries. -- 列出資料庫項目。 -- -- -- Path of the group to list. Default is / -- 要列出的群組路徑。預設是 / -- -- -- Find entries quickly. -- 快速尋找項目。 -- -- -- Search term. -- 搜尋條件。 -- -- -- Merge two databases. -- 合併兩個資料庫。 -- -- -- Path of the database to merge from. -- 合併時的來源資料庫路徑。 -- -- -- Use the same credentials for both database files. -- 對兩個資料庫檔案使用相同的認證。 -- -- -- Key file of the database to merge from. -- 用於合併資料庫的金鑰檔案。 -- -- -- Show an entry's information. -- 顯示項目資訊。 -- -- -- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. -- 欲顯示的屬性名稱。此選項可以多次指定,每個屬性會照順序逐行顯示。如果未指定任何屬性,則會給出預設屬性的摘要。 -- -- -- attribute -- 屬性 -- -- -- Name of the entry to show. -- 要顯示的項目名稱。 -- -- -- NULL device -- NULL 裝置 -- -- -- error reading from device -- 從裝置讀取時出錯 -- -- -- malformed string -- 格式不正確的字串 -- -- -- missing closing quote -- 缺少右引號 -- -- -- Group -- 群組 -- -- -- Title -- 標題 -- -- -- Username -- 使用者名稱 -- -- -- Password -- 密碼 -- -- -- Notes -- 備註 -- -- -- Last Modified -- 最後編輯 -- -- -- Created -- 已建立 -- -- -- Browser Integration -- 瀏覽器整合 -- -- -- SSH Agent -- SSH 代理 -- -- -- Generate a new random diceware passphrase. -- 產生一組全新隨機的 Diceware 密碼短語。 -- -- -- Word count for the diceware passphrase. -- Diceware 密碼短語字數統計 -- -- -- Wordlist for the diceware generator. --[Default: EFF English] -- Diceware 產生器使用的字詞表。 --[預設:EFF English] -- -- -- Generate a new random password. -- 產生新的隨機密碼。 -- -- -- Could not create entry with path %1. -- 無法建立路徑為 %1 的項目。 -- -- -- Enter password for new entry: -- 為新項目輸入密碼: -- -- -- Writing the database failed %1. -- 寫入資料庫失敗 %1。 -- -- -- Successfully added entry %1. -- 成功加入項目 %1。 -- -- -- Invalid timeout value %1. -- 無效的超時值 %1。 -- -- -- Entry %1 not found. -- 項目 %1 未找到。 -- -- -- Entry with path %1 has no TOTP set up. -- 路徑為 %1 的項目未設定 TOTP。 -- -- -- Clearing the clipboard in %1 second(s)... -- 將於 %1 秒後清空剪貼簿... -- -- -- Clipboard cleared! -- 剪貼簿已清空! -- -- -- Silence password prompt and other secondary outputs. -- 關閉密碼提示與其他輔助輸出。 -- -- -- count -- CLI parameter -- 計數 -- -- -- Could not find entry with path %1. -- 未找到路徑為 %1 的項目。 -- -- -- Not changing any field for entry %1. -- 未更改項目 %1 的任何欄位。 -- -- -- Enter new password for entry: -- 為項目輸入新密碼: -- -- -- Writing the database failed: %1 -- 寫入資料庫失敗:%1 -- -- -- Successfully edited entry %1. -- 成功編輯項目 %1。 -- -- -- Length %1 -- 長度 %1 -- -- -- Entropy %1 -- 熵值 -- -- -- Log10 %1 -- Log10 %1 -- -- -- Multi-word extra bits %1 -- 多字詞額外字元 %1 -- -- -- Type: Bruteforce -- 類型:暴力 -- -- -- Type: Dictionary -- 類型:字典 -- -- -- Type: Dict+Leet -- 類型:字典+名單 -- -- -- Type: User Words -- 類型:使用者字詞 -- -- -- Type: User+Leet -- 類型:使用者+名單 -- -- -- Type: Repeated -- 類型:重複 -- -- -- Type: Sequence -- 類型:序列 -- -- -- Type: Spatial -- 類型:空間 -- -- -- Type: Date -- 類型:日期 -- -- -- Type: Bruteforce(Rep) -- 類型:暴力破解(重複) -- -- -- Type: Dictionary(Rep) -- 類型:字典(重複) -- -- -- Type: Dict+Leet(Rep) -- (重複) -- -- -- Type: User Words(Rep) -- 類型:使用者字詞(重複) -- -- -- Type: User+Leet(Rep) -- 類型:使用者+名單(重複) -- -- -- Type: Repeated(Rep) -- 類型:重複(重複) -- -- -- Type: Sequence(Rep) -- 類型:序列(重複) -- -- -- Type: Spatial(Rep) -- 類型:空間(重複) -- -- -- Type: Date(Rep) -- 類型:日期(重複) -- -- -- Type: Unknown%1 -- 類型:未知%1 -- -- -- Entropy %1 (%2) -- 熵值 %1 (%2) -- -- -- *** Password length (%1) != sum of length of parts (%2) *** -- *** 密碼長度 (%1) != 部位長度總和 (%2) *** -- -- -- Failed to load key file %1: %2 -- 載入金鑰檔案 %1 失敗:%2 -- -- -- Length of the generated password -- 產生密碼長度 -- -- -- Use lowercase characters -- 使用小寫字母 -- -- -- Use uppercase characters -- 使用大寫字母 -- -- -- Use special characters -- 使用特殊字元 -- -- -- Use extended ASCII -- 使用延伸 ASCII 碼 -- -- -- Exclude character set -- 排除的字元組合 -- -- -- chars -- 字元 -- -- -- Exclude similar looking characters -- 排除相似字元 -- -- -- Include characters from every selected group -- 包含每個選定組中的字元 -- -- -- Recursively list the elements of the group. -- 遞迴列出組內元素。 -- -- -- Cannot find group %1. -- 未找到群組 %1。 -- -- -- Error reading merge file: --%1 -- 讀取合併檔案錯誤: --%1 -- -- -- Unable to save database to file : %1 -- 無法儲存資料庫至檔案:%1 -- -- -- Unable to save database to file: %1 -- 無法儲存資料庫至檔案:%1 -- -- -- Successfully recycled entry %1. -- 成功回收項目 %1。 -- -- -- Successfully deleted entry %1. -- 成功刪除項目 %1。 -- -- -- Show the entry's current TOTP. -- 顯示項目目前的 TOTP。 -- -- -- ERROR: unknown attribute %1. -- 錯誤:未知的屬性 %1。 -- -- -- No program defined for clipboard manipulation -- 沒有為剪貼簿操作定義程式 -- -- -- file empty -- 檔案為空 -- -- -- %1: (row, col) %2,%3 -- %1: (列, 行) %2,%3 -- -- -- AES-KDF (KDBX 4) -- AES-KDF (KDBX 4) -- -- -- AES-KDF (KDBX 3.1) -- AES-KDF (KDBX 3.1) -- -- -- Invalid Settings -- TOTP -- 無效的設定 -- -- -- Invalid Key -- TOTP -- 無效的金鑰 -- -- -- Message encryption failed. -- 訊息加密失敗。 -- -- -- No groups found -- 未找到群組 -- -- -- Create a new database. -- 建立新群組。 -- -- -- File %1 already exists. -- 檔案 %1 已存在。 -- -- -- Loading the key file failed -- 載入金鑰檔案失敗 -- -- -- No key is set. Aborting database creation. -- 未設置金鑰。中止資料庫建立。 -- -- -- Failed to save the database: %1. -- 儲存資料庫失敗:%1 -- -- -- Successfully created new database. -- 成功建立新資料庫。 -- -- -- Creating KeyFile %1 failed: %2 -- 建立金鑰檔案 %1 失敗:%2 -- -- -- Loading KeyFile %1 failed: %2 -- 載入金鑰檔案 %1 失敗:%2 -- -- -- Path of the entry to remove. -- 欲移除的項目路徑。 -- -- -- Existing single-instance lock file is invalid. Launching new instance. -- 現有的單實例鎖定檔無效。正在啟動新實例。 -- -- -- The lock file could not be created. Single-instance mode disabled. -- 無法建立鎖定文件。已停用單一實例模式。 -- -- -- KeePassXC - cross-platform password manager -- KeePassXC - 跨平台的密碼管理工具 -- -- -- filenames of the password databases to open (*.kdbx) -- 欲開啟的密碼資料庫檔名 (*.kdbx) -- -- -- path to a custom config file -- 自定義設定檔的路徑 -- -- -- key file of the database -- 資料庫的金鑰檔案 -- -- -- read password of the database from stdin -- 從 stdin 讀取資料庫密碼 -- -- -- Another instance of KeePassXC is already running. -- 其他 KeePassXC 程式正在運行中。 -- -- -- Fatal error while testing the cryptographic functions. -- 測試加密函數時發生重大錯誤。 -- -- -- KeePassXC - Error -- KeePassXC - 錯誤 -- -- -- Database password: -- 資料庫密碼: -- -- -- Cannot create new group -- 無法建立新群組 -- -- -- Deactivate password key for the database. -- 停用資料庫的密碼金鑰。 -- -- -- Displays debugging information. -- 顯示除錯資訊。 -- -- -- Deactivate password key for the database to merge from. -- 停用合併資料庫的密碼金鑰。 -- -- -- Version %1 -- 版本 %1 -- -- -- Build Type: %1 -- 建置類型:%1 -- -- -- Revision: %1 -- 修訂版號:%1 -- -- -- Distribution: %1 -- 發行版本:%1 -- -- -- Debugging mode is disabled. -- 除錯資訊已停用。 -- -- -- Debugging mode is enabled. -- 除錯資訊已啟用。 -- -- -- Operating system: %1 --CPU architecture: %2 --Kernel: %3 %4 -- 作業系統:%1 --中央處理器架構:%2 --核心:%3 %4 -- -- -- Auto-Type -- 自動輸入 -- -- -- KeeShare (signed and unsigned sharing) -- KeeShare(簽署及未簽署的共用) -- -- -- KeeShare (only signed sharing) -- KeeShare(限簽署的共用) -- -- -- KeeShare (only unsigned sharing) -- KeeShare(限未簽署的共用) -- -- -- YubiKey -- YubiKey -- -- -- TouchID -- TouchID -- -- -- None -- -- -- -- Enabled extensions: -- 已啟用的擴充元件: -- -- -- Cryptographic libraries: -- 加密函式庫: -- -- -- Cannot generate a password and prompt at the same time! -- 無法同時產生並顯示密碼! -- -- -- Adds a new group to a database. -- 加入新群組到資料庫。 -- -- -- Path of the group to add. -- 要加入的群組路徑。 -- -- -- Group %1 already exists! -- 群組 %1 已經存在! -- -- -- Group %1 not found. -- 群組 %1 未找到。 -- -- -- Successfully added group %1. -- 成功加入群組 %1。 -- -- -- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. -- 檢查是否有任何密碼被公開泄露。FILENAME 需為一路徑指向檔案,內部以 HIBP 格式列出被泄露密碼的 SHA-1 雜湊。檔案可從 https://haveibeenpwned.com/Passwords 獲得。 -- -- -- FILENAME -- FILENAME -- -- -- Analyze passwords for weaknesses and problems. -- 分析密碼的弱點與問題。 -- -- -- Failed to open HIBP file %1: %2 -- 開啟 HIBP 檔案 %1 失敗:%2 -- -- -- Evaluating database entries against HIBP file, this will take a while... -- 根據 HIBP 檔案評估資料庫的項目,這將花上一段時間... -- -- -- Close the currently opened database. -- 關閉目前開啟的資料庫。 -- -- -- Display this help. -- 顯示此幫助。 -- -- -- slot -- 槽位 -- -- -- Invalid word count %1 -- 無效的字數統計 %1 -- -- -- The word list is too small (< 1000 items) -- 字詞清單過小(< 1000 個項目) -- -- -- Exit interactive mode. -- 離開互動模式。 -- -- -- Exports the content of a database to standard output in the specified format. -- 以指定格式匯出資料庫內容至標準輸出。 -- -- -- Unable to export database to XML: %1 -- 無法匯出資料庫至 XML:%1 -- -- -- Unsupported format %1 -- 不支援的格式 %1 -- -- -- Use numbers -- 使用數字 -- -- -- Invalid password length %1 -- 無效的密碼長度 %1 -- -- -- Display command help. -- 顯示指令幫助。 -- -- -- Available commands: -- 可用指令: -- -- -- Import the contents of an XML database. -- 匯入 XML 資料庫的內容。 -- -- -- Path of the XML database export. -- XML 資料庫匯出的路徑。 -- -- -- Path of the new database. -- 新資料庫的路徑。 -- -- -- Successfully imported database. -- 成功匯入資料庫。 -- -- -- Unknown command %1 -- 未知的指令 %1 -- -- -- Flattens the output to single lines. -- 將輸出壓縮至單一行。 -- -- -- Only print the changes detected by the merge operation. -- 只印出合併操作偵測到的變更。 -- -- -- Yubikey slot for the second database. -- 第二資料庫的 Yubikey 槽位。 -- -- -- Successfully merged %1 into %2. -- 成功合併 %1 至 %2。 -- -- -- Database was not modified by merge operation. -- 資料庫未被合併操作修改。 -- -- -- Moves an entry to a new group. -- 移動項目至新群組。 -- -- -- Path of the entry to move. -- 欲移動的項目路徑。 -- -- -- Path of the destination group. -- 目標群組的路徑。 -- -- -- Could not find group with path %1. -- 找不到路徑為 %1 的群組。 -- -- -- Entry is already in group %1. -- 項目已存在於群組 %1。 -- -- -- Successfully moved entry %1 to group %2. -- 成功移動項目 %1 至群組 %2。 -- -- -- Open a database. -- 開啟資料庫。 -- -- -- Path of the group to remove. -- 欲移除的群組路徑。 -- -- -- Cannot remove root group from database. -- 無法從資料庫移除根群組。 -- -- -- Successfully recycled group %1. -- 成功回收群組 %1。 -- -- -- Successfully deleted group %1. -- 成功刪除群組 %1。 -- -- -- Failed to open database file %1: not found -- 開啟資料庫檔案 %1 失敗:查無此檔 -- -- -- Failed to open database file %1: not a plain file -- 開啟資料庫檔案 %1 失敗:並非檔案 -- -- -- Failed to open database file %1: not readable -- 開啟資料庫檔案 %1 失敗:無法讀取 -- -- -- Enter password to unlock %1: -- 輸入密碼以解鎖 %1: -- -- -- Invalid YubiKey slot %1 -- 無效的 YubiKey 槽位 %1 -- -- -- Enter password to encrypt database (optional): -- 輸入密碼以加密資料庫(選用): -- -- -- HIBP file, line %1: parse error -- HIBP 檔案,欄 %1:剖析錯誤 -- -- -- Secret Service Integration -- 保密服務整合 -- -- -- User name -- 使用者名稱 -- -- -- Password for '%1' has been leaked %2 time(s)! -- 「%1」的密碼已被泄露 %2 次! -- -- -- Invalid password generator after applying all options -- 套用所有選項的密碼產生器為無效 -- -- -- Show the protected attributes in clear text. -- 以明文顯示被保護的屬性。 -- -- -- Browser Plugin Failure -- 瀏覽器插件失敗 -- -- -- Could not save the native messaging script file for %1. -- 無法為 %1 保存本地消息指令檔案。 -- -- -- Copy the given attribute to the clipboard. Defaults to "password" if not specified. -- 複製給定屬性至剪貼簿。若未指定則預設為 "password"。 -- -- -- Copy the current TOTP to the clipboard (equivalent to "-a totp"). -- 複製目前的 TOTP 至剪貼簿(等同於 "-a totp")。 -- -- -- Copy an entry's attribute to the clipboard. -- 複製項目屬性至剪貼簿。 -- -- -- ERROR: Please specify one of --attribute or --totp, not both. -- 錯誤:請擇一指定 --attribute 或 --totp,不可同時使用。 -- -- -- ERROR: attribute %1 is ambiguous, it matches %2. -- 錯誤:屬性 %1 有歧義,符合 %2。 -- -- -- Attribute "%1" not found. -- 找不到屬性「%1」。 -- -- -- Entry's "%1" attribute copied to the clipboard! -- 項目的「%1」屬性已複製到剪貼簿! -- -- -- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). -- Yubikey 槽位以及選用序號,用來存取資料庫(例如 1:7370001)。 -- -- -- slot[:serial] -- 槽位[:序號] -- -- -- Target decryption time in MS for the database. -- 資料庫的目標解密時間,以「毫秒」計算。 -- -- -- time -- 時間 -- -- -- Set the key file for the database. -- 設定資料庫的金鑰檔。 -- -- -- Set a password for the database. -- 設定資料庫的密碼。 -- -- -- Invalid decryption time %1. -- 無效的解密時間 %1。 -- -- -- Target decryption time must be between %1 and %2. -- 目標解密時間必須落在 %1 與 %2 之間。 -- -- -- Failed to set database password. -- 設定資料庫密碼失敗。 -- -- -- Benchmarking key derivation function for %1ms delay. -- 效能測試:金鑰推導函式於 %1 毫秒的延遲。 -- -- -- Setting %1 rounds for key derivation function. -- 為金鑰推導函式設定 %1 個回合。 -- -- -- error while setting database key derivation settings. -- 進行金鑰推導函式設定時出錯。 -- -- -- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. -- 匯出所用的格式。可用選項為 'xml' 或 'csv'。預設為 'xml'。 -- -- -- Unable to import XML database: %1 -- 無法匯入 XML 資料庫: %1 -- -- -- Show a database's information. -- 顯示資料庫資訊。 -- -- -- UUID: -- UUID: -- -- -- Name: -- 名稱: -- -- -- Description: -- 描述: -- -- -- Cipher: -- 加密法: -- -- -- KDF: -- KDF: -- -- -- Recycle bin is enabled. -- 回收桶已啟用。 -- -- -- Recycle bin is not enabled. -- 回收桶尚未啟用。 -- -- -- Invalid command %1. -- 無效的指令 %1。 -- -- -- Invalid YubiKey serial %1 -- 無效的 YubiKey 序號 %1 -- -- -- Please touch the button on your YubiKey to continue… -- 請接觸您 YubiKey 上的按鈕以繼續… -- -- -- Do you want to create a database with an empty password? [y/N]: -- 是否要建立使用空密碼的資料庫? [y/N]: -- -- -- Repeat password: -- 重複密碼: -- -- -- Error: Passwords do not match. -- 錯誤:密碼不符合。 -- -- -- All clipping programs failed. Tried %1 -- -- 所有複製程式皆失敗。嘗試 %1 -- -- -- -- AES (%1 rounds) -- AES (%1 個回合) -- -- -- AES 256-bit -- AES 256-bit -- -- -- Twofish 256-bit -- Twofish 256-bit -- -- -- ChaCha20 256-bit -- ChaCha20 256-bit -- -- -- Benchmark %1 delay -- 效能測試 %1 延遲 -- -- -- %1 ms -- milliseconds -- %1 毫秒 -- -- -- %1 s -- seconds -- %1 秒 -- -- -- path to a custom local config file -- 本地的自定義設定檔的路徑 -- -- -- WARNING: You are using an old key file format which KeePassXC may --stop supporting in the future. -- --Please consider generating a new key file. -- 警告:您使用的金鑰檔案格式版本過舊,KeePassXC 可能 --在未來停止支援。 -- --請考慮產生一組新的金鑰檔案。 -- -- -- Argon2%1 (%2 rounds, %3 KB) -- Argon2%1 (%2 個回合, %3 KB) -- -- -- Argon2d (KDBX 4 – recommended) -- Argon2d (KDBX 4 – 推薦) -- -- -- Argon2id (KDBX 4) -- Argon2id (KDBX 4) -- -- -- TOTP -- TOTP -- -- -- Icon -- 圖示 -- -- -- Unsupported key file version: %1 -- 不支援的金鑰檔案版本: %1 -- -- -- Checksum mismatch! Key file may be corrupt. -- 核對和不匹配!金鑰檔案可能已損壞。 -- -- -- Unexpected key file data! Key file may be corrupt. -- 出現未預期的金鑰檔案資料!金鑰檔案可能已損壞。 -- -- -- -- QtIOCompressor -- -- Internal zlib error when compressing: -- 壓縮時出現內部 zlib 錯誤: -- -- -- Error writing to underlying device: -- 寫入底層裝置時出錯: -- -- -- Error opening underlying device: -- 開啟底層裝置時出錯: -- -- -- Error reading data from underlying device: -- 從底層裝置讀取資料時出錯: -- -- -- Internal zlib error when decompressing: -- 解壓縮時出現內部 zlib 錯誤: -- -- -- -- QtIOCompressor::open -- -- The gzip format not supported in this version of zlib. -- 此版本的 zlib 不支援 gzip 格式。 -- -- -- Internal zlib error: -- 內部 zlib 錯誤: -- -- -- -- ReportsWidgetHealthcheck -- -- Also show entries that have been excluded from reports -- 也顯示已從報告排除的項目 -- -- -- Hover over reason to show additional details. Double-click entries to edit. -- 將游標懸浮於原因以顯示額外詳情。雙擊項目可編輯。 -- -- -- Bad -- Password quality -- 糟糕 -- -- -- Bad — password must be changed -- 糟糕 — 密碼必須更改 -- -- -- Poor -- Password quality -- 極弱 -- -- -- Poor — password should be changed -- 極弱 — 密碼應該更改 -- -- -- Weak -- Password quality -- 較弱 -- -- -- Weak — consider changing the password -- 較弱 — 可考慮更改密碼 -- -- -- (Excluded) -- (已排除) -- -- -- This entry is being excluded from reports -- 此項目已從報告排除 -- -- -- Please wait, health data is being calculated... -- 請稍候,正在計算健康資料... -- -- -- Congratulations, everything is healthy! -- 恭喜,所有項目皆正常! -- -- -- Title -- 標題 -- -- -- Path -- 路徑 -- -- -- Score -- 分數 -- -- -- Reason -- 原因 -- -- -- Edit Entry... -- 編輯項目... -- -- -- Exclude from reports -- 從報告排除 -- -- -- -- ReportsWidgetHibp -- -- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. -- 注意:此報告需要傳送資訊至 Have I Been Pwned 線上服務 (https://haveibeenpwned.com)。若您選擇繼續,將計算您資料庫內密碼的加密雜湊值,並以安全連線傳送雜湊值前五個字元至此服務。從傳送資料沒辦法推算您的密碼,您的資料庫將安全無虞。但是,您傳送的密碼總數以及 IP 位址將會暴露給此服務。 -- -- -- Perform Online Analysis -- 執行線上分析 -- -- -- Also show entries that have been excluded from reports -- 也顯示已從報告排除的項目 -- -- -- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. -- 此 KeePassXC 建置版本未包含網路功能。需要網路功能才能向 Have I Been Pwned 資料庫檢查您的密碼。 -- -- -- Congratulations, no exposed passwords! -- 恭喜,沒有任何泄露的密碼! -- -- -- Title -- 標題 -- -- -- Path -- 路徑 -- -- -- Password exposed… -- 已泄露的密碼… -- -- -- (Excluded) -- (已排除) -- -- -- This entry is being excluded from reports -- 此項目已從報告排除 -- -- -- once -- 一次 -- -- -- up to 10 times -- 多達 10 次 -- -- -- up to 100 times -- 多達 100 次 -- -- -- up to 1000 times -- 多達 1000 次 -- -- -- up to 10,000 times -- 多達 10,000 次 -- -- -- up to 100,000 times -- 多達 100,000 次 -- -- -- up to a million times -- 多達一百萬次 -- -- -- millions of times -- 數百萬次 -- -- -- Edit Entry... -- 編輯項目... -- -- -- Exclude from reports -- 從報告排除 -- -- -- -- ReportsWidgetStatistics -- -- Hover over lines with error icons for further information. -- 將游標懸浮於錯誤圖示出現的欄位,可獲得更多資訊。 -- -- -- Name -- 名稱 -- -- -- Value -- -- -- -- Please wait, database statistics are being calculated... -- 請稍候,正在計算並統計資料庫數據... -- -- -- Database name -- 資料庫名稱 -- -- -- Description -- 描述 -- -- -- Location -- 位置 -- -- -- Last saved -- 最近儲存於 -- -- -- Unsaved changes -- 未儲存變更 -- -- -- yes -- -- -- -- no -- -- -- -- The database was modified, but the changes have not yet been saved to disk. -- 資料庫已被更改,但變更尚未被儲存至磁碟。 -- -- -- Number of groups -- 群組數 -- -- -- Number of entries -- 項目數 -- -- -- Number of expired entries -- 已過期項目數 -- -- -- The database contains entries that have expired. -- 資料庫包含已過期的項目。 -- -- -- Unique passwords -- 獨特的密碼 -- -- -- Non-unique passwords -- 非獨特的密碼 -- -- -- More than 10% of passwords are reused. Use unique passwords when possible. -- 超過 10% 的密碼被重複使用。請盡可能使用獨一無二的密碼。 -- -- -- Maximum password reuse -- 最大密碼重複使用次數 -- -- -- Some passwords are used more than three times. Use unique passwords when possible. -- 某些密碼被使用超過三次以上。請盡可能使用獨一無二的密碼。 -- -- -- Number of short passwords -- 過短密碼數 -- -- -- Recommended minimum password length is at least 8 characters. -- 建議最短密碼長度為至少 8 個字元。 -- -- -- Number of weak passwords -- 弱密碼數 -- -- -- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. -- 建議使用足夠長度、亂度,且評價為「較好」或「極好」的密碼。 -- -- -- Entries excluded from reports -- 從報告排除的項目 -- -- -- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. -- 從報告排除項目(比如說,密碼較弱也沒關係)不一定會造成問題,但是,您仍應該不時留意這些項目。 -- -- -- Average password length -- 平均密碼長度 -- -- -- %1 characters -- %1 字元 -- -- -- Average password length is less than ten characters. Longer passwords provide more security. -- 平均密碼長度小於 10 個字元。密碼越長,能提供的保護越多。 -- -- -- -- SSHAgent -- -- Agent connection failed. -- 代理連線失敗。 -- -- -- Agent protocol error. -- 代理協議錯誤。 -- -- -- No agent running, cannot add identity. -- 代理尚未執行,無法加入身份。 -- -- -- No agent running, cannot remove identity. -- 代理尚未執行,無法移除身份。 -- -- -- Agent refused this identity. Possible reasons include: -- 代理拒絕此身份。可能的原因包括: -- -- -- The key has already been added. -- 金鑰已經加入。 -- -- -- Restricted lifetime is not supported by the agent (check options). -- 代理並未支援受限制的生命周期(請檢查選項)。 -- -- -- A confirmation request is not supported by the agent (check options). -- 代理並未支援確認請求(請檢查選項)。 -- -- -- Key identity ownership conflict. Refusing to add. -- 金鑰身份擁有權發生衝突。拒絕加入。 -- -- -- No agent running, cannot list identities. -- 代理尚未執行,無法列舉身份。 -- -- -- -- SearchHelpWidget -- -- Search Help -- 搜尋幫助 -- -- -- Search terms are as follows: [modifiers][field:]["]term["] -- 搜尋條件如下所示:[修飾子][欄位:]["]條件["] -- -- -- Every search term must match (ie, logical AND) -- 必須符合所有搜尋條件(即邏輯 AND) -- -- -- Modifiers -- 修飾子 -- -- -- exclude term from results -- 從結果排除條件 -- -- -- match term exactly -- 完全匹配條件 -- -- -- use regex in term -- 條件使用 regex 正規表示式 -- -- -- Fields -- 欄位 -- -- -- Term Wildcards -- 條件通配符 -- -- -- match anything -- 任意匹配 -- -- -- match one -- 匹配一組 -- -- -- logical OR -- 邏輯 OR -- -- -- Examples -- 範例 -- -- -- -- SearchWidget -- -- Search -- 搜尋 -- -- -- Limit search to selected group -- 限制只搜尋選定的群組 -- -- -- Search Help -- 搜尋幫助 -- -- -- Search (%1)... -- Search placeholder text, %1 is the keyboard shortcut -- 搜尋 (%1)... -- -- -- Case sensitive -- 區分大小寫 -- -- -- -- SettingsWidgetFdoSecrets -- -- Options -- 選項 -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- 啟用 KeepassXC 與 Freedesktop.org 保密服務的整合 -- -- -- General -- 通用 -- -- -- Show notification when credentials are requested -- 要求憑證時顯示通知 -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- <html><head/><body><p>若資料庫內的回收桶已經啟用,項目會直接被移至回收桶。否則,項目將會被刪除且不做任何確認。</p><p>若有項目被其他項目引用,您仍將會收到通知。</p></body></html> -- -- -- Exposed database groups: -- 開放的資料庫群組: -- -- -- Authorization -- 認證 -- -- -- These applications are currently connected: -- 目前已連結的應用程式: -- -- -- Don't confirm when entries are deleted by clients -- 項目被客戶端刪除時不做確認 -- -- -- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. -- <b>錯誤:</b>連接 DBus 失敗。請檢查您的 DBus 設定。 -- -- -- <b>Warning:</b> -- <b>警告:</b> -- -- -- Save current changes to activate the plugin and enable editing of this section. -- 儲存目前變更,以啟用插件並編輯此區域。 -- -- -- -- SettingsWidgetKeeShare -- -- Active -- 作用項 -- -- -- Allow export -- 允許匯出 -- -- -- Allow import -- 允許匯入 -- -- -- Own certificate -- 自帶證書 -- -- -- Fingerprint: -- 指紋: -- -- -- Certificate: -- 證書: -- -- -- Signer -- 簽署者 -- -- -- Key: -- 金鑰: -- -- -- Generate -- 產生 -- -- -- Import -- 匯入 -- -- -- Export -- 匯出 -- -- -- Imported certificates -- 匯入的證書 -- -- -- Trust -- 信任 -- -- -- Ask -- 詢問 -- -- -- Untrust -- 不信任 -- -- -- Remove -- 移除 -- -- -- Path -- 路徑 -- -- -- Status -- 狀態 -- -- -- Fingerprint -- 指紋 -- -- -- Certificate -- 證書 -- -- -- Trusted -- 信任 -- -- -- Untrusted -- 不信任 -- -- -- Unknown -- 未知 -- -- -- key.share -- Filetype for KeeShare key -- key.share -- -- -- KeeShare key file -- KeeShare 金鑰檔 -- -- -- All files -- 所有檔案 -- -- -- Select path -- 選擇路徑 -- -- -- Exporting changed certificate -- 匯出已更改的證書 -- -- -- The exported certificate is not the same as the one in use. Do you want to export the current certificate? -- 匯出的證書與目前使用的證書不同。真的要匯出目前的證書? -- -- -- Signer: -- 簽署者: -- -- -- Allow KeeShare imports -- 允許 KeeShare 匯入 -- -- -- Allow KeeShare exports -- 允許 KeeShare 匯出 -- -- -- Only show warnings and errors -- 只顯示警告與錯誤 -- -- -- Key -- -- -- -- Signer name field -- 簽署者名稱欄位 -- -- -- Generate new certificate -- 產生新證書 -- -- -- Import existing certificate -- 匯入既存證書 -- -- -- Export own certificate -- 匯出自帶證書 -- -- -- Known shares -- 已知分享 -- -- -- Trust selected certificate -- 信任所選證書 -- -- -- Ask whether to trust the selected certificate every time -- 每次詢問是否信任所選證書 -- -- -- Untrust selected certificate -- 取消信任所選證書 -- -- -- Remove selected certificate -- 移除所選證書 -- -- -- -- ShareExport -- -- Overwriting signed share container is not supported - export prevented -- 不支援覆寫已簽署的分享容器 - 匯出已阻止 -- -- -- Could not write export container (%1) -- 無法寫入匯出的共享容器 (%1) -- -- -- Could not embed signature: Could not open file to write (%1) -- 無法嵌入簽名:無法開啟檔案來寫入 (%1) -- -- -- Could not embed signature: Could not write file (%1) -- 無法嵌入簽名:無法寫入檔案 (%1) -- -- -- Could not embed database: Could not open file to write (%1) -- 無法嵌入資料庫:無法開啟檔案來寫入 (%1) -- -- -- Could not embed database: Could not write file (%1) -- 無法嵌入資料庫:無法寫入檔案 (%1) -- -- -- Overwriting unsigned share container is not supported - export prevented -- 不支援覆寫未簽署的分享容器 - 匯出已阻止 -- -- -- Could not write export container -- 無法寫入匯出的共享容器 -- -- -- Unexpected export error occurred -- 出現未預期的匯出錯誤 -- -- -- -- ShareImport -- -- Import from container without signature -- 從沒有簽署的容器匯入 -- -- -- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? -- 我們無法確認分享容器的來源,因為它未被簽署過。真的要從 %1 匯入? -- -- -- Import from container with certificate -- 從帶有證書的容器匯入 -- -- -- Do you want to trust %1 with the fingerprint of %2 from %3? -- 是否要信任 %1,來自 %3 的 %2 的指紋? -- -- -- Not this time -- 這次不要 -- -- -- Never -- 從不 -- -- -- Always -- 永遠 -- -- -- Just this time -- 只有這次 -- -- -- Signed share container are not supported - import prevented -- 不支援已簽署的分享容器 - 匯入已阻止 -- -- -- File is not readable -- 檔案無法讀取 -- -- -- Invalid sharing container -- 無效的分享容器 -- -- -- Untrusted import prevented -- 阻止不受信任的匯入 -- -- -- Successful signed import -- 簽署已成功匯入 -- -- -- Unsigned share container are not supported - import prevented -- 不支援未簽署的分享容器 - 匯入已阻止 -- -- -- Successful unsigned import -- 未簽署已成功匯入 -- -- -- File does not exist -- 檔案不存在 -- -- -- Unknown share container type -- 未知的共享容器種類 -- -- -- -- ShareObserver -- -- Import from %1 failed (%2) -- 從 %1 匯入失敗 (%2) -- -- -- Import from %1 successful (%2) -- 從 %1 匯入成功 (%2) -- -- -- Imported from %1 -- 從 %1 匯入 -- -- -- Export to %1 failed (%2) -- 匯出至 %1 失敗 (%2) -- -- -- Export to %1 successful (%2) -- 匯出至 %1 成功 (%2) -- -- -- Export to %1 -- 匯出至 %1 -- -- -- Multiple import source path to %1 in %2 -- 多個匯入來源路徑至 %1,位於 %2 -- -- -- Conflicting export target path %1 in %2 -- 衝突的匯出目標路徑 %1,位於 %2 -- -- -- -- TotpDialog -- -- Timed Password -- 定時型密碼 -- -- -- 000000 -- 000000 -- -- -- Copy -- 複製 -- -- -- Expires in <b>%n</b> second(s) -- <b>%n</b> 秒後過期 -- -- -- -- TotpExportSettingsDialog -- -- Copy -- 複製 -- -- -- NOTE: These TOTP settings are custom and may not work with other authenticators. -- TOTP QR code dialog warning -- 注意:這些 TOTP 設定為自定義項目,可能無法與其他驗証器一起使用。 -- -- -- There was an error creating the QR code. -- 建立 QR 碼時出現錯誤。 -- -- -- Closing in %1 seconds. -- 將於 %1 秒後關閉。 -- -- -- -- TotpSetupDialog -- -- Setup TOTP -- 設置 TOTP -- -- -- Default RFC 6238 token settings -- 預設 RFC 6238 令牌設定 -- -- -- Steam token settings -- Steam 令牌設定 -- -- -- Use custom settings -- 使用自定義設定 -- -- -- Custom Settings -- 自定義設定 -- -- -- Time step: -- 時間間隔: -- -- -- sec -- Seconds -- -- -- -- Code size: -- 代碼長度: -- -- -- Secret Key: -- 私密金鑰: -- -- -- Secret key must be in Base32 format -- 私密金鑰必須為 Base32 格式 -- -- -- Secret key field -- 私密金鑰欄位 -- -- -- Algorithm: -- 演算法: -- -- -- Time step field -- 時間間隔欄位 -- -- -- digits -- 位數 -- -- -- Invalid TOTP Secret -- 無效的 TOTP 私鑰 -- -- -- You have entered an invalid secret key. The key must be in Base32 format. --Example: JBSWY3DPEHPK3PXP -- 您輸入的私密金鑰無效。金鑰必須為 Base32 格式。 --範例:JBSWY3DPEHPK3PXP -- -- -- Confirm Remove TOTP Settings -- 確認移除 TOTP 設定 -- -- -- Are you sure you want to delete TOTP settings for this entry? -- 您確定要刪除此項目的 TOTP 設定? -- -- -- -- URLEdit -- -- Invalid URL -- 無效的 URL -- -- -- -- UpdateCheckDialog -- -- Checking for updates -- 正在檢查更新 -- -- -- Checking for updates... -- 正在檢查更新... -- -- -- Close -- 關閉 -- -- -- Update Error! -- 更新錯誤! -- -- -- An error occurred in retrieving update information. -- 接收更新資訊時出錯。 -- -- -- Please try again later. -- 請稍後再試。 -- -- -- Software Update -- 軟體更新 -- -- -- A new version of KeePassXC is available! -- KeePassXC 有新版本可用! -- -- -- KeePassXC %1 is now available — you have %2. -- KeePassXC %1 可供使用 — 您的版本為 %2。 -- -- -- Download it at keepassxc.org -- 在 keepassxc.org 下載 -- -- -- You're up-to-date! -- 您正使用最新版本! -- -- -- KeePassXC %1 is currently the newest version available -- KeePassXC %1 目前為最新版本 -- -- -- -- WelcomeWidget -- -- Start storing your passwords securely in a KeePassXC database -- 從現在開始,將您的密碼安全地保存到 KeePassXC 資料庫 -- -- -- Create new database -- 建立新資料庫 -- -- -- Open existing database -- 開啟現有資料庫 -- -- -- Import from KeePass 1 -- 從 KeePass 1 匯入 -- -- -- Import from CSV -- 從 CSV 匯入 -- -- -- Recent databases -- 近期的資料庫 -- -- -- Welcome to KeePassXC %1 -- 歡迎來到 KeePassXC %1 -- -- -- Import from 1Password -- 從 1Password 匯入 -- -- -- Open a recent database -- 開啟一個近期的資料庫 -- -- -- -- YubiKey -- -- %1 [%2] Configured Slot - %3 -- %1 [%2] 設定槽位 - %3 -- -- -- %1 [%2] Challenge Response - Slot %3 - %4 -- %1 [%2] 挑戰應答 - 槽位 %3 - %4 -- -- -- Press -- 按下 -- -- -- Passive -- 被動 -- -- -- %1 Invalid slot specified - %2 -- %1 無效的指定槽位 - %2 -- -- -- The YubiKey interface has not been initialized. -- YubiKey 介面尚未初始化。 -- -- -- Hardware key is currently in use. -- 硬體金鑰目前正在使用當中。 -- -- -- Could not find hardware key with serial number %1. Please plug it in to continue. -- 找不到流水號為 %1 的硬體金鑰。請插入後繼續。 -- -- -- Hardware key timed out waiting for user interaction. -- 硬體金鑰等待使用者互動超時。 -- -- -- A USB error ocurred when accessing the hardware key: %1 -- 存取硬體金鑰時出現 USB 錯誤:%1 -- -- -- Failed to complete a challenge-response, the specific error was: %1 -- 無法完成挑戰應答,具體錯誤為:%1 -- -- -- -- YubiKeyEditWidget -- -- Refresh -- 更新 -- -- -- YubiKey Challenge-Response -- YubiKey 挑戰應答 -- -- -- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> -- <p>若您擁有<a href="https://www.yubico.com/">YubiKey</a>,可以用它獲得額外保護。</p><p>需要將 YubiKey 其中一個槽位設置為 <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 挑戰應答</a>。</p> -- -- -- Refresh hardware tokens -- 更新硬體令牌 -- -- -- Hardware key slot selection -- 硬體金鑰槽位選擇 -- -- -- Could not find any hardware keys! -- 找不到任何硬體金鑰! -- -- -- Selected hardware key slot does not support challenge-response! -- 所選的硬體金鑰槽位不支援挑戰應答! -- -- -- Detecting hardware keys… -- 偵測硬體金鑰… -- -- -- No hardware keys detected -- 未偵測到硬體金鑰 -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/translations/update.sh keepassxc-2.6.4-patched/share/translations/update.sh ---- keepassxc-2.6.4-orig/share/translations/update.sh 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/translations/update.sh 1970-01-01 01:00:00.000000000 +0100 -@@ -1,70 +0,0 @@ --#!/usr/bin/env bash --# --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . --# -- --BASEDIR="$(dirname $0)" -- --PUSH=true --PULL=true --UPDATE=true -- --if [ "$1" == "push" ]; then -- PULL=false --elif [ "$1" == "pull" ]; then -- PUSH=false -- UPDATE=false --elif [ "$1" == "update" ]; then -- PUSH=false -- PULL=false --elif [ "$1" != "" ]; then -- echo "Unknown command '${1}'" -- echo "Usage: $(basename $0) [update|pull|push] [additional tx options]" -- exit 1 --fi -- --shift -- --cd "${BASEDIR}/../.." -- --if $UPDATE; then -- echo "Updating source files..." -- -- LUPDATE=lupdate-qt5 -- command -v $LUPDATE > /dev/null -- if [ $? -ne 0 ]; then -- LUPDATE=lupdate -- fi -- $LUPDATE -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts -- echo --fi -- --if $PUSH; then -- echo "Pushing source files to Transifex..." -- tx push -s $@ -- echo --fi -- --if $PULL; then -- echo "Removing stale translations..." -- mv share/translations/keepassx_en.ts share/translations/keepassx_en.ts.bak -- rm share/translations/*.ts -- mv share/translations/keepassx_en.ts.bak share/translations/keepassx_en.ts -- -- echo "Pulling translations from Transifex..." -- tx pull -af --minimum-perc=40 $@ -- echo --fi -diff -urNr keepassxc-2.6.4-orig/share/windows/create-ico.sh keepassxc-2.6.4-patched/share/windows/create-ico.sh ---- keepassxc-2.6.4-orig/share/windows/create-ico.sh 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/create-ico.sh 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --#!/usr/bin/env bash -- --NC='\033[0m' --RED='\033[0;31m' --YELLOW='\033[0;33m' -- --if [[ -z "$1" ]]; then -- echo -e "${RED}You must include an SVG file to convert!${NC}" -- exit 1 --fi -- --outfile=$2 --if [[ -z "outfile" ]]; then -- outfile="logo.ico" --fi -- --if ! command -v "inkscape" &> /dev/null; then -- echo -e "${YELLOW}Could not find inkscape; $outfile not built!${NC}" -- exit 0 --fi -- --echo "Generating $outfile from $1..." --size_list=(16 24 32 48 64 128 256) --for size in ${size_list[@]}; do -- inkscape -z -e $size.png -w $size -h $size "$1" >/dev/null 2>/dev/null --done -- --images=`printf "%s.png " "${size_list[@]}"` --convert $images $outfile -- --rm $images -diff -urNr keepassxc-2.6.4-orig/share/windows/icon.rc keepassxc-2.6.4-patched/share/windows/icon.rc ---- keepassxc-2.6.4-orig/share/windows/icon.rc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/icon.rc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,2 +0,0 @@ --IDI_ICON1 ICON DISCARDABLE "keepassxc.ico" --IDI_KDBX ICON DISCARDABLE "keepassxc-kdbx.ico" -\ Manca newline alla fine del file -I file binari keepassxc-2.6.4-orig/share/windows/installer-header.bmp e keepassxc-2.6.4-patched/share/windows/installer-header.bmp sono diversi -I file binari keepassxc-2.6.4-orig/share/windows/installer-wizard.bmp e keepassxc-2.6.4-patched/share/windows/installer-wizard.bmp sono diversi -I file binari keepassxc-2.6.4-orig/share/windows/keepassxc.ico e keepassxc-2.6.4-patched/share/windows/keepassxc.ico sono diversi -I file binari keepassxc-2.6.4-orig/share/windows/keepassxc-kdbx.ico e keepassxc-2.6.4-patched/share/windows/keepassxc-kdbx.ico sono diversi -diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_ExitDlg.wxs keepassxc-2.6.4-patched/share/windows/KPXC_ExitDlg.wxs ---- keepassxc-2.6.4-orig/share/windows/KPXC_ExitDlg.wxs 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/KPXC_ExitDlg.wxs 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ -- -- -- -- -- -- -- --

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_InstallDirDlg.wxs keepassxc-2.6.4-patched/share/windows/KPXC_InstallDirDlg.wxs ---- keepassxc-2.6.4-orig/share/windows/KPXC_InstallDirDlg.wxs 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/KPXC_InstallDirDlg.wxs 1970-01-01 01:00:00.000000000 +0100 -@@ -1,30 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- 1 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_InstallDir.wxs keepassxc-2.6.4-patched/share/windows/KPXC_InstallDir.wxs ---- keepassxc-2.6.4-orig/share/windows/KPXC_InstallDir.wxs 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/KPXC_InstallDir.wxs 1970-01-01 01:00:00.000000000 +0100 -@@ -1,81 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1 -- "1"]]> -- -- 1 -- -- NOT Installed -- Installed AND PATCH -- -- 1 -- LicenseAccepted = "1" -- -- 1 -- 1 -- NOT WIXUI_DONTVALIDATEPATH -- "1"]]> -- WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" -- 1 -- 1 -- -- NOT Installed -- Installed AND NOT PATCH -- Installed AND PATCH -- -- 1 -- -- 1 -- 1 -- 1 -- -- -- -- -- -- -- -I file binari keepassxc-2.6.4-orig/share/windows/wix-banner.bmp e keepassxc-2.6.4-patched/share/windows/wix-banner.bmp sono diversi -I file binari keepassxc-2.6.4-orig/share/windows/wix-dialog.bmp e keepassxc-2.6.4-patched/share/windows/wix-dialog.bmp sono diversi -diff -urNr keepassxc-2.6.4-orig/share/windows/wix-patch.xml keepassxc-2.6.4-patched/share/windows/wix-patch.xml ---- keepassxc-2.6.4-orig/share/windows/wix-patch.xml 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/wix-patch.xml 1970-01-01 01:00:00.000000000 +0100 -@@ -1,10 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/share/windows/wix-template.xml keepassxc-2.6.4-patched/share/windows/wix-template.xml ---- keepassxc-2.6.4-orig/share/windows/wix-template.xml 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/windows/wix-template.xml 1970-01-01 01:00:00.000000000 +0100 -@@ -1,111 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ProductIcon.ico -- -- -- -- -- -- -- -- -- -- -- -- -- -- LAUNCHAPPONEXIT -- -- -- -- -- -- -- -- -- AUTOSTARTPROGRAM -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSTALLDESKTOPSHORTCUT -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -I file binari keepassxc-2.6.4-orig/share/wizard/background-pixmap.png e keepassxc-2.6.4-patched/share/wizard/background-pixmap.png sono diversi -diff -urNr keepassxc-2.6.4-orig/share/wizard/background-pixmap.svg keepassxc-2.6.4-patched/share/wizard/background-pixmap.svg ---- keepassxc-2.6.4-orig/share/wizard/background-pixmap.svg 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/wizard/background-pixmap.svg 1970-01-01 01:00:00.000000000 +0100 -@@ -1,313 +0,0 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- image/svg+xml -- -- -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/share/wizard/wizard.qrc keepassxc-2.6.4-patched/share/wizard/wizard.qrc ---- keepassxc-2.6.4-orig/share/wizard/wizard.qrc 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/wizard/wizard.qrc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,6 +0,0 @@ -- -- -- -- background-pixmap.png -- -- -diff -urNr keepassxc-2.6.4-orig/share/wordlists/eff_large.wordlist keepassxc-2.6.4-patched/share/wordlists/eff_large.wordlist ---- keepassxc-2.6.4-orig/share/wordlists/eff_large.wordlist 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/share/wordlists/eff_large.wordlist 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7776 +0,0 @@ --abacus --abdomen --abdominal --abide --abiding --ability --ablaze --able --abnormal --abrasion --abrasive --abreast --abridge --abroad --abruptly --absence --absentee --absently --absinthe --absolute --absolve --abstain --abstract --absurd --accent --acclaim --acclimate --accompany --account --accuracy --accurate --accustom --acetone --achiness --aching --acid --acorn --acquaint --acquire --acre --acrobat --acronym --acting --action --activate --activator --active --activism --activist --activity --actress --acts --acutely --acuteness --aeration --aerobics --aerosol --aerospace --afar --affair --affected --affecting --affection --affidavit --affiliate --affirm --affix --afflicted --affluent --afford --affront --aflame --afloat --aflutter --afoot --afraid --afterglow --afterlife --aftermath --aftermost --afternoon --aged --ageless --agency --agenda --agent --aggregate --aghast --agile --agility --aging --agnostic --agonize --agonizing --agony --agreeable --agreeably --agreed --agreeing --agreement --aground --ahead --ahoy --aide --aids --aim --ajar --alabaster --alarm --albatross --album --alfalfa --algebra --algorithm --alias --alibi --alienable --alienate --aliens --alike --alive --alkaline --alkalize --almanac --almighty --almost --aloe --aloft --aloha --alone --alongside --aloof --alphabet --alright --although --altitude --alto --aluminum --alumni --always --amaretto --amaze --amazingly --amber --ambiance --ambiguity --ambiguous --ambition --ambitious --ambulance --ambush --amendable --amendment --amends --amenity --amiable --amicably --amid --amigo --amino --amiss --ammonia --ammonium --amnesty --amniotic --among --amount --amperage --ample --amplifier --amplify --amply --amuck --amulet --amusable --amused --amusement --amuser --amusing --anaconda --anaerobic --anagram --anatomist --anatomy --anchor --anchovy --ancient --android --anemia --anemic --aneurism --anew --angelfish --angelic --anger --angled --angler --angles --angling --angrily --angriness --anguished --angular --animal --animate --animating --animation --animator --anime --animosity --ankle --annex --annotate --announcer --annoying --annually --annuity --anointer --another --answering --antacid --antarctic --anteater --antelope --antennae --anthem --anthill --anthology --antibody --antics --antidote --antihero --antiquely --antiques --antiquity --antirust --antitoxic --antitrust --antiviral --antivirus --antler --antonym --antsy --anvil --anybody --anyhow --anymore --anyone --anyplace --anything --anytime --anyway --anywhere --aorta --apache --apostle --appealing --appear --appease --appeasing --appendage --appendix --appetite --appetizer --applaud --applause --apple --appliance --applicant --applied --apply --appointee --appraisal --appraiser --apprehend --approach --approval --approve --apricot --april --apron --aptitude --aptly --aqua --aqueduct --arbitrary --arbitrate --ardently --area --arena --arguable --arguably --argue --arise --armadillo --armband --armchair --armed --armful --armhole --arming --armless --armoire --armored --armory --armrest --army --aroma --arose --around --arousal --arrange --array --arrest --arrival --arrive --arrogance --arrogant --arson --art --ascend --ascension --ascent --ascertain --ashamed --ashen --ashes --ashy --aside --askew --asleep --asparagus --aspect --aspirate --aspire --aspirin --astonish --astound --astride --astrology --astronaut --astronomy --astute --atlantic --atlas --atom --atonable --atop --atrium --atrocious --atrophy --attach --attain --attempt --attendant --attendee --attention --attentive --attest --attic --attire --attitude --attractor --attribute --atypical --auction --audacious --audacity --audible --audibly --audience --audio --audition --augmented --august --authentic --author --autism --autistic --autograph --automaker --automated --automatic --autopilot --available --avalanche --avatar --avenge --avenging --avenue --average --aversion --avert --aviation --aviator --avid --avoid --await --awaken --award --aware --awhile --awkward --awning --awoke --awry --axis --babble --babbling --babied --baboon --backache --backboard --backboned --backdrop --backed --backer --backfield --backfire --backhand --backing --backlands --backlash --backless --backlight --backlit --backlog --backpack --backpedal --backrest --backroom --backshift --backside --backslid --backspace --backspin --backstab --backstage --backtalk --backtrack --backup --backward --backwash --backwater --backyard --bacon --bacteria --bacterium --badass --badge --badland --badly --badness --baffle --baffling --bagel --bagful --baggage --bagged --baggie --bagginess --bagging --baggy --bagpipe --baguette --baked --bakery --bakeshop --baking --balance --balancing --balcony --balmy --balsamic --bamboo --banana --banish --banister --banjo --bankable --bankbook --banked --banker --banking --banknote --bankroll --banner --bannister --banshee --banter --barbecue --barbed --barbell --barber --barcode --barge --bargraph --barista --baritone --barley --barmaid --barman --barn --barometer --barrack --barracuda --barrel --barrette --barricade --barrier --barstool --bartender --barterer --bash --basically --basics --basil --basin --basis --basket --batboy --batch --bath --baton --bats --battalion --battered --battering --battery --batting --battle --bauble --bazooka --blabber --bladder --blade --blah --blame --blaming --blanching --blandness --blank --blaspheme --blasphemy --blast --blatancy --blatantly --blazer --blazing --bleach --bleak --bleep --blemish --blend --bless --blighted --blimp --bling --blinked --blinker --blinking --blinks --blip --blissful --blitz --blizzard --bloated --bloating --blob --blog --bloomers --blooming --blooper --blot --blouse --blubber --bluff --bluish --blunderer --blunt --blurb --blurred --blurry --blurt --blush --blustery --boaster --boastful --boasting --boat --bobbed --bobbing --bobble --bobcat --bobsled --bobtail --bodacious --body --bogged --boggle --bogus --boil --bok --bolster --bolt --bonanza --bonded --bonding --bondless --boned --bonehead --boneless --bonelike --boney --bonfire --bonnet --bonsai --bonus --bony --boogeyman --boogieman --book --boondocks --booted --booth --bootie --booting --bootlace --bootleg --boots --boozy --borax --boring --borough --borrower --borrowing --boss --botanical --botanist --botany --botch --both --bottle --bottling --bottom --bounce --bouncing --bouncy --bounding --boundless --bountiful --bovine --boxcar --boxer --boxing --boxlike --boxy --breach --breath --breeches --breeching --breeder --breeding --breeze --breezy --brethren --brewery --brewing --briar --bribe --brick --bride --bridged --brigade --bright --brilliant --brim --bring --brink --brisket --briskly --briskness --bristle --brittle --broadband --broadcast --broaden --broadly --broadness --broadside --broadways --broiler --broiling --broken --broker --bronchial --bronco --bronze --bronzing --brook --broom --brought --browbeat --brownnose --browse --browsing --bruising --brunch --brunette --brunt --brush --brussels --brute --brutishly --bubble --bubbling --bubbly --buccaneer --bucked --bucket --buckle --buckshot --buckskin --bucktooth --buckwheat --buddhism --buddhist --budding --buddy --budget --buffalo --buffed --buffer --buffing --buffoon --buggy --bulb --bulge --bulginess --bulgur --bulk --bulldog --bulldozer --bullfight --bullfrog --bullhorn --bullion --bullish --bullpen --bullring --bullseye --bullwhip --bully --bunch --bundle --bungee --bunion --bunkbed --bunkhouse --bunkmate --bunny --bunt --busboy --bush --busily --busload --bust --busybody --buzz --cabana --cabbage --cabbie --cabdriver --cable --caboose --cache --cackle --cacti --cactus --caddie --caddy --cadet --cadillac --cadmium --cage --cahoots --cake --calamari --calamity --calcium --calculate --calculus --caliber --calibrate --calm --caloric --calorie --calzone --camcorder --cameo --camera --camisole --camper --campfire --camping --campsite --campus --canal --canary --cancel --candied --candle --candy --cane --canine --canister --cannabis --canned --canning --cannon --cannot --canola --canon --canopener --canopy --canteen --canyon --capable --capably --capacity --cape --capillary --capital --capitol --capped --capricorn --capsize --capsule --caption --captivate --captive --captivity --capture --caramel --carat --caravan --carbon --cardboard --carded --cardiac --cardigan --cardinal --cardstock --carefully --caregiver --careless --caress --caretaker --cargo --caring --carless --carload --carmaker --carnage --carnation --carnival --carnivore --carol --carpenter --carpentry --carpool --carport --carried --carrot --carrousel --carry --cartel --cartload --carton --cartoon --cartridge --cartwheel --carve --carving --carwash --cascade --case --cash --casing --casino --casket --cassette --casually --casualty --catacomb --catalog --catalyst --catalyze --catapult --cataract --catatonic --catcall --catchable --catcher --catching --catchy --caterer --catering --catfight --catfish --cathedral --cathouse --catlike --catnap --catnip --catsup --cattail --cattishly --cattle --catty --catwalk --caucasian --caucus --causal --causation --cause --causing --cauterize --caution --cautious --cavalier --cavalry --caviar --cavity --cedar --celery --celestial --celibacy --celibate --celtic --cement --census --ceramics --ceremony --certainly --certainty --certified --certify --cesarean --cesspool --chafe --chaffing --chain --chair --chalice --challenge --chamber --chamomile --champion --chance --change --channel --chant --chaos --chaperone --chaplain --chapped --chaps --chapter --character --charbroil --charcoal --charger --charging --chariot --charity --charm --charred --charter --charting --chase --chasing --chaste --chastise --chastity --chatroom --chatter --chatting --chatty --cheating --cheddar --cheek --cheer --cheese --cheesy --chef --chemicals --chemist --chemo --cherisher --cherub --chess --chest --chevron --chevy --chewable --chewer --chewing --chewy --chief --chihuahua --childcare --childhood --childish --childless --childlike --chili --chill --chimp --chip --chirping --chirpy --chitchat --chivalry --chive --chloride --chlorine --choice --chokehold --choking --chomp --chooser --choosing --choosy --chop --chosen --chowder --chowtime --chrome --chubby --chuck --chug --chummy --chump --chunk --churn --chute --cider --cilantro --cinch --cinema --cinnamon --circle --circling --circular --circulate --circus --citable --citadel --citation --citizen --citric --citrus --city --civic --civil --clad --claim --clambake --clammy --clamor --clamp --clamshell --clang --clanking --clapped --clapper --clapping --clarify --clarinet --clarity --clash --clasp --class --clatter --clause --clavicle --claw --clay --clean --clear --cleat --cleaver --cleft --clench --clergyman --clerical --clerk --clever --clicker --client --climate --climatic --cling --clinic --clinking --clip --clique --cloak --clobber --clock --clone --cloning --closable --closure --clothes --clothing --cloud --clover --clubbed --clubbing --clubhouse --clump --clumsily --clumsy --clunky --clustered --clutch --clutter --coach --coagulant --coastal --coaster --coasting --coastland --coastline --coat --coauthor --cobalt --cobbler --cobweb --cocoa --coconut --cod --coeditor --coerce --coexist --coffee --cofounder --cognition --cognitive --cogwheel --coherence --coherent --cohesive --coil --coke --cola --cold --coleslaw --coliseum --collage --collapse --collar --collected --collector --collide --collie --collision --colonial --colonist --colonize --colony --colossal --colt --coma --come --comfort --comfy --comic --coming --comma --commence --commend --comment --commerce --commode --commodity --commodore --common --commotion --commute --commuting --compacted --compacter --compactly --compactor --companion --company --compare --compel --compile --comply --component --composed --composer --composite --compost --composure --compound --compress --comprised --computer --computing --comrade --concave --conceal --conceded --concept --concerned --concert --conch --concierge --concise --conclude --concrete --concur --condense --condiment --condition --condone --conducive --conductor --conduit --cone --confess --confetti --confidant --confident --confider --confiding --configure --confined --confining --confirm --conflict --conform --confound --confront --confused --confusing --confusion --congenial --congested --congrats --congress --conical --conjoined --conjure --conjuror --connected --connector --consensus --consent --console --consoling --consonant --constable --constant --constrain --constrict --construct --consult --consumer --consuming --contact --container --contempt --contend --contented --contently --contents --contest --context --contort --contour --contrite --control --contusion --convene --convent --copartner --cope --copied --copier --copilot --coping --copious --copper --copy --coral --cork --cornball --cornbread --corncob --cornea --corned --corner --cornfield --cornflake --cornhusk --cornmeal --cornstalk --corny --coronary --coroner --corporal --corporate --corral --correct --corridor --corrode --corroding --corrosive --corsage --corset --cortex --cosigner --cosmetics --cosmic --cosmos --cosponsor --cost --cottage --cotton --couch --cough --could --countable --countdown --counting --countless --country --county --courier --covenant --cover --coveted --coveting --coyness --cozily --coziness --cozy --crabbing --crabgrass --crablike --crabmeat --cradle --cradling --crafter --craftily --craftsman --craftwork --crafty --cramp --cranberry --crane --cranial --cranium --crank --crate --crave --craving --crawfish --crawlers --crawling --crayfish --crayon --crazed --crazily --craziness --crazy --creamed --creamer --creamlike --crease --creasing --creatable --create --creation --creative --creature --credible --credibly --credit --creed --creme --creole --crepe --crept --crescent --crested --cresting --crestless --crevice --crewless --crewman --crewmate --crib --cricket --cried --crier --crimp --crimson --cringe --cringing --crinkle --crinkly --crisped --crisping --crisply --crispness --crispy --criteria --critter --croak --crock --crook --croon --crop --cross --crouch --crouton --crowbar --crowd --crown --crucial --crudely --crudeness --cruelly --cruelness --cruelty --crumb --crummiest --crummy --crumpet --crumpled --cruncher --crunching --crunchy --crusader --crushable --crushed --crusher --crushing --crust --crux --crying --cryptic --crystal --cubbyhole --cube --cubical --cubicle --cucumber --cuddle --cuddly --cufflink --culinary --culminate --culpable --culprit --cultivate --cultural --culture --cupbearer --cupcake --cupid --cupped --cupping --curable --curator --curdle --cure --curfew --curing --curled --curler --curliness --curling --curly --curry --curse --cursive --cursor --curtain --curtly --curtsy --curvature --curve --curvy --cushy --cusp --cussed --custard --custodian --custody --customary --customer --customize --customs --cut --cycle --cyclic --cycling --cyclist --cylinder --cymbal --cytoplasm --cytoplast --dab --dad --daffodil --dagger --daily --daintily --dainty --dairy --daisy --dallying --dance --dancing --dandelion --dander --dandruff --dandy --danger --dangle --dangling --daredevil --dares --daringly --darkened --darkening --darkish --darkness --darkroom --darling --darn --dart --darwinism --dash --dastardly --data --datebook --dating --daughter --daunting --dawdler --dawn --daybed --daybreak --daycare --daydream --daylight --daylong --dayroom --daytime --dazzler --dazzling --deacon --deafening --deafness --dealer --dealing --dealmaker --dealt --dean --debatable --debate --debating --debit --debrief --debtless --debtor --debug --debunk --decade --decaf --decal --decathlon --decay --deceased --deceit --deceiver --deceiving --december --decency --decent --deception --deceptive --decibel --decidable --decimal --decimeter --decipher --deck --declared --decline --decode --decompose --decorated --decorator --decoy --decrease --decree --dedicate --dedicator --deduce --deduct --deed --deem --deepen --deeply --deepness --deface --defacing --defame --default --defeat --defection --defective --defendant --defender --defense --defensive --deferral --deferred --defiance --defiant --defile --defiling --define --definite --deflate --deflation --deflator --deflected --deflector --defog --deforest --defraud --defrost --deftly --defuse --defy --degraded --degrading --degrease --degree --dehydrate --deity --dejected --delay --delegate --delegator --delete --deletion --delicacy --delicate --delicious --delighted --delirious --delirium --deliverer --delivery --delouse --delta --deluge --delusion --deluxe --demanding --demeaning --demeanor --demise --democracy --democrat --demote --demotion --demystify --denatured --deniable --denial --denim --denote --dense --density --dental --dentist --denture --deny --deodorant --deodorize --departed --departure --depict --deplete --depletion --deplored --deploy --deport --depose --depraved --depravity --deprecate --depress --deprive --depth --deputize --deputy --derail --deranged --derby --derived --desecrate --deserve --deserving --designate --designed --designer --designing --deskbound --desktop --deskwork --desolate --despair --despise --despite --destiny --destitute --destruct --detached --detail --detection --detective --detector --detention --detergent --detest --detonate --detonator --detoxify --detract --deuce --devalue --deviancy --deviant --deviate --deviation --deviator --device --devious --devotedly --devotee --devotion --devourer --devouring --devoutly --dexterity --dexterous --diabetes --diabetic --diabolic --diagnoses --diagnosis --diagram --dial --diameter --diaper --diaphragm --diary --dice --dicing --dictate --dictation --dictator --difficult --diffused --diffuser --diffusion --diffusive --dig --dilation --diligence --diligent --dill --dilute --dime --diminish --dimly --dimmed --dimmer --dimness --dimple --diner --dingbat --dinghy --dinginess --dingo --dingy --dining --dinner --diocese --dioxide --diploma --dipped --dipper --dipping --directed --direction --directive --directly --directory --direness --dirtiness --disabled --disagree --disallow --disarm --disarray --disaster --disband --disbelief --disburse --discard --discern --discharge --disclose --discolor --discount --discourse --discover --discuss --disdain --disengage --disfigure --disgrace --dish --disinfect --disjoin --disk --dislike --disliking --dislocate --dislodge --disloyal --dismantle --dismay --dismiss --dismount --disobey --disorder --disown --disparate --disparity --dispatch --dispense --dispersal --dispersed --disperser --displace --display --displease --disposal --dispose --disprove --dispute --disregard --disrupt --dissuade --distance --distant --distaste --distill --distinct --distort --distract --distress --district --distrust --ditch --ditto --ditzy --dividable --divided --dividend --dividers --dividing --divinely --diving --divinity --divisible --divisibly --division --divisive --divorcee --dizziness --dizzy --doable --docile --dock --doctrine --document --dodge --dodgy --doily --doing --dole --dollar --dollhouse --dollop --dolly --dolphin --domain --domelike --domestic --dominion --dominoes --donated --donation --donator --donor --donut --doodle --doorbell --doorframe --doorknob --doorman --doormat --doornail --doorpost --doorstep --doorstop --doorway --doozy --dork --dormitory --dorsal --dosage --dose --dotted --doubling --douche --dove --down --dowry --doze --drab --dragging --dragonfly --dragonish --dragster --drainable --drainage --drained --drainer --drainpipe --dramatic --dramatize --drank --drapery --drastic --draw --dreaded --dreadful --dreadlock --dreamboat --dreamily --dreamland --dreamless --dreamlike --dreamt --dreamy --drearily --dreary --drench --dress --drew --dribble --dried --drier --drift --driller --drilling --drinkable --drinking --dripping --drippy --drivable --driven --driver --driveway --driving --drizzle --drizzly --drone --drool --droop --drop-down --dropbox --dropkick --droplet --dropout --dropper --drove --drown --drowsily --drudge --drum --dry --dubbed --dubiously --duchess --duckbill --ducking --duckling --ducktail --ducky --duct --dude --duffel --dugout --duh --duke --duller --dullness --duly --dumping --dumpling --dumpster --duo --dupe --duplex --duplicate --duplicity --durable --durably --duration --duress --during --dusk --dust --dutiful --duty --duvet --dwarf --dweeb --dwelled --dweller --dwelling --dwindle --dwindling --dynamic --dynamite --dynasty --dyslexia --dyslexic --each --eagle --earache --eardrum --earflap --earful --earlobe --early --earmark --earmuff --earphone --earpiece --earplugs --earring --earshot --earthen --earthlike --earthling --earthly --earthworm --earthy --earwig --easeful --easel --easiest --easily --easiness --easing --eastbound --eastcoast --easter --eastward --eatable --eaten --eatery --eating --eats --ebay --ebony --ebook --ecard --eccentric --echo --eclair --eclipse --ecologist --ecology --economic --economist --economy --ecosphere --ecosystem --edge --edginess --edging --edgy --edition --editor --educated --education --educator --eel --effective --effects --efficient --effort --eggbeater --egging --eggnog --eggplant --eggshell --egomaniac --egotism --egotistic --either --eject --elaborate --elastic --elated --elbow --eldercare --elderly --eldest --electable --election --elective --elephant --elevate --elevating --elevation --elevator --eleven --elf --eligible --eligibly --eliminate --elite --elitism --elixir --elk --ellipse --elliptic --elm --elongated --elope --eloquence --eloquent --elsewhere --elude --elusive --elves --email --embargo --embark --embassy --embattled --embellish --ember --embezzle --emblaze --emblem --embody --embolism --emboss --embroider --emcee --emerald --emergency --emission --emit --emote --emoticon --emotion --empathic --empathy --emperor --emphases --emphasis --emphasize --emphatic --empirical --employed --employee --employer --emporium --empower --emptier --emptiness --empty --emu --enable --enactment --enamel --enchanted --enchilada --encircle --enclose --enclosure --encode --encore --encounter --encourage --encroach --encrust --encrypt --endanger --endeared --endearing --ended --ending --endless --endnote --endocrine --endorphin --endorse --endowment --endpoint --endurable --endurance --enduring --energetic --energize --energy --enforced --enforcer --engaged --engaging --engine --engorge --engraved --engraver --engraving --engross --engulf --enhance --enigmatic --enjoyable --enjoyably --enjoyer --enjoying --enjoyment --enlarged --enlarging --enlighten --enlisted --enquirer --enrage --enrich --enroll --enslave --ensnare --ensure --entail --entangled --entering --entertain --enticing --entire --entitle --entity --entomb --entourage --entrap --entree --entrench --entrust --entryway --entwine --enunciate --envelope --enviable --enviably --envious --envision --envoy --envy --enzyme --epic --epidemic --epidermal --epidermis --epidural --epilepsy --epileptic --epilogue --epiphany --episode --equal --equate --equation --equator --equinox --equipment --equity --equivocal --eradicate --erasable --erased --eraser --erasure --ergonomic --errand --errant --erratic --error --erupt --escalate --escalator --escapable --escapade --escapist --escargot --eskimo --esophagus --espionage --espresso --esquire --essay --essence --essential --establish --estate --esteemed --estimate --estimator --estranged --estrogen --etching --eternal --eternity --ethanol --ether --ethically --ethics --euphemism --evacuate --evacuee --evade --evaluate --evaluator --evaporate --evasion --evasive --even --everglade --evergreen --everybody --everyday --everyone --evict --evidence --evident --evil --evoke --evolution --evolve --exact --exalted --example --excavate --excavator --exceeding --exception --excess --exchange --excitable --exciting --exclaim --exclude --excluding --exclusion --exclusive --excretion --excretory --excursion --excusable --excusably --excuse --exemplary --exemplify --exemption --exerciser --exert --exes --exfoliate --exhale --exhaust --exhume --exile --existing --exit --exodus --exonerate --exorcism --exorcist --expand --expanse --expansion --expansive --expectant --expedited --expediter --expel --expend --expenses --expensive --expert --expire --expiring --explain --expletive --explicit --explode --exploit --explore --exploring --exponent --exporter --exposable --expose --exposure --express --expulsion --exquisite --extended --extending --extent --extenuate --exterior --external --extinct --extortion --extradite --extras --extrovert --extrude --extruding --exuberant --fable --fabric --fabulous --facebook --facecloth --facedown --faceless --facelift --faceplate --faceted --facial --facility --facing --facsimile --faction --factoid --factor --factsheet --factual --faculty --fade --fading --failing --falcon --fall --false --falsify --fame --familiar --family --famine --famished --fanatic --fancied --fanciness --fancy --fanfare --fang --fanning --fantasize --fantastic --fantasy --fascism --fastball --faster --fasting --fastness --faucet --favorable --favorably --favored --favoring --favorite --fax --feast --federal --fedora --feeble --feed --feel --feisty --feline --felt-tip --feminine --feminism --feminist --feminize --femur --fence --fencing --fender --ferment --fernlike --ferocious --ferocity --ferret --ferris --ferry --fervor --fester --festival --festive --festivity --fetal --fetch --fever --fiber --fiction --fiddle --fiddling --fidelity --fidgeting --fidgety --fifteen --fifth --fiftieth --fifty --figment --figure --figurine --filing --filled --filler --filling --film --filter --filth --filtrate --finale --finalist --finalize --finally --finance --financial --finch --fineness --finer --finicky --finished --finisher --finishing --finite --finless --finlike --fiscally --fit --five --flaccid --flagman --flagpole --flagship --flagstick --flagstone --flail --flakily --flaky --flame --flammable --flanked --flanking --flannels --flap --flaring --flashback --flashbulb --flashcard --flashily --flashing --flashy --flask --flatbed --flatfoot --flatly --flatness --flatten --flattered --flatterer --flattery --flattop --flatware --flatworm --flavored --flavorful --flavoring --flaxseed --fled --fleshed --fleshy --flick --flier --flight --flinch --fling --flint --flip --flirt --float --flock --flogging --flop --floral --florist --floss --flounder --flyable --flyaway --flyer --flying --flyover --flypaper --foam --foe --fog --foil --folic --folk --follicle --follow --fondling --fondly --fondness --fondue --font --food --fool --footage --football --footbath --footboard --footer --footgear --foothill --foothold --footing --footless --footman --footnote --footpad --footpath --footprint --footrest --footsie --footsore --footwear --footwork --fossil --foster --founder --founding --fountain --fox --foyer --fraction --fracture --fragile --fragility --fragment --fragrance --fragrant --frail --frame --framing --frantic --fraternal --frayed --fraying --frays --freckled --freckles --freebase --freebee --freebie --freedom --freefall --freehand --freeing --freeload --freely --freemason --freeness --freestyle --freeware --freeway --freewill --freezable --freezing --freight --french --frenzied --frenzy --frequency --frequent --fresh --fretful --fretted --friction --friday --fridge --fried --friend --frighten --frightful --frigidity --frigidly --frill --fringe --frisbee --frisk --fritter --frivolous --frolic --from --front --frostbite --frosted --frostily --frosting --frostlike --frosty --froth --frown --frozen --fructose --frugality --frugally --fruit --frustrate --frying --gab --gaffe --gag --gainfully --gaining --gains --gala --gallantly --galleria --gallery --galley --gallon --gallows --gallstone --galore --galvanize --gambling --game --gaming --gamma --gander --gangly --gangrene --gangway --gap --garage --garbage --garden --gargle --garland --garlic --garment --garnet --garnish --garter --gas --gatherer --gathering --gating --gauging --gauntlet --gauze --gave --gawk --gazing --gear --gecko --geek --geiger --gem --gender --generic --generous --genetics --genre --gentile --gentleman --gently --gents --geography --geologic --geologist --geology --geometric --geometry --geranium --gerbil --geriatric --germicide --germinate --germless --germproof --gestate --gestation --gesture --getaway --getting --getup --giant --gibberish --giblet --giddily --giddiness --giddy --gift --gigabyte --gigahertz --gigantic --giggle --giggling --giggly --gigolo --gilled --gills --gimmick --girdle --giveaway --given --giver --giving --gizmo --gizzard --glacial --glacier --glade --gladiator --gladly --glamorous --glamour --glance --glancing --glandular --glare --glaring --glass --glaucoma --glazing --gleaming --gleeful --glider --gliding --glimmer --glimpse --glisten --glitch --glitter --glitzy --gloater --gloating --gloomily --gloomy --glorified --glorifier --glorify --glorious --glory --gloss --glove --glowing --glowworm --glucose --glue --gluten --glutinous --glutton --gnarly --gnat --goal --goatskin --goes --goggles --going --goldfish --goldmine --goldsmith --golf --goliath --gonad --gondola --gone --gong --good --gooey --goofball --goofiness --goofy --google --goon --gopher --gore --gorged --gorgeous --gory --gosling --gossip --gothic --gotten --gout --gown --grab --graceful --graceless --gracious --gradation --graded --grader --gradient --grading --gradually --graduate --graffiti --grafted --grafting --grain --granddad --grandkid --grandly --grandma --grandpa --grandson --granite --granny --granola --grant --granular --grape --graph --grapple --grappling --grasp --grass --gratified --gratify --grating --gratitude --gratuity --gravel --graveness --graves --graveyard --gravitate --gravity --gravy --gray --grazing --greasily --greedily --greedless --greedy --green --greeter --greeting --grew --greyhound --grid --grief --grievance --grieving --grievous --grill --grimace --grimacing --grime --griminess --grimy --grinch --grinning --grip --gristle --grit --groggily --groggy --groin --groom --groove --grooving --groovy --grope --ground --grouped --grout --grove --grower --growing --growl --grub --grudge --grudging --grueling --gruffly --grumble --grumbling --grumbly --grumpily --grunge --grunt --guacamole --guidable --guidance --guide --guiding --guileless --guise --gulf --gullible --gully --gulp --gumball --gumdrop --gumminess --gumming --gummy --gurgle --gurgling --guru --gush --gusto --gusty --gutless --guts --gutter --guy --guzzler --gyration --habitable --habitant --habitat --habitual --hacked --hacker --hacking --hacksaw --had --haggler --haiku --half --halogen --halt --halved --halves --hamburger --hamlet --hammock --hamper --hamster --hamstring --handbag --handball --handbook --handbrake --handcart --handclap --handclasp --handcraft --handcuff --handed --handful --handgrip --handgun --handheld --handiness --handiwork --handlebar --handled --handler --handling --handmade --handoff --handpick --handprint --handrail --handsaw --handset --handsfree --handshake --handstand --handwash --handwork --handwoven --handwrite --handyman --hangnail --hangout --hangover --hangup --hankering --hankie --hanky --haphazard --happening --happier --happiest --happily --happiness --happy --harbor --hardcopy --hardcore --hardcover --harddisk --hardened --hardener --hardening --hardhat --hardhead --hardiness --hardly --hardness --hardship --hardware --hardwired --hardwood --hardy --harmful --harmless --harmonica --harmonics --harmonize --harmony --harness --harpist --harsh --harvest --hash --hassle --haste --hastily --hastiness --hasty --hatbox --hatchback --hatchery --hatchet --hatching --hatchling --hate --hatless --hatred --haunt --haven --hazard --hazelnut --hazily --haziness --hazing --hazy --headache --headband --headboard --headcount --headdress --headed --header --headfirst --headgear --heading --headlamp --headless --headlock --headphone --headpiece --headrest --headroom --headscarf --headset --headsman --headstand --headstone --headway --headwear --heap --heat --heave --heavily --heaviness --heaving --hedge --hedging --heftiness --hefty --helium --helmet --helper --helpful --helping --helpless --helpline --hemlock --hemstitch --hence --henchman --henna --herald --herbal --herbicide --herbs --heritage --hermit --heroics --heroism --herring --herself --hertz --hesitancy --hesitant --hesitate --hexagon --hexagram --hubcap --huddle --huddling --huff --hug --hula --hulk --hull --human --humble --humbling --humbly --humid --humiliate --humility --humming --hummus --humongous --humorist --humorless --humorous --humpback --humped --humvee --hunchback --hundredth --hunger --hungrily --hungry --hunk --hunter --hunting --huntress --huntsman --hurdle --hurled --hurler --hurling --hurray --hurricane --hurried --hurry --hurt --husband --hush --husked --huskiness --hut --hybrid --hydrant --hydrated --hydration --hydrogen --hydroxide --hyperlink --hypertext --hyphen --hypnoses --hypnosis --hypnotic --hypnotism --hypnotist --hypnotize --hypocrisy --hypocrite --ibuprofen --ice --iciness --icing --icky --icon --icy --idealism --idealist --idealize --ideally --idealness --identical --identify --identity --ideology --idiocy --idiom --idly --igloo --ignition --ignore --iguana --illicitly --illusion --illusive --image --imaginary --imagines --imaging --imbecile --imitate --imitation --immature --immerse --immersion --imminent --immobile --immodest --immorally --immortal --immovable --immovably --immunity --immunize --impaired --impale --impart --impatient --impeach --impeding --impending --imperfect --imperial --impish --implant --implement --implicate --implicit --implode --implosion --implosive --imply --impolite --important --importer --impose --imposing --impotence --impotency --impotent --impound --imprecise --imprint --imprison --impromptu --improper --improve --improving --improvise --imprudent --impulse --impulsive --impure --impurity --iodine --iodize --ion --ipad --iphone --ipod --irate --irk --iron --irregular --irrigate --irritable --irritably --irritant --irritate --islamic --islamist --isolated --isolating --isolation --isotope --issue --issuing --italicize --italics --item --itinerary --itunes --ivory --ivy --jab --jackal --jacket --jackknife --jackpot --jailbird --jailbreak --jailer --jailhouse --jalapeno --jam --janitor --january --jargon --jarring --jasmine --jaundice --jaunt --java --jawed --jawless --jawline --jaws --jaybird --jaywalker --jazz --jeep --jeeringly --jellied --jelly --jersey --jester --jet --jiffy --jigsaw --jimmy --jingle --jingling --jinx --jitters --jittery --job --jockey --jockstrap --jogger --jogging --john --joining --jokester --jokingly --jolliness --jolly --jolt --jot --jovial --joyfully --joylessly --joyous --joyride --joystick --jubilance --jubilant --judge --judgingly --judicial --judiciary --judo --juggle --juggling --jugular --juice --juiciness --juicy --jujitsu --jukebox --july --jumble --jumbo --jump --junction --juncture --june --junior --juniper --junkie --junkman --junkyard --jurist --juror --jury --justice --justifier --justify --justly --justness --juvenile --kabob --kangaroo --karaoke --karate --karma --kebab --keenly --keenness --keep --keg --kelp --kennel --kept --kerchief --kerosene --kettle --kick --kiln --kilobyte --kilogram --kilometer --kilowatt --kilt --kimono --kindle --kindling --kindly --kindness --kindred --kinetic --kinfolk --king --kinship --kinsman --kinswoman --kissable --kisser --kissing --kitchen --kite --kitten --kitty --kiwi --kleenex --knapsack --knee --knelt --knickers --knoll --koala --kooky --kosher --krypton --kudos --kung --labored --laborer --laboring --laborious --labrador --ladder --ladies --ladle --ladybug --ladylike --lagged --lagging --lagoon --lair --lake --lance --landed --landfall --landfill --landing --landlady --landless --landline --landlord --landmark --landmass --landmine --landowner --landscape --landside --landslide --language --lankiness --lanky --lantern --lapdog --lapel --lapped --lapping --laptop --lard --large --lark --lash --lasso --last --latch --late --lather --latitude --latrine --latter --latticed --launch --launder --laundry --laurel --lavender --lavish --laxative --lazily --laziness --lazy --lecturer --left --legacy --legal --legend --legged --leggings --legible --legibly --legislate --lego --legroom --legume --legwarmer --legwork --lemon --lend --length --lens --lent --leotard --lesser --letdown --lethargic --lethargy --letter --lettuce --level --leverage --levers --levitate --levitator --liability --liable --liberty --librarian --library --licking --licorice --lid --life --lifter --lifting --liftoff --ligament --likely --likeness --likewise --liking --lilac --lilly --lily --limb --limeade --limelight --limes --limit --limping --limpness --line --lingo --linguini --linguist --lining --linked --linoleum --linseed --lint --lion --lip --liquefy --liqueur --liquid --lisp --list --litigate --litigator --litmus --litter --little --livable --lived --lively --liver --livestock --lividly --living --lizard --lubricant --lubricate --lucid --luckily --luckiness --luckless --lucrative --ludicrous --lugged --lukewarm --lullaby --lumber --luminance --luminous --lumpiness --lumping --lumpish --lunacy --lunar --lunchbox --luncheon --lunchroom --lunchtime --lung --lurch --lure --luridness --lurk --lushly --lushness --luster --lustfully --lustily --lustiness --lustrous --lusty --luxurious --luxury --lying --lyrically --lyricism --lyricist --lyrics --macarena --macaroni --macaw --mace --machine --machinist --magazine --magenta --maggot --magical --magician --magma --magnesium --magnetic --magnetism --magnetize --magnifier --magnify --magnitude --magnolia --mahogany --maimed --majestic --majesty --majorette --majority --makeover --maker --makeshift --making --malformed --malt --mama --mammal --mammary --mammogram --manager --managing --manatee --mandarin --mandate --mandatory --mandolin --manger --mangle --mango --mangy --manhandle --manhole --manhood --manhunt --manicotti --manicure --manifesto --manila --mankind --manlike --manliness --manly --manmade --manned --mannish --manor --manpower --mantis --mantra --manual --many --map --marathon --marauding --marbled --marbles --marbling --march --mardi --margarine --margarita --margin --marigold --marina --marine --marital --maritime --marlin --marmalade --maroon --married --marrow --marry --marshland --marshy --marsupial --marvelous --marxism --mascot --masculine --mashed --mashing --massager --masses --massive --mastiff --matador --matchbook --matchbox --matcher --matching --matchless --material --maternal --maternity --math --mating --matriarch --matrimony --matrix --matron --matted --matter --maturely --maturing --maturity --mauve --maverick --maximize --maximum --maybe --mayday --mayflower --moaner --moaning --mobile --mobility --mobilize --mobster --mocha --mocker --mockup --modified --modify --modular --modulator --module --moisten --moistness --moisture --molar --molasses --mold --molecular --molecule --molehill --mollusk --mom --monastery --monday --monetary --monetize --moneybags --moneyless --moneywise --mongoose --mongrel --monitor --monkhood --monogamy --monogram --monologue --monopoly --monorail --monotone --monotype --monoxide --monsieur --monsoon --monstrous --monthly --monument --moocher --moodiness --moody --mooing --moonbeam --mooned --moonlight --moonlike --moonlit --moonrise --moonscape --moonshine --moonstone --moonwalk --mop --morale --morality --morally --morbidity --morbidly --morphine --morphing --morse --mortality --mortally --mortician --mortified --mortify --mortuary --mosaic --mossy --most --mothball --mothproof --motion --motivate --motivator --motive --motocross --motor --motto --mountable --mountain --mounted --mounting --mourner --mournful --mouse --mousiness --moustache --mousy --mouth --movable --move --movie --moving --mower --mowing --much --muck --mud --mug --mulberry --mulch --mule --mulled --mullets --multiple --multiply --multitask --multitude --mumble --mumbling --mumbo --mummified --mummify --mummy --mumps --munchkin --mundane --municipal --muppet --mural --murkiness --murky --murmuring --muscular --museum --mushily --mushiness --mushroom --mushy --music --musket --muskiness --musky --mustang --mustard --muster --mustiness --musty --mutable --mutate --mutation --mute --mutilated --mutilator --mutiny --mutt --mutual --muzzle --myself --myspace --mystified --mystify --myth --nacho --nag --nail --name --naming --nanny --nanometer --nape --napkin --napped --napping --nappy --narrow --nastily --nastiness --national --native --nativity --natural --nature --naturist --nautical --navigate --navigator --navy --nearby --nearest --nearly --nearness --neatly --neatness --nebula --nebulizer --nectar --negate --negation --negative --neglector --negligee --negligent --negotiate --nemeses --nemesis --neon --nephew --nerd --nervous --nervy --nest --net --neurology --neuron --neurosis --neurotic --neuter --neutron --never --next --nibble --nickname --nicotine --niece --nifty --nimble --nimbly --nineteen --ninetieth --ninja --nintendo --ninth --nuclear --nuclei --nucleus --nugget --nullify --number --numbing --numbly --numbness --numeral --numerate --numerator --numeric --numerous --nuptials --nursery --nursing --nurture --nutcase --nutlike --nutmeg --nutrient --nutshell --nuttiness --nutty --nuzzle --nylon --oaf --oak --oasis --oat --obedience --obedient --obituary --object --obligate --obliged --oblivion --oblivious --oblong --obnoxious --oboe --obscure --obscurity --observant --observer --observing --obsessed --obsession --obsessive --obsolete --obstacle --obstinate --obstruct --obtain --obtrusive --obtuse --obvious --occultist --occupancy --occupant --occupier --occupy --ocean --ocelot --octagon --octane --october --octopus --ogle --oil --oink --ointment --okay --old --olive --olympics --omega --omen --ominous --omission --omit --omnivore --onboard --oncoming --ongoing --onion --online --onlooker --only --onscreen --onset --onshore --onslaught --onstage --onto --onward --onyx --oops --ooze --oozy --opacity --opal --open --operable --operate --operating --operation --operative --operator --opium --opossum --opponent --oppose --opposing --opposite --oppressed --oppressor --opt --opulently --osmosis --other --otter --ouch --ought --ounce --outage --outback --outbid --outboard --outbound --outbreak --outburst --outcast --outclass --outcome --outdated --outdoors --outer --outfield --outfit --outflank --outgoing --outgrow --outhouse --outing --outlast --outlet --outline --outlook --outlying --outmatch --outmost --outnumber --outplayed --outpost --outpour --output --outrage --outrank --outreach --outright --outscore --outsell --outshine --outshoot --outsider --outskirts --outsmart --outsource --outspoken --outtakes --outthink --outward --outweigh --outwit --oval --ovary --oven --overact --overall --overarch --overbid --overbill --overbite --overblown --overboard --overbook --overbuilt --overcast --overcoat --overcome --overcook --overcrowd --overdraft --overdrawn --overdress --overdrive --overdue --overeager --overeater --overexert --overfed --overfeed --overfill --overflow --overfull --overgrown --overhand --overhang --overhaul --overhead --overhear --overheat --overhung --overjoyed --overkill --overlabor --overlaid --overlap --overlay --overload --overlook --overlord --overlying --overnight --overpass --overpay --overplant --overplay --overpower --overprice --overrate --overreach --overreact --override --overripe --overrule --overrun --overshoot --overshot --oversight --oversized --oversleep --oversold --overspend --overstate --overstay --overstep --overstock --overstuff --oversweet --overtake --overthrow --overtime --overtly --overtone --overture --overturn --overuse --overvalue --overview --overwrite --owl --oxford --oxidant --oxidation --oxidize --oxidizing --oxygen --oxymoron --oyster --ozone --paced --pacemaker --pacific --pacifier --pacifism --pacifist --pacify --padded --padding --paddle --paddling --padlock --pagan --pager --paging --pajamas --palace --palatable --palm --palpable --palpitate --paltry --pampered --pamperer --pampers --pamphlet --panama --pancake --pancreas --panda --pandemic --pang --panhandle --panic --panning --panorama --panoramic --panther --pantomime --pantry --pants --pantyhose --paparazzi --papaya --paper --paprika --papyrus --parabola --parachute --parade --paradox --paragraph --parakeet --paralegal --paralyses --paralysis --paralyze --paramedic --parameter --paramount --parasail --parasite --parasitic --parcel --parched --parchment --pardon --parish --parka --parking --parkway --parlor --parmesan --parole --parrot --parsley --parsnip --partake --parted --parting --partition --partly --partner --partridge --party --passable --passably --passage --passcode --passenger --passerby --passing --passion --passive --passivism --passover --passport --password --pasta --pasted --pastel --pastime --pastor --pastrami --pasture --pasty --patchwork --patchy --paternal --paternity --path --patience --patient --patio --patriarch --patriot --patrol --patronage --patronize --pauper --pavement --paver --pavestone --pavilion --paving --pawing --payable --payback --paycheck --payday --payee --payer --paying --payment --payphone --payroll --pebble --pebbly --pecan --pectin --peculiar --peddling --pediatric --pedicure --pedigree --pedometer --pegboard --pelican --pellet --pelt --pelvis --penalize --penalty --pencil --pendant --pending --penholder --penknife --pennant --penniless --penny --penpal --pension --pentagon --pentagram --pep --perceive --percent --perch --percolate --perennial --perfected --perfectly --perfume --periscope --perish --perjurer --perjury --perkiness --perky --perm --peroxide --perpetual --perplexed --persecute --persevere --persuaded --persuader --pesky --peso --pessimism --pessimist --pester --pesticide --petal --petite --petition --petri --petroleum --petted --petticoat --pettiness --petty --petunia --phantom --phobia --phoenix --phonebook --phoney --phonics --phoniness --phony --phosphate --photo --phrase --phrasing --placard --placate --placidly --plank --planner --plant --plasma --plaster --plastic --plated --platform --plating --platinum --platonic --platter --platypus --plausible --plausibly --playable --playback --player --playful --playgroup --playhouse --playing --playlist --playmaker --playmate --playoff --playpen --playroom --playset --plaything --playtime --plaza --pleading --pleat --pledge --plentiful --plenty --plethora --plexiglas --pliable --plod --plop --plot --plow --ploy --pluck --plug --plunder --plunging --plural --plus --plutonium --plywood --poach --pod --poem --poet --pogo --pointed --pointer --pointing --pointless --pointy --poise --poison --poker --poking --polar --police --policy --polio --polish --politely --polka --polo --polyester --polygon --polygraph --polymer --poncho --pond --pony --popcorn --pope --poplar --popper --poppy --popsicle --populace --popular --populate --porcupine --pork --porous --porridge --portable --portal --portfolio --porthole --portion --portly --portside --poser --posh --posing --possible --possibly --possum --postage --postal --postbox --postcard --posted --poster --posting --postnasal --posture --postwar --pouch --pounce --pouncing --pound --pouring --pout --powdered --powdering --powdery --power --powwow --pox --praising --prance --prancing --pranker --prankish --prankster --prayer --praying --preacher --preaching --preachy --preamble --precinct --precise --precision --precook --precut --predator --predefine --predict --preface --prefix --preflight --preformed --pregame --pregnancy --pregnant --preheated --prelaunch --prelaw --prelude --premiere --premises --premium --prenatal --preoccupy --preorder --prepaid --prepay --preplan --preppy --preschool --prescribe --preseason --preset --preshow --president --presoak --press --presume --presuming --preteen --pretended --pretender --pretense --pretext --pretty --pretzel --prevail --prevalent --prevent --preview --previous --prewar --prewashed --prideful --pried --primal --primarily --primary --primate --primer --primp --princess --print --prior --prism --prison --prissy --pristine --privacy --private --privatize --prize --proactive --probable --probably --probation --probe --probing --probiotic --problem --procedure --process --proclaim --procreate --procurer --prodigal --prodigy --produce --product --profane --profanity --professed --professor --profile --profound --profusely --progeny --prognosis --program --progress --projector --prologue --prolonged --promenade --prominent --promoter --promotion --prompter --promptly --prone --prong --pronounce --pronto --proofing --proofread --proofs --propeller --properly --property --proponent --proposal --propose --props --prorate --protector --protegee --proton --prototype --protozoan --protract --protrude --proud --provable --proved --proven --provided --provider --providing --province --proving --provoke --provoking --provolone --prowess --prowler --prowling --proximity --proxy --prozac --prude --prudishly --prune --pruning --pry --psychic --public --publisher --pucker --pueblo --pug --pull --pulmonary --pulp --pulsate --pulse --pulverize --puma --pumice --pummel --punch --punctual --punctuate --punctured --pungent --punisher --punk --pupil --puppet --puppy --purchase --pureblood --purebred --purely --pureness --purgatory --purge --purging --purifier --purify --purist --puritan --purity --purple --purplish --purposely --purr --purse --pursuable --pursuant --pursuit --purveyor --pushcart --pushchair --pusher --pushiness --pushing --pushover --pushpin --pushup --pushy --putdown --putt --puzzle --puzzling --pyramid --pyromania --python --quack --quadrant --quail --quaintly --quake --quaking --qualified --qualifier --qualify --quality --qualm --quantum --quarrel --quarry --quartered --quarterly --quarters --quartet --quench --query --quicken --quickly --quickness --quicksand --quickstep --quiet --quill --quilt --quintet --quintuple --quirk --quit --quiver --quizzical --quotable --quotation --quote --rabid --race --racing --racism --rack --racoon --radar --radial --radiance --radiantly --radiated --radiation --radiator --radio --radish --raffle --raft --rage --ragged --raging --ragweed --raider --railcar --railing --railroad --railway --raisin --rake --raking --rally --ramble --rambling --ramp --ramrod --ranch --rancidity --random --ranged --ranger --ranging --ranked --ranking --ransack --ranting --rants --rare --rarity --rascal --rash --rasping --ravage --raven --ravine --raving --ravioli --ravishing --reabsorb --reach --reacquire --reaction --reactive --reactor --reaffirm --ream --reanalyze --reappear --reapply --reappoint --reapprove --rearrange --rearview --reason --reassign --reassure --reattach --reawake --rebalance --rebate --rebel --rebirth --reboot --reborn --rebound --rebuff --rebuild --rebuilt --reburial --rebuttal --recall --recant --recapture --recast --recede --recent --recess --recharger --recipient --recital --recite --reckless --reclaim --recliner --reclining --recluse --reclusive --recognize --recoil --recollect --recolor --reconcile --reconfirm --reconvene --recopy --record --recount --recoup --recovery --recreate --rectal --rectangle --rectified --rectify --recycled --recycler --recycling --reemerge --reenact --reenter --reentry --reexamine --referable --referee --reference --refill --refinance --refined --refinery --refining --refinish --reflected --reflector --reflex --reflux --refocus --refold --reforest --reformat --reformed --reformer --reformist --refract --refrain --refreeze --refresh --refried --refueling --refund --refurbish --refurnish --refusal --refuse --refusing --refutable --refute --regain --regalia --regally --reggae --regime --region --register --registrar --registry --regress --regretful --regroup --regular --regulate --regulator --rehab --reheat --rehire --rehydrate --reimburse --reissue --reiterate --rejoice --rejoicing --rejoin --rekindle --relapse --relapsing --relatable --related --relation --relative --relax --relay --relearn --release --relenting --reliable --reliably --reliance --reliant --relic --relieve --relieving --relight --relish --relive --reload --relocate --relock --reluctant --rely --remake --remark --remarry --rematch --remedial --remedy --remember --reminder --remindful --remission --remix --remnant --remodeler --remold --remorse --remote --removable --removal --removed --remover --removing --rename --renderer --rendering --rendition --renegade --renewable --renewably --renewal --renewed --renounce --renovate --renovator --rentable --rental --rented --renter --reoccupy --reoccur --reopen --reorder --repackage --repacking --repaint --repair --repave --repaying --repayment --repeal --repeated --repeater --repent --rephrase --replace --replay --replica --reply --reporter --repose --repossess --repost --repressed --reprimand --reprint --reprise --reproach --reprocess --reproduce --reprogram --reps --reptile --reptilian --repugnant --repulsion --repulsive --repurpose --reputable --reputably --request --require --requisite --reroute --rerun --resale --resample --rescuer --reseal --research --reselect --reseller --resemble --resend --resent --reset --reshape --reshoot --reshuffle --residence --residency --resident --residual --residue --resigned --resilient --resistant --resisting --resize --resolute --resolved --resonant --resonate --resort --resource --respect --resubmit --result --resume --resupply --resurface --resurrect --retail --retainer --retaining --retake --retaliate --retention --rethink --retinal --retired --retiree --retiring --retold --retool --retorted --retouch --retrace --retract --retrain --retread --retreat --retrial --retrieval --retriever --retry --return --retying --retype --reunion --reunite --reusable --reuse --reveal --reveler --revenge --revenue --reverb --revered --reverence --reverend --reversal --reverse --reversing --reversion --revert --revisable --revise --revision --revisit --revivable --revival --reviver --reviving --revocable --revoke --revolt --revolver --revolving --reward --rewash --rewind --rewire --reword --rework --rewrap --rewrite --rhyme --ribbon --ribcage --rice --riches --richly --richness --rickety --ricotta --riddance --ridden --ride --riding --rifling --rift --rigging --rigid --rigor --rimless --rimmed --rind --rink --rinse --rinsing --riot --ripcord --ripeness --ripening --ripping --ripple --rippling --riptide --rise --rising --risk --risotto --ritalin --ritzy --rival --riverbank --riverbed --riverboat --riverside --riveter --riveting --roamer --roaming --roast --robbing --robe --robin --robotics --robust --rockband --rocker --rocket --rockfish --rockiness --rocking --rocklike --rockslide --rockstar --rocky --rogue --roman --romp --rope --roping --roster --rosy --rotten --rotting --rotunda --roulette --rounding --roundish --roundness --roundup --roundworm --routine --routing --rover --roving --royal --rubbed --rubber --rubbing --rubble --rubdown --ruby --ruckus --rudder --rug --ruined --rule --rumble --rumbling --rummage --rumor --runaround --rundown --runner --running --runny --runt --runway --rupture --rural --ruse --rush --rust --rut --sabbath --sabotage --sacrament --sacred --sacrifice --sadden --saddlebag --saddled --saddling --sadly --sadness --safari --safeguard --safehouse --safely --safeness --saffron --saga --sage --sagging --saggy --said --saint --sake --salad --salami --salaried --salary --saline --salon --saloon --salsa --salt --salutary --salute --salvage --salvaging --salvation --same --sample --sampling --sanction --sanctity --sanctuary --sandal --sandbag --sandbank --sandbar --sandblast --sandbox --sanded --sandfish --sanding --sandlot --sandpaper --sandpit --sandstone --sandstorm --sandworm --sandy --sanitary --sanitizer --sank --santa --sapling --sappiness --sappy --sarcasm --sarcastic --sardine --sash --sasquatch --sassy --satchel --satiable --satin --satirical --satisfied --satisfy --saturate --saturday --sauciness --saucy --sauna --savage --savanna --saved --savings --savior --savor --saxophone --say --scabbed --scabby --scalded --scalding --scale --scaling --scallion --scallop --scalping --scam --scandal --scanner --scanning --scant --scapegoat --scarce --scarcity --scarecrow --scared --scarf --scarily --scariness --scarring --scary --scavenger --scenic --schedule --schematic --scheme --scheming --schilling --schnapps --scholar --science --scientist --scion --scoff --scolding --scone --scoop --scooter --scope --scorch --scorebook --scorecard --scored --scoreless --scorer --scoring --scorn --scorpion --scotch --scoundrel --scoured --scouring --scouting --scouts --scowling --scrabble --scraggly --scrambled --scrambler --scrap --scratch --scrawny --screen --scribble --scribe --scribing --scrimmage --script --scroll --scrooge --scrounger --scrubbed --scrubber --scruffy --scrunch --scrutiny --scuba --scuff --sculptor --sculpture --scurvy --scuttle --secluded --secluding --seclusion --second --secrecy --secret --sectional --sector --secular --securely --security --sedan --sedate --sedation --sedative --sediment --seduce --seducing --segment --seismic --seizing --seldom --selected --selection --selective --selector --self --seltzer --semantic --semester --semicolon --semifinal --seminar --semisoft --semisweet --senate --senator --send --senior --senorita --sensation --sensitive --sensitize --sensually --sensuous --sepia --september --septic --septum --sequel --sequence --sequester --series --sermon --serotonin --serpent --serrated --serve --service --serving --sesame --sessions --setback --setting --settle --settling --setup --sevenfold --seventeen --seventh --seventy --severity --shabby --shack --shaded --shadily --shadiness --shading --shadow --shady --shaft --shakable --shakily --shakiness --shaking --shaky --shale --shallot --shallow --shame --shampoo --shamrock --shank --shanty --shape --shaping --share --sharpener --sharper --sharpie --sharply --sharpness --shawl --sheath --shed --sheep --sheet --shelf --shell --shelter --shelve --shelving --sherry --shield --shifter --shifting --shiftless --shifty --shimmer --shimmy --shindig --shine --shingle --shininess --shining --shiny --ship --shirt --shivering --shock --shone --shoplift --shopper --shopping --shoptalk --shore --shortage --shortcake --shortcut --shorten --shorter --shorthand --shortlist --shortly --shortness --shorts --shortwave --shorty --shout --shove --showbiz --showcase --showdown --shower --showgirl --showing --showman --shown --showoff --showpiece --showplace --showroom --showy --shrank --shrapnel --shredder --shredding --shrewdly --shriek --shrill --shrimp --shrine --shrink --shrivel --shrouded --shrubbery --shrubs --shrug --shrunk --shucking --shudder --shuffle --shuffling --shun --shush --shut --shy --siamese --siberian --sibling --siding --sierra --siesta --sift --sighing --silenced --silencer --silent --silica --silicon --silk --silliness --silly --silo --silt --silver --similarly --simile --simmering --simple --simplify --simply --sincere --sincerity --singer --singing --single --singular --sinister --sinless --sinner --sinuous --sip --siren --sister --sitcom --sitter --sitting --situated --situation --sixfold --sixteen --sixth --sixties --sixtieth --sixtyfold --sizable --sizably --size --sizing --sizzle --sizzling --skater --skating --skedaddle --skeletal --skeleton --skeptic --sketch --skewed --skewer --skid --skied --skier --skies --skiing --skilled --skillet --skillful --skimmed --skimmer --skimming --skimpily --skincare --skinhead --skinless --skinning --skinny --skintight --skipper --skipping --skirmish --skirt --skittle --skydiver --skylight --skyline --skype --skyrocket --skyward --slab --slacked --slacker --slacking --slackness --slacks --slain --slam --slander --slang --slapping --slapstick --slashed --slashing --slate --slather --slaw --sled --sleek --sleep --sleet --sleeve --slept --sliceable --sliced --slicer --slicing --slick --slider --slideshow --sliding --slighted --slighting --slightly --slimness --slimy --slinging --slingshot --slinky --slip --slit --sliver --slobbery --slogan --sloped --sloping --sloppily --sloppy --slot --slouching --slouchy --sludge --slug --slum --slurp --slush --sly --small --smartly --smartness --smasher --smashing --smashup --smell --smelting --smile --smilingly --smirk --smite --smith --smitten --smock --smog --smoked --smokeless --smokiness --smoking --smoky --smolder --smooth --smother --smudge --smudgy --smuggler --smuggling --smugly --smugness --snack --snagged --snaking --snap --snare --snarl --snazzy --sneak --sneer --sneeze --sneezing --snide --sniff --snippet --snipping --snitch --snooper --snooze --snore --snoring --snorkel --snort --snout --snowbird --snowboard --snowbound --snowcap --snowdrift --snowdrop --snowfall --snowfield --snowflake --snowiness --snowless --snowman --snowplow --snowshoe --snowstorm --snowsuit --snowy --snub --snuff --snuggle --snugly --snugness --speak --spearfish --spearhead --spearman --spearmint --species --specimen --specked --speckled --specks --spectacle --spectator --spectrum --speculate --speech --speed --spellbind --speller --spelling --spendable --spender --spending --spent --spew --sphere --spherical --sphinx --spider --spied --spiffy --spill --spilt --spinach --spinal --spindle --spinner --spinning --spinout --spinster --spiny --spiral --spirited --spiritism --spirits --spiritual --splashed --splashing --splashy --splatter --spleen --splendid --splendor --splice --splicing --splinter --splotchy --splurge --spoilage --spoiled --spoiler --spoiling --spoils --spoken --spokesman --sponge --spongy --sponsor --spoof --spookily --spooky --spool --spoon --spore --sporting --sports --sporty --spotless --spotlight --spotted --spotter --spotting --spotty --spousal --spouse --spout --sprain --sprang --sprawl --spray --spree --sprig --spring --sprinkled --sprinkler --sprint --sprite --sprout --spruce --sprung --spry --spud --spur --sputter --spyglass --squabble --squad --squall --squander --squash --squatted --squatter --squatting --squeak --squealer --squealing --squeamish --squeegee --squeeze --squeezing --squid --squiggle --squiggly --squint --squire --squirt --squishier --squishy --stability --stabilize --stable --stack --stadium --staff --stage --staging --stagnant --stagnate --stainable --stained --staining --stainless --stalemate --staleness --stalling --stallion --stamina --stammer --stamp --stand --stank --staple --stapling --starboard --starch --stardom --stardust --starfish --stargazer --staring --stark --starless --starlet --starlight --starlit --starring --starry --starship --starter --starting --startle --startling --startup --starved --starving --stash --state --static --statistic --statue --stature --status --statute --statutory --staunch --stays --steadfast --steadier --steadily --steadying --steam --steed --steep --steerable --steering --steersman --stegosaur --stellar --stem --stench --stencil --step --stereo --sterile --sterility --sterilize --sterling --sternness --sternum --stew --stick --stiffen --stiffly --stiffness --stifle --stifling --stillness --stilt --stimulant --stimulate --stimuli --stimulus --stinger --stingily --stinging --stingray --stingy --stinking --stinky --stipend --stipulate --stir --stitch --stock --stoic --stoke --stole --stomp --stonewall --stoneware --stonework --stoning --stony --stood --stooge --stool --stoop --stoplight --stoppable --stoppage --stopped --stopper --stopping --stopwatch --storable --storage --storeroom --storewide --storm --stout --stove --stowaway --stowing --straddle --straggler --strained --strainer --straining --strangely --stranger --strangle --strategic --strategy --stratus --straw --stray --streak --stream --street --strength --strenuous --strep --stress --stretch --strewn --stricken --strict --stride --strife --strike --striking --strive --striving --strobe --strode --stroller --strongbox --strongly --strongman --struck --structure --strudel --struggle --strum --strung --strut --stubbed --stubble --stubbly --stubborn --stucco --stuck --student --studied --studio --study --stuffed --stuffing --stuffy --stumble --stumbling --stump --stung --stunned --stunner --stunning --stunt --stupor --sturdily --sturdy --styling --stylishly --stylist --stylized --stylus --suave --subarctic --subatomic --subdivide --subdued --subduing --subfloor --subgroup --subheader --subject --sublease --sublet --sublevel --sublime --submarine --submerge --submersed --submitter --subpanel --subpar --subplot --subprime --subscribe --subscript --subsector --subside --subsiding --subsidize --subsidy --subsoil --subsonic --substance --subsystem --subtext --subtitle --subtly --subtotal --subtract --subtype --suburb --subway --subwoofer --subzero --succulent --such --suction --sudden --sudoku --suds --sufferer --suffering --suffice --suffix --suffocate --suffrage --sugar --suggest --suing --suitable --suitably --suitcase --suitor --sulfate --sulfide --sulfite --sulfur --sulk --sullen --sulphate --sulphuric --sultry --superbowl --superglue --superhero --superior --superjet --superman --supermom --supernova --supervise --supper --supplier --supply --support --supremacy --supreme --surcharge --surely --sureness --surface --surfacing --surfboard --surfer --surgery --surgical --surging --surname --surpass --surplus --surprise --surreal --surrender --surrogate --surround --survey --survival --survive --surviving --survivor --sushi --suspect --suspend --suspense --sustained --sustainer --swab --swaddling --swagger --swampland --swan --swapping --swarm --sway --swear --sweat --sweep --swell --swept --swerve --swifter --swiftly --swiftness --swimmable --swimmer --swimming --swimsuit --swimwear --swinger --swinging --swipe --swirl --switch --swivel --swizzle --swooned --swoop --swoosh --swore --sworn --swung --sycamore --sympathy --symphonic --symphony --symptom --synapse --syndrome --synergy --synopses --synopsis --synthesis --synthetic --syrup --system --t-shirt --tabasco --tabby --tableful --tables --tablet --tableware --tabloid --tackiness --tacking --tackle --tackling --tacky --taco --tactful --tactical --tactics --tactile --tactless --tadpole --taekwondo --tag --tainted --take --taking --talcum --talisman --tall --talon --tamale --tameness --tamer --tamper --tank --tanned --tannery --tanning --tantrum --tapeless --tapered --tapering --tapestry --tapioca --tapping --taps --tarantula --target --tarmac --tarnish --tarot --tartar --tartly --tartness --task --tassel --taste --tastiness --tasting --tasty --tattered --tattle --tattling --tattoo --taunt --tavern --thank --that --thaw --theater --theatrics --thee --theft --theme --theology --theorize --thermal --thermos --thesaurus --these --thesis --thespian --thicken --thicket --thickness --thieving --thievish --thigh --thimble --thing --think --thinly --thinner --thinness --thinning --thirstily --thirsting --thirsty --thirteen --thirty --thong --thorn --those --thousand --thrash --thread --threaten --threefold --thrift --thrill --thrive --thriving --throat --throbbing --throng --throttle --throwaway --throwback --thrower --throwing --thud --thumb --thumping --thursday --thus --thwarting --thyself --tiara --tibia --tidal --tidbit --tidiness --tidings --tidy --tiger --tighten --tightly --tightness --tightrope --tightwad --tigress --tile --tiling --till --tilt --timid --timing --timothy --tinderbox --tinfoil --tingle --tingling --tingly --tinker --tinkling --tinsel --tinsmith --tint --tinwork --tiny --tipoff --tipped --tipper --tipping --tiptoeing --tiptop --tiring --tissue --trace --tracing --track --traction --tractor --trade --trading --tradition --traffic --tragedy --trailing --trailside --train --traitor --trance --tranquil --transfer --transform --translate --transpire --transport --transpose --trapdoor --trapeze --trapezoid --trapped --trapper --trapping --traps --trash --travel --traverse --travesty --tray --treachery --treading --treadmill --treason --treat --treble --tree --trekker --tremble --trembling --tremor --trench --trend --trespass --triage --trial --triangle --tribesman --tribunal --tribune --tributary --tribute --triceps --trickery --trickily --tricking --trickle --trickster --tricky --tricolor --tricycle --trident --tried --trifle --trifocals --trillion --trilogy --trimester --trimmer --trimming --trimness --trinity --trio --tripod --tripping --triumph --trivial --trodden --trolling --trombone --trophy --tropical --tropics --trouble --troubling --trough --trousers --trout --trowel --truce --truck --truffle --trump --trunks --trustable --trustee --trustful --trusting --trustless --truth --try --tubby --tubeless --tubular --tucking --tuesday --tug --tuition --tulip --tumble --tumbling --tummy --turban --turbine --turbofan --turbojet --turbulent --turf --turkey --turmoil --turret --turtle --tusk --tutor --tutu --tux --tweak --tweed --tweet --tweezers --twelve --twentieth --twenty --twerp --twice --twiddle --twiddling --twig --twilight --twine --twins --twirl --twistable --twisted --twister --twisting --twisty --twitch --twitter --tycoon --tying --tyke --udder --ultimate --ultimatum --ultra --umbilical --umbrella --umpire --unabashed --unable --unadorned --unadvised --unafraid --unaired --unaligned --unaltered --unarmored --unashamed --unaudited --unawake --unaware --unbaked --unbalance --unbeaten --unbend --unbent --unbiased --unbitten --unblended --unblessed --unblock --unbolted --unbounded --unboxed --unbraided --unbridle --unbroken --unbuckled --unbundle --unburned --unbutton --uncanny --uncapped --uncaring --uncertain --unchain --unchanged --uncharted --uncheck --uncivil --unclad --unclaimed --unclamped --unclasp --uncle --unclip --uncloak --unclog --unclothed --uncoated --uncoiled --uncolored --uncombed --uncommon --uncooked --uncork --uncorrupt --uncounted --uncouple --uncouth --uncover --uncross --uncrown --uncrushed --uncured --uncurious --uncurled --uncut --undamaged --undated --undaunted --undead --undecided --undefined --underage --underarm --undercoat --undercook --undercut --underdog --underdone --underfed --underfeed --underfoot --undergo --undergrad --underhand --underline --underling --undermine --undermost --underpaid --underpass --underpay --underrate --undertake --undertone --undertook --undertow --underuse --underwear --underwent --underwire --undesired --undiluted --undivided --undocked --undoing --undone --undrafted --undress --undrilled --undusted --undying --unearned --unearth --unease --uneasily --uneasy --uneatable --uneaten --unedited --unelected --unending --unengaged --unenvied --unequal --unethical --uneven --unexpired --unexposed --unfailing --unfair --unfasten --unfazed --unfeeling --unfiled --unfilled --unfitted --unfitting --unfixable --unfixed --unflawed --unfocused --unfold --unfounded --unframed --unfreeze --unfrosted --unfrozen --unfunded --unglazed --ungloved --unglue --ungodly --ungraded --ungreased --unguarded --unguided --unhappily --unhappy --unharmed --unhealthy --unheard --unhearing --unheated --unhelpful --unhidden --unhinge --unhitched --unholy --unhook --unicorn --unicycle --unified --unifier --uniformed --uniformly --unify --unimpeded --uninjured --uninstall --uninsured --uninvited --union --uniquely --unisexual --unison --unissued --unit --universal --universe --unjustly --unkempt --unkind --unknotted --unknowing --unknown --unlaced --unlatch --unlawful --unleaded --unlearned --unleash --unless --unleveled --unlighted --unlikable --unlimited --unlined --unlinked --unlisted --unlit --unlivable --unloaded --unloader --unlocked --unlocking --unlovable --unloved --unlovely --unloving --unluckily --unlucky --unmade --unmanaged --unmanned --unmapped --unmarked --unmasked --unmasking --unmatched --unmindful --unmixable --unmixed --unmolded --unmoral --unmovable --unmoved --unmoving --unnamable --unnamed --unnatural --unneeded --unnerve --unnerving --unnoticed --unopened --unopposed --unpack --unpadded --unpaid --unpainted --unpaired --unpaved --unpeeled --unpicked --unpiloted --unpinned --unplanned --unplanted --unpleased --unpledged --unplowed --unplug --unpopular --unproven --unquote --unranked --unrated --unraveled --unreached --unread --unreal --unreeling --unrefined --unrelated --unrented --unrest --unretired --unrevised --unrigged --unripe --unrivaled --unroasted --unrobed --unroll --unruffled --unruly --unrushed --unsaddle --unsafe --unsaid --unsalted --unsaved --unsavory --unscathed --unscented --unscrew --unsealed --unseated --unsecured --unseeing --unseemly --unseen --unselect --unselfish --unsent --unsettled --unshackle --unshaken --unshaved --unshaven --unsheathe --unshipped --unsightly --unsigned --unskilled --unsliced --unsmooth --unsnap --unsocial --unsoiled --unsold --unsolved --unsorted --unspoiled --unspoken --unstable --unstaffed --unstamped --unsteady --unsterile --unstirred --unstitch --unstopped --unstuck --unstuffed --unstylish --unsubtle --unsubtly --unsuited --unsure --unsworn --untagged --untainted --untaken --untamed --untangled --untapped --untaxed --unthawed --unthread --untidy --untie --until --untimed --untimely --untitled --untoasted --untold --untouched --untracked --untrained --untreated --untried --untrimmed --untrue --untruth --unturned --untwist --untying --unusable --unused --unusual --unvalued --unvaried --unvarying --unveiled --unveiling --unvented --unviable --unvisited --unvocal --unwanted --unwarlike --unwary --unwashed --unwatched --unweave --unwed --unwelcome --unwell --unwieldy --unwilling --unwind --unwired --unwitting --unwomanly --unworldly --unworn --unworried --unworthy --unwound --unwoven --unwrapped --unwritten --unzip --upbeat --upchuck --upcoming --upcountry --update --upfront --upgrade --upheaval --upheld --uphill --uphold --uplifted --uplifting --upload --upon --upper --upright --uprising --upriver --uproar --uproot --upscale --upside --upstage --upstairs --upstart --upstate --upstream --upstroke --upswing --uptake --uptight --uptown --upturned --upward --upwind --uranium --urban --urchin --urethane --urgency --urgent --urging --urologist --urology --usable --usage --useable --used --uselessly --user --usher --usual --utensil --utility --utilize --utmost --utopia --utter --vacancy --vacant --vacate --vacation --vagabond --vagrancy --vagrantly --vaguely --vagueness --valiant --valid --valium --valley --valuables --value --vanilla --vanish --vanity --vanquish --vantage --vaporizer --variable --variably --varied --variety --various --varmint --varnish --varsity --varying --vascular --vaseline --vastly --vastness --veal --vegan --veggie --vehicular --velcro --velocity --velvet --vendetta --vending --vendor --veneering --vengeful --venomous --ventricle --venture --venue --venus --verbalize --verbally --verbose --verdict --verify --verse --version --versus --vertebrae --vertical --vertigo --very --vessel --vest --veteran --veto --vexingly --viability --viable --vibes --vice --vicinity --victory --video --viewable --viewer --viewing --viewless --viewpoint --vigorous --village --villain --vindicate --vineyard --vintage --violate --violation --violator --violet --violin --viper --viral --virtual --virtuous --virus --visa --viscosity --viscous --viselike --visible --visibly --vision --visiting --visitor --visor --vista --vitality --vitalize --vitally --vitamins --vivacious --vividly --vividness --vixen --vocalist --vocalize --vocally --vocation --voice --voicing --void --volatile --volley --voltage --volumes --voter --voting --voucher --vowed --vowel --voyage --wackiness --wad --wafer --waffle --waged --wager --wages --waggle --wagon --wake --waking --walk --walmart --walnut --walrus --waltz --wand --wannabe --wanted --wanting --wasabi --washable --washbasin --washboard --washbowl --washcloth --washday --washed --washer --washhouse --washing --washout --washroom --washstand --washtub --wasp --wasting --watch --water --waviness --waving --wavy --whacking --whacky --wham --wharf --wheat --whenever --whiff --whimsical --whinny --whiny --whisking --whoever --whole --whomever --whoopee --whooping --whoops --why --wick --widely --widen --widget --widow --width --wieldable --wielder --wife --wifi --wikipedia --wildcard --wildcat --wilder --wildfire --wildfowl --wildland --wildlife --wildly --wildness --willed --willfully --willing --willow --willpower --wilt --wimp --wince --wincing --wind --wing --winking --winner --winnings --winter --wipe --wired --wireless --wiring --wiry --wisdom --wise --wish --wisplike --wispy --wistful --wizard --wobble --wobbling --wobbly --wok --wolf --wolverine --womanhood --womankind --womanless --womanlike --womanly --womb --woof --wooing --wool --woozy --word --work --worried --worrier --worrisome --worry --worsening --worshiper --worst --wound --woven --wow --wrangle --wrath --wreath --wreckage --wrecker --wrecking --wrench --wriggle --wriggly --wrinkle --wrinkly --wrist --writing --written --wrongdoer --wronged --wrongful --wrongly --wrongness --wrought --xbox --xerox --yahoo --yam --yanking --yapping --yard --yarn --yeah --yearbook --yearling --yearly --yearning --yeast --yelling --yelp --yen --yesterday --yiddish --yield --yin --yippee --yo-yo --yodel --yoga --yogurt --yonder --yoyo --yummy --zap --zealous --zebra --zen --zeppelin --zero --zestfully --zesty --zigzagged --zipfile --zipping --zippy --zips --zit --zodiac --zombie --zone --zoning --zookeeper --zoologist --zoology --zoom -diff -urNr keepassxc-2.6.4-orig/snap/local/launchers/gtk3-env-launch keepassxc-2.6.4-patched/snap/local/launchers/gtk3-env-launch ---- keepassxc-2.6.4-orig/snap/local/launchers/gtk3-env-launch 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/snap/local/launchers/gtk3-env-launch 1970-01-01 01:00:00.000000000 +0100 -@@ -1,14 +0,0 @@ --#!/usr/bin/env bash --# This is the maintainence launcher for the snap, make necessary runtime environment changes to make the snap work here. You may also insert security confinement/deprecation/obsoletion notice of the snap here. -- --set \ -- -o errexit \ -- -o errtrace \ -- -o nounset \ -- -o pipefail -- --# gtk-common-themes support --export QT_QPA_PLATFORMTHEME=gtk3 -- --# Finally run the next part of the command chain --exec "${@}" -diff -urNr keepassxc-2.6.4-orig/snap/local/launchers/README.md keepassxc-2.6.4-patched/snap/local/launchers/README.md ---- keepassxc-2.6.4-orig/snap/local/launchers/README.md 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/snap/local/launchers/README.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,11 +0,0 @@ --# /snap/local/launchers --Here are the launchers, or wrapper programs to deal with some runtime-fixable problems for the snapped applications, like setting proper environmental variables in snap. -- --In convention launchers are named _something_-launch, for dealing certain problem with _something_, and usually can be called in a stacked manner to consolidate their modifications. -- --```yaml --apps: -- _app_name_: -- command: foo-launch bar-launch _app_command_ --``` -- -diff -urNr keepassxc-2.6.4-orig/sonar-project.properties keepassxc-2.6.4-patched/sonar-project.properties ---- keepassxc-2.6.4-orig/sonar-project.properties 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/sonar-project.properties 1970-01-01 01:00:00.000000000 +0100 -@@ -1,18 +0,0 @@ --# https://about.sonarcloud.io/get-started/ --# Run the SonarCloud tools with the follow parameters: --# Run in the cmake build directory after cmake: build-wrapper-[platform]-x86-64 --out-dir bw-output make clean all --# Run in the project root directory: sonar-scanner.bat -Dsonar.cfamily.build-wrapper-output=build/bw-output -Dsonar.cfamily.gcov.reportsPath=build -Dsonar.login=[AUTH_TOKEN] -- --# required metadata --sonar.projectKey=keepassxc --sonar.organization=droidmonkey-github --sonar.projectName=keepassxc --sonar.host.url=https://sonarcloud.io -- --# path to source directories (required) --sonar.sources=src --sonar.tests=tests -- --sonar.cfamily.threads=2 -- --sonar.exclusions=**/zxcvbn/* -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.cpp ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,95 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeAction.h" -- --#include "core/Tools.h" -- --AutoTypeChar::AutoTypeChar(const QChar& character) -- : character(character) --{ --} -- --AutoTypeAction* AutoTypeChar::clone() --{ -- return new AutoTypeChar(character); --} -- --void AutoTypeChar::accept(AutoTypeExecutor* executor) --{ -- executor->execChar(this); --} -- --AutoTypeKey::AutoTypeKey(Qt::Key key) -- : key(key) --{ --} -- --AutoTypeAction* AutoTypeKey::clone() --{ -- return new AutoTypeKey(key); --} -- --void AutoTypeKey::accept(AutoTypeExecutor* executor) --{ -- executor->execKey(this); --} -- --AutoTypeDelay::AutoTypeDelay(int delayMs) -- : delayMs(delayMs) --{ --} -- --AutoTypeAction* AutoTypeDelay::clone() --{ -- return new AutoTypeDelay(delayMs); --} -- --void AutoTypeDelay::accept(AutoTypeExecutor* executor) --{ -- executor->execDelay(this); --} -- --AutoTypeClearField::AutoTypeClearField() --{ --} -- --AutoTypeAction* AutoTypeClearField::clone() --{ -- return new AutoTypeClearField(); --} -- --void AutoTypeClearField::accept(AutoTypeExecutor* executor) --{ -- executor->execClearField(this); --} -- --void AutoTypeExecutor::execDelay(AutoTypeDelay* action) --{ -- Tools::wait(action->delayMs); --} -- --void AutoTypeExecutor::execClearField(AutoTypeClearField* action) --{ -- Q_UNUSED(action); --} -- --AutoTypeAction::~AutoTypeAction() --{ -- // This makes sure that AutoTypeAction's vtable is placed -- // in this translation unit. --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.h keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.h ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,87 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEACTION_H --#define KEEPASSX_AUTOTYPEACTION_H -- --#include --#include --#include -- --#include "core/Global.h" -- --class AutoTypeExecutor; -- --class KEEPASSX_EXPORT AutoTypeAction --{ --public: -- virtual AutoTypeAction* clone() = 0; -- virtual void accept(AutoTypeExecutor* executor) = 0; -- virtual ~AutoTypeAction(); --}; -- --class KEEPASSX_EXPORT AutoTypeChar : public AutoTypeAction --{ --public: -- explicit AutoTypeChar(const QChar& character); -- AutoTypeAction* clone() override; -- void accept(AutoTypeExecutor* executor) override; -- -- const QChar character; --}; -- --class KEEPASSX_EXPORT AutoTypeKey : public AutoTypeAction --{ --public: -- explicit AutoTypeKey(Qt::Key key); -- AutoTypeAction* clone() override; -- void accept(AutoTypeExecutor* executor) override; -- -- const Qt::Key key; --}; -- --class KEEPASSX_EXPORT AutoTypeDelay : public AutoTypeAction --{ --public: -- explicit AutoTypeDelay(int delayMs); -- AutoTypeAction* clone() override; -- void accept(AutoTypeExecutor* executor) override; -- -- const int delayMs; --}; -- --class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction --{ --public: -- AutoTypeClearField(); -- AutoTypeAction* clone() override; -- void accept(AutoTypeExecutor* executor) override; --}; -- --class KEEPASSX_EXPORT AutoTypeExecutor --{ --public: -- virtual ~AutoTypeExecutor() -- { -- } -- virtual void execChar(AutoTypeChar* action) = 0; -- virtual void execKey(AutoTypeKey* action) = 0; -- virtual void execDelay(AutoTypeDelay* action); -- virtual void execClearField(AutoTypeClearField* action); --}; -- --#endif // KEEPASSX_AUTOTYPEACTION_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoType.cpp keepassxc-2.6.4-patched/src/autotype/AutoType.cpp ---- keepassxc-2.6.4-orig/src/autotype/AutoType.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoType.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,841 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoType.h" -- --#include --#include --#include -- --#include "config-keepassx.h" -- --#include "autotype/AutoTypePlatformPlugin.h" --#include "autotype/AutoTypeSelectDialog.h" --#include "autotype/WildcardMatcher.h" --#include "core/AutoTypeMatch.h" --#include "core/Config.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/ListDeleter.h" --#include "core/Resources.h" --#include "core/Tools.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" -- --#ifdef Q_OS_MAC --#include "gui/osutils/macutils/MacUtils.h" --#endif -- --AutoType* AutoType::m_instance = nullptr; -- --AutoType::AutoType(QObject* parent, bool test) -- : QObject(parent) -- , m_autoTypeDelay(0) -- , m_currentGlobalKey(static_cast(0)) -- , m_currentGlobalModifiers(nullptr) -- , m_pluginLoader(new QPluginLoader(this)) -- , m_plugin(nullptr) -- , m_executor(nullptr) -- , m_windowState(WindowState::Normal) -- , m_windowForGlobal(0) --{ -- // prevent crash when the plugin has unresolved symbols -- m_pluginLoader->setLoadHints(QLibrary::ResolveAllSymbolsHint); -- -- QString pluginName = "keepassx-autotype-"; -- if (!test) { -- pluginName += QApplication::platformName(); -- } else { -- pluginName += "test"; -- } -- -- QString pluginPath = resources()->pluginPath(pluginName); -- -- if (!pluginPath.isEmpty()) { --#ifdef WITH_XC_AUTOTYPE -- loadPlugin(pluginPath); --#endif -- } -- -- connect(qApp, SIGNAL(aboutToQuit()), SLOT(unloadPlugin())); --} -- --AutoType::~AutoType() --{ -- if (m_executor) { -- delete m_executor; -- m_executor = nullptr; -- } --} -- --void AutoType::loadPlugin(const QString& pluginPath) --{ -- m_pluginLoader->setFileName(pluginPath); -- -- QObject* pluginInstance = m_pluginLoader->instance(); -- if (pluginInstance) { -- m_plugin = qobject_cast(pluginInstance); -- m_executor = nullptr; -- -- if (m_plugin) { -- if (m_plugin->isAvailable()) { -- m_executor = m_plugin->createExecutor(); -- connect(pluginInstance, SIGNAL(globalShortcutTriggered()), SLOT(startGlobalAutoType())); -- } else { -- unloadPlugin(); -- } -- } -- } -- -- if (!m_plugin) { -- qWarning("Unable to load auto-type plugin:\n%s", qPrintable(m_pluginLoader->errorString())); -- } --} -- --void AutoType::unloadPlugin() --{ -- if (m_executor) { -- delete m_executor; -- m_executor = nullptr; -- } -- -- if (m_plugin) { -- m_plugin->unload(); -- m_plugin = nullptr; -- } --} -- --AutoType* AutoType::instance() --{ -- if (!m_instance) { -- m_instance = new AutoType(qApp); -- } -- -- return m_instance; --} -- --void AutoType::createTestInstance() --{ -- Q_ASSERT(!m_instance); -- -- m_instance = new AutoType(qApp, true); --} -- --QStringList AutoType::windowTitles() --{ -- if (!m_plugin) { -- return QStringList(); -- } -- -- return m_plugin->windowTitles(); --} -- --void AutoType::raiseWindow() --{ --#if defined(Q_OS_MACOS) -- m_plugin->raiseOwnWindow(); --#endif --} -- --bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- Q_ASSERT(key); -- Q_ASSERT(modifiers); -- -- if (!m_plugin) { -- return false; -- } -- -- if (key != m_currentGlobalKey || modifiers != m_currentGlobalModifiers) { -- if (m_currentGlobalKey && m_currentGlobalModifiers) { -- m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); -- } -- -- if (m_plugin->registerGlobalShortcut(key, modifiers)) { -- m_currentGlobalKey = key; -- m_currentGlobalModifiers = modifiers; -- return true; -- } -- return false; -- } -- return true; --} -- --void AutoType::unregisterGlobalShortcut() --{ -- if (m_plugin && m_currentGlobalKey && m_currentGlobalModifiers) { -- m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); -- } --} -- --int AutoType::callEventFilter(void* event) --{ -- if (!m_plugin) { -- return -1; -- } -- -- return m_plugin->platformEventFilter(event); --} -- --/** -- * Core Autotype function that will execute actions -- */ --void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window) --{ -- if (!m_inAutoType.tryLock()) { -- return; -- } -- -- // no edit to the sequence beyond this point -- if (!verifyAutoTypeSyntax(sequence)) { -- emit autotypeRejected(); -- m_inAutoType.unlock(); -- return; -- } -- -- QList actions; -- ListDeleter actionsDeleter(&actions); -- -- if (!parseActions(sequence, entry, actions)) { -- emit autotypeRejected(); -- m_inAutoType.unlock(); -- return; -- } -- -- if (hideWindow) { --#if defined(Q_OS_MACOS) -- // Check for accessibility permission -- if (!macUtils()->enableAccessibility()) { -- MessageBox::information(nullptr, -- tr("Permission Required"), -- tr("KeePassXC requires the Accessibility permission in order to perform entry " -- "level Auto-Type. If you already granted permission, you may have to restart " -- "KeePassXC.")); -- return; -- } -- -- macUtils()->raiseLastActiveWindow(); -- m_plugin->hideOwnWindow(); --#else -- getMainWindow()->minimizeOrHide(); --#endif -- } -- -- Tools::wait(qMax(100, config()->get(Config::AutoTypeStartDelay).toInt())); -- -- // Used only for selected entry auto-type -- if (!window) { -- window = m_plugin->activeWindow(); -- } -- -- QCoreApplication::processEvents(QEventLoop::AllEvents, 10); -- -- for (AutoTypeAction* action : asConst(actions)) { -- if (m_plugin->activeWindow() != window) { -- qWarning("Active window changed, interrupting auto-type."); -- emit autotypeRejected(); -- m_inAutoType.unlock(); -- return; -- } -- -- action->accept(m_executor); -- QCoreApplication::processEvents(QEventLoop::AllEvents, 10); -- } -- -- m_windowForGlobal = 0; -- m_windowTitleForGlobal.clear(); -- -- // emit signal only if autotype performed correctly -- emit autotypePerformed(); -- -- m_inAutoType.unlock(); --} -- --/** -- * Single Autotype entry-point function -- * Look up the Auto-Type sequence for the given entry then perfom Auto-Type in the active window -- */ --void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) --{ -- if (!m_plugin) { -- return; -- } -- -- QList sequences = autoTypeSequences(entry); -- if (sequences.isEmpty()) { -- return; -- } -- -- executeAutoTypeActions(entry, hideWindow, sequences.first()); --} -- --/** -- * Extra Autotype entry-point function -- * Perfom Auto-Type of the directly specified sequence in the active window -- */ --void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow) --{ -- if (!m_plugin) { -- return; -- } -- -- executeAutoTypeActions(entry, hideWindow, sequence); --} -- --void AutoType::startGlobalAutoType() --{ -- m_windowForGlobal = m_plugin->activeWindow(); -- m_windowTitleForGlobal = m_plugin->activeWindowTitle(); --#ifdef Q_OS_MACOS -- m_windowState = WindowState::Normal; -- if (getMainWindow()) { -- if (getMainWindow()->isMinimized()) { -- m_windowState = WindowState::Minimized; -- } -- if (getMainWindow()->isHidden()) { -- m_windowState = WindowState::Hidden; -- } -- } --#endif -- -- emit globalAutoTypeTriggered(); --} -- --/** -- * Global Autotype entry-point function -- * Perform global Auto-Type on the active window -- */ --void AutoType::performGlobalAutoType(const QList>& dbList) --{ -- if (!m_plugin) { -- return; -- } -- -- if (!m_inGlobalAutoTypeDialog.tryLock()) { -- return; -- } -- -- if (m_windowTitleForGlobal.isEmpty()) { -- m_inGlobalAutoTypeDialog.unlock(); -- return; -- } -- -- QList matchList; -- -- for (const auto& db : dbList) { -- const QList dbEntries = db->rootGroup()->entriesRecursive(); -- for (Entry* entry : dbEntries) { -- const QSet sequences = autoTypeSequences(entry, m_windowTitleForGlobal).toSet(); -- for (const QString& sequence : sequences) { -- if (!sequence.isEmpty()) { -- matchList << AutoTypeMatch(entry, sequence); -- } -- } -- } -- } -- -- if (matchList.isEmpty()) { -- if (qobject_cast(QCoreApplication::instance())) { -- auto* msgBox = new QMessageBox(); -- msgBox->setAttribute(Qt::WA_DeleteOnClose); -- msgBox->setWindowTitle(tr("Auto-Type - KeePassXC")); -- msgBox->setText(tr("Couldn't find an entry that matches the window title:") -- .append("\n\n") -- .append(m_windowTitleForGlobal)); -- msgBox->setIcon(QMessageBox::Information); -- msgBox->setStandardButtons(QMessageBox::Ok); --#ifdef Q_OS_MACOS -- m_plugin->raiseOwnWindow(); -- Tools::wait(200); --#endif -- msgBox->exec(); -- restoreWindowState(); -- } -- -- m_inGlobalAutoTypeDialog.unlock(); -- emit autotypeRejected(); -- } else if ((matchList.size() == 1) && !config()->get(Config::Security_AutoTypeAsk).toBool()) { -- executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence, m_windowForGlobal); -- m_inGlobalAutoTypeDialog.unlock(); -- } else { -- auto* selectDialog = new AutoTypeSelectDialog(); -- -- // connect slots, both of which must unlock the m_inGlobalAutoTypeDialog mutex -- connect(selectDialog, SIGNAL(matchActivated(AutoTypeMatch)), SLOT(performAutoTypeFromGlobal(AutoTypeMatch))); -- connect(selectDialog, SIGNAL(rejected()), SLOT(autoTypeRejectedFromGlobal())); -- -- selectDialog->setMatchList(matchList); --#ifdef Q_OS_MACOS -- m_plugin->raiseOwnWindow(); -- Tools::wait(200); --#endif -- selectDialog->show(); -- selectDialog->raise(); -- // necessary when the main window is minimized -- selectDialog->activateWindow(); -- } --} -- --void AutoType::restoreWindowState() --{ --#ifdef Q_OS_MAC -- if (getMainWindow()) { -- if (m_windowState == WindowState::Minimized) { -- getMainWindow()->showMinimized(); -- } else if (m_windowState == WindowState::Hidden) { -- getMainWindow()->hideWindow(); -- } -- } --#endif --} -- --void AutoType::performAutoTypeFromGlobal(AutoTypeMatch match) --{ -- restoreWindowState(); -- -- m_plugin->raiseWindow(m_windowForGlobal); -- executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowForGlobal); -- -- // make sure the mutex is definitely locked before we unlock it -- Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); -- m_inGlobalAutoTypeDialog.unlock(); --} -- --void AutoType::autoTypeRejectedFromGlobal() --{ -- // this slot can be called twice when the selection dialog is deleted, -- // so make sure the mutex is locked before we try unlocking it -- Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); -- m_inGlobalAutoTypeDialog.unlock(); -- m_windowForGlobal = 0; -- m_windowTitleForGlobal.clear(); -- -- restoreWindowState(); -- emit autotypeRejected(); --} -- --/** -- * Parse an autotype sequence and resolve its Template/command inside as AutoTypeActions -- */ --bool AutoType::parseActions(const QString& actionSequence, const Entry* entry, QList& actions) --{ -- QString tmpl; -- bool inTmpl = false; -- m_autoTypeDelay = qMax(config()->get(Config::AutoTypeDelay).toInt(), 0); -- -- QString sequence = actionSequence; -- sequence.replace("{{}", "{LEFTBRACE}"); -- sequence.replace("{}}", "{RIGHTBRACE}"); -- -- for (const QChar& ch : sequence) { -- if (inTmpl) { -- if (ch == '{') { -- qWarning("Syntax error in Auto-Type sequence."); -- return false; -- } else if (ch == '}') { -- QList autoType = createActionFromTemplate(tmpl, entry); -- if (!autoType.isEmpty()) { -- actions.append(autoType); -- } -- inTmpl = false; -- tmpl.clear(); -- } else { -- tmpl += ch; -- } -- } else if (ch == '{') { -- inTmpl = true; -- } else if (ch == '}') { -- qWarning("Syntax error in Auto-Type sequence."); -- return false; -- } else { -- actions.append(new AutoTypeChar(ch)); -- } -- } -- if (m_autoTypeDelay > 0) { -- QList::iterator i; -- i = actions.begin(); -- while (i != actions.end()) { -- ++i; -- if (i != actions.end()) { -- i = actions.insert(i, new AutoTypeDelay(m_autoTypeDelay)); -- ++i; -- } -- } -- } -- return true; --} -- --/** -- * Convert an autotype Template/command to its AutoTypeAction that will be executed by the plugin executor -- */ --QList AutoType::createActionFromTemplate(const QString& tmpl, const Entry* entry) --{ -- QString tmplName = tmpl; -- int num = -1; -- QList list; -- -- QRegExp delayRegEx("delay=(\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); -- if (delayRegEx.exactMatch(tmplName)) { -- num = delayRegEx.cap(1).toInt(); -- m_autoTypeDelay = std::max(0, std::min(num, 10000)); -- return list; -- } -- -- QRegExp repeatRegEx("(.+) (\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); -- if (repeatRegEx.exactMatch(tmplName)) { -- tmplName = repeatRegEx.cap(1); -- num = repeatRegEx.cap(2).toInt(); -- -- if (num == 0) { -- return list; -- } -- } -- -- if (tmplName.compare("tab", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Tab)); -- } else if (tmplName.compare("enter", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Enter)); -- } else if (tmplName.compare("space", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Space)); -- } else if (tmplName.compare("up", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Up)); -- } else if (tmplName.compare("down", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Down)); -- } else if (tmplName.compare("left", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Left)); -- } else if (tmplName.compare("right", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Right)); -- } else if (tmplName.compare("insert", Qt::CaseInsensitive) == 0 -- || tmplName.compare("ins", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Insert)); -- } else if (tmplName.compare("delete", Qt::CaseInsensitive) == 0 -- || tmplName.compare("del", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Delete)); -- } else if (tmplName.compare("home", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Home)); -- } else if (tmplName.compare("end", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_End)); -- } else if (tmplName.compare("pgup", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_PageUp)); -- } else if (tmplName.compare("pgdown", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_PageDown)); -- } else if (tmplName.compare("backspace", Qt::CaseInsensitive) == 0 -- || tmplName.compare("bs", Qt::CaseInsensitive) == 0 -- || tmplName.compare("bksp", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Backspace)); -- } else if (tmplName.compare("break", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Pause)); -- } else if (tmplName.compare("capslock", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_CapsLock)); -- } else if (tmplName.compare("esc", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Escape)); -- } else if (tmplName.compare("help", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Help)); -- } else if (tmplName.compare("numlock", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_NumLock)); -- } else if (tmplName.compare("ptrsc", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_Print)); -- } else if (tmplName.compare("scrolllock", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeKey(Qt::Key_ScrollLock)); -- } -- // Qt doesn't know about keypad keys so use the normal ones instead -- else if (tmplName.compare("add", Qt::CaseInsensitive) == 0 || tmplName.compare("+", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('+')); -- } else if (tmplName.compare("subtract", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('-')); -- } else if (tmplName.compare("multiply", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('*')); -- } else if (tmplName.compare("divide", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('/')); -- } else if (tmplName.compare("^", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('^')); -- } else if (tmplName.compare("%", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('%')); -- } else if (tmplName.compare("~", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('~')); -- } else if (tmplName.compare("(", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('(')); -- } else if (tmplName.compare(")", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar(')')); -- } else if (tmplName.compare("leftbrace", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('{')); -- } else if (tmplName.compare("rightbrace", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeChar('}')); -- } else { -- QRegExp fnRegexp("f(\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); -- if (fnRegexp.exactMatch(tmplName)) { -- int fnNo = fnRegexp.cap(1).toInt(); -- if (fnNo >= 1 && fnNo <= 16) { -- list.append(new AutoTypeKey(static_cast(Qt::Key_F1 - 1 + fnNo))); -- } -- } -- } -- -- if (!list.isEmpty()) { -- for (int i = 1; i < num; i++) { -- list.append(list.at(0)->clone()); -- } -- return list; -- } -- -- if (tmplName.compare("delay", Qt::CaseInsensitive) == 0 && num > 0) { -- list.append(new AutoTypeDelay(num)); -- } else if (tmplName.compare("clearfield", Qt::CaseInsensitive) == 0) { -- list.append(new AutoTypeClearField()); -- } else if (tmplName.compare("totp", Qt::CaseInsensitive) == 0) { -- QString totp = entry->totp(); -- if (!totp.isEmpty()) { -- for (const QChar& ch : totp) { -- list.append(new AutoTypeChar(ch)); -- } -- } -- } -- -- if (!list.isEmpty()) { -- return list; -- } -- -- const QString placeholder = QString("{%1}").arg(tmplName); -- const QString resolved = entry->resolvePlaceholder(placeholder); -- if (placeholder != resolved) { -- for (const QChar& ch : resolved) { -- if (ch == '\n') { -- list.append(new AutoTypeKey(Qt::Key_Enter)); -- } else if (ch == '\t') { -- list.append(new AutoTypeKey(Qt::Key_Tab)); -- } else { -- list.append(new AutoTypeChar(ch)); -- } -- } -- } -- -- return list; --} -- --/** -- * Retrive the autotype sequences matches for a given windowTitle -- * This returns a list with priority ordering. If you don't want duplicates call .toSet() on it. -- */ --QList AutoType::autoTypeSequences(const Entry* entry, const QString& windowTitle) --{ -- QList sequenceList; -- const Group* group = entry->group(); -- -- if (!group || !entry->autoTypeEnabled()) { -- return sequenceList; -- } -- -- do { -- if (group->autoTypeEnabled() == Group::Disable) { -- return sequenceList; -- } else if (group->autoTypeEnabled() == Group::Enable) { -- break; -- } -- group = group->parentGroup(); -- -- } while (group); -- -- if (!windowTitle.isEmpty()) { -- const QList assocList = entry->autoTypeAssociations()->getAll(); -- for (const AutoTypeAssociations::Association& assoc : assocList) { -- const QString window = entry->resolveMultiplePlaceholders(assoc.window); -- if (windowMatches(windowTitle, window)) { -- if (!assoc.sequence.isEmpty()) { -- sequenceList.append(assoc.sequence); -- } else { -- sequenceList.append(entry->effectiveAutoTypeSequence()); -- } -- } -- } -- -- if (config()->get(Config::AutoTypeEntryTitleMatch).toBool() -- && windowMatchesTitle(windowTitle, entry->resolvePlaceholder(entry->title()))) { -- sequenceList.append(entry->effectiveAutoTypeSequence()); -- } -- -- if (config()->get(Config::AutoTypeEntryURLMatch).toBool() -- && windowMatchesUrl(windowTitle, entry->resolvePlaceholder(entry->url()))) { -- sequenceList.append(entry->effectiveAutoTypeSequence()); -- } -- -- if (sequenceList.isEmpty()) { -- return sequenceList; -- } -- } else { -- sequenceList.append(entry->effectiveAutoTypeSequence()); -- } -- -- return sequenceList; --} -- --/** -- * Checks if a window title matches a pattern -- */ --bool AutoType::windowMatches(const QString& windowTitle, const QString& windowPattern) --{ -- if (windowPattern.startsWith("//") && windowPattern.endsWith("//") && windowPattern.size() >= 4) { -- QRegExp regExp(windowPattern.mid(2, windowPattern.size() - 4), Qt::CaseInsensitive, QRegExp::RegExp2); -- return (regExp.indexIn(windowTitle) != -1); -- } -- return WildcardMatcher(windowTitle).match(windowPattern); --} -- --/** -- * Checks if a window title matches an entry Title -- * The entry title should be Spr-compiled by the caller -- */ --bool AutoType::windowMatchesTitle(const QString& windowTitle, const QString& resolvedTitle) --{ -- return !resolvedTitle.isEmpty() && windowTitle.contains(resolvedTitle, Qt::CaseInsensitive); --} -- --/** -- * Checks if a window title matches an entry URL -- * The entry URL should be Spr-compiled by the caller -- */ --bool AutoType::windowMatchesUrl(const QString& windowTitle, const QString& resolvedUrl) --{ -- if (!resolvedUrl.isEmpty() && windowTitle.contains(resolvedUrl, Qt::CaseInsensitive)) { -- return true; -- } -- -- QUrl url(resolvedUrl); -- if (url.isValid() && !url.host().isEmpty()) { -- return windowTitle.contains(url.host(), Qt::CaseInsensitive); -- } -- -- return false; --} -- --/** -- * Checks if the overall syntax of an autotype sequence is fine -- */ --bool AutoType::checkSyntax(const QString& string) --{ -- QString allowRepetition = "(?:\\s\\d+)?"; -- // the ":" allows custom commands with syntax S:Field -- // exclude BEEP otherwise will be checked as valid -- QString normalCommands = "(?!BEEP\\s)[A-Z:_]*" + allowRepetition; -- QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+]" + allowRepetition; -- QString functionKeys = "(?:F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition; -- QString numpad = "NUMPAD\\d" + allowRepetition; -- QString delay = "DELAY=\\d+"; -- QString beep = "BEEP\\s\\d+\\s\\d+"; -- QString vkey = "VKEY(?:-[EN]X)?\\s\\w+"; -- QString customAttributes = "S:(?:[^\\{\\}])+"; -- -- // these chars aren't in parentheses -- QString shortcutKeys = "[\\^\\%~\\+@]"; -- // a normal string not in parentheses -- QString fixedStrings = "[^\\^\\%~\\+@\\{\\}]*"; -- // clang-format off -- QRegularExpression autoTypeSyntax( -- "^(?:" + shortcutKeys + "|" + fixedStrings + "|\\{(?:" + normalCommands + "|" + specialLiterals + "|" -- + functionKeys -- + "|" -- + numpad -- + "|" -- + delay -- + "|" -- + beep -- + "|" -- + vkey -- + ")\\}|\\{" -- + customAttributes -- + "\\})*$", -- QRegularExpression::CaseInsensitiveOption); -- // clang-format on -- QRegularExpressionMatch match = autoTypeSyntax.match(string); -- return match.hasMatch(); --} -- --/** -- * Checks an autotype sequence for high delay -- */ --bool AutoType::checkHighDelay(const QString& string) --{ -- // 5 digit numbers(10 seconds) are too much -- QRegularExpression highDelay("\\{DELAY\\s\\d{5,}\\}", QRegularExpression::CaseInsensitiveOption); -- QRegularExpressionMatch match = highDelay.match(string); -- return match.hasMatch(); --} -- --/** -- * Checks an autotype sequence for slow keypress -- */ --bool AutoType::checkSlowKeypress(const QString& string) --{ -- // 3 digit numbers(100 milliseconds) are too much -- QRegularExpression slowKeypress("\\{DELAY=\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); -- QRegularExpressionMatch match = slowKeypress.match(string); -- return match.hasMatch(); --} -- --/** -- * Checks an autotype sequence for high repetition command -- */ --bool AutoType::checkHighRepetition(const QString& string) --{ -- // 3 digit numbers are too much -- QRegularExpression highRepetition("\\{(?!DELAY\\s)\\w+\\s\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); -- QRegularExpressionMatch match = highRepetition.match(string); -- return match.hasMatch(); --} -- --/** -- * Verify if the syntax of an autotype sequence is correct and doesn't have silly parameters -- */ --bool AutoType::verifyAutoTypeSyntax(const QString& sequence) --{ -- if (!AutoType::checkSyntax(sequence)) { -- QMessageBox::critical(nullptr, tr("Auto-Type"), tr("The Syntax of your Auto-Type statement is incorrect!")); -- return false; -- } else if (AutoType::checkHighDelay(sequence)) { -- QMessageBox::StandardButton reply; -- reply = QMessageBox::question( -- nullptr, -- tr("Auto-Type"), -- tr("This Auto-Type command contains a very long delay. Do you really want to proceed?")); -- -- if (reply == QMessageBox::No) { -- return false; -- } -- } else if (AutoType::checkSlowKeypress(sequence)) { -- QMessageBox::StandardButton reply; -- reply = QMessageBox::question( -- nullptr, -- tr("Auto-Type"), -- tr("This Auto-Type command contains very slow key presses. Do you really want to proceed?")); -- -- if (reply == QMessageBox::No) { -- return false; -- } -- } else if (AutoType::checkHighRepetition(sequence)) { -- QMessageBox::StandardButton reply; -- reply = QMessageBox::question(nullptr, -- tr("Auto-Type"), -- tr("This Auto-Type command contains arguments which are " -- "repeated very often. Do you really want to proceed?")); -- -- if (reply == QMessageBox::No) { -- return false; -- } -- } -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.cpp ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,39 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeFilterLineEdit.h" --#include -- --void AutoTypeFilterLineEdit::keyPressEvent(QKeyEvent* event) --{ -- if (event->key() == Qt::Key_Up) { -- emit keyUpPressed(); -- } else if (event->key() == Qt::Key_Down) { -- emit keyDownPressed(); -- } else { -- QLineEdit::keyPressEvent(event); -- } --} -- --void AutoTypeFilterLineEdit::keyReleaseEvent(QKeyEvent* event) --{ -- if (event->key() == Qt::Key_Escape) { -- emit escapeReleased(); -- } else { -- QLineEdit::keyReleaseEvent(event); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.h keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.h ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,42 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEFILTERLINEEDIT_H --#define KEEPASSX_AUTOTYPEFILTERLINEEDIT_H -- --#include -- --class AutoTypeFilterLineEdit : public QLineEdit --{ -- Q_OBJECT -- --public: -- AutoTypeFilterLineEdit(QWidget* widget) -- : QLineEdit(widget) -- { -- } -- --protected: -- virtual void keyPressEvent(QKeyEvent* event); -- virtual void keyReleaseEvent(QKeyEvent* event); --signals: -- void keyUpPressed(); -- void keyDownPressed(); -- void escapeReleased(); --}; -- --#endif // KEEPASSX_AUTOTYPEFILTERLINEEDIT_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoType.h keepassxc-2.6.4-patched/src/autotype/AutoType.h ---- keepassxc-2.6.4-orig/src/autotype/AutoType.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoType.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,121 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPE_H --#define KEEPASSX_AUTOTYPE_H -- --#include --#include --#include --#include -- --#include "core/AutoTypeMatch.h" -- --class AutoTypeAction; --class AutoTypeExecutor; --class AutoTypePlatformInterface; --class Database; --class Entry; --class QPluginLoader; -- --class AutoType : public QObject --{ -- Q_OBJECT -- --public: -- QStringList windowTitles(); -- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); -- void unregisterGlobalShortcut(); -- int callEventFilter(void* event); -- static bool checkSyntax(const QString& string); -- static bool checkHighRepetition(const QString& string); -- static bool checkSlowKeypress(const QString& string); -- static bool checkHighDelay(const QString& string); -- static bool verifyAutoTypeSyntax(const QString& sequence); -- void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr); -- void performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow = nullptr); -- -- inline bool isAvailable() -- { -- return m_plugin; -- } -- -- static AutoType* instance(); -- static void createTestInstance(); -- --public slots: -- void performGlobalAutoType(const QList>& dbList); -- void raiseWindow(); -- --signals: -- void globalAutoTypeTriggered(); -- void autotypePerformed(); -- void autotypeRejected(); -- --private slots: -- void startGlobalAutoType(); -- void performAutoTypeFromGlobal(AutoTypeMatch match); -- void autoTypeRejectedFromGlobal(); -- void unloadPlugin(); -- --private: -- enum WindowState -- { -- Normal, -- Minimized, -- Hidden -- }; -- -- explicit AutoType(QObject* parent = nullptr, bool test = false); -- ~AutoType() override; -- void loadPlugin(const QString& pluginPath); -- void executeAutoTypeActions(const Entry* entry, -- QWidget* hideWindow = nullptr, -- const QString& customSequence = QString(), -- WId window = 0); -- bool parseActions(const QString& sequence, const Entry* entry, QList& actions); -- QList createActionFromTemplate(const QString& tmpl, const Entry* entry); -- QList autoTypeSequences(const Entry* entry, const QString& windowTitle = QString()); -- bool windowMatchesTitle(const QString& windowTitle, const QString& resolvedTitle); -- bool windowMatchesUrl(const QString& windowTitle, const QString& resolvedUrl); -- bool windowMatches(const QString& windowTitle, const QString& windowPattern); -- void restoreWindowState(); -- -- QMutex m_inAutoType; -- QMutex m_inGlobalAutoTypeDialog; -- int m_autoTypeDelay; -- Qt::Key m_currentGlobalKey; -- Qt::KeyboardModifiers m_currentGlobalModifiers; -- QPluginLoader* m_pluginLoader; -- AutoTypePlatformInterface* m_plugin; -- AutoTypeExecutor* m_executor; -- static AutoType* m_instance; -- -- QString m_windowTitleForGlobal; -- WindowState m_windowState; -- WId m_windowForGlobal; -- -- Q_DISABLE_COPY(AutoType) --}; -- --inline AutoType* autoType() --{ -- return AutoType::instance(); --} -- --#endif // KEEPASSX_AUTOTYPE_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypePlatformPlugin.h keepassxc-2.6.4-patched/src/autotype/AutoTypePlatformPlugin.h ---- keepassxc-2.6.4-orig/src/autotype/AutoTypePlatformPlugin.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypePlatformPlugin.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,55 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H --#define KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H -- --#include -- --#include "autotype/AutoTypeAction.h" -- --class AutoTypePlatformInterface --{ --public: -- virtual ~AutoTypePlatformInterface() -- { -- } -- virtual bool isAvailable() = 0; -- virtual QStringList windowTitles() = 0; -- virtual WId activeWindow() = 0; -- virtual QString activeWindowTitle() = 0; -- virtual bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; -- virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; -- virtual int platformEventFilter(void* event) = 0; -- virtual bool raiseWindow(WId window) = 0; -- virtual void unload() -- { -- } -- -- virtual AutoTypeExecutor* createExecutor() = 0; -- --#if defined(Q_OS_MACOS) -- virtual bool hideOwnWindow() = 0; -- virtual bool raiseOwnWindow() = 0; --#endif -- -- // implementations should also provide a globalShortcutTriggered() signal --}; -- --Q_DECLARE_INTERFACE(AutoTypePlatformInterface, "org.keepassx.AutoTypePlatformInterface/1") -- --#endif // KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.cpp ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,184 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeSelectDialog.h" -- --#include --#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) --#include --#else --#include --#endif --#include --#include --#include --#include --#include --#include -- --#include "autotype/AutoTypeSelectView.h" --#include "core/AutoTypeMatch.h" --#include "core/Config.h" --#include "core/Resources.h" --#include "gui/entry/AutoTypeMatchModel.h" -- --AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) -- : QDialog(parent) -- , m_view(new AutoTypeSelectView(this)) -- , m_filterLineEdit(new AutoTypeFilterLineEdit(this)) -- , m_matchActivatedEmitted(false) -- , m_rejected(false) --{ -- setAttribute(Qt::WA_DeleteOnClose); -- // Places the window on the active (virtual) desktop instead of where the main window is. -- setAttribute(Qt::WA_X11BypassTransientForHint); -- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); -- setWindowTitle(tr("Auto-Type - KeePassXC")); -- setWindowIcon(resources()->applicationIcon()); -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) -- QRect screenGeometry = QApplication::screenAt(QCursor::pos())->availableGeometry(); --#else -- QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); --#endif -- QSize size = config()->get(Config::GUI_AutoTypeSelectDialogSize).toSize(); -- size.setWidth(qMin(size.width(), screenGeometry.width())); -- size.setHeight(qMin(size.height(), screenGeometry.height())); -- resize(size); -- -- // move dialog to the center of the screen -- QPoint screenCenter = screenGeometry.center(); -- move(screenCenter.x() - (size.width() / 2), screenCenter.y() - (size.height() / 2)); -- -- QVBoxLayout* layout = new QVBoxLayout(this); -- -- QLabel* descriptionLabel = new QLabel(tr("Select entry to Auto-Type:"), this); -- layout->addWidget(descriptionLabel); -- -- // clang-format off -- connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); -- connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); -- connect(m_view->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(matchRemoved())); -- connect(m_view, SIGNAL(rejected()), SLOT(reject())); -- connect(m_view, SIGNAL(matchTextCopied()), SLOT(reject())); -- // clang-format on -- -- QSortFilterProxyModel* proxy = qobject_cast(m_view->model()); -- if (proxy) { -- proxy->setFilterKeyColumn(-1); -- proxy->setFilterCaseSensitivity(Qt::CaseInsensitive); -- } -- -- layout->addWidget(m_view); -- -- connect(m_filterLineEdit, SIGNAL(textChanged(QString)), SLOT(filterList(QString))); -- connect(m_filterLineEdit, SIGNAL(returnPressed()), SLOT(activateCurrentIndex())); -- connect(m_filterLineEdit, SIGNAL(keyUpPressed()), SLOT(moveSelectionUp())); -- connect(m_filterLineEdit, SIGNAL(keyDownPressed()), SLOT(moveSelectionDown())); -- connect(m_filterLineEdit, SIGNAL(escapeReleased()), SLOT(reject())); -- -- m_filterLineEdit->setPlaceholderText(tr("Search...")); -- layout->addWidget(m_filterLineEdit); -- -- QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); -- connect(buttonBox, SIGNAL(rejected()), SLOT(reject())); -- layout->addWidget(buttonBox); -- -- m_filterLineEdit->setFocus(); --} -- --void AutoTypeSelectDialog::setMatchList(const QList& matchList) --{ -- m_view->setMatchList(matchList); -- -- m_view->header()->resizeSections(QHeaderView::ResizeToContents); --} -- --void AutoTypeSelectDialog::done(int r) --{ -- config()->set(Config::GUI_AutoTypeSelectDialogSize, size()); -- -- QDialog::done(r); --} -- --void AutoTypeSelectDialog::reject() --{ -- m_rejected = true; -- -- QDialog::reject(); --} -- --void AutoTypeSelectDialog::emitMatchActivated(const QModelIndex& index) --{ -- // make sure we don't emit the signal twice when both activated() and clicked() are triggered -- if (m_matchActivatedEmitted) { -- return; -- } -- m_matchActivatedEmitted = true; -- -- AutoTypeMatch match = m_view->matchFromIndex(index); -- accept(); -- emit matchActivated(match); --} -- --void AutoTypeSelectDialog::matchRemoved() --{ -- if (m_rejected) { -- return; -- } -- -- if (m_view->model()->rowCount() == 0 && m_filterLineEdit->text().isEmpty()) { -- reject(); -- } --} -- --void AutoTypeSelectDialog::filterList(QString filterString) --{ -- QSortFilterProxyModel* proxy = qobject_cast(m_view->model()); -- if (proxy) { -- proxy->setFilterWildcard(filterString); -- if (!m_view->currentIndex().isValid()) { -- m_view->setCurrentIndex(m_view->model()->index(0, 0)); -- } -- } --} -- --void AutoTypeSelectDialog::moveSelectionUp() --{ -- auto current = m_view->currentIndex(); -- auto previous = current.sibling(current.row() - 1, 0); -- -- if (previous.isValid()) { -- m_view->setCurrentIndex(previous); -- } --} -- --void AutoTypeSelectDialog::moveSelectionDown() --{ -- auto current = m_view->currentIndex(); -- auto next = current.sibling(current.row() + 1, 0); -- -- if (next.isValid()) { -- m_view->setCurrentIndex(next); -- } --} -- --void AutoTypeSelectDialog::activateCurrentIndex() --{ -- emitMatchActivated(m_view->currentIndex()); --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.h keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.h ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPESELECTDIALOG_H --#define KEEPASSX_AUTOTYPESELECTDIALOG_H -- --#include --#include --#include -- --#include "autotype/AutoTypeFilterLineEdit.h" --#include "core/AutoTypeMatch.h" -- --class AutoTypeSelectView; -- --class AutoTypeSelectDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit AutoTypeSelectDialog(QWidget* parent = nullptr); -- void setMatchList(const QList& matchList); -- --signals: -- void matchActivated(AutoTypeMatch match); -- --public slots: -- void done(int r) override; -- void reject() override; -- --private slots: -- void emitMatchActivated(const QModelIndex& index); -- void matchRemoved(); -- void filterList(QString filterString); -- void moveSelectionUp(); -- void moveSelectionDown(); -- void activateCurrentIndex(); -- --private: -- AutoTypeSelectView* const m_view; -- AutoTypeFilterLineEdit* const m_filterLineEdit; -- bool m_matchActivatedEmitted; -- bool m_rejected; --}; -- --#endif // KEEPASSX_AUTOTYPESELECTDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.cpp ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeSelectView.h" -- --#include --#include -- --AutoTypeSelectView::AutoTypeSelectView(QWidget* parent) -- : AutoTypeMatchView(parent) --{ -- setMouseTracking(true); -- setAllColumnsShowFocus(true); -- -- connect(model(), SIGNAL(modelReset()), SLOT(selectFirstMatch())); --} -- --void AutoTypeSelectView::mouseMoveEvent(QMouseEvent* event) --{ -- QModelIndex index = indexAt(event->pos()); -- -- if (index.isValid()) { -- setCurrentIndex(index); -- setCursor(Qt::PointingHandCursor); -- } else { -- unsetCursor(); -- } -- -- AutoTypeMatchView::mouseMoveEvent(event); --} -- --void AutoTypeSelectView::selectFirstMatch() --{ -- QModelIndex index = model()->index(0, 0); -- -- if (index.isValid()) { -- setCurrentIndex(index); -- } --} -- --void AutoTypeSelectView::keyReleaseEvent(QKeyEvent* e) --{ -- if (e->key() == Qt::Key_Escape) { -- emit rejected(); -- } else { -- e->ignore(); -- } --} -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.h keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.h ---- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPESELECTVIEW_H --#define KEEPASSX_AUTOTYPESELECTVIEW_H -- --#include "gui/entry/AutoTypeMatchView.h" -- --class AutoTypeSelectView : public AutoTypeMatchView --{ -- Q_OBJECT -- --public: -- explicit AutoTypeSelectView(QWidget* parent = nullptr); -- --protected: -- void mouseMoveEvent(QMouseEvent* event) override; -- void keyReleaseEvent(QKeyEvent* e) override; -- --private slots: -- void selectFirstMatch(); -- --signals: -- void rejected(); --}; -- --#endif // KEEPASSX_AUTOTYPESELECTVIEW_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/autotype/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,23 +0,0 @@ --if(WITH_XC_AUTOTYPE) -- if(UNIX AND NOT APPLE AND NOT HAIKU) -- find_package(X11) -- find_package(Qt5X11Extras 5.2) -- if(PRINT_SUMMARY) -- add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") -- add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") -- add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") -- endif() -- -- if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) -- add_subdirectory(xcb) -- endif() -- elseif(APPLE) -- add_subdirectory(mac) -- elseif(WIN32) -- add_subdirectory(windows) -- endif() -- -- if(WITH_TESTS) -- add_subdirectory(test) -- endif() --endif() -diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.cpp keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.cpp ---- keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,549 +0,0 @@ --/* -- * Copyright (C) 2016 Lennart Glauer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeMac.h" --#include "gui/osutils/macutils/MacUtils.h" --#include "gui/MessageBox.h" -- --#include -- --#define HOTKEY_ID 1 --#define MAX_WINDOW_TITLE_LENGTH 1024 --#define INVALID_KEYCODE 0xFFFF -- --namespace { --bool accessibilityChecked = false; --} -- --AutoTypePlatformMac::AutoTypePlatformMac() -- : m_hotkeyRef(nullptr) -- , m_hotkeyId({ 'kpx2', HOTKEY_ID }) --{ -- EventTypeSpec eventSpec; -- eventSpec.eventClass = kEventClassKeyboard; -- eventSpec.eventKind = kEventHotKeyPressed; -- -- MessageBox::initializeButtonDefs(); -- ::InstallApplicationEventHandler(AutoTypePlatformMac::hotkeyHandler, 1, &eventSpec, this, nullptr); --} -- --/** -- * Determine if Auto-Type is available -- * -- * @return always return true -- */ --bool AutoTypePlatformMac::isAvailable() --{ -- // Accessibility permissions are requested upon first use, instead of on load -- return true; --} -- --// --// Get list of visible window titles --// see: Quartz Window Services --// --QStringList AutoTypePlatformMac::windowTitles() --{ -- QStringList list; -- -- CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); -- if (windowList != nullptr) { -- CFIndex count = ::CFArrayGetCount(windowList); -- -- for (CFIndex i = 0; i < count; i++) { -- CFDictionaryRef window = static_cast(::CFArrayGetValueAtIndex(windowList, i)); -- if (windowLayer(window) != 0) { -- continue; -- } -- -- QString title = windowTitle(window); -- if (!title.isEmpty()) { -- list.append(title); -- } -- } -- -- ::CFRelease(windowList); -- } -- -- return list; --} -- --// --// Get active window process id --// --WId AutoTypePlatformMac::activeWindow() --{ -- return macUtils()->activeWindow(); --} -- --// --// Get active window title --// see: Quartz Window Services --// --QString AutoTypePlatformMac::activeWindowTitle() --{ -- QString title; -- -- CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); -- if (windowList != nullptr) { -- CFIndex count = ::CFArrayGetCount(windowList); -- -- for (CFIndex i = 0; i < count; i++) { -- CFDictionaryRef window = static_cast(::CFArrayGetValueAtIndex(windowList, i)); -- if (windowLayer(window) == 0) { -- // First toplevel window in list (front to back order) -- title = windowTitle(window); -- if (!title.isEmpty()) { -- break; -- } -- } -- } -- -- ::CFRelease(windowList); -- } -- -- return title; --} -- --// --// Register global hotkey --// --bool AutoTypePlatformMac::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- uint16 nativeKeyCode = qtToNativeKeyCode(key); -- if (nativeKeyCode == INVALID_KEYCODE) { -- qWarning("Invalid key code"); -- return false; -- } -- CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, false); -- if (::RegisterEventHotKey(nativeKeyCode, nativeModifiers, m_hotkeyId, GetApplicationEventTarget(), 0, &m_hotkeyRef) != noErr) { -- qWarning("Register hotkey failed"); -- return false; -- } -- -- return true; --} -- --// --// Unregister global hotkey --// --void AutoTypePlatformMac::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- Q_UNUSED(key); -- Q_UNUSED(modifiers); -- -- ::UnregisterEventHotKey(m_hotkeyRef); --} -- --int AutoTypePlatformMac::platformEventFilter(void* event) --{ -- Q_UNUSED(event); -- Q_ASSERT(false); -- -- return -1; --} -- --AutoTypeExecutor* AutoTypePlatformMac::createExecutor() --{ -- return new AutoTypeExecutorMac(this); --} -- --// --// Activate window by process id --// --bool AutoTypePlatformMac::raiseWindow(WId pid) --{ -- return macUtils()->raiseWindow(pid); --} -- --// --// Activate last active window --// --bool AutoTypePlatformMac::hideOwnWindow() --{ -- return macUtils()->hideOwnWindow(); --} -- --// --// Activate keepassx window --// --bool AutoTypePlatformMac::raiseOwnWindow() --{ -- return macUtils()->raiseOwnWindow(); --} -- --// --// Send unicode character to active window --// see: Quartz Event Services --// --void AutoTypePlatformMac::sendChar(const QChar& ch, bool isKeyDown) --{ -- CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, 0, isKeyDown); -- if (keyEvent != nullptr) { -- UniChar unicode = ch.unicode(); -- ::CGEventKeyboardSetUnicodeString(keyEvent, 1, &unicode); -- ::CGEventPost(kCGSessionEventTap, keyEvent); -- ::CFRelease(keyEvent); -- } --} -- --// --// Send key code to active window --// see: Quartz Event Services --// --void AutoTypePlatformMac::sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers = 0) --{ -- uint16 keyCode = qtToNativeKeyCode(key); -- if (keyCode == INVALID_KEYCODE) { -- return; -- } -- -- CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, keyCode, isKeyDown); -- CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, true); -- if (keyEvent != nullptr) { -- ::CGEventSetFlags(keyEvent, nativeModifiers); -- ::CGEventPost(kCGSessionEventTap, keyEvent); -- ::CFRelease(keyEvent); -- } --} -- --// --// Translate qt key code to mac os key code --// see: HIToolbox/Events.h --// --uint16 AutoTypePlatformMac::qtToNativeKeyCode(Qt::Key key) --{ -- switch (key) { -- case Qt::Key_A: -- return kVK_ANSI_A; -- case Qt::Key_B: -- return kVK_ANSI_B; -- case Qt::Key_C: -- return kVK_ANSI_C; -- case Qt::Key_D: -- return kVK_ANSI_D; -- case Qt::Key_E: -- return kVK_ANSI_E; -- case Qt::Key_F: -- return kVK_ANSI_F; -- case Qt::Key_G: -- return kVK_ANSI_G; -- case Qt::Key_H: -- return kVK_ANSI_H; -- case Qt::Key_I: -- return kVK_ANSI_I; -- case Qt::Key_J: -- return kVK_ANSI_J; -- case Qt::Key_K: -- return kVK_ANSI_K; -- case Qt::Key_L: -- return kVK_ANSI_L; -- case Qt::Key_M: -- return kVK_ANSI_M; -- case Qt::Key_N: -- return kVK_ANSI_N; -- case Qt::Key_O: -- return kVK_ANSI_O; -- case Qt::Key_P: -- return kVK_ANSI_P; -- case Qt::Key_Q: -- return kVK_ANSI_Q; -- case Qt::Key_R: -- return kVK_ANSI_R; -- case Qt::Key_S: -- return kVK_ANSI_S; -- case Qt::Key_T: -- return kVK_ANSI_T; -- case Qt::Key_U: -- return kVK_ANSI_U; -- case Qt::Key_V: -- return kVK_ANSI_V; -- case Qt::Key_W: -- return kVK_ANSI_W; -- case Qt::Key_X: -- return kVK_ANSI_X; -- case Qt::Key_Y: -- return kVK_ANSI_Y; -- case Qt::Key_Z: -- return kVK_ANSI_Z; -- -- case Qt::Key_0: -- return kVK_ANSI_0; -- case Qt::Key_1: -- return kVK_ANSI_1; -- case Qt::Key_2: -- return kVK_ANSI_2; -- case Qt::Key_3: -- return kVK_ANSI_3; -- case Qt::Key_4: -- return kVK_ANSI_4; -- case Qt::Key_5: -- return kVK_ANSI_5; -- case Qt::Key_6: -- return kVK_ANSI_6; -- case Qt::Key_7: -- return kVK_ANSI_7; -- case Qt::Key_8: -- return kVK_ANSI_8; -- case Qt::Key_9: -- return kVK_ANSI_9; -- -- case Qt::Key_Equal: -- return kVK_ANSI_Equal; -- case Qt::Key_Minus: -- return kVK_ANSI_Minus; -- case Qt::Key_BracketRight: -- return kVK_ANSI_RightBracket; -- case Qt::Key_BracketLeft: -- return kVK_ANSI_LeftBracket; -- case Qt::Key_QuoteDbl: -- return kVK_ANSI_Quote; -- case Qt::Key_Semicolon: -- return kVK_ANSI_Semicolon; -- case Qt::Key_Backslash: -- return kVK_ANSI_Backslash; -- case Qt::Key_Comma: -- return kVK_ANSI_Comma; -- case Qt::Key_Slash: -- return kVK_ANSI_Slash; -- case Qt::Key_Period: -- return kVK_ANSI_Period; -- -- case Qt::Key_Shift: -- return kVK_Shift; -- case Qt::Key_Control: -- return kVK_Command; -- case Qt::Key_Backspace: -- return kVK_Delete; -- case Qt::Key_Tab: -- case Qt::Key_Backtab: -- return kVK_Tab; -- case Qt::Key_Enter: -- case Qt::Key_Return: -- return kVK_Return; -- case Qt::Key_CapsLock: -- return kVK_CapsLock; -- case Qt::Key_Escape: -- return kVK_Escape; -- case Qt::Key_Space: -- return kVK_Space; -- case Qt::Key_PageUp: -- return kVK_PageUp; -- case Qt::Key_PageDown: -- return kVK_PageDown; -- case Qt::Key_End: -- return kVK_End; -- case Qt::Key_Home: -- return kVK_Home; -- case Qt::Key_Left: -- return kVK_LeftArrow; -- case Qt::Key_Up: -- return kVK_UpArrow; -- case Qt::Key_Right: -- return kVK_RightArrow; -- case Qt::Key_Down: -- return kVK_DownArrow; -- case Qt::Key_Delete: -- return kVK_ForwardDelete; -- case Qt::Key_Help: -- return kVK_Help; -- -- case Qt::Key_F1: -- return kVK_F1; -- case Qt::Key_F2: -- return kVK_F2; -- case Qt::Key_F3: -- return kVK_F3; -- case Qt::Key_F4: -- return kVK_F4; -- case Qt::Key_F5: -- return kVK_F5; -- case Qt::Key_F6: -- return kVK_F6; -- case Qt::Key_F7: -- return kVK_F7; -- case Qt::Key_F8: -- return kVK_F8; -- case Qt::Key_F9: -- return kVK_F9; -- case Qt::Key_F10: -- return kVK_F10; -- case Qt::Key_F11: -- return kVK_F11; -- case Qt::Key_F12: -- return kVK_F12; -- case Qt::Key_F13: -- return kVK_F13; -- case Qt::Key_F14: -- return kVK_F14; -- case Qt::Key_F15: -- return kVK_F15; -- case Qt::Key_F16: -- return kVK_F16; -- -- default: -- Q_ASSERT(false); -- return INVALID_KEYCODE; -- } --} -- --// --// Translate qt key modifiers to mac os modifiers --// see: https://doc.qt.io/qt-5/osx-issues.html#special-keys --// --CGEventFlags AutoTypePlatformMac::qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native) --{ -- CGEventFlags nativeModifiers = CGEventFlags(0); -- -- CGEventFlags shiftMod = CGEventFlags(shiftKey); -- CGEventFlags cmdMod = CGEventFlags(cmdKey); -- CGEventFlags optionMod = CGEventFlags(optionKey); -- CGEventFlags controlMod = CGEventFlags(controlKey); -- -- if (native) { -- shiftMod = kCGEventFlagMaskShift; -- cmdMod = kCGEventFlagMaskCommand; -- optionMod = kCGEventFlagMaskAlternate; -- controlMod = kCGEventFlagMaskControl; -- } -- -- -- if (modifiers & Qt::ShiftModifier) { -- nativeModifiers = CGEventFlags(nativeModifiers | shiftMod); -- } -- if (modifiers & Qt::ControlModifier) { -- nativeModifiers = CGEventFlags(nativeModifiers | cmdMod); -- } -- if (modifiers & Qt::AltModifier) { -- nativeModifiers = CGEventFlags(nativeModifiers | optionMod); -- } -- if (modifiers & Qt::MetaModifier) { -- nativeModifiers = CGEventFlags(nativeModifiers | controlMod); -- } -- -- return nativeModifiers; --} -- --// --// Get window layer/level --// --int AutoTypePlatformMac::windowLayer(CFDictionaryRef window) --{ -- int layer; -- -- CFNumberRef layerRef = static_cast(::CFDictionaryGetValue(window, kCGWindowLayer)); -- if (layerRef != nullptr -- && ::CFNumberGetValue(layerRef, kCFNumberIntType, &layer)) { -- return layer; -- } -- -- return -1; --} -- --// --// Get window title --// --QString AutoTypePlatformMac::windowTitle(CFDictionaryRef window) --{ -- char buffer[MAX_WINDOW_TITLE_LENGTH]; -- QString title; -- -- CFStringRef titleRef = static_cast(::CFDictionaryGetValue(window, kCGWindowName)); -- if (titleRef != nullptr -- && ::CFStringGetCString(titleRef, buffer, MAX_WINDOW_TITLE_LENGTH, kCFStringEncodingUTF8)) { -- title = QString::fromUtf8(buffer); -- } -- -- return title; --} -- --// --// Carbon hotkey handler --// --OSStatus AutoTypePlatformMac::hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData) --{ -- Q_UNUSED(nextHandler); -- -- // Determine if the user has given proper permissions to KeePassXC to perform Auto-Type -- if (!accessibilityChecked) { -- if (macUtils()->enableAccessibility() && macUtils()->enableScreenRecording()) { -- accessibilityChecked = true; -- } else { -- // Does not have required permissions to Auto-Type, ignore the keypress -- MessageBox::information(nullptr, -- tr("Permission Required"), -- tr("KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global " -- "Auto-Type. Screen Recording is necessary to use the window title to find entries. If you " -- "already granted permission, you may have to restart KeePassXC.")); -- return noErr; -- } -- } -- -- AutoTypePlatformMac* self = static_cast(userData); -- EventHotKeyID hotkeyId; -- -- if (::GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, nullptr, sizeof(hotkeyId), nullptr, &hotkeyId) == noErr -- && hotkeyId.id == HOTKEY_ID) { -- emit self->globalShortcutTriggered(); -- } -- -- return noErr; --} -- --// --// ------------------------------ AutoTypeExecutorMac ------------------------------ --// -- --AutoTypeExecutorMac::AutoTypeExecutorMac(AutoTypePlatformMac* platform) -- : m_platform(platform) --{ --} -- --void AutoTypeExecutorMac::execChar(AutoTypeChar* action) --{ -- m_platform->sendChar(action->character, true); -- m_platform->sendChar(action->character, false); --} -- --void AutoTypeExecutorMac::execKey(AutoTypeKey* action) --{ -- m_platform->sendKey(action->key, true); -- m_platform->sendKey(action->key, false); --} -- --void AutoTypeExecutorMac::execClearField(AutoTypeClearField* action = nullptr) --{ -- Q_UNUSED(action); -- -- m_platform->sendKey(Qt::Key_Control, true, Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Up, true, Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Up, false, Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Control, false); -- usleep(25 * 1000); -- m_platform->sendKey(Qt::Key_Shift, true, Qt::ShiftModifier); -- m_platform->sendKey(Qt::Key_Control, true, Qt::ShiftModifier | Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Down, true, Qt::ShiftModifier | Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Down, false, Qt::ShiftModifier | Qt::ControlModifier); -- m_platform->sendKey(Qt::Key_Control, false, Qt::ShiftModifier); -- m_platform->sendKey(Qt::Key_Shift, false); -- usleep(25 * 1000); -- m_platform->sendKey(Qt::Key_Backspace, true); -- m_platform->sendKey(Qt::Key_Backspace, false); -- -- usleep(25 * 1000); --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.h keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.h ---- keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,80 +0,0 @@ --/* -- * Copyright (C) 2016 Lennart Glauer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEMAC_H --#define KEEPASSX_AUTOTYPEMAC_H -- --#include --#include --#include -- --#include "autotype/AutoTypePlatformPlugin.h" --#include "autotype/AutoTypeAction.h" -- --class AutoTypePlatformMac : public QObject, public AutoTypePlatformInterface --{ -- Q_OBJECT -- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformMac") -- Q_INTERFACES(AutoTypePlatformInterface) -- --public: -- AutoTypePlatformMac(); -- bool isAvailable() override; -- QStringList windowTitles() override; -- WId activeWindow() override; -- QString activeWindowTitle() override; -- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- int platformEventFilter(void* event) override; -- bool raiseWindow(WId pid) override; -- AutoTypeExecutor* createExecutor() override; -- -- bool hideOwnWindow() override; -- bool raiseOwnWindow() override; -- -- void sendChar(const QChar& ch, bool isKeyDown); -- void sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers); -- --signals: -- void globalShortcutTriggered(); -- --private: -- EventHotKeyRef m_hotkeyRef; -- EventHotKeyID m_hotkeyId; -- -- static uint16 qtToNativeKeyCode(Qt::Key key); -- static CGEventFlags qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native); -- static int windowLayer(CFDictionaryRef window); -- static QString windowTitle(CFDictionaryRef window); -- static OSStatus hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); --}; -- --class AutoTypeExecutorMac : public AutoTypeExecutor --{ --public: -- explicit AutoTypeExecutorMac(AutoTypePlatformMac* platform); -- -- void execChar(AutoTypeChar* action) override; -- void execKey(AutoTypeKey* action) override; -- void execClearField(AutoTypeClearField* action) override; -- --private: -- AutoTypePlatformMac* const m_platform; --}; -- --#endif // KEEPASSX_AUTOTYPEMAC_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/mac/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/autotype/mac/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/mac/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,18 +0,0 @@ --set(autotype_mac_SOURCES AutoTypeMac.cpp) -- --add_library(keepassx-autotype-cocoa MODULE ${autotype_mac_SOURCES}) --set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon") --target_link_libraries(keepassx-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets) -- --if(WITH_APP_BUNDLE) -- add_custom_command(TARGET keepassx-autotype-cocoa -- POST_BUILD -- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} -- COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins -- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src -- COMMENT "Deploying autotype plugin") --else() -- install(TARGETS keepassx-autotype-cocoa -- BUNDLE DESTINATION . COMPONENT Runtime -- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) --endif() -diff -urNr keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.cpp keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.cpp ---- keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,132 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ShortcutWidget.h" -- --#include -- --#include "autotype/AutoType.h" -- --ShortcutWidget::ShortcutWidget(QWidget* parent) -- : QLineEdit(parent) -- , m_key(static_cast(0)) -- , m_modifiers(nullptr) -- , m_locked(false) --{ -- setReadOnly(true); --} -- --Qt::Key ShortcutWidget::key() const --{ -- return m_key; --} -- --Qt::KeyboardModifiers ShortcutWidget::modifiers() const --{ -- return m_modifiers; --} -- --void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- m_key = key; -- m_modifiers = modifiers; -- m_locked = true; -- -- displayShortcut(m_key, m_modifiers); -- -- if (autoType()->registerGlobalShortcut(m_key, m_modifiers)) { -- setStyleSheet(""); -- } else { -- setStyleSheet("background-color: #FF9696;"); -- } --} -- --void ShortcutWidget::resetShortcut() --{ -- m_key = static_cast(0); -- m_modifiers = nullptr; -- m_locked = false; -- autoType()->unregisterGlobalShortcut(); --} -- --void ShortcutWidget::keyPressEvent(QKeyEvent* event) --{ -- keyEvent(event); --} -- --void ShortcutWidget::keyReleaseEvent(QKeyEvent* event) --{ -- keyEvent(event); --} -- --void ShortcutWidget::keyEvent(QKeyEvent* event) --{ -- event->accept(); -- -- if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { -- return; -- } -- -- bool release = (event->type() == QEvent::KeyRelease); -- -- if (m_locked && release) { -- return; -- } -- -- Qt::Key key = static_cast(event->key()); -- -- if (key <= 0 || key == Qt::Key_unknown) { -- return; -- } -- -- Qt::KeyboardModifiers modifiers = event->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META); -- -- bool keyIsModifier; -- switch (key) { -- case Qt::Key_Shift: -- case Qt::Key_Control: -- case Qt::Key_Meta: -- case Qt::Key_Alt: -- case Qt::Key_AltGr: -- keyIsModifier = true; -- break; -- default: -- keyIsModifier = false; -- } -- -- if (!release && !keyIsModifier) { -- if (modifiers != 0) { -- setShortcut(key, modifiers); -- } else { -- resetShortcut(); -- setStyleSheet(""); -- displayShortcut(key, modifiers); -- } -- } else { -- if (m_locked) { -- resetShortcut(); -- setStyleSheet(""); -- } -- -- displayShortcut(static_cast(0), modifiers); -- } --} -- --void ShortcutWidget::displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- setText(QKeySequence(key | modifiers).toString(QKeySequence::NativeText)); --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.h keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.h ---- keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SHORTCUTWIDGET_H --#define KEEPASSX_SHORTCUTWIDGET_H -- --#include -- --class ShortcutWidget : public QLineEdit --{ -- Q_OBJECT -- --public: -- explicit ShortcutWidget(QWidget* parent = nullptr); -- Qt::Key key() const; -- Qt::KeyboardModifiers modifiers() const; -- void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); -- --protected: -- void keyPressEvent(QKeyEvent* event) override; -- void keyReleaseEvent(QKeyEvent* event) override; -- --private: -- void keyEvent(QKeyEvent* event); -- void displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); -- void resetShortcut(); -- -- Qt::Key m_key; -- Qt::KeyboardModifiers m_modifiers; -- bool m_locked; --}; -- --#endif // KEEPASSX_SHORTCUTWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.cpp keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.cpp ---- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,143 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeTest.h" -- --bool AutoTypePlatformTest::isAvailable() --{ -- return true; --} -- --QString AutoTypePlatformTest::keyToString(Qt::Key key) --{ -- return QString("[Key0x%1]").arg(key, 0, 16); --} -- --QStringList AutoTypePlatformTest::windowTitles() --{ -- return QStringList(); --} -- --WId AutoTypePlatformTest::activeWindow() --{ -- return 0; --} -- --QString AutoTypePlatformTest::activeWindowTitle() --{ -- return m_activeWindowTitle; --} -- --bool AutoTypePlatformTest::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- Q_UNUSED(key); -- Q_UNUSED(modifiers); -- -- return true; --} -- --void AutoTypePlatformTest::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- Q_UNUSED(key); -- Q_UNUSED(modifiers); --} -- --int AutoTypePlatformTest::platformEventFilter(void* event) --{ -- Q_UNUSED(event); -- -- return -1; --} -- --AutoTypeExecutor* AutoTypePlatformTest::createExecutor() --{ -- return new AutoTypeExecutorTest(this); --} -- --void AutoTypePlatformTest::triggerGlobalAutoType() --{ -- emit globalShortcutTriggered(); --} -- --void AutoTypePlatformTest::setActiveWindowTitle(const QString& title) --{ -- m_activeWindowTitle = title; --} -- --QString AutoTypePlatformTest::actionChars() --{ -- return m_actionChars; --} -- --int AutoTypePlatformTest::actionCount() --{ -- return m_actionList.size(); --} -- --void AutoTypePlatformTest::clearActions() --{ -- qDeleteAll(m_actionList); -- m_actionList.clear(); -- -- m_actionChars.clear(); --} -- --void AutoTypePlatformTest::addActionChar(AutoTypeChar* action) --{ -- m_actionList.append(action->clone()); -- m_actionChars += action->character; --} -- --void AutoTypePlatformTest::addActionKey(AutoTypeKey* action) --{ -- m_actionList.append(action->clone()); -- m_actionChars.append(keyToString(action->key)); --} -- --bool AutoTypePlatformTest::raiseWindow(WId window) --{ -- Q_UNUSED(window); -- -- return false; --} -- --#if defined(Q_OS_MACOS) --bool AutoTypePlatformTest::hideOwnWindow() --{ -- return false; --} -- --bool AutoTypePlatformTest::raiseOwnWindow() --{ -- return false; --} --#endif -- --AutoTypeExecutorTest::AutoTypeExecutorTest(AutoTypePlatformTest* platform) -- : m_platform(platform) --{ --} -- --void AutoTypeExecutorTest::execChar(AutoTypeChar* action) --{ -- m_platform->addActionChar(action); --} -- --void AutoTypeExecutorTest::execKey(AutoTypeKey* action) --{ -- m_platform->addActionKey(action); --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.h keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.h ---- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,82 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPETEST_H --#define KEEPASSX_AUTOTYPETEST_H -- --#include -- --#include "autotype/AutoTypeAction.h" --#include "autotype/AutoTypePlatformPlugin.h" --#include "autotype/test/AutoTypeTestInterface.h" -- --class AutoTypePlatformTest : public QObject, public AutoTypePlatformInterface, public AutoTypeTestInterface --{ -- Q_OBJECT -- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformInterface") -- Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface) -- --public: -- QString keyToString(Qt::Key key) override; -- -- bool isAvailable() override; -- QStringList windowTitles() override; -- WId activeWindow() override; -- QString activeWindowTitle() override; -- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- int platformEventFilter(void* event) override; -- bool raiseWindow(WId window) override; -- AutoTypeExecutor* createExecutor() override; -- --#if defined(Q_OS_MACOS) -- bool hideOwnWindow() override; -- bool raiseOwnWindow() override; --#endif -- -- void triggerGlobalAutoType() override; -- void setActiveWindowTitle(const QString& title) override; -- -- QString actionChars() override; -- int actionCount() override; -- void clearActions() override; -- -- void addActionChar(AutoTypeChar* action); -- void addActionKey(AutoTypeKey* action); -- --signals: -- void globalShortcutTriggered(); -- --private: -- QString m_activeWindowTitle; -- QList m_actionList; -- QString m_actionChars; --}; -- --class AutoTypeExecutorTest : public AutoTypeExecutor --{ --public: -- explicit AutoTypeExecutorTest(AutoTypePlatformTest* platform); -- -- void execChar(AutoTypeChar* action) override; -- void execKey(AutoTypeKey* action) override; -- --private: -- AutoTypePlatformTest* const m_platform; --}; -- --#endif // KEEPASSX_AUTOTYPETEST_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTestInterface.h keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTestInterface.h ---- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTestInterface.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTestInterface.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPETESTINTERFACE_H --#define KEEPASSX_AUTOTYPETESTINTERFACE_H -- --#include "autotype/AutoTypeAction.h" -- --class AutoTypeTestInterface --{ --public: -- virtual ~AutoTypeTestInterface() -- { -- } -- virtual void triggerGlobalAutoType() = 0; -- virtual void setActiveWindowTitle(const QString& title) = 0; -- -- virtual QString actionChars() = 0; -- virtual int actionCount() = 0; -- virtual void clearActions() = 0; -- -- virtual QString keyToString(Qt::Key key) = 0; --}; -- --Q_DECLARE_INTERFACE(AutoTypeTestInterface, "org.keepassx.AutoTypeTestInterface/1") -- --#endif // KEEPASSX_AUTOTYPETESTINTERFACE_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/test/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/test/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/autotype/test/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/test/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,4 +0,0 @@ --set(autotype_test_SOURCES AutoTypeTest.cpp) -- --add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) --target_link_libraries(keepassx-autotype-test keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) -diff -urNr keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.cpp keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.cpp ---- keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "WildcardMatcher.h" -- --#include --#include -- --const QChar WildcardMatcher::Wildcard = '*'; --const Qt::CaseSensitivity WildcardMatcher::Sensitivity = Qt::CaseInsensitive; -- --WildcardMatcher::WildcardMatcher(QString text) -- : m_text(std::move(text)) --{ --} -- --bool WildcardMatcher::match(const QString& pattern) --{ -- m_pattern = pattern; -- -- if (patternContainsWildcard()) { -- return matchWithWildcards(); -- } else { -- return patternEqualsText(); -- } --} -- --bool WildcardMatcher::patternContainsWildcard() --{ -- return m_pattern.contains(Wildcard); --} -- --bool WildcardMatcher::patternEqualsText() --{ -- return m_text.compare(m_pattern, Sensitivity) == 0; --} -- --bool WildcardMatcher::matchWithWildcards() --{ -- QStringList parts = m_pattern.split(Wildcard, QString::KeepEmptyParts); -- Q_ASSERT(parts.size() >= 2); -- -- if (startOrEndDoesNotMatch(parts)) { -- return false; -- } -- -- return partsMatch(parts); --} -- --bool WildcardMatcher::startOrEndDoesNotMatch(const QStringList& parts) --{ -- return !m_text.startsWith(parts.first(), Sensitivity) || !m_text.endsWith(parts.last(), Sensitivity); --} -- --bool WildcardMatcher::partsMatch(const QStringList& parts) --{ -- int index = 0; -- for (const QString& part : parts) { -- int matchIndex = getMatchIndex(part, index); -- if (noMatchFound(matchIndex)) { -- return false; -- } -- index = calculateNewIndex(matchIndex, part.length()); -- } -- -- return true; --} -- --int WildcardMatcher::getMatchIndex(const QString& part, int startIndex) --{ -- return m_text.indexOf(part, startIndex, Sensitivity); --} -- --bool WildcardMatcher::noMatchFound(int index) --{ -- return index == -1; --} -- --int WildcardMatcher::calculateNewIndex(int matchIndex, int partLength) --{ -- return matchIndex + partLength; --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.h keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.h ---- keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_WILDCARDMATCHER_H --#define KEEPASSX_WILDCARDMATCHER_H -- --#include -- --class WildcardMatcher --{ --public: -- explicit WildcardMatcher(QString text); -- bool match(const QString& pattern); -- -- static const QChar Wildcard; -- --private: -- bool patternEqualsText(); -- bool patternContainsWildcard(); -- bool matchWithWildcards(); -- bool startOrEndDoesNotMatch(const QStringList& parts); -- bool partsMatch(const QStringList& parts); -- int getMatchIndex(const QString& part, int startIndex); -- bool noMatchFound(int index); -- int calculateNewIndex(int matchIndex, int partLength); -- -- static const Qt::CaseSensitivity Sensitivity; -- const QString m_text; -- QString m_pattern; --}; -- --#endif // KEEPASSX_WILDCARDMATCHER_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.cpp keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.cpp ---- keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,547 +0,0 @@ --/* -- * Copyright (C) 2016 Lennart Glauer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeWindows.h" -- --#include -- --#define HOTKEY_ID 1 --#define MAX_WINDOW_TITLE_LENGTH 1024 -- --#define MOD_NOREPEAT 0x4000 // Missing in MinGW -- --// --// Test if os version is Windows 7 or later --// --bool AutoTypePlatformWin::isAvailable() --{ -- return IsWindows7OrGreater(); --} -- --// --// Get list of all visible window titles --// --QStringList AutoTypePlatformWin::windowTitles() --{ -- QStringList list; -- -- ::EnumWindows(AutoTypePlatformWin::windowTitleEnumProc, reinterpret_cast(&list)); -- -- return list; --} -- --// --// Get foreground window hwnd --// --WId AutoTypePlatformWin::activeWindow() --{ -- return reinterpret_cast(::GetForegroundWindow()); --} -- --// --// Get foreground window title --// --QString AutoTypePlatformWin::activeWindowTitle() --{ -- return windowTitle(::GetForegroundWindow()); --} -- --// --// Register global hotkey --// --bool AutoTypePlatformWin::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- DWORD nativeKeyCode = qtToNativeKeyCode(key); -- if (nativeKeyCode < 1 || nativeKeyCode > 254) { -- return false; -- } -- DWORD nativeModifiers = qtToNativeModifiers(modifiers); -- if (!::RegisterHotKey(nullptr, HOTKEY_ID, nativeModifiers | MOD_NOREPEAT, nativeKeyCode)) { -- return false; -- } -- -- return true; --} -- --// --// Unregister global hotkey --// --void AutoTypePlatformWin::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- Q_UNUSED(key); -- Q_UNUSED(modifiers); -- -- ::UnregisterHotKey(nullptr, HOTKEY_ID); --} -- --// --// Native event filter --// --int AutoTypePlatformWin::platformEventFilter(void* event) --{ -- MSG* msg = static_cast(event); -- -- if (msg->message == WM_HOTKEY && msg->wParam == HOTKEY_ID) { -- emit globalShortcutTriggered(); -- return 1; -- } -- -- return -1; --} -- --AutoTypeExecutor* AutoTypePlatformWin::createExecutor() --{ -- return new AutoTypeExecutorWin(this); --} -- --// --// Set foreground window --// --bool AutoTypePlatformWin::raiseWindow(WId window) --{ -- HWND hwnd = reinterpret_cast(window); -- -- return ::BringWindowToTop(hwnd) && ::SetForegroundWindow(hwnd); --} -- --// --// Send unicode character to foreground window --// --void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) --{ -- DWORD nativeFlags = KEYEVENTF_UNICODE; -- if (!isKeyDown) { -- nativeFlags |= KEYEVENTF_KEYUP; -- } -- -- INPUT in; -- in.type = INPUT_KEYBOARD; -- in.ki.wVk = 0; -- in.ki.wScan = ch.unicode(); -- in.ki.dwFlags = nativeFlags; -- in.ki.time = 0; -- in.ki.dwExtraInfo = ::GetMessageExtraInfo(); -- -- ::SendInput(1, &in, sizeof(INPUT)); --} -- --// --// Send virtual key code to foreground window --// --void AutoTypePlatformWin::sendKey(Qt::Key key, bool isKeyDown) --{ -- DWORD nativeKeyCode = qtToNativeKeyCode(key); -- if (nativeKeyCode < 1 || nativeKeyCode > 254) { -- return; -- } -- DWORD nativeFlags = 0; -- if (isExtendedKey(nativeKeyCode)) { -- nativeFlags |= KEYEVENTF_EXTENDEDKEY; -- } -- if (!isKeyDown) { -- nativeFlags |= KEYEVENTF_KEYUP; -- } -- -- INPUT in; -- in.type = INPUT_KEYBOARD; -- in.ki.wVk = LOWORD(nativeKeyCode); -- in.ki.wScan = LOWORD(::MapVirtualKeyW(nativeKeyCode, MAPVK_VK_TO_VSC)); -- in.ki.dwFlags = nativeFlags; -- in.ki.time = 0; -- in.ki.dwExtraInfo = ::GetMessageExtraInfo(); -- -- ::SendInput(1, &in, sizeof(INPUT)); --} -- --// clang-format off --// --// Translate qt key code to windows virtual key code --// see: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx --// --DWORD AutoTypePlatformWin::qtToNativeKeyCode(Qt::Key key) --{ -- switch (key) { -- case Qt::Key_Backspace: -- return VK_BACK; // 0x08 -- case Qt::Key_Tab: -- case Qt::Key_Backtab: -- return VK_TAB; // 0x09 -- case Qt::Key_Clear: -- return VK_CLEAR; // 0x0C -- case Qt::Key_Enter: -- case Qt::Key_Return: -- return VK_RETURN; // 0x0D -- case Qt::Key_Shift: -- return VK_SHIFT; // 0x10 -- case Qt::Key_Control: -- return VK_CONTROL; // 0x11 -- case Qt::Key_Pause: -- return VK_PAUSE; // 0x13 -- case Qt::Key_CapsLock: -- return VK_CAPITAL; // 0x14 -- case Qt::Key_Escape: -- return VK_ESCAPE; // 0x1B -- case Qt::Key_Space: -- return VK_SPACE; // 0x20 -- case Qt::Key_PageUp: -- return VK_PRIOR; // 0x21 -- case Qt::Key_PageDown: -- return VK_NEXT; // 0x22 -- case Qt::Key_End: -- return VK_END; // 0x23 -- case Qt::Key_Home: -- return VK_HOME; // 0x24 -- case Qt::Key_Left: -- return VK_LEFT; // 0x25 -- case Qt::Key_Up: -- return VK_UP; // 0x26 -- case Qt::Key_Right: -- return VK_RIGHT; // 0x27 -- case Qt::Key_Down: -- return VK_DOWN; // 0x28 -- case Qt::Key_Print: -- return VK_SNAPSHOT; // 0x2C -- case Qt::Key_Insert: -- return VK_INSERT; // 0x2D -- case Qt::Key_Delete: -- return VK_DELETE; // 0x2E -- case Qt::Key_Help: -- return VK_HELP; // 0x2F -- -- case Qt::Key_0: -- return 0x30; // 0x30 -- case Qt::Key_1: -- return 0x31; // 0x31 -- case Qt::Key_2: -- return 0x32; // 0x32 -- case Qt::Key_3: -- return 0x33; // 0x33 -- case Qt::Key_4: -- return 0x34; // 0x34 -- case Qt::Key_5: -- return 0x35; // 0x35 -- case Qt::Key_6: -- return 0x36; // 0x36 -- case Qt::Key_7: -- return 0x37; // 0x37 -- case Qt::Key_8: -- return 0x38; // 0x38 -- case Qt::Key_9: -- return 0x39; // 0x39 -- -- case Qt::Key_A: -- return 0x41; // 0x41 -- case Qt::Key_B: -- return 0x42; // 0x42 -- case Qt::Key_C: -- return 0x43; // 0x43 -- case Qt::Key_D: -- return 0x44; // 0x44 -- case Qt::Key_E: -- return 0x45; // 0x45 -- case Qt::Key_F: -- return 0x46; // 0x46 -- case Qt::Key_G: -- return 0x47; // 0x47 -- case Qt::Key_H: -- return 0x48; // 0x48 -- case Qt::Key_I: -- return 0x49; // 0x49 -- case Qt::Key_J: -- return 0x4A; // 0x4A -- case Qt::Key_K: -- return 0x4B; // 0x4B -- case Qt::Key_L: -- return 0x4C; // 0x4C -- case Qt::Key_M: -- return 0x4D; // 0x4D -- case Qt::Key_N: -- return 0x4E; // 0x4E -- case Qt::Key_O: -- return 0x4F; // 0x4F -- case Qt::Key_P: -- return 0x50; // 0x50 -- case Qt::Key_Q: -- return 0x51; // 0x51 -- case Qt::Key_R: -- return 0x52; // 0x52 -- case Qt::Key_S: -- return 0x53; // 0x53 -- case Qt::Key_T: -- return 0x54; // 0x54 -- case Qt::Key_U: -- return 0x55; // 0x55 -- case Qt::Key_V: -- return 0x56; // 0x56 -- case Qt::Key_W: -- return 0x57; // 0x57 -- case Qt::Key_X: -- return 0x58; // 0x58 -- case Qt::Key_Y: -- return 0x59; // 0x59 -- case Qt::Key_Z: -- return 0x5A; // 0x5A -- -- case Qt::Key_F1: -- return VK_F1; // 0x70 -- case Qt::Key_F2: -- return VK_F2; // 0x71 -- case Qt::Key_F3: -- return VK_F3; // 0x72 -- case Qt::Key_F4: -- return VK_F4; // 0x73 -- case Qt::Key_F5: -- return VK_F5; // 0x74 -- case Qt::Key_F6: -- return VK_F6; // 0x75 -- case Qt::Key_F7: -- return VK_F7; // 0x76 -- case Qt::Key_F8: -- return VK_F8; // 0x77 -- case Qt::Key_F9: -- return VK_F9; // 0x78 -- case Qt::Key_F10: -- return VK_F10; // 0x79 -- case Qt::Key_F11: -- return VK_F11; // 0x7A -- case Qt::Key_F12: -- return VK_F12; // 0x7B -- case Qt::Key_F13: -- return VK_F13; // 0x7C -- case Qt::Key_F14: -- return VK_F14; // 0x7D -- case Qt::Key_F15: -- return VK_F15; // 0x7E -- case Qt::Key_F16: -- return VK_F16; // 0x7F -- case Qt::Key_F17: -- return VK_F17; // 0x80 -- case Qt::Key_F18: -- return VK_F18; // 0x81 -- case Qt::Key_F19: -- return VK_F19; // 0x82 -- case Qt::Key_F20: -- return VK_F20; // 0x83 -- case Qt::Key_F21: -- return VK_F21; // 0x84 -- case Qt::Key_F22: -- return VK_F22; // 0x85 -- case Qt::Key_F23: -- return VK_F23; // 0x86 -- case Qt::Key_F24: -- return VK_F24; // 0x87 -- -- case Qt::Key_NumLock: -- return VK_NUMLOCK; // 0x90 -- case Qt::Key_ScrollLock: -- return VK_SCROLL; // 0x91 -- -- case Qt::Key_Exclam: // ! -- case Qt::Key_QuoteDbl: // " -- case Qt::Key_NumberSign: // # -- case Qt::Key_Dollar: // $ -- case Qt::Key_Percent: // % -- case Qt::Key_Ampersand: // & -- case Qt::Key_Apostrophe: // ' -- case Qt::Key_ParenLeft: // ( -- case Qt::Key_ParenRight: // ) -- case Qt::Key_Asterisk: // * -- case Qt::Key_Plus: // + -- case Qt::Key_Comma: // , -- case Qt::Key_Minus: // - -- case Qt::Key_Period: // . -- case Qt::Key_Slash: // / -- case Qt::Key_Colon: // : -- case Qt::Key_Semicolon: // ; -- case Qt::Key_Less: // < -- case Qt::Key_Equal: // = -- case Qt::Key_Greater: // > -- case Qt::Key_Question: // ? -- case Qt::Key_BracketLeft: // [ -- case Qt::Key_Backslash: // '\' -- case Qt::Key_BracketRight: // ] -- case Qt::Key_AsciiCircum: // ^ -- case Qt::Key_Underscore: // _ -- case Qt::Key_QuoteLeft: // ` -- case Qt::Key_BraceLeft: // { -- case Qt::Key_Bar: // | -- case Qt::Key_BraceRight: // } -- case Qt::Key_AsciiTilde: // ~ -- return LOBYTE(::VkKeyScanExW(key, ::GetKeyboardLayout(0))); -- -- default: -- Q_ASSERT(false); -- return 0; -- } --} -- --// --// The extended-key flag indicates whether the keystroke message originated --// from one of the additional keys on the enhanced keyboard --// see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267%28v=vs.85%29.aspx#EXTENDED_KEY_FLAG --// --BOOL AutoTypePlatformWin::isExtendedKey(DWORD nativeKeyCode) --{ -- switch (nativeKeyCode) { -- case VK_RMENU: -- case VK_RCONTROL: -- case VK_INSERT: -- case VK_DELETE: -- case VK_HOME: -- case VK_END: -- case VK_PRIOR: -- case VK_NEXT: -- case VK_LEFT: -- case VK_UP: -- case VK_RIGHT: -- case VK_DOWN: -- case VK_NUMLOCK: -- case VK_CANCEL: -- case VK_SNAPSHOT: -- case VK_DIVIDE: -- case VK_LWIN: -- case VK_RWIN: -- case VK_APPS: -- return TRUE; -- default: -- return FALSE; -- } --} --// clang-format on -- --// --// Translate qt key modifiers to windows modifiers --// --DWORD AutoTypePlatformWin::qtToNativeModifiers(Qt::KeyboardModifiers modifiers) --{ -- DWORD nativeModifiers = 0; -- -- if (modifiers & Qt::ShiftModifier) { -- nativeModifiers |= MOD_SHIFT; -- } -- if (modifiers & Qt::ControlModifier) { -- nativeModifiers |= MOD_CONTROL; -- } -- if (modifiers & Qt::AltModifier) { -- nativeModifiers |= MOD_ALT; -- } -- if (modifiers & Qt::MetaModifier) { -- nativeModifiers |= MOD_WIN; -- } -- -- return nativeModifiers; --} -- --// --// Test if window is in Alt+Tab list --// see: https://blogs.msdn.microsoft.com/oldnewthing/20071008-00/?p=24863 --// --BOOL AutoTypePlatformWin::isAltTabWindow(HWND hwnd) --{ -- if (!::IsWindowVisible(hwnd)) { -- return FALSE; -- } -- -- // Start at the root owner -- HWND hwndWalk = ::GetAncestor(hwnd, GA_ROOTOWNER); -- HWND hwndTry; -- -- // See if we are the last active visible popup -- while ((hwndTry = ::GetLastActivePopup(hwndWalk)) != hwndWalk) { -- if (::IsWindowVisible(hwndTry)) { -- break; -- } -- hwndWalk = hwndTry; -- } -- -- return hwndWalk == hwnd; --} -- --// --// Window title enum proc --// --BOOL CALLBACK AutoTypePlatformWin::windowTitleEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam) --{ -- if (!isAltTabWindow(hwnd)) { -- // Skip window -- return TRUE; -- } -- -- QStringList* list = reinterpret_cast(lParam); -- QString title = windowTitle(hwnd); -- -- if (!title.isEmpty()) { -- list->append(title); -- } -- -- return TRUE; --} -- --// --// Get window title --// --QString AutoTypePlatformWin::windowTitle(HWND hwnd) --{ -- wchar_t title[MAX_WINDOW_TITLE_LENGTH]; -- int count = ::GetWindowTextW(hwnd, title, MAX_WINDOW_TITLE_LENGTH); -- -- return QString::fromUtf16(reinterpret_cast(title), count); --} -- --// --// ------------------------------ AutoTypeExecutorWin ------------------------------ --// -- --AutoTypeExecutorWin::AutoTypeExecutorWin(AutoTypePlatformWin* platform) -- : m_platform(platform) --{ --} -- --void AutoTypeExecutorWin::execChar(AutoTypeChar* action) --{ -- m_platform->sendChar(action->character, true); -- m_platform->sendChar(action->character, false); --} -- --void AutoTypeExecutorWin::execKey(AutoTypeKey* action) --{ -- m_platform->sendKey(action->key, true); -- m_platform->sendKey(action->key, false); --} -- --void AutoTypeExecutorWin::execClearField(AutoTypeClearField* action = nullptr) --{ -- Q_UNUSED(action); -- -- m_platform->sendKey(Qt::Key_Control, true); -- m_platform->sendKey(Qt::Key_Home, true); -- m_platform->sendKey(Qt::Key_Home, false); -- m_platform->sendKey(Qt::Key_Control, false); -- ::Sleep(25); -- m_platform->sendKey(Qt::Key_Control, true); -- m_platform->sendKey(Qt::Key_Shift, true); -- m_platform->sendKey(Qt::Key_End, true); -- m_platform->sendKey(Qt::Key_End, false); -- m_platform->sendKey(Qt::Key_Shift, false); -- m_platform->sendKey(Qt::Key_Control, false); -- ::Sleep(25); -- m_platform->sendKey(Qt::Key_Backspace, true); -- m_platform->sendKey(Qt::Key_Backspace, false); -- -- ::Sleep(25); --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.h keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.h ---- keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,73 +0,0 @@ --/* -- * Copyright (C) 2016 Lennart Glauer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEWINDOWS_H --#define KEEPASSX_AUTOTYPEWINDOWS_H -- --#include --#include -- --#include "autotype/AutoTypeAction.h" --#include "autotype/AutoTypePlatformPlugin.h" -- --class AutoTypePlatformWin : public QObject, public AutoTypePlatformInterface --{ -- Q_OBJECT -- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformWindows") -- Q_INTERFACES(AutoTypePlatformInterface) -- --public: -- bool isAvailable() override; -- QStringList windowTitles() override; -- WId activeWindow() override; -- QString activeWindowTitle() override; -- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- int platformEventFilter(void* event) override; -- bool raiseWindow(WId window) override; -- AutoTypeExecutor* createExecutor() override; -- -- void sendChar(const QChar& ch, bool isKeyDown); -- void sendKey(Qt::Key key, bool isKeyDown); -- --signals: -- void globalShortcutTriggered(); -- --private: -- static DWORD qtToNativeKeyCode(Qt::Key key); -- static DWORD qtToNativeModifiers(Qt::KeyboardModifiers modifiers); -- static BOOL isExtendedKey(DWORD nativeKeyCode); -- static BOOL isAltTabWindow(HWND hwnd); -- static BOOL CALLBACK windowTitleEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam); -- static QString windowTitle(HWND hwnd); --}; -- --class AutoTypeExecutorWin : public AutoTypeExecutor --{ --public: -- explicit AutoTypeExecutorWin(AutoTypePlatformWin* platform); -- -- void execChar(AutoTypeChar* action) override; -- void execKey(AutoTypeKey* action) override; -- void execClearField(AutoTypeClearField* action) override; -- --private: -- AutoTypePlatformWin* const m_platform; --}; -- --#endif // KEEPASSX_AUTOTYPEWINDOWS_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/windows/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/autotype/windows/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/windows/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,7 +0,0 @@ --set(autotype_win_SOURCES AutoTypeWindows.cpp) -- --add_library(keepassx-autotype-windows MODULE ${autotype_win_SOURCES}) --target_link_libraries(keepassx-autotype-windows keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) --install(TARGETS keepassx-autotype-windows -- BUNDLE DESTINATION . COMPONENT Runtime -- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) -diff -urNr keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.cpp keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.cpp ---- keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,68 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "WindowSelectComboBox.h" -- --#include -- --#include "autotype/AutoType.h" -- --WindowSelectComboBox::WindowSelectComboBox(QWidget* parent) -- : QComboBox(parent) --{ -- setEditable(true); -- setInsertPolicy(QComboBox::NoInsert); -- setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, QSizePolicy::ComboBox)); -- -- // first item is always the current content of the line edit -- insertItem(0, ""); --} -- --void WindowSelectComboBox::refreshWindowList() --{ -- model()->setData(model()->index(0, 0), lineEdit()->text()); -- -- while (count() > 1) { -- removeItem(1); -- } -- insertItems(1, autoType()->windowTitles()); --} -- --void WindowSelectComboBox::showPopup() --{ -- if (lineEdit()->isReadOnly()) { -- return; -- } -- -- refreshWindowList(); -- -- QComboBox::showPopup(); --} -- --QSize WindowSelectComboBox::sizeHint() const --{ -- QSize size = lineEdit()->sizeHint(); -- size.setHeight(qMax(size.height(), QComboBox::sizeHint().height())); -- return size; --} -- --QSize WindowSelectComboBox::minimumSizeHint() const --{ -- QSize size = lineEdit()->minimumSizeHint(); -- size.setHeight(qMax(size.height(), QComboBox::minimumSizeHint().height())); -- return size; --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.h keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.h ---- keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_WINDOWSELECTCOMBOBOX_H --#define KEEPASSX_WINDOWSELECTCOMBOBOX_H -- --#include -- --class WindowSelectComboBox : public QComboBox --{ -- Q_OBJECT -- --public: -- explicit WindowSelectComboBox(QWidget* parent = nullptr); -- void refreshWindowList(); -- -- void showPopup() override; -- QSize sizeHint() const override; -- QSize minimumSizeHint() const override; --}; -- --#endif // KEEPASSX_WINDOWSELECTCOMBOBOX_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.cpp keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.cpp ---- keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,856 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2000-2008 Tom Sato -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeXCB.h" --#include "KeySymMap.h" --#include "core/Tools.h" -- --#include --#include -- --bool AutoTypePlatformX11::m_catchXErrors = false; --bool AutoTypePlatformX11::m_xErrorOccurred = false; --int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = nullptr; -- --AutoTypePlatformX11::AutoTypePlatformX11() --{ -- m_dpy = QX11Info::display(); -- m_rootWindow = QX11Info::appRootWindow(); -- -- m_atomWmState = XInternAtom(m_dpy, "WM_STATE", True); -- m_atomWmName = XInternAtom(m_dpy, "WM_NAME", True); -- m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", True); -- m_atomString = XInternAtom(m_dpy, "STRING", True); -- m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True); -- m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True); -- -- m_classBlacklist << "desktop_window" -- << "gnome-panel"; // Gnome -- m_classBlacklist << "kdesktop" -- << "kicker"; // KDE 3 -- m_classBlacklist << "Plasma"; // KDE 4 -- m_classBlacklist << "plasmashell"; // KDE 5 -- m_classBlacklist << "xfdesktop" -- << "xfce4-panel"; // Xfce 4 -- -- m_currentGlobalKey = static_cast(0); -- m_currentGlobalModifiers = nullptr; -- -- m_keysymTable = nullptr; -- m_xkb = nullptr; -- m_remapKeycode = 0; -- m_currentRemapKeysym = NoSymbol; -- m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask; -- -- m_loaded = true; -- -- updateKeymap(); --} -- --bool AutoTypePlatformX11::isAvailable() --{ -- int ignore; -- -- if (!XQueryExtension(m_dpy, "XInputExtension", &ignore, &ignore, &ignore)) { -- return false; -- } -- -- if (!XQueryExtension(m_dpy, "XTEST", &ignore, &ignore, &ignore)) { -- return false; -- } -- -- if (!m_xkb) { -- XkbDescPtr kbd = getKeyboard(); -- -- if (!kbd) { -- return false; -- } -- -- XkbFreeKeyboard(kbd, XkbAllComponentsMask, True); -- } -- -- return true; --} -- --void AutoTypePlatformX11::unload() --{ -- // Restore the KeyboardMapping to its original state. -- if (m_currentRemapKeysym != NoSymbol) { -- AddKeysym(NoSymbol); -- } -- -- if (m_keysymTable) { -- XFree(m_keysymTable); -- } -- -- if (m_xkb) { -- XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); -- } -- -- m_loaded = false; --} -- --QStringList AutoTypePlatformX11::windowTitles() --{ -- return windowTitlesRecursive(m_rootWindow); --} -- --WId AutoTypePlatformX11::activeWindow() --{ -- Window window; -- int revert_to_return; -- XGetInputFocus(m_dpy, &window, &revert_to_return); -- -- int tree; -- do { -- if (isTopLevelWindow(window)) { -- break; -- } -- -- Window root; -- Window parent; -- Window* children = nullptr; -- unsigned int numChildren; -- tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren); -- window = parent; -- if (children) { -- XFree(children); -- } -- } while (tree && window); -- -- return window; --} -- --QString AutoTypePlatformX11::activeWindowTitle() --{ -- return windowTitle(activeWindow(), true); --} -- --bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- int keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); -- uint nativeModifiers = qtToNativeModifiers(modifiers); -- -- startCatchXErrors(); -- XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync); -- XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); -- XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); -- XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); -- stopCatchXErrors(); -- -- if (!m_xErrorOccurred) { -- m_currentGlobalKey = key; -- m_currentGlobalModifiers = modifiers; -- m_currentGlobalKeycode = keycode; -- m_currentGlobalNativeModifiers = nativeModifiers; -- return true; -- } else { -- unregisterGlobalShortcut(key, modifiers); -- return false; -- } --} -- --uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers) --{ -- uint nativeModifiers = 0; -- -- if (modifiers & Qt::ShiftModifier) { -- nativeModifiers |= ShiftMask; -- } -- if (modifiers & Qt::ControlModifier) { -- nativeModifiers |= ControlMask; -- } -- if (modifiers & Qt::AltModifier) { -- nativeModifiers |= Mod1Mask; -- } -- if (modifiers & Qt::MetaModifier) { -- nativeModifiers |= Mod4Mask; -- } -- -- return nativeModifiers; --} -- --void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) --{ -- KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); -- uint nativeModifiers = qtToNativeModifiers(modifiers); -- -- XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow); -- XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow); -- XUngrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow); -- XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow); -- -- m_currentGlobalKey = static_cast(0); -- m_currentGlobalModifiers = nullptr; -- m_currentGlobalKeycode = 0; -- m_currentGlobalNativeModifiers = 0; --} -- --int AutoTypePlatformX11::platformEventFilter(void* event) --{ -- xcb_generic_event_t* genericEvent = static_cast(event); -- quint8 type = genericEvent->response_type & 0x7f; -- -- if (type == XCB_KEY_PRESS || type == XCB_KEY_RELEASE) { -- xcb_key_press_event_t* keyPressEvent = static_cast(event); -- if (keyPressEvent->detail == m_currentGlobalKeycode -- && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers -- && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) && m_loaded) { -- if (type == XCB_KEY_PRESS) { -- emit globalShortcutTriggered(); -- } -- -- return 1; -- } -- } else if (type == XCB_MAPPING_NOTIFY) { -- xcb_mapping_notify_event_t* mappingNotifyEvent = static_cast(event); -- if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD -- || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER) { -- XMappingEvent xMappingEvent; -- memset(&xMappingEvent, 0, sizeof(xMappingEvent)); -- xMappingEvent.type = MappingNotify; -- xMappingEvent.display = m_dpy; -- if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD) { -- xMappingEvent.request = MappingKeyboard; -- } else { -- xMappingEvent.request = MappingModifier; -- } -- xMappingEvent.first_keycode = mappingNotifyEvent->first_keycode; -- xMappingEvent.count = mappingNotifyEvent->count; -- XRefreshKeyboardMapping(&xMappingEvent); -- updateKeymap(); -- } -- } -- -- return -1; --} -- --AutoTypeExecutor* AutoTypePlatformX11::createExecutor() --{ -- return new AutoTypeExecutorX11(this); --} -- --QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) --{ -- QString title; -- -- Atom type; -- int format; -- unsigned long nitems; -- unsigned long after; -- unsigned char* data = nullptr; -- -- // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME -- -- int retVal = XGetWindowProperty( -- m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String, &type, &format, &nitems, &after, &data); -- -- if ((retVal == 0) && data) { -- title = QString::fromUtf8(reinterpret_cast(data)); -- } else { -- XTextProperty textProp; -- retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName); -- if ((retVal != 0) && textProp.value) { -- char** textList = nullptr; -- int count; -- -- if (textProp.encoding == m_atomUtf8String) { -- title = QString::fromUtf8(reinterpret_cast(textProp.value)); -- } else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0) && textList -- && (count > 0)) { -- title = QString::fromLocal8Bit(textList[0]); -- } else if (textProp.encoding == m_atomString) { -- title = QString::fromLocal8Bit(reinterpret_cast(textProp.value)); -- } -- -- if (textList) { -- XFreeStringList(textList); -- } -- } -- -- if (textProp.value) { -- XFree(textProp.value); -- } -- } -- -- if (data) { -- XFree(data); -- } -- -- if (useBlacklist && !title.isEmpty()) { -- if (window == m_rootWindow) { -- return QString(); -- } -- -- QString className = windowClassName(window); -- if (m_classBlacklist.contains(className)) { -- return QString(); -- } -- -- QList keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets()); -- if (keepassxWindows.contains(window)) { -- return QString(); -- } -- } -- -- return title; --} -- --QString AutoTypePlatformX11::windowClassName(Window window) --{ -- QString className; -- -- XClassHint wmClass; -- wmClass.res_name = nullptr; -- wmClass.res_class = nullptr; -- -- if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) { -- className = QString::fromLocal8Bit(wmClass.res_name); -- } -- if (wmClass.res_name) { -- XFree(wmClass.res_name); -- } -- if (wmClass.res_class) { -- XFree(wmClass.res_class); -- } -- -- return className; --} -- --QList AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widgetList) --{ -- QList windows; -- -- for (const QWidget* widget : widgetList) { -- windows.append(widget->effectiveWinId()); -- } -- -- return windows; --} -- --QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window) --{ -- QStringList titles; -- -- if (isTopLevelWindow(window)) { -- QString title = windowTitle(window, true); -- if (!title.isEmpty()) { -- titles.append(title); -- } -- } -- -- Window root; -- Window parent; -- Window* children = nullptr; -- unsigned int numChildren; -- if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) { -- for (uint i = 0; i < numChildren; i++) { -- titles.append(windowTitlesRecursive(children[i])); -- } -- } -- if (children) { -- XFree(children); -- } -- -- return titles; --} -- --bool AutoTypePlatformX11::isTopLevelWindow(Window window) --{ -- Atom type = None; -- int format; -- unsigned long nitems; -- unsigned long after; -- unsigned char* data = Q_NULLPTR; -- int retVal = XGetWindowProperty( -- m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, &nitems, &after, &data); -- -- bool result = false; -- -- if (retVal == 0 && data) { -- if (type == m_atomWmState && format == 32 && nitems > 0) { -- qint32 state = static_cast(*data); -- result = (state != WithdrawnState); -- } -- -- XFree(data); -- } -- -- return result; --} -- --KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch) --{ -- ushort unicode = ch.unicode(); -- -- /* first check for Latin-1 characters (1:1 mapping) */ -- if ((unicode >= 0x0020 && unicode <= 0x007e) || (unicode >= 0x00a0 && unicode <= 0x00ff)) { -- return unicode; -- } -- -- /* mapping table generated from keysymdef.h */ -- const uint* match = Tools::binaryFind(m_unicodeToKeysymKeys, m_unicodeToKeysymKeys + m_unicodeToKeysymLen, unicode); -- int index = match - m_unicodeToKeysymKeys; -- if (index != m_unicodeToKeysymLen) { -- return m_unicodeToKeysymValues[index]; -- } -- -- if (unicode >= 0x0100) { -- return unicode | 0x01000000; -- } -- -- return NoSymbol; --} -- --KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key) --{ -- switch (key) { -- case Qt::Key_Tab: -- return XK_Tab; -- case Qt::Key_Enter: -- return XK_Return; -- case Qt::Key_Space: -- return XK_space; -- case Qt::Key_Up: -- return XK_Up; -- case Qt::Key_Down: -- return XK_Down; -- case Qt::Key_Left: -- return XK_Left; -- case Qt::Key_Right: -- return XK_Right; -- case Qt::Key_Insert: -- return XK_Insert; -- case Qt::Key_Delete: -- return XK_Delete; -- case Qt::Key_Home: -- return XK_Home; -- case Qt::Key_End: -- return XK_End; -- case Qt::Key_PageUp: -- return XK_Page_Up; -- case Qt::Key_PageDown: -- return XK_Page_Down; -- case Qt::Key_Backspace: -- return XK_BackSpace; -- case Qt::Key_Pause: -- return XK_Break; -- case Qt::Key_CapsLock: -- return XK_Caps_Lock; -- case Qt::Key_Escape: -- return XK_Escape; -- case Qt::Key_Help: -- return XK_Help; -- case Qt::Key_NumLock: -- return XK_Num_Lock; -- case Qt::Key_Print: -- return XK_Print; -- case Qt::Key_ScrollLock: -- return XK_Scroll_Lock; -- case Qt::Key_Shift: -- return XK_Shift_L; -- case Qt::Key_Control: -- return XK_Control_L; -- case Qt::Key_Alt: -- return XK_Alt_L; -- default: -- if (key >= Qt::Key_F1 && key <= Qt::Key_F16) { -- return XK_F1 + (key - Qt::Key_F1); -- } else { -- return NoSymbol; -- } -- } --} -- --/* -- * Update the keyboard and modifier mapping. -- * We need the KeyboardMapping for AddKeysym. -- * Modifier mapping is required for clearing the modifiers. -- */ --void AutoTypePlatformX11::updateKeymap() --{ -- if (m_xkb) { -- XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); -- } -- m_xkb = getKeyboard(); -- -- XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode); -- if (m_keysymTable != nullptr) -- XFree(m_keysymTable); -- m_keysymTable = XGetKeyboardMapping(m_dpy, m_minKeycode, m_maxKeycode - m_minKeycode + 1, &m_keysymPerKeycode); -- -- /* determine the keycode to use for remapped keys */ -- if (m_remapKeycode == 0 || !isRemapKeycodeValid()) { -- for (int keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) { -- int inx = (keycode - m_minKeycode) * m_keysymPerKeycode; -- if (m_keysymTable[inx] == NoSymbol) { -- m_remapKeycode = keycode; -- m_currentRemapKeysym = NoSymbol; -- break; -- } -- } -- } -- -- /* determine the keycode to use for modifiers */ -- XModifierKeymap* modifiers = XGetModifierMapping(m_dpy); -- for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { -- m_modifier_keycode[mod_index] = 0; -- for (int mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) { -- int keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key]; -- if (keycode) { -- m_modifier_keycode[mod_index] = keycode; -- break; -- } -- } -- } -- XFreeModifiermap(modifiers); -- -- /* Xlib needs some time until the mapping is distributed to -- all clients */ -- // TODO: we should probably only sleep while in the middle of typing something -- timespec ts; -- ts.tv_sec = 0; -- ts.tv_nsec = 30 * 1000 * 1000; -- nanosleep(&ts, nullptr); --} -- --bool AutoTypePlatformX11::isRemapKeycodeValid() --{ -- int baseKeycode = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; -- for (int i = 0; i < m_keysymPerKeycode; i++) { -- if (m_keysymTable[baseKeycode + i] == m_currentRemapKeysym) { -- return true; -- } -- } -- -- return false; --} -- --void AutoTypePlatformX11::startCatchXErrors() --{ -- Q_ASSERT(!m_catchXErrors); -- -- m_catchXErrors = true; -- m_xErrorOccurred = false; -- m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler); --} -- --void AutoTypePlatformX11::stopCatchXErrors() --{ -- Q_ASSERT(m_catchXErrors); -- -- XSync(m_dpy, False); -- XSetErrorHandler(m_oldXErrorHandler); -- m_catchXErrors = false; --} -- --int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error) --{ -- Q_UNUSED(display) -- Q_UNUSED(error) -- -- if (m_catchXErrors) { -- m_xErrorOccurred = true; -- } -- -- return 1; --} -- --XkbDescPtr AutoTypePlatformX11::getKeyboard() --{ -- int num_devices; -- XID keyboard_id = XkbUseCoreKbd; -- XDeviceInfo* devices = XListInputDevices(m_dpy, &num_devices); -- if (!devices) { -- return nullptr; -- } -- -- for (int i = 0; i < num_devices; i++) { -- if (QString(devices[i].name) == "Virtual core XTEST keyboard") { -- keyboard_id = devices[i].id; -- break; -- } -- } -- -- XFreeDeviceList(devices); -- -- return XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id); --} -- --// -------------------------------------------------------------------------- --// The following code is taken from xvkbd 3.0 and has been slightly modified. --// -------------------------------------------------------------------------- -- --/* -- * Insert a specified keysym on the dedicated position in the keymap -- * table. -- */ --int AutoTypePlatformX11::AddKeysym(KeySym keysym) --{ -- if (m_remapKeycode == 0) { -- return 0; -- } -- -- int inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; -- m_keysymTable[inx] = keysym; -- m_currentRemapKeysym = keysym; -- -- XChangeKeyboardMapping(m_dpy, m_remapKeycode, m_keysymPerKeycode, &m_keysymTable[inx], 1); -- XFlush(m_dpy); -- updateKeymap(); -- -- return m_remapKeycode; --} -- --/* -- * Send event to the focused window. -- * If input focus is specified explicitly, select the window -- * before send event to the window. -- */ --void AutoTypePlatformX11::SendKeyEvent(unsigned keycode, bool press) --{ -- XSync(m_dpy, False); -- int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler); -- -- XTestFakeKeyEvent(m_dpy, keycode, press, 0); -- XFlush(m_dpy); -- -- XSetErrorHandler(oldHandler); --} -- --/* -- * Send a modifier press/release event for all modifiers -- * which are set in the mask variable. -- */ --void AutoTypePlatformX11::SendModifiers(unsigned int mask, bool press) --{ -- int mod_index; -- for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { -- if (mask & (1 << mod_index)) { -- SendKeyEvent(m_modifier_keycode[mod_index], press); -- } -- } --} -- --/* -- * Determines the keycode and modifier mask for the given -- * keysym. -- */ --int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int* mask) --{ -- int keycode = XKeysymToKeycode(m_dpy, keysym); -- -- if (keycode && keysymModifiers(keysym, keycode, mask)) { -- return keycode; -- } -- -- /* no modifier matches => resort to remapping */ -- keycode = AddKeysym(keysym); -- if (keycode && keysymModifiers(keysym, keycode, mask)) { -- return keycode; -- } -- -- *mask = 0; -- return 0; --} -- --bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int* mask) --{ -- int shift, mod; -- unsigned int mods_rtrn; -- -- /* determine whether there is a combination of the modifiers -- (Mod1-Mod5) with or without shift which returns keysym */ -- for (shift = 0; shift < 2; shift++) { -- for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod++) { -- KeySym keysym_rtrn; -- *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod); -- XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn); -- if (keysym_rtrn == keysym) { -- return true; -- } -- } -- } -- -- return false; --} -- --/* -- * Send sequence of KeyPressed/KeyReleased events to the focused -- * window to simulate keyboard. If modifiers (shift, control, etc) -- * are set ON, many events will be sent. -- */ --void AutoTypePlatformX11::SendKey(KeySym keysym, unsigned int modifiers) --{ -- if (keysym == NoSymbol) { -- qWarning("No such key: keysym=0x%lX", keysym); -- return; -- } -- -- int keycode; -- unsigned int wanted_mask; -- -- /* determine keycode and mask for the given keysym */ -- keycode = GetKeycode(keysym, &wanted_mask); -- if (keycode < 8 || keycode > 255) { -- qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym); -- return; -- } -- wanted_mask |= modifiers; -- -- Window root, child; -- int root_x, root_y, x, y; -- unsigned int original_mask; -- -- XSync(m_dpy, False); -- XQueryPointer(m_dpy, m_rootWindow, &root, &child, &root_x, &root_y, &x, &y, &original_mask); -- -- // modifiers that need to be pressed but aren't -- unsigned int press_mask = wanted_mask & ~original_mask; -- -- // modifiers that are pressed but maybe shouldn't -- unsigned int release_check_mask = original_mask & ~wanted_mask; -- -- // modifiers we need to release before sending the keycode -- unsigned int release_mask = 0; -- -- if (!modifiers) { -- // check every release_check_mask individually if it affects the keysym we would generate -- // if it doesn't we probably don't need to release it -- for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { -- if (release_check_mask & (1 << mod_index)) { -- unsigned int mods_rtrn; -- KeySym keysym_rtrn; -- XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn); -- -- if (keysym_rtrn != keysym) { -- release_mask |= (1 << mod_index); -- } -- } -- } -- -- // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym -- unsigned int mods_rtrn; -- KeySym keysym_rtrn; -- XkbTranslateKeyCode( -- m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn); -- if (keysym_rtrn != keysym) { -- // oh well, release all the modifiers we don't want -- release_mask = release_check_mask; -- } -- } else { -- release_mask = release_check_mask; -- } -- -- /* set modifiers mask */ -- if ((release_mask | press_mask) & LockMask) { -- SendModifiers(LockMask, true); -- SendModifiers(LockMask, false); -- } -- SendModifiers(release_mask & ~LockMask, false); -- SendModifiers(press_mask & ~LockMask, true); -- -- /* press and release release key */ -- SendKeyEvent(keycode, true); -- SendKeyEvent(keycode, false); -- -- /* restore previous modifiers mask */ -- SendModifiers(press_mask & ~LockMask, false); -- SendModifiers(release_mask & ~LockMask, true); -- if ((release_mask | press_mask) & LockMask) { -- SendModifiers(LockMask, true); -- SendModifiers(LockMask, false); -- } --} -- --int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event) --{ -- char msg[200]; -- -- if (event->error_code == BadWindow) { -- return 0; -- } -- XGetErrorText(my_dpy, event->error_code, msg, sizeof(msg) - 1); -- qWarning("X error trapped: %s, request-code=%d\n", msg, event->request_code); -- return 0; --} -- --AutoTypeExecutorX11::AutoTypeExecutorX11(AutoTypePlatformX11* platform) -- : m_platform(platform) --{ --} -- --void AutoTypeExecutorX11::execChar(AutoTypeChar* action) --{ -- m_platform->SendKey(m_platform->charToKeySym(action->character)); --} -- --void AutoTypeExecutorX11::execKey(AutoTypeKey* action) --{ -- m_platform->SendKey(m_platform->keyToKeySym(action->key)); --} -- --void AutoTypeExecutorX11::execClearField(AutoTypeClearField* action = nullptr) --{ -- Q_UNUSED(action); -- -- timespec ts; -- ts.tv_sec = 0; -- ts.tv_nsec = 25 * 1000 * 1000; -- -- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Home), static_cast(ControlMask)); -- nanosleep(&ts, nullptr); -- -- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_End), static_cast(ControlMask | ShiftMask)); -- nanosleep(&ts, nullptr); -- -- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Backspace)); -- nanosleep(&ts, nullptr); --} -- --bool AutoTypePlatformX11::raiseWindow(WId window) --{ -- if (m_atomNetActiveWindow == None) { -- return false; -- } -- -- XRaiseWindow(m_dpy, window); -- -- XEvent event; -- event.xclient.type = ClientMessage; -- event.xclient.serial = 0; -- event.xclient.send_event = True; -- event.xclient.window = window; -- event.xclient.message_type = m_atomNetActiveWindow; -- event.xclient.format = 32; -- event.xclient.data.l[0] = 1; // FromApplication -- event.xclient.data.l[1] = QX11Info::appUserTime(); -- QWidget* activeWindow = QApplication::activeWindow(); -- if (activeWindow) { -- event.xclient.data.l[2] = activeWindow->internalWinId(); -- } else { -- event.xclient.data.l[2] = 0; -- } -- event.xclient.data.l[3] = 0; -- event.xclient.data.l[4] = 0; -- XSendEvent(m_dpy, m_rootWindow, False, SubstructureRedirectMask | SubstructureNotifyMask, &event); -- XFlush(m_dpy); -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.h keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.h ---- keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,135 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2000-2008 Tom Sato -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEXCB_H --#define KEEPASSX_AUTOTYPEXCB_H -- --#include --#include --#include --#include --#include -- --#include --#include --#include -- --#include "autotype/AutoTypeAction.h" --#include "autotype/AutoTypePlatformPlugin.h" -- --#define N_MOD_INDICES (Mod5MapIndex + 1) -- --class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface --{ -- Q_OBJECT -- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformX11") -- Q_INTERFACES(AutoTypePlatformInterface) -- --public: -- AutoTypePlatformX11(); -- bool isAvailable() override; -- void unload() override; -- QStringList windowTitles() override; -- WId activeWindow() override; -- QString activeWindowTitle() override; -- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; -- int platformEventFilter(void* event) override; -- bool raiseWindow(WId window) override; -- AutoTypeExecutor* createExecutor() override; -- -- KeySym charToKeySym(const QChar& ch); -- KeySym keyToKeySym(Qt::Key key); -- -- void SendKey(KeySym keysym, unsigned int modifiers = 0); -- --signals: -- void globalShortcutTriggered(); -- --private: -- QString windowTitle(Window window, bool useBlacklist); -- QStringList windowTitlesRecursive(Window window); -- QString windowClassName(Window window); -- QList widgetsToX11Windows(const QWidgetList& widgetList); -- bool isTopLevelWindow(Window window); -- uint qtToNativeModifiers(Qt::KeyboardModifiers modifiers); -- void startCatchXErrors(); -- void stopCatchXErrors(); -- static int x11ErrorHandler(Display* display, XErrorEvent* error); -- -- XkbDescPtr getKeyboard(); -- void updateKeymap(); -- bool isRemapKeycodeValid(); -- int AddKeysym(KeySym keysym); -- void AddModifier(KeySym keysym); -- void SendKeyEvent(unsigned keycode, bool press); -- void SendModifiers(unsigned int mask, bool press); -- int GetKeycode(KeySym keysym, unsigned int* mask); -- bool keysymModifiers(KeySym keysym, int keycode, unsigned int* mask); -- -- static int MyErrorHandler(Display* my_dpy, XErrorEvent* event); -- -- Display* m_dpy; -- Window m_rootWindow; -- Atom m_atomWmState; -- Atom m_atomWmName; -- Atom m_atomNetWmName; -- Atom m_atomString; -- Atom m_atomUtf8String; -- Atom m_atomNetActiveWindow; -- QSet m_classBlacklist; -- Qt::Key m_currentGlobalKey; -- Qt::KeyboardModifiers m_currentGlobalModifiers; -- uint m_currentGlobalKeycode; -- uint m_currentGlobalNativeModifiers; -- int m_modifierMask; -- static bool m_catchXErrors; -- static bool m_xErrorOccurred; -- static int (*m_oldXErrorHandler)(Display*, XErrorEvent*); -- -- static const int m_unicodeToKeysymLen; -- static const uint m_unicodeToKeysymKeys[]; -- static const uint m_unicodeToKeysymValues[]; -- -- XkbDescPtr m_xkb; -- KeySym* m_keysymTable; -- int m_minKeycode; -- int m_maxKeycode; -- int m_keysymPerKeycode; -- /* dedicated keycode for remapped keys */ -- unsigned int m_remapKeycode; -- KeySym m_currentRemapKeysym; -- KeyCode m_modifier_keycode[N_MOD_INDICES]; -- bool m_loaded; --}; -- --class AutoTypeExecutorX11 : public AutoTypeExecutor --{ --public: -- explicit AutoTypeExecutorX11(AutoTypePlatformX11* platform); -- -- void execChar(AutoTypeChar* action) override; -- void execKey(AutoTypeKey* action) override; -- void execClearField(AutoTypeClearField* action) override; -- --private: -- AutoTypePlatformX11* const m_platform; --}; -- --#endif // KEEPASSX_AUTOTYPEXCB_H -diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/xcb/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/autotype/xcb/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/xcb/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,9 +0,0 @@ --include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) -- --set(autotype_XCB_SOURCES AutoTypeXCB.cpp) -- --add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES}) --target_link_libraries(keepassx-autotype-xcb keepassx_core Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) --install(TARGETS keepassx-autotype-xcb -- BUNDLE DESTINATION . COMPONENT Runtime -- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) -diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/KeySymMap.h keepassxc-2.6.4-patched/src/autotype/xcb/KeySymMap.h ---- keepassxc-2.6.4-orig/src/autotype/xcb/KeySymMap.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/xcb/KeySymMap.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,171 +0,0 @@ --/* -- * Automatically generated by keysymmap.py from parsing keysymdef.h. -- */ -- --const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632; -- --// clang-format off --const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = { -- 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, -- 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, -- 0x0110, 0x0111, 0x0112, 0x0113, 0x0116, 0x0117, 0x0118, 0x0119, -- 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120, 0x0121, -- 0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, -- 0x012a, 0x012b, 0x012e, 0x012f, 0x0130, 0x0131, 0x0134, 0x0135, -- 0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, -- 0x013e, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, -- 0x0148, 0x014a, 0x014b, 0x014c, 0x014d, 0x0150, 0x0151, 0x0152, -- 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015a, -- 0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0162, -- 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a, -- 0x016b, 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172, -- 0x0173, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x017e, -- 0x0192, 0x02c7, 0x02d8, 0x02d9, 0x02db, 0x02dd, 0x0385, 0x0386, -- 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, -- 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, -- 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, -- 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, -- 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, -- 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, -- 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, -- 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, -- 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0401, 0x0402, 0x0403, 0x0404, -- 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, -- 0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, -- 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, -- 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, -- 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, -- 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, -- 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, -- 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, -- 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, -- 0x044e, 0x044f, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, -- 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, -- 0x0490, 0x0491, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, -- 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, -- 0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, -- 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x060c, 0x061b, 0x061f, -- 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, -- 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, -- 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, -- 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, -- 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, -- 0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0x0e01, 0x0e02, 0x0e03, -- 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, -- 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, -- 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, -- 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, 0x0e23, -- 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, -- 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, -- 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0e3f, -- 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, -- 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e50, 0x0e51, -- 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, -- 0x2002, 0x2003, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a, -- 0x2012, 0x2013, 0x2014, 0x2015, 0x2017, 0x2018, 0x2019, 0x201a, -- 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2025, 0x2026, 0x2030, -- 0x2032, 0x2033, 0x2038, 0x203e, 0x20ac, 0x2105, 0x2116, 0x2117, -- 0x211e, 0x2122, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, -- 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x2190, 0x2191, -- 0x2192, 0x2193, 0x21d2, 0x21d4, 0x2202, 0x2207, 0x2218, 0x221a, -- 0x221d, 0x221e, 0x2227, 0x2228, 0x2229, 0x222a, 0x222b, 0x2234, -- 0x223c, 0x2243, 0x2260, 0x2261, 0x2264, 0x2265, 0x2282, 0x2283, -- 0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x2308, 0x230a, 0x2315, 0x2320, -- 0x2321, 0x2395, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a1, 0x23a3, -- 0x23a4, 0x23a6, 0x23a8, 0x23ac, 0x23b7, 0x23ba, 0x23bb, 0x23bc, -- 0x23bd, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x2424, 0x2500, -- 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c, -- 0x2534, 0x253c, 0x2592, 0x25c6, 0x25cb, 0x260e, 0x2640, 0x2642, -- 0x2663, 0x2665, 0x2666, 0x266d, 0x266f, 0x2713, 0x2717, 0x271d, -- 0x2720, 0x3001, 0x3002, 0x300c, 0x300d, 0x309b, 0x309c, 0x30a1, -- 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, -- 0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, -- 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c4, 0x30c6, -- 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2, -- 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, -- 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, -- 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f2, 0x30f3, 0x30fb, 0x30fc --}; -- --const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = { -- 0x03c0, 0x03e0, 0x01c3, 0x01e3, 0x01a1, 0x01b1, 0x01c6, 0x01e6, -- 0x02c6, 0x02e6, 0x02c5, 0x02e5, 0x01c8, 0x01e8, 0x01cf, 0x01ef, -- 0x01d0, 0x01f0, 0x03aa, 0x03ba, 0x03cc, 0x03ec, 0x01ca, 0x01ea, -- 0x01cc, 0x01ec, 0x02d8, 0x02f8, 0x02ab, 0x02bb, 0x02d5, 0x02f5, -- 0x03ab, 0x03bb, 0x02a6, 0x02b6, 0x02a1, 0x02b1, 0x03a5, 0x03b5, -- 0x03cf, 0x03ef, 0x03c7, 0x03e7, 0x02a9, 0x02b9, 0x02ac, 0x02bc, -- 0x03d3, 0x03f3, 0x03a2, 0x01c5, 0x01e5, 0x03a6, 0x03b6, 0x01a5, -- 0x01b5, 0x01a3, 0x01b3, 0x01d1, 0x01f1, 0x03d1, 0x03f1, 0x01d2, -- 0x01f2, 0x03bd, 0x03bf, 0x03d2, 0x03f2, 0x01d5, 0x01f5, 0x13bc, -- 0x13bd, 0x01c0, 0x01e0, 0x03a3, 0x03b3, 0x01d8, 0x01f8, 0x01a6, -- 0x01b6, 0x02de, 0x02fe, 0x01aa, 0x01ba, 0x01a9, 0x01b9, 0x01de, -- 0x01fe, 0x01ab, 0x01bb, 0x03ac, 0x03bc, 0x03dd, 0x03fd, 0x03de, -- 0x03fe, 0x02dd, 0x02fd, 0x01d9, 0x01f9, 0x01db, 0x01fb, 0x03d9, -- 0x03f9, 0x13be, 0x01ac, 0x01bc, 0x01af, 0x01bf, 0x01ae, 0x01be, -- 0x08f6, 0x01b7, 0x01a2, 0x01ff, 0x01b2, 0x01bd, 0x07ae, 0x07a1, -- 0x07a2, 0x07a3, 0x07a4, 0x07a7, 0x07a8, 0x07ab, 0x07b6, 0x07c1, -- 0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, 0x07c8, 0x07c9, -- 0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf, 0x07d0, 0x07d1, -- 0x07d2, 0x07d4, 0x07d5, 0x07d6, 0x07d7, 0x07d8, 0x07d9, 0x07a5, -- 0x07a9, 0x07b1, 0x07b2, 0x07b3, 0x07b4, 0x07ba, 0x07e1, 0x07e2, -- 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, 0x07ea, -- 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, -- 0x07f2, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8, 0x07f9, 0x07b5, -- 0x07b9, 0x07b7, 0x07b8, 0x07bb, 0x06b3, 0x06b1, 0x06b2, 0x06b4, -- 0x06b5, 0x06b6, 0x06b7, 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc, -- 0x06be, 0x06bf, 0x06e1, 0x06e2, 0x06f7, 0x06e7, 0x06e4, 0x06e5, -- 0x06f6, 0x06fa, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee, -- 0x06ef, 0x06f0, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06e6, 0x06e8, -- 0x06e3, 0x06fe, 0x06fb, 0x06fd, 0x06ff, 0x06f9, 0x06f8, 0x06fc, -- 0x06e0, 0x06f1, 0x06c1, 0x06c2, 0x06d7, 0x06c7, 0x06c4, 0x06c5, -- 0x06d6, 0x06da, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce, -- 0x06cf, 0x06d0, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06c6, 0x06c8, -- 0x06c3, 0x06de, 0x06db, 0x06dd, 0x06df, 0x06d9, 0x06d8, 0x06dc, -- 0x06c0, 0x06d1, 0x06a3, 0x06a1, 0x06a2, 0x06a4, 0x06a5, 0x06a6, -- 0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, -- 0x06bd, 0x06ad, 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0ce4, 0x0ce5, -- 0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced, -- 0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf2, 0x0cf3, 0x0cf4, 0x0cf5, -- 0x0cf6, 0x0cf7, 0x0cf8, 0x0cf9, 0x0cfa, 0x05ac, 0x05bb, 0x05bf, -- 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8, -- 0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0, -- 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, -- 0x05d9, 0x05da, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, -- 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, -- 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x0da1, 0x0da2, 0x0da3, -- 0x0da4, 0x0da5, 0x0da6, 0x0da7, 0x0da8, 0x0da9, 0x0daa, 0x0dab, -- 0x0dac, 0x0dad, 0x0dae, 0x0daf, 0x0db0, 0x0db1, 0x0db2, 0x0db3, -- 0x0db4, 0x0db5, 0x0db6, 0x0db7, 0x0db8, 0x0db9, 0x0dba, 0x0dbb, -- 0x0dbc, 0x0dbd, 0x0dbe, 0x0dbf, 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, -- 0x0dc4, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, 0x0dca, 0x0dcb, -- 0x0dcc, 0x0dcd, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3, -- 0x0dd4, 0x0dd5, 0x0dd6, 0x0dd7, 0x0dd8, 0x0dd9, 0x0dda, 0x0ddf, -- 0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de6, 0x0de7, -- 0x0de8, 0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0df0, 0x0df1, -- 0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9, -- 0x0aa2, 0x0aa1, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, -- 0x0abb, 0x0aaa, 0x0aa9, 0x07af, 0x0cdf, 0x0ad0, 0x0ad1, 0x0afd, -- 0x0ad2, 0x0ad3, 0x0afe, 0x0af1, 0x0af2, 0x0aaf, 0x0aae, 0x0ad5, -- 0x0ad6, 0x0ad7, 0x0afc, 0x047e, 0x20ac, 0x0ab8, 0x06b0, 0x0afb, -- 0x0ad4, 0x0ac9, 0x0ab0, 0x0ab1, 0x0ab2, 0x0ab3, 0x0ab4, 0x0ab5, -- 0x0ab6, 0x0ab7, 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac6, 0x08fb, 0x08fc, -- 0x08fd, 0x08fe, 0x08ce, 0x08cd, 0x08ef, 0x08c5, 0x0bca, 0x08d6, -- 0x08c1, 0x08c2, 0x08de, 0x08df, 0x08dc, 0x08dd, 0x08bf, 0x08c0, -- 0x08c8, 0x08c9, 0x08bd, 0x08cf, 0x08bc, 0x08be, 0x08da, 0x08db, -- 0x0bfc, 0x0bdc, 0x0bc2, 0x0bce, 0x0bd3, 0x0bc4, 0x0afa, 0x08a4, -- 0x08a5, 0x0bcc, 0x08ab, 0x08ac, 0x08ad, 0x08ae, 0x08a7, 0x08a8, -- 0x08a9, 0x08aa, 0x08af, 0x08b0, 0x08a1, 0x09ef, 0x09f0, 0x09f2, -- 0x09f3, 0x09e2, 0x09e5, 0x09e9, 0x09e3, 0x09e4, 0x09e8, 0x09f1, -- 0x09f8, 0x09ec, 0x09eb, 0x09ed, 0x09ea, 0x09f4, 0x09f5, 0x09f7, -- 0x09f6, 0x09ee, 0x09e1, 0x09e0, 0x0bcf, 0x0af9, 0x0af8, 0x0af7, -- 0x0aec, 0x0aee, 0x0aed, 0x0af6, 0x0af5, 0x0af3, 0x0af4, 0x0ad9, -- 0x0af0, 0x04a4, 0x04a1, 0x04a2, 0x04a3, 0x04de, 0x04df, 0x04a7, -- 0x04b1, 0x04a8, 0x04b2, 0x04a9, 0x04b3, 0x04aa, 0x04b4, 0x04ab, -- 0x04b5, 0x04b6, 0x04b7, 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc, -- 0x04bd, 0x04be, 0x04bf, 0x04c0, 0x04c1, 0x04af, 0x04c2, 0x04c3, -- 0x04c4, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, 0x04ca, 0x04cb, -- 0x04cc, 0x04cd, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d2, 0x04d3, -- 0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8, -- 0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0 --}; --// clang-format on -diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/keysymmap.py keepassxc-2.6.4-patched/src/autotype/xcb/keysymmap.py ---- keepassxc-2.6.4-orig/src/autotype/xcb/keysymmap.py 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/autotype/xcb/keysymmap.py 1970-01-01 01:00:00.000000000 +0100 -@@ -1,101 +0,0 @@ --#!/usr/bin/python3 -- --# --# Copyright (C) 2013 Felix Geyer --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . --# -- --# --# Parses keysymdef.h to construct a unicode symbol -> keysym mapping table. --# --# The lines that are parsed look like this: --# #define XK_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ --# --# This would create a 0x0104 -> 0x01a1 mapping. --# -- --import sys --import re --import collections -- --cols = 8 -- --if len(sys.argv) >= 2: -- keysymdef = sys.argv[1] --else: -- keysymdef = "/usr/include/X11/keysymdef.h" -- --keysymMap = {} -- --with open(keysymdef, "r") as fid: -- for line in fid: -- match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line) -- if match: -- keysym = int(match.group(1), 16) -- unicodeVal = int(match.group(2), 16) -- -- # ignore 1:1 mappings -- if 0x0020 <= keysym <= 0x007e or 0x00a0 <= keysym <= 0x00ff: -- continue -- # ignore unicode | 0x01000000 mappings -- elif keysym >= 0x1000000: -- continue -- -- keysymMap[unicodeVal] = keysym -- --keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0])) -- --print("""/* -- * Automatically generated by keysymmap.py from parsing keysymdef.h. -- */ --""") -- --print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = {0};".format(len(keysymMap))) -- --print() -- --print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {") --keys = keysymMap.keys() --keyLen = len(keys) --for idx, val in enumerate(keys, start=1): -- hexVal = "{0:#0{1}x}".format(val, 6) -- -- if idx == keyLen: -- print(hexVal) -- elif (idx % cols) == 0: -- print(hexVal + ",") -- elif ((idx - 1) % cols) == 0: -- print(" " + hexVal + ", ", end="") -- else: -- print(hexVal + ", ", end="") --print("};") -- --print() -- --print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {") --values = keysymMap.values() --valuesLen = len(values) --for idx, val in enumerate(values, start=1): -- hexVal = "{0:#0{1}x}".format(val, 6) -- -- if idx == valuesLen: -- print(hexVal) -- elif (idx % cols) == 0: -- print(hexVal + ",") -- elif ((idx - 1) % cols) == 0: -- print(" " + hexVal + ", ", end="") -- else: -- print(hexVal + ", ", end="") --print("};") -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.cpp keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,108 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserAccessControlDialog.h" --#include "ui_BrowserAccessControlDialog.h" -- --#include "core/Entry.h" -- --BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) -- : QDialog(parent) -- , m_ui(new Ui::BrowserAccessControlDialog()) --{ -- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); -- -- m_ui->setupUi(this); -- -- connect(m_ui->allowButton, SIGNAL(clicked()), SLOT(accept())); -- connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); --} -- --BrowserAccessControlDialog::~BrowserAccessControlDialog() --{ --} -- --void BrowserAccessControlDialog::setItems(const QList& items, const QString& urlString, bool httpAuth) --{ -- QUrl url(urlString); -- m_ui->siteLabel->setText(m_ui->siteLabel->text().arg( -- url.toDisplayString(QUrl::RemoveUserInfo | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment))); -- -- m_ui->rememberDecisionCheckBox->setVisible(!httpAuth); -- m_ui->rememberDecisionCheckBox->setChecked(false); -- -- m_ui->itemsTable->setRowCount(items.count()); -- m_ui->itemsTable->setColumnCount(2); -- -- int row = 0; -- for (const auto& entry : items) { -- auto item = new QTableWidgetItem(); -- item->setText(entry->title() + " - " + entry->username()); -- item->setData(Qt::UserRole, row); -- item->setCheckState(Qt::Checked); -- item->setFlags(item->flags() | Qt::ItemIsUserCheckable); -- m_ui->itemsTable->setItem(row, 0, item); -- -- auto disableButton = new QPushButton(tr("Disable for this site")); -- disableButton->setAutoDefault(false); -- connect(disableButton, &QAbstractButton::pressed, [&, item] { -- emit disableAccess(item); -- m_ui->itemsTable->removeRow(item->row()); -- if (m_ui->itemsTable->rowCount() == 0) { -- reject(); -- } -- }); -- m_ui->itemsTable->setCellWidget(row, 1, disableButton); -- -- ++row; -- } -- -- m_ui->itemsTable->resizeColumnsToContents(); -- m_ui->itemsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); -- -- m_ui->allowButton->setFocus(); --} -- --bool BrowserAccessControlDialog::remember() const --{ -- return m_ui->rememberDecisionCheckBox->isChecked(); --} -- --QList BrowserAccessControlDialog::getSelectedEntries() const --{ -- QList selected; -- for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { -- auto item = m_ui->itemsTable->item(i, 0); -- if (item->checkState() == Qt::Checked) { -- selected.append(item); -- } -- } -- return selected; --} -- --QList BrowserAccessControlDialog::getNonSelectedEntries() const --{ -- QList notSelected; -- for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { -- auto item = m_ui->itemsTable->item(i, 0); -- if (item->checkState() != Qt::Checked) { -- notSelected.append(item); -- } -- } -- return notSelected; --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.h keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.h ---- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,54 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERACCESSCONTROLDIALOG_H --#define BROWSERACCESSCONTROLDIALOG_H -- --#include --#include --#include -- --class Entry; -- --namespace Ui --{ -- class BrowserAccessControlDialog; --} -- --class BrowserAccessControlDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit BrowserAccessControlDialog(QWidget* parent = nullptr); -- ~BrowserAccessControlDialog() override; -- -- void setItems(const QList& items, const QString& urlString, bool httpAuth); -- bool remember() const; -- -- QList getSelectedEntries() const; -- QList getNonSelectedEntries() const; -- --signals: -- void disableAccess(QTableWidgetItem* item); -- --private: -- QScopedPointer m_ui; --}; -- --#endif // BROWSERACCESSCONTROLDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.ui keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.ui ---- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,115 +0,0 @@ -- -- -- BrowserAccessControlDialog -- -- -- -- 0 -- 0 -- 405 -- 200 -- -- -- -- KeePassXC - Browser Access Request -- -- -- -- -- -- -- 75 -- true -- -- -- -- %1 is requesting access to the following entries: -- -- -- Qt::AlignCenter -- -- -- -- -- -- -- QAbstractItemView::NoEditTriggers -- -- -- false -- -- -- QAbstractItemView::NoSelection -- -- -- false -- -- -- false -- -- -- false -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- Remember access to checked entries -- -- -- Remember access to checked entries -- -- -- Remember -- -- -- -- -- -- -- Allow access to entries -- -- -- Allow Selected -- -- -- true -- -- -- true -- -- -- -- -- -- -- Deny All -- -- -- true -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAction.cpp keepassxc-2.6.4-patched/src/browser/BrowserAction.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserAction.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserAction.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,692 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserAction.h" --#include "BrowserService.h" --#include "BrowserSettings.h" --#include "BrowserShared.h" --#include "config-keepassx.h" --#include "core/Global.h" -- --#include --#include --#include --#include --#include -- --namespace --{ -- enum -- { -- ERROR_KEEPASS_DATABASE_NOT_OPENED = 1, -- ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2, -- ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3, -- ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4, -- ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5, -- ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6, -- ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7, -- ERROR_KEEPASS_ASSOCIATION_FAILED = 8, -- ERROR_KEEPASS_KEY_CHANGE_FAILED = 9, -- ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10, -- ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11, -- ERROR_KEEPASS_INCORRECT_ACTION = 12, -- ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13, -- ERROR_KEEPASS_NO_URL_PROVIDED = 14, -- ERROR_KEEPASS_NO_LOGINS_FOUND = 15, -- ERROR_KEEPASS_NO_GROUPS_FOUND = 16, -- ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17 -- }; --} -- --QJsonObject BrowserAction::processClientMessage(const QJsonObject& json) --{ -- if (json.isEmpty()) { -- return getErrorReply("", ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED); -- } -- -- bool triggerUnlock = false; -- const QString trigger = json.value("triggerUnlock").toString(); -- if (!trigger.isEmpty() && trigger.compare(TRUE_STR, Qt::CaseSensitive) == 0) { -- triggerUnlock = true; -- } -- -- const QString action = json.value("action").toString(); -- if (action.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); -- } -- -- if (action.compare("change-public-keys", Qt::CaseSensitive) != 0 && !browserService()->isDatabaseOpened()) { -- if (m_clientPublicKey.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); -- } else if (!browserService()->openDatabase(triggerUnlock)) { -- return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED); -- } -- } -- -- return handleAction(json); --} -- --// Private functions --/////////////////////// -- --QJsonObject BrowserAction::handleAction(const QJsonObject& json) --{ -- QString action = json.value("action").toString(); -- -- if (action.compare("change-public-keys", Qt::CaseSensitive) == 0) { -- return handleChangePublicKeys(json, action); -- } else if (action.compare("get-databasehash", Qt::CaseSensitive) == 0) { -- return handleGetDatabaseHash(json, action); -- } else if (action.compare("associate", Qt::CaseSensitive) == 0) { -- return handleAssociate(json, action); -- } else if (action.compare("test-associate", Qt::CaseSensitive) == 0) { -- return handleTestAssociate(json, action); -- } else if (action.compare("get-logins", Qt::CaseSensitive) == 0) { -- return handleGetLogins(json, action); -- } else if (action.compare("generate-password", Qt::CaseSensitive) == 0) { -- return handleGeneratePassword(json, action); -- } else if (action.compare("set-login", Qt::CaseSensitive) == 0) { -- return handleSetLogin(json, action); -- } else if (action.compare("lock-database", Qt::CaseSensitive) == 0) { -- return handleLockDatabase(json, action); -- } else if (action.compare("get-database-groups", Qt::CaseSensitive) == 0) { -- return handleGetDatabaseGroups(json, action); -- } else if (action.compare("create-new-group", Qt::CaseSensitive) == 0) { -- return handleCreateNewGroup(json, action); -- } else if (action.compare("get-totp", Qt::CaseSensitive) == 0) { -- return handleGetTotp(json, action); -- } -- -- // Action was not recognized -- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); --} -- --QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const QString& action) --{ -- const QString nonce = json.value("nonce").toString(); -- const QString clientPublicKey = json.value("publicKey").toString(); -- -- if (clientPublicKey.isEmpty() || nonce.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); -- } -- -- m_associated = false; -- unsigned char pk[crypto_box_PUBLICKEYBYTES]; -- unsigned char sk[crypto_box_SECRETKEYBYTES]; -- crypto_box_keypair(pk, sk); -- -- const QString publicKey = getBase64FromKey(pk, crypto_box_PUBLICKEYBYTES); -- const QString secretKey = getBase64FromKey(sk, crypto_box_SECRETKEYBYTES); -- if (publicKey.isEmpty() || secretKey.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED); -- } -- -- m_clientPublicKey = clientPublicKey; -- m_publicKey = publicKey; -- m_secretKey = secretKey; -- -- QJsonObject response = buildMessage(incrementNonce(nonce)); -- response["action"] = action; -- response["publicKey"] = publicKey; -- -- return response; --} -- --QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- if (hash.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); -- } -- -- QString command = decrypted.value("action").toString(); -- if (!command.isEmpty() && command.compare("get-databasehash", Qt::CaseSensitive) == 0) { -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["hash"] = hash; -- -- // Update a legacy database hash if found -- const QJsonArray hashes = decrypted.value("connectedKeys").toArray(); -- if (!hashes.isEmpty()) { -- const QString legacyHash = browserService()->getDatabaseHash(true); -- if (hashes.contains(legacyHash)) { -- message["oldHash"] = legacyHash; -- } -- } -- -- return buildResponse(action, message, newNonce); -- } -- -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); --} -- --QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- const QString key = decrypted.value("key").toString(); -- if (key.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- if (key.compare(m_clientPublicKey, Qt::CaseSensitive) == 0) { -- // Check for identification key. If it's not found, ensure backwards compatibility and use the current public -- // key -- const QString idKey = decrypted.value("idKey").toString(); -- const QString id = browserService()->storeKey((idKey.isEmpty() ? key : idKey)); -- if (id.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); -- } -- -- m_associated = true; -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["hash"] = hash; -- message["id"] = id; -- return buildResponse(action, message, newNonce); -- } -- -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); --} -- --QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- const QString responseKey = decrypted.value("key").toString(); -- const QString id = decrypted.value("id").toString(); -- if (responseKey.isEmpty() || id.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED); -- } -- -- const QString key = browserService()->getKey(id); -- if (key.isEmpty() || key.compare(responseKey, Qt::CaseSensitive) != 0) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- m_associated = true; -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["hash"] = hash; -- message["id"] = id; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- -- if (!m_associated) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- const QString siteUrl = decrypted.value("url").toString(); -- if (siteUrl.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); -- } -- -- const QJsonArray keys = decrypted.value("keys").toArray(); -- -- StringPairList keyList; -- for (const QJsonValue val : keys) { -- const QJsonObject keyObject = val.toObject(); -- keyList.push_back(qMakePair(keyObject.value("id").toString(), keyObject.value("key").toString())); -- } -- -- const QString id = decrypted.value("id").toString(); -- const QString formUrl = decrypted.value("submitUrl").toString(); -- const QString auth = decrypted.value("httpAuth").toString(); -- const bool httpAuth = auth.compare(TRUE_STR, Qt::CaseSensitive) == 0 ? true : false; -- const QJsonArray users = browserService()->findMatchingEntries(id, siteUrl, formUrl, "", keyList, httpAuth); -- -- if (users.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND); -- } -- -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["count"] = users.count(); -- message["entries"] = users; -- message["hash"] = hash; -- message["id"] = id; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleGeneratePassword(const QJsonObject& json, const QString& action) --{ -- auto nonce = json.value("nonce").toString(); -- auto password = browserSettings()->generatePassword(); -- -- if (nonce.isEmpty() || password.isEmpty()) { -- return QJsonObject(); -- } -- -- // For backwards compatibility -- password["login"] = password["entropy"]; -- -- QJsonArray arr; -- arr.append(password); -- -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["entries"] = arr; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- -- if (!m_associated) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- const QString url = decrypted.value("url").toString(); -- if (url.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); -- } -- -- const QString id = decrypted.value("id").toString(); -- const QString login = decrypted.value("login").toString(); -- const QString password = decrypted.value("password").toString(); -- const QString submitUrl = decrypted.value("submitUrl").toString(); -- const QString uuid = decrypted.value("uuid").toString(); -- const QString group = decrypted.value("group").toString(); -- const QString groupUuid = decrypted.value("groupUuid").toString(); -- const QString realm; -- -- bool result = true; -- if (uuid.isEmpty()) { -- browserService()->addEntry(id, login, password, url, submitUrl, realm, group, groupUuid); -- } else { -- result = browserService()->updateEntry(id, uuid, login, password, url, submitUrl); -- } -- -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["count"] = QJsonValue::Null; -- message["entries"] = QJsonValue::Null; -- message["error"] = result ? QStringLiteral("success") : QStringLiteral("error"); -- message["hash"] = hash; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- if (hash.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); -- } -- -- QString command = decrypted.value("action").toString(); -- if (!command.isEmpty() && command.compare("lock-database", Qt::CaseSensitive) == 0) { -- browserService()->lockDatabase(); -- -- const QString newNonce = incrementNonce(nonce); -- QJsonObject message = buildMessage(newNonce); -- -- return buildResponse(action, message, newNonce); -- } -- -- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); --} -- --QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- -- if (!m_associated) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- QString command = decrypted.value("action").toString(); -- if (command.isEmpty() || command.compare("get-database-groups", Qt::CaseSensitive) != 0) { -- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); -- } -- -- const QJsonObject groups = browserService()->getDatabaseGroups(); -- if (groups.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND); -- } -- -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["groups"] = groups; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const QString& action) --{ -- const QString hash = browserService()->getDatabaseHash(); -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- -- if (!m_associated) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- QString command = decrypted.value("action").toString(); -- if (command.isEmpty() || command.compare("create-new-group", Qt::CaseSensitive) != 0) { -- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); -- } -- -- QString group = decrypted.value("groupName").toString(); -- const QJsonObject newGroup = browserService()->createNewGroup(group); -- if (newGroup.isEmpty() || newGroup["name"].toString().isEmpty() || newGroup["uuid"].toString().isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP); -- } -- -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["name"] = newGroup["name"]; -- message["uuid"] = newGroup["uuid"]; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::handleGetTotp(const QJsonObject& json, const QString& action) --{ -- const QString nonce = json.value("nonce").toString(); -- const QString encrypted = json.value("message").toString(); -- -- if (!m_associated) { -- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); -- } -- -- const QJsonObject decrypted = decryptMessage(encrypted, nonce); -- if (decrypted.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); -- } -- -- QString command = decrypted.value("action").toString(); -- if (command.isEmpty() || command.compare("get-totp", Qt::CaseSensitive) != 0) { -- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); -- } -- -- const QString uuid = decrypted.value("uuid").toString(); -- -- // Get the current TOTP -- const auto totp = browserService()->getCurrentTotp(uuid); -- const QString newNonce = incrementNonce(nonce); -- -- QJsonObject message = buildMessage(newNonce); -- message["totp"] = totp; -- -- return buildResponse(action, message, newNonce); --} -- --QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorCode) const --{ -- QJsonObject response; -- response["action"] = action; -- response["errorCode"] = QString::number(errorCode); -- response["error"] = getErrorMessage(errorCode); -- return response; --} -- --QJsonObject BrowserAction::buildMessage(const QString& nonce) const --{ -- QJsonObject message; -- message["version"] = KEEPASSXC_VERSION; -- message["success"] = TRUE_STR; -- message["nonce"] = nonce; -- return message; --} -- --QJsonObject BrowserAction::buildResponse(const QString& action, const QJsonObject& message, const QString& nonce) --{ -- QJsonObject response; -- QString encryptedMessage = encryptMessage(message, nonce); -- if (encryptedMessage.isEmpty()) { -- return getErrorReply(action, ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE); -- } -- -- response["action"] = action; -- response["message"] = encryptedMessage; -- response["nonce"] = nonce; -- return response; --} -- --QString BrowserAction::getErrorMessage(const int errorCode) const --{ -- switch (errorCode) { -- case ERROR_KEEPASS_DATABASE_NOT_OPENED: -- return QObject::tr("Database not opened"); -- case ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED: -- return QObject::tr("Database hash not available"); -- case ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED: -- return QObject::tr("Client public key not received"); -- case ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE: -- return QObject::tr("Cannot decrypt message"); -- case ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED: -- return QObject::tr("Action cancelled or denied"); -- case ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE: -- return QObject::tr("Message encryption failed."); -- case ERROR_KEEPASS_ASSOCIATION_FAILED: -- return QObject::tr("KeePassXC association failed, try again"); -- case ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED: -- return QObject::tr("Encryption key is not recognized"); -- case ERROR_KEEPASS_INCORRECT_ACTION: -- return QObject::tr("Incorrect action"); -- case ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED: -- return QObject::tr("Empty message received"); -- case ERROR_KEEPASS_NO_URL_PROVIDED: -- return QObject::tr("No URL provided"); -- case ERROR_KEEPASS_NO_LOGINS_FOUND: -- return QObject::tr("No logins found"); -- case ERROR_KEEPASS_NO_GROUPS_FOUND: -- return QObject::tr("No groups found"); -- case ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP: -- return QObject::tr("Cannot create new group"); -- default: -- return QObject::tr("Unknown error"); -- } --} -- --QString BrowserAction::encryptMessage(const QJsonObject& message, const QString& nonce) --{ -- if (message.isEmpty() || nonce.isEmpty()) { -- return QString(); -- } -- -- const QString reply(QJsonDocument(message).toJson()); -- if (!reply.isEmpty()) { -- return encrypt(reply, nonce); -- } -- -- return QString(); --} -- --QJsonObject BrowserAction::decryptMessage(const QString& message, const QString& nonce) --{ -- if (message.isEmpty() || nonce.isEmpty()) { -- return QJsonObject(); -- } -- -- QByteArray ba = decrypt(message, nonce); -- if (ba.isEmpty()) { -- return QJsonObject(); -- } -- -- return getJsonObject(ba); --} -- --QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce) --{ -- const QByteArray ma = plaintext.toUtf8(); -- const QByteArray na = base64Decode(nonce); -- const QByteArray ca = base64Decode(m_clientPublicKey); -- const QByteArray sa = base64Decode(m_secretKey); -- -- std::vector m(ma.cbegin(), ma.cend()); -- std::vector n(na.cbegin(), na.cend()); -- std::vector ck(ca.cbegin(), ca.cend()); -- std::vector sk(sa.cbegin(), sa.cend()); -- -- std::vector e; -- e.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); -- -- if (m.empty() || n.empty() || ck.empty() || sk.empty()) { -- return QString(); -- } -- -- if (crypto_box_easy(e.data(), m.data(), m.size(), n.data(), ck.data(), sk.data()) == 0) { -- QByteArray res = getQByteArray(e.data(), (crypto_box_MACBYTES + ma.length())); -- return res.toBase64(); -- } -- -- return QString(); --} -- --QByteArray BrowserAction::decrypt(const QString& encrypted, const QString& nonce) --{ -- const QByteArray ma = base64Decode(encrypted); -- const QByteArray na = base64Decode(nonce); -- const QByteArray ca = base64Decode(m_clientPublicKey); -- const QByteArray sa = base64Decode(m_secretKey); -- -- std::vector m(ma.cbegin(), ma.cend()); -- std::vector n(na.cbegin(), na.cend()); -- std::vector ck(ca.cbegin(), ca.cend()); -- std::vector sk(sa.cbegin(), sa.cend()); -- -- std::vector d; -- d.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); -- -- if (m.empty() || n.empty() || ck.empty() || sk.empty()) { -- return QByteArray(); -- } -- -- if (crypto_box_open_easy(d.data(), m.data(), ma.length(), n.data(), ck.data(), sk.data()) == 0) { -- return getQByteArray(d.data(), std::char_traits::length(reinterpret_cast(d.data()))); -- } -- -- return QByteArray(); --} -- --QString BrowserAction::getBase64FromKey(const uchar* array, const uint len) --{ -- return getQByteArray(array, len).toBase64(); --} -- --QByteArray BrowserAction::getQByteArray(const uchar* array, const uint len) const --{ -- QByteArray qba; -- qba.reserve(len); -- for (uint i = 0; i < len; ++i) { -- qba.append(static_cast(array[i])); -- } -- return qba; --} -- --QJsonObject BrowserAction::getJsonObject(const uchar* pArray, const uint len) const --{ -- QByteArray arr = getQByteArray(pArray, len); -- QJsonParseError err; -- QJsonDocument doc(QJsonDocument::fromJson(arr, &err)); -- return doc.object(); --} -- --QJsonObject BrowserAction::getJsonObject(const QByteArray& ba) const --{ -- QJsonParseError err; -- QJsonDocument doc(QJsonDocument::fromJson(ba, &err)); -- return doc.object(); --} -- --QByteArray BrowserAction::base64Decode(const QString& str) --{ -- return QByteArray::fromBase64(str.toUtf8()); --} -- --QString BrowserAction::incrementNonce(const QString& nonce) --{ -- const QByteArray nonceArray = base64Decode(nonce); -- std::vector n(nonceArray.cbegin(), nonceArray.cend()); -- -- sodium_increment(n.data(), n.size()); -- return getQByteArray(n.data(), n.size()).toBase64(); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAction.h keepassxc-2.6.4-patched/src/browser/BrowserAction.h ---- keepassxc-2.6.4-orig/src/browser/BrowserAction.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserAction.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,72 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERACTION_H --#define BROWSERACTION_H -- --#include --#include -- --class BrowserAction --{ --public: -- explicit BrowserAction() = default; -- ~BrowserAction() = default; -- -- QJsonObject processClientMessage(const QJsonObject& json); -- --private: -- QJsonObject handleAction(const QJsonObject& json); -- QJsonObject handleChangePublicKeys(const QJsonObject& json, const QString& action); -- QJsonObject handleGetDatabaseHash(const QJsonObject& json, const QString& action); -- QJsonObject handleAssociate(const QJsonObject& json, const QString& action); -- QJsonObject handleTestAssociate(const QJsonObject& json, const QString& action); -- QJsonObject handleGetLogins(const QJsonObject& json, const QString& action); -- QJsonObject handleGeneratePassword(const QJsonObject& json, const QString& action); -- QJsonObject handleSetLogin(const QJsonObject& json, const QString& action); -- QJsonObject handleLockDatabase(const QJsonObject& json, const QString& action); -- QJsonObject handleGetDatabaseGroups(const QJsonObject& json, const QString& action); -- QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action); -- QJsonObject handleGetTotp(const QJsonObject& json, const QString& action); -- -- QJsonObject buildMessage(const QString& nonce) const; -- QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce); -- QJsonObject getErrorReply(const QString& action, const int errorCode) const; -- QString getErrorMessage(const int errorCode) const; -- -- QString encryptMessage(const QJsonObject& message, const QString& nonce); -- QJsonObject decryptMessage(const QString& message, const QString& nonce); -- QString encrypt(const QString& plaintext, const QString& nonce); -- QByteArray decrypt(const QString& encrypted, const QString& nonce); -- -- QString getBase64FromKey(const uchar* array, const uint len); -- QByteArray getQByteArray(const uchar* array, const uint len) const; -- QJsonObject getJsonObject(const uchar* pArray, const uint len) const; -- QJsonObject getJsonObject(const QByteArray& ba) const; -- QByteArray base64Decode(const QString& str); -- QString incrementNonce(const QString& nonce); -- --private: -- QString m_clientPublicKey; -- QString m_publicKey; -- QString m_secretKey; -- bool m_associated = false; -- -- friend class TestBrowser; --}; -- --#endif // BROWSERACTION_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.cpp keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,108 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserEntryConfig.h" --#include "core/Entry.h" --#include "core/EntryAttributes.h" --#include -- --static const char KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings"; -- --BrowserEntryConfig::BrowserEntryConfig(QObject* parent) -- : QObject(parent) --{ --} -- --QStringList BrowserEntryConfig::allowedHosts() const --{ -- return m_allowedHosts.toList(); --} -- --void BrowserEntryConfig::setAllowedHosts(const QStringList& allowedHosts) --{ -- m_allowedHosts = allowedHosts.toSet(); --} -- --QStringList BrowserEntryConfig::deniedHosts() const --{ -- return m_deniedHosts.toList(); --} -- --void BrowserEntryConfig::setDeniedHosts(const QStringList& deniedHosts) --{ -- m_deniedHosts = deniedHosts.toSet(); --} -- --bool BrowserEntryConfig::isAllowed(const QString& host) const --{ -- return m_allowedHosts.contains(host); --} -- --void BrowserEntryConfig::allow(const QString& host) --{ -- m_allowedHosts.insert(host); -- m_deniedHosts.remove(host); --} -- --bool BrowserEntryConfig::isDenied(const QString& host) const --{ -- return m_deniedHosts.contains(host); --} -- --void BrowserEntryConfig::deny(const QString& host) --{ -- m_deniedHosts.insert(host); -- m_allowedHosts.remove(host); --} -- --QString BrowserEntryConfig::realm() const --{ -- return m_realm; --} -- --void BrowserEntryConfig::setRealm(const QString& realm) --{ -- m_realm = realm; --} -- --bool BrowserEntryConfig::load(const Entry* entry) --{ -- QString s = entry->customData()->value(KEEPASSXCBROWSER_NAME); -- if (s.isEmpty()) { -- return false; -- } -- -- QJsonDocument doc = QJsonDocument::fromJson(s.toUtf8()); -- if (doc.isNull()) { -- return false; -- } -- -- QVariantMap map = doc.object().toVariantMap(); -- for (QVariantMap::const_iterator iter = map.cbegin(); iter != map.cend(); ++iter) { -- setProperty(iter.key().toLatin1(), iter.value()); -- } -- return true; --} -- --void BrowserEntryConfig::save(Entry* entry) --{ -- QVariantMap v = qo2qv(this); -- QJsonObject o = QJsonObject::fromVariantMap(v); -- QByteArray json = QJsonDocument(o).toJson(QJsonDocument::Compact); -- entry->customData()->set(KEEPASSXCBROWSER_NAME, json); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.h keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.h ---- keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERENTRYCONFIG_H --#define BROWSERENTRYCONFIG_H -- --#include "Variant.h" --#include --#include --#include --#include -- --class Entry; -- --class BrowserEntryConfig : public QObject --{ -- Q_OBJECT -- Q_PROPERTY(QStringList Allow READ allowedHosts WRITE setAllowedHosts) -- Q_PROPERTY(QStringList Deny READ deniedHosts WRITE setDeniedHosts) -- Q_PROPERTY(QString Realm READ realm WRITE setRealm) -- --public: -- BrowserEntryConfig(QObject* object = nullptr); -- -- bool load(const Entry* entry); -- void save(Entry* entry); -- bool isAllowed(const QString& host) const; -- void allow(const QString& host); -- bool isDenied(const QString& host) const; -- void deny(const QString& host); -- QString realm() const; -- void setRealm(const QString& realm); -- --private: -- QStringList allowedHosts() const; -- void setAllowedHosts(const QStringList& allowedHosts); -- QStringList deniedHosts() const; -- void setDeniedHosts(const QStringList& deniedHosts); -- -- QSet m_allowedHosts; -- QSet m_deniedHosts; -- QString m_realm; --}; -- --#endif // BROWSERENTRYCONFIG_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.cpp keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,82 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserEntrySaveDialog.h" --#include "ui_BrowserEntrySaveDialog.h" -- --#include "core/Database.h" --#include "gui/DatabaseWidget.h" -- --BrowserEntrySaveDialog::BrowserEntrySaveDialog(QWidget* parent) -- : QDialog(parent) -- , m_ui(new Ui::BrowserEntrySaveDialog()) --{ -- this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); -- -- m_ui->setupUi(this); -- connect(m_ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); -- connect(m_ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); -- -- m_ui->itemsList->setSelectionMode(QAbstractItemView::SingleSelection); -- m_ui->label->setText(QString(tr("You have multiple databases open.\n" -- "Please select the correct database for saving credentials."))); --} -- --BrowserEntrySaveDialog::~BrowserEntrySaveDialog() --{ --} -- --int BrowserEntrySaveDialog::setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const --{ -- uint counter = 0; -- int activeIndex = -1; -- for (const auto dbWidget : databaseWidgets) { -- QString databaseName = dbWidget->database()->metadata()->name(); -- QString databaseFileName = dbWidget->database()->filePath(); -- -- auto* item = new QListWidgetItem(); -- item->setData(Qt::UserRole, counter); -- -- // Show database name (and filename if the name has been set in metadata) -- if (databaseName == databaseFileName) { -- item->setText(databaseFileName); -- } else { -- item->setText(QString("%1 (%2)").arg(databaseName, databaseFileName)); -- } -- -- if (currentWidget == dbWidget) { -- activeIndex = counter; -- } -- -- m_ui->itemsList->addItem(item); -- ++counter; -- } -- -- // This must be done after the whole list is filled -- if (activeIndex >= 0) { -- m_ui->itemsList->item(activeIndex)->setSelected(true); -- } -- -- m_ui->itemsList->selectAll(); -- return databaseWidgets.length(); --} -- --QList BrowserEntrySaveDialog::getSelected() const --{ -- return m_ui->itemsList->selectedItems(); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.h keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.h ---- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERENTRYSAVEDIALOG_H --#define BROWSERENTRYSAVEDIALOG_H -- --#include "gui/DatabaseTabWidget.h" -- --#include --#include --#include -- --class Entry; -- --namespace Ui --{ -- class BrowserEntrySaveDialog; --} -- --class BrowserEntrySaveDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit BrowserEntrySaveDialog(QWidget* parent = nullptr); -- ~BrowserEntrySaveDialog() override; -- -- int setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const; -- QList getSelected() const; -- --private: -- QScopedPointer m_ui; --}; -- --#endif // BROWSERENTRYSAVEDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.ui keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.ui ---- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ -- -- -- BrowserEntrySaveDialog -- -- -- -- 0 -- 0 -- 400 -- 221 -- -- -- -- KeePassXC-Browser Save Entry -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- Ok -- -- -- -- -- -- -- Cancel -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserHost.cpp keepassxc-2.6.4-patched/src/browser/BrowserHost.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserHost.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserHost.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,122 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserHost.h" --#include "BrowserSettings.h" --#include "BrowserShared.h" -- --#include --#include --#include --#include --#include -- --#include "sodium.h" --#include -- --#ifdef Q_OS_WIN --#include --#include -- --#include --#else --#include --#include --#endif -- --BrowserHost::BrowserHost(QObject* parent) -- : QObject(parent) --{ -- m_localServer = new QLocalServer(this); -- m_localServer->setSocketOptions(QLocalServer::UserAccessOption); -- connect(m_localServer.data(), SIGNAL(newConnection()), this, SLOT(proxyConnected())); --} -- --BrowserHost::~BrowserHost() --{ -- stop(); --} -- --void BrowserHost::start() --{ -- if (sodium_init() == -1) { -- qWarning() << "Failed to start browser service: libsodium failed to initialize!"; -- return; -- } -- -- if (!m_localServer->isListening()) { -- m_localServer->listen(BrowserShared::localServerPath()); -- } --} -- --void BrowserHost::stop() --{ -- m_socketList.clear(); -- m_localServer->close(); --} -- --void BrowserHost::proxyConnected() --{ -- auto socket = m_localServer->nextPendingConnection(); -- if (socket) { -- m_socketList.append(socket); -- connect(socket, SIGNAL(readyRead()), this, SLOT(readProxyMessage())); -- connect(socket, SIGNAL(disconnected()), this, SLOT(proxyDisconnected())); -- } --} -- --void BrowserHost::readProxyMessage() --{ -- QLocalSocket* socket = qobject_cast(QObject::sender()); -- if (!socket || socket->bytesAvailable() <= 0) { -- return; -- } -- -- socket->setReadBufferSize(BrowserShared::NATIVEMSG_MAX_LENGTH); -- int socketDesc = socket->socketDescriptor(); -- if (socketDesc) { -- int max = BrowserShared::NATIVEMSG_MAX_LENGTH; -- setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&max), sizeof(max)); -- } -- -- QJsonParseError error; -- auto json = QJsonDocument::fromJson(socket->readAll(), &error); -- if (json.isNull()) { -- qWarning() << "Failed to read proxy message: " << error.errorString(); -- return; -- } -- -- emit clientMessageReceived(json.object()); --} -- --void BrowserHost::sendClientMessage(const QJsonObject& json) --{ -- QString reply(QJsonDocument(json).toJson(QJsonDocument::Compact)); -- for (const auto socket : m_socketList) { -- if (socket && socket->isValid() && socket->state() == QLocalSocket::ConnectedState) { -- QByteArray arr = reply.toUtf8(); -- socket->write(arr.constData(), arr.length()); -- socket->flush(); -- } -- } --} -- --void BrowserHost::proxyDisconnected() --{ -- auto socket = qobject_cast(QObject::sender()); -- m_socketList.removeOne(socket); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserHost.h keepassxc-2.6.4-patched/src/browser/BrowserHost.h ---- keepassxc-2.6.4-orig/src/browser/BrowserHost.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserHost.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,54 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef NATIVEMESSAGINGHOST_H --#define NATIVEMESSAGINGHOST_H -- --#include --#include --#include -- --class QLocalServer; --class QLocalSocket; -- --class BrowserHost : public QObject --{ -- Q_OBJECT -- --public: -- explicit BrowserHost(QObject* parent = nullptr); -- ~BrowserHost() override; -- -- void start(); -- void stop(); -- -- void sendClientMessage(const QJsonObject& json); -- --signals: -- void clientMessageReceived(const QJsonObject& json); -- --private slots: -- void proxyConnected(); -- void readProxyMessage(); -- void proxyDisconnected(); -- --private: -- QPointer m_localServer; -- QList m_socketList; --}; -- --#endif // NATIVEMESSAGINGHOST_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserService.cpp keepassxc-2.6.4-patched/src/browser/BrowserService.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserService.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserService.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1340 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include --#include --#include --#include --#include --#include -- --#include "BrowserAccessControlDialog.h" --#include "BrowserAction.h" --#include "BrowserEntryConfig.h" --#include "BrowserEntrySaveDialog.h" --#include "BrowserHost.h" --#include "BrowserService.h" --#include "BrowserSettings.h" --#include "core/Database.h" --#include "core/EntrySearcher.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/PasswordGenerator.h" --#include "core/Tools.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" --#ifdef Q_OS_MACOS --#include "gui/osutils/macutils/MacUtils.h" --#endif -- --const QString BrowserService::KEEPASSXCBROWSER_NAME = QStringLiteral("KeePassXC-Browser Settings"); --const QString BrowserService::KEEPASSXCBROWSER_OLD_NAME = QStringLiteral("keepassxc-browser Settings"); --static const QString KEEPASSXCBROWSER_GROUP_NAME = QStringLiteral("KeePassXC-Browser Passwords"); --static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; --// These are for the settings and password conversion --static const QString KEEPASSHTTP_NAME = QStringLiteral("KeePassHttp Settings"); --static const QString KEEPASSHTTP_GROUP_NAME = QStringLiteral("KeePassHttp Passwords"); --// Extra entry related options saved in custom data --const QString BrowserService::OPTION_SKIP_AUTO_SUBMIT = QStringLiteral("BrowserSkipAutoSubmit"); --const QString BrowserService::OPTION_HIDE_ENTRY = QStringLiteral("BrowserHideEntry"); --const QString BrowserService::OPTION_ONLY_HTTP_AUTH = QStringLiteral("BrowserOnlyHttpAuth"); --// Multiple URL's --const QString BrowserService::ADDITIONAL_URL = QStringLiteral("KP2A_URL"); -- --Q_GLOBAL_STATIC(BrowserService, s_browserService); -- --BrowserService::BrowserService() -- : QObject() -- , m_browserHost(new BrowserHost) -- , m_dialogActive(false) -- , m_bringToFrontRequested(false) -- , m_prevWindowState(WindowState::Normal) -- , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) --{ -- connect(m_browserHost, &BrowserHost::clientMessageReceived, this, &BrowserService::processClientMessage); -- setEnabled(browserSettings()->isEnabled()); --} -- --BrowserService* BrowserService::instance() --{ -- return s_browserService; --} -- --void BrowserService::setEnabled(bool enabled) --{ -- if (enabled) { -- // Update KeePassXC/keepassxc-proxy binary paths to Native Messaging scripts -- if (browserSettings()->updateBinaryPath()) { -- browserSettings()->updateBinaryPaths(); -- } -- -- m_browserHost->start(); -- } else { -- m_browserHost->stop(); -- } --} -- --bool BrowserService::isDatabaseOpened() const --{ -- if (m_currentDatabaseWidget) { -- return !m_currentDatabaseWidget->isLocked(); -- } -- return false; --} -- --bool BrowserService::openDatabase(bool triggerUnlock) --{ -- if (!browserSettings()->unlockDatabase()) { -- return false; -- } -- -- if (m_currentDatabaseWidget && !m_currentDatabaseWidget->isLocked()) { -- return true; -- } -- -- if (triggerUnlock) { -- m_bringToFrontRequested = true; -- updateWindowState(); -- emit requestUnlock(); -- } -- -- return false; --} -- --void BrowserService::lockDatabase() --{ -- if (m_currentDatabaseWidget) { -- m_currentDatabaseWidget->lock(); -- } --} -- --QString BrowserService::getDatabaseHash(bool legacy) --{ -- if (legacy) { -- return QCryptographicHash::hash( -- (browserService()->getDatabaseRootUuid() + browserService()->getDatabaseRecycleBinUuid()).toUtf8(), -- QCryptographicHash::Sha256) -- .toHex(); -- } -- return QCryptographicHash::hash(getDatabaseRootUuid().toUtf8(), QCryptographicHash::Sha256).toHex(); --} -- --QString BrowserService::getDatabaseRootUuid() --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- Group* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return {}; -- } -- -- return rootGroup->uuidToHex(); --} -- --QString BrowserService::getDatabaseRecycleBinUuid() --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- Group* recycleBin = db->metadata()->recycleBin(); -- if (!recycleBin) { -- return {}; -- } -- return recycleBin->uuidToHex(); --} -- --QJsonArray BrowserService::getChildrenFromGroup(Group* group) --{ -- QJsonArray groupList; -- -- if (!group) { -- return groupList; -- } -- -- for (const auto& c : group->children()) { -- if (c == group->database()->metadata()->recycleBin()) { -- continue; -- } -- -- QJsonObject jsonGroup; -- jsonGroup["name"] = c->name(); -- jsonGroup["uuid"] = Tools::uuidToHex(c->uuid()); -- jsonGroup["children"] = getChildrenFromGroup(c); -- groupList.push_back(jsonGroup); -- } -- return groupList; --} -- --QJsonObject BrowserService::getDatabaseGroups() --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- Group* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return {}; -- } -- -- QJsonObject root; -- root["name"] = rootGroup->name(); -- root["uuid"] = Tools::uuidToHex(rootGroup->uuid()); -- root["children"] = getChildrenFromGroup(rootGroup); -- -- QJsonArray groups; -- groups.push_back(root); -- -- QJsonObject result; -- result["groups"] = groups; -- -- return result; --} -- --QJsonObject BrowserService::createNewGroup(const QString& groupName) --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- Group* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return {}; -- } -- -- auto group = rootGroup->findGroupByPath(groupName); -- -- // Group already exists -- if (group) { -- QJsonObject result; -- result["name"] = group->name(); -- result["uuid"] = Tools::uuidToHex(group->uuid()); -- return result; -- } -- -- auto dialogResult = MessageBox::warning(nullptr, -- tr("KeePassXC: Create a new group"), -- tr("A request for creating a new group \"%1\" has been received.\n" -- "Do you want to create this group?\n") -- .arg(groupName), -- MessageBox::Yes | MessageBox::No); -- -- if (dialogResult != MessageBox::Yes) { -- return {}; -- } -- -- QString name, uuid; -- Group* previousGroup = rootGroup; -- auto groups = groupName.split("/"); -- -- // Returns the group name based on depth -- auto getGroupName = [&](int depth) { -- QString gName; -- for (int i = 0; i < depth + 1; ++i) { -- gName.append((i == 0 ? "" : "/") + groups[i]); -- } -- return gName; -- }; -- -- // Create new group(s) always when the path is not found -- for (int i = 0; i < groups.length(); ++i) { -- QString gName = getGroupName(i); -- auto tempGroup = rootGroup->findGroupByPath(gName); -- if (!tempGroup) { -- Group* newGroup = new Group(); -- newGroup->setName(groups[i]); -- newGroup->setUuid(QUuid::createUuid()); -- newGroup->setParent(previousGroup); -- name = newGroup->name(); -- uuid = Tools::uuidToHex(newGroup->uuid()); -- previousGroup = newGroup; -- continue; -- } -- -- previousGroup = tempGroup; -- } -- -- QJsonObject result; -- result["name"] = name; -- result["uuid"] = uuid; -- return result; --} -- --QString BrowserService::getCurrentTotp(const QString& uuid) --{ -- QList> databases; -- if (browserSettings()->searchInAllDatabases()) { -- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { -- auto db = dbWidget->database(); -- if (db) { -- databases << db; -- } -- } -- } else { -- databases << getDatabase(); -- } -- -- auto entryUuid = Tools::hexToUuid(uuid); -- for (const auto& db : databases) { -- auto entry = db->rootGroup()->findEntryByUuid(entryUuid, true); -- if (entry) { -- return entry->totp(); -- } -- } -- -- return {}; --} -- --QString BrowserService::storeKey(const QString& key) --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- bool contains; -- auto dialogResult = MessageBox::Cancel; -- QString id; -- -- do { -- QInputDialog keyDialog; -- connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &keyDialog, SLOT(reject())); -- keyDialog.setWindowTitle(tr("KeePassXC: New key association request")); -- keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n" -- "Give the connection a unique name or ID, for example:\nchrome-laptop.") -- .arg(db->metadata()->name().toHtmlEscaped())); -- keyDialog.setOkButtonText(tr("Save and allow access")); -- keyDialog.setWindowFlags(keyDialog.windowFlags() | Qt::WindowStaysOnTopHint); -- raiseWindow(); -- keyDialog.show(); -- keyDialog.activateWindow(); -- keyDialog.raise(); -- auto ok = keyDialog.exec(); -- -- id = keyDialog.textValue(); -- -- if (ok != QDialog::Accepted || id.isEmpty() || !isDatabaseOpened()) { -- hideWindow(); -- return {}; -- } -- -- contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id); -- if (contains) { -- dialogResult = MessageBox::warning(nullptr, -- tr("KeePassXC: Overwrite existing key?"), -- tr("A shared encryption key with the name \"%1\" " -- "already exists.\nDo you want to overwrite it?") -- .arg(id), -- MessageBox::Overwrite | MessageBox::Cancel, -- MessageBox::Cancel); -- } -- } while (contains && dialogResult == MessageBox::Cancel); -- -- hideWindow(); -- db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key); -- db->metadata()->customData()->set(QString("%1_%2").arg(CustomData::Created, id), -- Clock::currentDateTime().toString(Qt::SystemLocaleShortDate)); -- return id; --} -- --QString BrowserService::getKey(const QString& id) --{ -- auto db = getDatabase(); -- if (!db) { -- return {}; -- } -- -- return db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + id); --} -- --QJsonArray BrowserService::findMatchingEntries(const QString& dbid, -- const QString& siteUrlStr, -- const QString& formUrlStr, -- const QString& realm, -- const StringPairList& keyList, -- const bool httpAuth) --{ -- Q_UNUSED(dbid); -- const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess(); -- const bool ignoreHttpAuth = browserSettings()->httpAuthPermission(); -- const QString siteHost = QUrl(siteUrlStr).host(); -- const QString formHost = QUrl(formUrlStr).host(); -- -- // Check entries for authorization -- QList pwEntriesToConfirm; -- QList pwEntries; -- for (auto* entry : searchEntries(siteUrlStr, formUrlStr, keyList)) { -- if (entry->customData()->contains(BrowserService::OPTION_HIDE_ENTRY) -- && entry->customData()->value(BrowserService::OPTION_HIDE_ENTRY) == TRUE_STR) { -- continue; -- } -- -- if (!httpAuth && entry->customData()->contains(BrowserService::OPTION_ONLY_HTTP_AUTH) -- && entry->customData()->value(BrowserService::OPTION_ONLY_HTTP_AUTH) == TRUE_STR) { -- continue; -- } -- -- // HTTP Basic Auth always needs a confirmation -- if (!ignoreHttpAuth && httpAuth) { -- pwEntriesToConfirm.append(entry); -- continue; -- } -- -- switch (checkAccess(entry, siteHost, formHost, realm)) { -- case Denied: -- continue; -- -- case Unknown: -- if (alwaysAllowAccess) { -- pwEntries.append(entry); -- } else { -- pwEntriesToConfirm.append(entry); -- } -- break; -- -- case Allowed: -- pwEntries.append(entry); -- break; -- } -- } -- -- // Confirm entries -- QList selectedEntriesToConfirm = -- confirmEntries(pwEntriesToConfirm, siteUrlStr, siteHost, formHost, realm, httpAuth); -- if (!selectedEntriesToConfirm.isEmpty()) { -- pwEntries.append(selectedEntriesToConfirm); -- } -- -- if (pwEntries.isEmpty()) { -- return {}; -- } -- -- // Ensure that database is not locked when the popup was visible -- if (!isDatabaseOpened()) { -- return {}; -- } -- -- // Sort results -- pwEntries = sortEntries(pwEntries, siteUrlStr, formUrlStr); -- -- // Fill the list -- QJsonArray result; -- for (auto* entry : pwEntries) { -- result.append(prepareEntry(entry)); -- } -- -- return result; --} -- --void BrowserService::addEntry(const QString& dbid, -- const QString& login, -- const QString& password, -- const QString& siteUrlStr, -- const QString& formUrlStr, -- const QString& realm, -- const QString& group, -- const QString& groupUuid, -- const QSharedPointer& selectedDb) --{ -- // TODO: select database based on this key id -- Q_UNUSED(dbid); -- auto db = selectedDb ? selectedDb : selectedDatabase(); -- if (!db) { -- return; -- } -- -- auto* entry = new Entry(); -- entry->setUuid(QUuid::createUuid()); -- entry->setTitle(QUrl(siteUrlStr).host()); -- entry->setUrl(siteUrlStr); -- entry->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); -- entry->setUsername(login); -- entry->setPassword(password); -- -- // Select a group for the entry -- if (!group.isEmpty()) { -- if (db->rootGroup()) { -- auto selectedGroup = db->rootGroup()->findGroupByUuid(Tools::hexToUuid(groupUuid)); -- if (selectedGroup) { -- entry->setGroup(selectedGroup); -- } else { -- entry->setGroup(getDefaultEntryGroup(db)); -- } -- } -- } else { -- entry->setGroup(getDefaultEntryGroup(db)); -- } -- -- const QString host = QUrl(siteUrlStr).host(); -- const QString submitHost = QUrl(formUrlStr).host(); -- BrowserEntryConfig config; -- config.allow(host); -- -- if (!submitHost.isEmpty()) { -- config.allow(submitHost); -- } -- if (!realm.isEmpty()) { -- config.setRealm(realm); -- } -- config.save(entry); --} -- --bool BrowserService::updateEntry(const QString& dbid, -- const QString& uuid, -- const QString& login, -- const QString& password, -- const QString& siteUrlStr, -- const QString& formUrlStr) --{ -- // TODO: select database based on this key id -- Q_UNUSED(dbid); -- auto db = selectedDatabase(); -- if (!db) { -- return false; -- } -- -- Entry* entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(uuid)); -- if (!entry) { -- // If entry is not found for update, add a new one to the selected database -- addEntry(dbid, login, password, siteUrlStr, formUrlStr, "", "", "", db); -- return true; -- } -- -- // Check if the entry password is a reference. If so, update the original entry instead -- while (entry->attributes()->isReference(EntryAttributes::PasswordKey)) { -- const QUuid referenceUuid = entry->attributes()->referenceUuid(EntryAttributes::PasswordKey); -- if (!referenceUuid.isNull()) { -- entry = db->rootGroup()->findEntryByUuid(referenceUuid); -- if (!entry) { -- return false; -- } -- } -- } -- -- QString username = entry->username(); -- if (username.isEmpty()) { -- return false; -- } -- -- bool result = false; -- if (username.compare(login, Qt::CaseSensitive) != 0 -- || entry->password().compare(password, Qt::CaseSensitive) != 0) { -- MessageBox::Button dialogResult = MessageBox::No; -- if (!browserSettings()->alwaysAllowUpdate()) { -- raiseWindow(); -- dialogResult = MessageBox::question( -- nullptr, -- tr("KeePassXC: Update Entry"), -- tr("Do you want to update the information in %1 - %2?").arg(QUrl(siteUrlStr).host(), username), -- MessageBox::Save | MessageBox::Cancel, -- MessageBox::Cancel, -- MessageBox::Raise); -- } -- -- if (browserSettings()->alwaysAllowUpdate() || dialogResult == MessageBox::Save) { -- entry->beginUpdate(); -- if (!entry->attributes()->isReference(EntryAttributes::UserNameKey)) { -- entry->setUsername(login); -- } -- entry->setPassword(password); -- entry->endUpdate(); -- result = true; -- } -- -- hideWindow(); -- } -- -- return result; --} -- --QList --BrowserService::searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr) --{ -- QList entries; -- auto* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return entries; -- } -- -- for (const auto& group : rootGroup->groupsRecursive(true)) { -- if (group->isRecycled() || !group->resolveSearchingEnabled()) { -- continue; -- } -- -- for (auto* entry : group->entries()) { -- if (entry->isRecycled()) { -- continue; -- } -- -- // Search for additional URL's starting with KP2A_URL -- for (const auto& key : entry->attributes()->keys()) { -- if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), siteUrlStr, formUrlStr) -- && !entries.contains(entry)) { -- entries.append(entry); -- continue; -- } -- } -- -- if (!handleURL(entry->url(), siteUrlStr, formUrlStr)) { -- continue; -- } -- -- // Additional URL check may have already inserted the entry to the list -- if (!entries.contains(entry)) { -- entries.append(entry); -- } -- } -- } -- -- return entries; --} -- --QList --BrowserService::searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList) --{ -- // Check if database is connected with KeePassXC-Browser -- auto databaseConnected = [&](const QSharedPointer& db) { -- for (const StringPair& keyPair : keyList) { -- QString key = db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + keyPair.first); -- if (!key.isEmpty() && keyPair.second == key) { -- return true; -- } -- } -- return false; -- }; -- -- // Get the list of databases to search -- QList> databases; -- if (browserSettings()->searchInAllDatabases()) { -- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { -- auto db = dbWidget->database(); -- if (db && databaseConnected(dbWidget->database())) { -- databases << db; -- } -- } -- } else { -- const auto& db = getDatabase(); -- if (databaseConnected(db)) { -- databases << db; -- } -- } -- -- // Search entries matching the hostname -- QString hostname = QUrl(siteUrlStr).host(); -- QList entries; -- do { -- for (const auto& db : databases) { -- entries << searchEntries(db, siteUrlStr, formUrlStr); -- } -- } while (entries.isEmpty() && removeFirstDomain(hostname)); -- -- return entries; --} -- --void BrowserService::convertAttributesToCustomData(QSharedPointer db) --{ -- if (!db) { -- return; -- } -- -- QList entries = db->rootGroup()->entriesRecursive(); -- QProgressDialog progress(tr("Converting attributes to custom data…"), tr("Abort"), 0, entries.count()); -- progress.setWindowModality(Qt::WindowModal); -- -- int counter = 0; -- int keyCounter = 0; -- for (auto* entry : entries) { -- if (progress.wasCanceled()) { -- return; -- } -- -- if (moveSettingsToCustomData(entry, KEEPASSHTTP_NAME)) { -- ++counter; -- } -- -- if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_OLD_NAME)) { -- ++counter; -- } -- -- if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_NAME)) { -- ++counter; -- } -- -- if (entry->title() == KEEPASSHTTP_NAME || entry->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive)) { -- keyCounter += moveKeysToCustomData(entry, db); -- db->recycleEntry(entry); -- } -- -- progress.setValue(progress.value() + 1); -- } -- progress.reset(); -- -- if (counter > 0) { -- MessageBox::information(nullptr, -- tr("KeePassXC: Converted KeePassHTTP attributes"), -- tr("Successfully converted attributes from %1 entry(s).\n" -- "Moved %2 keys to custom data.", -- "") -- .arg(counter) -- .arg(keyCounter), -- MessageBox::Ok); -- } else if (counter == 0 && keyCounter > 0) { -- MessageBox::information(nullptr, -- tr("KeePassXC: Converted KeePassHTTP attributes"), -- tr("Successfully moved %n keys to custom data.", "", keyCounter), -- MessageBox::Ok); -- } else { -- MessageBox::information(nullptr, -- tr("KeePassXC: No entry with KeePassHTTP attributes found!"), -- tr("The active database does not contain an entry with KeePassHTTP attributes."), -- MessageBox::Ok); -- } -- -- // Rename password groupName -- Group* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return; -- } -- -- for (auto* g : rootGroup->groupsRecursive(true)) { -- if (g->name() == KEEPASSHTTP_GROUP_NAME) { -- g->setName(KEEPASSXCBROWSER_GROUP_NAME); -- break; -- } -- } --} -- --QList --BrowserService::sortEntries(QList& pwEntries, const QString& siteUrlStr, const QString& formUrlStr) --{ -- // Build map of prioritized entries -- QMultiMap priorities; -- for (auto* entry : pwEntries) { -- priorities.insert(sortPriority(getEntryURLs(entry), siteUrlStr, formUrlStr), entry); -- } -- -- auto keys = priorities.uniqueKeys(); -- std::sort(keys.begin(), keys.end(), [](int l, int r) { return l > r; }); -- -- QList results; -- auto sortField = browserSettings()->sortByTitle() ? EntryAttributes::TitleKey : EntryAttributes::UserNameKey; -- for (auto key : keys) { -- // Sort same priority entries by Title or UserName -- auto entries = priorities.values(key); -- std::sort(entries.begin(), entries.end(), [&sortField](Entry* left, Entry* right) { -- return QString::localeAwareCompare(left->attribute(sortField), right->attribute(sortField)) < 0; -- }); -- results << entries; -- if (browserSettings()->bestMatchOnly() && !results.isEmpty()) { -- // Early out once we find the highest batch of matches -- break; -- } -- } -- -- return results; --} -- --QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, -- const QString& siteUrlStr, -- const QString& siteHost, -- const QString& formUrlStr, -- const QString& realm, -- const bool httpAuth) --{ -- if (pwEntriesToConfirm.isEmpty() || m_dialogActive) { -- return {}; -- } -- -- m_dialogActive = true; -- updateWindowState(); -- BrowserAccessControlDialog accessControlDialog; -- -- connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &accessControlDialog, SLOT(reject())); -- -- connect(&accessControlDialog, &BrowserAccessControlDialog::disableAccess, [&](QTableWidgetItem* item) { -- auto entry = pwEntriesToConfirm[item->row()]; -- BrowserEntryConfig config; -- config.load(entry); -- config.deny(siteHost); -- if (!formUrlStr.isEmpty() && siteHost != formUrlStr) { -- config.deny(formUrlStr); -- } -- if (!realm.isEmpty()) { -- config.setRealm(realm); -- } -- config.save(entry); -- }); -- -- accessControlDialog.setItems(pwEntriesToConfirm, siteUrlStr, httpAuth); -- -- QList allowedEntries; -- if (accessControlDialog.exec() == QDialog::Accepted) { -- const auto selectedEntries = accessControlDialog.getSelectedEntries(); -- for (auto item : accessControlDialog.getSelectedEntries()) { -- auto entry = pwEntriesToConfirm[item->row()]; -- if (accessControlDialog.remember()) { -- BrowserEntryConfig config; -- config.load(entry); -- config.allow(siteHost); -- if (!formUrlStr.isEmpty() && siteHost != formUrlStr) { -- config.allow(formUrlStr); -- } -- if (!realm.isEmpty()) { -- config.setRealm(realm); -- } -- config.save(entry); -- } -- allowedEntries.append(entry); -- } -- } -- --#ifdef Q_OS_MAC -- // Re-hide the application if it wasn't visible before -- // only affects macOS because dialogs force the main window to show -- hideWindow(); --#endif -- -- m_dialogActive = false; -- -- return allowedEntries; --} -- --QJsonObject BrowserService::prepareEntry(const Entry* entry) --{ -- QJsonObject res; -- res["login"] = entry->resolveMultiplePlaceholders(entry->username()); -- res["password"] = entry->resolveMultiplePlaceholders(entry->password()); -- res["name"] = entry->resolveMultiplePlaceholders(entry->title()); -- res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex()); -- res["group"] = entry->resolveMultiplePlaceholders(entry->group()->name()); -- -- if (entry->hasTotp()) { -- res["totp"] = entry->totp(); -- } -- -- if (entry->isExpired()) { -- res["expired"] = TRUE_STR; -- } -- -- if (entry->customData()->contains(BrowserService::OPTION_SKIP_AUTO_SUBMIT)) { -- res["skipAutoSubmit"] = entry->customData()->value(BrowserService::OPTION_SKIP_AUTO_SUBMIT); -- } -- -- if (browserSettings()->supportKphFields()) { -- const EntryAttributes* attr = entry->attributes(); -- QJsonArray stringFields; -- for (const auto& key : attr->keys()) { -- if (key.startsWith("KPH: ")) { -- QJsonObject sField; -- sField[key] = entry->resolveMultiplePlaceholders(attr->value(key)); -- stringFields.append(sField); -- } -- } -- res["stringFields"] = stringFields; -- } -- return res; --} -- --BrowserService::Access --BrowserService::checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm) --{ -- if (entry->isExpired()) { -- return browserSettings()->allowExpiredCredentials() ? Allowed : Denied; -- } -- -- BrowserEntryConfig config; -- if (!config.load(entry)) { -- return Unknown; -- } -- if ((config.isAllowed(siteHost)) && (formHost.isEmpty() || config.isAllowed(formHost))) { -- return Allowed; -- } -- if ((config.isDenied(siteHost)) || (!formHost.isEmpty() && config.isDenied(formHost))) { -- return Denied; -- } -- if (!realm.isEmpty() && config.realm() != realm) { -- return Denied; -- } -- return Unknown; --} -- --Group* BrowserService::getDefaultEntryGroup(const QSharedPointer& selectedDb) --{ -- auto db = selectedDb ? selectedDb : getDatabase(); -- if (!db) { -- return nullptr; -- } -- -- auto* rootGroup = db->rootGroup(); -- if (!rootGroup) { -- return nullptr; -- } -- -- for (auto* g : rootGroup->groupsRecursive(true)) { -- if (g->name() == KEEPASSXCBROWSER_GROUP_NAME && !g->isRecycled()) { -- return db->rootGroup()->findGroupByUuid(g->uuid()); -- } -- } -- -- auto* group = new Group(); -- group->setUuid(QUuid::createUuid()); -- group->setName(KEEPASSXCBROWSER_GROUP_NAME); -- group->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); -- group->setParent(rootGroup); -- return group; --} -- --// Returns the maximum sort priority given a set of match urls and the --// extension provided site and form url. --int BrowserService::sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr) --{ -- QList priorityList; -- // NOTE: QUrl::matches is utterly broken in Qt < 5.11, so we work around that -- // by removing parts of the url that we don't match and direct matching others -- const auto stdOpts = QUrl::RemoveFragment | QUrl::RemoveUserInfo; -- const auto siteUrl = QUrl(siteUrlStr).adjusted(stdOpts); -- const auto formUrl = QUrl(formUrlStr).adjusted(stdOpts); -- -- auto getPriority = [&](const QString& givenUrl) { -- auto url = QUrl::fromUserInput(givenUrl).adjusted(stdOpts); -- -- // Default to https scheme if undefined -- if (url.scheme().isEmpty() || !givenUrl.contains("://")) { -- url.setScheme("https"); -- } -- -- // Add the empty path to the URL if it's missing. -- // URL's from the extension always have a path set, entry URL's can be without. -- if (url.path().isEmpty() && !url.hasFragment() && !url.hasQuery()) { -- url.setPath("/"); -- } -- -- // Reject invalid urls and hosts, except 'localhost', and scheme mismatch -- if (!url.isValid() || (!url.host().contains(".") && url.host() != "localhost") -- || url.scheme() != siteUrl.scheme()) { -- return 0; -- } -- -- // Exact match with site url or form url -- if (url.matches(siteUrl, QUrl::None) || url.matches(formUrl, QUrl::None)) { -- return 100; -- } -- -- // Exact match without the query string -- if (url.matches(siteUrl, QUrl::RemoveQuery) || url.matches(formUrl, QUrl::RemoveQuery)) { -- return 90; -- } -- -- // Match without path (ie, FQDN match), form url prioritizes lower than site url -- if (url.host() == siteUrl.host()) { -- return 80; -- } -- if (url.host() == formUrl.host()) { -- return 70; -- } -- -- // Site/form url ends with given url (subdomain mismatch) -- if (siteUrl.host().endsWith(url.host())) { -- return 60; -- } -- if (formUrl.host().endsWith(url.host())) { -- return 50; -- } -- -- // No valid match found -- return 0; -- }; -- -- for (const auto& entryUrl : urls) { -- priorityList << getPriority(entryUrl); -- } -- -- return *std::max_element(priorityList.begin(), priorityList.end()); --} -- --bool BrowserService::schemeFound(const QString& url) --{ -- QUrl address(url); -- return !address.scheme().isEmpty(); --} -- --bool BrowserService::removeFirstDomain(QString& hostname) --{ -- int pos = hostname.indexOf("."); -- if (pos < 0) { -- return false; -- } -- -- // Don't remove the second-level domain if it's the only one -- if (hostname.count(".") > 1) { -- hostname = hostname.mid(pos + 1); -- return !hostname.isEmpty(); -- } -- -- // Nothing removed -- return false; --} -- --bool BrowserService::handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr) --{ -- if (entryUrl.isEmpty()) { -- return false; -- } -- -- QUrl entryQUrl; -- if (entryUrl.contains("://")) { -- entryQUrl = entryUrl; -- } else { -- entryQUrl = QUrl::fromUserInput(entryUrl); -- -- if (browserSettings()->matchUrlScheme()) { -- entryQUrl.setScheme("https"); -- } -- } -- -- // Make a direct compare if a local file is used -- if (siteUrlStr.contains("file://")) { -- return entryUrl == formUrlStr; -- } -- -- // URL host validation fails -- if (entryQUrl.host().isEmpty()) { -- return false; -- } -- -- // Match port, if used -- QUrl siteQUrl(siteUrlStr); -- if (entryQUrl.port() > 0 && entryQUrl.port() != siteQUrl.port()) { -- return false; -- } -- -- // Match scheme -- if (browserSettings()->matchUrlScheme() && !entryQUrl.scheme().isEmpty() -- && entryQUrl.scheme().compare(siteQUrl.scheme()) != 0) { -- return false; -- } -- -- // Check for illegal characters -- QRegularExpression re("[<>\\^`{|}]"); -- if (re.match(entryUrl).hasMatch()) { -- return false; -- } -- -- // Match the base domain -- if (baseDomain(siteQUrl.host()) != baseDomain(entryQUrl.host())) { -- return false; -- } -- -- // Match the subdomains with the limited wildcard -- if (siteQUrl.host().endsWith(entryQUrl.host())) { -- return true; -- } -- -- return false; --}; -- --/** -- * Gets the base domain of URL. -- * -- * Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk -- */ --QString BrowserService::baseDomain(const QString& hostname) const --{ -- QUrl qurl = QUrl::fromUserInput(hostname); -- QString host = qurl.host(); -- -- // If the hostname is an IP address, return it directly -- QHostAddress hostAddress(hostname); -- if (!hostAddress.isNull()) { -- return hostname; -- } -- -- if (host.isEmpty() || !host.contains(qurl.topLevelDomain())) { -- return {}; -- } -- -- // Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example -- host.chop(qurl.topLevelDomain().length()); -- // Split the URL and select the last part, e.g. https://another.example -> example -- QString baseDomain = host.split('.').last(); -- // Append the top level domain back to the URL, e.g. example -> example.co.uk -- baseDomain.append(qurl.topLevelDomain()); -- return baseDomain; --} -- --QSharedPointer BrowserService::getDatabase() --{ -- if (m_currentDatabaseWidget) { -- return m_currentDatabaseWidget->database(); -- } -- return {}; --} -- --QSharedPointer BrowserService::selectedDatabase() --{ -- QList databaseWidgets; -- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { -- // Add only open databases -- if (!dbWidget->isLocked()) { -- databaseWidgets << dbWidget; -- } -- } -- -- BrowserEntrySaveDialog browserEntrySaveDialog; -- int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget); -- if (openDatabaseCount > 1) { -- int res = browserEntrySaveDialog.exec(); -- if (res == QDialog::Accepted) { -- const auto selectedDatabase = browserEntrySaveDialog.getSelected(); -- if (selectedDatabase.length() > 0) { -- int index = selectedDatabase[0]->data(Qt::UserRole).toInt(); -- return databaseWidgets[index]->database(); -- } -- } else { -- return {}; -- } -- } -- -- // Return current database -- return getDatabase(); --} -- --bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name) --{ -- if (entry->attributes()->contains(name)) { -- QString attr = entry->attributes()->value(name); -- entry->beginUpdate(); -- if (!attr.isEmpty()) { -- entry->customData()->set(KEEPASSXCBROWSER_NAME, attr); -- } -- entry->attributes()->remove(name); -- entry->endUpdate(); -- return true; -- } -- return false; --} -- --int BrowserService::moveKeysToCustomData(Entry* entry, QSharedPointer db) --{ -- int keyCounter = 0; -- for (const auto& key : entry->attributes()->keys()) { -- if (key.contains(CustomData::BrowserLegacyKeyPrefix)) { -- QString publicKey = key; -- publicKey.remove(CustomData::BrowserLegacyKeyPrefix); -- -- // Add key to database custom data -- if (db && !db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + publicKey)) { -- db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + publicKey, -- entry->attributes()->value(key)); -- ++keyCounter; -- } -- } -- } -- -- return keyCounter; --} -- --bool BrowserService::checkLegacySettings(QSharedPointer db) --{ -- if (!db || !browserSettings()->isEnabled() || browserSettings()->noMigrationPrompt()) { -- return false; -- } -- -- bool legacySettingsFound = false; -- QList entries = db->rootGroup()->entriesRecursive(); -- for (const auto& e : entries) { -- if (e->isRecycled()) { -- continue; -- } -- -- if ((e->attributes()->contains(KEEPASSHTTP_NAME) || e->attributes()->contains(KEEPASSXCBROWSER_NAME)) -- || (e->title() == KEEPASSHTTP_NAME || e->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive))) { -- legacySettingsFound = true; -- break; -- } -- } -- -- if (!legacySettingsFound) { -- return false; -- } -- -- auto* checkbox = new QCheckBox(tr("Don't show this warning again")); -- QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { -- browserSettings()->setNoMigrationPrompt(static_cast(state) == Qt::CheckState::Checked); -- }); -- -- auto dialogResult = -- MessageBox::warning(nullptr, -- tr("KeePassXC: Legacy browser integration settings detected"), -- tr("Your KeePassXC-Browser settings need to be moved into the database settings.\n" -- "This is necessary to maintain your current browser connections.\n" -- "Would you like to migrate your existing settings now?"), -- MessageBox::Yes | MessageBox::No, -- MessageBox::NoButton, -- MessageBox::Raise, -- checkbox); -- -- return dialogResult == MessageBox::Yes; --} -- --QStringList BrowserService::getEntryURLs(const Entry* entry) --{ -- QStringList urlList; -- urlList << entry->url(); -- -- // Handle additional URL's -- for (const auto& key : entry->attributes()->keys()) { -- if (key.startsWith(ADDITIONAL_URL)) { -- urlList << entry->attributes()->value(key); -- } -- } -- -- return urlList; --} -- --void BrowserService::hideWindow() const --{ -- if (m_prevWindowState == WindowState::Minimized) { -- getMainWindow()->showMinimized(); -- } else { --#ifdef Q_OS_MACOS -- if (m_prevWindowState == WindowState::Hidden) { -- macUtils()->hideOwnWindow(); -- } else { -- macUtils()->raiseLastActiveWindow(); -- } --#else -- if (m_prevWindowState == WindowState::Hidden) { -- getMainWindow()->hideWindow(); -- } else { -- getMainWindow()->lower(); -- } --#endif -- } --} -- --void BrowserService::raiseWindow(const bool force) --{ -- m_prevWindowState = WindowState::Normal; -- if (getMainWindow()->isMinimized()) { -- m_prevWindowState = WindowState::Minimized; -- } --#ifdef Q_OS_MACOS -- Q_UNUSED(force) -- -- if (macUtils()->isHidden()) { -- m_prevWindowState = WindowState::Hidden; -- } -- macUtils()->raiseOwnWindow(); -- Tools::wait(500); --#else -- if (getMainWindow()->isHidden()) { -- m_prevWindowState = WindowState::Hidden; -- } -- -- if (force) { -- getMainWindow()->bringToFront(); -- } --#endif --} -- --void BrowserService::updateWindowState() --{ -- m_prevWindowState = WindowState::Normal; -- if (getMainWindow()->isMinimized()) { -- m_prevWindowState = WindowState::Minimized; -- } --#ifdef Q_OS_MACOS -- if (macUtils()->isHidden()) { -- m_prevWindowState = WindowState::Hidden; -- } --#else -- if (getMainWindow()->isHidden()) { -- m_prevWindowState = WindowState::Hidden; -- } --#endif --} -- --void BrowserService::databaseLocked(DatabaseWidget* dbWidget) --{ -- if (dbWidget) { -- QJsonObject msg; -- msg["action"] = QString("database-locked"); -- m_browserHost->sendClientMessage(msg); -- } --} -- --void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) --{ -- if (dbWidget) { --#ifdef Q_OS_MAC -- if (m_bringToFrontRequested) { -- m_bringToFrontRequested = false; -- hideWindow(); -- } --#endif -- -- QJsonObject msg; -- msg["action"] = QString("database-unlocked"); -- m_browserHost->sendClientMessage(msg); -- -- auto db = dbWidget->database(); -- if (checkLegacySettings(db)) { -- convertAttributesToCustomData(db); -- } -- } --} -- --void BrowserService::activeDatabaseChanged(DatabaseWidget* dbWidget) --{ -- // Only emit these signals when we are not searching in all databases -- if (dbWidget && !browserSettings()->searchInAllDatabases()) { -- if (dbWidget->isLocked()) { -- databaseLocked(dbWidget); -- } else { -- databaseUnlocked(dbWidget); -- } -- } -- -- m_currentDatabaseWidget = dbWidget; --} -- --void BrowserService::processClientMessage(const QJsonObject& message) --{ -- auto clientID = message["clientID"].toString(); -- if (clientID.isEmpty()) { -- return; -- } -- -- // Create a new client action if we haven't seen this id yet -- if (!m_browserClients.contains(clientID)) { -- m_browserClients.insert(clientID, QSharedPointer::create()); -- } -- -- auto& action = m_browserClients.value(clientID); -- auto response = action->processClientMessage(message); -- m_browserHost->sendClientMessage(response); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserService.h keepassxc-2.6.4-patched/src/browser/BrowserService.h ---- keepassxc-2.6.4-orig/src/browser/BrowserService.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserService.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,174 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERSERVICE_H --#define BROWSERSERVICE_H -- --#include "core/Entry.h" --#include --#include --#include --#include -- --typedef QPair StringPair; --typedef QList StringPairList; -- --enum --{ -- max_length = 16 * 1024 --}; -- --class DatabaseWidget; --class BrowserHost; --class BrowserAction; -- --class BrowserService : public QObject --{ -- Q_OBJECT -- --public: -- explicit BrowserService(); -- static BrowserService* instance(); -- -- void setEnabled(bool enabled); -- -- QString getKey(const QString& id); -- QString storeKey(const QString& key); -- QString getDatabaseHash(bool legacy = false); -- -- bool isDatabaseOpened() const; -- bool openDatabase(bool triggerUnlock); -- void lockDatabase(); -- -- QJsonObject getDatabaseGroups(); -- QJsonObject createNewGroup(const QString& groupName); -- QString getCurrentTotp(const QString& uuid); -- -- void addEntry(const QString& dbid, -- const QString& login, -- const QString& password, -- const QString& siteUrlStr, -- const QString& formUrlStr, -- const QString& realm, -- const QString& group, -- const QString& groupUuid, -- const QSharedPointer& selectedDb = {}); -- bool updateEntry(const QString& dbid, -- const QString& uuid, -- const QString& login, -- const QString& password, -- const QString& siteUrlStr, -- const QString& formUrlStr); -- -- QJsonArray findMatchingEntries(const QString& dbid, -- const QString& siteUrlStr, -- const QString& formUrlStr, -- const QString& realm, -- const StringPairList& keyList, -- const bool httpAuth = false); -- -- static void convertAttributesToCustomData(QSharedPointer db); -- -- static const QString KEEPASSXCBROWSER_NAME; -- static const QString KEEPASSXCBROWSER_OLD_NAME; -- static const QString OPTION_SKIP_AUTO_SUBMIT; -- static const QString OPTION_HIDE_ENTRY; -- static const QString OPTION_ONLY_HTTP_AUTH; -- static const QString ADDITIONAL_URL; -- --signals: -- void requestUnlock(); -- --public slots: -- void databaseLocked(DatabaseWidget* dbWidget); -- void databaseUnlocked(DatabaseWidget* dbWidget); -- void activeDatabaseChanged(DatabaseWidget* dbWidget); -- --private slots: -- void processClientMessage(const QJsonObject& message); -- --private: -- enum Access -- { -- Denied, -- Unknown, -- Allowed -- }; -- -- enum WindowState -- { -- Normal, -- Minimized, -- Hidden -- }; -- -- QList -- searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr); -- QList searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList); -- QList sortEntries(QList& pwEntries, const QString& siteUrlStr, const QString& formUrlStr); -- QList confirmEntries(QList& pwEntriesToConfirm, -- const QString& siteUrlStr, -- const QString& siteHost, -- const QString& formUrlStr, -- const QString& realm, -- const bool httpAuth); -- QJsonObject prepareEntry(const Entry* entry); -- QJsonArray getChildrenFromGroup(Group* group); -- Access checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm); -- Group* getDefaultEntryGroup(const QSharedPointer& selectedDb = {}); -- int sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr); -- bool schemeFound(const QString& url); -- bool removeFirstDomain(QString& hostname); -- bool handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr); -- QString baseDomain(const QString& hostname) const; -- QSharedPointer getDatabase(); -- QSharedPointer selectedDatabase(); -- QString getDatabaseRootUuid(); -- QString getDatabaseRecycleBinUuid(); -- bool checkLegacySettings(QSharedPointer db); -- QStringList getEntryURLs(const Entry* entry); -- -- void hideWindow() const; -- void raiseWindow(const bool force = false); -- void updateWindowState(); -- -- static bool moveSettingsToCustomData(Entry* entry, const QString& name); -- static int moveKeysToCustomData(Entry* entry, QSharedPointer db); -- -- QPointer m_browserHost; -- QHash> m_browserClients; -- -- bool m_dialogActive; -- bool m_bringToFrontRequested; -- WindowState m_prevWindowState; -- QUuid m_keepassBrowserUUID; -- -- QPointer m_currentDatabaseWidget; -- -- Q_DISABLE_COPY(BrowserService); -- -- friend class TestBrowser; --}; -- --static inline BrowserService* browserService() --{ -- return BrowserService::instance(); --} -- --#endif // BROWSERSERVICE_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettings.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettings.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserSettings.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettings.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,536 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserSettings.h" --#include "core/Config.h" --#include "core/PasswordHealth.h" -- --BrowserSettings* BrowserSettings::m_instance(nullptr); -- --BrowserSettings* BrowserSettings::instance() --{ -- if (!m_instance) { -- m_instance = new BrowserSettings(); -- } -- -- return m_instance; --} -- --bool BrowserSettings::isEnabled() --{ -- return config()->get(Config::Browser_Enabled).toBool(); --} -- --void BrowserSettings::setEnabled(bool enabled) --{ -- config()->set(Config::Browser_Enabled, enabled); --} -- --bool BrowserSettings::showNotification() --{ -- return config()->get(Config::Browser_ShowNotification).toBool(); --} -- --void BrowserSettings::setShowNotification(bool showNotification) --{ -- config()->set(Config::Browser_ShowNotification, showNotification); --} -- --bool BrowserSettings::bestMatchOnly() --{ -- return config()->get(Config::Browser_BestMatchOnly).toBool(); --} -- --void BrowserSettings::setBestMatchOnly(bool bestMatchOnly) --{ -- config()->set(Config::Browser_BestMatchOnly, bestMatchOnly); --} -- --bool BrowserSettings::unlockDatabase() --{ -- return config()->get(Config::Browser_UnlockDatabase).toBool(); --} -- --void BrowserSettings::setUnlockDatabase(bool unlockDatabase) --{ -- config()->set(Config::Browser_UnlockDatabase, unlockDatabase); --} -- --bool BrowserSettings::matchUrlScheme() --{ -- return config()->get(Config::Browser_MatchUrlScheme).toBool(); --} -- --void BrowserSettings::setMatchUrlScheme(bool matchUrlScheme) --{ -- config()->set(Config::Browser_MatchUrlScheme, matchUrlScheme); --} -- --bool BrowserSettings::sortByUsername() --{ -- return config()->get(Config::Browser_SortByUsername).toBool(); --} -- --void BrowserSettings::setSortByUsername(bool sortByUsername) --{ -- config()->set(Config::Browser_SortByUsername, sortByUsername); --} -- --bool BrowserSettings::sortByTitle() --{ -- return !sortByUsername(); --} -- --void BrowserSettings::setSortByTitle(bool sortByUsertitle) --{ -- setSortByUsername(!sortByUsertitle); --} -- --bool BrowserSettings::alwaysAllowAccess() --{ -- return config()->get(Config::Browser_AlwaysAllowAccess).toBool(); --} -- --void BrowserSettings::setAlwaysAllowAccess(bool alwaysAllowAccess) --{ -- config()->set(Config::Browser_AlwaysAllowAccess, alwaysAllowAccess); --} -- --bool BrowserSettings::alwaysAllowUpdate() --{ -- return config()->get(Config::Browser_AlwaysAllowUpdate).toBool(); --} -- --void BrowserSettings::setAlwaysAllowUpdate(bool alwaysAllowUpdate) --{ -- config()->set(Config::Browser_AlwaysAllowUpdate, alwaysAllowUpdate); --} -- --bool BrowserSettings::httpAuthPermission() --{ -- return config()->get(Config::Browser_HttpAuthPermission).toBool(); --} -- --void BrowserSettings::setHttpAuthPermission(bool httpAuthPermission) --{ -- config()->set(Config::Browser_HttpAuthPermission, httpAuthPermission); --} -- --bool BrowserSettings::searchInAllDatabases() --{ -- return config()->get(Config::Browser_SearchInAllDatabases).toBool(); --} -- --void BrowserSettings::setSearchInAllDatabases(bool searchInAllDatabases) --{ -- config()->set(Config::Browser_SearchInAllDatabases, searchInAllDatabases); --} -- --bool BrowserSettings::supportKphFields() --{ -- return config()->get(Config::Browser_SupportKphFields).toBool(); --} -- --void BrowserSettings::setSupportKphFields(bool supportKphFields) --{ -- config()->set(Config::Browser_SupportKphFields, supportKphFields); --} -- --bool BrowserSettings::noMigrationPrompt() --{ -- return config()->get(Config::Browser_NoMigrationPrompt).toBool(); --} -- --void BrowserSettings::setNoMigrationPrompt(bool prompt) --{ -- config()->set(Config::Browser_NoMigrationPrompt, prompt); --} -- --bool BrowserSettings::useCustomProxy() --{ -- return config()->get(Config::Browser_UseCustomProxy).toBool(); --} -- --void BrowserSettings::setUseCustomProxy(bool enabled) --{ -- config()->set(Config::Browser_UseCustomProxy, enabled); --} -- --QString BrowserSettings::customProxyLocation() --{ -- return config()->get(Config::Browser_CustomProxyLocation).toString(); --} -- --void BrowserSettings::setCustomProxyLocation(const QString& location) --{ -- config()->set(Config::Browser_CustomProxyLocation, location); --} -- --bool BrowserSettings::customBrowserSupport() --{ -- return config()->get(Config::Browser_UseCustomBrowser).toBool(); --} -- --void BrowserSettings::setCustomBrowserSupport(bool enabled) --{ -- config()->set(Config::Browser_UseCustomBrowser, enabled); --} -- --int BrowserSettings::customBrowserType() --{ -- return config()->get(Config::Browser_CustomBrowserType).toInt(); --} -- --void BrowserSettings::setCustomBrowserType(int type) --{ -- config()->set(Config::Browser_CustomBrowserType, type); --} -- --QString BrowserSettings::customBrowserLocation() --{ -- return config()->get(Config::Browser_CustomBrowserLocation).toString(); --} -- --void BrowserSettings::setCustomBrowserLocation(const QString& location) --{ -- config()->set(Config::Browser_CustomBrowserLocation, location); --} -- --QString BrowserSettings::proxyLocation() --{ -- return m_nativeMessageInstaller.getProxyPath(); --} -- --#ifdef QT_DEBUG --QString BrowserSettings::customExtensionId() --{ -- return config()->get(Config::Browser_CustomExtensionId).toString(); --} -- --void BrowserSettings::setCustomExtensionId(const QString& id) --{ -- config()->set(Config::Browser_CustomExtensionId, id); --} --#endif -- --bool BrowserSettings::updateBinaryPath() --{ -- return config()->get(Config::Browser_UpdateBinaryPath).toBool(); --} -- --void BrowserSettings::setUpdateBinaryPath(bool enabled) --{ -- config()->set(Config::Browser_UpdateBinaryPath, enabled); --} -- --bool BrowserSettings::allowExpiredCredentials() --{ -- return config()->get(Config::Browser_AllowExpiredCredentials).toBool(); --} -- --void BrowserSettings::setAllowExpiredCredentials(bool enabled) --{ -- config()->set(Config::Browser_AllowExpiredCredentials, enabled); --} -- --bool BrowserSettings::browserSupport(BrowserShared::SupportedBrowsers browser) --{ -- return m_nativeMessageInstaller.isBrowserEnabled(browser); --} -- --void BrowserSettings::setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled) --{ -- m_nativeMessageInstaller.setBrowserEnabled(browser, enabled); --} -- --bool BrowserSettings::passwordUseNumbers() --{ -- return config()->get(Config::PasswordGenerator_Numbers).toBool(); --} -- --void BrowserSettings::setPasswordUseNumbers(bool useNumbers) --{ -- config()->set(Config::PasswordGenerator_Numbers, useNumbers); --} -- --bool BrowserSettings::passwordUseLowercase() --{ -- return config()->get(Config::PasswordGenerator_LowerCase).toBool(); --} -- --void BrowserSettings::setPasswordUseLowercase(bool useLowercase) --{ -- config()->set(Config::PasswordGenerator_LowerCase, useLowercase); --} -- --bool BrowserSettings::passwordUseUppercase() --{ -- return config()->get(Config::PasswordGenerator_UpperCase).toBool(); --} -- --void BrowserSettings::setPasswordUseUppercase(bool useUppercase) --{ -- config()->set(Config::PasswordGenerator_UpperCase, useUppercase); --} -- --bool BrowserSettings::passwordUseSpecial() --{ -- return config()->get(Config::PasswordGenerator_SpecialChars).toBool(); --} -- --void BrowserSettings::setPasswordUseSpecial(bool useSpecial) --{ -- config()->set(Config::PasswordGenerator_SpecialChars, useSpecial); --} -- --bool BrowserSettings::passwordUseBraces() --{ -- return config()->get(Config::PasswordGenerator_Braces).toBool(); --} -- --void BrowserSettings::setPasswordUseBraces(bool useBraces) --{ -- config()->set(Config::PasswordGenerator_Braces, useBraces); --} -- --bool BrowserSettings::passwordUsePunctuation() --{ -- return config()->get(Config::PasswordGenerator_Punctuation).toBool(); --} -- --void BrowserSettings::setPasswordUsePunctuation(bool usePunctuation) --{ -- config()->set(Config::PasswordGenerator_Punctuation, usePunctuation); --} -- --bool BrowserSettings::passwordUseQuotes() --{ -- return config()->get(Config::PasswordGenerator_Quotes).toBool(); --} -- --void BrowserSettings::setPasswordUseQuotes(bool useQuotes) --{ -- config()->set(Config::PasswordGenerator_Quotes, useQuotes); --} -- --bool BrowserSettings::passwordUseDashes() --{ -- return config()->get(Config::PasswordGenerator_Dashes).toBool(); --} -- --void BrowserSettings::setPasswordUseDashes(bool useDashes) --{ -- config()->set(Config::PasswordGenerator_Dashes, useDashes); --} -- --bool BrowserSettings::passwordUseMath() --{ -- return config()->get(Config::PasswordGenerator_Math).toBool(); --} -- --void BrowserSettings::setPasswordUseMath(bool useMath) --{ -- config()->set(Config::PasswordGenerator_Math, useMath); --} -- --bool BrowserSettings::passwordUseLogograms() --{ -- return config()->get(Config::PasswordGenerator_Logograms).toBool(); --} -- --void BrowserSettings::setPasswordUseLogograms(bool useLogograms) --{ -- config()->set(Config::PasswordGenerator_Logograms, useLogograms); --} -- --bool BrowserSettings::passwordUseEASCII() --{ -- return config()->get(Config::PasswordGenerator_EASCII).toBool(); --} -- --void BrowserSettings::setPasswordUseEASCII(bool useEASCII) --{ -- config()->set(Config::PasswordGenerator_EASCII, useEASCII); --} -- --bool BrowserSettings::advancedMode() --{ -- return config()->get(Config::PasswordGenerator_AdvancedMode).toBool(); --} -- --void BrowserSettings::setAdvancedMode(bool advancedMode) --{ -- config()->set(Config::PasswordGenerator_AdvancedMode, advancedMode); --} -- --QString BrowserSettings::passwordAdditionalChars() --{ -- return config()->get(Config::PasswordGenerator_AdditionalChars).toString(); --} -- --void BrowserSettings::setPasswordAdditionalChars(const QString& chars) --{ -- config()->set(Config::PasswordGenerator_AdditionalChars, chars); --} -- --QString BrowserSettings::passwordExcludedChars() --{ -- return config()->get(Config::PasswordGenerator_ExcludedChars).toString(); --} -- --void BrowserSettings::setPasswordExcludedChars(const QString& chars) --{ -- config()->set(Config::PasswordGenerator_ExcludedChars, chars); --} -- --int BrowserSettings::passPhraseWordCount() --{ -- return config()->get(Config::PasswordGenerator_WordCount).toInt(); --} -- --void BrowserSettings::setPassPhraseWordCount(int wordCount) --{ -- config()->set(Config::PasswordGenerator_WordCount, wordCount); --} -- --QString BrowserSettings::passPhraseWordSeparator() --{ -- return config()->get(Config::PasswordGenerator_WordSeparator).toString(); --} -- --void BrowserSettings::setPassPhraseWordSeparator(const QString& separator) --{ -- config()->set(Config::PasswordGenerator_WordSeparator, separator); --} -- --int BrowserSettings::generatorType() --{ -- return config()->get(Config::PasswordGenerator_Type).toInt(); --} -- --void BrowserSettings::setGeneratorType(int type) --{ -- config()->set(Config::PasswordGenerator_Type, type); --} -- --bool BrowserSettings::passwordEveryGroup() --{ -- return config()->get(Config::PasswordGenerator_EnsureEvery).toBool(); --} -- --void BrowserSettings::setPasswordEveryGroup(bool everyGroup) --{ -- config()->set(Config::PasswordGenerator_EnsureEvery, everyGroup); --} -- --bool BrowserSettings::passwordExcludeAlike() --{ -- return config()->get(Config::PasswordGenerator_ExcludeAlike).toBool(); --} -- --void BrowserSettings::setPasswordExcludeAlike(bool excludeAlike) --{ -- config()->set(Config::PasswordGenerator_ExcludeAlike, excludeAlike); --} -- --int BrowserSettings::passwordLength() --{ -- return config()->get(Config::PasswordGenerator_Length).toInt(); --} -- --void BrowserSettings::setPasswordLength(int length) --{ -- config()->set(Config::PasswordGenerator_Length, length); -- m_passwordGenerator.setLength(length); --} -- --PasswordGenerator::CharClasses BrowserSettings::passwordCharClasses() --{ -- PasswordGenerator::CharClasses classes; -- if (passwordUseLowercase()) { -- classes |= PasswordGenerator::LowerLetters; -- } -- if (passwordUseUppercase()) { -- classes |= PasswordGenerator::UpperLetters; -- } -- if (passwordUseNumbers()) { -- classes |= PasswordGenerator::Numbers; -- } -- if (passwordUseSpecial()) { -- classes |= PasswordGenerator::SpecialCharacters; -- } -- if (passwordUseBraces()) { -- classes |= PasswordGenerator::Braces; -- } -- if (passwordUsePunctuation()) { -- classes |= PasswordGenerator::Punctuation; -- } -- if (passwordUseQuotes()) { -- classes |= PasswordGenerator::Quotes; -- } -- if (passwordUseDashes()) { -- classes |= PasswordGenerator::Dashes; -- } -- if (passwordUseMath()) { -- classes |= PasswordGenerator::Math; -- } -- if (passwordUseLogograms()) { -- classes |= PasswordGenerator::Logograms; -- } -- if (passwordUseEASCII()) { -- classes |= PasswordGenerator::EASCII; -- } -- return classes; --} -- --PasswordGenerator::GeneratorFlags BrowserSettings::passwordGeneratorFlags() --{ -- PasswordGenerator::GeneratorFlags flags; -- if (passwordExcludeAlike()) { -- flags |= PasswordGenerator::ExcludeLookAlike; -- } -- if (passwordEveryGroup()) { -- flags |= PasswordGenerator::CharFromEveryGroup; -- } -- return flags; --} -- --QJsonObject BrowserSettings::generatePassword() --{ -- QJsonObject password; -- if (generatorType() == 0) { -- m_passwordGenerator.setLength(passwordLength()); -- m_passwordGenerator.setCharClasses(passwordCharClasses()); -- m_passwordGenerator.setFlags(passwordGeneratorFlags()); -- const QString pw = m_passwordGenerator.generatePassword(); -- password["entropy"] = PasswordHealth(pw).entropy(); -- password["password"] = pw; -- } else { -- m_passPhraseGenerator.setWordCount(passPhraseWordCount()); -- m_passPhraseGenerator.setWordSeparator(passPhraseWordSeparator()); -- password["entropy"] = m_passPhraseGenerator.estimateEntropy(); -- password["password"] = m_passPhraseGenerator.generatePassphrase(); -- } -- return password; --} -- --void BrowserSettings::updateBinaryPaths() --{ -- m_nativeMessageInstaller.updateBinaryPaths(); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettings.h keepassxc-2.6.4-patched/src/browser/BrowserSettings.h ---- keepassxc-2.6.4-orig/src/browser/BrowserSettings.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettings.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,142 +0,0 @@ --/* -- * Copyright (C) 2013 Francois Ferrand -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERSETTINGS_H --#define BROWSERSETTINGS_H -- --#include "BrowserShared.h" --#include "NativeMessageInstaller.h" --#include "core/PassphraseGenerator.h" --#include "core/PasswordGenerator.h" -- --class BrowserSettings --{ --public: -- explicit BrowserSettings() = default; -- static BrowserSettings* instance(); -- -- bool isEnabled(); -- void setEnabled(bool enabled); -- -- bool showNotification(); // TODO!! -- void setShowNotification(bool showNotification); -- bool bestMatchOnly(); -- void setBestMatchOnly(bool bestMatchOnly); -- bool unlockDatabase(); -- void setUnlockDatabase(bool unlockDatabase); -- bool matchUrlScheme(); -- void setMatchUrlScheme(bool matchUrlScheme); -- bool sortByUsername(); -- void setSortByUsername(bool sortByUsername = true); -- bool sortByTitle(); -- void setSortByTitle(bool sortByUsertitle = true); -- bool alwaysAllowAccess(); -- void setAlwaysAllowAccess(bool alwaysAllowAccess); -- bool alwaysAllowUpdate(); -- void setAlwaysAllowUpdate(bool alwaysAllowUpdate); -- bool searchInAllDatabases(); -- void setSearchInAllDatabases(bool searchInAllDatabases); -- bool httpAuthPermission(); -- void setHttpAuthPermission(bool httpAuthPermission); -- bool supportKphFields(); -- void setSupportKphFields(bool supportKphFields); -- bool noMigrationPrompt(); -- void setNoMigrationPrompt(bool prompt); -- -- bool useCustomProxy(); -- void setUseCustomProxy(bool enabled); -- QString customProxyLocation(); -- void setCustomProxyLocation(const QString& location); -- QString proxyLocation(); --#ifdef QT_DEBUG -- QString customExtensionId(); -- void setCustomExtensionId(const QString& id); --#endif -- bool updateBinaryPath(); -- void setUpdateBinaryPath(bool enabled); -- bool allowExpiredCredentials(); -- void setAllowExpiredCredentials(bool enabled); -- -- bool browserSupport(BrowserShared::SupportedBrowsers browser); -- void setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled); -- bool customBrowserSupport(); -- void setCustomBrowserSupport(bool enabled); -- int customBrowserType(); -- void setCustomBrowserType(int type); -- QString customBrowserLocation(); -- void setCustomBrowserLocation(const QString& location); -- bool passwordUseNumbers(); -- void setPasswordUseNumbers(bool useNumbers); -- bool passwordUseLowercase(); -- void setPasswordUseLowercase(bool useLowercase); -- bool passwordUseUppercase(); -- void setPasswordUseUppercase(bool useUppercase); -- bool passwordUseSpecial(); -- void setPasswordUseSpecial(bool useSpecial); -- bool passwordUseBraces(); -- void setPasswordUseBraces(bool useBraces); -- bool passwordUsePunctuation(); -- void setPasswordUsePunctuation(bool usePunctuation); -- bool passwordUseQuotes(); -- void setPasswordUseQuotes(bool useQuotes); -- bool passwordUseDashes(); -- void setPasswordUseDashes(bool useDashes); -- bool passwordUseMath(); -- void setPasswordUseMath(bool useMath); -- bool passwordUseLogograms(); -- void setPasswordUseLogograms(bool useLogograms); -- bool passwordUseEASCII(); -- void setPasswordUseEASCII(bool useEASCII); -- bool advancedMode(); -- void setAdvancedMode(bool advancedMode); -- QString passwordAdditionalChars(); -- void setPasswordAdditionalChars(const QString& chars); -- QString passwordExcludedChars(); -- void setPasswordExcludedChars(const QString& chars); -- int passPhraseWordCount(); -- void setPassPhraseWordCount(int wordCount); -- QString passPhraseWordSeparator(); -- void setPassPhraseWordSeparator(const QString& separator); -- int generatorType(); -- void setGeneratorType(int type); -- bool passwordEveryGroup(); -- void setPasswordEveryGroup(bool everyGroup); -- bool passwordExcludeAlike(); -- void setPasswordExcludeAlike(bool excludeAlike); -- int passwordLength(); -- void setPasswordLength(int length); -- PasswordGenerator::CharClasses passwordCharClasses(); -- PasswordGenerator::GeneratorFlags passwordGeneratorFlags(); -- QJsonObject generatePassword(); -- void updateBinaryPaths(); -- --private: -- static BrowserSettings* m_instance; -- -- PasswordGenerator m_passwordGenerator; -- PassphraseGenerator m_passPhraseGenerator; -- NativeMessageInstaller m_nativeMessageInstaller; --}; -- --inline BrowserSettings* browserSettings() --{ -- return BrowserSettings::instance(); --} -- --#endif // BROWSERSETTINGS_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,49 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserSettingsPage.h" -- --#include "BrowserService.h" --#include "BrowserSettings.h" --#include "BrowserSettingsWidget.h" --#include "core/Resources.h" -- --QString BrowserSettingsPage::name() --{ -- return QObject::tr("Browser Integration"); --} -- --QIcon BrowserSettingsPage::icon() --{ -- return Resources::instance()->icon("internet-web-browser"); --} -- --QWidget* BrowserSettingsPage::createWidget() --{ -- return new BrowserSettingsWidget(); --} -- --void BrowserSettingsPage::loadSettings(QWidget* widget) --{ -- qobject_cast(widget)->loadSettings(); --} -- --void BrowserSettingsPage::saveSettings(QWidget* widget) --{ -- qobject_cast(widget)->saveSettings(); -- browserService()->setEnabled(browserSettings()->isEnabled()); --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.h keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.h ---- keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_BROWSERSETTINGSPAGE_H --#define KEEPASSXC_BROWSERSETTINGSPAGE_H -- --#include "gui/ApplicationSettingsWidget.h" -- --class BrowserSettingsPage : public ISettingsPage --{ --public: -- explicit BrowserSettingsPage() = default; -- ~BrowserSettingsPage() override = default; -- -- QString name() override; -- QIcon icon() override; -- QWidget* createWidget() override; -- void loadSettings(QWidget* widget) override; -- void saveSettings(QWidget* widget) override; --}; -- --#endif // KEEPASSXC_BROWSERSETTINGSPAGE_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,279 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserSettingsWidget.h" --#include "ui_BrowserSettingsWidget.h" -- --#include "BrowserSettings.h" --#include "config-keepassx.h" --#include "core/Resources.h" -- --#include -- --BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::BrowserSettingsWidget()) --{ -- m_ui->setupUi(this); -- -- // clang-format off -- QString snapInstructions; --#if defined(KEEPASSXC_DIST_SNAP) -- snapInstructions = "

" + -- tr("Due to Snap sandboxing, you must run a script to enable browser integration." -- "
" -- "You can obtain this script from %1") -- .arg("
https://keepassxc.org"); --#endif -- -- m_ui->extensionLabel->setOpenExternalLinks(true); -- m_ui->extensionLabel->setText( -- tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3. %4") -- .arg("Firefox", -- "" -- "Google Chrome / Chromium / Vivaldi / Brave", -- "Microsoft Edge", -- snapInstructions)); -- // clang-format on -- -- m_ui->warningWidget->setCloseButtonVisible(false); -- m_ui->warningWidget->setAutoHideTimeout(-1); -- m_ui->warningWidget->setAnimate(false); -- -- m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked()); -- connect(m_ui->enableBrowserSupport, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(setEnabled(bool))); -- -- // Custom Browser option --#ifdef Q_OS_WIN -- // TODO: Custom browser is disabled on Windows -- m_ui->customBrowserSupport->setVisible(false); -- m_ui->customBrowserGroupBox->setVisible(false); --#else -- connect(m_ui->customBrowserLocationBrowseButton, SIGNAL(clicked()), SLOT(showCustomBrowserLocationFileDialog())); -- connect(m_ui->customBrowserSupport, SIGNAL(toggled(bool)), m_ui->customBrowserGroupBox, SLOT(setEnabled(bool))); --#endif -- -- // Custom Proxy option -- m_ui->customProxyLocation->setEnabled(m_ui->useCustomProxy->isChecked()); -- m_ui->customProxyLocationBrowseButton->setEnabled(m_ui->useCustomProxy->isChecked()); -- -- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocation, SLOT(setEnabled(bool))); -- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocationBrowseButton, SLOT(setEnabled(bool))); -- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), SLOT(validateCustomProxyLocation())); -- connect(m_ui->customProxyLocation, SIGNAL(editingFinished()), SLOT(validateCustomProxyLocation())); -- connect(m_ui->customProxyLocationBrowseButton, SIGNAL(clicked()), this, SLOT(showProxyLocationFileDialog())); -- --#ifndef Q_OS_LINUX -- m_ui->snapWarningLabel->setVisible(false); --#endif -- --#ifdef Q_OS_WIN -- // Brave uses Chrome's registry settings -- m_ui->braveSupport->setHidden(true); -- // Vivaldi uses Chrome's registry settings -- m_ui->vivaldiSupport->setHidden(true); -- m_ui->chromeSupport->setText("Chrome, Vivaldi, and Brave"); -- // Tor Browser uses Firefox's registry settings -- m_ui->torBrowserSupport->setHidden(true); -- m_ui->firefoxSupport->setText("Firefox and Tor Browser"); --#endif -- m_ui->browserGlobalWarningWidget->setVisible(false); -- --#ifndef QT_DEBUG -- m_ui->customExtensionId->setVisible(false); -- m_ui->customExtensionLabel->setVisible(false); --#endif --} -- --BrowserSettingsWidget::~BrowserSettingsWidget() --{ --} -- --void BrowserSettingsWidget::loadSettings() --{ -- auto settings = browserSettings(); -- m_ui->enableBrowserSupport->setChecked(settings->isEnabled()); -- -- m_ui->showNotification->setChecked(settings->showNotification()); -- m_ui->bestMatchOnly->setChecked(settings->bestMatchOnly()); -- m_ui->unlockDatabase->setChecked(settings->unlockDatabase()); -- m_ui->matchUrlScheme->setChecked(settings->matchUrlScheme()); -- -- // hide unimplemented options -- // TODO: fix this -- m_ui->showNotification->hide(); -- -- if (settings->sortByUsername()) { -- m_ui->sortByUsername->setChecked(true); -- } else { -- m_ui->sortByTitle->setChecked(true); -- } -- -- m_ui->alwaysAllowAccess->setChecked(settings->alwaysAllowAccess()); -- m_ui->alwaysAllowUpdate->setChecked(settings->alwaysAllowUpdate()); -- m_ui->httpAuthPermission->setChecked(settings->httpAuthPermission()); -- m_ui->searchInAllDatabases->setChecked(settings->searchInAllDatabases()); -- m_ui->supportKphFields->setChecked(settings->supportKphFields()); -- m_ui->noMigrationPrompt->setChecked(settings->noMigrationPrompt()); -- m_ui->useCustomProxy->setChecked(settings->useCustomProxy()); -- m_ui->customProxyLocation->setText(settings->customProxyLocation()); -- m_ui->updateBinaryPath->setChecked(settings->updateBinaryPath()); -- m_ui->allowExpiredCredentials->setChecked(settings->allowExpiredCredentials()); -- m_ui->chromeSupport->setChecked(settings->browserSupport(BrowserShared::CHROME)); -- m_ui->chromiumSupport->setChecked(settings->browserSupport(BrowserShared::CHROMIUM)); -- m_ui->firefoxSupport->setChecked(settings->browserSupport(BrowserShared::FIREFOX)); -- m_ui->edgeSupport->setChecked(settings->browserSupport(BrowserShared::EDGE)); --#ifndef Q_OS_WIN -- m_ui->braveSupport->setChecked(settings->browserSupport(BrowserShared::BRAVE)); -- m_ui->vivaldiSupport->setChecked(settings->browserSupport(BrowserShared::VIVALDI)); -- m_ui->torBrowserSupport->setChecked(settings->browserSupport(BrowserShared::TOR_BROWSER)); --#endif --#ifndef Q_OS_LINUX -- m_ui->snapWarningLabel->setVisible(false); --#endif -- --// TODO: Enable Edge support when Linux version is released --#ifdef Q_OS_LINUX -- m_ui->edgeSupport->setChecked(false); -- m_ui->edgeSupport->setEnabled(false); --#endif -- --#ifdef KEEPASSXC_DIST_SNAP -- // Disable settings that will not work -- m_ui->useCustomProxy->setChecked(false); -- m_ui->useCustomProxy->setVisible(false); -- m_ui->customProxyLocation->setVisible(false); -- m_ui->customProxyLocationBrowseButton->setVisible(false); -- m_ui->browsersGroupBox->setVisible(false); -- m_ui->browsersGroupBox->setEnabled(false); -- m_ui->updateBinaryPath->setChecked(false); -- m_ui->updateBinaryPath->setVisible(false); -- // No custom browser for snaps -- m_ui->customBrowserSupport->setVisible(false); -- m_ui->customBrowserGroupBox->setVisible(false); -- // Show notice to user -- m_ui->browserGlobalWarningWidget->showMessage(tr("Please see special instructions for browser extension use below"), -- MessageWidget::Warning); -- m_ui->browserGlobalWarningWidget->setCloseButtonVisible(false); -- m_ui->browserGlobalWarningWidget->setAutoHideTimeout(-1); --#endif -- -- const auto customBrowserSet = settings->customBrowserSupport(); -- m_ui->customBrowserSupport->setChecked(customBrowserSet); -- m_ui->customBrowserGroupBox->setEnabled(customBrowserSet); -- m_ui->browserTypeComboBox->clear(); -- m_ui->browserTypeComboBox->addItem(tr("Firefox"), BrowserShared::SupportedBrowsers::FIREFOX); -- m_ui->browserTypeComboBox->addItem(tr("Chromium"), BrowserShared::SupportedBrowsers::CHROMIUM); -- auto typeIndex = m_ui->browserTypeComboBox->findData(settings->customBrowserType()); -- if (typeIndex >= 0) { -- m_ui->browserTypeComboBox->setCurrentIndex(typeIndex); -- } -- m_ui->customBrowserLocation->setText(settings->customBrowserLocation()); -- --#ifdef QT_DEBUG -- m_ui->customExtensionId->setText(settings->customExtensionId()); --#endif -- -- validateCustomProxyLocation(); --} -- --void BrowserSettingsWidget::validateCustomProxyLocation() --{ -- auto path = m_ui->customProxyLocation->text(); -- if (m_ui->useCustomProxy->isChecked() && !QFile::exists(path)) { -- m_ui->warningWidget->showMessage(tr("Error: The custom proxy location cannot be found!" -- "
Browser integration WILL NOT WORK without the proxy application."), -- MessageWidget::Error); -- } else { -- m_ui->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), -- MessageWidget::Warning); -- } --} -- --void BrowserSettingsWidget::saveSettings() --{ -- auto settings = browserSettings(); -- settings->setEnabled(m_ui->enableBrowserSupport->isChecked()); -- settings->setShowNotification(m_ui->showNotification->isChecked()); -- settings->setBestMatchOnly(m_ui->bestMatchOnly->isChecked()); -- settings->setUnlockDatabase(m_ui->unlockDatabase->isChecked()); -- settings->setMatchUrlScheme(m_ui->matchUrlScheme->isChecked()); -- settings->setSortByUsername(m_ui->sortByUsername->isChecked()); -- -- settings->setUseCustomProxy(m_ui->useCustomProxy->isChecked()); -- settings->setCustomProxyLocation(m_ui->customProxyLocation->text()); -- -- settings->setUpdateBinaryPath(m_ui->updateBinaryPath->isChecked()); -- settings->setAllowExpiredCredentials(m_ui->allowExpiredCredentials->isChecked()); -- settings->setAlwaysAllowAccess(m_ui->alwaysAllowAccess->isChecked()); -- settings->setAlwaysAllowUpdate(m_ui->alwaysAllowUpdate->isChecked()); -- settings->setHttpAuthPermission(m_ui->httpAuthPermission->isChecked()); -- settings->setSearchInAllDatabases(m_ui->searchInAllDatabases->isChecked()); -- settings->setSupportKphFields(m_ui->supportKphFields->isChecked()); -- settings->setNoMigrationPrompt(m_ui->noMigrationPrompt->isChecked()); -- --#ifdef QT_DEBUG -- settings->setCustomExtensionId(m_ui->customExtensionId->text()); --#endif -- -- settings->setBrowserSupport(BrowserShared::CHROME, m_ui->chromeSupport->isChecked()); -- settings->setBrowserSupport(BrowserShared::CHROMIUM, m_ui->chromiumSupport->isChecked()); -- settings->setBrowserSupport(BrowserShared::FIREFOX, m_ui->firefoxSupport->isChecked()); -- settings->setBrowserSupport(BrowserShared::EDGE, m_ui->edgeSupport->isChecked()); --#ifndef Q_OS_WIN -- settings->setBrowserSupport(BrowserShared::BRAVE, m_ui->braveSupport->isChecked()); -- settings->setBrowserSupport(BrowserShared::VIVALDI, m_ui->vivaldiSupport->isChecked()); -- settings->setBrowserSupport(BrowserShared::TOR_BROWSER, m_ui->torBrowserSupport->isChecked()); -- -- // Custom browser settings -- bool customBrowserEnabled = m_ui->customBrowserSupport->isChecked(); -- settings->setCustomBrowserType(m_ui->browserTypeComboBox->currentData().toInt()); -- settings->setCustomBrowserLocation(m_ui->customBrowserLocation->text()); -- settings->setCustomBrowserSupport(customBrowserEnabled); -- settings->setBrowserSupport(BrowserShared::CUSTOM, customBrowserEnabled); -- -- // If we disabled the custom browser support make sure to clear variables -- if (!customBrowserEnabled) { -- settings->setCustomBrowserLocation(""); -- } --#endif --} -- --void BrowserSettingsWidget::showProxyLocationFileDialog() --{ --#ifdef Q_OS_WIN -- QString fileTypeFilter(QString("%1 (*.exe);;%2 (*.*)").arg(tr("Executable Files"), tr("All Files"))); --#else -- QString fileTypeFilter(QString("%1 (*)").arg(tr("Executable Files"))); --#endif -- auto proxyLocation = QFileDialog::getOpenFileName(this, -- tr("Select custom proxy location"), -- QFileInfo(QCoreApplication::applicationDirPath()).filePath(), -- fileTypeFilter); -- m_ui->customProxyLocation->setText(proxyLocation); -- validateCustomProxyLocation(); --} -- --void BrowserSettingsWidget::showCustomBrowserLocationFileDialog() --{ -- auto location = QFileDialog::getExistingDirectory(this, -- tr("Select native messaging host folder location"), -- QFileInfo(QCoreApplication::applicationDirPath()).filePath()); -- if (!location.isEmpty()) { -- m_ui->customBrowserLocation->setText(location); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.h keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.h ---- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,51 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef BROWSERSETTINGSWIDGET_H --#define BROWSERSETTINGSWIDGET_H -- --#include --#include --#include -- --namespace Ui --{ -- class BrowserSettingsWidget; --} -- --class BrowserSettingsWidget : public QWidget --{ -- Q_OBJECT -- --public: -- explicit BrowserSettingsWidget(QWidget* parent = nullptr); -- ~BrowserSettingsWidget(); -- --public slots: -- void loadSettings(); -- void saveSettings(); -- --private slots: -- void showProxyLocationFileDialog(); -- void validateCustomProxyLocation(); -- void showCustomBrowserLocationFileDialog(); -- --private: -- QScopedPointer m_ui; --}; -- --#endif // BROWSERSETTINGSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.ui keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.ui ---- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,634 +0,0 @@ -- -- -- BrowserSettingsWidget -- -- -- -- 0 -- 0 -- 584 -- 467 -- -- -- -- Dialog -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- -- -- This is required for accessing your databases with KeePassXC-Browser -- -- -- Enable browser integration -- -- -- -- -- -- -- 0 -- -- -- -- General -- -- -- -- -- -- Browsers installed as snaps are currently not supported. -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 4 -- -- -- -- -- -- -- -- Enable integration for these browsers: -- -- -- -- 40 -- -- -- -- -- Vivaldi -- -- -- false -- -- -- -- -- -- -- &Edge -- -- -- false -- -- -- -- -- -- -- Firefox -- -- -- false -- -- -- -- -- -- -- Tor Browser -- -- -- false -- -- -- -- -- -- -- Brave -- -- -- false -- -- -- -- -- -- -- Google Chrome -- -- -- false -- -- -- -- -- -- -- Chromium -- -- -- false -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 4 -- -- -- -- -- -- -- -- Show a notification when credentials are requested -- -- -- true -- -- -- -- -- -- -- Request to unlock the database if it is locked -- -- -- true -- -- -- -- -- -- -- Only entries with the same scheme (http://, https://, ...) are returned. -- -- -- Match URL scheme (e.g., https://...) -- -- -- -- -- -- -- Only returns the best matches for a specific URL instead of all entries for the whole domain. -- -- -- Return only best-matching credentials -- -- -- -- -- -- -- Returns expired credentials. String [expired] is added to the title. -- -- -- Allow returning expired credentials -- -- -- -- -- -- -- All databases connected to the extension will return matching credentials. -- -- -- Search in all opened databases for matching credentials -- -- -- -- -- -- -- Sort matching credentials by title -- -- -- -- -- -- -- Sort matching credentials by username -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- Advanced -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- Never ask before accessing credentials -- -- -- -- -- -- -- Never ask before updating credentials -- -- -- -- -- -- -- Do not ask permission for HTTP Basic Auth -- -- -- -- -- -- -- Automatically creating or updating string fields is not supported. -- -- -- Return advanced string fields which start with "KPH: " -- -- -- -- -- -- -- Don't display the popup suggesting migration of legacy KeePassHTTP settings. -- -- -- Do not prompt for KeePassHTTP settings migration. -- -- -- -- -- -- -- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. -- -- -- Update native messaging manifest files at startup -- -- -- -- -- -- -- Use a custom proxy location if you installed a proxy manually. -- -- -- Use a custom proxy location: -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 15 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 450 -- 0 -- -- -- -- Custom proxy location field -- -- -- 999 -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -- -- -- -- -- -- Browser for custom proxy file -- -- -- Browse... -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- Use a custom browser configuration location: -- -- -- false -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- margin-right: 5px -- -- -- Browser type: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::StrongFocus -- -- -- Toolbar button style -- -- -- QComboBox::AdjustToContents -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- margin-right: 5px -- -- -- Config Location: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 350 -- 0 -- -- -- -- Custom browser location field -- -- -- 999 -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -- -- ~/.custom/config/Mozilla/native-messaging-hosts/ -- -- -- -- -- -- -- Browse for custom browser path -- -- -- Browse... -- -- -- -- -- -- -- -- -- -- -- -- -- 6 -- -- -- -- -- Custom extension ID: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 250 -- 0 -- -- -- -- Custom extension ID -- -- -- 999 -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
--
-- -- --
-diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserShared.cpp keepassxc-2.6.4-patched/src/browser/BrowserShared.cpp ---- keepassxc-2.6.4-orig/src/browser/BrowserShared.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserShared.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BrowserShared.h" --#include "config-keepassx.h" -- --#include --#include --#include --#include -- --namespace BrowserShared --{ -- QString localServerPath() -- { -- const auto serverName = QStringLiteral("/org.keepassxc.KeePassXC.BrowserServer"); --#if defined(KEEPASSXC_DIST_SNAP) -- return QProcessEnvironment::systemEnvironment().value("SNAP_USER_COMMON") + serverName; --#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) -- // Use XDG_RUNTIME_DIR instead of /tmp if it's available -- QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); -- return path.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName -- : path + serverName; --#elif defined(Q_OS_WIN) -- // Windows uses named pipes -- return serverName + "_" + qgetenv("USERNAME"); --#else // Q_OS_MACOS and others -- return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName; --#endif -- } --} // namespace BrowserShared -diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserShared.h keepassxc-2.6.4-patched/src/browser/BrowserShared.h ---- keepassxc-2.6.4-orig/src/browser/BrowserShared.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/BrowserShared.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_BROWSERSHARED_H --#define KEEPASSXC_BROWSERSHARED_H -- --#include -- --namespace BrowserShared --{ -- constexpr int NATIVEMSG_MAX_LENGTH = 1024 * 1024; -- -- enum SupportedBrowsers : int -- { -- CHROME = 0, -- CHROMIUM, -- FIREFOX, -- VIVALDI, -- TOR_BROWSER, -- BRAVE, -- EDGE, -- CUSTOM, -- MAX_SUPPORTED -- }; -- -- QString localServerPath(); --} // namespace BrowserShared -- --#endif // KEEPASSXC_BROWSERSHARED_H -diff -urNr keepassxc-2.6.4-orig/src/browser/CMakeLists.txt keepassxc-2.6.4-patched/src/browser/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/browser/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --# Copyright (C) 2017 Sami Vänttinen --# Copyright (C) 2017 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 3 of the License, or --# (at your option) any later version. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --if(WITH_XC_BROWSER) -- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -- -- set(keepassxcbrowser_SOURCES -- BrowserAccessControlDialog.cpp -- BrowserAction.cpp -- BrowserEntryConfig.cpp -- BrowserEntrySaveDialog.cpp -- BrowserHost.cpp -- BrowserSettingsPage.cpp -- BrowserSettingsWidget.cpp -- BrowserService.cpp -- BrowserSettings.cpp -- BrowserShared.cpp -- NativeMessageInstaller.cpp -- Variant.cpp) -- -- add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES}) -- target_link_libraries(keepassxcbrowser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network ${sodium_LIBRARY_RELEASE}) --endif() -diff -urNr keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.cpp keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.cpp ---- keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,329 +0,0 @@ --/* -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "NativeMessageInstaller.h" --#include "BrowserSettings.h" --#include "config-keepassx.h" -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --using namespace BrowserShared; -- --namespace --{ -- const QString HOST_NAME = QStringLiteral("org.keepassxc.keepassxc_browser"); -- const QStringList ALLOWED_EXTENSIONS = QStringList() << QStringLiteral("keepassxc-browser@keepassxc.org"); -- const QStringList ALLOWED_ORIGINS = QStringList() -- << QStringLiteral("chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/") -- << QStringLiteral("chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"); --#if defined(Q_OS_MACOS) -- const QString TARGET_DIR_CHROME = QStringLiteral("/Library/Application Support/Google/Chrome/NativeMessagingHosts"); -- const QString TARGET_DIR_CHROMIUM = QStringLiteral("/Library/Application Support/Chromium/NativeMessagingHosts"); -- const QString TARGET_DIR_FIREFOX = QStringLiteral("/Library/Application Support/Mozilla/NativeMessagingHosts"); -- const QString TARGET_DIR_VIVALDI = QStringLiteral("/Library/Application Support/Vivaldi/NativeMessagingHosts"); -- const QString TARGET_DIR_TOR_BROWSER = -- QStringLiteral("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts"); -- const QString TARGET_DIR_BRAVE = -- QStringLiteral("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts"); -- const QString TARGET_DIR_EDGE = QStringLiteral("/Library/Application Support/Microsoft Edge/NativeMessagingHosts"); --#elif defined(Q_OS_WIN) -- const QString TARGET_DIR_CHROME = QStringLiteral( -- "HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); -- const QString TARGET_DIR_CHROMIUM = -- QStringLiteral("HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); -- const QString TARGET_DIR_FIREFOX = -- QStringLiteral("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); -- const QString TARGET_DIR_VIVALDI = TARGET_DIR_CHROME; -- const QString TARGET_DIR_TOR_BROWSER = TARGET_DIR_FIREFOX; -- const QString TARGET_DIR_BRAVE = TARGET_DIR_CHROME; -- const QString TARGET_DIR_EDGE = QStringLiteral( -- "HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); --#else -- const QString TARGET_DIR_CHROME = QStringLiteral("/google-chrome/NativeMessagingHosts"); -- const QString TARGET_DIR_CHROMIUM = QStringLiteral("/chromium/NativeMessagingHosts"); -- const QString TARGET_DIR_FIREFOX = QStringLiteral("/.mozilla/native-messaging-hosts"); -- const QString TARGET_DIR_VIVALDI = QStringLiteral("/vivaldi/NativeMessagingHosts"); -- const QString TARGET_DIR_TOR_BROWSER = QStringLiteral( -- "/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts"); -- const QString TARGET_DIR_BRAVE = QStringLiteral("/BraveSoftware/Brave-Browser/NativeMessagingHosts"); -- const QString TARGET_DIR_EDGE = QStringLiteral("/microsoftedge/NativeMessagingHosts"); --#endif --} // namespace -- --/** -- * Checks if the selected browser has native messaging host properly installed -- * -- * @param browser Selected browser -- * @return bool Script is installed correctly -- */ --bool NativeMessageInstaller::isBrowserEnabled(SupportedBrowsers browser) --{ --#ifdef Q_OS_WIN -- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); -- return !settings.value("Default").isNull(); --#else -- return QFile::exists(getNativeMessagePath(browser)); --#endif --} -- --/** -- * Installs native messaging JSON script for the selected browser -- * -- * @param browser Selected browser -- * @param enabled Is browser integration enabled -- */ --void NativeMessageInstaller::setBrowserEnabled(SupportedBrowsers browser, bool enabled) --{ -- if (enabled) { --#ifdef Q_OS_WIN -- // Create a registry key -- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); -- settings.setValue("Default", getNativeMessagePath(browser)); --#endif -- // Always create the script file -- if (!createNativeMessageFile(browser)) { -- QMessageBox::critical( -- nullptr, -- QObject::tr("Browser Plugin Failure"), -- QObject::tr("Could not save the native messaging script file for %1.").arg(getBrowserName(browser)), -- QMessageBox::Ok); -- } -- } else { -- // Remove the script file -- const QString fileName = getNativeMessagePath(browser); -- QFile::remove(fileName); --#ifdef Q_OS_WIN -- // Remove the registry entry -- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); -- settings.remove("Default"); --#endif -- } --} -- --/** -- * Updates the paths to native messaging host for each browser that has been enabled -- */ --void NativeMessageInstaller::updateBinaryPaths() --{ -- for (int i = 0; i < SupportedBrowsers::MAX_SUPPORTED; ++i) { -- if (isBrowserEnabled(static_cast(i))) { -- setBrowserEnabled(static_cast(i), true); -- } -- } --} -- --/** -- * Returns the target path for each browser. Windows uses a registry path instead of a file path -- * -- * @param browser Selected browser -- * @return QString Current target path for the selected browser -- */ --QString NativeMessageInstaller::getTargetPath(SupportedBrowsers browser) const --{ -- switch (browser) { -- case SupportedBrowsers::CHROME: -- return TARGET_DIR_CHROME; -- case SupportedBrowsers::CHROMIUM: -- return TARGET_DIR_CHROMIUM; -- case SupportedBrowsers::FIREFOX: -- return TARGET_DIR_FIREFOX; -- case SupportedBrowsers::VIVALDI: -- return TARGET_DIR_VIVALDI; -- case SupportedBrowsers::TOR_BROWSER: -- return TARGET_DIR_TOR_BROWSER; -- case SupportedBrowsers::BRAVE: -- return TARGET_DIR_BRAVE; -- case SupportedBrowsers::EDGE: -- return TARGET_DIR_EDGE; -- case SupportedBrowsers::CUSTOM: -- return browserSettings()->customBrowserLocation(); -- default: -- return {}; -- } --} -- --/** -- * Returns the browser name -- * Needed for Windows to separate Chromium- or Firefox-based scripts -- * -- * @param browser Selected browser -- * @return QString Name of the selected browser -- */ --QString NativeMessageInstaller::getBrowserName(SupportedBrowsers browser) const --{ -- switch (browser) { -- case SupportedBrowsers::CHROME: -- return QStringLiteral("chrome"); -- case SupportedBrowsers::CHROMIUM: -- return QStringLiteral("chromium"); -- case SupportedBrowsers::FIREFOX: -- return QStringLiteral("firefox"); -- case SupportedBrowsers::VIVALDI: -- return QStringLiteral("vivaldi"); -- case SupportedBrowsers::TOR_BROWSER: -- return QStringLiteral("tor-browser"); -- case SupportedBrowsers::BRAVE: -- return QStringLiteral("brave"); -- case SupportedBrowsers::EDGE: -- return QStringLiteral("edge"); -- case SupportedBrowsers::CUSTOM: -- return QStringLiteral("custom"); -- default: -- return {}; -- } --} -- --/** -- * Returns the path of native messaging JSON script for the selected browser -- * -- * @param browser Selected browser -- * @return QString JSON script path for the selected browser -- */ --QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) const --{ -- QString basePath; --#if defined(Q_OS_WIN) -- // If portable settings file exists save the JSON scripts to the application folder -- if (QFile::exists(QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc.ini"))) { -- basePath = QCoreApplication::applicationDirPath(); -- } else { -- basePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); -- } -- return QStringLiteral("%1/%2_%3.json").arg(basePath, HOST_NAME, getBrowserName(browser)); --#elif defined(Q_OS_LINUX) -- if (browser == SupportedBrowsers::TOR_BROWSER) { -- // Tor Browser launcher stores its config in ~/.local/share/... -- basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); -- } else if (browser == SupportedBrowsers::FIREFOX) { -- // Firefox stores its config in ~/ -- basePath = QDir::homePath(); -- } else { -- basePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); -- } --#else -- basePath = QDir::homePath(); --#endif -- if (browser == SupportedBrowsers::CUSTOM) { -- return QString("%1/%2.json").arg(getTargetPath(browser), HOST_NAME); -- } -- -- return QStringLiteral("%1%2/%3.json").arg(basePath, getTargetPath(browser), HOST_NAME); --} -- --/** -- * Gets the path to keepassxc-proxy binary -- * -- * @param location Custom proxy path -- * @return path Path to keepassxc-proxy -- */ --QString NativeMessageInstaller::getProxyPath() const --{ -- if (browserSettings()->useCustomProxy()) { -- return browserSettings()->customProxyLocation(); -- } -- -- QString path; --#ifdef KEEPASSXC_DIST_APPIMAGE -- path = QProcessEnvironment::systemEnvironment().value("APPIMAGE"); --#else -- path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy"); --#ifdef Q_OS_WIN -- path.append(QStringLiteral(".exe")); --#endif // #ifdef Q_OS_WIN -- --#endif // #ifdef KEEPASSXC_DIST_APPIMAGE -- return QDir::toNativeSeparators(path); --} -- --/** -- * Constructs the JSON script file used with native messaging -- * -- * @param browser Browser (Chromium- and Firefox-based browsers need a different parameters for the script) -- * @param location Custom proxy location -- * @return script The JSON script file -- */ --QJsonObject NativeMessageInstaller::constructFile(SupportedBrowsers browser) --{ -- QJsonObject script; -- script["name"] = HOST_NAME; -- script["description"] = QStringLiteral("KeePassXC integration with native messaging support"); -- script["path"] = getProxyPath(); -- script["type"] = QStringLiteral("stdio"); -- -- QJsonArray arr; -- if (browser == SupportedBrowsers::FIREFOX || browser == SupportedBrowsers::TOR_BROWSER -- || (browser == SupportedBrowsers::CUSTOM -- && browserSettings()->customBrowserType() == SupportedBrowsers::FIREFOX)) { -- for (const QString& extension : ALLOWED_EXTENSIONS) { -- arr.append(extension); -- } -- script["allowed_extensions"] = arr; -- } else { -- for (const QString& origin : ALLOWED_ORIGINS) { -- arr.append(origin); -- } --#ifdef QT_DEBUG -- auto customId = browserSettings()->customExtensionId(); -- if (!customId.isEmpty()) { -- arr.append(QString("chrome-extension://%1/").arg(customId)); -- } --#endif -- script["allowed_origins"] = arr; -- } -- -- return script; --} -- --/** -- * Saves a JSON script file -- * -- * @param browser Selected browser -- * @param script JSON native messaging script object -- * @return bool Write succeeds -- */ --bool NativeMessageInstaller::createNativeMessageFile(SupportedBrowsers browser) --{ -- auto path = getNativeMessagePath(browser); -- -- // Make the parent directory path if necessary -- QDir().mkpath(QFileInfo(path).absolutePath()); -- -- QFile scriptFile(path); -- if (!scriptFile.open(QIODevice::WriteOnly)) { -- qWarning() << "Browser Plugin: Failed to open native message file for writing at " << scriptFile.fileName(); -- qWarning() << scriptFile.errorString(); -- return false; -- } -- -- QJsonDocument doc(constructFile(browser)); -- if (scriptFile.write(doc.toJson()) < 0) { -- qWarning() << "Browser Plugin: Failed to write native message file at " << scriptFile.fileName(); -- qWarning() << scriptFile.errorString(); -- return false; -- } -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.h keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.h ---- keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --/* -- * Copyright (C) 2017 Sami Vänttinen -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef NATIVEMESSAGEINSTALLER_H --#define NATIVEMESSAGEINSTALLER_H -- --#include "BrowserShared.h" --#include -- --class NativeMessageInstaller --{ --public: -- NativeMessageInstaller() = default; -- -- void setBrowserEnabled(BrowserShared::SupportedBrowsers browser, bool enabled); -- bool isBrowserEnabled(BrowserShared::SupportedBrowsers browser); -- -- QString getProxyPath() const; -- void updateBinaryPaths(); -- --private: -- QString getTargetPath(BrowserShared::SupportedBrowsers browser) const; -- QString getBrowserName(BrowserShared::SupportedBrowsers browser) const; -- QString getNativeMessagePath(BrowserShared::SupportedBrowsers browser) const; -- QJsonObject constructFile(BrowserShared::SupportedBrowsers browser); -- bool createNativeMessageFile(BrowserShared::SupportedBrowsers browser); -- -- Q_DISABLE_COPY(NativeMessageInstaller); --}; -- --#endif // NATIVEMESSAGEINSTALLER_H -diff -urNr keepassxc-2.6.4-orig/src/browser/Variant.cpp keepassxc-2.6.4-patched/src/browser/Variant.cpp ---- keepassxc-2.6.4-orig/src/browser/Variant.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/Variant.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,37 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Variant.h" -- --QVariantMap qo2qv(const QObject* object, const QStringList& ignoredProperties) --{ -- QVariantMap result; -- const QMetaObject* metaobject = object->metaObject(); -- int count = metaobject->propertyCount(); -- for (int i = 0; i < count; ++i) { -- QMetaProperty metaproperty = metaobject->property(i); -- const char* name = metaproperty.name(); -- -- if (ignoredProperties.contains(QLatin1String(name)) || (!metaproperty.isReadable())) { -- continue; -- } -- -- QVariant value = object->property(name); -- result[QLatin1String(name)] = value; -- } -- return result; --} -diff -urNr keepassxc-2.6.4-orig/src/browser/Variant.h keepassxc-2.6.4-patched/src/browser/Variant.h ---- keepassxc-2.6.4-orig/src/browser/Variant.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/browser/Variant.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,26 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef VARIANT_H --#define VARIANT_H -- --#include -- --QVariantMap qo2qv(const QObject* object, -- const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); -- --#endif // VARIANT_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Add.cpp keepassxc-2.6.4-patched/src/cli/Add.cpp ---- keepassxc-2.6.4-orig/src/cli/Add.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Add.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,129 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Add.h" -- --#include "cli/Generate.h" --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/PasswordGenerator.h" -- --const QCommandLineOption Add::UsernameOption = QCommandLineOption(QStringList() << "u" -- << "username", -- QObject::tr("Username for the entry."), -- QObject::tr("username")); -- --const QCommandLineOption Add::UrlOption = -- QCommandLineOption(QStringList() << "url", QObject::tr("URL for the entry."), QObject::tr("URL")); -- --const QCommandLineOption Add::PasswordPromptOption = -- QCommandLineOption(QStringList() << "p" -- << "password-prompt", -- QObject::tr("Prompt for the entry's password.")); -- --const QCommandLineOption Add::GenerateOption = QCommandLineOption(QStringList() << "g" -- << "generate", -- QObject::tr("Generate a password for the entry.")); -- --Add::Add() --{ -- name = QString("add"); -- description = QObject::tr("Add a new entry to a database."); -- options.append(Add::UsernameOption); -- options.append(Add::UrlOption); -- options.append(Add::PasswordPromptOption); -- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to add."), QString("")}); -- -- // Password generation options. -- options.append(Add::GenerateOption); -- options.append(Generate::PasswordLengthOption); -- options.append(Generate::LowerCaseOption); -- options.append(Generate::UpperCaseOption); -- options.append(Generate::NumbersOption); -- options.append(Generate::SpecialCharsOption); -- options.append(Generate::ExtendedAsciiOption); -- options.append(Generate::ExcludeCharsOption); -- options.append(Generate::ExcludeSimilarCharsOption); -- options.append(Generate::IncludeEveryGroupOption); --} -- --int Add::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- auto& entryPath = args.at(1); -- -- // Cannot use those 2 options at the same time! -- if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { -- err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl; -- return EXIT_FAILURE; -- } -- -- // Validating the password generator here, before we actually create -- // the entry. -- QSharedPointer passwordGenerator; -- if (parser->isSet(Add::GenerateOption)) { -- passwordGenerator = Generate::createGenerator(parser); -- if (passwordGenerator.isNull()) { -- return EXIT_FAILURE; -- } -- } -- -- Entry* entry = database->rootGroup()->addEntryWithPath(entryPath); -- if (!entry) { -- err << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- if (!parser->value(Add::UsernameOption).isEmpty()) { -- entry->setUsername(parser->value(Add::UsernameOption)); -- } -- -- if (!parser->value(Add::UrlOption).isEmpty()) { -- entry->setUrl(parser->value(Add::UrlOption)); -- } -- -- if (parser->isSet(Add::PasswordPromptOption)) { -- if (!parser->isSet(Command::QuietOption)) { -- out << QObject::tr("Enter password for new entry: ") << flush; -- } -- QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); -- entry->setPassword(password); -- } else if (parser->isSet(Add::GenerateOption)) { -- QString password = passwordGenerator->generatePassword(); -- entry->setPassword(password); -- } -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- if (!parser->isSet(Command::QuietOption)) { -- out << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl; -- } -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/AddGroup.cpp keepassxc-2.6.4-patched/src/cli/AddGroup.cpp ---- keepassxc-2.6.4-orig/src/cli/AddGroup.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/AddGroup.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,79 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "AddGroup.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" -- --AddGroup::AddGroup() --{ -- name = QString("mkdir"); -- description = QObject::tr("Adds a new group to a database."); -- positionalArguments.append({QString("group"), QObject::tr("Path of the group to add."), QString("")}); --} -- --AddGroup::~AddGroup() --{ --} -- --int AddGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& groupPath = args.at(1); -- -- QStringList pathParts = groupPath.split("/"); -- QString groupName = pathParts.takeLast(); -- QString parentGroupPath = pathParts.join("/"); -- -- Group* group = database->rootGroup()->findGroupByPath(groupPath); -- if (group) { -- err << QObject::tr("Group %1 already exists!").arg(groupPath) << endl; -- return EXIT_FAILURE; -- } -- -- Group* parentGroup = database->rootGroup()->findGroupByPath(parentGroupPath); -- if (!parentGroup) { -- err << QObject::tr("Group %1 not found.").arg(parentGroupPath) << endl; -- return EXIT_FAILURE; -- } -- -- Group* newGroup = new Group(); -- newGroup->setUuid(QUuid::createUuid()); -- newGroup->setName(groupName); -- newGroup->setParent(parentGroup); -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- if (!parser->isSet(Command::QuietOption)) { -- out << QObject::tr("Successfully added group %1.").arg(groupName) << endl; -- } -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/AddGroup.h keepassxc-2.6.4-patched/src/cli/AddGroup.h ---- keepassxc-2.6.4-orig/src/cli/AddGroup.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/AddGroup.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ADDGROUP_H --#define KEEPASSXC_ADDGROUP_H -- --#include "DatabaseCommand.h" -- --class AddGroup : public DatabaseCommand --{ --public: -- AddGroup(); -- ~AddGroup(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); --}; -- --#endif // KEEPASSXC_ADDGROUP_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Add.h keepassxc-2.6.4-patched/src/cli/Add.h ---- keepassxc-2.6.4-orig/src/cli/Add.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Add.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,37 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ADD_H --#define KEEPASSXC_ADD_H -- --#include "DatabaseCommand.h" -- --class Add : public DatabaseCommand --{ --public: -- Add(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption UsernameOption; -- static const QCommandLineOption UrlOption; -- static const QCommandLineOption PasswordPromptOption; -- static const QCommandLineOption GenerateOption; -- static const QCommandLineOption PasswordLengthOption; --}; -- --#endif // KEEPASSXC_ADD_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Analyze.cpp keepassxc-2.6.4-patched/src/cli/Analyze.cpp ---- keepassxc-2.6.4-orig/src/cli/Analyze.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Analyze.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,80 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Analyze.h" --#include "cli/Utils.h" --#include "core/HibpOffline.h" -- --#include --#include --#include -- --#include "cli/TextStream.h" --#include "core/Group.h" --#include "core/Tools.h" -- --const QCommandLineOption Analyze::HIBPDatabaseOption = QCommandLineOption( -- {"H", "hibp"}, -- QObject::tr("Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing " -- "SHA-1 hashes of leaked passwords in HIBP format, as available from " -- "https://haveibeenpwned.com/Passwords."), -- QObject::tr("FILENAME")); -- --Analyze::Analyze() --{ -- name = QString("analyze"); -- description = QObject::tr("Analyze passwords for weaknesses and problems."); -- options.append(Analyze::HIBPDatabaseOption); --} -- --int Analyze::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- QString hibpDatabase = parser->value(Analyze::HIBPDatabaseOption); -- QFile hibpFile(hibpDatabase); -- if (!hibpFile.open(QFile::ReadOnly)) { -- err << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString()) << endl; -- return EXIT_FAILURE; -- } -- -- out << QObject::tr("Evaluating database entries against HIBP file, this will take a while...") << endl; -- -- QList> findings; -- QString error; -- if (!HibpOffline::report(database, hibpFile, findings, &error)) { -- err << error << endl; -- return EXIT_FAILURE; -- } -- -- for (auto& finding : findings) { -- printHibpFinding(finding.first, finding.second, out); -- } -- -- return EXIT_SUCCESS; --} -- --void Analyze::printHibpFinding(const Entry* entry, int count, QTextStream& out) --{ -- QString path = entry->title(); -- for (auto g = entry->group(); g && g != g->database()->rootGroup(); g = g->parentGroup()) { -- path.prepend("/").prepend(g->name()); -- } -- -- out << QObject::tr("Password for '%1' has been leaked %2 time(s)!", "", count).arg(path).arg(count) << endl; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Analyze.h keepassxc-2.6.4-patched/src/cli/Analyze.h ---- keepassxc-2.6.4-orig/src/cli/Analyze.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Analyze.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ANALYZE_H --#define KEEPASSXC_ANALYZE_H -- --#include "DatabaseCommand.h" -- --class Analyze : public DatabaseCommand --{ --public: -- Analyze(); -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption HIBPDatabaseOption; -- --private: -- void printHibpFinding(const Entry* entry, int count, QTextStream& out); --}; -- --#endif // KEEPASSXC_HIBP_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Clip.cpp keepassxc-2.6.4-patched/src/cli/Clip.cpp ---- keepassxc-2.6.4-orig/src/cli/Clip.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Clip.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,139 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include --#include -- --#include "Clip.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" -- --const QCommandLineOption Clip::AttributeOption = QCommandLineOption( -- QStringList() << "a" -- << "attribute", -- QObject::tr("Copy the given attribute to the clipboard. Defaults to \"password\" if not specified."), -- "attr", -- "password"); -- --const QCommandLineOption Clip::TotpOption = -- QCommandLineOption(QStringList() << "t" -- << "totp", -- QObject::tr("Copy the current TOTP to the clipboard (equivalent to \"-a totp\").")); -- --Clip::Clip() --{ -- name = QString("clip"); -- description = QObject::tr("Copy an entry's attribute to the clipboard."); -- options.append(Clip::AttributeOption); -- options.append(Clip::TotpOption); -- positionalArguments.append( -- {QString("entry"), QObject::tr("Path of the entry to clip.", "clip = copy to clipboard"), QString("")}); -- optionalArguments.append( -- {QString("timeout"), QObject::tr("Timeout in seconds before clearing the clipboard."), QString("[timeout]")}); --} -- --int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& entryPath = args.at(1); -- QString timeout; -- if (args.size() == 3) { -- timeout = args.at(2); -- } -- -- int timeoutSeconds = 0; -- if (!timeout.isEmpty() && timeout.toInt() <= 0) { -- err << QObject::tr("Invalid timeout value %1.").arg(timeout) << endl; -- return EXIT_FAILURE; -- } else if (!timeout.isEmpty()) { -- timeoutSeconds = timeout.toInt(); -- } -- -- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); -- if (!entry) { -- err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- if (parser->isSet(AttributeOption) && parser->isSet(TotpOption)) { -- err << QObject::tr("ERROR: Please specify one of --attribute or --totp, not both.") << endl; -- return EXIT_FAILURE; -- } -- -- QString selectedAttribute = parser->value(AttributeOption); -- QString value; -- bool found = false; -- if (parser->isSet(TotpOption) || selectedAttribute == "totp") { -- if (!entry->hasTotp()) { -- err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- found = true; -- value = entry->totp(); -- } else { -- QStringList attrs = Utils::findAttributes(*entry->attributes(), selectedAttribute); -- if (attrs.size() > 1) { -- err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") -- .arg(selectedAttribute, QLocale().createSeparatedList(attrs)) -- << endl; -- return EXIT_FAILURE; -- } else if (attrs.size() == 1) { -- found = true; -- selectedAttribute = attrs[0]; -- value = entry->attributes()->value(selectedAttribute); -- } -- } -- -- if (!found) { -- out << QObject::tr("Attribute \"%1\" not found.").arg(selectedAttribute) << endl; -- return EXIT_FAILURE; -- } -- -- int exitCode = Utils::clipText(value); -- if (exitCode != EXIT_SUCCESS) { -- return exitCode; -- } -- -- out << QObject::tr("Entry's \"%1\" attribute copied to the clipboard!").arg(selectedAttribute) << endl; -- -- if (!timeoutSeconds) { -- return exitCode; -- } -- -- QString lastLine = ""; -- while (timeoutSeconds > 0) { -- out << '\r' << QString(lastLine.size(), ' ') << '\r'; -- lastLine = QObject::tr("Clearing the clipboard in %1 second(s)...", "", timeoutSeconds).arg(timeoutSeconds); -- out << lastLine << flush; -- std::this_thread::sleep_for(std::chrono::milliseconds(1000)); -- --timeoutSeconds; -- } -- Utils::clipText(""); -- out << '\r' << QString(lastLine.size(), ' ') << '\r'; -- out << QObject::tr("Clipboard cleared!") << endl; -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Clip.h keepassxc-2.6.4-patched/src/cli/Clip.h ---- keepassxc-2.6.4-orig/src/cli/Clip.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Clip.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CLIP_H --#define KEEPASSXC_CLIP_H -- --#include "DatabaseCommand.h" -- --class Clip : public DatabaseCommand --{ --public: -- Clip(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption AttributeOption; -- static const QCommandLineOption TotpOption; --}; -- --#endif // KEEPASSXC_CLIP_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Close.cpp keepassxc-2.6.4-patched/src/cli/Close.cpp ---- keepassxc-2.6.4-orig/src/cli/Close.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Close.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,38 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Close.h" -- --#include --#include -- --#include "DatabaseCommand.h" --#include "TextStream.h" --#include "Utils.h" -- --Close::Close() --{ -- name = QString("close"); -- description = QObject::tr("Close the currently opened database."); --} -- --int Close::execute(const QStringList& arguments) --{ -- Q_UNUSED(arguments) -- currentDatabase.reset(nullptr); -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Close.h keepassxc-2.6.4-patched/src/cli/Close.h ---- keepassxc-2.6.4-orig/src/cli/Close.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Close.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CLOSE_H --#define KEEPASSXC_CLOSE_H -- --#include -- --#include "Command.h" -- --class Close : public Command --{ --public: -- Close(); -- int execute(const QStringList& arguments) override; --}; -- --#endif // KEEPASSXC_CLOSE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/CMakeLists.txt keepassxc-2.6.4-patched/src/cli/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/cli/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,120 +0,0 @@ --# Copyright (C) 2019 KeePassXC Team --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --set(cli_SOURCES -- Add.cpp -- AddGroup.cpp -- Analyze.cpp -- Clip.cpp -- Close.cpp -- Create.cpp -- Command.cpp -- DatabaseCommand.cpp -- Diceware.cpp -- Edit.cpp -- Estimate.cpp -- Exit.cpp -- Export.cpp -- Generate.cpp -- Help.cpp -- Import.cpp -- Info.cpp -- List.cpp -- Locate.cpp -- Merge.cpp -- Move.cpp -- Open.cpp -- Remove.cpp -- RemoveGroup.cpp -- Show.cpp) -- --add_library(cli STATIC ${cli_SOURCES}) --target_link_libraries(cli Qt5::Core Qt5::Widgets) -- --find_package(Readline) -- --if (READLINE_FOUND) -- target_compile_definitions(cli PUBLIC USE_READLINE) -- target_link_libraries(cli readline) --endif() -- --add_executable(keepassxc-cli keepassxc-cli.cpp) --target_link_libraries(keepassxc-cli -- ${GPGERROR_LIBRARIES} -- cli -- keepassx_core -- Qt5::Core -- ${GCRYPT_LIBRARIES} -- ${sodium_LIBRARY_RELEASE} -- ${ARGON2_LIBRARIES} -- ${ZLIB_LIBRARIES} -- ${ZXCVBN_LIBRARIES}) -- --install(TARGETS keepassxc-cli -- BUNDLE DESTINATION . COMPONENT Runtime -- RUNTIME DESTINATION ${CLI_INSTALL_DIR} COMPONENT Runtime) -- --if(MINGW) -- install(CODE "include(BundleUtilities) -- fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/keepassxc-cli.exe\" \"\" \"\")" -- COMPONENT Runtime) --endif() -- --if(APPLE AND WITH_APP_BUNDLE) -- add_custom_command(TARGET keepassxc-cli -- POST_BUILD -- COMMAND ${CMAKE_INSTALL_NAME_TOOL} -- -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore -- "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" -- -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui -- "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" -- -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras -- "@executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras" -- -change /usr/local/opt/qt/lib/QtConcurrent.framework/Versions/5/QtConcurrent -- "@executable_path/../Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent" -- -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore -- "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" -- -change /usr/local/opt/qt/lib/QtNetwork.framework/Versions/5/QtNetwork -- "@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork" -- -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets -- "@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets" -- -change /usr/local/opt/qt/lib/QtSvg.framework/Versions/5/QtSvg -- "@executable_path/../Frameworks/QtSvg.framework/Versions/5/QtSvg" -- -change /usr/local/opt/libgcrypt/lib/libgcrypt.20.dylib -- "@executable_path/../Frameworks/libgcrypt.20.dylib" -- -change /usr/local/opt/argon2/lib/libargon2.1.dylib -- "@executable_path/../Frameworks/libargon2.1.dylib" -- -change /usr/local/opt/libgpg-error/lib/libgpg-error.0.dylib -- "@executable_path/../Frameworks/libgpg-error.0.dylib" -- -change /usr/local/opt/libsodium/lib/libsodium.23.dylib -- "@executable_path/../Frameworks/libsodium.23.dylib" -- -change /usr/local/opt/qrencode/lib/libqrencode.4.dylib -- "@executable_path/../Frameworks/libqrencode.4.dylib" -- -change /usr/local/opt/libyubikey/lib/libyubikey.0.dylib -- "@executable_path/../Frameworks/libyubikey.0.dylib" -- -change /usr/local/opt/ykpers/lib/libykpers-1.1.dylib -- "@executable_path/../Frameworks/libykpers-1.1.dylib" -- -change /usr/local/opt/quazip/lib/libquazip.1.dylib -- "@executable_path/../Frameworks/libquazip.1.dylib" -- keepassxc-cli -- COMMENT "Changing linking of keepassxc-cli") -- -- # Copy app to staging directory for pre-install testing -- set(CLI_APP_DIR "${CMAKE_BINARY_DIR}/src/${CLI_INSTALL_DIR}") -- add_custom_command(TARGET keepassxc-cli -- POST_BUILD -- COMMAND ${CMAKE_COMMAND} -E copy keepassxc-cli ${CLI_APP_DIR}/keepassxc-cli -- COMMENT "Copying keepassxc-cli inside the application") --endif() -diff -urNr keepassxc-2.6.4-orig/src/cli/Command.cpp keepassxc-2.6.4-patched/src/cli/Command.cpp ---- keepassxc-2.6.4-orig/src/cli/Command.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Command.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,208 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include --#include -- --#include --#include -- --#include "Command.h" -- --#include "Add.h" --#include "AddGroup.h" --#include "Analyze.h" --#include "Clip.h" --#include "Close.h" --#include "Create.h" --#include "Diceware.h" --#include "Edit.h" --#include "Estimate.h" --#include "Exit.h" --#include "Export.h" --#include "Generate.h" --#include "Help.h" --#include "Import.h" --#include "Info.h" --#include "List.h" --#include "Locate.h" --#include "Merge.h" --#include "Move.h" --#include "Open.h" --#include "Remove.h" --#include "RemoveGroup.h" --#include "Show.h" --#include "TextStream.h" --#include "Utils.h" -- --const QCommandLineOption Command::HelpOption = QCommandLineOption(QStringList() --#ifdef Q_OS_WIN -- << QStringLiteral("?") --#endif -- << QStringLiteral("h") << QStringLiteral("help"), -- QObject::tr("Display this help.")); -- --const QCommandLineOption Command::QuietOption = -- QCommandLineOption(QStringList() << "q" -- << "quiet", -- QObject::tr("Silence password prompt and other secondary outputs.")); -- --const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList() << "k" -- << "key-file", -- QObject::tr("Key file of the database."), -- QObject::tr("path")); -- --const QCommandLineOption Command::NoPasswordOption = -- QCommandLineOption(QStringList() << "no-password", QObject::tr("Deactivate password key for the database.")); -- --const QCommandLineOption Command::YubiKeyOption = -- QCommandLineOption(QStringList() << "y" -- << "yubikey", -- QObject::tr("Yubikey slot and optional serial used to access the database (e.g., 1:7370001)."), -- QObject::tr("slot[:serial]")); -- --namespace --{ -- -- QSharedPointer buildParser(Command* command) -- { -- auto parser = QSharedPointer(new QCommandLineParser()); -- parser->setApplicationDescription(command->description); -- for (const CommandLineArgument& positionalArgument : command->positionalArguments) { -- parser->addPositionalArgument( -- positionalArgument.name, positionalArgument.description, positionalArgument.syntax); -- } -- for (const CommandLineArgument& optionalArgument : command->optionalArguments) { -- parser->addPositionalArgument(optionalArgument.name, optionalArgument.description, optionalArgument.syntax); -- } -- for (const QCommandLineOption& option : command->options) { -- parser->addOption(option); -- } -- parser->addOption(Command::HelpOption); -- return parser; -- } -- --} // namespace -- --Command::Command() -- : currentDatabase(nullptr) --{ -- options.append(Command::QuietOption); --} -- --Command::~Command() --{ --} -- --QString Command::getDescriptionLine() --{ -- QString response = name; -- QString space(" "); -- QString spaces = space.repeated(15 - name.length()); -- response = response.append(spaces); -- response = response.append(description); -- response = response.append("\n"); -- return response; --} -- --QString Command::getHelpText() --{ -- auto help = buildParser(this)->helpText(); -- // Fix spacing of options parameter -- help.replace(QStringLiteral("[options]"), name + QStringLiteral(" [options]")); -- // Remove application directory from command line example -- auto appname = QFileInfo(QCoreApplication::applicationFilePath()).fileName(); -- auto regex = QRegularExpression(QStringLiteral(" .*%1").arg(QRegularExpression::escape(appname))); -- help.replace(regex, appname.prepend(" ")); -- -- return help; --} -- --QSharedPointer Command::getCommandLineParser(const QStringList& arguments) --{ -- auto& err = Utils::STDERR; -- QSharedPointer parser = buildParser(this); -- -- if (!parser->parse(arguments)) { -- err << parser->errorText() << "\n\n"; -- err << getHelpText(); -- return {}; -- } -- if (parser->positionalArguments().size() < positionalArguments.size()) { -- err << getHelpText(); -- return {}; -- } -- if (parser->positionalArguments().size() > (positionalArguments.size() + optionalArguments.size())) { -- err << getHelpText(); -- return {}; -- } -- if (parser->isSet(HelpOption)) { -- err << getHelpText(); -- return {}; -- } -- return parser; --} -- --namespace Commands --{ -- QMap> s_commands; -- -- void setupCommands(bool interactive) -- { -- s_commands.clear(); -- -- s_commands.insert(QStringLiteral("add"), QSharedPointer(new Add())); -- s_commands.insert(QStringLiteral("analyze"), QSharedPointer(new Analyze())); -- s_commands.insert(QStringLiteral("clip"), QSharedPointer(new Clip())); -- s_commands.insert(QStringLiteral("close"), QSharedPointer(new Close())); -- s_commands.insert(QStringLiteral("db-create"), QSharedPointer(new Create())); -- s_commands.insert(QStringLiteral("db-info"), QSharedPointer(new Info())); -- s_commands.insert(QStringLiteral("diceware"), QSharedPointer(new Diceware())); -- s_commands.insert(QStringLiteral("edit"), QSharedPointer(new Edit())); -- s_commands.insert(QStringLiteral("estimate"), QSharedPointer(new Estimate())); -- s_commands.insert(QStringLiteral("generate"), QSharedPointer(new Generate())); -- s_commands.insert(QStringLiteral("help"), QSharedPointer(new Help())); -- s_commands.insert(QStringLiteral("locate"), QSharedPointer(new Locate())); -- s_commands.insert(QStringLiteral("ls"), QSharedPointer(new List())); -- s_commands.insert(QStringLiteral("merge"), QSharedPointer(new Merge())); -- s_commands.insert(QStringLiteral("mkdir"), QSharedPointer(new AddGroup())); -- s_commands.insert(QStringLiteral("mv"), QSharedPointer(new Move())); -- s_commands.insert(QStringLiteral("open"), QSharedPointer(new Open())); -- s_commands.insert(QStringLiteral("rm"), QSharedPointer(new Remove())); -- s_commands.insert(QStringLiteral("rmdir"), QSharedPointer(new RemoveGroup())); -- s_commands.insert(QStringLiteral("show"), QSharedPointer(new Show())); -- -- if (interactive) { -- s_commands.insert(QStringLiteral("exit"), QSharedPointer(new Exit("exit"))); -- s_commands.insert(QStringLiteral("quit"), QSharedPointer(new Exit("quit"))); -- } else { -- s_commands.insert(QStringLiteral("export"), QSharedPointer(new Export())); -- s_commands.insert(QStringLiteral("import"), QSharedPointer(new Import())); -- } -- } -- -- QList> getCommands() -- { -- return s_commands.values(); -- } -- -- QSharedPointer getCommand(const QString& commandName) -- { -- return s_commands.value(commandName); -- } --} // namespace Commands -diff -urNr keepassxc-2.6.4-orig/src/cli/Command.h keepassxc-2.6.4-patched/src/cli/Command.h ---- keepassxc-2.6.4-orig/src/cli/Command.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Command.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,70 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_COMMAND_H --#define KEEPASSXC_COMMAND_H -- --#include --#include --#include --#include --#include --#include -- --#include "core/Database.h" -- --// At the moment, there's no QT class for the positional arguments --// like there is for the options (QCommandLineOption). --struct CommandLineArgument --{ -- QString name; -- QString description; -- QString syntax; --}; -- --class Command --{ --public: -- Command(); -- virtual ~Command(); -- virtual int execute(const QStringList& arguments) = 0; -- QString name; -- QString description; -- QSharedPointer currentDatabase; -- QList positionalArguments; -- QList optionalArguments; -- QList options; -- -- QString getDescriptionLine(); -- QSharedPointer getCommandLineParser(const QStringList& arguments); -- QString getHelpText(); -- -- static const QCommandLineOption HelpOption; -- static const QCommandLineOption QuietOption; -- static const QCommandLineOption KeyFileOption; -- static const QCommandLineOption NoPasswordOption; -- static const QCommandLineOption YubiKeyOption; --}; -- --namespace Commands --{ -- void setupCommands(bool interactive); -- QList> getCommands(); -- QSharedPointer getCommand(const QString& commandName); --} // namespace Commands -- --#endif // KEEPASSXC_COMMAND_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Create.cpp keepassxc-2.6.4-patched/src/cli/Create.cpp ---- keepassxc-2.6.4-orig/src/cli/Create.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Create.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,200 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include --#include --#include -- --#include "Create.h" --#include "Utils.h" -- --#include "core/Database.h" -- --#include "keys/CompositeKey.h" --#include "keys/Key.h" -- --const QCommandLineOption Create::DecryptionTimeOption = -- QCommandLineOption(QStringList() << "t" -- << "decryption-time", -- QObject::tr("Target decryption time in MS for the database."), -- QObject::tr("time")); -- --const QCommandLineOption Create::SetKeyFileOption = -- QCommandLineOption(QStringList() << "k" -- << "set-key-file", -- QObject::tr("Set the key file for the database."), -- QObject::tr("path")); -- --const QCommandLineOption Create::SetPasswordOption = -- QCommandLineOption(QStringList() << "p" -- << "set-password", -- QObject::tr("Set a password for the database.")); -- --Create::Create() --{ -- name = QString("db-create"); -- description = QObject::tr("Create a new database."); -- positionalArguments.append({QString("database"), QObject::tr("Path of the database."), QString("")}); -- options.append(Create::SetKeyFileOption); -- options.append(Create::SetPasswordOption); -- options.append(Create::DecryptionTimeOption); --} -- --/** -- * Create a database file using the command line. A key file and/or -- * password can be specified to encrypt the password. If none is -- * specified the function will fail. -- * -- * If a key file is specified but it can't be loaded, the function will -- * fail. -- * -- * If the database is being saved in a non existant directory, the -- * function will fail. -- * -- * @return EXIT_SUCCESS on success, or EXIT_FAILURE on failure -- */ --int Create::execute(const QStringList& arguments) --{ -- QSharedPointer parser = getCommandLineParser(arguments); -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- -- const QString& databaseFilename = args.at(0); -- if (QFileInfo::exists(databaseFilename)) { -- err << QObject::tr("File %1 already exists.").arg(databaseFilename) << endl; -- return EXIT_FAILURE; -- } -- -- // Validate the decryption time before asking for a password. -- QString decryptionTimeValue = parser->value(Create::DecryptionTimeOption); -- int decryptionTime = 0; -- if (decryptionTimeValue.length() != 0) { -- decryptionTime = decryptionTimeValue.toInt(); -- if (decryptionTime <= 0) { -- err << QObject::tr("Invalid decryption time %1.").arg(decryptionTimeValue) << endl; -- return EXIT_FAILURE; -- } -- if (decryptionTime < Kdf::MIN_ENCRYPTION_TIME || decryptionTime > Kdf::MAX_ENCRYPTION_TIME) { -- err << QObject::tr("Target decryption time must be between %1 and %2.") -- .arg(QString::number(Kdf::MIN_ENCRYPTION_TIME), QString::number(Kdf::MAX_ENCRYPTION_TIME)) -- << endl; -- return EXIT_FAILURE; -- } -- } -- -- auto key = QSharedPointer::create(); -- -- if (parser->isSet(Create::SetPasswordOption)) { -- auto passwordKey = Utils::getConfirmedPassword(); -- if (passwordKey.isNull()) { -- err << QObject::tr("Failed to set database password.") << endl; -- return EXIT_FAILURE; -- } -- key->addKey(passwordKey); -- } -- -- if (parser->isSet(Create::SetKeyFileOption)) { -- QSharedPointer fileKey; -- -- if (!loadFileKey(parser->value(Create::SetKeyFileOption), fileKey)) { -- err << QObject::tr("Loading the key file failed") << endl; -- return EXIT_FAILURE; -- } -- -- if (!fileKey.isNull()) { -- key->addKey(fileKey); -- } -- } -- -- if (key->isEmpty()) { -- err << QObject::tr("No key is set. Aborting database creation.") << endl; -- return EXIT_FAILURE; -- } -- -- QSharedPointer db(new Database); -- db->setKey(key); -- -- if (decryptionTime != 0) { -- auto kdf = db->kdf(); -- Q_ASSERT(kdf); -- -- out << QObject::tr("Benchmarking key derivation function for %1ms delay.").arg(decryptionTimeValue) << endl; -- int rounds = kdf->benchmark(decryptionTime); -- out << QObject::tr("Setting %1 rounds for key derivation function.").arg(QString::number(rounds)) << endl; -- kdf->setRounds(rounds); -- -- bool ok = db->changeKdf(kdf); -- -- if (!ok) { -- err << QObject::tr("error while setting database key derivation settings.") << endl; -- return EXIT_FAILURE; -- } -- } -- -- QString errorMessage; -- if (!db->saveAs(databaseFilename, &errorMessage, true, false)) { -- err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- out << QObject::tr("Successfully created new database.") << endl; -- currentDatabase = db; -- return EXIT_SUCCESS; --} -- --/** -- * Load a key file from disk. When the path specified does not exist a -- * new file will be generated. No folders will be generated so the parent -- * folder of the specified file nees to exist -- * -- * If the key file cannot be loaded or created the function will fail. -- * -- * @param path Path to the key file to be loaded -- * @param fileKey Resulting fileKey -- * @return true if the key file was loaded succesfully -- */ --bool Create::loadFileKey(const QString& path, QSharedPointer& fileKey) --{ -- auto& err = Utils::STDERR; -- QString error; -- fileKey = QSharedPointer(new FileKey()); -- -- if (!QFileInfo::exists(path)) { -- fileKey->create(path, &error); -- -- if (!error.isEmpty()) { -- err << QObject::tr("Creating KeyFile %1 failed: %2").arg(path, error) << endl; -- return false; -- } -- } -- -- if (!fileKey->load(path, &error)) { -- err << QObject::tr("Loading KeyFile %1 failed: %2").arg(path, error) << endl; -- return false; -- } -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Create.h keepassxc-2.6.4-patched/src/cli/Create.h ---- keepassxc-2.6.4-orig/src/cli/Create.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Create.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,39 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CREATE_H --#define KEEPASSXC_CREATE_H -- --#include "Command.h" -- --#include "keys/FileKey.h" -- --class Create : public Command --{ --public: -- Create(); -- int execute(const QStringList& arguments) override; -- -- static const QCommandLineOption SetKeyFileOption; -- static const QCommandLineOption SetPasswordOption; -- static const QCommandLineOption DecryptionTimeOption; -- --private: -- bool loadFileKey(const QString& path, QSharedPointer& fileKey); --}; -- --#endif // KEEPASSXC_CREATE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/DatabaseCommand.cpp keepassxc-2.6.4-patched/src/cli/DatabaseCommand.cpp ---- keepassxc-2.6.4-orig/src/cli/DatabaseCommand.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/DatabaseCommand.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,67 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseCommand.h" -- --#include "Utils.h" -- --DatabaseCommand::DatabaseCommand() --{ -- positionalArguments.append({QString("database"), QObject::tr("Path of the database."), QString("")}); -- options.append(Command::KeyFileOption); -- options.append(Command::NoPasswordOption); --#ifdef WITH_XC_YUBIKEY -- options.append(Command::YubiKeyOption); --#endif --} -- --int DatabaseCommand::execute(const QStringList& arguments) --{ -- QStringList amendedArgs(arguments); -- if (currentDatabase) { -- amendedArgs.insert(1, currentDatabase->filePath()); -- } -- QSharedPointer parser = getCommandLineParser(amendedArgs); -- -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- QStringList args = parser->positionalArguments(); -- auto db = currentDatabase; -- if (!db) { -- // It would be nice to update currentDatabase here, but the CLI tests frequently -- // re-use Command objects to exercise non-interactive behavior. Updating the current -- // database confuses these tests. Because of this, we leave it up to the interactive -- // mode implementation in the main command loop to update currentDatabase -- // (see keepassxc-cli.cpp). -- db = Utils::unlockDatabase(args.at(0), -- !parser->isSet(Command::NoPasswordOption), -- parser->value(Command::KeyFileOption), --#ifdef WITH_XC_YUBIKEY -- parser->value(Command::YubiKeyOption), --#else -- "", --#endif -- parser->isSet(Command::QuietOption)); -- if (!db) { -- return EXIT_FAILURE; -- } -- } -- -- return executeWithDatabase(db, parser); --} -diff -urNr keepassxc-2.6.4-orig/src/cli/DatabaseCommand.h keepassxc-2.6.4-patched/src/cli/DatabaseCommand.h ---- keepassxc-2.6.4-orig/src/cli/DatabaseCommand.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/DatabaseCommand.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASECOMMAND_H --#define KEEPASSXC_DATABASECOMMAND_H -- --#include -- --#include "Command.h" --#include "Utils.h" --#include "core/Database.h" -- --class DatabaseCommand : public Command --{ --public: -- DatabaseCommand(); -- int execute(const QStringList& arguments) override; -- virtual int executeWithDatabase(QSharedPointer db, QSharedPointer parser) = 0; --}; -- --#endif // KEEPASSXC_DATABASECOMMAND_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Diceware.cpp keepassxc-2.6.4-patched/src/cli/Diceware.cpp ---- keepassxc-2.6.4-orig/src/cli/Diceware.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Diceware.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Diceware.h" -- --#include "Utils.h" --#include "cli/TextStream.h" --#include "core/PassphraseGenerator.h" -- --const QCommandLineOption Diceware::WordCountOption = -- QCommandLineOption(QStringList() << "W" -- << "words", -- QObject::tr("Word count for the diceware passphrase."), -- QObject::tr("count", "CLI parameter")); -- --const QCommandLineOption Diceware::WordListOption = -- QCommandLineOption(QStringList() << "w" -- << "word-list", -- QObject::tr("Wordlist for the diceware generator.\n[Default: EFF English]"), -- QObject::tr("path")); -- --Diceware::Diceware() --{ -- name = QString("diceware"); -- description = QObject::tr("Generate a new random diceware passphrase."); -- options.append(Diceware::WordCountOption); -- options.append(Diceware::WordListOption); --} -- --int Diceware::execute(const QStringList& arguments) --{ -- QSharedPointer parser = getCommandLineParser(arguments); -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- PassphraseGenerator dicewareGenerator; -- -- QString wordCount = parser->value(Diceware::WordCountOption); -- if (wordCount.isEmpty()) { -- dicewareGenerator.setWordCount(PassphraseGenerator::DefaultWordCount); -- } else if (wordCount.toInt() <= 0) { -- err << QObject::tr("Invalid word count %1").arg(wordCount) << endl; -- return EXIT_FAILURE; -- } else { -- dicewareGenerator.setWordCount(wordCount.toInt()); -- } -- -- QString wordListFile = parser->value(Diceware::WordListOption); -- if (!wordListFile.isEmpty()) { -- dicewareGenerator.setWordList(wordListFile); -- } -- -- if (!dicewareGenerator.isValid()) { -- // We already validated the word count input so if the generator is invalid, it -- // must be because the word list is too small. -- err << QObject::tr("The word list is too small (< 1000 items)") << endl; -- return EXIT_FAILURE; -- } -- -- QString password = dicewareGenerator.generatePassphrase(); -- out << password << endl; -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Diceware.h keepassxc-2.6.4-patched/src/cli/Diceware.h ---- keepassxc-2.6.4-orig/src/cli/Diceware.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Diceware.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DICEWARE_H --#define KEEPASSXC_DICEWARE_H -- --#include "Command.h" -- --class Diceware : public Command --{ --public: -- Diceware(); -- -- int execute(const QStringList& arguments) override; -- -- static const QCommandLineOption WordCountOption; -- static const QCommandLineOption WordListOption; --}; -- --#endif // KEEPASSXC_DICEWARE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Edit.cpp keepassxc-2.6.4-patched/src/cli/Edit.cpp ---- keepassxc-2.6.4-orig/src/cli/Edit.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Edit.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,134 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Edit.h" -- --#include "cli/Add.h" --#include "cli/Generate.h" --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/PasswordGenerator.h" -- --const QCommandLineOption Edit::TitleOption = QCommandLineOption(QStringList() << "t" -- << "title", -- QObject::tr("Title for the entry."), -- QObject::tr("title")); -- --Edit::Edit() --{ -- name = QString("edit"); -- description = QObject::tr("Edit an entry."); -- // Using some of the options from the Add command since they are the same. -- options.append(Add::UsernameOption); -- options.append(Add::UrlOption); -- options.append(Add::PasswordPromptOption); -- options.append(Edit::TitleOption); -- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to edit."), QString("")}); -- -- // Password generation options. -- options.append(Add::GenerateOption); -- options.append(Generate::PasswordLengthOption); -- options.append(Generate::LowerCaseOption); -- options.append(Generate::UpperCaseOption); -- options.append(Generate::NumbersOption); -- options.append(Generate::SpecialCharsOption); -- options.append(Generate::ExtendedAsciiOption); -- options.append(Generate::ExcludeCharsOption); -- options.append(Generate::ExcludeSimilarCharsOption); -- options.append(Generate::IncludeEveryGroupOption); --} -- --int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& entryPath = args.at(1); -- -- // Cannot use those 2 options at the same time! -- if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { -- err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl; -- return EXIT_FAILURE; -- } -- -- // Validating the password generator here, before we actually start -- // the update. -- QSharedPointer passwordGenerator; -- bool generate = parser->isSet(Add::GenerateOption); -- if (generate) { -- passwordGenerator = Generate::createGenerator(parser); -- if (passwordGenerator.isNull()) { -- return EXIT_FAILURE; -- } -- } -- -- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); -- if (!entry) { -- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- QString username = parser->value(Add::UsernameOption); -- QString url = parser->value(Add::UrlOption); -- QString title = parser->value(Edit::TitleOption); -- bool prompt = parser->isSet(Add::PasswordPromptOption); -- if (username.isEmpty() && url.isEmpty() && title.isEmpty() && !prompt && !generate) { -- err << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- entry->beginUpdate(); -- -- if (!title.isEmpty()) { -- entry->setTitle(title); -- } -- -- if (!username.isEmpty()) { -- entry->setUsername(username); -- } -- -- if (!url.isEmpty()) { -- entry->setUrl(url); -- } -- -- if (prompt) { -- out << QObject::tr("Enter new password for entry: ") << flush; -- QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); -- entry->setPassword(password); -- } else if (generate) { -- QString password = passwordGenerator->generatePassword(); -- entry->setPassword(password); -- } -- -- entry->endUpdate(); -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- out << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl; -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Edit.h keepassxc-2.6.4-patched/src/cli/Edit.h ---- keepassxc-2.6.4-orig/src/cli/Edit.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Edit.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_EDIT_H --#define KEEPASSXC_EDIT_H -- --#include "DatabaseCommand.h" -- --class Edit : public DatabaseCommand --{ --public: -- Edit(); -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption TitleOption; --}; -- --#endif // KEEPASSXC_EDIT_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Estimate.cpp keepassxc-2.6.4-patched/src/cli/Estimate.cpp ---- keepassxc-2.6.4-orig/src/cli/Estimate.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Estimate.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,178 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Estimate.h" --#include "cli/Utils.h" -- --#include "cli/TextStream.h" --#include "core/PasswordHealth.h" --#include --#include --#include --#include -- --/* For pre-compiled headers under windows */ --#ifdef _WIN32 --#ifndef __MINGW32__ --#include "stdafx.h" --#endif --#endif -- --const QCommandLineOption Estimate::AdvancedOption = -- QCommandLineOption(QStringList() << "a" -- << "advanced", -- QObject::tr("Perform advanced analysis on the password.")); -- --Estimate::Estimate() --{ -- name = QString("estimate"); -- optionalArguments.append( -- {QString("password"), QObject::tr("Password for which to estimate the entropy."), QString("[password]")}); -- options.append(Estimate::AdvancedOption); -- description = QObject::tr("Estimate the entropy of a password."); --} -- --static void estimate(const char* pwd, bool advanced) --{ -- auto& out = Utils::STDOUT; -- -- int len = static_cast(strlen(pwd)); -- if (!advanced) { -- const auto e = PasswordHealth(pwd).entropy(); -- // clang-format off -- out << QObject::tr("Length %1").arg(len, 0) << '\t' -- << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' -- << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << endl; -- // clang-format on -- } else { -- int ChkLen = 0; -- ZxcMatch_t *info, *p; -- double m = 0.0; -- const auto e = ZxcvbnMatch(pwd, nullptr, &info); -- for (p = info; p; p = p->Next) { -- m += p->Entrpy; -- } -- m = e - m; -- // clang-format off -- out << QObject::tr("Length %1").arg(len) << '\t' -- << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' -- << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << "\n " -- << QObject::tr("Multi-word extra bits %1").arg(m, 0, 'f', 1) << endl; -- // clang-format on -- p = info; -- ChkLen = 0; -- while (p) { -- int n; -- switch (static_cast(p->Type)) { -- case BRUTE_MATCH: -- out << " " << QObject::tr("Type: Bruteforce") << " "; -- break; -- case DICTIONARY_MATCH: -- out << " " << QObject::tr("Type: Dictionary") << " "; -- break; -- case DICT_LEET_MATCH: -- out << " " << QObject::tr("Type: Dict+Leet") << " "; -- break; -- case USER_MATCH: -- out << " " << QObject::tr("Type: User Words") << " "; -- break; -- case USER_LEET_MATCH: -- out << " " << QObject::tr("Type: User+Leet") << " "; -- break; -- case REPEATS_MATCH: -- out << " " << QObject::tr("Type: Repeated") << " "; -- break; -- case SEQUENCE_MATCH: -- out << " " << QObject::tr("Type: Sequence") << " "; -- break; -- case SPATIAL_MATCH: -- out << " " << QObject::tr("Type: Spatial") << " "; -- break; -- case DATE_MATCH: -- out << " " << QObject::tr("Type: Date") << " "; -- break; -- case BRUTE_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Bruteforce(Rep)") << " "; -- break; -- case DICTIONARY_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Dictionary(Rep)") << " "; -- break; -- case DICT_LEET_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Dict+Leet(Rep)") << " "; -- break; -- case USER_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: User Words(Rep)") << " "; -- break; -- case USER_LEET_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: User+Leet(Rep)") << " "; -- break; -- case REPEATS_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Repeated(Rep)") << " "; -- break; -- case SEQUENCE_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Sequence(Rep)") << " "; -- break; -- case SPATIAL_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Spatial(Rep)") << " "; -- break; -- case DATE_MATCH + MULTIPLE_MATCH: -- out << " " << QObject::tr("Type: Date(Rep)") << " "; -- break; -- -- default: -- out << " " << QObject::tr("Type: Unknown%1").arg(p->Type) << " "; -- break; -- } -- ChkLen += p->Length; -- // clang-format off -- out << QObject::tr("Length %1").arg(p->Length) << '\t' -- << QObject::tr("Entropy %1 (%2)").arg(p->Entrpy, 6, 'f', 3).arg(p->Entrpy * 0.301029996, 0, 'f', 2) << '\t'; -- // clang-format on -- for (n = 0; n < p->Length; ++n, ++pwd) { -- out << *pwd; -- } -- out << endl; -- p = p->Next; -- } -- ZxcvbnFreeInfo(info); -- if (ChkLen != len) { -- out << QObject::tr("*** Password length (%1) != sum of length of parts (%2) ***").arg(len).arg(ChkLen) -- << endl; -- } -- } --} -- --int Estimate::execute(const QStringList& arguments) --{ -- QSharedPointer parser = getCommandLineParser(arguments); -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- auto& in = Utils::STDIN; -- const QStringList args = parser->positionalArguments(); -- -- QString password; -- if (args.size() == 1) { -- password = args.at(0); -- } else { -- password = in.readLine(); -- } -- -- estimate(password.toLatin1(), parser->isSet(Estimate::AdvancedOption)); -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Estimate.h keepassxc-2.6.4-patched/src/cli/Estimate.h ---- keepassxc-2.6.4-orig/src/cli/Estimate.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Estimate.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ESTIMATE_H --#define KEEPASSXC_ESTIMATE_H -- --#include "Command.h" -- --class Estimate : public Command --{ --public: -- Estimate(); -- int execute(const QStringList& arguments) override; -- -- static const QCommandLineOption AdvancedOption; --}; -- --#endif // KEEPASSXC_ESTIMATE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Exit.cpp keepassxc-2.6.4-patched/src/cli/Exit.cpp ---- keepassxc-2.6.4-orig/src/cli/Exit.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Exit.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Exit.h" -- --#include --#include --#include -- --Exit::Exit(const QString& name) --{ -- this->name = name; -- description = QObject::tr("Exit interactive mode."); --} -- --int Exit::execute(const QStringList& arguments) --{ -- Q_UNUSED(arguments) -- // A placeholder only, behavior is implemented in keepassxc-cli.cpp. -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Exit.h keepassxc-2.6.4-patched/src/cli/Exit.h ---- keepassxc-2.6.4-orig/src/cli/Exit.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Exit.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,33 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_EXIT_H --#define KEEPASSXC_EXIT_H -- --#include --#include -- --#include "Command.h" -- --class Exit : public Command --{ --public: -- Exit(const QString& name); -- int execute(const QStringList& arguments) override; --}; -- --#endif // KEEPASSXC_EXIT_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Export.cpp keepassxc-2.6.4-patched/src/cli/Export.cpp ---- keepassxc-2.6.4-orig/src/cli/Export.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Export.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Export.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "format/CsvExporter.h" -- --const QCommandLineOption Export::FormatOption = QCommandLineOption( -- QStringList() << "f" -- << "format", -- QObject::tr("Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'."), -- QStringLiteral("xml|csv")); -- --Export::Export() --{ -- name = QStringLiteral("export"); -- options.append(Export::FormatOption); -- description = QObject::tr("Exports the content of a database to standard output in the specified format."); --} -- --int Export::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- TextStream out(Utils::STDOUT.device()); -- auto& err = Utils::STDERR; -- -- QString format = parser->value(Export::FormatOption); -- if (format.isEmpty() || format.startsWith(QStringLiteral("xml"), Qt::CaseInsensitive)) { -- QByteArray xmlData; -- QString errorMessage; -- if (!database->extract(xmlData, &errorMessage)) { -- err << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- out.write(xmlData.constData()); -- } else if (format.startsWith(QStringLiteral("csv"), Qt::CaseInsensitive)) { -- CsvExporter csvExporter; -- out << csvExporter.exportDatabase(database); -- } else { -- err << QObject::tr("Unsupported format %1").arg(format) << endl; -- return EXIT_FAILURE; -- } -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Export.h keepassxc-2.6.4-patched/src/cli/Export.h ---- keepassxc-2.6.4-orig/src/cli/Export.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Export.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,33 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_EXPORT_H --#define KEEPASSXC_EXPORT_H -- --#include "DatabaseCommand.h" -- --class Export : public DatabaseCommand --{ --public: -- Export(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption FormatOption; --}; -- --#endif // KEEPASSXC_EXPORT_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Generate.cpp keepassxc-2.6.4-patched/src/cli/Generate.cpp ---- keepassxc-2.6.4-orig/src/cli/Generate.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Generate.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,153 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Generate.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" -- --const QCommandLineOption Generate::PasswordLengthOption = -- QCommandLineOption(QStringList() << "L" -- << "length", -- QObject::tr("Length of the generated password"), -- QObject::tr("length")); -- --const QCommandLineOption Generate::LowerCaseOption = QCommandLineOption(QStringList() << "l" -- << "lower", -- QObject::tr("Use lowercase characters")); -- --const QCommandLineOption Generate::UpperCaseOption = QCommandLineOption(QStringList() << "U" -- << "upper", -- QObject::tr("Use uppercase characters")); -- --const QCommandLineOption Generate::NumbersOption = QCommandLineOption(QStringList() << "n" -- << "numeric", -- QObject::tr("Use numbers")); -- --const QCommandLineOption Generate::SpecialCharsOption = QCommandLineOption(QStringList() << "s" -- << "special", -- QObject::tr("Use special characters")); -- --const QCommandLineOption Generate::ExtendedAsciiOption = QCommandLineOption(QStringList() << "e" -- << "extended", -- QObject::tr("Use extended ASCII")); -- --const QCommandLineOption Generate::ExcludeCharsOption = QCommandLineOption(QStringList() << "x" -- << "exclude", -- QObject::tr("Exclude character set"), -- QObject::tr("chars")); -- --const QCommandLineOption Generate::ExcludeSimilarCharsOption = -- QCommandLineOption(QStringList() << "exclude-similar", QObject::tr("Exclude similar looking characters")); -- --const QCommandLineOption Generate::IncludeEveryGroupOption = -- QCommandLineOption(QStringList() << "every-group", QObject::tr("Include characters from every selected group")); --Generate::Generate() --{ -- name = QString("generate"); -- description = QObject::tr("Generate a new random password."); -- options.append(Generate::PasswordLengthOption); -- options.append(Generate::LowerCaseOption); -- options.append(Generate::UpperCaseOption); -- options.append(Generate::NumbersOption); -- options.append(Generate::SpecialCharsOption); -- options.append(Generate::ExtendedAsciiOption); -- options.append(Generate::ExcludeCharsOption); -- options.append(Generate::ExcludeSimilarCharsOption); -- options.append(Generate::IncludeEveryGroupOption); --} -- --/** -- * Creates a password generator instance using the command line options -- * of the parser object. -- */ --QSharedPointer Generate::createGenerator(QSharedPointer parser) --{ -- auto& err = Utils::STDERR; -- QSharedPointer passwordGenerator = QSharedPointer(new PasswordGenerator()); -- QString passwordLength = parser->value(Generate::PasswordLengthOption); -- if (passwordLength.isEmpty()) { -- passwordGenerator->setLength(PasswordGenerator::DefaultLength); -- } else if (passwordLength.toInt() <= 0) { -- err << QObject::tr("Invalid password length %1").arg(passwordLength) << endl; -- return QSharedPointer(nullptr); -- } else { -- passwordGenerator->setLength(passwordLength.toInt()); -- } -- -- PasswordGenerator::CharClasses classes = 0x0; -- -- if (parser->isSet(Generate::LowerCaseOption)) { -- classes |= PasswordGenerator::LowerLetters; -- } -- if (parser->isSet(Generate::UpperCaseOption)) { -- classes |= PasswordGenerator::UpperLetters; -- } -- if (parser->isSet(Generate::NumbersOption)) { -- classes |= PasswordGenerator::Numbers; -- } -- if (parser->isSet(Generate::SpecialCharsOption)) { -- classes |= PasswordGenerator::SpecialCharacters; -- } -- if (parser->isSet(Generate::ExtendedAsciiOption)) { -- classes |= PasswordGenerator::EASCII; -- } -- -- PasswordGenerator::GeneratorFlags flags = 0x0; -- -- if (parser->isSet(Generate::ExcludeSimilarCharsOption)) { -- flags |= PasswordGenerator::ExcludeLookAlike; -- } -- if (parser->isSet(Generate::IncludeEveryGroupOption)) { -- flags |= PasswordGenerator::CharFromEveryGroup; -- } -- -- // The default charset will be used if no explicit class -- // option was set. -- passwordGenerator->setCharClasses(classes); -- passwordGenerator->setFlags(flags); -- passwordGenerator->setExcludedChars(parser->value(Generate::ExcludeCharsOption)); -- -- if (!passwordGenerator->isValid()) { -- err << QObject::tr("Invalid password generator after applying all options") << endl; -- return QSharedPointer(nullptr); -- } -- -- return passwordGenerator; --} -- --int Generate::execute(const QStringList& arguments) --{ -- QSharedPointer parser = getCommandLineParser(arguments); -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- QSharedPointer passwordGenerator = Generate::createGenerator(parser); -- if (passwordGenerator.isNull()) { -- return EXIT_FAILURE; -- } -- -- auto& out = Utils::STDOUT; -- QString password = passwordGenerator->generatePassword(); -- out << password << endl; -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Generate.h keepassxc-2.6.4-patched/src/cli/Generate.h ---- keepassxc-2.6.4-orig/src/cli/Generate.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Generate.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,44 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_GENERATE_H --#define KEEPASSXC_GENERATE_H -- --#include "Command.h" -- --#include "core/PasswordGenerator.h" -- --class Generate : public Command --{ --public: -- Generate(); -- int execute(const QStringList& arguments) override; -- -- static QSharedPointer createGenerator(QSharedPointer parser); -- -- static const QCommandLineOption PasswordLengthOption; -- static const QCommandLineOption LowerCaseOption; -- static const QCommandLineOption UpperCaseOption; -- static const QCommandLineOption NumbersOption; -- static const QCommandLineOption SpecialCharsOption; -- static const QCommandLineOption ExtendedAsciiOption; -- static const QCommandLineOption ExcludeCharsOption; -- static const QCommandLineOption ExcludeSimilarCharsOption; -- static const QCommandLineOption IncludeEveryGroupOption; --}; -- --#endif // KEEPASSXC_GENERATE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Help.cpp keepassxc-2.6.4-patched/src/cli/Help.cpp ---- keepassxc-2.6.4-orig/src/cli/Help.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Help.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,44 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Help.h" -- --#include "Command.h" --#include "TextStream.h" --#include "Utils.h" -- --Help::Help() --{ -- name = QString("help"); -- description = QObject::tr("Display command help."); --} -- --int Help::execute(const QStringList& arguments) --{ -- auto& out = Utils::STDOUT; -- QSharedPointer command; -- if (arguments.size() > 1 && (command = Commands::getCommand(arguments.at(1)))) { -- out << command->getHelpText(); -- } else { -- out << "\n\n" << QObject::tr("Available commands:") << "\n"; -- for (auto& cmd : Commands::getCommands()) { -- out << cmd->getDescriptionLine(); -- } -- } -- out.flush(); -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Help.h keepassxc-2.6.4-patched/src/cli/Help.h ---- keepassxc-2.6.4-orig/src/cli/Help.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Help.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_HELP_H --#define KEEPASSXC_HELP_H -- --#include "Command.h" -- --class Help : public Command --{ --public: -- Help(); -- ~Help() override = default; -- int execute(const QStringList& arguments) override; --}; -- --#endif // KEEPASSXC_HELP_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Import.cpp keepassxc-2.6.4-patched/src/cli/Import.cpp ---- keepassxc-2.6.4-orig/src/cli/Import.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Import.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,101 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include --#include --#include -- --#include "Import.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "keys/CompositeKey.h" --#include "keys/Key.h" -- --/** -- * Create a database file from an XML export of another database. -- * A password can be specified to encrypt the database. -- * If none is specified the function will fail. -- * -- * If the database is being saved in a non existant directory, the -- * function will fail. -- * -- * @return EXIT_SUCCESS on success, or EXIT_FAILURE on failure -- */ --Import::Import() --{ -- name = QString("import"); -- description = QObject::tr("Import the contents of an XML database."); -- positionalArguments.append({QString("xml"), QObject::tr("Path of the XML database export."), QString("")}); -- positionalArguments.append({QString("database"), QObject::tr("Path of the new database."), QString("")}); --} -- --int Import::execute(const QStringList& arguments) --{ -- QSharedPointer parser = getCommandLineParser(arguments); -- if (parser.isNull()) { -- return EXIT_FAILURE; -- } -- -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& xmlExportPath = args.at(0); -- const QString& dbPath = args.at(1); -- -- if (QFileInfo::exists(dbPath)) { -- err << QObject::tr("File %1 already exists.").arg(dbPath) << endl; -- return EXIT_FAILURE; -- } -- -- auto key = QSharedPointer::create(); -- -- auto passwordKey = Utils::getConfirmedPassword(); -- if (passwordKey.isNull()) { -- err << QObject::tr("Failed to set database password.") << endl; -- return EXIT_FAILURE; -- } -- key->addKey(passwordKey); -- -- if (key->isEmpty()) { -- err << QObject::tr("No key is set. Aborting database creation.") << endl; -- return EXIT_FAILURE; -- } -- -- QString errorMessage; -- Database db; -- db.setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); -- db.setKey(key); -- -- if (!db.import(xmlExportPath, &errorMessage)) { -- err << QObject::tr("Unable to import XML database: %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- if (!db.saveAs(dbPath, &errorMessage, true, false)) { -- err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- out << QObject::tr("Successfully imported database.") << endl; -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Import.h keepassxc-2.6.4-patched/src/cli/Import.h ---- keepassxc-2.6.4-orig/src/cli/Import.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Import.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,30 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_IMPORT_H --#define KEEPASSXC_IMPORT_H -- --#include "Command.h" -- --class Import : public Command --{ --public: -- Import(); -- int execute(const QStringList& arguments) override; --}; -- --#endif // KEEPASSXC_IMPORT_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Info.cpp keepassxc-2.6.4-patched/src/cli/Info.cpp ---- keepassxc-2.6.4-orig/src/cli/Info.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Info.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ --#include --#include -- --#include "Info.h" --#include "Utils.h" -- --#include "core/Database.h" --#include "core/Global.h" --#include "core/Metadata.h" --#include "format/KeePass2.h" -- --Info::Info() --{ -- name = QString("db-info"); -- description = QObject::tr("Show a database's information."); --} -- --int Info::executeWithDatabase(QSharedPointer database, QSharedPointer) --{ -- auto& out = Utils::STDOUT; -- -- out << QObject::tr("UUID: ") << database->uuid().toString() << endl; -- out << QObject::tr("Name: ") << database->metadata()->name() << endl; -- out << QObject::tr("Description: ") << database->metadata()->description() << endl; -- for (auto& cipher : asConst(KeePass2::CIPHERS)) { -- if (cipher.first == database->cipher()) { -- out << QObject::tr("Cipher: ") << cipher.second << endl; -- } -- } -- out << QObject::tr("KDF: ") << database->kdf()->toString() << endl; -- if (database->metadata()->recycleBinEnabled()) { -- out << QObject::tr("Recycle bin is enabled.") << endl; -- } else { -- out << QObject::tr("Recycle bin is not enabled.") << endl; -- } -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Info.h keepassxc-2.6.4-patched/src/cli/Info.h ---- keepassxc-2.6.4-orig/src/cli/Info.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Info.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_INFO_H --#define KEEPASSXC_INFO_H -- --#include "DatabaseCommand.h" -- --class Info : public DatabaseCommand --{ --public: -- Info(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); --}; -- --#endif // KEEPASSXC_INFO_H -diff -urNr keepassxc-2.6.4-orig/src/cli/keepassxc-cli.cpp keepassxc-2.6.4-patched/src/cli/keepassxc-cli.cpp ---- keepassxc-2.6.4-orig/src/cli/keepassxc-cli.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/keepassxc-cli.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,261 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include --#include --#include --#include --#include -- --#include "cli/TextStream.h" --#include -- --#include "DatabaseCommand.h" --#include "Open.h" --#include "Utils.h" --#include "config-keepassx.h" --#include "core/Bootstrap.h" --#include "core/Tools.h" --#include "crypto/Crypto.h" -- --#if defined(WITH_ASAN) && defined(WITH_LSAN) --#include --#endif -- --#if defined(USE_READLINE) --#include --#include --#endif -- --class LineReader --{ --public: -- virtual ~LineReader() = default; -- virtual QString readLine(QString prompt) = 0; -- virtual bool isFinished() = 0; --}; -- --class SimpleLineReader : public LineReader --{ --public: -- SimpleLineReader() -- : inStream(stdin, QIODevice::ReadOnly) -- , outStream(stdout, QIODevice::WriteOnly) -- , finished(false) -- { -- } -- -- QString readLine(QString prompt) override -- { -- outStream << prompt; -- outStream.flush(); -- QString result = inStream.readLine(); -- if (result.isNull()) { -- finished = true; -- } -- return result; -- } -- -- bool isFinished() override -- { -- return finished; -- } -- --private: -- TextStream inStream; -- TextStream outStream; -- bool finished; --}; -- --#if defined(USE_READLINE) --class ReadlineLineReader : public LineReader --{ --public: -- ReadlineLineReader() -- : finished(false) -- { -- } -- -- QString readLine(QString prompt) override -- { -- char* result = readline(prompt.toStdString().c_str()); -- if (!result) { -- finished = true; -- return {}; -- } -- add_history(result); -- QString qstr(result); -- free(result); -- return qstr; -- } -- -- bool isFinished() override -- { -- return finished; -- } -- --private: -- bool finished; --}; --#endif -- --void enterInteractiveMode(const QStringList& arguments) --{ -- auto& err = Utils::STDERR; -- // Replace command list with interactive version -- Commands::setupCommands(true); -- -- Open openCmd; -- QStringList openArgs(arguments); -- openArgs.removeFirst(); -- openCmd.execute(openArgs); -- -- QScopedPointer reader; --#if defined(USE_READLINE) -- reader.reset(new ReadlineLineReader()); --#else -- reader.reset(new SimpleLineReader()); --#endif -- -- QSharedPointer currentDatabase(openCmd.currentDatabase); -- -- QString command; -- while (true) { -- QString prompt; -- if (currentDatabase) { -- prompt += currentDatabase->metadata()->name(); -- if (prompt.isEmpty()) { -- prompt += QFileInfo(currentDatabase->filePath()).fileName(); -- } -- } -- prompt += "> "; -- command = reader->readLine(prompt); -- if (reader->isFinished()) { -- break; -- } -- -- QStringList args = Utils::splitCommandString(command); -- if (args.empty()) { -- continue; -- } -- -- auto cmd = Commands::getCommand(args[0]); -- if (!cmd) { -- err << QObject::tr("Unknown command %1").arg(args[0]) << endl; -- continue; -- } else if (cmd->name == "quit" || cmd->name == "exit") { -- break; -- } -- -- cmd->currentDatabase = currentDatabase; -- cmd->execute(args); -- currentDatabase = cmd->currentDatabase; -- cmd->currentDatabase.reset(); -- } -- -- if (currentDatabase) { -- currentDatabase->releaseData(); -- } --} -- --int main(int argc, char** argv) --{ -- if (!Crypto::init()) { -- qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString())); -- return EXIT_FAILURE; -- } -- -- QCoreApplication app(argc, argv); -- QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION); -- -- Bootstrap::bootstrap(); -- Utils::setDefaultTextStreams(); -- Commands::setupCommands(false); -- -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- QStringList arguments; -- for (int i = 0; i < argc; ++i) { -- arguments << QString(argv[i]); -- } -- QCommandLineParser parser; -- -- QString description("KeePassXC command line interface."); -- description = description.append(QObject::tr("\n\nAvailable commands:\n")); -- for (auto& command : Commands::getCommands()) { -- description = description.append(command->getDescriptionLine()); -- } -- parser.setApplicationDescription(description); -- -- parser.addPositionalArgument("command", QObject::tr("Name of the command to execute.")); -- -- QCommandLineOption debugInfoOption(QStringList() << "debug-info", QObject::tr("Displays debugging information.")); -- parser.addOption(debugInfoOption); -- parser.addHelpOption(); -- parser.addVersionOption(); -- // TODO : use the setOptionsAfterPositionalArgumentsMode (Qt 5.6) function -- // when available. Until then, options passed to sub-commands won't be -- // recognized by this parser. -- parser.parse(arguments); -- -- if (parser.positionalArguments().empty()) { -- if (parser.isSet("version")) { -- // Switch to parser.showVersion() when available (QT 5.4). -- out << KEEPASSXC_VERSION << endl; -- return EXIT_SUCCESS; -- } else if (parser.isSet(debugInfoOption)) { -- QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); -- out << debugInfo << endl; -- return EXIT_SUCCESS; -- } -- // showHelp exits the application immediately. -- parser.showHelp(); -- } -- -- QString commandName = parser.positionalArguments().at(0); -- if (commandName == "open") { -- enterInteractiveMode(arguments); -- return EXIT_SUCCESS; -- } -- -- auto command = Commands::getCommand(commandName); -- if (!command) { -- err << QObject::tr("Invalid command %1.").arg(commandName) << endl; -- err << parser.helpText(); -- return EXIT_FAILURE; -- } -- -- // Removing the first argument (keepassxc). -- arguments.removeFirst(); -- int exitCode = command->execute(arguments); -- -- if (command->currentDatabase) { -- command->currentDatabase.reset(); -- } -- --#if defined(WITH_ASAN) && defined(WITH_LSAN) -- // do leak check here to prevent massive tail of end-of-process leak errors from third-party libraries -- __lsan_do_leak_check(); -- __lsan_disable(); --#endif -- -- return exitCode; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/List.cpp keepassxc-2.6.4-patched/src/cli/List.cpp ---- keepassxc-2.6.4-orig/src/cli/List.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/List.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,72 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "List.h" --#include "cli/Utils.h" -- --#include "cli/TextStream.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" -- --const QCommandLineOption List::RecursiveOption = -- QCommandLineOption(QStringList() << "R" -- << "recursive", -- QObject::tr("Recursively list the elements of the group.")); -- --const QCommandLineOption List::FlattenOption = QCommandLineOption(QStringList() << "f" -- << "flatten", -- QObject::tr("Flattens the output to single lines.")); -- --List::List() --{ -- name = QString("ls"); -- description = QObject::tr("List database entries."); -- options.append(List::RecursiveOption); -- options.append(List::FlattenOption); -- optionalArguments.append( -- {QString("group"), QObject::tr("Path of the group to list. Default is /"), QString("[group]")}); --} -- --int List::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- bool recursive = parser->isSet(List::RecursiveOption); -- bool flatten = parser->isSet(List::FlattenOption); -- -- // No group provided, defaulting to root group. -- if (args.size() == 1) { -- out << database->rootGroup()->print(recursive, flatten) << flush; -- return EXIT_SUCCESS; -- } -- -- const QString& groupPath = args.at(1); -- Group* group = database->rootGroup()->findGroupByPath(groupPath); -- if (!group) { -- err << QObject::tr("Cannot find group %1.").arg(groupPath) << endl; -- return EXIT_FAILURE; -- } -- -- out << group->print(recursive, flatten) << flush; -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/List.h keepassxc-2.6.4-patched/src/cli/List.h ---- keepassxc-2.6.4-orig/src/cli/List.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/List.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_LIST_H --#define KEEPASSXC_LIST_H -- --#include "DatabaseCommand.h" -- --class List : public DatabaseCommand --{ --public: -- List(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption RecursiveOption; -- static const QCommandLineOption FlattenOption; --}; -- --#endif // KEEPASSXC_LIST_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Locate.cpp keepassxc-2.6.4-patched/src/cli/Locate.cpp ---- keepassxc-2.6.4-orig/src/cli/Locate.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Locate.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Locate.h" -- --#include -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" -- --Locate::Locate() --{ -- name = QString("locate"); -- description = QObject::tr("Find entries quickly."); -- positionalArguments.append({QString("term"), QObject::tr("Search term."), QString("")}); --} -- --int Locate::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& searchTerm = args.at(1); -- -- QStringList results = database->rootGroup()->locate(searchTerm); -- if (results.isEmpty()) { -- err << "No results for that search term." << endl; -- return EXIT_FAILURE; -- } -- -- for (const QString& result : asConst(results)) { -- out << result << endl; -- } -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Locate.h keepassxc-2.6.4-patched/src/cli/Locate.h ---- keepassxc-2.6.4-orig/src/cli/Locate.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Locate.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_LOCATE_H --#define KEEPASSXC_LOCATE_H -- --#include "DatabaseCommand.h" -- --class Locate : public DatabaseCommand --{ --public: -- Locate(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; --}; -- --#endif // KEEPASSXC_LOCATE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Merge.cpp keepassxc-2.6.4-patched/src/cli/Merge.cpp ---- keepassxc-2.6.4-orig/src/cli/Merge.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Merge.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,110 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include -- --#include "Merge.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Merger.h" -- --const QCommandLineOption Merge::SameCredentialsOption = -- QCommandLineOption(QStringList() << "s" -- << "same-credentials", -- QObject::tr("Use the same credentials for both database files.")); -- --const QCommandLineOption Merge::KeyFileFromOption = -- QCommandLineOption(QStringList() << "key-file-from", -- QObject::tr("Key file of the database to merge from."), -- QObject::tr("path")); -- --const QCommandLineOption Merge::NoPasswordFromOption = -- QCommandLineOption(QStringList() << "no-password-from", -- QObject::tr("Deactivate password key for the database to merge from.")); -- --const QCommandLineOption Merge::DryRunOption = -- QCommandLineOption(QStringList() << "dry-run", -- QObject::tr("Only print the changes detected by the merge operation.")); -- --const QCommandLineOption Merge::YubiKeyFromOption(QStringList() << "yubikey-from", -- QObject::tr("Yubikey slot for the second database."), -- QObject::tr("slot")); --Merge::Merge() --{ -- name = QString("merge"); -- description = QObject::tr("Merge two databases."); -- options.append(Merge::SameCredentialsOption); -- options.append(Merge::KeyFileFromOption); -- options.append(Merge::NoPasswordFromOption); -- options.append(Merge::DryRunOption); --#ifdef WITH_XC_YUBIKEY -- options.append(Merge::YubiKeyFromOption); --#endif -- positionalArguments.append({QString("database2"), QObject::tr("Path of the database to merge from."), QString("")}); --} -- --int Merge::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- -- auto& toDatabasePath = args.at(0); -- auto& fromDatabasePath = args.at(1); -- -- QSharedPointer db2; -- if (!parser->isSet(Merge::SameCredentialsOption)) { -- db2 = Utils::unlockDatabase(fromDatabasePath, -- !parser->isSet(Merge::NoPasswordFromOption), -- parser->value(Merge::KeyFileFromOption), -- parser->value(Merge::YubiKeyFromOption), -- parser->isSet(Command::QuietOption)); -- if (!db2) { -- return EXIT_FAILURE; -- } -- } else { -- db2 = QSharedPointer::create(); -- QString errorMessage; -- if (!db2->open(fromDatabasePath, database->key(), &errorMessage, false)) { -- err << QObject::tr("Error reading merge file:\n%1").arg(errorMessage); -- return EXIT_FAILURE; -- } -- } -- -- Merger merger(db2.data(), database.data()); -- QStringList changeList = merger.merge(); -- -- for (auto& mergeChange : changeList) { -- out << "\t" << mergeChange << endl; -- } -- -- if (!changeList.isEmpty() && !parser->isSet(Merge::DryRunOption)) { -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- out << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath) << endl; -- } else { -- out << QObject::tr("Database was not modified by merge operation.") << endl; -- } -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Merge.h keepassxc-2.6.4-patched/src/cli/Merge.h ---- keepassxc-2.6.4-orig/src/cli/Merge.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Merge.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,37 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_MERGE_H --#define KEEPASSXC_MERGE_H -- --#include "DatabaseCommand.h" -- --class Merge : public DatabaseCommand --{ --public: -- Merge(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; -- -- static const QCommandLineOption SameCredentialsOption; -- static const QCommandLineOption KeyFileFromOption; -- static const QCommandLineOption NoPasswordFromOption; -- static const QCommandLineOption YubiKeyFromOption; -- static const QCommandLineOption DryRunOption; --}; -- --#endif // KEEPASSXC_MERGE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Move.cpp keepassxc-2.6.4-patched/src/cli/Move.cpp ---- keepassxc-2.6.4-orig/src/cli/Move.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Move.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,79 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Move.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" -- --Move::Move() --{ -- name = QString("mv"); -- description = QObject::tr("Moves an entry to a new group."); -- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to move."), QString("")}); -- positionalArguments.append({QString("group"), QObject::tr("Path of the destination group."), QString("")}); --} -- --Move::~Move() --{ --} -- --int Move::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& entryPath = args.at(1); -- const QString& destinationPath = args.at(2); -- -- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); -- if (!entry) { -- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- Group* destinationGroup = database->rootGroup()->findGroupByPath(destinationPath); -- if (!destinationGroup) { -- err << QObject::tr("Could not find group with path %1.").arg(destinationPath) << endl; -- return EXIT_FAILURE; -- } -- -- if (destinationGroup == entry->parent()) { -- err << QObject::tr("Entry is already in group %1.").arg(destinationPath) << endl; -- return EXIT_FAILURE; -- } -- -- entry->beginUpdate(); -- entry->setGroup(destinationGroup); -- entry->endUpdate(); -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- out << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath) << endl; -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Move.h keepassxc-2.6.4-patched/src/cli/Move.h ---- keepassxc-2.6.4-orig/src/cli/Move.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Move.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_MOVE_H --#define KEEPASSXC_MOVE_H -- --#include "DatabaseCommand.h" -- --class Move : public DatabaseCommand --{ --public: -- Move(); -- ~Move(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); --}; -- --#endif // KEEPASSXC_MOVE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Open.cpp keepassxc-2.6.4-patched/src/cli/Open.cpp ---- keepassxc-2.6.4-orig/src/cli/Open.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Open.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Open.h" -- --#include -- --#include "DatabaseCommand.h" --#include "TextStream.h" --#include "Utils.h" -- --Open::Open() --{ -- name = QString("open"); -- description = QObject::tr("Open a database."); --} -- --int Open::execute(const QStringList& arguments) --{ -- currentDatabase.reset(nullptr); -- return this->DatabaseCommand::execute(arguments); --} -- --int Open::executeWithDatabase(QSharedPointer db, QSharedPointer parser) --{ -- Q_UNUSED(parser) -- currentDatabase = db; -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Open.h keepassxc-2.6.4-patched/src/cli/Open.h ---- keepassxc-2.6.4-orig/src/cli/Open.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Open.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_OPEN_H --#define KEEPASSXC_OPEN_H -- --#include "DatabaseCommand.h" -- --class Open : public DatabaseCommand --{ --public: -- Open(); -- int execute(const QStringList& arguments) override; -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; --}; -- --#endif // KEEPASSXC_OPEN_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Remove.cpp keepassxc-2.6.4-patched/src/cli/Remove.cpp ---- keepassxc-2.6.4-orig/src/cli/Remove.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Remove.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,73 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Remove.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" -- --Remove::Remove() --{ -- name = QString("rm"); -- description = QString("Remove an entry from the database."); -- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to remove."), QString("")}); --} -- --int Remove::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- auto& entryPath = parser->positionalArguments().at(1); -- QPointer entry = database->rootGroup()->findEntryByPath(entryPath); -- if (!entry) { -- err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- QString entryTitle = entry->title(); -- bool recycled = true; -- auto* recycleBin = database->metadata()->recycleBin(); -- if (!database->metadata()->recycleBinEnabled() || (recycleBin && recycleBin->findEntryByUuid(entry->uuid()))) { -- delete entry; -- recycled = false; -- } else { -- database->recycleEntry(entry); -- }; -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- if (recycled) { -- out << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl; -- } else { -- out << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << endl; -- } -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/RemoveGroup.cpp keepassxc-2.6.4-patched/src/cli/RemoveGroup.cpp ---- keepassxc-2.6.4-orig/src/cli/RemoveGroup.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/RemoveGroup.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,83 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "RemoveGroup.h" -- --#include "cli/TextStream.h" --#include "cli/Utils.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" -- --RemoveGroup::RemoveGroup() --{ -- name = QString("rmdir"); -- description = QString("Removes a group from a database."); -- positionalArguments.append({QString("group"), QObject::tr("Path of the group to remove."), QString("")}); --} -- --RemoveGroup::~RemoveGroup() --{ --} -- --int RemoveGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- QString groupPath = parser->positionalArguments().at(1); -- -- // Recursive option means were looking for a group to remove. -- QPointer group = database->rootGroup()->findGroupByPath(groupPath); -- if (!group) { -- err << QObject::tr("Group %1 not found.").arg(groupPath) << endl; -- return EXIT_FAILURE; -- } -- -- if (group == database->rootGroup()) { -- err << QObject::tr("Cannot remove root group from database.") << endl; -- return EXIT_FAILURE; -- } -- -- bool recycled = true; -- auto* recycleBin = database->metadata()->recycleBin(); -- if (!database->metadata()->recycleBinEnabled() || (recycleBin && recycleBin->findGroupByUuid(group->uuid()))) { -- delete group; -- recycled = false; -- } else { -- database->recycleGroup(group); -- }; -- -- QString errorMessage; -- if (!database->save(&errorMessage, true, false)) { -- err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; -- return EXIT_FAILURE; -- } -- -- if (recycled) { -- out << QObject::tr("Successfully recycled group %1.").arg(groupPath) << endl; -- } else { -- out << QObject::tr("Successfully deleted group %1.").arg(groupPath) << endl; -- } -- -- return EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/RemoveGroup.h keepassxc-2.6.4-patched/src/cli/RemoveGroup.h ---- keepassxc-2.6.4-orig/src/cli/RemoveGroup.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/RemoveGroup.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_REMOVEGROUP_H --#define KEEPASSXC_REMOVEGROUP_H -- --#include "DatabaseCommand.h" -- --class RemoveGroup : public DatabaseCommand --{ --public: -- RemoveGroup(); -- ~RemoveGroup(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); --}; -- --#endif // KEEPASSXC_REMOVEGROUP_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Remove.h keepassxc-2.6.4-patched/src/cli/Remove.h ---- keepassxc-2.6.4-orig/src/cli/Remove.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Remove.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,31 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_REMOVE_H --#define KEEPASSXC_REMOVE_H -- --#include "DatabaseCommand.h" -- --class Remove : public DatabaseCommand --{ --public: -- Remove(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); --}; -- --#endif // KEEPASSXC_REMOVE_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Show.cpp keepassxc-2.6.4-patched/src/cli/Show.cpp ---- keepassxc-2.6.4-orig/src/cli/Show.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Show.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,119 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Show.h" -- --#include --#include -- --#include "Utils.h" --#include "cli/TextStream.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" -- --#include -- --const QCommandLineOption Show::TotpOption = QCommandLineOption(QStringList() << "t" -- << "totp", -- QObject::tr("Show the entry's current TOTP.")); -- --const QCommandLineOption Show::ProtectedAttributesOption = -- QCommandLineOption(QStringList() << "s" -- << "show-protected", -- QObject::tr("Show the protected attributes in clear text.")); -- --const QCommandLineOption Show::AttributesOption = QCommandLineOption( -- QStringList() << "a" -- << "attributes", -- QObject::tr( -- "Names of the attributes to show. " -- "This option can be specified more than once, with each attribute shown one-per-line in the given order. " -- "If no attributes are specified, a summary of the default attributes is given."), -- QObject::tr("attribute")); -- --Show::Show() --{ -- name = QString("show"); -- description = QObject::tr("Show an entry's information."); -- options.append(Show::TotpOption); -- options.append(Show::AttributesOption); -- options.append(Show::ProtectedAttributesOption); -- positionalArguments.append({QString("entry"), QObject::tr("Name of the entry to show."), QString("")}); --} -- --int Show::executeWithDatabase(QSharedPointer database, QSharedPointer parser) --{ -- auto& out = Utils::STDOUT; -- auto& err = Utils::STDERR; -- -- const QStringList args = parser->positionalArguments(); -- const QString& entryPath = args.at(1); -- bool showTotp = parser->isSet(Show::TotpOption); -- bool showProtectedAttributes = parser->isSet(Show::ProtectedAttributesOption); -- QStringList attributes = parser->values(Show::AttributesOption); -- -- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); -- if (!entry) { -- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- if (showTotp && !entry->hasTotp()) { -- err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; -- return EXIT_FAILURE; -- } -- -- // If no attributes specified, output the default attribute set. -- bool showDefaultAttributes = attributes.isEmpty() && !showTotp; -- if (showDefaultAttributes) { -- attributes = EntryAttributes::DefaultAttributes; -- } -- -- // Iterate over the attributes and output them line-by-line. -- bool encounteredError = false; -- for (const QString& attributeName : asConst(attributes)) { -- QStringList attrs = Utils::findAttributes(*entry->attributes(), attributeName); -- if (attrs.isEmpty()) { -- encounteredError = true; -- err << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << endl; -- continue; -- } else if (attrs.size() > 1) { -- encounteredError = true; -- err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") -- .arg(attributeName, QLocale().createSeparatedList(attrs)) -- << endl; -- continue; -- } -- QString canonicalName = attrs[0]; -- if (showDefaultAttributes) { -- out << canonicalName << ": "; -- } -- if (entry->attributes()->isProtected(canonicalName) && showDefaultAttributes && !showProtectedAttributes) { -- out << "PROTECTED" << endl; -- } else { -- out << entry->resolveMultiplePlaceholders(entry->attributes()->value(canonicalName)) << endl; -- } -- } -- -- if (showTotp) { -- out << entry->totp() << endl; -- } -- -- return encounteredError ? EXIT_FAILURE : EXIT_SUCCESS; --} -diff -urNr keepassxc-2.6.4-orig/src/cli/Show.h keepassxc-2.6.4-patched/src/cli/Show.h ---- keepassxc-2.6.4-orig/src/cli/Show.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Show.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_SHOW_H --#define KEEPASSXC_SHOW_H -- --#include "DatabaseCommand.h" -- --class Show : public DatabaseCommand --{ --public: -- Show(); -- -- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); -- -- static const QCommandLineOption TotpOption; -- static const QCommandLineOption AttributesOption; -- static const QCommandLineOption ProtectedAttributesOption; --}; -- --#endif // KEEPASSXC_SHOW_H -diff -urNr keepassxc-2.6.4-orig/src/cli/TextStream.cpp keepassxc-2.6.4-patched/src/cli/TextStream.cpp ---- keepassxc-2.6.4-orig/src/cli/TextStream.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/TextStream.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,99 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "TextStream.h" -- --#include --#include --#ifdef Q_OS_WIN --#include --#endif -- --TextStream::TextStream() --{ -- detectCodec(); --} -- --TextStream::TextStream(QIODevice* device) -- : QTextStream(device) --{ -- detectCodec(); --} -- --TextStream::TextStream(FILE* fileHandle, QIODevice::OpenMode openMode) -- : QTextStream(fileHandle, openMode) --{ -- detectCodec(); --} -- --TextStream::TextStream(QString* string, QIODevice::OpenMode openMode) -- : QTextStream(string, openMode) --{ -- detectCodec(); --} -- --TextStream::TextStream(QByteArray* array, QIODevice::OpenMode openMode) -- : QTextStream(array, openMode) --{ -- detectCodec(); --} -- --TextStream::TextStream(const QByteArray& array, QIODevice::OpenMode openMode) -- : QTextStream(array, openMode) --{ -- detectCodec(); --} -- --void TextStream::write(const char* str) --{ -- // Workaround for an issue with QTextStream. Its operator<<(const char *string) will encode the -- // string with a non-UTF-8 encoding. We work around this by wrapping the input string into -- // a QString, thus enforcing UTF-8. More info: -- // https://code.qt.io/cgit/qt/qtbase.git/commit?id=cec8cdba4d1b856e17c8743ba8803349d42dc701 -- *this << QString(str); --} -- --void TextStream::detectCodec() --{ -- QString codecName = "UTF-8"; -- auto env = QProcessEnvironment::systemEnvironment(); -- --#ifdef Q_OS_WIN -- WINBOOL success = false; --#ifdef CP_UTF8 -- success = SetConsoleOutputCP(CP_UTF8); --#endif -- if (!success && !env.contains("SHELL")) { -- // Fall back to cp850 if this is Windows without CP_UTF8 and we -- // are running in a native shell (i.e., no Msys or Cygwin). -- codecName = "Windows-850"; -- } --#else -- if (env.contains("LANG") && !env.value("LANG").isEmpty() && env.value("LANG") != "C") { -- // Only override codec if LANG is set, otherwise Qt will assume -- // US-ASCII, which is almost always wrong and results in -- // Unicode passwords being displayed as question marks. -- codecName = QTextCodec::codecForLocale()->name(); -- } --#endif -- -- codecName = env.value("ENCODING_OVERRIDE", codecName); -- auto* codec = QTextCodec::codecForName(codecName.toLatin1()); -- if (codec) { -- setCodec(codec); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/cli/TextStream.h keepassxc-2.6.4-patched/src/cli/TextStream.h ---- keepassxc-2.6.4-orig/src/cli/TextStream.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/TextStream.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,52 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_TEXTSTREAM_H --#define KEEPASSXC_TEXTSTREAM_H -- --#include -- --/** -- * QTextStream with codec fixes for the Windows command line. -- * -- * QTextStream uses the system default locale, but this breaks in various -- * situations: (1) It does not work on the native Windows shell (cmd.exe, Powershell), -- * since the default Windows locale is Windows-1252, but the shell uses Windows-850. -- * (2) It also breaks on *nix systems where the locale is Latin1 or C, which -- * is the case for most CI systems or build servers. -- * -- * We allow overriding the detected codec by setting the ENCODING_OVERRIDE -- * environment variable, but otherwise prefer Windows-850 on Windows and UTF-8 -- * on any other system, even if LANG is set to something else. -- */ --class TextStream : public QTextStream --{ --public: -- TextStream(); -- explicit TextStream(QIODevice* device); -- explicit TextStream(FILE* fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite); -- explicit TextStream(QString* string, QIODevice::OpenMode openMode = QIODevice::ReadWrite); -- explicit TextStream(QByteArray* array, QIODevice::OpenMode openMode = QIODevice::ReadWrite); -- explicit TextStream(const QByteArray& array, QIODevice::OpenMode openMode = QIODevice::ReadOnly); -- -- void write(const char* str); -- --private: -- void detectCodec(); --}; -- --#endif // KEEPASSXC_TEXTSTREAM_H -diff -urNr keepassxc-2.6.4-orig/src/cli/Utils.cpp keepassxc-2.6.4-patched/src/cli/Utils.cpp ---- keepassxc-2.6.4-orig/src/cli/Utils.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Utils.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,367 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Utils.h" -- --#ifdef WITH_XC_YUBIKEY --#include "keys/YkChallengeResponseKeyCLI.h" --#endif -- --#ifdef Q_OS_WIN --#include --#else --#include --#include --#endif -- --#include --#include --#include -- --namespace Utils --{ -- QTextStream STDOUT; -- QTextStream STDERR; -- QTextStream STDIN; -- QTextStream DEVNULL; -- -- void setDefaultTextStreams() -- { -- auto fd = new QFile(); -- fd->open(stdout, QIODevice::WriteOnly); -- STDOUT.setDevice(fd); -- -- fd = new QFile(); -- fd->open(stderr, QIODevice::WriteOnly); -- STDERR.setDevice(fd); -- -- fd = new QFile(); -- fd->open(stdin, QIODevice::ReadOnly); -- STDIN.setDevice(fd); -- -- fd = new QFile(); --#ifdef Q_OS_WIN -- fd->open(fopen("nul", "w"), QIODevice::WriteOnly); --#else -- fd->open(fopen("/dev/null", "w"), QIODevice::WriteOnly); --#endif -- DEVNULL.setDevice(fd); -- } -- -- void setStdinEcho(bool enable = true) -- { --#ifdef Q_OS_WIN -- HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); -- DWORD mode; -- GetConsoleMode(hIn, &mode); -- -- if (enable) { -- mode |= ENABLE_ECHO_INPUT; -- } else { -- mode &= ~ENABLE_ECHO_INPUT; -- } -- -- SetConsoleMode(hIn, mode); --#else -- struct termios t; -- tcgetattr(STDIN_FILENO, &t); -- -- if (enable) { -- t.c_lflag |= ECHO; -- } else { -- t.c_lflag &= ~ECHO; -- } -- -- tcsetattr(STDIN_FILENO, TCSANOW, &t); --#endif -- } -- -- QSharedPointer unlockDatabase(const QString& databaseFilename, -- const bool isPasswordProtected, -- const QString& keyFilename, -- const QString& yubiKeySlot, -- bool quiet) -- { -- auto& err = quiet ? DEVNULL : STDERR; -- auto compositeKey = QSharedPointer::create(); -- -- QFileInfo dbFileInfo(databaseFilename); -- if (dbFileInfo.canonicalFilePath().isEmpty()) { -- err << QObject::tr("Failed to open database file %1: not found").arg(databaseFilename) << endl; -- return {}; -- } -- -- if (!dbFileInfo.isFile()) { -- err << QObject::tr("Failed to open database file %1: not a plain file").arg(databaseFilename) << endl; -- return {}; -- } -- -- if (!dbFileInfo.isReadable()) { -- err << QObject::tr("Failed to open database file %1: not readable").arg(databaseFilename) << endl; -- return {}; -- } -- -- if (isPasswordProtected) { -- err << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << flush; -- QString line = Utils::getPassword(quiet); -- auto passwordKey = QSharedPointer::create(); -- passwordKey->setPassword(line); -- compositeKey->addKey(passwordKey); -- } -- -- if (!keyFilename.isEmpty()) { -- auto fileKey = QSharedPointer::create(); -- QString errorMessage; -- // LCOV_EXCL_START -- if (!fileKey->load(keyFilename, &errorMessage)) { -- err << QObject::tr("Failed to load key file %1: %2").arg(keyFilename, errorMessage) << endl; -- return {}; -- } -- -- if (fileKey->type() != FileKey::KeePass2XMLv2 && fileKey->type() != FileKey::Hashed) { -- err << QObject::tr("WARNING: You are using an old key file format which KeePassXC may\n" -- "stop supporting in the future.\n\n" -- "Please consider generating a new key file.") -- << endl; -- } -- // LCOV_EXCL_STOP -- -- compositeKey->addKey(fileKey); -- } -- --#ifdef WITH_XC_YUBIKEY -- if (!yubiKeySlot.isEmpty()) { -- unsigned int serial = 0; -- int slot; -- -- bool ok = false; -- auto parts = yubiKeySlot.split(":"); -- slot = parts[0].toInt(&ok); -- -- if (!ok || (slot != 1 && slot != 2)) { -- err << QObject::tr("Invalid YubiKey slot %1").arg(parts[0]) << endl; -- return {}; -- } -- -- if (parts.size() > 1) { -- serial = parts[1].toUInt(&ok, 10); -- if (!ok) { -- err << QObject::tr("Invalid YubiKey serial %1").arg(parts[1]) << endl; -- return {}; -- } -- } -- -- auto key = QSharedPointer(new YkChallengeResponseKeyCLI( -- {serial, slot}, QObject::tr("Please touch the button on your YubiKey to continue…"), err)); -- compositeKey->addChallengeResponseKey(key); -- } --#else -- Q_UNUSED(yubiKeySlot); --#endif // WITH_XC_YUBIKEY -- -- auto db = QSharedPointer::create(); -- QString error; -- if (db->open(databaseFilename, compositeKey, &error, false)) { -- return db; -- } else { -- err << error << endl; -- return {}; -- } -- } -- -- /** -- * Read a user password from STDIN or return a password previously -- * set by \link setNextPassword(). -- * -- * @return the password -- */ -- QString getPassword(bool quiet) -- { -- auto& in = STDIN; -- auto& out = quiet ? DEVNULL : STDERR; -- -- setStdinEcho(false); -- QString line = in.readLine(); -- setStdinEcho(true); -- out << endl; -- -- return line; -- } -- -- /** -- * Read optional password from stdin. -- * -- * @return Pointer to the PasswordKey or null if passwordkey is skipped -- * by user -- */ -- QSharedPointer getConfirmedPassword() -- { -- auto& err = STDERR; -- auto& in = STDIN; -- -- QSharedPointer passwordKey; -- -- err << QObject::tr("Enter password to encrypt database (optional): "); -- err.flush(); -- auto password = Utils::getPassword(); -- -- if (password.isEmpty()) { -- err << QObject::tr("Do you want to create a database with an empty password? [y/N]: "); -- err.flush(); -- auto ans = in.readLine(); -- if (ans.toLower().startsWith("y")) { -- passwordKey = QSharedPointer::create(""); -- } -- err << endl; -- } else { -- err << QObject::tr("Repeat password: "); -- err.flush(); -- auto repeat = Utils::getPassword(); -- -- if (password == repeat) { -- passwordKey = QSharedPointer::create(password); -- } else { -- err << QObject::tr("Error: Passwords do not match.") << endl; -- } -- } -- -- return passwordKey; -- } -- -- /** -- * A valid and running event loop is needed to use the global QClipboard, -- * so we need to use this from the CLI. -- */ -- int clipText(const QString& text) -- { -- auto& err = STDERR; -- -- // List of programs and their arguments -- QList> clipPrograms; -- --#ifdef Q_OS_UNIX -- if (QProcessEnvironment::systemEnvironment().contains("WAYLAND_DISPLAY")) { -- clipPrograms << qMakePair(QStringLiteral("wl-copy"), QStringLiteral("")); -- } else { -- clipPrograms << qMakePair(QStringLiteral("xclip"), QStringLiteral("-selection clipboard -i")); -- } --#endif -- --#ifdef Q_OS_MACOS -- clipPrograms << qMakePair(QStringLiteral("pbcopy"), QStringLiteral("")); --#endif -- --#ifdef Q_OS_WIN -- clipPrograms << qMakePair(QStringLiteral("clip"), QStringLiteral("")); --#endif -- -- if (clipPrograms.isEmpty()) { -- err << QObject::tr("No program defined for clipboard manipulation"); -- err.flush(); -- return EXIT_FAILURE; -- } -- -- QStringList failedProgramNames; -- -- for (auto prog : clipPrograms) { -- QScopedPointer clipProcess(new QProcess(nullptr)); -- -- // Skip empty parts, otherwise the program may clip the empty string -- QStringList progArgs = prog.second.split(" ", QString::SkipEmptyParts); -- -- clipProcess->start(prog.first, progArgs); -- clipProcess->waitForStarted(); -- -- if (clipProcess->state() != QProcess::Running) { -- failedProgramNames.append(prog.first); -- continue; -- } -- -- if (clipProcess->write(text.toLatin1()) == -1) { -- qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString())); -- } -- clipProcess->waitForBytesWritten(); -- clipProcess->closeWriteChannel(); -- clipProcess->waitForFinished(); -- -- if (clipProcess->exitCode() == EXIT_SUCCESS) { -- return EXIT_SUCCESS; -- } -- } -- -- // No clipping program worked -- err << QObject::tr("All clipping programs failed. Tried %1\n").arg(failedProgramNames.join(", ")); -- err.flush(); -- return EXIT_FAILURE; -- } -- -- /** -- * Splits the given QString into a QString list. For example: -- * -- * "hello world" -> ["hello", "world"] -- * "hello world" -> ["hello", "world"] -- * "hello\\ world" -> ["hello world"] (i.e. backslash is an escape character -- * "\"hello world\"" -> ["hello world"] -- */ -- QStringList splitCommandString(const QString& command) -- { -- QStringList result; -- -- bool insideQuotes = false; -- QString cur; -- for (int i = 0; i < command.size(); ++i) { -- QChar c = command[i]; -- if (c == '\\' && i < command.size() - 1) { -- cur.append(command[i + 1]); -- ++i; -- } else if (!insideQuotes && (c == ' ' || c == '\t')) { -- if (!cur.isEmpty()) { -- result.append(cur); -- cur.clear(); -- } -- } else if (c == '"' && (insideQuotes || i == 0 || command[i - 1].isSpace())) { -- insideQuotes = !insideQuotes; -- } else { -- cur.append(c); -- } -- } -- -- if (!cur.isEmpty()) { -- result.append(cur); -- } -- -- return result; -- } -- -- QStringList findAttributes(const EntryAttributes& attributes, const QString& name) -- { -- QStringList result; -- if (attributes.hasKey(name)) { -- result.append(name); -- return result; -- } -- -- for (const QString& key : attributes.keys()) { -- if (key.compare(name, Qt::CaseSensitivity::CaseInsensitive) == 0) { -- result.append(key); -- } -- } -- -- return result; -- } -- --} // namespace Utils -diff -urNr keepassxc-2.6.4-orig/src/cli/Utils.h keepassxc-2.6.4-patched/src/cli/Utils.h ---- keepassxc-2.6.4-orig/src/cli/Utils.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/cli/Utils.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_UTILS_H --#define KEEPASSXC_UTILS_H -- --#include "cli/TextStream.h" --#include "core/Database.h" --#include "core/EntryAttributes.h" --#include "keys/CompositeKey.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" --#include -- --namespace Utils --{ -- extern QTextStream STDOUT; -- extern QTextStream STDERR; -- extern QTextStream STDIN; -- extern QTextStream DEVNULL; -- -- void setDefaultTextStreams(); -- -- void setStdinEcho(bool enable); -- QString getPassword(bool quiet = false); -- QSharedPointer getConfirmedPassword(); -- int clipText(const QString& text); -- QSharedPointer unlockDatabase(const QString& databaseFilename, -- const bool isPasswordProtected = true, -- const QString& keyFilename = {}, -- const QString& yubiKeySlot = {}, -- bool quiet = false); -- -- QStringList splitCommandString(const QString& command); -- -- /** -- * If `attributes` contains an attribute named `name` (case-sensitive), -- * returns a list containing only `name`. Otherwise, returns the list of -- * all attribute names in `attributes` matching the given name -- * (case-insensitive). -- */ -- QStringList findAttributes(const EntryAttributes& attributes, const QString& name); --}; // namespace Utils -- --#endif // KEEPASSXC_UTILS_H -diff -urNr keepassxc-2.6.4-orig/src/CMakeLists.txt keepassxc-2.6.4-patched/src/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,510 +0,0 @@ --# Copyright (C) 2018 KeePassXC Team --# Copyright (C) 2010 Felix Geyer --# --# This program is free software: you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation, either version 2 or (at your option) --# version 3 of the License. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -- --find_library(ZXCVBN_LIBRARIES zxcvbn) --if(NOT ZXCVBN_LIBRARIES) -- add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) -- # Disable error-level shadow issues -- if(CC_HAS_Wshadow_compatible_local) -- set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-compatible-local") -- endif() -- if(CC_HAS_Wshadow_local) -- set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-local") -- endif() -- include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) -- set(ZXCVBN_LIBRARIES zxcvbn) --endif(NOT ZXCVBN_LIBRARIES) -- --set(keepassx_SOURCES -- core/Alloc.cpp -- core/AutoTypeAssociations.cpp -- core/AutoTypeMatch.cpp -- core/Base32.cpp -- core/Bootstrap.cpp -- core/Clock.cpp -- core/Compare.cpp -- core/Config.cpp -- core/CsvParser.cpp -- core/CustomData.cpp -- core/Database.cpp -- core/DatabaseIcons.cpp -- core/Entry.cpp -- core/EntryAttachments.cpp -- core/EntryAttributes.cpp -- core/EntrySearcher.cpp -- core/FileWatcher.cpp -- core/Group.cpp -- core/HibpOffline.cpp -- core/InactivityTimer.cpp -- core/Merger.cpp -- core/Metadata.cpp -- core/PasswordGenerator.cpp -- core/PasswordHealth.cpp -- core/PassphraseGenerator.cpp -- core/Resources.cpp -- core/SignalMultiplexer.cpp -- core/ScreenLockListener.cpp -- core/ScreenLockListenerPrivate.cpp -- core/TimeDelta.cpp -- core/TimeInfo.cpp -- core/Tools.cpp -- core/Translator.cpp -- cli/Utils.cpp -- cli/TextStream.cpp -- crypto/Crypto.cpp -- crypto/CryptoHash.cpp -- crypto/Random.cpp -- crypto/SymmetricCipher.cpp -- crypto/SymmetricCipherGcrypt.cpp -- crypto/kdf/Kdf.cpp -- crypto/kdf/AesKdf.cpp -- crypto/kdf/Argon2Kdf.cpp -- format/CsvExporter.cpp -- format/HtmlExporter.cpp -- format/KeePass1Reader.cpp -- format/KeePass2.cpp -- format/KeePass2RandomStream.cpp -- format/KdbxReader.cpp -- format/KdbxWriter.cpp -- format/KdbxXmlReader.cpp -- format/KeePass2Reader.cpp -- format/KeePass2Writer.cpp -- format/Kdbx3Reader.cpp -- format/Kdbx3Writer.cpp -- format/Kdbx4Reader.cpp -- format/Kdbx4Writer.cpp -- format/KdbxXmlWriter.cpp -- format/OpData01.cpp -- format/OpVaultReader.cpp -- format/OpVaultReaderAttachments.cpp -- format/OpVaultReaderBandEntry.cpp -- format/OpVaultReaderSections.cpp -- gui/styles/styles.qrc -- gui/styles/StateColorPalette.cpp -- gui/styles/base/phantomcolor.cpp -- gui/styles/base/BaseStyle.cpp -- gui/styles/dark/DarkStyle.cpp -- gui/styles/light/LightStyle.cpp -- gui/AboutDialog.cpp -- gui/Application.cpp -- gui/CategoryListWidget.cpp -- gui/Clipboard.cpp -- gui/CloneDialog.cpp -- gui/DatabaseOpenWidget.cpp -- gui/DatabaseTabWidget.cpp -- gui/DatabaseWidget.cpp -- gui/DatabaseWidgetStateSync.cpp -- gui/EntryPreviewWidget.cpp -- gui/DialogyWidget.cpp -- gui/DragTabBar.cpp -- gui/EditWidget.cpp -- gui/EditWidgetIcons.cpp -- gui/EditWidgetProperties.cpp -- gui/FileDialog.cpp -- gui/Font.cpp -- gui/IconModels.cpp -- gui/KeePass1OpenWidget.cpp -- gui/KMessageWidget.cpp -- gui/MainWindow.cpp -- gui/MessageBox.cpp -- gui/MessageWidget.cpp -- gui/OpVaultOpenWidget.cpp -- gui/PasswordEdit.cpp -- gui/PasswordGeneratorWidget.cpp -- gui/ApplicationSettingsWidget.cpp -- gui/SearchWidget.cpp -- gui/SortFilterHideProxyModel.cpp -- gui/SquareSvgWidget.cpp -- gui/TotpSetupDialog.cpp -- gui/TotpDialog.cpp -- gui/TotpExportSettingsDialog.cpp -- gui/DatabaseOpenDialog.cpp -- gui/URLEdit.cpp -- gui/WelcomeWidget.cpp -- gui/csvImport/CsvImportWidget.cpp -- gui/csvImport/CsvImportWizard.cpp -- gui/csvImport/CsvParserModel.cpp -- gui/entry/AutoTypeAssociationsModel.cpp -- gui/entry/AutoTypeMatchModel.cpp -- gui/entry/AutoTypeMatchView.cpp -- gui/entry/EditEntryWidget.cpp -- gui/entry/EntryAttachmentsModel.cpp -- gui/entry/EntryAttachmentsWidget.cpp -- gui/entry/EntryAttributesModel.cpp -- gui/entry/EntryHistoryModel.cpp -- gui/entry/EntryModel.cpp -- gui/entry/EntryView.cpp -- gui/group/EditGroupWidget.cpp -- gui/group/GroupModel.cpp -- gui/group/GroupView.cpp -- gui/databasekey/KeyComponentWidget.cpp -- gui/databasekey/PasswordEditWidget.cpp -- gui/databasekey/YubiKeyEditWidget.cpp -- gui/databasekey/KeyFileEditWidget.cpp -- gui/dbsettings/DatabaseSettingsWidget.cpp -- gui/dbsettings/DatabaseSettingsDialog.cpp -- gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp -- gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp -- gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp -- gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp -- gui/reports/ReportsWidget.cpp -- gui/reports/ReportsDialog.cpp -- gui/reports/ReportsWidgetHealthcheck.cpp -- gui/reports/ReportsPageHealthcheck.cpp -- gui/reports/ReportsWidgetHibp.cpp -- gui/reports/ReportsPageHibp.cpp -- gui/reports/ReportsWidgetStatistics.cpp -- gui/reports/ReportsPageStatistics.cpp -- gui/osutils/OSUtilsBase.cpp -- gui/settings/SettingsWidget.cpp -- gui/widgets/ElidedLabel.cpp -- gui/widgets/PopupHelpWidget.cpp -- gui/wizard/NewDatabaseWizard.cpp -- gui/wizard/NewDatabaseWizardPage.cpp -- gui/wizard/NewDatabaseWizardPageMetaData.cpp -- gui/wizard/NewDatabaseWizardPageEncryption.cpp -- gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp -- keys/CompositeKey.cpp -- keys/FileKey.cpp -- keys/PasswordKey.cpp -- keys/YkChallengeResponseKey.cpp -- keys/YkChallengeResponseKeyCLI.cpp -- streams/HashedBlockStream.cpp -- streams/HmacBlockStream.cpp -- streams/LayeredStream.cpp -- streams/qtiocompressor.cpp -- streams/StoreDataStream.cpp -- streams/SymmetricCipherStream.cpp -- totp/totp.cpp) --if(APPLE) -- set(keepassx_SOURCES -- ${keepassx_SOURCES} -- core/ScreenLockListenerMac.cpp -- core/MacPasteboard.cpp -- gui/osutils/macutils/MacUtils.cpp -- gui/osutils/macutils/AppKitImpl.mm -- gui/osutils/macutils/AppKit.h) --endif() --if(UNIX AND NOT APPLE) -- set(keepassx_SOURCES -- ${keepassx_SOURCES} -- core/ScreenLockListenerDBus.cpp -- gui/MainWindowAdaptor.cpp -- gui/osutils/nixutils/NixUtils.cpp) --endif() --if(MINGW) -- set(keepassx_SOURCES -- ${keepassx_SOURCES} -- core/ScreenLockListenerWin.cpp -- gui/osutils/winutils/WinUtils.cpp) --endif() --if(MINGW OR (UNIX AND NOT APPLE)) -- set(keepassx_SOURCES -- ${keepassx_SOURCES} -- core/OSEventFilter.cpp) --endif() -- --set(keepassx_SOURCES ${keepassx_SOURCES} -- ../share/icons/icons.qrc -- ../share/wizard/wizard.qrc) -- --set(keepassx_SOURCES_MAINEXE main.cpp) -- --add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing") --add_feature_info(Networking WITH_XC_NETWORKING "Compile KeePassXC with network access code (e.g. for downloading website icons)") --add_feature_info(KeePassXC-Browser WITH_XC_BROWSER "Browser integration with KeePassXC-Browser") --add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent") --add_feature_info(KeeShare WITH_XC_KEESHARE "Sharing integration with KeeShare (requires quazip5 for secure containers)") --add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") --add_feature_info(UpdateCheck WITH_XC_UPDATECHECK "Automatic update checking") --if(UNIX AND NOT APPLE) -- add_feature_info(FdoSecrets WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API.") --endif() --if(APPLE) -- add_feature_info(TouchID WITH_XC_TOUCHID "TouchID integration") --endif() -- --add_subdirectory(browser) --add_subdirectory(proxy) --if(WITH_XC_BROWSER) -- set(keepassxcbrowser_LIB keepassxcbrowser) -- set(keepassx_SOURCES ${keepassx_SOURCES} gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp) -- set(keepassx_SOURCES ${keepassx_SOURCES} gui/entry/EntryURLModel.cpp) --endif() -- --add_subdirectory(autotype) --add_subdirectory(cli) --add_subdirectory(qrcode) --set(qrcode_LIB qrcode) -- --add_subdirectory(crypto/ssh) --if(WITH_XC_CRYPTO_SSH) -- set(crypto_ssh_LIB crypto_ssh) --endif() -- --add_subdirectory(keeshare) --if(WITH_XC_KEESHARE) -- set(keeshare_LIB keeshare) --endif() -- --add_subdirectory(sshagent) --if(WITH_XC_SSHAGENT) -- set(sshagent_LIB sshagent) --endif() -- --add_subdirectory(fdosecrets) --if(WITH_XC_FDOSECRETS) -- set(fdosecrets_LIB fdosecrets) --endif() -- --set(autotype_SOURCES -- core/Tools.cpp -- autotype/AutoType.cpp -- autotype/AutoTypeAction.cpp -- autotype/AutoTypeFilterLineEdit.cpp -- autotype/AutoTypeSelectDialog.cpp -- autotype/AutoTypeSelectView.cpp -- autotype/ShortcutWidget.cpp -- autotype/WildcardMatcher.cpp -- autotype/WindowSelectComboBox.cpp) -- --if(MINGW) -- set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) --endif() -- --if(WITH_XC_YUBIKEY) -- list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) --else() -- list(APPEND keepassx_SOURCES keys/drivers/YubiKey.h keys/drivers/YubiKeyStub.cpp) --endif() -- --if(WITH_XC_NETWORKING) -- list(APPEND keepassx_SOURCES -- core/HibpDownloader.cpp -- core/IconDownloader.cpp -- core/NetworkManager.cpp -- gui/UpdateCheckDialog.cpp -- gui/IconDownloaderDialog.cpp -- updatecheck/UpdateChecker.cpp) --endif() -- --if(WITH_XC_TOUCHID) -- list(APPEND keepassx_SOURCES touchid/TouchID.mm) -- # TODO: Remove -Wno-error once deprecation warnings have been resolved. -- set_source_files_properties(touchid/TouchID.mm PROPERTY COMPILE_FLAGS "-Wno-old-style-cast -Wno-error") --endif() -- --configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) --configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) -- --add_library(autotype STATIC ${autotype_SOURCES}) --target_link_libraries(autotype Qt5::Core Qt5::Widgets) -- --add_library(keepassx_core STATIC ${keepassx_SOURCES}) -- --set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) --target_link_libraries(keepassx_core -- autotype -- ${keepassxcbrowser_LIB} -- ${qrcode_LIB} -- ${fdosecrets_LIB} -- Qt5::Core -- Qt5::Concurrent -- Qt5::Network -- Qt5::Widgets -- ${sodium_LIBRARY_RELEASE} -- ${YUBIKEY_LIBRARIES} -- ${ZXCVBN_LIBRARIES} -- ${ARGON2_LIBRARIES} -- ${ZLIB_LIBRARIES} -- ) -- --if(WITH_XC_SSHAGENT) -- target_link_libraries(keepassx_core sshagent) --endif() --if(WITH_XC_KEESHARE) -- target_link_libraries(keepassx_core keeshare) --endif() -- --if(APPLE) -- target_link_libraries(keepassx_core "-framework Foundation -framework AppKit") -- if(Qt5MacExtras_FOUND) -- target_link_libraries(keepassx_core Qt5::MacExtras) -- endif() -- if(WITH_XC_TOUCHID) -- target_link_libraries(keepassx_core "-framework Security") -- target_link_libraries(keepassx_core "-framework LocalAuthentication") -- endif() --endif() --if(HAIKU) -- target_link_libraries(keepassx_core network) --endif() --if(UNIX AND NOT APPLE) -- target_link_libraries(keepassx_core Qt5::DBus X11) -- include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) --endif() --if(MINGW) -- target_link_libraries(keepassx_core Wtsapi32.lib Ws2_32.lib) --endif() -- --if(MINGW) -- include(GenerateProductVersion) -- generate_product_version( -- WIN32_ProductVersionFiles -- NAME "KeePassXC" -- COMPANY_NAME "KeePassXC Team" -- VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} -- VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} -- VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} -- ) --endif() -- --add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles}) --target_link_libraries(keepassx_core ${GCRYPT_LIBRARIES} ${GPGERROR_LIBRARIES}) --target_link_libraries(${PROGNAME} keepassx_core) -- --set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) -- --if(APPLE AND WITH_APP_BUNDLE) -- install(FILES ${CMAKE_SOURCE_DIR}/share/macosx/embedded.provisionprofile DESTINATION ${BUNDLE_INSTALL_DIR}) -- configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) -- set_target_properties(${PROGNAME} PROPERTIES -- MACOSX_BUNDLE ON -- MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) -- -- if(WITH_XC_TOUCHID) -- set_target_properties(${PROGNAME} PROPERTIES -- CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements") -- endif() -- -- if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") -- install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" -- DESTINATION "${DATA_INSTALL_DIR}") -- endif() -- -- set(CPACK_GENERATOR "DragNDrop") -- set(CPACK_DMG_FORMAT "UDBZ") -- set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") -- set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") -- set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") -- set(CPACK_SYSTEM_NAME "OSX") -- set(CPACK_STRIP_FILES ON) -- set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") -- include(CPack) -- -- add_custom_command(TARGET ${PROGNAME} -- POST_BUILD -- COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src -- COMMENT "Deploying app bundle") --endif() -- --install(TARGETS ${PROGNAME} -- BUNDLE DESTINATION . COMPONENT Runtime -- RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) -- --if(MINGW) -- if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") -- set(OUTPUT_FILE_POSTFIX "Win64") -- else() -- set(OUTPUT_FILE_POSTFIX "Win32") -- endif() -- -- # We have to copy the license file in the configuration phase. -- # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and -- # we have to copy it because WiX needs it to have a .txt extension. -- execute_process(COMMAND ${CMAKE_COMMAND} -E copy -- "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" -- "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") -- -- string(REGEX REPLACE "-.*$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) -- -- set(CPACK_GENERATOR "ZIP;WIX") -- set(CPACK_STRIP_FILES OFF) -- set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") -- set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) -- set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) -- set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") -- string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") -- set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") -- set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) -- set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") -- set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") -- set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") -- string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") -- set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") -- set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") -- set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") -- set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") -- set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") -- set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") -- set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") -- set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") -- set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) -- set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") -- set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") -- set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) -- set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") -- set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") -- set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") -- set(CPACK_WIX_UI_REF "KPXC_InstallDir") -- set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") -- set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") -- set(CPACK_WIX_EXTRA_SOURCES -- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDir.wxs" -- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDirDlg.wxs" -- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_ExitDlg.wxs") -- set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") -- set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") -- include(CPack) -- -- install(CODE "set(gp_tool \"objdump\")" COMPONENT Runtime) -- -- # Deploy all 3rd party library dependencies first -- install(CODE "include(BundleUtilities) -- fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${PROGNAME}.exe\" \"\" \"\")" -- COMPONENT Runtime) -- -- # Use windeployqt.exe to setup Qt dependencies -- if(Qt5Core_VERSION VERSION_LESS "5.14.1") -- set(WINDEPLOYQT_MODE "--release") -- if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") -- set(WINDEPLOYQT_MODE "--debug") -- endif() -- endif() -- -- install(CODE "execute_process(COMMAND ${WINDEPLOYQT_EXE} ${PROGNAME}.exe ${WINDEPLOYQT_MODE} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX} OUTPUT_QUIET)" -- COMPONENT Runtime) -- -- # install CA cert chains -- install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") -- # install OpenSSL library -- if(WITH_XC_NETWORKING) -- find_file(OPENSSL_DLL NAMES libssl-1_1.dll libssl-1_1-x64.dll) -- if (NOT OPENSSL_DLL) -- message(FATAL_ERROR "Cannot find libssl dll, ensure openssl is properly installed.") -- endif() -- -- find_file(CRYPTO_DLL NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll) -- if (NOT CRYPTO_DLL) -- message(FATAL_ERROR "Cannot find libcrypto dll, ensure libgcrypt is properly installed.") -- endif() -- -- install(FILES ${OPENSSL_DLL} ${CRYPTO_DLL} DESTINATION ".") -- endif() --endif() -diff -urNr keepassxc-2.6.4-orig/src/config-keepassx.h.cmake keepassxc-2.6.4-patched/src/config-keepassx.h.cmake ---- keepassxc-2.6.4-orig/src/config-keepassx.h.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/config-keepassx.h.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* config-keepassx.h. Generated by cmake from config-keepassx.h.cmake */ -- --#ifndef KEEPASSX_CONFIG_KEEPASSX_H --#define KEEPASSX_CONFIG_KEEPASSX_H -- --#define KEEPASSXC_VERSION "@KEEPASSXC_VERSION@" -- --#define KEEPASSX_SOURCE_DIR "@CMAKE_SOURCE_DIR@" --#define KEEPASSX_BINARY_DIR "@CMAKE_BINARY_DIR@" -- --#define KEEPASSX_PREFIX_DIR "@CMAKE_INSTALL_PREFIX@" --#define KEEPASSX_PLUGIN_DIR "@PLUGIN_INSTALL_DIR@" --#define KEEPASSX_DATA_DIR "@DATA_INSTALL_DIR@" -- --#cmakedefine WITH_XC_AUTOTYPE --#cmakedefine WITH_XC_NETWORKING --#cmakedefine WITH_XC_BROWSER --#cmakedefine WITH_XC_YUBIKEY --#cmakedefine WITH_XC_SSHAGENT --#cmakedefine WITH_XC_KEESHARE --#cmakedefine WITH_XC_KEESHARE_INSECURE --#cmakedefine WITH_XC_KEESHARE_SECURE --#cmakedefine WITH_XC_UPDATECHECK --#cmakedefine WITH_XC_TOUCHID --#cmakedefine WITH_XC_FDOSECRETS -- --#cmakedefine KEEPASSXC_BUILD_TYPE "@KEEPASSXC_BUILD_TYPE@" --#cmakedefine KEEPASSXC_BUILD_TYPE_RELEASE --#cmakedefine KEEPASSXC_BUILD_TYPE_PRE_RELEASE --#cmakedefine KEEPASSXC_BUILD_TYPE_SNAPSHOT -- --#cmakedefine KEEPASSXC_DIST --#cmakedefine KEEPASSXC_DIST_TYPE "@KEEPASSXC_DIST_TYPE@" --#cmakedefine KEEPASSXC_DIST_SNAP --#cmakedefine KEEPASSXC_DIST_APPIMAGE -- --#cmakedefine HAVE_PR_SET_DUMPABLE 1 --#cmakedefine HAVE_RLIMIT_CORE 1 --#cmakedefine HAVE_PT_DENY_ATTACH 1 -- --#endif // KEEPASSX_CONFIG_KEEPASSX_H -diff -urNr keepassxc-2.6.4-orig/src/core/Alloc.cpp keepassxc-2.6.4-patched/src/core/Alloc.cpp ---- keepassxc-2.6.4-orig/src/core/Alloc.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Alloc.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,97 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include --#include --#include --#if defined(Q_OS_MACOS) --#include --#elif defined(Q_OS_FREEBSD) --#include --#elif defined(HAVE_MALLOC_H) --#include --#else --#include --#endif -- --#if defined(NDEBUG) && !defined(__cpp_sized_deallocation) --#warning "KeePassXC is being compiled without sized deallocation support. Deletes may be slow." --#endif -- --/** -- * Custom sized delete operator which securely zeroes out allocated -- * memory before freeing it (requires C++14 sized deallocation support). -- */ --void operator delete(void* ptr, std::size_t size) noexcept --{ -- if (!ptr) { -- return; -- } -- -- sodium_memzero(ptr, size); -- std::free(ptr); --} -- --void operator delete[](void* ptr, std::size_t size) noexcept --{ -- ::operator delete(ptr, size); --} -- --/** -- * Custom delete operator which securely zeroes out -- * allocated memory before freeing it. -- */ --void operator delete(void* ptr) noexcept --{ -- if (!ptr) { -- return; -- } -- --#if defined(Q_OS_WIN) -- ::operator delete(ptr, _msize(ptr)); --#elif defined(Q_OS_MACOS) -- ::operator delete(ptr, malloc_size(ptr)); --#elif defined(HAVE_MALLOC_USABLE_SIZE) -- ::operator delete(ptr, malloc_usable_size(ptr)); --#else -- // whatever OS this is, give up and simply free stuff -- std::free(ptr); --#endif --} -- --void operator delete[](void* ptr) noexcept --{ -- ::operator delete(ptr); --} -- --// clang-format versions less than 10.0 refuse to put a space before "noexcept" --// clang-format off --/** -- * Custom insecure delete operator that does not zero out memory before -- * freeing a buffer. Can be used for better performance. -- */ --void operator delete(void* ptr, bool) noexcept --{ -- std::free(ptr); --} --// clang-format on -- --void operator delete[](void* ptr, bool) noexcept --{ -- ::operator delete(ptr, false); --} -diff -urNr keepassxc-2.6.4-orig/src/core/AsyncTask.h keepassxc-2.6.4-patched/src/core/AsyncTask.h ---- keepassxc-2.6.4-orig/src/core/AsyncTask.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/AsyncTask.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ASYNCTASK_HPP --#define KEEPASSXC_ASYNCTASK_HPP -- --#include --#include --#include -- --/** -- * Asynchronously run computations outside the GUI thread. -- */ --namespace AsyncTask --{ -- -- /** -- * Wait for the given future without blocking the event loop. -- * -- * @param future future to wait for -- * @return async task result -- */ -- template -- typename std::result_of::type -- waitForFuture(QFuture::type> future) -- { -- QEventLoop loop; -- QFutureWatcher::type> watcher; -- QObject::connect(&watcher, SIGNAL(finished()), &loop, SLOT(quit())); -- watcher.setFuture(future); -- loop.exec(); -- return future.result(); -- } -- -- /** -- * Run a given task and wait for it to finish without blocking the event loop. -- * -- * @param task std::function object to run -- * @return async task result -- */ -- template -- typename std::result_of::type runAndWaitForFuture(FunctionObject task) -- { -- return waitForFuture(QtConcurrent::run(task)); -- } -- -- /** -- * Run a given task then call the defined callback. Prevents event loop blocking and -- * ensures the validity of the follow-on task through the context. If the context is -- * deleted, the callback will not be processed preventing use after free errors. -- * -- * @param task std::function object to run -- * @param context QObject responsible for calling this function -- * @param callback std::function object to run after the task completess -- */ -- template -- void runThenCallback(FunctionObject task, QObject* context, FunctionObject2 callback) -- { -- typedef QFutureWatcher::type> FutureWatcher; -- auto future = QtConcurrent::run(task); -- auto watcher = new FutureWatcher(context); -- QObject::connect(watcher, &QFutureWatcherBase::finished, context, [=]() { -- watcher->deleteLater(); -- callback(future.result()); -- }); -- watcher->setFuture(future); -- } -- --}; // namespace AsyncTask -- --#endif // KEEPASSXC_ASYNCTASK_HPP -diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.cpp keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.cpp ---- keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,135 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeAssociations.h" -- --bool AutoTypeAssociations::Association::operator==(const AutoTypeAssociations::Association& other) const --{ -- return window == other.window && sequence == other.sequence; --} -- --bool AutoTypeAssociations::Association::operator!=(const AutoTypeAssociations::Association& other) const --{ -- return window != other.window || sequence != other.sequence; --} -- --AutoTypeAssociations::AutoTypeAssociations(QObject* parent) -- : QObject(parent) --{ --} -- --void AutoTypeAssociations::copyDataFrom(const AutoTypeAssociations* other) --{ -- if (m_associations == other->m_associations) { -- return; -- } -- -- emit aboutToReset(); -- m_associations = other->m_associations; -- emit reset(); -- emit modified(); --} -- --void AutoTypeAssociations::add(const AutoTypeAssociations::Association& association) --{ -- int index = m_associations.size(); -- emit aboutToAdd(index); -- m_associations.append(association); -- emit added(index); -- emit modified(); --} -- --void AutoTypeAssociations::remove(int index) --{ -- Q_ASSERT(index >= 0 && index < m_associations.size()); -- -- emit aboutToRemove(index); -- m_associations.removeAt(index); -- emit removed(index); -- emit modified(); --} -- --void AutoTypeAssociations::removeEmpty() --{ -- QMutableListIterator i(m_associations); -- while (i.hasNext()) { -- const Association& assoc = i.next(); -- if (assoc.window.isEmpty() && assoc.sequence.isEmpty()) { -- i.remove(); -- } -- } --} -- --void AutoTypeAssociations::update(int index, const AutoTypeAssociations::Association& association) --{ -- Q_ASSERT(index >= 0 && index < m_associations.size()); -- -- if (m_associations.at(index) != association) { -- m_associations[index] = association; -- emit dataChanged(index); -- emit modified(); -- } --} -- --AutoTypeAssociations::Association AutoTypeAssociations::get(int index) const --{ -- Q_ASSERT(index >= 0 && index < m_associations.size()); -- -- return m_associations.at(index); --} -- --QList AutoTypeAssociations::getAll() const --{ -- return m_associations; --} -- --int AutoTypeAssociations::size() const --{ -- return m_associations.size(); --} -- --int AutoTypeAssociations::associationsSize() const --{ -- int size = 0; -- for (const Association& association : m_associations) { -- size += association.sequence.toUtf8().size() + association.window.toUtf8().size(); -- } -- return size; --} -- --void AutoTypeAssociations::clear() --{ -- m_associations.clear(); --} -- --bool AutoTypeAssociations::operator==(const AutoTypeAssociations& other) const --{ -- if (m_associations.count() != other.m_associations.count()) { -- return false; -- } -- for (int i = 0; i < m_associations.count(); ++i) { -- if (m_associations[i] != other.m_associations[i]) { -- return false; -- } -- } -- return true; --} -- --bool AutoTypeAssociations::operator!=(const AutoTypeAssociations& other) const --{ -- return !(*this == other); --} -diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.h keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.h ---- keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,68 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEASSOCIATIONS_H --#define KEEPASSX_AUTOTYPEASSOCIATIONS_H -- --#include -- --class AutoTypeAssociations : public QObject --{ -- Q_OBJECT -- --public: -- struct Association -- { -- QString window; -- QString sequence; -- -- bool operator==(const AutoTypeAssociations::Association& other) const; -- bool operator!=(const AutoTypeAssociations::Association& other) const; -- }; -- -- explicit AutoTypeAssociations(QObject* parent = nullptr); -- void copyDataFrom(const AutoTypeAssociations* other); -- void add(const AutoTypeAssociations::Association& association); -- void remove(int index); -- void removeEmpty(); -- void update(int index, const AutoTypeAssociations::Association& association); -- AutoTypeAssociations::Association get(int index) const; -- QList getAll() const; -- int size() const; -- int associationsSize() const; -- void clear(); -- -- bool operator==(const AutoTypeAssociations& other) const; -- bool operator!=(const AutoTypeAssociations& other) const; -- --private: -- QList m_associations; -- --signals: -- void modified(); -- void dataChanged(int index); -- void aboutToAdd(int index); -- void added(int index); -- void aboutToRemove(int index); -- void removed(int index); -- void aboutToReset(); -- void reset(); --}; -- --Q_DECLARE_TYPEINFO(AutoTypeAssociations::Association, Q_MOVABLE_TYPE); -- --#endif // KEEPASSX_AUTOTYPEASSOCIATIONS_H -diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeMatch.cpp keepassxc-2.6.4-patched/src/core/AutoTypeMatch.cpp ---- keepassxc-2.6.4-orig/src/core/AutoTypeMatch.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/AutoTypeMatch.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeMatch.h" -- --#include -- --AutoTypeMatch::AutoTypeMatch() -- : entry(nullptr) -- , sequence() --{ --} -- --AutoTypeMatch::AutoTypeMatch(Entry* entry, QString sequence) -- : entry(entry) -- , sequence(std::move(sequence)) --{ --} -- --bool AutoTypeMatch::operator==(const AutoTypeMatch& other) const --{ -- return entry == other.entry && sequence == other.sequence; --} -- --bool AutoTypeMatch::operator!=(const AutoTypeMatch& other) const --{ -- return entry != other.entry || sequence != other.sequence; --} -diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeMatch.h keepassxc-2.6.4-patched/src/core/AutoTypeMatch.h ---- keepassxc-2.6.4-orig/src/core/AutoTypeMatch.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/AutoTypeMatch.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEMATCH_H --#define KEEPASSX_AUTOTYPEMATCH_H -- --#include --#include -- --class Entry; -- --struct AutoTypeMatch --{ -- Entry* entry; -- QString sequence; -- -- AutoTypeMatch(); -- AutoTypeMatch(Entry* entry, QString sequence); -- -- bool operator==(const AutoTypeMatch& other) const; -- bool operator!=(const AutoTypeMatch& other) const; --}; -- --Q_DECLARE_TYPEINFO(AutoTypeMatch, Q_MOVABLE_TYPE); -- --#endif // KEEPASSX_AUTOTYPEMATCH_H -diff -urNr keepassxc-2.6.4-orig/src/core/Base32.cpp keepassxc-2.6.4-patched/src/core/Base32.cpp ---- keepassxc-2.6.4-orig/src/core/Base32.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Base32.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,295 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --/* Conforms to RFC 4648. For details, see: https://tools.ietf.org/html/rfc4648 -- * Use the functions Base32::addPadding/1, Base32::removePadding/1 or -- * Base32::sanitizeInput/1 to fix input or output for a particular -- * applications (e.g. to use with Google Authenticator). -- */ -- --#include "Base32.h" -- --constexpr quint64 MASK_40BIT = quint64(0xF8) << 32; --constexpr quint64 MASK_35BIT = quint64(0x7C0000000); --constexpr quint64 MASK_25BIT = quint64(0x1F00000); --constexpr quint64 MASK_20BIT = quint64(0xF8000); --constexpr quint64 MASK_10BIT = quint64(0x3E0); -- --constexpr char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; --constexpr quint8 ALPH_POS_2 = 26; -- --constexpr quint8 ASCII_2 = static_cast('2'); --constexpr quint8 ASCII_7 = static_cast('7'); --constexpr quint8 ASCII_A = static_cast('A'); --constexpr quint8 ASCII_Z = static_cast('Z'); --constexpr quint8 ASCII_a = static_cast('a'); --constexpr quint8 ASCII_z = static_cast('z'); --constexpr quint8 ASCII_EQ = static_cast('='); -- --QVariant Base32::decode(const QByteArray& encodedData) --{ -- if (encodedData.size() <= 0) { -- return QVariant::fromValue(QByteArray("")); -- } -- -- if (encodedData.size() % 8 != 0) { -- return QVariant(); -- } -- -- int nPads = 0; -- for (int i = -1; i > -7; --i) { -- if ('=' == encodedData[encodedData.size() + i]) { -- ++nPads; -- } -- } -- -- int specialOffset; -- int nSpecialBytes; -- -- switch (nPads) { // in {0, 1, 3, 4, 6} -- case 1: -- nSpecialBytes = 4; -- specialOffset = 3; -- break; -- case 3: -- nSpecialBytes = 3; -- specialOffset = 1; -- break; -- case 4: -- nSpecialBytes = 2; -- specialOffset = 4; -- break; -- case 6: -- nSpecialBytes = 1; -- specialOffset = 2; -- break; -- default: -- nSpecialBytes = 0; -- specialOffset = 0; -- } -- -- Q_ASSERT(encodedData.size() > 0); -- const int nQuanta = encodedData.size() / 8; -- const int nBytes = nSpecialBytes > 0 ? (nQuanta - 1) * 5 + nSpecialBytes : nQuanta * 5; -- -- QByteArray data(nBytes, Qt::Uninitialized); -- -- int i = 0; -- int o = 0; -- -- while (i < encodedData.size()) { -- quint64 quantum = 0; -- int nQuantumBytes = 5; -- -- for (int n = 0; n < 8; ++n) { -- auto ch = static_cast(encodedData[i++]); -- if ((ASCII_A <= ch && ch <= ASCII_Z) || (ASCII_a <= ch && ch <= ASCII_z)) { -- ch -= ASCII_A; -- if (ch >= ALPH_POS_2) { -- ch -= ASCII_a - ASCII_A; -- } -- } else { -- if (ASCII_2 <= ch && ch <= ASCII_7) { -- ch -= ASCII_2; -- ch += ALPH_POS_2; -- } else { -- if (ASCII_EQ == ch) { -- if (i == encodedData.size()) { -- // finished with special quantum -- quantum >>= specialOffset; -- nQuantumBytes = nSpecialBytes; -- } -- continue; -- } else { -- // illegal character -- return QVariant(); -- } -- } -- } -- -- quantum <<= 5; -- quantum |= ch; -- } -- -- const int offset = (nQuantumBytes - 1) * 8; -- quint64 mask = quint64(0xFF) << offset; -- for (int n = offset; n >= 0 && o < nBytes; n -= 8) { -- data[o++] = static_cast((quantum & mask) >> n); -- mask >>= 8; -- } -- } -- -- Q_ASSERT(encodedData.size() == i); -- Q_ASSERT(nBytes == o); -- -- return QVariant::fromValue(data); --} -- --QByteArray Base32::encode(const QByteArray& data) --{ -- if (data.size() < 1) { -- return QByteArray(); -- } -- -- const int nBits = data.size() * 8; -- const int rBits = nBits % 40; // in {0, 8, 16, 24, 32} -- const int nQuanta = nBits / 40 + (rBits > 0 ? 1 : 0); -- const int nBytes = nQuanta * 8; -- QByteArray encodedData(nBytes, Qt::Uninitialized); -- -- int i = 0; -- int o = 0; -- int n; -- quint64 mask; -- quint64 quantum; -- -- // 40-bits of input per input group -- while (i + 5 <= data.size()) { -- quantum = 0; -- for (n = 32; n >= 0; n -= 8) { -- quantum |= (static_cast(data[i++]) << n); -- } -- -- mask = MASK_40BIT; -- int index; -- for (n = 35; n >= 0; n -= 5) { -- index = (quantum & mask) >> n; -- Q_ASSERT(0 <= index && index <= 31); -- encodedData[o++] = alphabet[index]; -- mask >>= 5; -- } -- } -- -- // < 40-bits of input at final input group -- if (i < data.size()) { -- Q_ASSERT(8 <= rBits && rBits <= 32); -- quantum = 0; -- for (n = rBits - 8; n >= 0; n -= 8) { -- quantum |= static_cast(data[i++]) << n; -- } -- -- switch (rBits) { -- case 8: // expand to 10 bits -- quantum <<= 2; -- mask = MASK_10BIT; -- n = 5; -- break; -- case 16: // expand to 20 bits -- quantum <<= 4; -- mask = MASK_20BIT; -- n = 15; -- break; -- case 24: // expand to 25 bits -- quantum <<= 1; -- mask = MASK_25BIT; -- n = 20; -- break; -- default: // expand to 35 bits -- Q_ASSERT(32 == rBits); -- quantum <<= 3; -- mask = MASK_35BIT; -- n = 30; -- } -- -- while (n >= 0) { -- int index = (quantum & mask) >> n; -- Q_ASSERT(0 <= index && index <= 31); -- encodedData[o++] = alphabet[index]; -- mask >>= 5; -- n -= 5; -- } -- -- // add pad characters -- while (o < encodedData.size()) { -- encodedData[o++] = '='; -- } -- } -- -- Q_ASSERT(data.size() == i); -- Q_ASSERT(nBytes == o); -- return encodedData; --} -- --QByteArray Base32::addPadding(const QByteArray& encodedData) --{ -- if (encodedData.size() <= 0 || encodedData.size() % 8 == 0) { -- return encodedData; -- } -- -- const int rBytes = encodedData.size() % 8; -- // rBytes must be a member of {2, 4, 5, 7} -- if (1 == rBytes || 3 == rBytes || 6 == rBytes) { -- return encodedData; -- } -- -- QByteArray newEncodedData(encodedData); -- for (int nPads = 8 - rBytes; nPads > 0; --nPads) { -- newEncodedData.append('='); -- } -- -- return newEncodedData; --} -- --QByteArray Base32::removePadding(const QByteArray& encodedData) --{ -- if (encodedData.size() <= 0 || encodedData.size() % 8 != 0) { -- return encodedData; // return same bad input -- } -- -- int nPads = 0; -- for (int i = -1; i > -7; --i) { -- if ('=' == encodedData[encodedData.size() + i]) { -- ++nPads; -- } -- } -- -- QByteArray newEncodedData(encodedData); -- newEncodedData.remove(encodedData.size() - nPads, nPads); -- newEncodedData.resize(encodedData.size() - nPads); -- -- return newEncodedData; --} -- --QByteArray Base32::sanitizeInput(const QByteArray& encodedData) --{ -- if (encodedData.size() <= 0) { -- return encodedData; -- } -- -- QByteArray newEncodedData(encodedData.size(), Qt::Uninitialized); -- int i = 0; -- for (auto ch : encodedData) { -- switch (ch) { -- case '0': -- newEncodedData[i++] = 'O'; -- break; -- case '1': -- newEncodedData[i++] = 'L'; -- break; -- case '8': -- newEncodedData[i++] = 'B'; -- break; -- default: -- if (('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('2' <= ch && ch <= '7')) { -- newEncodedData[i++] = ch; -- } -- } -- } -- newEncodedData.resize(i); -- -- return addPadding(newEncodedData); --} -diff -urNr keepassxc-2.6.4-orig/src/core/Base32.h keepassxc-2.6.4-patched/src/core/Base32.h ---- keepassxc-2.6.4-orig/src/core/Base32.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Base32.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,42 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --/* Conforms to RFC 4648. For details, see: https://tools.ietf.org/html/rfc4648 -- * Use the functions Base32::addPadding/1, Base32::removePadding/1 or -- * Base32::sanitizeInput/1 to fix input or output for a particular -- * applications (e.g. to use with Google Authenticator). -- */ -- --#ifndef BASE32_H --#define BASE32_H -- --#include --#include --#include -- --class Base32 --{ --public: -- Base32() = default; -- Q_REQUIRED_RESULT static QVariant decode(const QByteArray&); -- Q_REQUIRED_RESULT static QByteArray encode(const QByteArray&); -- Q_REQUIRED_RESULT static QByteArray addPadding(const QByteArray&); -- Q_REQUIRED_RESULT static QByteArray removePadding(const QByteArray&); -- Q_REQUIRED_RESULT static QByteArray sanitizeInput(const QByteArray&); --}; -- --#endif // BASE32_H -diff -urNr keepassxc-2.6.4-orig/src/core/Bootstrap.cpp keepassxc-2.6.4-patched/src/core/Bootstrap.cpp ---- keepassxc-2.6.4-orig/src/core/Bootstrap.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Bootstrap.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,294 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Bootstrap.h" --#include "config-keepassx.h" --#include "core/Config.h" --#include "core/Translator.h" --#include "gui/MessageBox.h" -- --#ifdef Q_OS_WIN --#include // for createWindowsDACL() --#include // for Sleep(), SetDllDirectoryA(), SetSearchPathMode(), ... --#undef MessageBox --#endif -- --#if defined(HAVE_RLIMIT_CORE) --#include --#endif -- --#if defined(HAVE_PR_SET_DUMPABLE) --#include --#endif -- --#ifdef HAVE_PT_DENY_ATTACH --// clang-format off --#include --#include --// clang-format on --#endif -- --namespace Bootstrap --{ -- /** -- * When QNetworkAccessManager is instantiated it regularly starts polling -- * all network interfaces to see if anything changes and if so, what. This -- * creates a latency spike every 10 seconds on Mac OS 10.12+ and Windows 7 >= -- * when on a wifi connection. -- * So here we disable it for lack of better measure. -- * This will also cause this message: QObject::startTimer: Timers cannot -- * have negative intervals -- * For more info see: -- * - https://bugreports.qt.io/browse/QTBUG-40332 -- * - https://bugreports.qt.io/browse/QTBUG-46015 -- */ -- static inline void applyEarlyQNetworkAccessManagerWorkaround() -- { -- qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1)); -- } -- -- /** -- * Perform early application bootstrapping that does not rely on a QApplication -- * being present. -- */ -- void bootstrap() -- { --#ifdef QT_NO_DEBUG -- disableCoreDumps(); --#endif -- -- setupSearchPaths(); -- applyEarlyQNetworkAccessManagerWorkaround(); -- } -- -- /** -- * Perform early application bootstrapping such as setting up search paths, -- * configuration OS security properties, and loading translators. -- * A QApplication object has to be instantiated before calling this function. -- */ -- void bootstrapApplication() -- { -- bootstrap(); -- Translator::installTranslators(); -- --#ifdef Q_OS_WIN -- // Qt on Windows uses "MS Shell Dlg 2" as the default font for many widgets, which resolves -- // to Tahoma 8pt, whereas the correct font would be "Segoe UI" 9pt. -- // Apparently, some widgets are already using the correct font. Thanks, MuseScore for this neat fix! -- QApplication::setFont(QApplication::font("QMessageBox")); --#endif -- -- MessageBox::initializeButtonDefs(); -- --#ifdef Q_OS_MACOS -- // Don't show menu icons on OSX -- QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); --#endif -- } -- -- /** -- * Restore the main window's state after launch -- * -- * @param mainWindow the main window whose state to restore -- */ -- void restoreMainWindowState(MainWindow& mainWindow) -- { -- // start minimized if configured -- if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) { -- mainWindow.hideWindow(); -- } else { -- mainWindow.bringToFront(); -- } -- -- if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { -- const QStringList fileNames = config()->get(Config::LastOpenedDatabases).toStringList(); -- for (const QString& filename : fileNames) { -- if (!filename.isEmpty() && QFile::exists(filename)) { -- mainWindow.openDatabase(filename); -- } -- } -- auto lastActiveFile = config()->get(Config::LastActiveDatabase).toString(); -- if (!lastActiveFile.isEmpty()) { -- mainWindow.openDatabase(lastActiveFile); -- } -- } -- } -- -- // LCOV_EXCL_START -- void disableCoreDumps() -- { -- // default to true -- // there is no point in printing a warning if this is not implemented on the platform -- bool success = true; -- --#if defined(HAVE_RLIMIT_CORE) -- struct rlimit limit; -- limit.rlim_cur = 0; -- limit.rlim_max = 0; -- success = success && (setrlimit(RLIMIT_CORE, &limit) == 0); --#endif -- --#if defined(HAVE_PR_SET_DUMPABLE) -- success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); --#endif -- --// Mac OS X --#ifdef HAVE_PT_DENY_ATTACH -- success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); --#endif -- --#ifdef Q_OS_WIN -- success = success && createWindowsDACL(); --#endif -- -- if (!success) { -- qWarning("Unable to disable core dumps."); -- } -- } -- -- // -- // This function grants the user associated with the process token minimal access rights and -- // denies everything else on Windows. This includes PROCESS_QUERY_INFORMATION and -- // PROCESS_VM_READ access rights that are required for MiniDumpWriteDump() or ReadProcessMemory(). -- // We do this using a discretionary access control list (DACL). Effectively this prevents -- // crash dumps and disallows other processes from accessing our memory. This works as long -- // as you do not have admin privileges, since then you are able to grant yourself the -- // SeDebugPrivilege or SeTakeOwnershipPrivilege and circumvent the DACL. -- // -- bool createWindowsDACL() -- { -- bool bSuccess = false; -- --#ifdef Q_OS_WIN -- // Process token and user -- HANDLE hToken = nullptr; -- PTOKEN_USER pTokenUser = nullptr; -- DWORD cbBufferSize = 0; -- PSID pLocalSystemSid = nullptr; -- DWORD pLocalSystemSidSize = SECURITY_MAX_SID_SIZE; -- -- // Access control list -- PACL pACL = nullptr; -- DWORD cbACL = 0; -- -- // Open the access token associated with the calling process -- if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { -- goto Cleanup; -- } -- -- // Retrieve the token information in a TOKEN_USER structure -- GetTokenInformation(hToken, TokenUser, nullptr, 0, &cbBufferSize); -- -- pTokenUser = static_cast(HeapAlloc(GetProcessHeap(), 0, cbBufferSize)); -- if (pTokenUser == nullptr) { -- goto Cleanup; -- } -- -- if (!GetTokenInformation(hToken, TokenUser, pTokenUser, cbBufferSize, &cbBufferSize)) { -- goto Cleanup; -- } -- -- if (!IsValidSid(pTokenUser->User.Sid)) { -- goto Cleanup; -- } -- -- // Retrieve LocalSystem account SID -- pLocalSystemSid = static_cast(HeapAlloc(GetProcessHeap(), 0, pLocalSystemSidSize)); -- if (pLocalSystemSid == nullptr) { -- goto Cleanup; -- } -- -- if (!CreateWellKnownSid(WinLocalSystemSid, nullptr, pLocalSystemSid, &pLocalSystemSidSize)) { -- goto Cleanup; -- } -- -- // Calculate the amount of memory that must be allocated for the DACL -- cbACL = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid) -- + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pLocalSystemSid); -- -- // Create and initialize an ACL -- pACL = static_cast(HeapAlloc(GetProcessHeap(), 0, cbACL)); -- if (pACL == nullptr) { -- goto Cleanup; -- } -- -- if (!InitializeAcl(pACL, cbACL, ACL_REVISION)) { -- goto Cleanup; -- } -- -- // Add allowed access control entries, everything else is denied -- if (!AddAccessAllowedAce( -- pACL, -- ACL_REVISION, -- SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE, // same as protected process -- pTokenUser->User.Sid // pointer to the trustee's SID -- )) { -- goto Cleanup; -- } -- --#ifdef WITH_XC_SSHAGENT -- // OpenSSH for Windows ssh-agent service is running as LocalSystem -- if (!AddAccessAllowedAce(pACL, -- ACL_REVISION, -- PROCESS_QUERY_INFORMATION | PROCESS_DUP_HANDLE, // just enough for ssh-agent -- pLocalSystemSid // known LocalSystem sid -- )) { -- goto Cleanup; -- } --#endif -- -- // Set discretionary access control list -- bSuccess = ERROR_SUCCESS -- == SetSecurityInfo(GetCurrentProcess(), // object handle -- SE_KERNEL_OBJECT, // type of object -- DACL_SECURITY_INFORMATION, // change only the objects DACL -- nullptr, -- nullptr, // do not change owner or group -- pACL, // DACL specified -- nullptr // do not change SACL -- ); -- -- Cleanup: -- -- if (pACL != nullptr) { -- HeapFree(GetProcessHeap(), 0, pACL); -- } -- if (pLocalSystemSid != nullptr) { -- HeapFree(GetProcessHeap(), 0, pLocalSystemSid); -- } -- if (pTokenUser != nullptr) { -- HeapFree(GetProcessHeap(), 0, pTokenUser); -- } -- if (hToken != nullptr) { -- CloseHandle(hToken); -- } --#endif -- -- return bSuccess; -- } -- // LCOV_EXCL_STOP -- -- void setupSearchPaths() -- { --#ifdef Q_OS_WIN -- // Make sure Windows doesn't load DLLs from the current working directory -- SetDllDirectoryA(""); -- SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE); --#endif -- } -- --} // namespace Bootstrap -diff -urNr keepassxc-2.6.4-orig/src/core/Bootstrap.h keepassxc-2.6.4-patched/src/core/Bootstrap.h ---- keepassxc-2.6.4-orig/src/core/Bootstrap.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Bootstrap.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,33 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_BOOTSTRAP_H --#define KEEPASSXC_BOOTSTRAP_H -- --#include "gui/MainWindow.h" -- --namespace Bootstrap --{ -- void bootstrap(); -- void bootstrapApplication(); -- void restoreMainWindowState(MainWindow& mainWindow); -- void disableCoreDumps(); -- bool createWindowsDACL(); -- void setupSearchPaths(); --}; // namespace Bootstrap -- --#endif // KEEPASSXC_BOOTSTRAP_H -diff -urNr keepassxc-2.6.4-orig/src/core/Clock.cpp keepassxc-2.6.4-patched/src/core/Clock.cpp ---- keepassxc-2.6.4-orig/src/core/Clock.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Clock.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,115 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ --#include "Clock.h" -- --QSharedPointer Clock::m_instance; -- --QDateTime Clock::currentDateTimeUtc() --{ -- return instance().currentDateTimeUtcImpl(); --} -- --QDateTime Clock::currentDateTime() --{ -- return instance().currentDateTimeImpl(); --} -- --uint Clock::currentSecondsSinceEpoch() --{ -- // TODO: change to toSecsSinceEpoch() when min Qt >= 5.8 -- return instance().currentDateTimeImpl().toTime_t(); --} -- --qint64 Clock::currentMilliSecondsSinceEpoch() --{ -- return instance().currentDateTimeImpl().toMSecsSinceEpoch(); --} -- --QDateTime Clock::serialized(const QDateTime& dateTime) --{ -- auto time = dateTime.time(); -- if (time.isValid() && time.msec() != 0) { -- return dateTime.addMSecs(-time.msec()); -- } -- return dateTime; --} -- --QDateTime Clock::datetimeUtc(int year, int month, int day, int hour, int min, int second) --{ -- return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::UTC); --} -- --QDateTime Clock::datetime(int year, int month, int day, int hour, int min, int second) --{ -- return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::LocalTime); --} -- --QDateTime Clock::datetimeUtc(qint64 msecSinceEpoch) --{ -- return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::UTC); --} -- --QDateTime Clock::datetime(qint64 msecSinceEpoch) --{ -- return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::LocalTime); --} -- --QDateTime Clock::parse(const QString& text, Qt::DateFormat format) --{ -- return QDateTime::fromString(text, format); --} -- --QDateTime Clock::parse(const QString& text, const QString& format) --{ -- return QDateTime::fromString(text, format); --} -- --Clock::~Clock() --{ --} -- --Clock::Clock() --{ --} -- --QDateTime Clock::currentDateTimeUtcImpl() const --{ -- return QDateTime::currentDateTimeUtc(); --} -- --QDateTime Clock::currentDateTimeImpl() const --{ -- return QDateTime::currentDateTime(); --} -- --void Clock::resetInstance() --{ -- m_instance.reset(); --} -- --void Clock::setInstance(Clock* clock) --{ -- m_instance = QSharedPointer(clock); --} -- --const Clock& Clock::instance() --{ -- if (!m_instance) { -- m_instance = QSharedPointer(new Clock()); -- } -- return *m_instance; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Clock.h keepassxc-2.6.4-patched/src/core/Clock.h ---- keepassxc-2.6.4-orig/src/core/Clock.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Clock.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CLOCK_H --#define KEEPASSXC_CLOCK_H -- --#include --#include -- --class Clock --{ --public: -- static QDateTime currentDateTimeUtc(); -- static QDateTime currentDateTime(); -- -- static uint currentSecondsSinceEpoch(); -- static qint64 currentMilliSecondsSinceEpoch(); -- -- static QDateTime serialized(const QDateTime& dateTime); -- -- static QDateTime datetimeUtc(int year, int month, int day, int hour, int min, int second); -- static QDateTime datetime(int year, int month, int day, int hour, int min, int second); -- -- static QDateTime datetimeUtc(qint64 msecSinceEpoch); -- static QDateTime datetime(qint64 msecSinceEpoch); -- -- static QDateTime parse(const QString& text, Qt::DateFormat format = Qt::TextDate); -- static QDateTime parse(const QString& text, const QString& format); -- -- virtual ~Clock(); -- --protected: -- Clock(); -- virtual QDateTime currentDateTimeUtcImpl() const; -- virtual QDateTime currentDateTimeImpl() const; -- -- static void resetInstance(); -- static void setInstance(Clock* clock); -- static const Clock& instance(); -- --private: -- static QSharedPointer m_instance; --}; -- --#endif // KEEPASSX_ENTRY_H -diff -urNr keepassxc-2.6.4-orig/src/core/Compare.cpp keepassxc-2.6.4-patched/src/core/Compare.cpp ---- keepassxc-2.6.4-orig/src/core/Compare.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Compare.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,17 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ --#include "Compare.h" -diff -urNr keepassxc-2.6.4-orig/src/core/Compare.h keepassxc-2.6.4-patched/src/core/Compare.h ---- keepassxc-2.6.4-orig/src/core/Compare.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Compare.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,82 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_COMPARE_H --#define KEEPASSXC_COMPARE_H -- --#include -- --#include "core/Clock.h" -- --enum CompareItemOption --{ -- CompareItemDefault = 0, -- CompareItemIgnoreMilliseconds = 0x4, -- CompareItemIgnoreStatistics = 0x8, -- CompareItemIgnoreDisabled = 0x10, -- CompareItemIgnoreHistory = 0x20, -- CompareItemIgnoreLocation = 0x40, --}; --Q_DECLARE_FLAGS(CompareItemOptions, CompareItemOption) --Q_DECLARE_OPERATORS_FOR_FLAGS(CompareItemOptions) -- --template inline short compareGeneric(const Type& lhs, const Type& rhs, CompareItemOptions) --{ -- if (lhs != rhs) { -- return lhs < rhs ? -1 : +1; -- } -- return 0; --} -- --template --inline short compare(const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) --{ -- return compareGeneric(lhs, rhs, options); --} -- --template <> inline short compare(const QDateTime& lhs, const QDateTime& rhs, CompareItemOptions options) --{ -- if (!options.testFlag(CompareItemIgnoreMilliseconds)) { -- return compareGeneric(lhs, rhs, options); -- } -- return compareGeneric(Clock::serialized(lhs), Clock::serialized(rhs), options); --} -- --template --inline short compare(bool enabled, const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) --{ -- if (!enabled) { -- return 0; -- } -- return compare(lhs, rhs, options); --} -- --template --inline short compare(bool lhsEnabled, -- const Type& lhs, -- bool rhsEnabled, -- const Type& rhs, -- CompareItemOptions options = CompareItemDefault) --{ -- const short enabled = compareGeneric(lhsEnabled, rhsEnabled, options); -- if (enabled == 0 && (!options.testFlag(CompareItemIgnoreDisabled) || (lhsEnabled && rhsEnabled))) { -- return compare(lhs, rhs, options); -- } -- return enabled; --} -- --#endif // KEEPASSX_COMPARE_H -diff -urNr keepassxc-2.6.4-orig/src/core/Config.cpp keepassxc-2.6.4-patched/src/core/Config.cpp ---- keepassxc-2.6.4-orig/src/core/Config.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Config.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,534 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Config.h" --#include "Global.h" -- --#include --#include --#include --#include --#include --#include --#include --#include -- --#define CONFIG_VERSION 1 --#define QS QStringLiteral -- --enum ConfigType --{ -- Local, -- Roaming --}; -- --struct ConfigDirective --{ -- QString name; -- ConfigType type; -- QVariant defaultValue; --}; -- --// clang-format off -- --/** -- * Map of legal config values, their type and default value. -- */ --static const QHash configStrings = { -- // General -- {Config::SingleInstance,{QS("SingleInstance"), Roaming, true}}, -- {Config::RememberLastDatabases,{QS("RememberLastDatabases"), Roaming, true}}, -- {Config::NumberOfRememberedLastDatabases,{QS("NumberOfRememberedLastDatabases"), Roaming, 5}}, -- {Config::RememberLastKeyFiles,{QS("RememberLastKeyFiles"), Roaming, true}}, -- {Config::OpenPreviousDatabasesOnStartup,{QS("OpenPreviousDatabasesOnStartup"), Roaming, true}}, -- {Config::AutoSaveAfterEveryChange,{QS("AutoSaveAfterEveryChange"), Roaming, true}}, -- {Config::AutoReloadOnChange,{QS("AutoReloadOnChange"), Roaming, true}}, -- {Config::AutoSaveOnExit,{QS("AutoSaveOnExit"), Roaming, true}}, -- {Config::AutoSaveNonDataChanges,{QS("AutoSaveNonDataChanges"), Roaming, true}}, -- {Config::BackupBeforeSave,{QS("BackupBeforeSave"), Roaming, false}}, -- {Config::UseAtomicSaves,{QS("UseAtomicSaves"), Roaming, true}}, -- {Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}}, -- {Config::MinimizeOnOpenUrl,{QS("MinimizeOnOpenUrl"), Roaming, false}}, -- {Config::HideWindowOnCopy,{QS("HideWindowOnCopy"), Roaming, false}}, -- {Config::MinimizeOnCopy,{QS("MinimizeOnCopy"), Roaming, true}}, -- {Config::MinimizeAfterUnlock,{QS("MinimizeAfterUnlock"), Roaming, false}}, -- {Config::DropToBackgroundOnCopy,{QS("DropToBackgroundOnCopy"), Roaming, false}}, -- {Config::UseGroupIconOnEntryCreation,{QS("UseGroupIconOnEntryCreation"), Roaming, true}}, -- {Config::AutoTypeEntryTitleMatch,{QS("AutoTypeEntryTitleMatch"), Roaming, true}}, -- {Config::AutoTypeEntryURLMatch,{QS("AutoTypeEntryURLMatch"), Roaming, true}}, -- {Config::AutoTypeDelay,{QS("AutoTypeDelay"), Roaming, 25}}, -- {Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}}, -- {Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}}, -- {Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}}, -- {Config::FaviconDownloadTimeout,{QS("FaviconDownloadTimeout"), Roaming, 10}}, -- {Config::UpdateCheckMessageShown,{QS("UpdateCheckMessageShown"), Roaming, false}}, -- {Config::UseTouchID,{QS("UseTouchID"), Roaming, false}}, -- -- {Config::LastDatabases, {QS("LastDatabases"), Local, {}}}, -- {Config::LastKeyFiles, {QS("LastKeyFiles"), Local, {}}}, -- {Config::LastChallengeResponse, {QS("LastChallengeResponse"), Local, {}}}, -- {Config::LastActiveDatabase, {QS("LastActiveDatabase"), Local, {}}}, -- {Config::LastOpenedDatabases, {QS("LastOpenedDatabases"), Local, {}}}, -- {Config::LastDir, {QS("LastDir"), Local, QDir::homePath()}}, -- {Config::LastAttachmentDir, {QS("LastAttachmentDir"), Local, {}}}, -- -- // GUI -- {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}}, -- {Config::GUI_HideToolbar, {QS("GUI/HideToolbar"), Roaming, false}}, -- {Config::GUI_MovableToolbar, {QS("GUI/MovableToolbar"), Roaming, false}}, -- {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}}, -- {Config::GUI_ToolButtonStyle, {QS("GUI/ToolButtonStyle"), Roaming, Qt::ToolButtonIconOnly}}, -- {Config::GUI_ShowTrayIcon, {QS("GUI/ShowTrayIcon"), Roaming, false}}, -- {Config::GUI_TrayIconAppearance, {QS("GUI/TrayIconAppearance"), Roaming, {}}}, -- {Config::GUI_MinimizeToTray, {QS("GUI/MinimizeToTray"), Roaming, false}}, -- {Config::GUI_MinimizeOnStartup, {QS("GUI/MinimizeOnStartup"), Roaming, false}}, -- {Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}}, -- {Config::GUI_HideUsernames, {QS("GUI/HideUsernames"), Roaming, false}}, -- {Config::GUI_HidePasswords, {QS("GUI/HidePasswords"), Roaming, true}}, -- {Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}}, -- {Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}}, -- {Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}}, -- {Config::GUI_CompactMode, {QS("GUI/CompactMode"), Roaming, false}}, -- {Config::GUI_CheckForUpdates, {QS("GUI/CheckForUpdates"), Roaming, true}}, -- {Config::GUI_CheckForUpdatesNextCheck, {QS("GUI/CheckForUpdatesNextCheck"), Local, 0}}, -- {Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}}, -- -- {Config::GUI_MainWindowGeometry, {QS("GUI/MainWindowGeometry"), Local, {}}}, -- {Config::GUI_MainWindowState, {QS("GUI/MainWindowState"), Local, {}}}, -- {Config::GUI_ListViewState, {QS("GUI/ListViewState"), Local, {}}}, -- {Config::GUI_SearchViewState, {QS("GUI/SearchViewState"), Local, {}}}, -- {Config::GUI_SplitterState, {QS("GUI/SplitterState"), Local, {}}}, -- {Config::GUI_PreviewSplitterState, {QS("GUI/PreviewSplitterState"), Local, {}}}, -- {Config::GUI_AutoTypeSelectDialogSize, {QS("GUI/AutoTypeSelectDialogSize"), Local, QSize(600, 250)}}, -- -- // Security -- {Config::Security_ClearClipboard, {QS("Security/ClearClipboard"), Roaming, true}}, -- {Config::Security_ClearClipboardTimeout, {QS("Security/ClearClipboardTimeout"), Roaming, 10}}, -- {Config::Security_ClearSearch, {QS("Security/ClearSearch"), Roaming, true}}, -- {Config::Security_ClearSearchTimeout, {QS("Security/ClearSearchTimeout"), Roaming, 5}}, -- {Config::Security_HideNotes, {QS("Security/Security_HideNotes"), Roaming, false}}, -- {Config::Security_LockDatabaseIdle, {QS("Security/LockDatabaseIdle"), Roaming, false}}, -- {Config::Security_LockDatabaseIdleSeconds, {QS("Security/LockDatabaseIdleSeconds"), Roaming, 240}}, -- {Config::Security_LockDatabaseMinimize, {QS("Security/LockDatabaseMinimize"), Roaming, false}}, -- {Config::Security_LockDatabaseScreenLock, {QS("Security/LockDatabaseScreenLock"), Roaming, true}}, -- {Config::Security_RelockAutoType, {QS("Security/RelockAutoType"), Roaming, false}}, -- {Config::Security_PasswordsRepeatVisible, {QS("Security/PasswordsRepeatVisible"), Roaming, true}}, -- {Config::Security_PasswordsHidden, {QS("Security/PasswordsHidden"), Roaming, true}}, -- {Config::Security_PasswordEmptyPlaceholder, {QS("Security/PasswordEmptyPlaceholder"), Roaming, false}}, -- {Config::Security_HidePasswordPreviewPanel, {QS("Security/HidePasswordPreviewPanel"), Roaming, true}}, -- {Config::Security_AutoTypeAsk, {QS("Security/AutotypeAsk"), Roaming, true}}, -- {Config::Security_IconDownloadFallback, {QS("Security/IconDownloadFallback"), Roaming, false}}, -- {Config::Security_ResetTouchId, {QS("Security/ResetTouchId"), Roaming, false}}, -- {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}}, -- {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}}, -- -- // Browser -- {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, -- {Config::Browser_ShowNotification, {QS("Browser/ShowNotification"), Roaming, true}}, -- {Config::Browser_BestMatchOnly, {QS("Browser/BestMatchOnly"), Roaming, false}}, -- {Config::Browser_UnlockDatabase, {QS("Browser/UnlockDatabase"), Roaming, true}}, -- {Config::Browser_MatchUrlScheme, {QS("Browser/MatchUrlScheme"), Roaming, true}}, -- {Config::Browser_SortByUsername, {QS("Browser/SortByUsername"), Roaming, false}}, -- {Config::Browser_SupportBrowserProxy, {QS("Browser/SupportBrowserProxy"), Roaming, true}}, -- {Config::Browser_UseCustomProxy, {QS("Browser/UseCustomProxy"), Roaming, false}}, -- {Config::Browser_CustomProxyLocation, {QS("Browser/CustomProxyLocation"), Roaming, {}}}, -- {Config::Browser_UpdateBinaryPath, {QS("Browser/UpdateBinaryPath"), Roaming, true}}, -- {Config::Browser_AllowExpiredCredentials, {QS("Browser/AllowExpiredCredentials"), Roaming, false}}, -- {Config::Browser_AlwaysAllowAccess, {QS("Browser/AlwaysAllowAccess"), Roaming, false}}, -- {Config::Browser_AlwaysAllowUpdate, {QS("Browser/AlwaysAllowUpdate"), Roaming, false}}, -- {Config::Browser_HttpAuthPermission, {QS("Browser/HttpAuthPermission"), Roaming, false}}, -- {Config::Browser_SearchInAllDatabases, {QS("Browser/SearchInAllDatabases"), Roaming, false}}, -- {Config::Browser_SupportKphFields, {QS("Browser/SupportKphFields"), Roaming, true}}, -- {Config::Browser_NoMigrationPrompt, {QS("Browser/NoMigrationPrompt"), Roaming, false}}, -- {Config::Browser_UseCustomBrowser, {QS("Browser/UseCustomBrowser"), Local, false}}, -- {Config::Browser_CustomBrowserType, {QS("Browser/CustomBrowserType"), Local, -1}}, -- {Config::Browser_CustomBrowserLocation, {QS("Browser/CustomBrowserLocation"), Local, {}}}, --#ifdef QT_DEBUG -- {Config::Browser_CustomExtensionId, {QS("Browser/CustomExtensionId"), Local, {}}}, --#endif -- -- // SSHAgent -- {Config::SSHAgent_Enabled, {QS("SSHAgent/Enabled"), Roaming, false}}, -- {Config::SSHAgent_UseOpenSSH, {QS("SSHAgent/UseOpenSSH"), Roaming, false}}, -- {Config::SSHAgent_AuthSockOverride, {QS("SSHAgent/AuthSockOverride"), Local, {}}}, -- -- // FdoSecrets -- {Config::FdoSecrets_Enabled, {QS("FdoSecrets/Enabled"), Roaming, false}}, -- {Config::FdoSecrets_ShowNotification, {QS("FdoSecrets/ShowNotification"), Roaming, true}}, -- {Config::FdoSecrets_NoConfirmDeleteItem, {QS("FdoSecrets/NoConfirmDeleteItem"), Roaming, false}}, -- -- // KeeShare -- {Config::KeeShare_QuietSuccess, {QS("KeeShare/QuietSuccess"), Roaming, false}}, -- {Config::KeeShare_Own, {QS("KeeShare/Own"), Roaming, {}}}, -- {Config::KeeShare_Foreign, {QS("KeeShare/Foreign"), Roaming, {}}}, -- {Config::KeeShare_Active, {QS("KeeShare/Active"), Roaming, {}}}, -- {Config::KeeShare_LastDir, {QS("KeeShare/LastDir"), Local, QDir::homePath()}}, -- {Config::KeeShare_LastKeyDir, {QS("KeeShare/LastKeyDir"), Local, QDir::homePath()}}, -- {Config::KeeShare_LastShareDir, {QS("KeeShare/LastShareDir"), Local, QDir::homePath()}}, -- -- // PasswordGenerator -- {Config::PasswordGenerator_LowerCase, {QS("PasswordGenerator/LowerCase"), Roaming, true}}, -- {Config::PasswordGenerator_UpperCase, {QS("PasswordGenerator/UpperCase"), Roaming, true}}, -- {Config::PasswordGenerator_Numbers, {QS("PasswordGenerator/Numbers"), Roaming, true}}, -- {Config::PasswordGenerator_EASCII, {QS("PasswordGenerator/EASCII"), Roaming, false}}, -- {Config::PasswordGenerator_AdvancedMode, {QS("PasswordGenerator/AdvancedMode"), Roaming, false}}, -- {Config::PasswordGenerator_SpecialChars, {QS("PasswordGenerator/SpecialChars"), Roaming, true}}, -- {Config::PasswordGenerator_Braces, {QS("PasswordGenerator/Braces"), Roaming, false}}, -- {Config::PasswordGenerator_Punctuation, {QS("PasswordGenerator/Punctuation"), Roaming, false}}, -- {Config::PasswordGenerator_Quotes, {QS("PasswordGenerator/Quotes"), Roaming, false}}, -- {Config::PasswordGenerator_Dashes, {QS("PasswordGenerator/Dashes"), Roaming, false}}, -- {Config::PasswordGenerator_Math, {QS("PasswordGenerator/Math"), Roaming, false}}, -- {Config::PasswordGenerator_Logograms, {QS("PasswordGenerator/Logograms"), Roaming, false}}, -- {Config::PasswordGenerator_AdditionalChars, {QS("PasswordGenerator/AdditionalChars"), Roaming, {}}}, -- {Config::PasswordGenerator_ExcludedChars, {QS("PasswordGenerator/ExcludedChars"), Roaming, {}}}, -- {Config::PasswordGenerator_ExcludeAlike, {QS("PasswordGenerator/ExcludeAlike"), Roaming, true}}, -- {Config::PasswordGenerator_EnsureEvery, {QS("PasswordGenerator/EnsureEvery"), Roaming, true}}, -- {Config::PasswordGenerator_Length, {QS("PasswordGenerator/Length"), Roaming, 20}}, -- {Config::PasswordGenerator_WordCount, {QS("PasswordGenerator/WordCount"), Roaming, 7}}, -- {Config::PasswordGenerator_WordSeparator, {QS("PasswordGenerator/WordSeparator"), Roaming, QS(" ")}}, -- {Config::PasswordGenerator_WordList, {QS("PasswordGenerator/WordList"), Roaming, QS("eff_large.wordlist")}}, -- {Config::PasswordGenerator_WordCase, {QS("PasswordGenerator/WordCase"), Roaming, 0}}, -- {Config::PasswordGenerator_Type, {QS("PasswordGenerator/Type"), Roaming, 0}}, -- -- // Messages -- {Config::Messages_NoLegacyKeyFileWarning, {QS("Messages/NoLegacyKeyFileWarning"), Roaming, false}}, -- {Config::Messages_Qt55CompatibilityWarning, {QS("Messages/Qt55CompatibilityWarning"), Local, false}}, -- {Config::Messages_HidePreReleaseWarning, {QS("Messages/HidePreReleaseWarning"), Local, {}}}}; -- --// clang-format on -- --QPointer Config::m_instance(nullptr); -- --QVariant Config::get(ConfigKey key) --{ -- auto cfg = configStrings[key]; -- auto defaultValue = configStrings[key].defaultValue; -- if (m_localSettings && cfg.type == Local) { -- return m_localSettings->value(cfg.name, defaultValue); -- } -- return m_settings->value(cfg.name, defaultValue); --} -- --bool Config::hasAccessError() --{ -- return m_settings->status() & QSettings::AccessError; --} -- --QString Config::getFileName() --{ -- return m_settings->fileName(); --} -- --void Config::set(ConfigKey key, const QVariant& value) --{ -- if (get(key) == value) { -- return; -- } -- -- auto cfg = configStrings[key]; -- if (cfg.type == Local && m_localSettings) { -- m_localSettings->setValue(cfg.name, value); -- } else { -- m_settings->setValue(cfg.name, value); -- } -- -- emit changed(key); --} -- --void Config::remove(ConfigKey key) --{ -- auto cfg = configStrings[key]; -- if (cfg.type == Local && m_localSettings) { -- m_localSettings->remove(cfg.name); -- } else { -- m_settings->remove(cfg.name); -- } -- -- emit changed(key); --} -- --/** -- * Sync configuration with persistent storage. -- * -- * Usually, you don't need to call this method manually, but if you are writing -- * configurations after an emitted \link QCoreApplication::aboutToQuit() signal, -- * use it to guarantee your config values are persisted. -- */ --void Config::sync() --{ -- m_settings->sync(); -- if (m_localSettings) { -- m_localSettings->sync(); -- } --} -- --void Config::resetToDefaults() --{ -- m_settings->clear(); -- if (m_localSettings) { -- m_localSettings->clear(); -- } --} -- --/** -- * Map of configuration file settings that are either deprecated, or have -- * had their name changed to their new config enum values. -- * -- * Set a value to Deleted to remove the setting. -- */ --static const QHash deprecationMap = { -- // 2.3.4 -- {QS("security/hidepassworddetails"), Config::Security_HidePasswordPreviewPanel}, -- {QS("GUI/HideDetailsView"), Config::GUI_HidePreviewPanel}, -- {QS("GUI/DetailSplitterState"), Config::GUI_PreviewSplitterState}, -- {QS("security/IconDownloadFallbackToGoogle"), Config::Security_IconDownloadFallback}, -- -- // 2.6.0 -- {QS("security/autotypeask"), Config::Security_AutoTypeAsk}, -- {QS("security/clearclipboard"), Config::Security_ClearClipboard}, -- {QS("security/clearclipboardtimeout"), Config::Security_ClearClipboardTimeout}, -- {QS("security/clearsearch"), Config::Security_ClearSearch}, -- {QS("security/clearsearchtimeout"), Config::Security_ClearSearchTimeout}, -- {QS("security/lockdatabaseidle"), Config::Security_LockDatabaseIdle}, -- {QS("security/lockdatabaseidlesec"), Config::Security_LockDatabaseIdleSeconds}, -- {QS("security/lockdatabaseminimize"), Config::Security_LockDatabaseMinimize}, -- {QS("security/lockdatabasescreenlock"), Config::Security_LockDatabaseScreenLock}, -- {QS("security/relockautotype"), Config::Security_RelockAutoType}, -- {QS("security/IconDownloadFallback"), Config::Security_IconDownloadFallback}, -- {QS("security/passwordscleartext"), Config::Security_PasswordsHidden}, -- {QS("security/passwordemptynodots"), Config::Security_PasswordEmptyPlaceholder}, -- {QS("security/HidePasswordPreviewPanel"), Config::Security_HidePasswordPreviewPanel}, -- {QS("security/passwordsrepeat"), Config::Security_PasswordsRepeatVisible}, -- {QS("security/hidenotes"), Config::Security_HideNotes}, -- {QS("security/resettouchid"), Config::Security_ResetTouchId}, -- {QS("security/resettouchidtimeout"), Config::Security_ResetTouchIdTimeout}, -- {QS("security/resettouchidscreenlock"), Config::Security_ResetTouchIdScreenlock}, -- {QS("KeeShare/Settings.own"), Config::KeeShare_Own}, -- {QS("KeeShare/Settings.foreign"), Config::KeeShare_Foreign}, -- {QS("KeeShare/Settings.active"), Config::KeeShare_Active}, -- {QS("SSHAgent"), Config::SSHAgent_Enabled}, -- {QS("SSHAgentOpenSSH"), Config::SSHAgent_UseOpenSSH}, -- {QS("SSHAuthSockOverride"), Config::SSHAgent_AuthSockOverride}, -- {QS("generator/LowerCase"), Config::PasswordGenerator_LowerCase}, -- {QS("generator/UpperCase"), Config::PasswordGenerator_UpperCase}, -- {QS("generator/Numbers"), Config::PasswordGenerator_Numbers}, -- {QS("generator/EASCII"), Config::PasswordGenerator_EASCII}, -- {QS("generator/AdvancedMode"), Config::PasswordGenerator_AdvancedMode}, -- {QS("generator/SpecialChars"), Config::PasswordGenerator_SpecialChars}, -- {QS("generator/AdditionalChars"), Config::PasswordGenerator_AdditionalChars}, -- {QS("generator/Braces"), Config::PasswordGenerator_Braces}, -- {QS("generator/Punctuation"), Config::PasswordGenerator_Punctuation}, -- {QS("generator/Quotes"), Config::PasswordGenerator_Quotes}, -- {QS("generator/Dashes"), Config::PasswordGenerator_Dashes}, -- {QS("generator/Math"), Config::PasswordGenerator_Math}, -- {QS("generator/Logograms"), Config::PasswordGenerator_Logograms}, -- {QS("generator/ExcludedChars"), Config::PasswordGenerator_ExcludedChars}, -- {QS("generator/ExcludeAlike"), Config::PasswordGenerator_ExcludeAlike}, -- {QS("generator/EnsureEvery"), Config::PasswordGenerator_EnsureEvery}, -- {QS("generator/Length"), Config::PasswordGenerator_Length}, -- {QS("generator/WordCount"), Config::PasswordGenerator_WordCount}, -- {QS("generator/WordSeparator"), Config::PasswordGenerator_WordSeparator}, -- {QS("generator/WordList"), Config::PasswordGenerator_WordList}, -- {QS("generator/WordCase"), Config::PasswordGenerator_WordCase}, -- {QS("generator/Type"), Config::PasswordGenerator_Type}, -- {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning}, -- {QS("GUI/HidePasswords"), Config::Deleted}, -- {QS("GUI/DarkTrayIcon"), Config::Deleted}}; -- --/** -- * Migrate settings from previous versions. -- */ --void Config::migrate() --{ -- int previousVersion = m_settings->value("ConfigVersion").toInt(); -- if (CONFIG_VERSION <= previousVersion) { -- return; -- } -- -- // Update renamed keys and drop obsolete keys -- for (const auto& setting : deprecationMap.keys()) { -- QVariant value; -- if (m_settings->contains(setting)) { -- if (setting == QS("IgnoreGroupExpansion") || setting == QS("security/passwordsrepeat") -- || setting == QS("security/passwordscleartext") || setting == QS("security/passwordemptynodots")) { -- // Keep user's original setting for boolean settings whose meanings were reversed -- value = !m_settings->value(setting).toBool(); -- } else { -- value = m_settings->value(setting); -- } -- m_settings->remove(setting); -- } else if (m_localSettings && m_localSettings->contains(setting)) { -- value = m_localSettings->value(setting); -- m_localSettings->remove(setting); -- } else { -- continue; -- } -- -- if (deprecationMap[setting] == Config::Deleted) { -- continue; -- } -- -- set(deprecationMap[setting], value); -- } -- -- // Move local settings to separate file -- if (m_localSettings) { -- for (const auto& setting : asConst(configStrings)) { -- if (setting.type == Local && m_settings->contains(setting.name)) { -- m_localSettings->setValue(setting.name, m_settings->value(setting.name)); -- m_settings->remove(setting.name); -- } -- } -- } -- -- // Detailed version migrations -- -- // pre 2.6.0 (no versioned configs) -- if (previousVersion < 1) { -- -- // 2.3.4 -- if (get(AutoSaveAfterEveryChange).toBool()) { -- set(AutoSaveOnExit, true); -- } -- -- // Setting defaults for 'hide window on copy' behavior, keeping the user's original setting -- if (get(HideWindowOnCopy).isNull()) { -- set(HideWindowOnCopy, get(MinimizeOnCopy).toBool()); -- set(MinimizeOnCopy, true); -- } -- -- // Reset database columns if upgrading from pre 2.6.0 -- remove(GUI_ListViewState); -- } -- -- m_settings->setValue("ConfigVersion", CONFIG_VERSION); -- sync(); --} -- --Config::Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent) -- : QObject(parent) --{ -- init(configFileName, localConfigFileName); --} -- --Config::Config(QObject* parent) -- : QObject(parent) --{ -- auto configFiles = defaultConfigFiles(); -- init(configFiles.first, configFiles.second); --} -- --Config::~Config() --{ --} -- --void Config::init(const QString& configFileName, const QString& localConfigFileName) --{ -- // Upgrade from previous KeePassXC version which stores its config -- // in AppData/Local on Windows instead of AppData/Roaming. -- // Move file to correct location before continuing. -- if (!localConfigFileName.isEmpty() && QFile::exists(localConfigFileName) && !QFile::exists(configFileName)) { -- QDir().mkpath(QFileInfo(configFileName).absolutePath()); -- QFile::copy(localConfigFileName, configFileName); -- QFile::remove(localConfigFileName); -- QDir().rmdir(QFileInfo(localConfigFileName).absolutePath()); -- } -- -- m_settings.reset(new QSettings(configFileName, QSettings::IniFormat)); -- if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) { -- m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat)); -- } -- -- migrate(); -- connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync); --} -- --QPair Config::defaultConfigFiles() --{ -- // Check if we are running in portable mode, if so store the config files local to the app -- auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); -- if (QFile::exists(portablePath.arg(".portable"))) { -- return {portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini")}; -- } -- -- QString configPath; -- QString localConfigPath; -- --#if defined(Q_OS_WIN) -- configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); -- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); --#elif defined(Q_OS_MACOS) -- configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); -- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); --#else -- // On case-sensitive Operating Systems, force use of lowercase app directories -- configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc"; -- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc"; --#endif -- -- QString suffix; --#ifdef QT_DEBUG -- suffix = "_debug"; --#endif -- -- configPath += QString("/keepassxc%1.ini").arg(suffix); -- localConfigPath += QString("/keepassxc%1.ini").arg(suffix); -- -- // Allow overriding the default location with env vars -- const auto& env = QProcessEnvironment::systemEnvironment(); -- configPath = env.value("KPXC_CONFIG", configPath); -- localConfigPath = env.value("KPXC_CONFIG_LOCAL", localConfigPath); -- -- return {QDir::toNativeSeparators(configPath), QDir::toNativeSeparators(localConfigPath)}; --} -- --Config* Config::instance() --{ -- if (!m_instance) { -- m_instance = new Config(qApp); -- } -- -- return m_instance; --} -- --void Config::createConfigFromFile(const QString& configFileName, const QString& localConfigFileName) --{ -- if (m_instance) { -- delete m_instance; -- } -- -- auto defaultFiles = defaultConfigFiles(); -- m_instance = new Config(configFileName.isEmpty() ? defaultFiles.first : configFileName, -- localConfigFileName.isEmpty() ? defaultFiles.second : localConfigFileName, -- qApp); --} -- --void Config::createTempFileInstance() --{ -- if (m_instance) { -- delete m_instance; -- } -- auto* tmpFile = new QTemporaryFile(); -- bool openResult = tmpFile->open(); -- Q_ASSERT(openResult); -- Q_UNUSED(openResult); -- m_instance = new Config(tmpFile->fileName(), "", qApp); -- tmpFile->setParent(m_instance); --} -- --#undef QS -diff -urNr keepassxc-2.6.4-orig/src/core/Config.h keepassxc-2.6.4-patched/src/core/Config.h ---- keepassxc-2.6.4-orig/src/core/Config.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Config.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,227 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CONFIG_H --#define KEEPASSX_CONFIG_H -- --#include --#include --#include -- --class QSettings; -- --class Config : public QObject --{ -- Q_OBJECT -- --public: -- Q_DISABLE_COPY(Config) -- -- enum ConfigKey -- { -- SingleInstance, -- RememberLastDatabases, -- NumberOfRememberedLastDatabases, -- RememberLastKeyFiles, -- OpenPreviousDatabasesOnStartup, -- AutoSaveAfterEveryChange, -- AutoReloadOnChange, -- AutoSaveOnExit, -- AutoSaveNonDataChanges, -- BackupBeforeSave, -- UseAtomicSaves, -- SearchLimitGroup, -- MinimizeOnOpenUrl, -- HideWindowOnCopy, -- MinimizeOnCopy, -- MinimizeAfterUnlock, -- DropToBackgroundOnCopy, -- UseGroupIconOnEntryCreation, -- AutoTypeEntryTitleMatch, -- AutoTypeEntryURLMatch, -- AutoTypeDelay, -- AutoTypeStartDelay, -- GlobalAutoTypeKey, -- GlobalAutoTypeModifiers, -- FaviconDownloadTimeout, -- UpdateCheckMessageShown, -- UseTouchID, -- -- LastDatabases, -- LastKeyFiles, -- LastChallengeResponse, -- LastActiveDatabase, -- LastOpenedDatabases, -- LastDir, -- LastAttachmentDir, -- -- GUI_Language, -- GUI_HideToolbar, -- GUI_MovableToolbar, -- GUI_HidePreviewPanel, -- GUI_ToolButtonStyle, -- GUI_ShowTrayIcon, -- GUI_TrayIconAppearance, -- GUI_MinimizeToTray, -- GUI_MinimizeOnStartup, -- GUI_MinimizeOnClose, -- GUI_HideUsernames, -- GUI_HidePasswords, -- GUI_AdvancedSettings, -- GUI_MonospaceNotes, -- GUI_ApplicationTheme, -- GUI_CompactMode, -- GUI_CheckForUpdates, -- GUI_CheckForUpdatesIncludeBetas, -- -- GUI_MainWindowGeometry, -- GUI_MainWindowState, -- GUI_ListViewState, -- GUI_SearchViewState, -- GUI_PreviewSplitterState, -- GUI_SplitterState, -- GUI_AutoTypeSelectDialogSize, -- GUI_CheckForUpdatesNextCheck, -- -- Security_ClearClipboard, -- Security_ClearClipboardTimeout, -- Security_ClearSearch, -- Security_ClearSearchTimeout, -- Security_HideNotes, -- Security_LockDatabaseIdle, -- Security_LockDatabaseIdleSeconds, -- Security_LockDatabaseMinimize, -- Security_LockDatabaseScreenLock, -- Security_RelockAutoType, -- Security_PasswordsRepeatVisible, -- Security_PasswordsHidden, -- Security_PasswordEmptyPlaceholder, -- Security_HidePasswordPreviewPanel, -- Security_AutoTypeAsk, -- Security_IconDownloadFallback, -- Security_ResetTouchId, -- Security_ResetTouchIdTimeout, -- Security_ResetTouchIdScreenlock, -- -- Browser_Enabled, -- Browser_ShowNotification, -- Browser_BestMatchOnly, -- Browser_UnlockDatabase, -- Browser_MatchUrlScheme, -- Browser_SortByUsername, -- Browser_SupportBrowserProxy, -- Browser_UseCustomProxy, -- Browser_CustomProxyLocation, -- Browser_UpdateBinaryPath, -- Browser_AllowExpiredCredentials, -- Browser_AlwaysAllowAccess, -- Browser_AlwaysAllowUpdate, -- Browser_HttpAuthPermission, -- Browser_SearchInAllDatabases, -- Browser_SupportKphFields, -- Browser_NoMigrationPrompt, -- Browser_UseCustomBrowser, -- Browser_CustomBrowserType, -- Browser_CustomBrowserLocation, --#ifdef QT_DEBUG -- Browser_CustomExtensionId, --#endif -- -- SSHAgent_Enabled, -- SSHAgent_UseOpenSSH, -- SSHAgent_AuthSockOverride, -- -- FdoSecrets_Enabled, -- FdoSecrets_ShowNotification, -- FdoSecrets_NoConfirmDeleteItem, -- -- KeeShare_QuietSuccess, -- KeeShare_Own, -- KeeShare_Foreign, -- KeeShare_Active, -- KeeShare_LastDir, -- KeeShare_LastKeyDir, -- KeeShare_LastShareDir, -- -- PasswordGenerator_LowerCase, -- PasswordGenerator_UpperCase, -- PasswordGenerator_Numbers, -- PasswordGenerator_EASCII, -- PasswordGenerator_AdvancedMode, -- PasswordGenerator_SpecialChars, -- PasswordGenerator_AdditionalChars, -- PasswordGenerator_Braces, -- PasswordGenerator_Punctuation, -- PasswordGenerator_Quotes, -- PasswordGenerator_Dashes, -- PasswordGenerator_Math, -- PasswordGenerator_Logograms, -- PasswordGenerator_ExcludedChars, -- PasswordGenerator_ExcludeAlike, -- PasswordGenerator_EnsureEvery, -- PasswordGenerator_Length, -- PasswordGenerator_WordCount, -- PasswordGenerator_WordSeparator, -- PasswordGenerator_WordList, -- PasswordGenerator_WordCase, -- PasswordGenerator_Type, -- -- Messages_NoLegacyKeyFileWarning, -- Messages_Qt55CompatibilityWarning, -- Messages_HidePreReleaseWarning, -- -- // Special internal value -- Deleted -- }; -- -- ~Config() override; -- QVariant get(ConfigKey key); -- QString getFileName(); -- void set(ConfigKey key, const QVariant& value); -- void remove(ConfigKey key); -- bool hasAccessError(); -- void sync(); -- void resetToDefaults(); -- -- static Config* instance(); -- static void createConfigFromFile(const QString& configFileName, const QString& localConfigFileName = {}); -- static void createTempFileInstance(); -- --signals: -- void changed(ConfigKey key); -- --private: -- Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent); -- explicit Config(QObject* parent); -- void init(const QString& configFileName, const QString& localConfigFileName); -- void migrate(); -- static QPair defaultConfigFiles(); -- -- static QPointer m_instance; -- -- QScopedPointer m_settings; -- QScopedPointer m_localSettings; -- QHash m_defaults; --}; -- --inline Config* config() --{ -- return Config::instance(); --} -- --#endif // KEEPASSX_CONFIG_H -diff -urNr keepassxc-2.6.4-orig/src/core/CsvParser.cpp keepassxc-2.6.4-patched/src/core/CsvParser.cpp ---- keepassxc-2.6.4-orig/src/core/CsvParser.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/CsvParser.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,439 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CsvParser.h" -- --#include --#include -- --#include "core/Tools.h" -- --CsvParser::CsvParser() -- : m_ch(0) -- , m_comment('#') -- , m_currCol(1) -- , m_currRow(1) -- , m_isBackslashSyntax(false) -- , m_isEof(false) -- , m_isFileLoaded(false) -- , m_isGood(true) -- , m_lastPos(-1) -- , m_maxCols(0) -- , m_qualifier('"') -- , m_separator(',') -- , m_statusMsg("") --{ -- m_csv.setBuffer(&m_array); -- m_ts.setDevice(&m_csv); -- m_csv.open(QIODevice::ReadOnly); -- m_ts.setCodec("UTF-8"); --} -- --CsvParser::~CsvParser() --{ -- m_csv.close(); --} -- --bool CsvParser::isFileLoaded() --{ -- return m_isFileLoaded; --} -- --bool CsvParser::reparse() --{ -- reset(); -- return parseFile(); --} -- --bool CsvParser::parse(QFile* device) --{ -- clear(); -- if (nullptr == device) { -- appendStatusMsg(QObject::tr("NULL device"), true); -- return false; -- } -- if (!readFile(device)) { -- return false; -- } -- return parseFile(); --} -- --bool CsvParser::readFile(QFile* device) --{ -- if (device->isOpen()) { -- device->close(); -- } -- -- device->open(QIODevice::ReadOnly); -- if (!Tools::readAllFromDevice(device, m_array)) { -- appendStatusMsg(QObject::tr("error reading from device"), true); -- m_isFileLoaded = false; -- } else { -- device->close(); -- -- m_array.replace("\r\n", "\n"); -- m_array.replace("\r", "\n"); -- if (0 == m_array.size()) { -- appendStatusMsg(QObject::tr("file empty").append("\n")); -- } -- m_isFileLoaded = true; -- } -- return m_isFileLoaded; --} -- --void CsvParser::reset() --{ -- m_ch = 0; -- m_currCol = 1; -- m_currRow = 1; -- m_isEof = false; -- m_isGood = true; -- m_lastPos = -1; -- m_maxCols = 0; -- m_statusMsg = ""; -- m_ts.seek(0); -- m_table.clear(); -- // the following are users' concern :) -- // m_comment = '#'; -- // m_backslashSyntax = false; -- // m_comment = '#'; -- // m_qualifier = '"'; -- // m_separator = ','; --} -- --void CsvParser::clear() --{ -- reset(); -- m_isFileLoaded = false; -- m_array.clear(); --} -- --bool CsvParser::parseFile() --{ -- parseRecord(); -- while (!m_isEof) { -- if (!skipEndline()) { -- appendStatusMsg(QObject::tr("malformed string"), true); -- } -- m_currRow++; -- m_currCol = 1; -- parseRecord(); -- } -- fillColumns(); -- return m_isGood; --} -- --void CsvParser::parseRecord() --{ -- CsvRow row; -- if (isComment()) { -- skipLine(); -- return; -- } -- do { -- parseField(row); -- getChar(m_ch); -- } while (isSeparator(m_ch) && !m_isEof); -- -- if (!m_isEof) { -- ungetChar(); -- } -- if (isEmptyRow(row)) { -- row.clear(); -- return; -- } -- m_table.push_back(row); -- if (m_maxCols < row.size()) { -- m_maxCols = row.size(); -- } -- m_currCol++; --} -- --void CsvParser::parseField(CsvRow& row) --{ -- QString field; -- peek(m_ch); -- if (!isTerminator(m_ch)) { -- if (isQualifier(m_ch)) { -- parseQuoted(field); -- } else { -- parseSimple(field); -- } -- } -- row.push_back(field); --} -- --void CsvParser::parseSimple(QString& s) --{ -- QChar c; -- getChar(c); -- while ((isText(c)) && (!m_isEof)) { -- s.append(c); -- getChar(c); -- } -- if (!m_isEof) { -- ungetChar(); -- } --} -- --void CsvParser::parseQuoted(QString& s) --{ -- // read and discard initial qualifier (e.g. quote) -- getChar(m_ch); -- parseEscaped(s); -- // getChar(m_ch); -- if (!isQualifier(m_ch)) { -- appendStatusMsg(QObject::tr("missing closing quote"), true); -- } --} -- --void CsvParser::parseEscaped(QString& s) --{ -- parseEscapedText(s); -- while (processEscapeMark(s, m_ch)) { -- parseEscapedText(s); -- } -- if (!m_isEof) { -- ungetChar(); -- } --} -- --void CsvParser::parseEscapedText(QString& s) --{ -- getChar(m_ch); -- while ((!isQualifier(m_ch)) && !m_isEof) { -- s.append(m_ch); -- getChar(m_ch); -- } --} -- --bool CsvParser::processEscapeMark(QString& s, QChar c) --{ -- QChar buf; -- peek(buf); -- QChar c2; -- if (true == m_isBackslashSyntax) { -- // escape-character syntax, e.g. \" -- if (c != '\\') { -- return false; -- } -- // consume (and append) second qualifier -- getChar(c2); -- if (m_isEof) { -- c2 = '\\'; -- s.append('\\'); -- return false; -- } else { -- s.append(c2); -- return true; -- } -- } else { -- // double quote syntax, e.g. "" -- if (!isQualifier(c)) { -- return false; -- } -- peek(c2); -- if (!m_isEof) { // not EOF, can read one char -- if (isQualifier(c2)) { -- s.append(c2); -- getChar(c2); -- return true; -- } -- } -- return false; -- } --} -- --void CsvParser::fillColumns() --{ -- // fill shorter rows with empty placeholder columns -- for (int i = 0; i < m_table.size(); ++i) { -- int gap = m_maxCols - m_table.at(i).size(); -- if (gap > 0) { -- CsvRow r = m_table.at(i); -- for (int j = 0; j < gap; ++j) { -- r.append(QString("")); -- } -- m_table.replace(i, r); -- } -- } --} -- --void CsvParser::skipLine() --{ -- m_ts.readLine(); -- m_ts.seek(m_ts.pos() - 1); --} -- --bool CsvParser::skipEndline() --{ -- getChar(m_ch); -- return (m_ch == '\n'); --} -- --void CsvParser::getChar(QChar& c) --{ -- m_isEof = m_ts.atEnd(); -- if (!m_isEof) { -- m_lastPos = m_ts.pos(); -- m_ts >> c; -- } --} -- --void CsvParser::ungetChar() --{ -- if (!m_ts.seek(m_lastPos)) { -- qWarning("CSV Parser: unget lower bound exceeded"); -- m_isGood = false; -- } --} -- --void CsvParser::peek(QChar& c) --{ -- getChar(c); -- if (!m_isEof) { -- ungetChar(); -- } --} -- --bool CsvParser::isQualifier(const QChar& c) const --{ -- if (true == m_isBackslashSyntax && (c != m_qualifier)) { -- return (c == '\\'); -- } else { -- return (c == m_qualifier); -- } --} -- --bool CsvParser::isComment() --{ -- bool result = false; -- QChar c2; -- qint64 pos = m_ts.pos(); -- -- do { -- getChar(c2); -- } while ((isSpace(c2) || isTab(c2)) && (!m_isEof)); -- -- if (c2 == m_comment) { -- result = true; -- } -- m_ts.seek(pos); -- return result; --} -- --bool CsvParser::isText(QChar c) const --{ -- return !((isCRLF(c)) || (isSeparator(c))); --} -- --bool CsvParser::isEmptyRow(const CsvRow& row) const --{ -- CsvRow::const_iterator it = row.constBegin(); -- for (; it != row.constEnd(); ++it) { -- if (((*it) != "\n") && ((*it) != "")) { -- return false; -- } -- } -- return true; --} -- --bool CsvParser::isCRLF(const QChar& c) const --{ -- return (c == '\n'); --} -- --bool CsvParser::isSpace(const QChar& c) const --{ -- return (c == ' '); --} -- --bool CsvParser::isTab(const QChar& c) const --{ -- return (c == '\t'); --} -- --bool CsvParser::isSeparator(const QChar& c) const --{ -- return (c == m_separator); --} -- --bool CsvParser::isTerminator(const QChar& c) const --{ -- return (isSeparator(c) || (c == '\n') || (c == '\r')); --} -- --void CsvParser::setBackslashSyntax(bool set) --{ -- m_isBackslashSyntax = set; --} -- --void CsvParser::setComment(const QChar& c) --{ -- m_comment = c.unicode(); --} -- --void CsvParser::setCodec(const QString& s) --{ -- m_ts.setCodec(QTextCodec::codecForName(s.toLocal8Bit())); --} -- --void CsvParser::setFieldSeparator(const QChar& c) --{ -- m_separator = c.unicode(); --} -- --void CsvParser::setTextQualifier(const QChar& c) --{ -- m_qualifier = c.unicode(); --} -- --int CsvParser::getFileSize() const --{ -- return m_csv.size(); --} -- --const CsvTable CsvParser::getCsvTable() const --{ -- return m_table; --} -- --QString CsvParser::getStatus() const --{ -- return m_statusMsg; --} -- --int CsvParser::getCsvCols() const --{ -- if (!m_table.isEmpty() && !m_table.at(0).isEmpty()) { -- return m_table.at(0).size(); -- } else { -- return 0; -- } --} -- --int CsvParser::getCsvRows() const --{ -- return m_table.size(); --} -- --void CsvParser::appendStatusMsg(const QString& s, bool isCritical) --{ -- m_statusMsg += QObject::tr("%1: (row, col) %2,%3").arg(s, m_currRow, m_currCol).append("\n"); -- m_isGood = !isCritical; --} -diff -urNr keepassxc-2.6.4-orig/src/core/CsvParser.h keepassxc-2.6.4-patched/src/core/CsvParser.h ---- keepassxc-2.6.4-orig/src/core/CsvParser.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/CsvParser.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,102 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CSVPARSER_H --#define KEEPASSX_CSVPARSER_H -- --#include --#include --#include --#include -- --typedef QStringList CsvRow; --typedef QList CsvTable; -- --class CsvParser --{ -- --public: -- CsvParser(); -- ~CsvParser(); -- // read data from device and parse it -- bool parse(QFile* device); -- bool isFileLoaded(); -- // reparse the same buffer (device is not opened again) -- bool reparse(); -- void setCodec(const QString& s); -- void setComment(const QChar& c); -- void setFieldSeparator(const QChar& c); -- void setTextQualifier(const QChar& c); -- void setBackslashSyntax(bool set); -- int getFileSize() const; -- int getCsvRows() const; -- int getCsvCols() const; -- QString getStatus() const; -- const CsvTable getCsvTable() const; -- --protected: -- CsvTable m_table; -- --private: -- QByteArray m_array; -- QBuffer m_csv; -- QChar m_ch; -- QChar m_comment; -- unsigned int m_currCol; -- unsigned int m_currRow; -- bool m_isBackslashSyntax; -- bool m_isEof; -- bool m_isFileLoaded; -- bool m_isGood; -- qint64 m_lastPos; -- int m_maxCols; -- QChar m_qualifier; -- QChar m_separator; -- QString m_statusMsg; -- QTextStream m_ts; -- -- void getChar(QChar& c); -- void ungetChar(); -- void peek(QChar& c); -- void fillColumns(); -- bool isTerminator(const QChar& c) const; -- bool isSeparator(const QChar& c) const; -- bool isQualifier(const QChar& c) const; -- bool processEscapeMark(QString& s, QChar c); -- bool isText(QChar c) const; -- bool isComment(); -- bool isCRLF(const QChar& c) const; -- bool isSpace(const QChar& c) const; -- bool isTab(const QChar& c) const; -- bool isEmptyRow(const CsvRow& row) const; -- bool parseFile(); -- void parseRecord(); -- void parseField(CsvRow& row); -- void parseSimple(QString& s); -- void parseQuoted(QString& s); -- void parseEscaped(QString& s); -- void parseEscapedText(QString& s); -- bool readFile(QFile* device); -- void reset(); -- void clear(); -- bool skipEndline(); -- void skipLine(); -- void appendStatusMsg(const QString& s, bool isCritical = false); --}; -- --#endif // CSVPARSER_H -diff -urNr keepassxc-2.6.4-orig/src/core/CustomData.cpp keepassxc-2.6.4-patched/src/core/CustomData.cpp ---- keepassxc-2.6.4-orig/src/core/CustomData.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/CustomData.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,188 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CustomData.h" --#include "Clock.h" -- --#include "core/Global.h" -- --const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED"); --const QString CustomData::Created = QStringLiteral("_CREATED"); --const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_"); --const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: "); -- --CustomData::CustomData(QObject* parent) -- : QObject(parent) --{ --} -- --QList CustomData::keys() const --{ -- return m_data.keys(); --} -- --bool CustomData::hasKey(const QString& key) const --{ -- return m_data.contains(key); --} -- --QString CustomData::value(const QString& key) const --{ -- return m_data.value(key); --} -- --bool CustomData::contains(const QString& key) const --{ -- return m_data.contains(key); --} -- --bool CustomData::containsValue(const QString& value) const --{ -- return asConst(m_data).values().contains(value); --} -- --void CustomData::set(const QString& key, const QString& value) --{ -- bool addAttribute = !m_data.contains(key); -- bool changeValue = !addAttribute && (m_data.value(key) != value); -- -- if (addAttribute) { -- emit aboutToBeAdded(key); -- } -- -- if (addAttribute || changeValue) { -- m_data.insert(key, value); -- updateLastModified(); -- emit customDataModified(); -- } -- -- if (addAttribute) { -- emit added(key); -- } --} -- --void CustomData::remove(const QString& key) --{ -- emit aboutToBeRemoved(key); -- -- m_data.remove(key); -- -- updateLastModified(); -- emit removed(key); -- emit customDataModified(); --} -- --void CustomData::rename(const QString& oldKey, const QString& newKey) --{ -- const bool containsOldKey = m_data.contains(oldKey); -- const bool containsNewKey = m_data.contains(newKey); -- Q_ASSERT(containsOldKey && !containsNewKey); -- if (!containsOldKey || containsNewKey) { -- return; -- } -- -- QString data = value(oldKey); -- -- emit aboutToRename(oldKey, newKey); -- -- m_data.remove(oldKey); -- m_data.insert(newKey, data); -- -- updateLastModified(); -- emit customDataModified(); -- emit renamed(oldKey, newKey); --} -- --void CustomData::copyDataFrom(const CustomData* other) --{ -- if (*this == *other) { -- return; -- } -- -- emit aboutToBeReset(); -- -- m_data = other->m_data; -- -- updateLastModified(); -- emit reset(); -- emit customDataModified(); --} -- --QDateTime CustomData::getLastModified() const --{ -- if (m_data.contains(LastModified)) { -- return Clock::parse(m_data.value(LastModified)); -- } -- return {}; --} -- --bool CustomData::isProtectedCustomData(const QString& key) const --{ -- return key.startsWith(CustomData::BrowserKeyPrefix) || key.startsWith(CustomData::Created); --} -- --bool CustomData::operator==(const CustomData& other) const --{ -- return (m_data == other.m_data); --} -- --bool CustomData::operator!=(const CustomData& other) const --{ -- return (m_data != other.m_data); --} -- --void CustomData::clear() --{ -- emit aboutToBeReset(); -- -- m_data.clear(); -- -- emit reset(); -- emit customDataModified(); --} -- --bool CustomData::isEmpty() const --{ -- return m_data.isEmpty(); --} -- --int CustomData::size() const --{ -- return m_data.size(); --} -- --int CustomData::dataSize() const --{ -- int size = 0; -- -- QHashIterator i(m_data); -- while (i.hasNext()) { -- i.next(); -- size += i.key().toUtf8().size() + i.value().toUtf8().size(); -- } -- return size; --} -- --void CustomData::updateLastModified() --{ -- if (m_data.size() == 1 && m_data.contains(LastModified)) { -- m_data.remove(LastModified); -- return; -- } -- -- m_data.insert(LastModified, Clock::currentDateTimeUtc().toString()); --} -diff -urNr keepassxc-2.6.4-orig/src/core/CustomData.h keepassxc-2.6.4-patched/src/core/CustomData.h ---- keepassxc-2.6.4-orig/src/core/CustomData.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/CustomData.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,74 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CUSTOMDATA_H --#define KEEPASSXC_CUSTOMDATA_H -- --#include --#include --#include --#include -- --class CustomData : public QObject --{ -- Q_OBJECT -- --public: -- explicit CustomData(QObject* parent = nullptr); -- QList keys() const; -- bool hasKey(const QString& key) const; -- QString value(const QString& key) const; -- bool contains(const QString& key) const; -- bool containsValue(const QString& value) const; -- void set(const QString& key, const QString& value); -- void remove(const QString& key); -- void rename(const QString& oldKey, const QString& newKey); -- void clear(); -- bool isEmpty() const; -- int size() const; -- int dataSize() const; -- void copyDataFrom(const CustomData* other); -- QDateTime getLastModified() const; -- bool isProtectedCustomData(const QString& key) const; -- bool operator==(const CustomData& other) const; -- bool operator!=(const CustomData& other) const; -- -- static const QString LastModified; -- static const QString Created; -- static const QString BrowserKeyPrefix; -- static const QString BrowserLegacyKeyPrefix; -- --signals: -- void customDataModified(); -- void aboutToBeAdded(const QString& key); -- void added(const QString& key); -- void aboutToBeRemoved(const QString& key); -- void removed(const QString& key); -- void aboutToRename(const QString& oldKey, const QString& newKey); -- void renamed(const QString& oldKey, const QString& newKey); -- void aboutToBeReset(); -- void reset(); -- void lastModified(); -- --private slots: -- void updateLastModified(); -- --private: -- QHash m_data; --}; -- --#endif // KEEPASSXC_CUSTOMDATA_H -diff -urNr keepassxc-2.6.4-orig/src/core/Database.cpp keepassxc-2.6.4-patched/src/core/Database.cpp ---- keepassxc-2.6.4-orig/src/core/Database.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Database.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,929 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Database.h" -- --#include "core/AsyncTask.h" --#include "core/Clock.h" --#include "core/FileWatcher.h" --#include "core/Group.h" --#include "core/Merger.h" --#include "core/Metadata.h" --#include "format/KdbxXmlReader.h" --#include "format/KeePass2Reader.h" --#include "format/KeePass2Writer.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" -- --#include --#include --#include --#include --#include --#include -- --QHash> Database::s_uuidMap; -- --Database::Database() -- : m_metadata(new Metadata(this)) -- , m_data() -- , m_rootGroup(nullptr) -- , m_fileWatcher(new FileWatcher(this)) -- , m_emitModified(false) -- , m_uuid(QUuid::createUuid()) --{ -- setRootGroup(new Group()); -- rootGroup()->setUuid(QUuid::createUuid()); -- rootGroup()->setName(tr("Passwords", "Root group name")); -- m_modifiedTimer.setSingleShot(true); -- -- s_uuidMap.insert(m_uuid, this); -- -- connect(m_metadata, SIGNAL(metadataModified()), SLOT(markAsModified())); -- connect(&m_modifiedTimer, SIGNAL(timeout()), SIGNAL(databaseModified())); -- connect(this, SIGNAL(databaseOpened()), SLOT(updateCommonUsernames())); -- connect(this, SIGNAL(databaseSaved()), SLOT(updateCommonUsernames())); -- connect(m_fileWatcher, &FileWatcher::fileChanged, this, &Database::databaseFileChanged); -- -- m_modified = false; -- m_emitModified = true; --} -- --Database::Database(const QString& filePath) -- : Database() --{ -- setFilePath(filePath); --} -- --Database::~Database() --{ -- releaseData(); --} -- --QUuid Database::uuid() const --{ -- return m_uuid; --} -- --/** -- * Open the database from a previously specified file. -- * Unless `readOnly` is set to false, the database will be opened in -- * read-write mode and fall back to read-only if that is not possible. -- * -- * @param key composite key for unlocking the database -- * @param readOnly open in read-only mode -- * @param error error message in case of failure -- * @return true on success -- */ --bool Database::open(QSharedPointer key, QString* error, bool readOnly) --{ -- Q_ASSERT(!m_data.filePath.isEmpty()); -- if (m_data.filePath.isEmpty()) { -- return false; -- } -- return open(m_data.filePath, std::move(key), error, readOnly); --} -- --/** -- * Open the database from a file. -- * Unless `readOnly` is set to false, the database will be opened in -- * read-write mode and fall back to read-only if that is not possible. -- * -- * @param filePath path to the file -- * @param key composite key for unlocking the database -- * @param readOnly open in read-only mode -- * @param error error message in case of failure -- * @return true on success -- */ --bool Database::open(const QString& filePath, QSharedPointer key, QString* error, bool readOnly) --{ -- QFile dbFile(filePath); -- if (!dbFile.exists()) { -- if (error) { -- *error = tr("File %1 does not exist.").arg(filePath); -- } -- return false; -- } -- -- // Don't autodetect read-only mode, as it triggers an upstream bug. -- // See https://github.com/keepassxreboot/keepassxc/issues/803 -- // if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) { -- // readOnly = true; -- // } -- // -- // if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) { -- if (!dbFile.open(QIODevice::ReadOnly)) { -- if (error) { -- *error = tr("Unable to open file %1.").arg(filePath); -- } -- return false; -- } -- -- setEmitModified(false); -- -- KeePass2Reader reader; -- if (!reader.readDatabase(&dbFile, std::move(key), this)) { -- if (error) { -- *error = tr("Error while reading the database: %1").arg(reader.errorString()); -- } -- return false; -- } -- -- setReadOnly(readOnly); -- setFilePath(filePath); -- dbFile.close(); -- -- markAsClean(); -- -- emit databaseOpened(); -- m_fileWatcher->start(canonicalFilePath(), 30, 1); -- setEmitModified(true); -- -- return true; --} -- --bool Database::isSaving() --{ -- bool locked = m_saveMutex.tryLock(); -- if (locked) { -- m_saveMutex.unlock(); -- } -- return !locked; --} -- --/** -- * Save the database to the current file path. It is an error to call this function -- * if no file path has been defined. -- * -- * @param error error message in case of failure -- * @param atomic Use atomic file transactions -- * @param backup Backup the existing database file, if exists -- * @return true on success -- */ --bool Database::save(QString* error, bool atomic, bool backup) --{ -- Q_ASSERT(!m_data.filePath.isEmpty()); -- if (m_data.filePath.isEmpty()) { -- if (error) { -- *error = tr("Could not save, database does not point to a valid file."); -- } -- return false; -- } -- -- return saveAs(m_data.filePath, error, atomic, backup); --} -- --/** -- * Save the database to a specific file. -- * -- * If atomic is false, this function uses QTemporaryFile instead of QSaveFile -- * due to a bug in Qt (https://bugreports.qt.io/browse/QTBUG-57299) that may -- * prevent the QSaveFile from renaming itself when using Dropbox, Google Drive, -- * or OneDrive. -- * -- * The risk in using QTemporaryFile is that the rename function is not atomic -- * and may result in loss of data if there is a crash or power loss at the -- * wrong moment. -- * -- * @param filePath Absolute path of the file to save -- * @param error error message in case of failure -- * @param atomic Use atomic file transactions -- * @param backup Backup the existing database file, if exists -- * @return true on success -- */ --bool Database::saveAs(const QString& filePath, QString* error, bool atomic, bool backup) --{ -- // Disallow overlapping save operations -- if (isSaving()) { -- if (error) { -- *error = tr("Database save is already in progress."); -- } -- return false; -- } -- -- // Never save an uninitialized database -- if (!isInitialized()) { -- if (error) { -- *error = tr("Could not save, database has not been initialized!"); -- } -- return false; -- } -- -- // Prevent destructive operations while saving -- QMutexLocker locker(&m_saveMutex); -- -- if (filePath == m_data.filePath) { -- // Disallow saving to the same file if read-only -- if (m_data.isReadOnly) { -- Q_ASSERT_X(false, "Database::saveAs", "Could not save, database file is read-only."); -- if (error) { -- *error = tr("Could not save, database file is read-only."); -- } -- return false; -- } -- -- // Fail-safe check to make sure we don't overwrite underlying file changes -- // that have not yet triggered a file reload/merge operation. -- if (!m_fileWatcher->hasSameFileChecksum()) { -- if (error) { -- *error = tr("Database file has unmerged changes."); -- } -- return false; -- } -- } -- -- // Clear read-only flag -- setReadOnly(false); -- m_fileWatcher->stop(); -- -- QFileInfo fileInfo(filePath); -- auto realFilePath = fileInfo.exists() ? fileInfo.canonicalFilePath() : fileInfo.absoluteFilePath(); -- bool isNewFile = !QFile::exists(realFilePath); -- bool ok = AsyncTask::runAndWaitForFuture([&] { return performSave(realFilePath, error, atomic, backup); }); -- if (ok) { -- markAsClean(); -- setFilePath(filePath); -- if (isNewFile) { -- QFile::setPermissions(realFilePath, QFile::ReadUser | QFile::WriteUser); -- } -- m_fileWatcher->start(realFilePath, 30, 1); -- } else { -- // Saving failed, don't rewatch file since it does not represent our database -- markAsModified(); -- } -- -- return ok; --} -- --bool Database::performSave(const QString& filePath, QString* error, bool atomic, bool backup) --{ -- if (atomic) { -- QSaveFile saveFile(filePath); -- if (saveFile.open(QIODevice::WriteOnly)) { -- // write the database to the file -- if (!writeDatabase(&saveFile, error)) { -- return false; -- } -- -- if (backup) { -- backupDatabase(filePath); -- } -- -- if (saveFile.commit()) { -- // successfully saved database file -- return true; -- } -- } -- -- if (error) { -- *error = saveFile.errorString(); -- } -- } else { -- QTemporaryFile tempFile; -- if (tempFile.open()) { -- // write the database to the file -- if (!writeDatabase(&tempFile, error)) { -- return false; -- } -- -- tempFile.close(); // flush to disk -- -- if (backup) { -- backupDatabase(filePath); -- } -- -- // Delete the original db and move the temp file in place -- auto perms = QFile::permissions(filePath); -- QFile::remove(filePath); -- -- // Note: call into the QFile rename instead of QTemporaryFile -- // due to an undocumented difference in how the function handles -- // errors. This prevents errors when saving across file systems. -- if (tempFile.QFile::rename(filePath)) { -- // successfully saved the database -- tempFile.setAutoRemove(false); -- QFile::setPermissions(filePath, perms); -- return true; -- } else if (!backup || !restoreDatabase(filePath)) { -- // Failed to copy new database in place, and -- // failed to restore from backup or backups disabled -- tempFile.setAutoRemove(false); -- if (error) { -- *error = tr("%1\nBackup database located at %2").arg(tempFile.errorString(), tempFile.fileName()); -- } -- return false; -- } -- } -- -- if (error) { -- *error = tempFile.errorString(); -- } -- } -- -- // Saving failed -- return false; --} -- --bool Database::writeDatabase(QIODevice* device, QString* error) --{ -- Q_ASSERT(!m_data.isReadOnly); -- if (m_data.isReadOnly) { -- if (error) { -- *error = tr("File cannot be written as it is opened in read-only mode."); -- } -- return false; -- } -- -- PasswordKey oldTransformedKey; -- if (m_data.key->isEmpty()) { -- oldTransformedKey.setHash(m_data.transformedDatabaseKey->rawKey()); -- } -- -- KeePass2Writer writer; -- setEmitModified(false); -- writer.writeDatabase(device, this); -- setEmitModified(true); -- -- if (writer.hasError()) { -- if (error) { -- *error = writer.errorString(); -- } -- return false; -- } -- -- QByteArray newKey = m_data.transformedDatabaseKey->rawKey(); -- Q_ASSERT(!newKey.isEmpty()); -- Q_ASSERT(newKey != oldTransformedKey.rawKey()); -- if (newKey.isEmpty() || newKey == oldTransformedKey.rawKey()) { -- if (error) { -- *error = tr("Key not transformed. This is a bug, please report it to the developers!"); -- } -- return false; -- } -- -- return true; --} -- --bool Database::extract(QByteArray& xmlOutput, QString* error) --{ -- KeePass2Writer writer; -- writer.extractDatabase(this, xmlOutput); -- if (writer.hasError()) { -- if (error) { -- *error = writer.errorString(); -- } -- return false; -- } -- -- return true; --} -- --bool Database::import(const QString& xmlExportPath, QString* error) --{ -- KdbxXmlReader reader(KeePass2::FILE_VERSION_4); -- QFile file(xmlExportPath); -- file.open(QIODevice::ReadOnly); -- -- reader.readDatabase(&file, this); -- -- if (reader.hasError()) { -- if (error) { -- *error = reader.errorString(); -- } -- return false; -- } -- -- return true; --} -- --/** -- * Release all stored group, entry, and meta data of this database. -- * -- * Call this method to ensure all data is cleared even if valid -- * pointers to this Database object are still being held. -- * -- * A previously reparented root group will not be freed. -- */ -- --void Database::releaseData() --{ -- // Prevent data release while saving -- QMutexLocker locker(&m_saveMutex); -- -- if (m_modified) { -- emit databaseDiscarded(); -- } -- -- setEmitModified(false); -- m_modified = false; -- m_modifiedTimer.stop(); -- -- s_uuidMap.remove(m_uuid); -- m_uuid = QUuid(); -- -- m_data.clear(); -- m_metadata->clear(); -- -- setRootGroup(new Group()); -- -- m_fileWatcher->stop(); -- -- m_deletedObjects.clear(); -- m_commonUsernames.clear(); --} -- --/** -- * Remove the old backup and replace it with a new one -- * backups are named .old. -- * -- * @param filePath Path to the file to backup -- * @return true on success -- */ --bool Database::backupDatabase(const QString& filePath) --{ -- static auto re = QRegularExpression("(\\.[^.]+)$"); -- -- auto match = re.match(filePath); -- auto backupFilePath = filePath; -- auto perms = QFile::permissions(filePath); -- backupFilePath = backupFilePath.replace(re, "") + ".old" + match.captured(1); -- QFile::remove(backupFilePath); -- bool res = QFile::copy(filePath, backupFilePath); -- QFile::setPermissions(backupFilePath, perms); -- return res; --} -- --/** -- * Restores the database file from the backup file with -- * name .old. to filePath. This will -- * overwrite the existing file! -- * -- * @param filePath Path to the file to restore -- * @return true on success -- */ --bool Database::restoreDatabase(const QString& filePath) --{ -- static auto re = QRegularExpression("^(.*?)(\\.[^.]+)?$"); -- -- auto match = re.match(filePath); -- auto perms = QFile::permissions(filePath); -- auto backupFilePath = match.captured(1) + ".old" + match.captured(2); -- // Only try to restore if the backup file actually exists -- if (QFile::exists(backupFilePath)) { -- QFile::remove(filePath); -- return QFile::copy(backupFilePath, filePath); -- QFile::setPermissions(filePath, perms); -- } -- return false; --} -- --bool Database::isReadOnly() const --{ -- return m_data.isReadOnly; --} -- --void Database::setReadOnly(bool readOnly) --{ -- m_data.isReadOnly = readOnly; --} -- --/** -- * Returns true if the database key exists, has subkeys, and the -- * root group exists -- * -- * @return true if database has been fully initialized -- */ --bool Database::isInitialized() const --{ -- return m_data.key && !m_data.key->isEmpty() && m_rootGroup; --} -- --Group* Database::rootGroup() --{ -- return m_rootGroup; --} -- --const Group* Database::rootGroup() const --{ -- return m_rootGroup; --} -- --/** -- * Sets group as the root group and takes ownership of it. -- * Warning: Be careful when calling this method as it doesn't -- * emit any notifications so e.g. models aren't updated. -- * The caller is responsible for cleaning up the previous -- root group. -- */ --void Database::setRootGroup(Group* group) --{ -- Q_ASSERT(group); -- -- if (isInitialized() && isModified()) { -- emit databaseDiscarded(); -- } -- -- m_rootGroup = group; -- m_rootGroup->setParent(this); --} -- --Metadata* Database::metadata() --{ -- return m_metadata; --} -- --const Metadata* Database::metadata() const --{ -- return m_metadata; --} -- --/** -- * Returns the original file path that was provided for -- * this database. This path may not exist, may contain -- * unresolved symlinks, or have malformed slashes. -- * -- * @return original file path -- */ --QString Database::filePath() const --{ -- return m_data.filePath; --} -- --/** -- * Returns the canonical file path of this databases' -- * set file path. This returns an empty string if the -- * file does not exist or cannot be resolved. -- * -- * @return canonical file path -- */ --QString Database::canonicalFilePath() const --{ -- QFileInfo fileInfo(m_data.filePath); -- return fileInfo.canonicalFilePath(); --} -- --void Database::setFilePath(const QString& filePath) --{ -- if (filePath != m_data.filePath) { -- QString oldPath = m_data.filePath; -- m_data.filePath = filePath; -- // Don't watch for changes until the next open or save operation -- m_fileWatcher->stop(); -- emit filePathChanged(oldPath, filePath); -- } --} -- --QList Database::deletedObjects() --{ -- return m_deletedObjects; --} -- --const QList& Database::deletedObjects() const --{ -- return m_deletedObjects; --} -- --bool Database::containsDeletedObject(const QUuid& uuid) const --{ -- for (const DeletedObject& currentObject : m_deletedObjects) { -- if (currentObject.uuid == uuid) { -- return true; -- } -- } -- return false; --} -- --bool Database::containsDeletedObject(const DeletedObject& object) const --{ -- for (const DeletedObject& currentObject : m_deletedObjects) { -- if (currentObject.uuid == object.uuid) { -- return true; -- } -- } -- return false; --} -- --void Database::setDeletedObjects(const QList& delObjs) --{ -- if (m_deletedObjects == delObjs) { -- return; -- } -- m_deletedObjects = delObjs; --} -- --void Database::addDeletedObject(const DeletedObject& delObj) --{ -- Q_ASSERT(delObj.deletionTime.timeSpec() == Qt::UTC); -- m_deletedObjects.append(delObj); --} -- --void Database::addDeletedObject(const QUuid& uuid) --{ -- DeletedObject delObj; -- delObj.deletionTime = Clock::currentDateTimeUtc(); -- delObj.uuid = uuid; -- -- addDeletedObject(delObj); --} -- --QList Database::commonUsernames() --{ -- return m_commonUsernames; --} -- --void Database::updateCommonUsernames(int topN) --{ -- m_commonUsernames.clear(); -- m_commonUsernames.append(rootGroup()->usernamesRecursive(topN)); --} -- --const QUuid& Database::cipher() const --{ -- return m_data.cipher; --} -- --Database::CompressionAlgorithm Database::compressionAlgorithm() const --{ -- return m_data.compressionAlgorithm; --} -- --QByteArray Database::transformedDatabaseKey() const --{ -- return m_data.transformedDatabaseKey->rawKey(); --} -- --QByteArray Database::challengeResponseKey() const --{ -- return m_data.challengeResponseKey->rawKey(); --} -- --bool Database::challengeMasterSeed(const QByteArray& masterSeed) --{ -- m_keyError.clear(); -- if (m_data.key) { -- m_data.masterSeed->setHash(masterSeed); -- QByteArray response; -- bool ok = m_data.key->challenge(masterSeed, response, &m_keyError); -- if (ok && !response.isEmpty()) { -- m_data.challengeResponseKey->setHash(response); -- } else if (ok && response.isEmpty()) { -- // no CR key present, make sure buffer is empty -- m_data.challengeResponseKey.reset(new PasswordKey); -- } -- return ok; -- } -- return false; --} -- --void Database::setCipher(const QUuid& cipher) --{ -- Q_ASSERT(!cipher.isNull()); -- -- m_data.cipher = cipher; --} -- --void Database::setCompressionAlgorithm(Database::CompressionAlgorithm algo) --{ -- Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); -- -- m_data.compressionAlgorithm = algo; --} -- --/** -- * Set and transform a new encryption key. -- * -- * @param key key to set and transform or nullptr to reset the key -- * @param updateChangedTime true to update database change time -- * @param updateTransformSalt true to update the transform salt -- * @param transformKey trigger the KDF after setting the key -- * @return true on success -- */ --bool Database::setKey(const QSharedPointer& key, -- bool updateChangedTime, -- bool updateTransformSalt, -- bool transformKey) --{ -- Q_ASSERT(!m_data.isReadOnly); -- m_keyError.clear(); -- -- if (!key) { -- m_data.key.reset(); -- m_data.transformedDatabaseKey.reset(new PasswordKey()); -- return true; -- } -- -- if (updateTransformSalt) { -- m_data.kdf->randomizeSeed(); -- Q_ASSERT(!m_data.kdf->seed().isEmpty()); -- } -- -- PasswordKey oldTransformedDatabaseKey; -- if (m_data.key && !m_data.key->isEmpty()) { -- oldTransformedDatabaseKey.setHash(m_data.transformedDatabaseKey->rawKey()); -- } -- -- QByteArray transformedDatabaseKey; -- -- if (!transformKey) { -- transformedDatabaseKey = QByteArray(oldTransformedDatabaseKey.rawKey()); -- } else if (!key->transform(*m_data.kdf, transformedDatabaseKey, &m_keyError)) { -- return false; -- } -- -- m_data.key = key; -- if (!transformedDatabaseKey.isEmpty()) { -- m_data.transformedDatabaseKey->setHash(transformedDatabaseKey); -- } -- if (updateChangedTime) { -- m_metadata->setDatabaseKeyChanged(Clock::currentDateTimeUtc()); -- } -- -- if (oldTransformedDatabaseKey.rawKey() != m_data.transformedDatabaseKey->rawKey()) { -- markAsModified(); -- } -- -- return true; --} -- --QString Database::keyError() --{ -- return m_keyError; --} -- --QVariantMap& Database::publicCustomData() --{ -- return m_data.publicCustomData; --} -- --const QVariantMap& Database::publicCustomData() const --{ -- return m_data.publicCustomData; --} -- --void Database::setPublicCustomData(const QVariantMap& customData) --{ -- Q_ASSERT(!m_data.isReadOnly); -- m_data.publicCustomData = customData; --} -- --void Database::createRecycleBin() --{ -- Q_ASSERT(!m_data.isReadOnly); -- -- auto recycleBin = new Group(); -- recycleBin->setUuid(QUuid::createUuid()); -- recycleBin->setParent(rootGroup()); -- recycleBin->setName(tr("Recycle Bin")); -- recycleBin->setIcon(Group::RecycleBinIconNumber); -- recycleBin->setSearchingEnabled(Group::Disable); -- recycleBin->setAutoTypeEnabled(Group::Disable); -- -- m_metadata->setRecycleBin(recycleBin); --} -- --void Database::recycleEntry(Entry* entry) --{ -- Q_ASSERT(!m_data.isReadOnly); -- if (m_metadata->recycleBinEnabled()) { -- if (!m_metadata->recycleBin()) { -- createRecycleBin(); -- } -- entry->setGroup(metadata()->recycleBin()); -- } else { -- delete entry; -- } --} -- --void Database::recycleGroup(Group* group) --{ -- Q_ASSERT(!m_data.isReadOnly); -- if (m_metadata->recycleBinEnabled()) { -- if (!m_metadata->recycleBin()) { -- createRecycleBin(); -- } -- group->setParent(metadata()->recycleBin()); -- } else { -- delete group; -- } --} -- --void Database::emptyRecycleBin() --{ -- Q_ASSERT(!m_data.isReadOnly); -- if (m_metadata->recycleBinEnabled() && m_metadata->recycleBin()) { -- // destroying direct entries of the recycle bin -- QList subEntries = m_metadata->recycleBin()->entries(); -- for (Entry* entry : subEntries) { -- delete entry; -- } -- // destroying direct subgroups of the recycle bin -- QList subGroups = m_metadata->recycleBin()->children(); -- for (Group* group : subGroups) { -- delete group; -- } -- } --} -- --void Database::setEmitModified(bool value) --{ -- if (m_emitModified && !value) { -- m_modifiedTimer.stop(); -- } -- -- m_emitModified = value; --} -- --bool Database::isModified() const --{ -- return m_modified; --} -- --bool Database::hasNonDataChanges() const --{ -- return m_hasNonDataChange; --} -- --void Database::markAsModified() --{ -- m_modified = true; -- if (m_emitModified && !m_modifiedTimer.isActive()) { -- // Small time delay prevents numerous consecutive saves due to repeated signals -- m_modifiedTimer.start(150); -- } --} -- --void Database::markAsClean() --{ -- bool emitSignal = m_modified; -- m_modified = false; -- m_modifiedTimer.stop(); -- m_hasNonDataChange = false; -- if (emitSignal) { -- emit databaseSaved(); -- } --} -- --void Database::markNonDataChange() --{ -- m_hasNonDataChange = true; --} -- --/** -- * @param uuid UUID of the database -- * @return pointer to the database or nullptr if no such database exists -- */ --Database* Database::databaseByUuid(const QUuid& uuid) --{ -- return s_uuidMap.value(uuid, nullptr); --} -- --QSharedPointer Database::key() const --{ -- return m_data.key; --} -- --QSharedPointer Database::kdf() const --{ -- return m_data.kdf; --} -- --void Database::setKdf(QSharedPointer kdf) --{ -- Q_ASSERT(!m_data.isReadOnly); -- m_data.kdf = std::move(kdf); --} -- --bool Database::changeKdf(const QSharedPointer& kdf) --{ -- Q_ASSERT(!m_data.isReadOnly); -- -- kdf->randomizeSeed(); -- QByteArray transformedDatabaseKey; -- if (!m_data.key) { -- m_data.key = QSharedPointer::create(); -- } -- if (!m_data.key->transform(*kdf, transformedDatabaseKey)) { -- return false; -- } -- -- setKdf(kdf); -- m_data.transformedDatabaseKey->setHash(transformedDatabaseKey); -- markAsModified(); -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Database.h keepassxc-2.6.4-patched/src/core/Database.h ---- keepassxc-2.6.4-orig/src/core/Database.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Database.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,224 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASE_H --#define KEEPASSX_DATABASE_H -- --#include --#include --#include --#include --#include --#include -- --#include "config-keepassx.h" --#include "crypto/kdf/AesKdf.h" --#include "crypto/kdf/Kdf.h" --#include "format/KeePass2.h" --#include "keys/CompositeKey.h" --#include "keys/PasswordKey.h" -- --class Entry; --enum class EntryReferenceType; --class FileWatcher; --class Group; --class Metadata; --class QIODevice; -- --struct DeletedObject --{ -- QUuid uuid; -- QDateTime deletionTime; -- bool operator==(const DeletedObject& other) const -- { -- return uuid == other.uuid && deletionTime == other.deletionTime; -- } --}; -- --Q_DECLARE_TYPEINFO(DeletedObject, Q_MOVABLE_TYPE); -- --class Database : public QObject --{ -- Q_OBJECT -- --public: -- enum CompressionAlgorithm -- { -- CompressionNone = 0, -- CompressionGZip = 1 -- }; -- static const quint32 CompressionAlgorithmMax = CompressionGZip; -- -- Database(); -- explicit Database(const QString& filePath); -- ~Database() override; -- -- bool open(QSharedPointer key, QString* error = nullptr, bool readOnly = false); -- bool open(const QString& filePath, -- QSharedPointer key, -- QString* error = nullptr, -- bool readOnly = false); -- bool save(QString* error = nullptr, bool atomic = true, bool backup = false); -- bool saveAs(const QString& filePath, QString* error = nullptr, bool atomic = true, bool backup = false); -- bool extract(QByteArray&, QString* error = nullptr); -- bool import(const QString& xmlExportPath, QString* error = nullptr); -- -- void releaseData(); -- -- bool isInitialized() const; -- bool isModified() const; -- bool hasNonDataChanges() const; -- void setEmitModified(bool value); -- bool isReadOnly() const; -- void setReadOnly(bool readOnly); -- bool isSaving(); -- -- QUuid uuid() const; -- QString filePath() const; -- QString canonicalFilePath() const; -- void setFilePath(const QString& filePath); -- -- Metadata* metadata(); -- const Metadata* metadata() const; -- Group* rootGroup(); -- const Group* rootGroup() const; -- void setRootGroup(Group* group); -- QVariantMap& publicCustomData(); -- const QVariantMap& publicCustomData() const; -- void setPublicCustomData(const QVariantMap& customData); -- -- void recycleGroup(Group* group); -- void recycleEntry(Entry* entry); -- void emptyRecycleBin(); -- QList deletedObjects(); -- const QList& deletedObjects() const; -- void addDeletedObject(const DeletedObject& delObj); -- void addDeletedObject(const QUuid& uuid); -- bool containsDeletedObject(const QUuid& uuid) const; -- bool containsDeletedObject(const DeletedObject& uuid) const; -- void setDeletedObjects(const QList& delObjs); -- -- QList commonUsernames(); -- -- QSharedPointer key() const; -- bool setKey(const QSharedPointer& key, -- bool updateChangedTime = true, -- bool updateTransformSalt = false, -- bool transformKey = true); -- QString keyError(); -- QByteArray challengeResponseKey() const; -- bool challengeMasterSeed(const QByteArray& masterSeed); -- const QUuid& cipher() const; -- void setCipher(const QUuid& cipher); -- Database::CompressionAlgorithm compressionAlgorithm() const; -- void setCompressionAlgorithm(Database::CompressionAlgorithm algo); -- -- QSharedPointer kdf() const; -- void setKdf(QSharedPointer kdf); -- bool changeKdf(const QSharedPointer& kdf); -- QByteArray transformedDatabaseKey() const; -- -- static Database* databaseByUuid(const QUuid& uuid); -- --public slots: -- void markAsModified(); -- void markAsClean(); -- void updateCommonUsernames(int topN = 10); -- void markNonDataChange(); -- --signals: -- void filePathChanged(const QString& oldPath, const QString& newPath); -- void groupDataChanged(Group* group); -- void groupAboutToAdd(Group* group, int index); -- void groupAdded(); -- void groupAboutToRemove(Group* group); -- void groupRemoved(); -- void groupAboutToMove(Group* group, Group* toGroup, int index); -- void groupMoved(); -- void databaseOpened(); -- void databaseModified(); -- void databaseSaved(); -- void databaseDiscarded(); -- void databaseFileChanged(); -- --private: -- struct DatabaseData -- { -- QString filePath; -- bool isReadOnly = false; -- QUuid cipher = KeePass2::CIPHER_AES256; -- CompressionAlgorithm compressionAlgorithm = CompressionGZip; -- -- QScopedPointer masterSeed; -- QScopedPointer transformedDatabaseKey; -- QScopedPointer challengeResponseKey; -- -- QSharedPointer key; -- QSharedPointer kdf = QSharedPointer::create(true); -- -- QVariantMap publicCustomData; -- -- DatabaseData() -- : masterSeed(new PasswordKey()) -- , transformedDatabaseKey(new PasswordKey()) -- , challengeResponseKey(new PasswordKey()) -- { -- kdf->randomizeSeed(); -- } -- -- void clear() -- { -- filePath.clear(); -- -- masterSeed.reset(); -- transformedDatabaseKey.reset(); -- challengeResponseKey.reset(); -- -- key.reset(); -- kdf.reset(); -- -- publicCustomData.clear(); -- } -- }; -- -- void createRecycleBin(); -- -- bool writeDatabase(QIODevice* device, QString* error = nullptr); -- bool backupDatabase(const QString& filePath); -- bool restoreDatabase(const QString& filePath); -- bool performSave(const QString& filePath, QString* error, bool atomic, bool backup); -- -- QPointer const m_metadata; -- DatabaseData m_data; -- QPointer m_rootGroup; -- QList m_deletedObjects; -- QTimer m_modifiedTimer; -- QMutex m_saveMutex; -- QPointer m_fileWatcher; -- bool m_modified = false; -- bool m_emitModified; -- bool m_hasNonDataChange = false; -- QString m_keyError; -- -- QList m_commonUsernames; -- -- QUuid m_uuid; -- static QHash> s_uuidMap; --}; -- --#endif // KEEPASSX_DATABASE_H -diff -urNr keepassxc-2.6.4-orig/src/core/DatabaseIcons.cpp keepassxc-2.6.4-patched/src/core/DatabaseIcons.cpp ---- keepassxc-2.6.4-orig/src/core/DatabaseIcons.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/DatabaseIcons.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,120 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseIcons.h" -- --#include "core/Config.h" --#include "core/Global.h" --#include "core/Resources.h" --#include "gui/MainWindow.h" -- --#include --#include --#include --#include -- --DatabaseIcons* DatabaseIcons::m_instance(nullptr); -- --namespace --{ -- const QString iconDir = QStringLiteral(":/icons/database/"); -- QStringList iconList; -- -- const QString badgeDir = QStringLiteral(":/icons/badges/"); -- QStringList badgeList; --} // namespace -- --DatabaseIcons::DatabaseIcons() --{ -- iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name); -- badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name); -- -- // Set this early and once to ensure consistent icon size until app restart -- m_compactMode = config()->get(Config::GUI_CompactMode).toBool(); --} -- --DatabaseIcons* DatabaseIcons::instance() --{ -- if (!m_instance) { -- m_instance = new DatabaseIcons(); -- } -- -- return m_instance; --} -- --QPixmap DatabaseIcons::icon(int index, IconSize size) --{ -- if (index < 0 || index >= count()) { -- qWarning("DatabaseIcons::icon: invalid icon index %d", index); -- return {}; -- } -- -- auto cacheKey = QString::number(index); -- auto icon = m_iconCache.value(cacheKey); -- if (icon.isNull()) { -- icon.addFile(iconDir + iconList[index]); -- icon.addPixmap(icon.pixmap(64)); -- m_iconCache.insert(cacheKey, icon); -- } -- -- return icon.pixmap(iconSize(size)); --} -- --QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex) --{ -- const auto cacheKey = QStringLiteral("badgedicon-%1-%2").arg(basePixmap.cacheKey()).arg(badgeIndex); -- QPixmap pixmap = basePixmap; -- if (badgeIndex < 0 || badgeIndex >= badgeList.size()) { -- qWarning("DatabaseIcons: Out-of-range badge index given to applyBadge: %d", badgeIndex); -- } else if (!QPixmapCache::find(cacheKey, &pixmap)) { -- int baseSize = basePixmap.width(); -- int badgeSize = -- baseSize <= iconSize(IconSize::Default) * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5; -- QPoint badgePos(baseSize - badgeSize, baseSize - badgeSize); -- badgePos /= basePixmap.devicePixelRatio(); -- -- QImageReader reader(badgeDir + badgeList[badgeIndex]); -- reader.setScaledSize({badgeSize, badgeSize}); -- auto badge = QPixmap::fromImageReader(&reader); -- badge.setDevicePixelRatio(basePixmap.devicePixelRatio()); -- -- QPainter painter(&pixmap); -- painter.setCompositionMode(QPainter::CompositionMode_SourceOver); -- painter.drawPixmap(badgePos, badge); -- -- QPixmapCache::insert(cacheKey, pixmap); -- } -- -- return pixmap; --} -- --int DatabaseIcons::count() --{ -- return iconList.size(); --} -- --int DatabaseIcons::iconSize(IconSize size) --{ -- switch (size) { -- case Medium: -- return m_compactMode ? 26 : 30; -- case Large: -- return m_compactMode ? 30 : 36; -- default: -- return m_compactMode ? 16 : 22; -- } --} -diff -urNr keepassxc-2.6.4-orig/src/core/DatabaseIcons.h keepassxc-2.6.4-patched/src/core/DatabaseIcons.h ---- keepassxc-2.6.4-orig/src/core/DatabaseIcons.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/DatabaseIcons.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASEICONS_H --#define KEEPASSX_DATABASEICONS_H -- --#include "core/Global.h" --#include -- --class DatabaseIcons --{ --public: -- static DatabaseIcons* instance(); -- -- static constexpr int ExpiredIconIndex = 45; -- -- enum Badges -- { -- ShareActive = 0, -- ShareInactive, -- Expired -- }; -- -- QPixmap icon(int index, IconSize size = IconSize::Default); -- QPixmap applyBadge(const QPixmap& basePixmap, Badges badgeIndex); -- int count(); -- -- int iconSize(IconSize size); -- --private: -- DatabaseIcons(); -- -- static DatabaseIcons* m_instance; -- QHash m_iconCache; -- bool m_compactMode; -- -- Q_DISABLE_COPY(DatabaseIcons) --}; -- --inline DatabaseIcons* databaseIcons() --{ -- return DatabaseIcons::instance(); --} -- --#endif // KEEPASSX_DATABASEICONS_H -diff -urNr keepassxc-2.6.4-orig/src/core/Endian.h keepassxc-2.6.4-patched/src/core/Endian.h ---- keepassxc-2.6.4-orig/src/core/Endian.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Endian.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,75 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENDIAN_H --#define KEEPASSX_ENDIAN_H -- --#include --#include --#include --#include -- --namespace Endian --{ -- -- template SizedQInt bytesToSizedInt(const QByteArray& ba, QSysInfo::Endian byteOrder) -- { -- Q_ASSERT(ba.size() == sizeof(SizedQInt)); -- -- if (byteOrder == QSysInfo::LittleEndian) { -- return qFromLittleEndian(reinterpret_cast(ba.constData())); -- } -- return qFromBigEndian(reinterpret_cast(ba.constData())); -- } -- -- template SizedQInt readSizedInt(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) -- { -- QByteArray ba = device->read(sizeof(SizedQInt)); -- -- if (ba.size() != sizeof(SizedQInt)) { -- *ok = false; -- return 0; -- } -- *ok = true; -- return bytesToSizedInt(ba, byteOrder); -- } -- -- template QByteArray sizedIntToBytes(SizedQInt num, QSysInfo::Endian byteOrder) -- { -- QByteArray ba; -- ba.resize(sizeof(SizedQInt)); -- -- if (byteOrder == QSysInfo::LittleEndian) { -- qToLittleEndian(num, reinterpret_cast(ba.data())); -- } else { -- qToBigEndian(num, reinterpret_cast(ba.data())); -- } -- -- return ba; -- } -- -- template bool writeSizedInt(SizedQInt num, QIODevice* device, QSysInfo::Endian byteOrder) -- { -- QByteArray ba = sizedIntToBytes(num, byteOrder); -- qint64 bytesWritten = device->write(ba); -- return (bytesWritten == ba.size()); -- } -- --} // namespace Endian -- --#endif // KEEPASSX_ENDIAN_H -diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttachments.cpp keepassxc-2.6.4-patched/src/core/EntryAttachments.cpp ---- keepassxc-2.6.4-orig/src/core/EntryAttachments.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntryAttachments.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,163 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryAttachments.h" -- --#include "core/Global.h" -- --#include --#include -- --EntryAttachments::EntryAttachments(QObject* parent) -- : QObject(parent) --{ --} -- --QList EntryAttachments::keys() const --{ -- return m_attachments.keys(); --} -- --bool EntryAttachments::hasKey(const QString& key) const --{ -- return m_attachments.contains(key); --} -- --QSet EntryAttachments::values() const --{ -- return asConst(m_attachments).values().toSet(); --} -- --QByteArray EntryAttachments::value(const QString& key) const --{ -- return m_attachments.value(key); --} -- --void EntryAttachments::set(const QString& key, const QByteArray& value) --{ -- bool emitModified = false; -- bool addAttachment = !m_attachments.contains(key); -- -- if (addAttachment) { -- emit aboutToBeAdded(key); -- } -- -- if (addAttachment || m_attachments.value(key) != value) { -- m_attachments.insert(key, value); -- emitModified = true; -- } -- -- if (addAttachment) { -- emit added(key); -- } else { -- emit keyModified(key); -- } -- -- if (emitModified) { -- emit entryAttachmentsModified(); -- } --} -- --void EntryAttachments::remove(const QString& key) --{ -- if (!m_attachments.contains(key)) { -- Q_ASSERT_X(false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); -- return; -- } -- -- emit aboutToBeRemoved(key); -- -- m_attachments.remove(key); -- -- emit removed(key); -- emit entryAttachmentsModified(); --} -- --void EntryAttachments::remove(const QStringList& keys) --{ -- if (keys.isEmpty()) { -- return; -- } -- -- bool isModified = false; -- for (const QString& key : keys) { -- if (!m_attachments.contains(key)) { -- Q_ASSERT_X( -- false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); -- continue; -- } -- -- isModified = true; -- emit aboutToBeRemoved(key); -- m_attachments.remove(key); -- emit removed(key); -- } -- -- if (isModified) { -- emit entryAttachmentsModified(); -- } --} -- --bool EntryAttachments::isEmpty() const --{ -- return m_attachments.isEmpty(); --} -- --void EntryAttachments::clear() --{ -- if (m_attachments.isEmpty()) { -- return; -- } -- -- emit aboutToBeReset(); -- -- m_attachments.clear(); -- -- emit reset(); -- emit entryAttachmentsModified(); --} -- --void EntryAttachments::copyDataFrom(const EntryAttachments* other) --{ -- if (*this != *other) { -- emit aboutToBeReset(); -- -- m_attachments = other->m_attachments; -- -- emit reset(); -- emit entryAttachmentsModified(); -- } --} -- --bool EntryAttachments::operator==(const EntryAttachments& other) const --{ -- return m_attachments == other.m_attachments; --} -- --bool EntryAttachments::operator!=(const EntryAttachments& other) const --{ -- return m_attachments != other.m_attachments; --} -- --int EntryAttachments::attachmentsSize() const --{ -- int size = 0; -- for (auto it = m_attachments.constBegin(); it != m_attachments.constEnd(); ++it) { -- size += it.key().toUtf8().size() + it.value().size(); -- } -- return size; --} -diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttachments.h keepassxc-2.6.4-patched/src/core/EntryAttachments.h ---- keepassxc-2.6.4-orig/src/core/EntryAttachments.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntryAttachments.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYATTACHMENTS_H --#define KEEPASSX_ENTRYATTACHMENTS_H -- --#include --#include -- --class QStringList; -- --class EntryAttachments : public QObject --{ -- Q_OBJECT -- --public: -- explicit EntryAttachments(QObject* parent = nullptr); -- QList keys() const; -- bool hasKey(const QString& key) const; -- QSet values() const; -- QByteArray value(const QString& key) const; -- void set(const QString& key, const QByteArray& value); -- void remove(const QString& key); -- void remove(const QStringList& keys); -- bool isEmpty() const; -- void clear(); -- void copyDataFrom(const EntryAttachments* other); -- bool operator==(const EntryAttachments& other) const; -- bool operator!=(const EntryAttachments& other) const; -- int attachmentsSize() const; -- --signals: -- void entryAttachmentsModified(); -- void keyModified(const QString& key); -- void aboutToBeAdded(const QString& key); -- void added(const QString& key); -- void aboutToBeRemoved(const QString& key); -- void removed(const QString& key); -- void aboutToBeReset(); -- void reset(); -- --private: -- QMap m_attachments; --}; -- --#endif // KEEPASSX_ENTRYATTACHMENTS_H -diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttributes.cpp keepassxc-2.6.4-patched/src/core/EntryAttributes.cpp ---- keepassxc-2.6.4-orig/src/core/EntryAttributes.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntryAttributes.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,321 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryAttributes.h" -- --#include "core/Global.h" -- --const QString EntryAttributes::TitleKey = "Title"; --const QString EntryAttributes::UserNameKey = "UserName"; --const QString EntryAttributes::PasswordKey = "Password"; --const QString EntryAttributes::URLKey = "URL"; --const QString EntryAttributes::NotesKey = "Notes"; --const QStringList EntryAttributes::DefaultAttributes(QStringList() -- << TitleKey << UserNameKey << PasswordKey << URLKey << NotesKey); -- --const QString EntryAttributes::WantedFieldGroupName = "WantedField"; --const QString EntryAttributes::SearchInGroupName = "SearchIn"; --const QString EntryAttributes::SearchTextGroupName = "SearchText"; -- --const QString EntryAttributes::RememberCmdExecAttr = "_EXEC_CMD"; -- --EntryAttributes::EntryAttributes(QObject* parent) -- : QObject(parent) --{ -- clear(); --} -- --QList EntryAttributes::keys() const --{ -- return m_attributes.keys(); --} -- --bool EntryAttributes::hasKey(const QString& key) const --{ -- return m_attributes.contains(key); --} -- --QList EntryAttributes::customKeys() const --{ -- QList customKeys; -- const QList keyList = keys(); -- for (const QString& key : keyList) { -- if (!isDefaultAttribute(key)) { -- customKeys.append(key); -- } -- } -- return customKeys; --} -- --QString EntryAttributes::value(const QString& key) const --{ -- return m_attributes.value(key); --} -- --QList EntryAttributes::values(const QList& keys) const --{ -- QList values; -- for (const QString& key : keys) { -- values.append(m_attributes.value(key)); -- } -- return values; --} -- --bool EntryAttributes::contains(const QString& key) const --{ -- return m_attributes.contains(key); --} -- --bool EntryAttributes::containsValue(const QString& value) const --{ -- return asConst(m_attributes).values().contains(value); --} -- --bool EntryAttributes::isProtected(const QString& key) const --{ -- return m_protectedAttributes.contains(key); --} -- --bool EntryAttributes::isReference(const QString& key) const --{ -- if (!m_attributes.contains(key)) { -- Q_ASSERT(false); -- return false; -- } -- -- const QString data = value(key); -- return matchReference(data).hasMatch(); --} -- --void EntryAttributes::set(const QString& key, const QString& value, bool protect) --{ -- bool emitModified = false; -- -- bool addAttribute = !m_attributes.contains(key); -- bool changeValue = !addAttribute && (m_attributes.value(key) != value); -- bool defaultAttribute = isDefaultAttribute(key); -- -- if (addAttribute && !defaultAttribute) { -- emit aboutToBeAdded(key); -- } -- -- if (addAttribute || changeValue) { -- m_attributes.insert(key, value); -- emitModified = true; -- } -- -- if (protect) { -- if (!m_protectedAttributes.contains(key)) { -- emitModified = true; -- } -- m_protectedAttributes.insert(key); -- } else if (m_protectedAttributes.remove(key)) { -- emitModified = true; -- } -- -- if (emitModified) { -- emit entryAttributesModified(); -- } -- -- if (defaultAttribute && changeValue) { -- emit defaultKeyModified(); -- } else if (addAttribute) { -- emit added(key); -- } else if (emitModified) { -- emit customKeyModified(key); -- } --} -- --void EntryAttributes::remove(const QString& key) --{ -- Q_ASSERT(!isDefaultAttribute(key)); -- -- if (!m_attributes.contains(key)) { -- return; -- } -- -- emit aboutToBeRemoved(key); -- -- m_attributes.remove(key); -- m_protectedAttributes.remove(key); -- -- emit removed(key); -- emit entryAttributesModified(); --} -- --void EntryAttributes::rename(const QString& oldKey, const QString& newKey) --{ -- Q_ASSERT(!isDefaultAttribute(oldKey)); -- Q_ASSERT(!isDefaultAttribute(newKey)); -- -- if (!m_attributes.contains(oldKey)) { -- Q_ASSERT(false); -- return; -- } -- -- if (m_attributes.contains(newKey)) { -- Q_ASSERT(false); -- return; -- } -- -- QString data = value(oldKey); -- bool protect = isProtected(oldKey); -- -- emit aboutToRename(oldKey, newKey); -- -- m_attributes.remove(oldKey); -- m_attributes.insert(newKey, data); -- if (protect) { -- m_protectedAttributes.remove(oldKey); -- m_protectedAttributes.insert(newKey); -- } -- -- emit entryAttributesModified(); -- emit renamed(oldKey, newKey); --} -- --void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) --{ -- if (!areCustomKeysDifferent(other)) { -- return; -- } -- -- emit aboutToBeReset(); -- -- // remove all non-default keys -- const QList keyList = keys(); -- for (const QString& key : keyList) { -- if (!isDefaultAttribute(key)) { -- m_attributes.remove(key); -- m_protectedAttributes.remove(key); -- } -- } -- -- const QList otherKeyList = other->keys(); -- for (const QString& key : otherKeyList) { -- if (!isDefaultAttribute(key)) { -- m_attributes.insert(key, other->value(key)); -- if (other->isProtected(key)) { -- m_protectedAttributes.insert(key); -- } -- } -- } -- -- emit reset(); -- emit entryAttributesModified(); --} -- --bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) --{ -- // check if they are equal ignoring the order of the keys -- if (keys().toSet() != other->keys().toSet()) { -- return true; -- } -- -- const QList keyList = keys(); -- for (const QString& key : keyList) { -- if (isDefaultAttribute(key)) { -- continue; -- } -- -- if (isProtected(key) != other->isProtected(key) || value(key) != other->value(key)) { -- return true; -- } -- } -- -- return false; --} -- --void EntryAttributes::copyDataFrom(const EntryAttributes* other) --{ -- if (*this != *other) { -- emit aboutToBeReset(); -- -- m_attributes = other->m_attributes; -- m_protectedAttributes = other->m_protectedAttributes; -- -- emit reset(); -- emit entryAttributesModified(); -- } --} -- --QUuid EntryAttributes::referenceUuid(const QString& key) const --{ -- if (!m_attributes.contains(key)) { -- Q_ASSERT(false); -- return {}; -- } -- -- auto match = matchReference(value(key)); -- if (match.hasMatch()) { -- const QString uuid = match.captured("SearchText"); -- if (!uuid.isEmpty()) { -- return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); -- } -- } -- -- return {}; --} -- --bool EntryAttributes::operator==(const EntryAttributes& other) const --{ -- return (m_attributes == other.m_attributes && m_protectedAttributes == other.m_protectedAttributes); --} -- --bool EntryAttributes::operator!=(const EntryAttributes& other) const --{ -- return (m_attributes != other.m_attributes || m_protectedAttributes != other.m_protectedAttributes); --} -- --QRegularExpressionMatch EntryAttributes::matchReference(const QString& text) --{ -- static QRegularExpression referenceRegExp( -- "\\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\\}", -- QRegularExpression::CaseInsensitiveOption); -- -- return referenceRegExp.match(text); --} -- --void EntryAttributes::clear() --{ -- emit aboutToBeReset(); -- -- m_attributes.clear(); -- m_protectedAttributes.clear(); -- -- for (const QString& key : DefaultAttributes) { -- m_attributes.insert(key, ""); -- } -- -- emit reset(); -- emit entryAttributesModified(); --} -- --int EntryAttributes::attributesSize() const --{ -- int size = 0; -- for (auto it = m_attributes.constBegin(); it != m_attributes.constEnd(); ++it) { -- size += it.key().toUtf8().size() + it.value().toUtf8().size(); -- } -- return size; --} -- --bool EntryAttributes::isDefaultAttribute(const QString& key) --{ -- return DefaultAttributes.contains(key); --} -diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttributes.h keepassxc-2.6.4-patched/src/core/EntryAttributes.h ---- keepassxc-2.6.4-orig/src/core/EntryAttributes.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntryAttributes.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,89 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYATTRIBUTES_H --#define KEEPASSX_ENTRYATTRIBUTES_H -- --#include --#include --#include --#include --#include --#include -- --class EntryAttributes : public QObject --{ -- Q_OBJECT -- --public: -- explicit EntryAttributes(QObject* parent = nullptr); -- QList keys() const; -- bool hasKey(const QString& key) const; -- QList customKeys() const; -- QString value(const QString& key) const; -- QList values(const QList& keys) const; -- bool contains(const QString& key) const; -- bool containsValue(const QString& value) const; -- bool isProtected(const QString& key) const; -- bool isReference(const QString& key) const; -- void set(const QString& key, const QString& value, bool protect = false); -- void remove(const QString& key); -- void rename(const QString& oldKey, const QString& newKey); -- void copyCustomKeysFrom(const EntryAttributes* other); -- bool areCustomKeysDifferent(const EntryAttributes* other); -- void clear(); -- int attributesSize() const; -- void copyDataFrom(const EntryAttributes* other); -- QUuid referenceUuid(const QString& key) const; -- bool operator==(const EntryAttributes& other) const; -- bool operator!=(const EntryAttributes& other) const; -- -- static QRegularExpressionMatch matchReference(const QString& text); -- -- static const QString TitleKey; -- static const QString UserNameKey; -- static const QString PasswordKey; -- static const QString URLKey; -- static const QString NotesKey; -- static const QStringList DefaultAttributes; -- static const QString RememberCmdExecAttr; -- static bool isDefaultAttribute(const QString& key); -- -- static const QString WantedFieldGroupName; -- static const QString SearchInGroupName; -- static const QString SearchTextGroupName; -- --signals: -- void entryAttributesModified(); -- void defaultKeyModified(); -- void customKeyModified(const QString& key); -- void aboutToBeAdded(const QString& key); -- void added(const QString& key); -- void aboutToBeRemoved(const QString& key); -- void removed(const QString& key); -- void aboutToRename(const QString& oldKey, const QString& newKey); -- void renamed(const QString& oldKey, const QString& newKey); -- void aboutToBeReset(); -- void reset(); -- --private: -- QMap m_attributes; -- QSet m_protectedAttributes; --}; -- --#endif // KEEPASSX_ENTRYATTRIBUTES_H -diff -urNr keepassxc-2.6.4-orig/src/core/Entry.cpp keepassxc-2.6.4-patched/src/core/Entry.cpp ---- keepassxc-2.6.4-orig/src/core/Entry.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Entry.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1375 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ --#include "Entry.h" -- --#include "config-keepassx.h" -- --#include "core/Clock.h" --#include "core/Database.h" --#include "core/DatabaseIcons.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "totp/totp.h" -- --#include --#include --#include -- --const int Entry::DefaultIconNumber = 0; --const int Entry::ResolveMaximumDepth = 10; --const QString Entry::AutoTypeSequenceUsername = "{USERNAME}{ENTER}"; --const QString Entry::AutoTypeSequencePassword = "{PASSWORD}{ENTER}"; -- --Entry::Entry() -- : m_attributes(new EntryAttributes(this)) -- , m_attachments(new EntryAttachments(this)) -- , m_autoTypeAssociations(new AutoTypeAssociations(this)) -- , m_customData(new CustomData(this)) -- , m_modifiedSinceBegin(false) -- , m_updateTimeinfo(true) --{ -- m_data.iconNumber = DefaultIconNumber; -- m_data.autoTypeEnabled = true; -- m_data.autoTypeObfuscation = 0; -- -- connect(m_attributes, SIGNAL(entryAttributesModified()), SLOT(updateTotp())); -- connect(m_attributes, SIGNAL(entryAttributesModified()), this, SIGNAL(entryModified())); -- connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged())); -- connect(m_attachments, SIGNAL(entryAttachmentsModified()), this, SIGNAL(entryModified())); -- connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(entryModified())); -- connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(entryModified())); -- -- connect(this, SIGNAL(entryModified()), SLOT(updateTimeinfo())); -- connect(this, SIGNAL(entryModified()), SLOT(updateModifiedSinceBegin())); --} -- --Entry::~Entry() --{ -- setUpdateTimeinfo(false); -- if (m_group) { -- m_group->removeEntry(this); -- -- if (m_group->database()) { -- m_group->database()->addDeletedObject(m_uuid); -- } -- } -- -- qDeleteAll(m_history); --} -- --template inline bool Entry::set(T& property, const T& value) --{ -- if (property != value) { -- property = value; -- emit entryModified(); -- return true; -- } -- return false; --} -- --void Entry::updateTimeinfo() --{ -- if (m_updateTimeinfo) { -- m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); -- m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); -- } --} -- --bool Entry::canUpdateTimeinfo() const --{ -- return m_updateTimeinfo; --} -- --void Entry::setUpdateTimeinfo(bool value) --{ -- m_updateTimeinfo = value; --} -- --QString Entry::buildReference(const QUuid& uuid, const QString& field) --{ -- Q_ASSERT(EntryAttributes::DefaultAttributes.count(field) > 0); -- -- QString uuidStr = Tools::uuidToHex(uuid).toUpper(); -- QString shortField; -- -- if (field == EntryAttributes::TitleKey) { -- shortField = "T"; -- } else if (field == EntryAttributes::UserNameKey) { -- shortField = "U"; -- } else if (field == EntryAttributes::PasswordKey) { -- shortField = "P"; -- } else if (field == EntryAttributes::URLKey) { -- shortField = "A"; -- } else if (field == EntryAttributes::NotesKey) { -- shortField = "N"; -- } -- -- if (shortField.isEmpty()) { -- return {}; -- } -- -- return QString("{REF:%1@I:%2}").arg(shortField, uuidStr); --} -- --EntryReferenceType Entry::referenceType(const QString& referenceStr) --{ -- const QString referenceLowerStr = referenceStr.toLower(); -- EntryReferenceType result = EntryReferenceType::Unknown; -- if (referenceLowerStr == QLatin1String("t")) { -- result = EntryReferenceType::Title; -- } else if (referenceLowerStr == QLatin1String("u")) { -- result = EntryReferenceType::UserName; -- } else if (referenceLowerStr == QLatin1String("p")) { -- result = EntryReferenceType::Password; -- } else if (referenceLowerStr == QLatin1String("a")) { -- result = EntryReferenceType::Url; -- } else if (referenceLowerStr == QLatin1String("n")) { -- result = EntryReferenceType::Notes; -- } else if (referenceLowerStr == QLatin1String("i")) { -- result = EntryReferenceType::QUuid; -- } else if (referenceLowerStr == QLatin1String("o")) { -- result = EntryReferenceType::CustomAttributes; -- } -- -- return result; --} -- --const QUuid& Entry::uuid() const --{ -- return m_uuid; --} -- --const QString Entry::uuidToHex() const --{ -- return Tools::uuidToHex(m_uuid); --} -- --QImage Entry::icon() const --{ -- if (m_data.customIcon.isNull()) { -- return databaseIcons()->icon(m_data.iconNumber).toImage(); -- } else { -- Q_ASSERT(database()); -- -- if (database()) { -- return database()->metadata()->customIcon(m_data.customIcon); -- } else { -- return QImage(); -- } -- } --} -- --QPixmap Entry::iconPixmap(IconSize size) const --{ -- QPixmap icon(size, size); -- if (m_data.customIcon.isNull()) { -- icon = databaseIcons()->icon(m_data.iconNumber, size); -- } else { -- Q_ASSERT(database()); -- if (database()) { -- icon = database()->metadata()->customIconPixmap(m_data.customIcon, size); -- } -- } -- -- if (isExpired()) { -- icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); -- } -- -- return icon; --} -- --int Entry::iconNumber() const --{ -- return m_data.iconNumber; --} -- --const QUuid& Entry::iconUuid() const --{ -- return m_data.customIcon; --} -- --QString Entry::foregroundColor() const --{ -- return m_data.foregroundColor; --} -- --QString Entry::backgroundColor() const --{ -- return m_data.backgroundColor; --} -- --QString Entry::overrideUrl() const --{ -- return m_data.overrideUrl; --} -- --QString Entry::tags() const --{ -- return m_data.tags; --} -- --const TimeInfo& Entry::timeInfo() const --{ -- return m_data.timeInfo; --} -- --bool Entry::autoTypeEnabled() const --{ -- return m_data.autoTypeEnabled; --} -- --int Entry::autoTypeObfuscation() const --{ -- return m_data.autoTypeObfuscation; --} -- --QString Entry::defaultAutoTypeSequence() const --{ -- return m_data.defaultAutoTypeSequence; --} -- --/** -- * Determine the effective sequence that will be injected -- * This function return an empty string if a parent group has autotype disabled or if the entry has no parent -- */ --QString Entry::effectiveAutoTypeSequence() const --{ -- if (!autoTypeEnabled()) { -- return {}; -- } -- -- const Group* parent = group(); -- if (!parent) { -- return {}; -- } -- -- QString sequence = parent->effectiveAutoTypeSequence(); -- if (sequence.isEmpty()) { -- return {}; -- } -- -- if (!m_data.defaultAutoTypeSequence.isEmpty()) { -- return m_data.defaultAutoTypeSequence; -- } -- -- if (sequence == Group::RootAutoTypeSequence && (!username().isEmpty() || !password().isEmpty())) { -- if (username().isEmpty()) { -- return AutoTypeSequencePassword; -- } else if (password().isEmpty()) { -- return AutoTypeSequenceUsername; -- } -- return Group::RootAutoTypeSequence; -- } -- -- return sequence; --} -- --AutoTypeAssociations* Entry::autoTypeAssociations() --{ -- return m_autoTypeAssociations; --} -- --const AutoTypeAssociations* Entry::autoTypeAssociations() const --{ -- return m_autoTypeAssociations; --} -- --QString Entry::title() const --{ -- return m_attributes->value(EntryAttributes::TitleKey); --} -- --QString Entry::url() const --{ -- return m_attributes->value(EntryAttributes::URLKey); --} -- --QString Entry::webUrl() const --{ -- QString url = resolveMultiplePlaceholders(m_attributes->value(EntryAttributes::URLKey)); -- return resolveUrl(url); --} -- --QString Entry::displayUrl() const --{ -- QString url = maskPasswordPlaceholders(m_attributes->value(EntryAttributes::URLKey)); -- return resolveMultiplePlaceholders(url); --} -- --QString Entry::username() const --{ -- return m_attributes->value(EntryAttributes::UserNameKey); --} -- --QString Entry::password() const --{ -- return m_attributes->value(EntryAttributes::PasswordKey); --} -- --QString Entry::notes() const --{ -- return m_attributes->value(EntryAttributes::NotesKey); --} -- --QString Entry::attribute(const QString& key) const --{ -- return m_attributes->value(key); --} -- --int Entry::size() const --{ -- int size = 0; -- const QRegularExpression delimiter(",|:|;"); -- -- size += this->attributes()->attributesSize(); -- size += this->autoTypeAssociations()->associationsSize(); -- size += this->attachments()->attachmentsSize(); -- size += this->customData()->dataSize(); -- const QStringList tags = this->tags().split(delimiter, QString::SkipEmptyParts); -- for (const QString& tag : tags) { -- size += tag.toUtf8().size(); -- } -- -- return size; --} -- --bool Entry::isExpired() const --{ -- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); --} -- --bool Entry::isRecycled() const --{ -- const Database* db = database(); -- if (!db) { -- return false; -- } -- -- return m_group == db->metadata()->recycleBin() || m_group->isRecycled(); --} -- --bool Entry::isAttributeReference(const QString& key) const --{ -- return m_attributes->isReference(key); --} -- --bool Entry::isAttributeReferenceOf(const QString& key, const QUuid& uuid) const --{ -- if (!m_attributes->isReference(key)) { -- return false; -- } -- -- return m_attributes->value(key).contains(Tools::uuidToHex(uuid), Qt::CaseInsensitive); --} -- --bool Entry::hasReferences() const --{ -- const QList keyList = EntryAttributes::DefaultAttributes; -- for (const QString& key : keyList) { -- if (m_attributes->isReference(key)) { -- return true; -- } -- } -- return false; --} -- --bool Entry::hasReferencesTo(const QUuid& uuid) const --{ -- const QList keyList = EntryAttributes::DefaultAttributes; -- for (const QString& key : keyList) { -- if (isAttributeReferenceOf(key, uuid)) { -- return true; -- } -- } -- return false; --} -- --void Entry::replaceReferencesWithValues(const Entry* other) --{ -- for (const QString& key : EntryAttributes::DefaultAttributes) { -- if (isAttributeReferenceOf(key, other->uuid())) { -- setDefaultAttribute(key, other->attribute(key)); -- } -- } --} -- --EntryAttributes* Entry::attributes() --{ -- return m_attributes; --} -- --const EntryAttributes* Entry::attributes() const --{ -- return m_attributes; --} -- --EntryAttachments* Entry::attachments() --{ -- return m_attachments; --} -- --const EntryAttachments* Entry::attachments() const --{ -- return m_attachments; --} -- --CustomData* Entry::customData() --{ -- return m_customData; --} -- --const CustomData* Entry::customData() const --{ -- return m_customData; --} -- --bool Entry::hasTotp() const --{ -- return !m_data.totpSettings.isNull(); --} -- --QString Entry::totp() const --{ -- if (hasTotp()) { -- return Totp::generateTotp(m_data.totpSettings); -- } -- return {}; --} -- --void Entry::setTotp(QSharedPointer settings) --{ -- beginUpdate(); -- m_attributes->remove(Totp::ATTRIBUTE_OTP); -- m_attributes->remove(Totp::ATTRIBUTE_SEED); -- m_attributes->remove(Totp::ATTRIBUTE_SETTINGS); -- -- if (settings->key.isEmpty()) { -- m_data.totpSettings.reset(); -- } else { -- m_data.totpSettings = std::move(settings); -- auto text = Totp::writeSettings( -- m_data.totpSettings, resolveMultiplePlaceholders(title()), resolveMultiplePlaceholders(username())); -- if (m_data.totpSettings->format != Totp::StorageFormat::LEGACY) { -- m_attributes->set(Totp::ATTRIBUTE_OTP, text, true); -- } else { -- m_attributes->set(Totp::ATTRIBUTE_SEED, m_data.totpSettings->key, true); -- m_attributes->set(Totp::ATTRIBUTE_SETTINGS, text); -- } -- } -- endUpdate(); --} -- --void Entry::updateTotp() --{ -- if (m_attributes->contains(Totp::ATTRIBUTE_SETTINGS)) { -- m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_SETTINGS), -- m_attributes->value(Totp::ATTRIBUTE_SEED)); -- } else if (m_attributes->contains(Totp::ATTRIBUTE_OTP)) { -- m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_OTP)); -- } else { -- m_data.totpSettings.reset(); -- } --} -- --QSharedPointer Entry::totpSettings() const --{ -- return m_data.totpSettings; --} -- --QString Entry::totpSettingsString() const --{ -- if (m_data.totpSettings) { -- return Totp::writeSettings( -- m_data.totpSettings, resolveMultiplePlaceholders(title()), resolveMultiplePlaceholders(username()), true); -- } -- return {}; --} -- --void Entry::setUuid(const QUuid& uuid) --{ -- Q_ASSERT(!uuid.isNull()); -- set(m_uuid, uuid); --} -- --void Entry::setIcon(int iconNumber) --{ -- Q_ASSERT(iconNumber >= 0); -- -- if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { -- m_data.iconNumber = iconNumber; -- m_data.customIcon = QUuid(); -- -- emit entryModified(); -- emitDataChanged(); -- } --} -- --void Entry::setIcon(const QUuid& uuid) --{ -- Q_ASSERT(!uuid.isNull()); -- -- if (m_data.customIcon != uuid) { -- m_data.customIcon = uuid; -- m_data.iconNumber = 0; -- -- emit entryModified(); -- emitDataChanged(); -- } --} -- --void Entry::setForegroundColor(const QString& colorStr) --{ -- set(m_data.foregroundColor, colorStr); --} -- --void Entry::setBackgroundColor(const QString& colorStr) --{ -- set(m_data.backgroundColor, colorStr); --} -- --void Entry::setOverrideUrl(const QString& url) --{ -- set(m_data.overrideUrl, url); --} -- --void Entry::setTags(const QString& tags) --{ -- set(m_data.tags, tags); --} -- --void Entry::setTimeInfo(const TimeInfo& timeInfo) --{ -- m_data.timeInfo = timeInfo; --} -- --void Entry::setAutoTypeEnabled(bool enable) --{ -- set(m_data.autoTypeEnabled, enable); --} -- --void Entry::setAutoTypeObfuscation(int obfuscation) --{ -- set(m_data.autoTypeObfuscation, obfuscation); --} -- --void Entry::setDefaultAutoTypeSequence(const QString& sequence) --{ -- set(m_data.defaultAutoTypeSequence, sequence); --} -- --void Entry::setTitle(const QString& title) --{ -- m_attributes->set(EntryAttributes::TitleKey, title, m_attributes->isProtected(EntryAttributes::TitleKey)); --} -- --void Entry::setUrl(const QString& url) --{ -- bool remove = url != m_attributes->value(EntryAttributes::URLKey) -- && (m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "1" -- || m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "0"); -- if (remove) { -- m_attributes->remove(EntryAttributes::RememberCmdExecAttr); -- } -- m_attributes->set(EntryAttributes::URLKey, url, m_attributes->isProtected(EntryAttributes::URLKey)); --} -- --void Entry::setUsername(const QString& username) --{ -- m_attributes->set(EntryAttributes::UserNameKey, username, m_attributes->isProtected(EntryAttributes::UserNameKey)); --} -- --void Entry::setPassword(const QString& password) --{ -- m_attributes->set(EntryAttributes::PasswordKey, password, m_attributes->isProtected(EntryAttributes::PasswordKey)); --} -- --void Entry::setNotes(const QString& notes) --{ -- m_attributes->set(EntryAttributes::NotesKey, notes, m_attributes->isProtected(EntryAttributes::NotesKey)); --} -- --void Entry::setDefaultAttribute(const QString& attribute, const QString& value) --{ -- Q_ASSERT(EntryAttributes::isDefaultAttribute(attribute)); -- -- if (!EntryAttributes::isDefaultAttribute(attribute)) { -- return; -- } -- -- m_attributes->set(attribute, value, m_attributes->isProtected(attribute)); --} -- --void Entry::setExpires(const bool& value) --{ -- if (m_data.timeInfo.expires() != value) { -- m_data.timeInfo.setExpires(value); -- emit entryModified(); -- } --} -- --void Entry::setExpiryTime(const QDateTime& dateTime) --{ -- if (m_data.timeInfo.expiryTime() != dateTime) { -- m_data.timeInfo.setExpiryTime(dateTime); -- emit entryModified(); -- } --} -- --QList Entry::historyItems() --{ -- return m_history; --} -- --const QList& Entry::historyItems() const --{ -- return m_history; --} -- --void Entry::addHistoryItem(Entry* entry) --{ -- Q_ASSERT(!entry->parent()); -- -- m_history.append(entry); -- emit entryModified(); --} -- --void Entry::removeHistoryItems(const QList& historyEntries) --{ -- if (historyEntries.isEmpty()) { -- return; -- } -- -- for (Entry* entry : historyEntries) { -- Q_ASSERT(!entry->parent()); -- Q_ASSERT(entry->uuid().isNull() || entry->uuid() == uuid()); -- Q_ASSERT(m_history.contains(entry)); -- -- m_history.removeOne(entry); -- delete entry; -- } -- -- emit entryModified(); --} -- --void Entry::truncateHistory() --{ -- const Database* db = database(); -- -- if (!db) { -- return; -- } -- -- bool changed = false; -- int histMaxItems = db->metadata()->historyMaxItems(); -- if (histMaxItems > -1) { -- int historyCount = 0; -- QMutableListIterator i(m_history); -- i.toBack(); -- while (i.hasPrevious()) { -- historyCount++; -- Entry* entry = i.previous(); -- if (historyCount > histMaxItems) { -- delete entry; -- i.remove(); -- changed = true; -- } -- } -- } -- -- int histMaxSize = db->metadata()->historyMaxSize(); -- if (histMaxSize > -1) { -- int size = 0; -- QSet foundAttachments = attachments()->values(); -- -- QMutableListIterator i(m_history); -- i.toBack(); -- while (i.hasPrevious()) { -- Entry* historyItem = i.previous(); -- -- // don't calculate size if it's already above the maximum -- if (size <= histMaxSize) { -- size += historyItem->size(); -- foundAttachments += historyItem->attachments()->values(); -- } -- -- if (size > histMaxSize) { -- delete historyItem; -- i.remove(); -- changed = true; -- } -- } -- } -- -- if (changed) { -- emit entryModified(); -- } --} -- --bool Entry::equals(const Entry* other, CompareItemOptions options) const --{ -- if (!other) { -- return false; -- } -- if (m_uuid != other->uuid()) { -- return false; -- } -- if (!m_data.equals(other->m_data, options)) { -- return false; -- } -- if (*m_customData != *other->m_customData) { -- return false; -- } -- if (*m_attributes != *other->m_attributes) { -- return false; -- } -- if (*m_attachments != *other->m_attachments) { -- return false; -- } -- if (*m_autoTypeAssociations != *other->m_autoTypeAssociations) { -- return false; -- } -- if (!options.testFlag(CompareItemIgnoreHistory)) { -- if (m_history.count() != other->m_history.count()) { -- return false; -- } -- for (int i = 0; i < m_history.count(); ++i) { -- if (!m_history[i]->equals(other->m_history[i], options)) { -- return false; -- } -- } -- } -- return true; --} -- --Entry* Entry::clone(CloneFlags flags) const --{ -- Entry* entry = new Entry(); -- entry->setUpdateTimeinfo(false); -- if (flags & CloneNewUuid) { -- entry->m_uuid = QUuid::createUuid(); -- } else { -- entry->m_uuid = m_uuid; -- } -- entry->m_data = m_data; -- entry->m_customData->copyDataFrom(m_customData); -- entry->m_attributes->copyDataFrom(m_attributes); -- entry->m_attachments->copyDataFrom(m_attachments); -- -- if (flags & CloneUserAsRef) { -- entry->m_attributes->set(EntryAttributes::UserNameKey, -- buildReference(uuid(), EntryAttributes::UserNameKey), -- m_attributes->isProtected(EntryAttributes::UserNameKey)); -- } -- -- if (flags & ClonePassAsRef) { -- entry->m_attributes->set(EntryAttributes::PasswordKey, -- buildReference(uuid(), EntryAttributes::PasswordKey), -- m_attributes->isProtected(EntryAttributes::PasswordKey)); -- } -- -- entry->m_autoTypeAssociations->copyDataFrom(m_autoTypeAssociations); -- if (flags & CloneIncludeHistory) { -- for (Entry* historyItem : m_history) { -- Entry* historyItemClone = -- historyItem->clone(flags & ~CloneIncludeHistory & ~CloneNewUuid & ~CloneResetTimeInfo); -- historyItemClone->setUpdateTimeinfo(false); -- historyItemClone->setUuid(entry->uuid()); -- historyItemClone->setUpdateTimeinfo(true); -- entry->addHistoryItem(historyItemClone); -- } -- } -- -- if (flags & CloneResetTimeInfo) { -- QDateTime now = Clock::currentDateTimeUtc(); -- entry->m_data.timeInfo.setCreationTime(now); -- entry->m_data.timeInfo.setLastModificationTime(now); -- entry->m_data.timeInfo.setLastAccessTime(now); -- entry->m_data.timeInfo.setLocationChanged(now); -- } -- -- if (flags & CloneRenameTitle) { -- entry->setTitle(tr("%1 - Clone").arg(entry->title())); -- } -- -- entry->setUpdateTimeinfo(true); -- -- return entry; --} -- --void Entry::copyDataFrom(const Entry* other) --{ -- setUpdateTimeinfo(false); -- m_data = other->m_data; -- m_customData->copyDataFrom(other->m_customData); -- m_attributes->copyDataFrom(other->m_attributes); -- m_attachments->copyDataFrom(other->m_attachments); -- m_autoTypeAssociations->copyDataFrom(other->m_autoTypeAssociations); -- setUpdateTimeinfo(true); --} -- --void Entry::beginUpdate() --{ -- Q_ASSERT(m_tmpHistoryItem.isNull()); -- -- m_tmpHistoryItem.reset(new Entry()); -- m_tmpHistoryItem->setUpdateTimeinfo(false); -- m_tmpHistoryItem->m_uuid = m_uuid; -- m_tmpHistoryItem->m_data = m_data; -- m_tmpHistoryItem->m_attributes->copyDataFrom(m_attributes); -- m_tmpHistoryItem->m_attachments->copyDataFrom(m_attachments); -- m_tmpHistoryItem->m_autoTypeAssociations->copyDataFrom(m_autoTypeAssociations); -- -- m_modifiedSinceBegin = false; --} -- --bool Entry::endUpdate() --{ -- Q_ASSERT(!m_tmpHistoryItem.isNull()); -- if (m_modifiedSinceBegin) { -- m_tmpHistoryItem->setUpdateTimeinfo(true); -- addHistoryItem(m_tmpHistoryItem.take()); -- truncateHistory(); -- } -- -- m_tmpHistoryItem.reset(); -- -- return m_modifiedSinceBegin; --} -- --void Entry::updateModifiedSinceBegin() --{ -- m_modifiedSinceBegin = true; --} -- --QString Entry::resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const --{ -- if (maxDepth <= 0) { -- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); -- return str; -- } -- -- QString result = str; -- QRegExp placeholderRegEx("(\\{[^\\}]+\\})", Qt::CaseInsensitive, QRegExp::RegExp2); -- placeholderRegEx.setMinimal(true); -- int pos = 0; -- while ((pos = placeholderRegEx.indexIn(str, pos)) != -1) { -- const QString found = placeholderRegEx.cap(1); -- result.replace(found, resolvePlaceholderRecursive(found, maxDepth - 1)); -- pos += placeholderRegEx.matchedLength(); -- } -- -- if (result != str) { -- result = resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); -- } -- -- return result; --} -- --QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const --{ -- if (maxDepth <= 0) { -- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); -- return placeholder; -- } -- -- const PlaceholderType typeOfPlaceholder = placeholderType(placeholder); -- switch (typeOfPlaceholder) { -- case PlaceholderType::NotPlaceholder: -- case PlaceholderType::Unknown: -- return resolveMultiplePlaceholdersRecursive(placeholder, maxDepth - 1); -- case PlaceholderType::Title: -- if (placeholderType(title()) == PlaceholderType::Title) { -- return title(); -- } -- return resolveMultiplePlaceholdersRecursive(title(), maxDepth - 1); -- case PlaceholderType::UserName: -- if (placeholderType(username()) == PlaceholderType::UserName) { -- return username(); -- } -- return resolveMultiplePlaceholdersRecursive(username(), maxDepth - 1); -- case PlaceholderType::Password: -- if (placeholderType(password()) == PlaceholderType::Password) { -- return password(); -- } -- return resolveMultiplePlaceholdersRecursive(password(), maxDepth - 1); -- case PlaceholderType::Notes: -- if (placeholderType(notes()) == PlaceholderType::Notes) { -- return notes(); -- } -- return resolveMultiplePlaceholdersRecursive(notes(), maxDepth - 1); -- case PlaceholderType::Url: -- if (placeholderType(url()) == PlaceholderType::Url) { -- return url(); -- } -- return resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); -- case PlaceholderType::DbDir: { -- QFileInfo fileInfo(database()->filePath()); -- return fileInfo.absoluteDir().absolutePath(); -- } -- case PlaceholderType::UrlWithoutScheme: -- case PlaceholderType::UrlScheme: -- case PlaceholderType::UrlHost: -- case PlaceholderType::UrlPort: -- case PlaceholderType::UrlPath: -- case PlaceholderType::UrlQuery: -- case PlaceholderType::UrlFragment: -- case PlaceholderType::UrlUserInfo: -- case PlaceholderType::UrlUserName: -- case PlaceholderType::UrlPassword: { -- const QString strUrl = resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); -- return resolveUrlPlaceholder(strUrl, typeOfPlaceholder); -- } -- case PlaceholderType::Totp: -- // totp can't have placeholder inside -- return totp(); -- case PlaceholderType::CustomAttribute: { -- const QString key = placeholder.mid(3, placeholder.length() - 4); // {S:attr} => mid(3, len - 4) -- return attributes()->hasKey(key) ? attributes()->value(key) : QString(); -- } -- case PlaceholderType::Reference: -- return resolveReferencePlaceholderRecursive(placeholder, maxDepth); -- case PlaceholderType::DateTimeSimple: -- case PlaceholderType::DateTimeYear: -- case PlaceholderType::DateTimeMonth: -- case PlaceholderType::DateTimeDay: -- case PlaceholderType::DateTimeHour: -- case PlaceholderType::DateTimeMinute: -- case PlaceholderType::DateTimeSecond: -- case PlaceholderType::DateTimeUtcSimple: -- case PlaceholderType::DateTimeUtcYear: -- case PlaceholderType::DateTimeUtcMonth: -- case PlaceholderType::DateTimeUtcDay: -- case PlaceholderType::DateTimeUtcHour: -- case PlaceholderType::DateTimeUtcMinute: -- case PlaceholderType::DateTimeUtcSecond: -- return resolveMultiplePlaceholdersRecursive(resolveDateTimePlaceholder(typeOfPlaceholder), maxDepth - 1); -- } -- -- return placeholder; --} -- --QString Entry::resolveDateTimePlaceholder(Entry::PlaceholderType placeholderType) const --{ -- QDateTime time = Clock::currentDateTime(); -- QDateTime time_utc = Clock::currentDateTimeUtc(); -- QString date_formatted{}; -- -- switch (placeholderType) { -- case PlaceholderType::DateTimeSimple: -- date_formatted = time.toString("yyyyMMddhhmmss"); -- break; -- case PlaceholderType::DateTimeYear: -- date_formatted = time.toString("yyyy"); -- break; -- case PlaceholderType::DateTimeMonth: -- date_formatted = time.toString("MM"); -- break; -- case PlaceholderType::DateTimeDay: -- date_formatted = time.toString("dd"); -- break; -- case PlaceholderType::DateTimeHour: -- date_formatted = time.toString("hh"); -- break; -- case PlaceholderType::DateTimeMinute: -- date_formatted = time.toString("mm"); -- break; -- case PlaceholderType::DateTimeSecond: -- date_formatted = time.toString("ss"); -- break; -- case PlaceholderType::DateTimeUtcSimple: -- date_formatted = time_utc.toString("yyyyMMddhhmmss"); -- break; -- case PlaceholderType::DateTimeUtcYear: -- date_formatted = time_utc.toString("yyyy"); -- break; -- case PlaceholderType::DateTimeUtcMonth: -- date_formatted = time_utc.toString("MM"); -- break; -- case PlaceholderType::DateTimeUtcDay: -- date_formatted = time_utc.toString("dd"); -- break; -- case PlaceholderType::DateTimeUtcHour: -- date_formatted = time_utc.toString("hh"); -- break; -- case PlaceholderType::DateTimeUtcMinute: -- date_formatted = time_utc.toString("mm"); -- break; -- case PlaceholderType::DateTimeUtcSecond: -- date_formatted = time_utc.toString("ss"); -- break; -- default: { -- Q_ASSERT_X(false, "Entry::resolveDateTimePlaceholder", "Bad DateTime placeholder type"); -- break; -- } -- } -- -- return date_formatted; --} -- --QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const --{ -- if (maxDepth <= 0) { -- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); -- return placeholder; -- } -- -- // resolving references in format: {REF:@:} -- // using format from http://keepass.info/help/base/fieldrefs.html at the time of writing -- -- QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder); -- if (!match.hasMatch()) { -- return placeholder; -- } -- -- QString result; -- const QString searchIn = match.captured(EntryAttributes::SearchInGroupName); -- const QString searchText = match.captured(EntryAttributes::SearchTextGroupName); -- -- const EntryReferenceType searchInType = Entry::referenceType(searchIn); -- -- Q_ASSERT(m_group); -- Q_ASSERT(m_group->database()); -- const Entry* refEntry = m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); -- -- if (refEntry) { -- const QString wantedField = match.captured(EntryAttributes::WantedFieldGroupName); -- result = refEntry->referenceFieldValue(Entry::referenceType(wantedField)); -- -- // Referencing fields of other entries only works with standard fields, not with custom user strings. -- // If you want to reference a custom user string, you need to place a redirection in a standard field -- // of the entry with the custom string, using {S:}, and reference the standard field. -- result = refEntry->resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); -- } -- -- return result; --} -- --QString Entry::referenceFieldValue(EntryReferenceType referenceType) const --{ -- switch (referenceType) { -- case EntryReferenceType::Title: -- return title(); -- case EntryReferenceType::UserName: -- return username(); -- case EntryReferenceType::Password: -- return password(); -- case EntryReferenceType::Url: -- return url(); -- case EntryReferenceType::Notes: -- return notes(); -- case EntryReferenceType::QUuid: -- return uuidToHex(); -- default: -- break; -- } -- return QString(); --} -- --void Entry::moveUp() --{ -- if (m_group) { -- m_group->moveEntryUp(this); -- } --} -- --void Entry::moveDown() --{ -- if (m_group) { -- m_group->moveEntryDown(this); -- } --} -- --Group* Entry::group() --{ -- return m_group; --} -- --const Group* Entry::group() const --{ -- return m_group; --} -- --void Entry::setGroup(Group* group) --{ -- Q_ASSERT(group); -- -- if (m_group == group) { -- return; -- } -- -- if (m_group) { -- m_group->removeEntry(this); -- if (m_group->database() && m_group->database() != group->database()) { -- m_group->database()->addDeletedObject(m_uuid); -- -- // copy custom icon to the new database -- if (!iconUuid().isNull() && group->database() && m_group->database()->metadata()->hasCustomIcon(iconUuid()) -- && !group->database()->metadata()->hasCustomIcon(iconUuid())) { -- group->database()->metadata()->addCustomIcon(iconUuid(), icon()); -- } -- } -- } -- -- m_group = group; -- group->addEntry(this); -- -- QObject::setParent(group); -- -- if (m_updateTimeinfo) { -- m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); -- } --} -- --void Entry::emitDataChanged() --{ -- emit entryDataChanged(this); --} -- --const Database* Entry::database() const --{ -- if (m_group) { -- return m_group->database(); -- } -- return nullptr; --} -- --Database* Entry::database() --{ -- if (m_group) { -- return m_group->database(); -- } -- return nullptr; --} -- --QString Entry::maskPasswordPlaceholders(const QString& str) const --{ -- QString result = str; -- result.replace(QRegExp("(\\{PASSWORD\\})", Qt::CaseInsensitive, QRegExp::RegExp2), "******"); -- return result; --} -- --Entry* Entry::resolveReference(const QString& str) const --{ -- QRegularExpressionMatch match = EntryAttributes::matchReference(str); -- if (!match.hasMatch()) { -- return nullptr; -- } -- -- const QString searchIn = match.captured(EntryAttributes::SearchInGroupName); -- const QString searchText = match.captured(EntryAttributes::SearchTextGroupName); -- -- const EntryReferenceType searchInType = Entry::referenceType(searchIn); -- return m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); --} -- --QString Entry::resolveMultiplePlaceholders(const QString& str) const --{ -- return resolveMultiplePlaceholdersRecursive(str, ResolveMaximumDepth); --} -- --QString Entry::resolvePlaceholder(const QString& placeholder) const --{ -- return resolvePlaceholderRecursive(placeholder, ResolveMaximumDepth); --} -- --QString Entry::resolveUrlPlaceholder(const QString& str, Entry::PlaceholderType placeholderType) const --{ -- if (str.isEmpty()) { -- return QString(); -- } -- -- const QUrl qurl(str); -- switch (placeholderType) { -- case PlaceholderType::UrlWithoutScheme: -- return qurl.toString(QUrl::RemoveScheme | QUrl::FullyDecoded); -- case PlaceholderType::UrlScheme: -- return qurl.scheme(); -- case PlaceholderType::UrlHost: -- return qurl.host(); -- case PlaceholderType::UrlPort: -- return QString::number(qurl.port()); -- case PlaceholderType::UrlPath: -- return qurl.path(); -- case PlaceholderType::UrlQuery: -- return qurl.query(); -- case PlaceholderType::UrlFragment: -- return qurl.fragment(); -- case PlaceholderType::UrlUserInfo: -- return qurl.userInfo(); -- case PlaceholderType::UrlUserName: -- return qurl.userName(); -- case PlaceholderType::UrlPassword: -- return qurl.password(); -- default: { -- Q_ASSERT_X(false, "Entry::resolveUrlPlaceholder", "Bad url placeholder type"); -- break; -- } -- } -- -- return QString(); --} -- --Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const --{ -- if (!placeholder.startsWith(QLatin1Char('{')) || !placeholder.endsWith(QLatin1Char('}'))) { -- return PlaceholderType::NotPlaceholder; -- } -- if (placeholder.startsWith(QLatin1Literal("{S:"))) { -- return PlaceholderType::CustomAttribute; -- } -- if (placeholder.startsWith(QLatin1Literal("{REF:"))) { -- return PlaceholderType::Reference; -- } -- -- static const QMap placeholders{ -- {QStringLiteral("{TITLE}"), PlaceholderType::Title}, -- {QStringLiteral("{USERNAME}"), PlaceholderType::UserName}, -- {QStringLiteral("{PASSWORD}"), PlaceholderType::Password}, -- {QStringLiteral("{NOTES}"), PlaceholderType::Notes}, -- {QStringLiteral("{TOTP}"), PlaceholderType::Totp}, -- {QStringLiteral("{URL}"), PlaceholderType::Url}, -- {QStringLiteral("{URL:RMVSCM}"), PlaceholderType::UrlWithoutScheme}, -- {QStringLiteral("{URL:WITHOUTSCHEME}"), PlaceholderType::UrlWithoutScheme}, -- {QStringLiteral("{URL:SCM}"), PlaceholderType::UrlScheme}, -- {QStringLiteral("{URL:SCHEME}"), PlaceholderType::UrlScheme}, -- {QStringLiteral("{URL:HOST}"), PlaceholderType::UrlHost}, -- {QStringLiteral("{URL:PORT}"), PlaceholderType::UrlPort}, -- {QStringLiteral("{URL:PATH}"), PlaceholderType::UrlPath}, -- {QStringLiteral("{URL:QUERY}"), PlaceholderType::UrlQuery}, -- {QStringLiteral("{URL:FRAGMENT}"), PlaceholderType::UrlFragment}, -- {QStringLiteral("{URL:USERINFO}"), PlaceholderType::UrlUserInfo}, -- {QStringLiteral("{URL:USERNAME}"), PlaceholderType::UrlUserName}, -- {QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword}, -- {QStringLiteral("{DT_SIMPLE}"), PlaceholderType::DateTimeSimple}, -- {QStringLiteral("{DT_YEAR}"), PlaceholderType::DateTimeYear}, -- {QStringLiteral("{DT_MONTH}"), PlaceholderType::DateTimeMonth}, -- {QStringLiteral("{DT_DAY}"), PlaceholderType::DateTimeDay}, -- {QStringLiteral("{DT_HOUR}"), PlaceholderType::DateTimeHour}, -- {QStringLiteral("{DT_MINUTE}"), PlaceholderType::DateTimeMinute}, -- {QStringLiteral("{DT_SECOND}"), PlaceholderType::DateTimeSecond}, -- {QStringLiteral("{DT_UTC_SIMPLE}"), PlaceholderType::DateTimeUtcSimple}, -- {QStringLiteral("{DT_UTC_YEAR}"), PlaceholderType::DateTimeUtcYear}, -- {QStringLiteral("{DT_UTC_MONTH}"), PlaceholderType::DateTimeUtcMonth}, -- {QStringLiteral("{DT_UTC_DAY}"), PlaceholderType::DateTimeUtcDay}, -- {QStringLiteral("{DT_UTC_HOUR}"), PlaceholderType::DateTimeUtcHour}, -- {QStringLiteral("{DT_UTC_MINUTE}"), PlaceholderType::DateTimeUtcMinute}, -- {QStringLiteral("{DT_UTC_SECOND}"), PlaceholderType::DateTimeUtcSecond}, -- {QStringLiteral("{DB_DIR}"), PlaceholderType::DbDir}}; -- -- return placeholders.value(placeholder.toUpper(), PlaceholderType::Unknown); --} -- --QString Entry::resolveUrl(const QString& url) const --{ -- QString newUrl = url; -- -- QRegExp fileRegEx("^([a-z]:)?[\\\\/]", Qt::CaseInsensitive, QRegExp::RegExp2); -- if (fileRegEx.indexIn(newUrl) != -1) { -- // Match possible file paths without the scheme and convert it to a file URL -- newUrl = QDir::fromNativeSeparators(newUrl); -- newUrl = QUrl::fromLocalFile(newUrl).toString(); -- } else if (newUrl.startsWith("cmd://")) { -- QStringList cmdList = newUrl.split(" "); -- for (int i = 1; i < cmdList.size(); ++i) { -- // Don't pass arguments to the resolveUrl function (they look like URL's) -- if (!cmdList[i].startsWith("-") && !cmdList[i].startsWith("/")) { -- return resolveUrl(cmdList[i].remove(QRegExp("'|\""))); -- } -- } -- -- // No URL in this command -- return QString(""); -- } -- -- if (!newUrl.isEmpty() && !newUrl.contains("://")) { -- // URL doesn't have a protocol, add https by default -- newUrl.prepend("https://"); -- } -- -- // Validate the URL -- QUrl tempUrl = QUrl(newUrl); -- if (tempUrl.isValid() -- && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https" || tempUrl.scheme() == "file")) { -- return tempUrl.url(); -- } -- -- // No valid http URL's found -- return QString(""); --} -- --bool EntryData::operator==(const EntryData& other) const --{ -- return equals(other, CompareItemDefault); --} -- --bool EntryData::operator!=(const EntryData& other) const --{ -- return !(*this == other); --} -- --bool EntryData::equals(const EntryData& other, CompareItemOptions options) const --{ -- if (::compare(iconNumber, other.iconNumber, options) != 0) { -- return false; -- } -- if (::compare(customIcon, other.customIcon, options) != 0) { -- return false; -- } -- if (::compare(foregroundColor, other.foregroundColor, options) != 0) { -- return false; -- } -- if (::compare(backgroundColor, other.backgroundColor, options) != 0) { -- return false; -- } -- if (::compare(overrideUrl, other.overrideUrl, options) != 0) { -- return false; -- } -- if (::compare(tags, other.tags, options) != 0) { -- return false; -- } -- if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { -- return false; -- } -- if (::compare(autoTypeObfuscation, other.autoTypeObfuscation, options) != 0) { -- return false; -- } -- if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { -- return false; -- } -- if (!timeInfo.equals(other.timeInfo, options)) { -- return false; -- } -- if (!totpSettings.isNull() && !other.totpSettings.isNull()) { -- // Both have TOTP settings, compare them -- if (::compare(totpSettings->key, other.totpSettings->key, options) != 0) { -- return false; -- } -- if (::compare(totpSettings->digits, other.totpSettings->digits, options) != 0) { -- return false; -- } -- if (::compare(totpSettings->step, other.totpSettings->step, options) != 0) { -- return false; -- } -- } else if (totpSettings.isNull() != other.totpSettings.isNull()) { -- // The existance of TOTP has changed between these entries -- return false; -- } -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Entry.h keepassxc-2.6.4-patched/src/core/Entry.h ---- keepassxc-2.6.4-orig/src/core/Entry.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Entry.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,291 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRY_H --#define KEEPASSX_ENTRY_H -- --#include --#include --#include --#include --#include --#include --#include -- --#include "core/AutoTypeAssociations.h" --#include "core/CustomData.h" --#include "core/EntryAttachments.h" --#include "core/EntryAttributes.h" --#include "core/Global.h" --#include "core/TimeInfo.h" -- --class Database; --class Group; --namespace Totp --{ -- struct Settings; --} -- --enum class EntryReferenceType --{ -- Unknown, -- Title, -- UserName, -- Password, -- Url, -- Notes, -- QUuid, -- CustomAttributes --}; -- --struct EntryData --{ -- int iconNumber; -- QUuid customIcon; -- QString foregroundColor; -- QString backgroundColor; -- QString overrideUrl; -- QString tags; -- bool autoTypeEnabled; -- int autoTypeObfuscation; -- QString defaultAutoTypeSequence; -- TimeInfo timeInfo; -- QSharedPointer totpSettings; -- -- bool operator==(const EntryData& other) const; -- bool operator!=(const EntryData& other) const; -- bool equals(const EntryData& other, CompareItemOptions options) const; --}; -- --class Entry : public QObject --{ -- Q_OBJECT -- --public: -- Entry(); -- ~Entry(); -- const QUuid& uuid() const; -- const QString uuidToHex() const; -- QImage icon() const; -- QPixmap iconPixmap(IconSize size = IconSize::Default) const; -- int iconNumber() const; -- const QUuid& iconUuid() const; -- QString foregroundColor() const; -- QString backgroundColor() const; -- QString overrideUrl() const; -- QString tags() const; -- const TimeInfo& timeInfo() const; -- bool autoTypeEnabled() const; -- int autoTypeObfuscation() const; -- QString defaultAutoTypeSequence() const; -- QString effectiveAutoTypeSequence() const; -- QString effectiveNewAutoTypeSequence() const; -- AutoTypeAssociations* autoTypeAssociations(); -- const AutoTypeAssociations* autoTypeAssociations() const; -- QString title() const; -- QString url() const; -- QString webUrl() const; -- QString displayUrl() const; -- QString username() const; -- QString password() const; -- QString notes() const; -- QString attribute(const QString& key) const; -- QString totp() const; -- QString totpSettingsString() const; -- QSharedPointer totpSettings() const; -- int size() const; -- -- bool hasTotp() const; -- bool isExpired() const; -- bool isRecycled() const; -- bool isAttributeReference(const QString& key) const; -- bool isAttributeReferenceOf(const QString& key, const QUuid& uuid) const; -- void replaceReferencesWithValues(const Entry* other); -- bool hasReferences() const; -- bool hasReferencesTo(const QUuid& uuid) const; -- EntryAttributes* attributes(); -- const EntryAttributes* attributes() const; -- EntryAttachments* attachments(); -- const EntryAttachments* attachments() const; -- CustomData* customData(); -- const CustomData* customData() const; -- -- void setUuid(const QUuid& uuid); -- void setIcon(int iconNumber); -- void setIcon(const QUuid& uuid); -- void setForegroundColor(const QString& color); -- void setBackgroundColor(const QString& color); -- void setOverrideUrl(const QString& url); -- void setTags(const QString& tags); -- void setTimeInfo(const TimeInfo& timeInfo); -- void setAutoTypeEnabled(bool enable); -- void setAutoTypeObfuscation(int obfuscation); -- void setDefaultAutoTypeSequence(const QString& sequence); -- void setTitle(const QString& title); -- void setUrl(const QString& url); -- void setUsername(const QString& username); -- void setPassword(const QString& password); -- void setNotes(const QString& notes); -- void setDefaultAttribute(const QString& attribute, const QString& value); -- void setExpires(const bool& value); -- void setExpiryTime(const QDateTime& dateTime); -- void setTotp(QSharedPointer settings); -- -- QList historyItems(); -- const QList& historyItems() const; -- void addHistoryItem(Entry* entry); -- void removeHistoryItems(const QList& historyEntries); -- void truncateHistory(); -- -- bool equals(const Entry* other, CompareItemOptions options = CompareItemDefault) const; -- -- enum CloneFlag -- { -- CloneNoFlags = 0, -- CloneNewUuid = 1, // generate a random uuid for the clone -- CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time -- CloneIncludeHistory = 4, // clone the history items -- CloneDefault = CloneNewUuid | CloneResetTimeInfo, -- CloneCopy = CloneNewUuid | CloneResetTimeInfo | CloneIncludeHistory, -- CloneRenameTitle = 8, // add "-Clone" after the original title -- CloneUserAsRef = 16, // Add the user as a reference to the original entry -- ClonePassAsRef = 32, // Add the password as a reference to the original entry -- }; -- Q_DECLARE_FLAGS(CloneFlags, CloneFlag) -- -- enum class PlaceholderType -- { -- NotPlaceholder, -- Unknown, -- Title, -- UserName, -- Password, -- Notes, -- Totp, -- Url, -- UrlWithoutScheme, -- UrlScheme, -- UrlHost, -- UrlPort, -- UrlPath, -- UrlQuery, -- UrlFragment, -- UrlUserInfo, -- UrlUserName, -- UrlPassword, -- Reference, -- CustomAttribute, -- DateTimeSimple, -- DateTimeYear, -- DateTimeMonth, -- DateTimeDay, -- DateTimeHour, -- DateTimeMinute, -- DateTimeSecond, -- DateTimeUtcSimple, -- DateTimeUtcYear, -- DateTimeUtcMonth, -- DateTimeUtcDay, -- DateTimeUtcHour, -- DateTimeUtcMinute, -- DateTimeUtcSecond, -- DbDir -- }; -- -- static const int DefaultIconNumber; -- static const int ResolveMaximumDepth; -- static const QString AutoTypeSequenceUsername; -- static const QString AutoTypeSequencePassword; -- -- /** -- * Creates a duplicate of this entry except that the returned entry isn't -- * part of any group. -- * Note that you need to copy the custom icons manually when inserting the -- * new entry into another database. -- */ -- Entry* clone(CloneFlags flags = CloneDefault) const; -- void copyDataFrom(const Entry* other); -- QString maskPasswordPlaceholders(const QString& str) const; -- Entry* resolveReference(const QString& str) const; -- QString resolveMultiplePlaceholders(const QString& str) const; -- QString resolvePlaceholder(const QString& str) const; -- QString resolveUrlPlaceholder(const QString& str, PlaceholderType placeholderType) const; -- QString resolveDateTimePlaceholder(PlaceholderType placeholderType) const; -- PlaceholderType placeholderType(const QString& placeholder) const; -- QString resolveUrl(const QString& url) const; -- -- /** -- * Call before and after set*() methods to create a history item -- * if the entry has been changed. -- */ -- void beginUpdate(); -- bool endUpdate(); -- -- void moveUp(); -- void moveDown(); -- -- Group* group(); -- const Group* group() const; -- void setGroup(Group* group); -- const Database* database() const; -- Database* database(); -- -- bool canUpdateTimeinfo() const; -- void setUpdateTimeinfo(bool value); -- --signals: -- /** -- * Emitted when a default attribute has been changed. -- */ -- void entryDataChanged(Entry* entry); -- void entryModified(); -- --private slots: -- void emitDataChanged(); -- void updateTimeinfo(); -- void updateModifiedSinceBegin(); -- void updateTotp(); -- --private: -- QString resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const; -- QString resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const; -- QString resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const; -- QString referenceFieldValue(EntryReferenceType referenceType) const; -- -- static QString buildReference(const QUuid& uuid, const QString& field); -- static EntryReferenceType referenceType(const QString& referenceStr); -- -- template bool set(T& property, const T& value); -- -- QUuid m_uuid; -- EntryData m_data; -- QPointer m_attributes; -- QPointer m_attachments; -- QPointer m_autoTypeAssociations; -- QPointer m_customData; -- QList m_history; // Items sorted from oldest to newest -- -- QScopedPointer m_tmpHistoryItem; -- bool m_modifiedSinceBegin; -- QPointer m_group; -- bool m_updateTimeinfo; --}; -- --Q_DECLARE_OPERATORS_FOR_FLAGS(Entry::CloneFlags) -- --#endif // KEEPASSX_ENTRY_H -diff -urNr keepassxc-2.6.4-orig/src/core/EntrySearcher.cpp keepassxc-2.6.4-patched/src/core/EntrySearcher.cpp ---- keepassxc-2.6.4-orig/src/core/EntrySearcher.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntrySearcher.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,284 +0,0 @@ --/* -- * Copyright (C) 2014 Florian Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntrySearcher.h" -- --#include "core/Group.h" --#include "core/Tools.h" -- --EntrySearcher::EntrySearcher(bool caseSensitive, bool skipProtected) -- : m_caseSensitive(caseSensitive) -- , m_skipProtected(skipProtected) -- , m_termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re") --// Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string --{ --} -- --/** -- * Search group, and its children, directly by provided search terms -- * @param searchTerms search terms -- * @param baseGroup group to start search from, cannot be null -- * @param forceSearch ignore group search settings -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::search(const QList& searchTerms, const Group* baseGroup, bool forceSearch) --{ -- Q_ASSERT(baseGroup); -- m_searchTerms = searchTerms; -- return repeat(baseGroup, forceSearch); --} -- --/** -- * Search group, and its children, by parsing the provided search -- * string for search terms. -- * -- * @param searchString search terms -- * @param baseGroup group to start search from, cannot be null -- * @param forceSearch ignore group search settings -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::search(const QString& searchString, const Group* baseGroup, bool forceSearch) --{ -- Q_ASSERT(baseGroup); -- parseSearchTerms(searchString); -- return repeat(baseGroup, forceSearch); --} -- --/** -- * Repeat the last search starting from the given group -- * -- * @param baseGroup group to start search from, cannot be null -- * @param forceSearch ignore group search settings -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::repeat(const Group* baseGroup, bool forceSearch) --{ -- Q_ASSERT(baseGroup); -- -- QList results; -- for (const auto group : baseGroup->groupsRecursive(true)) { -- if (forceSearch || group->resolveSearchingEnabled()) { -- for (const auto entry : group->entries()) { -- if (searchEntryImpl(entry)) { -- results.append(entry); -- } -- } -- } -- } -- return results; --} -- --/** -- * Search provided entries by the provided search terms -- * -- * @param searchTerms search terms -- * @param entries list of entries to include in the search -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::searchEntries(const QList& searchTerms, const QList& entries) --{ -- m_searchTerms = searchTerms; -- return repeatEntries(entries); --} -- --/** -- * Search provided entries by parsing the search string -- * for search terms. -- * -- * @param searchString search terms -- * @param entries list of entries to include in the search -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::searchEntries(const QString& searchString, const QList& entries) --{ -- parseSearchTerms(searchString); -- return repeatEntries(entries); --} -- --/** -- * Repeat the last search on the given entries -- * -- * @param entries list of entries to include in the search -- * @return list of entries that match the search terms -- */ --QList EntrySearcher::repeatEntries(const QList& entries) --{ -- QList results; -- for (auto* entry : entries) { -- if (searchEntryImpl(entry)) { -- results.append(entry); -- } -- } -- return results; --} -- --/** -- * Set the next search to be case sensitive or not -- * -- * @param state -- */ --void EntrySearcher::setCaseSensitive(bool state) --{ -- m_caseSensitive = state; --} -- --bool EntrySearcher::isCaseSensitive() const --{ -- return m_caseSensitive; --} -- --bool EntrySearcher::searchEntryImpl(const Entry* entry) --{ -- // Pre-load in case they are needed -- auto attributes_keys = entry->attributes()->customKeys(); -- auto attributes = QStringList(attributes_keys + entry->attributes()->values(attributes_keys)); -- auto attachments = QStringList(entry->attachments()->keys()); -- // Build a group hierarchy to allow searching for e.g. /group1/subgroup* -- auto hierarchy = entry->group()->hierarchy().join('/').prepend("/"); -- -- // By default, empty term matches every entry. -- // However when skipping protected fields, we will recject everything instead -- bool found = !m_skipProtected; -- for (const auto& term : m_searchTerms) { -- switch (term.field) { -- case Field::Title: -- found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch(); -- break; -- case Field::Username: -- found = term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch(); -- break; -- case Field::Password: -- if (m_skipProtected) { -- continue; -- } -- found = term.regex.match(entry->resolvePlaceholder(entry->password())).hasMatch(); -- break; -- case Field::Url: -- found = term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch(); -- break; -- case Field::Notes: -- found = term.regex.match(entry->notes()).hasMatch(); -- break; -- case Field::AttributeKV: -- found = !attributes.filter(term.regex).empty(); -- break; -- case Field::Attachment: -- found = !attachments.filter(term.regex).empty(); -- break; -- case Field::AttributeValue: -- if (m_skipProtected && entry->attributes()->isProtected(term.word)) { -- continue; -- } -- found = entry->attributes()->contains(term.word) -- && term.regex.match(entry->attributes()->value(term.word)).hasMatch(); -- break; -- case Field::Group: -- // Match against the full hierarchy if the word contains a '/' otherwise just the group name -- if (term.word.contains('/')) { -- found = term.regex.match(hierarchy).hasMatch(); -- } else { -- found = term.regex.match(entry->group()->name()).hasMatch(); -- } -- break; -- default: -- // Terms without a specific field try to match title, username, url, and notes -- found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch() -- || term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch() -- || term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch() -- || term.regex.match(entry->notes()).hasMatch(); -- } -- -- // negate the result if exclude: -- // * if found and not excluding, the entry matches -- // * if didn't found but excluding, the entry also matches -- found = (found && !term.exclude) || (!found && term.exclude); -- -- // short circuit if we failed the match -- if (!found) { -- return false; -- } -- } -- -- return found; --} -- --void EntrySearcher::parseSearchTerms(const QString& searchString) --{ -- static const QList> fieldnames{ -- {QStringLiteral("attachment"), Field::Attachment}, -- {QStringLiteral("attribute"), Field::AttributeKV}, -- {QStringLiteral("notes"), Field::Notes}, -- {QStringLiteral("pw"), Field::Password}, -- {QStringLiteral("password"), Field::Password}, -- {QStringLiteral("title"), Field::Title}, -- {QStringLiteral("u"), Field::Username}, // u: stands for username rather than url -- {QStringLiteral("url"), Field::Url}, -- {QStringLiteral("username"), Field::Username}, -- {QStringLiteral("group"), Field::Group}}; -- -- m_searchTerms.clear(); -- auto results = m_termParser.globalMatch(searchString); -- while (results.hasNext()) { -- auto result = results.next(); -- SearchTerm term{}; -- -- // Quoted string group -- term.word = result.captured(3); -- -- // If empty, use the unquoted string group -- if (term.word.isEmpty()) { -- term.word = result.captured(4); -- } -- -- // If still empty, ignore this match -- if (term.word.isEmpty()) { -- continue; -- } -- -- auto mods = result.captured(1); -- -- // Convert term to regex -- term.regex = Tools::convertToRegex(term.word, !mods.contains("*"), mods.contains("+"), m_caseSensitive); -- -- // Exclude modifier -- term.exclude = mods.contains("-") || mods.contains("!"); -- -- // Determine the field to search -- term.field = Field::Undefined; -- -- QString field = result.captured(2); -- if (!field.isEmpty()) { -- if (field.startsWith("_", Qt::CaseInsensitive)) { -- term.field = Field::AttributeValue; -- // searching a custom attribute -- // in this case term.word is the attribute key (removing the leading "_") -- // and term.regex is used to match attribute value -- term.word = field.mid(1); -- } else { -- for (const auto& pair : fieldnames) { -- if (pair.first.startsWith(field, Qt::CaseInsensitive)) { -- term.field = pair.second; -- break; -- } -- } -- } -- } -- -- m_searchTerms.append(term); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/core/EntrySearcher.h keepassxc-2.6.4-patched/src/core/EntrySearcher.h ---- keepassxc-2.6.4-orig/src/core/EntrySearcher.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/EntrySearcher.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,79 +0,0 @@ --/* -- * Copyright (C) 2014 Florian Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYSEARCHER_H --#define KEEPASSX_ENTRYSEARCHER_H -- --#include --#include -- --class Group; --class Entry; -- --class EntrySearcher --{ --public: -- enum class Field -- { -- Undefined, -- Title, -- Username, -- Password, -- Url, -- Notes, -- AttributeKV, -- Attachment, -- AttributeValue, -- Group -- }; -- -- struct SearchTerm -- { -- Field field; -- // only used when field == Field::AttributeValue -- QString word; -- QRegularExpression regex; -- bool exclude; -- }; -- -- explicit EntrySearcher(bool caseSensitive = false, bool skipProtected = false); -- -- QList search(const QList& searchTerms, const Group* baseGroup, bool forceSearch = false); -- QList search(const QString& searchString, const Group* baseGroup, bool forceSearch = false); -- QList repeat(const Group* baseGroup, bool forceSearch = false); -- -- QList searchEntries(const QList& searchTerms, const QList& entries); -- QList searchEntries(const QString& searchString, const QList& entries); -- QList repeatEntries(const QList& entries); -- -- void setCaseSensitive(bool state); -- bool isCaseSensitive() const; -- --private: -- bool searchEntryImpl(const Entry* entry); -- void parseSearchTerms(const QString& searchString); -- -- bool m_caseSensitive; -- bool m_skipProtected; -- QRegularExpression m_termParser; -- QList m_searchTerms; -- -- friend class TestEntrySearcher; --}; -- --#endif // KEEPASSX_ENTRYSEARCHER_H -diff -urNr keepassxc-2.6.4-orig/src/core/Exporter.h keepassxc-2.6.4-patched/src/core/Exporter.h ---- keepassxc-2.6.4-orig/src/core/Exporter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Exporter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,16 +0,0 @@ --#ifndef KEEPASSX_EXPORTER_H --#define KEEPASSX_EXPORTER_H -- --class Database; --class Group; -- --class Exporter --{ --public: -- virtual Database* exportGroup(Group* group) = 0; -- virtual ~Exporter() -- { -- } --}; -- --#endif // KEEPASSX_EXPORTER_H -diff -urNr keepassxc-2.6.4-orig/src/core/FileWatcher.cpp keepassxc-2.6.4-patched/src/core/FileWatcher.cpp ---- keepassxc-2.6.4-orig/src/core/FileWatcher.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/FileWatcher.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,148 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "FileWatcher.h" -- --#include "core/AsyncTask.h" -- --#include -- --#ifdef Q_OS_LINUX --#include --#endif -- --FileWatcher::FileWatcher(QObject* parent) -- : QObject(parent) --{ -- connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(checkFileChanged())); -- connect(&m_fileChecksumTimer, SIGNAL(timeout()), SLOT(checkFileChanged())); -- connect(&m_fileChangeDelayTimer, &QTimer::timeout, this, [this] { emit fileChanged(m_filePath); }); -- m_fileChangeDelayTimer.setSingleShot(true); -- m_fileIgnoreDelayTimer.setSingleShot(true); --} -- --FileWatcher::~FileWatcher() --{ -- stop(); --} -- --void FileWatcher::start(const QString& filePath, int checksumIntervalSeconds, int checksumSizeKibibytes) --{ -- stop(); -- --#if defined(Q_OS_LINUX) -- struct statfs statfsBuf; -- bool forcePolling = false; -- const auto NFS_SUPER_MAGIC = 0x6969; -- -- if (!statfs(filePath.toLocal8Bit().constData(), &statfsBuf)) { -- forcePolling = (statfsBuf.f_type == NFS_SUPER_MAGIC); -- } else { -- // if we can't get the fs type let's fall back to polling -- forcePolling = true; -- } -- auto objectName = forcePolling ? QLatin1String("_qt_autotest_force_engine_poller") : QLatin1String(""); -- m_fileWatcher.setObjectName(objectName); --#endif -- -- m_fileWatcher.addPath(filePath); -- m_filePath = filePath; -- -- // Handle file checksum -- m_fileChecksumSizeBytes = checksumSizeKibibytes * 1024; -- m_fileChecksum = calculateChecksum(); -- if (checksumIntervalSeconds > 0) { -- m_fileChecksumTimer.start(checksumIntervalSeconds * 1000); -- } -- -- m_ignoreFileChange = false; --} -- --void FileWatcher::stop() --{ -- if (!m_filePath.isEmpty()) { -- m_fileWatcher.removePath(m_filePath); -- } -- m_filePath.clear(); -- m_fileChecksum.clear(); -- m_fileChecksumTimer.stop(); -- m_fileChangeDelayTimer.stop(); --} -- --void FileWatcher::pause() --{ -- m_ignoreFileChange = true; -- m_fileChangeDelayTimer.stop(); --} -- --void FileWatcher::resume() --{ -- m_ignoreFileChange = false; -- // Add a short delay to start in the next event loop -- if (!m_fileIgnoreDelayTimer.isActive()) { -- m_fileIgnoreDelayTimer.start(0); -- } --} -- --bool FileWatcher::shouldIgnoreChanges() --{ -- return m_filePath.isEmpty() || m_ignoreFileChange || m_fileIgnoreDelayTimer.isActive() -- || m_fileChangeDelayTimer.isActive(); --} -- --bool FileWatcher::hasSameFileChecksum() --{ -- return calculateChecksum() == m_fileChecksum; --} -- --void FileWatcher::checkFileChanged() --{ -- if (shouldIgnoreChanges()) { -- return; -- } -- -- // Prevent reentrance -- m_ignoreFileChange = true; -- -- AsyncTask::runThenCallback([=] { return calculateChecksum(); }, -- this, -- [=](QByteArray checksum) { -- if (checksum != m_fileChecksum) { -- m_fileChecksum = checksum; -- m_fileChangeDelayTimer.start(0); -- } -- -- m_ignoreFileChange = false; -- }); --} -- --QByteArray FileWatcher::calculateChecksum() --{ -- QFile file(m_filePath); -- if (file.open(QFile::ReadOnly)) { -- QCryptographicHash hash(QCryptographicHash::Sha256); -- if (m_fileChecksumSizeBytes > 0) { -- hash.addData(file.read(m_fileChecksumSizeBytes)); -- } else { -- hash.addData(&file); -- } -- return hash.result(); -- } -- // If we fail to open the file return the last known checksum, this -- // prevents unnecessary merge requests on intermittent network shares -- return m_fileChecksum; --} -diff -urNr keepassxc-2.6.4-orig/src/core/FileWatcher.h keepassxc-2.6.4-patched/src/core/FileWatcher.h ---- keepassxc-2.6.4-orig/src/core/FileWatcher.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/FileWatcher.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,61 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FILEWATCHER_H --#define KEEPASSXC_FILEWATCHER_H -- --#include --#include -- --class FileWatcher : public QObject --{ -- Q_OBJECT -- --public: -- explicit FileWatcher(QObject* parent = nullptr); -- ~FileWatcher() override; -- -- void start(const QString& path, int checksumIntervalSeconds = 0, int checksumSizeKibibytes = -1); -- void stop(); -- -- bool hasSameFileChecksum(); -- --signals: -- void fileChanged(const QString& path); -- --public slots: -- void pause(); -- void resume(); -- --private slots: -- void checkFileChanged(); -- --private: -- QByteArray calculateChecksum(); -- bool shouldIgnoreChanges(); -- -- QString m_filePath; -- QFileSystemWatcher m_fileWatcher; -- QByteArray m_fileChecksum; -- QTimer m_fileChangeDelayTimer; -- QTimer m_fileIgnoreDelayTimer; -- QTimer m_fileChecksumTimer; -- int m_fileChecksumSizeBytes = -1; -- bool m_ignoreFileChange = false; --}; -- --#endif // KEEPASSXC_FILEWATCHER_H -diff -urNr keepassxc-2.6.4-orig/src/core/Global.h keepassxc-2.6.4-patched/src/core/Global.h ---- keepassxc-2.6.4-orig/src/core/Global.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Global.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) -- * Copyright (C) 2012 Intel Corporation -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_GLOBAL_H --#define KEEPASSX_GLOBAL_H -- --#include --#include -- --#if defined(Q_OS_WIN) --#if defined(KEEPASSX_BUILDING_CORE) --#define KEEPASSX_EXPORT Q_DECL_IMPORT --#else --#define KEEPASSX_EXPORT Q_DECL_EXPORT --#endif --#else --#define KEEPASSX_EXPORT Q_DECL_EXPORT --#endif -- --#ifndef QUINT32_MAX --#define QUINT32_MAX 4294967295U --#endif -- --#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) --#define FILE_CASE_SENSITIVE Qt::CaseInsensitive --#else --#define FILE_CASE_SENSITIVE Qt::CaseSensitive --#endif -- --static const auto TRUE_STR = QStringLiteral("true"); --static const auto FALSE_STR = QStringLiteral("false"); -- --enum IconSize --{ -- Default, -- Medium, -- Large --}; -- --template struct AddConst --{ -- typedef const T Type; --}; -- --// this adds const to non-const objects (like std::as_const) --template constexpr typename AddConst::Type& asConst(T& t) noexcept --{ -- return t; --} --// prevent rvalue arguments: --template void asConst(const T&&) = delete; -- --#endif // KEEPASSX_GLOBAL_H -diff -urNr keepassxc-2.6.4-orig/src/core/Group.cpp keepassxc-2.6.4-patched/src/core/Group.cpp ---- keepassxc-2.6.4-orig/src/core/Group.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Group.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1239 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Group.h" --#include "config-keepassx.h" -- --#include "core/Clock.h" --#include "core/Config.h" --#include "core/DatabaseIcons.h" --#include "core/Global.h" --#include "core/Metadata.h" --#include "core/Tools.h" -- --#ifdef WITH_XC_KEESHARE --#include "keeshare/KeeShare.h" --#endif -- --#include -- --const int Group::DefaultIconNumber = 48; --const int Group::RecycleBinIconNumber = 43; --const QString Group::RootAutoTypeSequence = "{USERNAME}{TAB}{PASSWORD}{ENTER}"; -- --Group::Group() -- : m_customData(new CustomData(this)) -- , m_updateTimeinfo(true) --{ -- m_data.iconNumber = DefaultIconNumber; -- m_data.isExpanded = true; -- m_data.autoTypeEnabled = Inherit; -- m_data.searchingEnabled = Inherit; -- m_data.mergeMode = Default; -- -- connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(groupModified())); -- connect(this, SIGNAL(groupModified()), SLOT(updateTimeinfo())); -- connect(this, SIGNAL(groupNonDataChange()), SLOT(updateTimeinfo())); --} -- --Group::~Group() --{ -- setUpdateTimeinfo(false); -- // Destroy entries and children manually so DeletedObjects can be added -- // to database. -- const QList entries = m_entries; -- for (Entry* entry : entries) { -- delete entry; -- } -- -- const QList children = m_children; -- for (Group* group : children) { -- delete group; -- } -- -- if (m_db && m_parent) { -- DeletedObject delGroup; -- delGroup.deletionTime = Clock::currentDateTimeUtc(); -- delGroup.uuid = m_uuid; -- m_db->addDeletedObject(delGroup); -- } -- -- cleanupParent(); --} -- --template inline bool Group::set(P& property, const V& value) --{ -- if (property != value) { -- property = value; -- emit groupModified(); -- return true; -- } else { -- return false; -- } --} -- --bool Group::canUpdateTimeinfo() const --{ -- return m_updateTimeinfo; --} -- --void Group::updateTimeinfo() --{ -- if (m_updateTimeinfo) { -- m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); -- m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); -- } --} -- --void Group::setUpdateTimeinfo(bool value) --{ -- m_updateTimeinfo = value; --} -- --const QUuid& Group::uuid() const --{ -- return m_uuid; --} -- --const QString Group::uuidToHex() const --{ -- return Tools::uuidToHex(m_uuid); --} -- --QString Group::name() const --{ -- return m_data.name; --} -- --QString Group::notes() const --{ -- return m_data.notes; --} -- --QImage Group::icon() const --{ -- if (m_data.customIcon.isNull()) { -- return databaseIcons()->icon(m_data.iconNumber).toImage(); -- } else { -- Q_ASSERT(m_db); -- if (m_db) { -- return m_db->metadata()->customIcon(m_data.customIcon); -- } else { -- return QImage(); -- } -- } --} -- --QPixmap Group::iconPixmap(IconSize size) const --{ -- QPixmap icon(size, size); -- if (m_data.customIcon.isNull()) { -- icon = databaseIcons()->icon(m_data.iconNumber, size); -- } else { -- Q_ASSERT(m_db); -- if (m_db) { -- icon = m_db->metadata()->customIconPixmap(m_data.customIcon, size); -- } -- } -- -- if (isExpired()) { -- icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); -- } --#ifdef WITH_XC_KEESHARE -- else if (KeeShare::isShared(this)) { -- icon = KeeShare::indicatorBadge(this, icon); -- } --#endif -- -- return icon; --} -- --int Group::iconNumber() const --{ -- return m_data.iconNumber; --} -- --const QUuid& Group::iconUuid() const --{ -- return m_data.customIcon; --} -- --const TimeInfo& Group::timeInfo() const --{ -- return m_data.timeInfo; --} -- --bool Group::isExpanded() const --{ -- return m_data.isExpanded; --} -- --QString Group::defaultAutoTypeSequence() const --{ -- return m_data.defaultAutoTypeSequence; --} -- --/** -- * Determine the effective sequence that will be injected -- * This function return an empty string if the current group or any parent has autotype disabled -- */ --QString Group::effectiveAutoTypeSequence() const --{ -- QString sequence; -- -- const Group* group = this; -- do { -- if (group->autoTypeEnabled() == Group::Disable) { -- return QString(); -- } -- -- sequence = group->defaultAutoTypeSequence(); -- group = group->parentGroup(); -- } while (group && sequence.isEmpty()); -- -- if (sequence.isEmpty()) { -- sequence = RootAutoTypeSequence; -- } -- -- return sequence; --} -- --Group::TriState Group::autoTypeEnabled() const --{ -- return m_data.autoTypeEnabled; --} -- --Group::TriState Group::searchingEnabled() const --{ -- return m_data.searchingEnabled; --} -- --Group::MergeMode Group::mergeMode() const --{ -- if (m_data.mergeMode == Group::MergeMode::Default) { -- if (m_parent) { -- return m_parent->mergeMode(); -- } -- return Group::MergeMode::KeepNewer; // fallback -- } -- return m_data.mergeMode; --} -- --Entry* Group::lastTopVisibleEntry() const --{ -- return m_lastTopVisibleEntry; --} -- --bool Group::isRecycled() const --{ -- auto group = this; -- if (!group->database()) { -- return false; -- } -- -- do { -- if (group->m_parent && group->m_db->metadata()) { -- if (group->m_parent == group->m_db->metadata()->recycleBin()) { -- return true; -- } -- } -- group = group->m_parent; -- } while (group && group->m_parent && group->m_parent != group->m_db->rootGroup()); -- -- return false; --} -- --bool Group::isExpired() const --{ -- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); --} -- --bool Group::isEmpty() const --{ -- return !hasChildren() && m_entries.isEmpty(); --} -- --CustomData* Group::customData() --{ -- return m_customData; --} -- --const CustomData* Group::customData() const --{ -- return m_customData; --} -- --bool Group::equals(const Group* other, CompareItemOptions options) const --{ -- if (!other) { -- return false; -- } -- if (m_uuid != other->m_uuid) { -- return false; -- } -- if (!m_data.equals(other->m_data, options)) { -- return false; -- } -- if (m_customData != other->m_customData) { -- return false; -- } -- if (m_children.count() != other->m_children.count()) { -- return false; -- } -- if (m_entries.count() != other->m_entries.count()) { -- return false; -- } -- for (int i = 0; i < m_children.count(); ++i) { -- if (m_children[i]->uuid() != other->m_children[i]->uuid()) { -- return false; -- } -- } -- for (int i = 0; i < m_entries.count(); ++i) { -- if (m_entries[i]->uuid() != other->m_entries[i]->uuid()) { -- return false; -- } -- } -- return true; --} -- --void Group::setUuid(const QUuid& uuid) --{ -- set(m_uuid, uuid); --} -- --void Group::setName(const QString& name) --{ -- if (set(m_data.name, name)) { -- emit groupDataChanged(this); -- } --} -- --void Group::setNotes(const QString& notes) --{ -- set(m_data.notes, notes); --} -- --void Group::setIcon(int iconNumber) --{ -- if (iconNumber >= 0 && (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull())) { -- m_data.iconNumber = iconNumber; -- m_data.customIcon = QUuid(); -- emit groupModified(); -- emit groupDataChanged(this); -- } --} -- --void Group::setIcon(const QUuid& uuid) --{ -- if (!uuid.isNull() && m_data.customIcon != uuid) { -- m_data.customIcon = uuid; -- m_data.iconNumber = 0; -- emit groupModified(); -- emit groupDataChanged(this); -- } --} -- --void Group::setTimeInfo(const TimeInfo& timeInfo) --{ -- m_data.timeInfo = timeInfo; --} -- --void Group::setExpanded(bool expanded) --{ -- if (m_data.isExpanded != expanded) { -- m_data.isExpanded = expanded; -- emit groupNonDataChange(); -- } --} -- --void Group::setDefaultAutoTypeSequence(const QString& sequence) --{ -- set(m_data.defaultAutoTypeSequence, sequence); --} -- --void Group::setAutoTypeEnabled(TriState enable) --{ -- set(m_data.autoTypeEnabled, enable); --} -- --void Group::setSearchingEnabled(TriState enable) --{ -- set(m_data.searchingEnabled, enable); --} -- --void Group::setLastTopVisibleEntry(Entry* entry) --{ -- set(m_lastTopVisibleEntry, entry); --} -- --void Group::setExpires(bool value) --{ -- if (m_data.timeInfo.expires() != value) { -- m_data.timeInfo.setExpires(value); -- emit groupModified(); -- } --} -- --void Group::setExpiryTime(const QDateTime& dateTime) --{ -- if (m_data.timeInfo.expiryTime() != dateTime) { -- m_data.timeInfo.setExpiryTime(dateTime); -- emit groupModified(); -- } --} -- --void Group::setMergeMode(MergeMode newMode) --{ -- set(m_data.mergeMode, newMode); --} -- --Group* Group::parentGroup() --{ -- return m_parent; --} -- --const Group* Group::parentGroup() const --{ -- return m_parent; --} -- --void Group::setParent(Group* parent, int index) --{ -- Q_ASSERT(parent); -- Q_ASSERT(index >= -1 && index <= parent->children().size()); -- // setting a new parent for root groups is not allowed -- Q_ASSERT(!m_db || (m_db->rootGroup() != this)); -- -- bool moveWithinDatabase = (m_db && m_db == parent->m_db); -- -- if (index == -1) { -- index = parent->children().size(); -- -- if (parentGroup() == parent) { -- index--; -- } -- } -- -- if (m_parent == parent && parent->children().indexOf(this) == index) { -- return; -- } -- -- if (!moveWithinDatabase) { -- cleanupParent(); -- m_parent = parent; -- if (m_db) { -- recCreateDelObjects(); -- -- // copy custom icon to the new database -- if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->hasCustomIcon(iconUuid()) -- && !parent->m_db->metadata()->hasCustomIcon(iconUuid())) { -- parent->m_db->metadata()->addCustomIcon(iconUuid(), icon()); -- } -- } -- if (m_db != parent->m_db) { -- connectDatabaseSignalsRecursive(parent->m_db); -- } -- QObject::setParent(parent); -- emit groupAboutToAdd(this, index); -- Q_ASSERT(index <= parent->m_children.size()); -- parent->m_children.insert(index, this); -- } else { -- emit aboutToMove(this, parent, index); -- m_parent->m_children.removeAll(this); -- m_parent = parent; -- QObject::setParent(parent); -- Q_ASSERT(index <= parent->m_children.size()); -- parent->m_children.insert(index, this); -- } -- -- if (m_updateTimeinfo) { -- m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); -- } -- -- emit groupModified(); -- -- if (!moveWithinDatabase) { -- emit groupAdded(); -- } else { -- emit groupMoved(); -- } --} -- --void Group::setParent(Database* db) --{ -- Q_ASSERT(db); -- Q_ASSERT(db->rootGroup() == this); -- -- cleanupParent(); -- -- m_parent = nullptr; -- connectDatabaseSignalsRecursive(db); -- -- QObject::setParent(db); --} -- --QStringList Group::hierarchy(int height) const --{ -- QStringList hierarchy; -- const Group* group = this; -- const Group* parent = m_parent; -- -- if (height == 0) { -- return hierarchy; -- } -- -- hierarchy.prepend(group->name()); -- -- int level = 1; -- bool heightReached = level == height; -- -- while (parent && !heightReached) { -- group = group->parentGroup(); -- parent = group->parentGroup(); -- heightReached = ++level == height; -- -- hierarchy.prepend(group->name()); -- } -- -- return hierarchy; --} -- --bool Group::hasChildren() const --{ -- return !children().isEmpty(); --} -- --Database* Group::database() --{ -- return m_db; --} -- --const Database* Group::database() const --{ -- return m_db; --} -- --QList Group::children() --{ -- return m_children; --} -- --const QList& Group::children() const --{ -- return m_children; --} -- --QList Group::entries() --{ -- return m_entries; --} -- --const QList& Group::entries() const --{ -- return m_entries; --} -- --QList Group::entriesRecursive(bool includeHistoryItems) const --{ -- QList entryList; -- -- entryList.append(m_entries); -- -- if (includeHistoryItems) { -- for (Entry* entry : m_entries) { -- entryList.append(entry->historyItems()); -- } -- } -- -- for (Group* group : m_children) { -- entryList.append(group->entriesRecursive(includeHistoryItems)); -- } -- -- return entryList; --} -- --QList Group::referencesRecursive(const Entry* entry) const --{ -- auto entries = entriesRecursive(); -- return QtConcurrent::blockingFiltered(entries, -- [entry](const Entry* e) { return e->hasReferencesTo(entry->uuid()); }); --} -- --Entry* Group::findEntryByUuid(const QUuid& uuid, bool recursive) const --{ -- if (uuid.isNull()) { -- return nullptr; -- } -- -- auto entries = m_entries; -- if (recursive) { -- entries = entriesRecursive(false); -- } -- -- for (auto entry : entries) { -- if (entry->uuid() == uuid) { -- return entry; -- } -- } -- -- return nullptr; --} -- --Entry* Group::findEntryByPath(const QString& entryPath) --{ -- if (entryPath.isEmpty()) { -- return nullptr; -- } -- -- // Add a beginning slash if the search string contains a slash -- // We don't add a slash by default to allow searching by entry title -- QString normalizedEntryPath = entryPath; -- if (!normalizedEntryPath.startsWith("/") && normalizedEntryPath.contains("/")) { -- normalizedEntryPath = "/" + normalizedEntryPath; -- } -- return findEntryByPathRecursive(normalizedEntryPath, "/"); --} -- --Entry* Group::findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType) --{ -- Q_ASSERT_X(referenceType != EntryReferenceType::Unknown, -- "Database::findEntryRecursive", -- "Can't search entry with \"referenceType\" parameter equal to \"Unknown\""); -- -- const QList groups = groupsRecursive(true); -- -- for (const Group* group : groups) { -- bool found = false; -- const QList& entryList = group->entries(); -- for (Entry* entry : entryList) { -- switch (referenceType) { -- case EntryReferenceType::Unknown: -- return nullptr; -- case EntryReferenceType::Title: -- found = entry->title() == term; -- break; -- case EntryReferenceType::UserName: -- found = entry->username() == term; -- break; -- case EntryReferenceType::Password: -- found = entry->password() == term; -- break; -- case EntryReferenceType::Url: -- found = entry->url() == term; -- break; -- case EntryReferenceType::Notes: -- found = entry->notes() == term; -- break; -- case EntryReferenceType::QUuid: -- found = entry->uuid() == QUuid::fromRfc4122(QByteArray::fromHex(term.toLatin1())); -- break; -- case EntryReferenceType::CustomAttributes: -- found = entry->attributes()->containsValue(term); -- break; -- } -- -- if (found) { -- return entry; -- } -- } -- } -- -- return nullptr; --} -- --Entry* Group::findEntryByPathRecursive(const QString& entryPath, const QString& basePath) --{ -- // Return the first entry that matches the full path OR if there is no leading -- // slash, return the first entry title that matches -- for (Entry* entry : entries()) { -- // clang-format off -- if (entryPath == (basePath + entry->title()) -- || (!entryPath.startsWith("/") && entry->title() == entryPath)) { -- return entry; -- } -- // clang-format on -- } -- -- for (Group* group : children()) { -- Entry* entry = group->findEntryByPathRecursive(entryPath, basePath + group->name() + "/"); -- if (entry != nullptr) { -- return entry; -- } -- } -- -- return nullptr; --} -- --Group* Group::findGroupByPath(const QString& groupPath) --{ -- // normalize the groupPath by adding missing front and rear slashes. once. -- QString normalizedGroupPath; -- -- if (groupPath.isEmpty()) { -- normalizedGroupPath = QString("/"); // root group -- } else { -- // clang-format off -- normalizedGroupPath = (groupPath.startsWith("/") ? "" : "/") -- + groupPath -- + (groupPath.endsWith("/") ? "" : "/"); -- // clang-format on -- } -- return findGroupByPathRecursive(normalizedGroupPath, "/"); --} -- --Group* Group::findGroupByPathRecursive(const QString& groupPath, const QString& basePath) --{ -- // paths must be normalized -- Q_ASSERT(groupPath.startsWith("/") && groupPath.endsWith("/")); -- Q_ASSERT(basePath.startsWith("/") && basePath.endsWith("/")); -- -- if (groupPath == basePath) { -- return this; -- } -- -- for (Group* innerGroup : children()) { -- QString innerBasePath = basePath + innerGroup->name() + "/"; -- Group* group = innerGroup->findGroupByPathRecursive(groupPath, innerBasePath); -- if (group != nullptr) { -- return group; -- } -- } -- -- return nullptr; --} -- --QString Group::print(bool recursive, bool flatten, int depth) --{ -- QString response; -- QString prefix; -- -- if (flatten) { -- const QString separator("/"); -- prefix = hierarchy(depth).join(separator); -- if (!prefix.isEmpty()) { -- prefix += separator; -- } -- } else { -- prefix = QString(" ").repeated(depth); -- } -- -- if (entries().isEmpty() && children().isEmpty()) { -- response += prefix + tr("[empty]", "group has no children") + "\n"; -- return response; -- } -- -- for (Entry* entry : entries()) { -- response += prefix + entry->title() + "\n"; -- } -- -- for (Group* innerGroup : children()) { -- response += prefix + innerGroup->name() + "/\n"; -- if (recursive) { -- response += innerGroup->print(recursive, flatten, depth + 1); -- } -- } -- -- return response; --} -- --QList Group::groupsRecursive(bool includeSelf) const --{ -- QList groupList; -- if (includeSelf) { -- groupList.append(this); -- } -- -- for (const Group* group : asConst(m_children)) { -- groupList.append(group->groupsRecursive(true)); -- } -- -- return groupList; --} -- --QList Group::groupsRecursive(bool includeSelf) --{ -- QList groupList; -- if (includeSelf) { -- groupList.append(this); -- } -- -- for (Group* group : asConst(m_children)) { -- groupList.append(group->groupsRecursive(true)); -- } -- -- return groupList; --} -- --QSet Group::customIconsRecursive() const --{ -- QSet result; -- -- if (!iconUuid().isNull()) { -- result.insert(iconUuid()); -- } -- -- const QList entryList = entriesRecursive(true); -- for (Entry* entry : entryList) { -- if (!entry->iconUuid().isNull()) { -- result.insert(entry->iconUuid()); -- } -- } -- -- for (Group* group : m_children) { -- result.unite(group->customIconsRecursive()); -- } -- -- return result; --} -- --QList Group::usernamesRecursive(int topN) const --{ -- // Collect all usernames and sort for easy counting -- QHash countedUsernames; -- for (const auto* entry : entriesRecursive()) { -- const auto username = entry->username(); -- if (!username.isEmpty() && !entry->isAttributeReference(EntryAttributes::UserNameKey)) { -- countedUsernames.insert(username, ++countedUsernames[username]); -- } -- } -- -- // Sort username/frequency pairs by frequency and name -- QList> sortedUsernames; -- for (const auto& key : countedUsernames.keys()) { -- sortedUsernames.append({key, countedUsernames[key]}); -- } -- -- auto comparator = [](const QPair& arg1, const QPair& arg2) { -- if (arg1.second == arg2.second) { -- return arg1.first < arg2.first; -- } -- return arg1.second > arg2.second; -- }; -- -- std::sort(sortedUsernames.begin(), sortedUsernames.end(), comparator); -- -- // Take first topN usernames if set -- QList usernames; -- int actualUsernames = topN < 0 ? sortedUsernames.size() : std::min(topN, sortedUsernames.size()); -- for (int i = 0; i < actualUsernames; i++) { -- usernames.append(sortedUsernames[i].first); -- } -- -- return usernames; --} -- --Group* Group::findGroupByUuid(const QUuid& uuid) --{ -- if (uuid.isNull()) { -- return nullptr; -- } -- -- for (Group* group : groupsRecursive(true)) { -- if (group->uuid() == uuid) { -- return group; -- } -- } -- -- return nullptr; --} -- --Group* Group::findChildByName(const QString& name) --{ -- for (Group* group : asConst(m_children)) { -- if (group->name() == name) { -- return group; -- } -- } -- -- return nullptr; --} -- --/** -- * Creates a duplicate of this group. -- * Note that you need to copy the custom icons manually when inserting the -- * new group into another database. -- */ --Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) const --{ -- Group* clonedGroup = new Group(); -- -- clonedGroup->setUpdateTimeinfo(false); -- -- if (groupFlags & Group::CloneNewUuid) { -- clonedGroup->setUuid(QUuid::createUuid()); -- } else { -- clonedGroup->setUuid(this->uuid()); -- } -- -- clonedGroup->m_data = m_data; -- clonedGroup->m_customData->copyDataFrom(m_customData); -- -- if (groupFlags & Group::CloneIncludeEntries) { -- const QList entryList = entries(); -- for (Entry* entry : entryList) { -- Entry* clonedEntry = entry->clone(entryFlags); -- clonedEntry->setGroup(clonedGroup); -- } -- -- const QList childrenGroups = children(); -- for (Group* groupChild : childrenGroups) { -- Group* clonedGroupChild = groupChild->clone(entryFlags, groupFlags); -- clonedGroupChild->setParent(clonedGroup); -- } -- } -- -- clonedGroup->setUpdateTimeinfo(true); -- if (groupFlags & Group::CloneResetTimeInfo) { -- -- QDateTime now = Clock::currentDateTimeUtc(); -- clonedGroup->m_data.timeInfo.setCreationTime(now); -- clonedGroup->m_data.timeInfo.setLastModificationTime(now); -- clonedGroup->m_data.timeInfo.setLastAccessTime(now); -- clonedGroup->m_data.timeInfo.setLocationChanged(now); -- } -- -- return clonedGroup; --} -- --void Group::copyDataFrom(const Group* other) --{ -- if (set(m_data, other->m_data)) { -- emit groupDataChanged(this); -- } -- m_customData->copyDataFrom(other->m_customData); -- m_lastTopVisibleEntry = other->m_lastTopVisibleEntry; --} -- --void Group::addEntry(Entry* entry) --{ -- Q_ASSERT(entry); -- Q_ASSERT(!m_entries.contains(entry)); -- -- emit entryAboutToAdd(entry); -- -- m_entries << entry; -- connect(entry, SIGNAL(entryDataChanged(Entry*)), SIGNAL(entryDataChanged(Entry*))); -- if (m_db) { -- connect(entry, SIGNAL(entryModified()), m_db, SLOT(markAsModified())); -- } -- -- emit groupModified(); -- emit entryAdded(entry); --} -- --void Group::removeEntry(Entry* entry) --{ -- Q_ASSERT_X(m_entries.contains(entry), -- Q_FUNC_INFO, -- QString("Group %1 does not contain %2").arg(this->name(), entry->title()).toLatin1()); -- -- emit entryAboutToRemove(entry); -- -- entry->disconnect(this); -- if (m_db) { -- entry->disconnect(m_db); -- } -- m_entries.removeAll(entry); -- emit groupModified(); -- emit entryRemoved(entry); --} -- --void Group::moveEntryUp(Entry* entry) --{ -- int row = m_entries.indexOf(entry); -- if (row <= 0) { -- return; -- } -- -- emit entryAboutToMoveUp(row); -- m_entries.move(row, row - 1); -- emit entryMovedUp(); -- emit groupNonDataChange(); --} -- --void Group::moveEntryDown(Entry* entry) --{ -- int row = m_entries.indexOf(entry); -- if (row >= m_entries.size() - 1) { -- return; -- } -- -- emit entryAboutToMoveDown(row); -- m_entries.move(row, row + 1); -- emit entryMovedDown(); -- emit groupNonDataChange(); --} -- --void Group::connectDatabaseSignalsRecursive(Database* db) --{ -- if (m_db) { -- disconnect(m_db); -- } -- -- for (Entry* entry : asConst(m_entries)) { -- if (m_db) { -- entry->disconnect(m_db); -- } -- if (db) { -- connect(entry, SIGNAL(entryModified()), db, SLOT(markAsModified())); -- } -- } -- -- if (db) { -- // clang-format off -- connect(this, SIGNAL(groupDataChanged(Group*)), db, SIGNAL(groupDataChanged(Group*))); -- connect(this, SIGNAL(groupAboutToRemove(Group*)), db, SIGNAL(groupAboutToRemove(Group*))); -- connect(this, SIGNAL(groupRemoved()), db, SIGNAL(groupRemoved())); -- connect(this, SIGNAL(groupAboutToAdd(Group*, int)), db, SIGNAL(groupAboutToAdd(Group*,int))); -- connect(this, SIGNAL(groupAdded()), db, SIGNAL(groupAdded())); -- connect(this, SIGNAL(aboutToMove(Group*,Group*,int)), db, SIGNAL(groupAboutToMove(Group*,Group*,int))); -- connect(this, SIGNAL(groupMoved()), db, SIGNAL(groupMoved())); -- connect(this, SIGNAL(groupModified()), db, SLOT(markAsModified())); -- connect(this, SIGNAL(groupNonDataChange()), db, SLOT(markNonDataChange())); -- // clang-format on -- } -- -- m_db = db; -- -- for (Group* group : asConst(m_children)) { -- group->connectDatabaseSignalsRecursive(db); -- } --} -- --void Group::cleanupParent() --{ -- if (m_parent) { -- emit groupAboutToRemove(this); -- m_parent->m_children.removeAll(this); -- emit groupModified(); -- emit groupRemoved(); -- } --} -- --void Group::recCreateDelObjects() --{ -- if (m_db) { -- for (Entry* entry : asConst(m_entries)) { -- m_db->addDeletedObject(entry->uuid()); -- } -- -- for (Group* group : asConst(m_children)) { -- group->recCreateDelObjects(); -- } -- m_db->addDeletedObject(m_uuid); -- } --} -- --bool Group::resolveSearchingEnabled() const --{ -- switch (m_data.searchingEnabled) { -- case Inherit: -- if (!m_parent) { -- return true; -- } else { -- return m_parent->resolveSearchingEnabled(); -- } -- case Enable: -- return true; -- case Disable: -- return false; -- default: -- Q_ASSERT(false); -- return false; -- } --} -- --bool Group::resolveAutoTypeEnabled() const --{ -- switch (m_data.autoTypeEnabled) { -- case Inherit: -- if (!m_parent) { -- return true; -- } else { -- return m_parent->resolveAutoTypeEnabled(); -- } -- case Enable: -- return true; -- case Disable: -- return false; -- default: -- Q_ASSERT(false); -- return false; -- } --} -- --QStringList Group::locate(const QString& locateTerm, const QString& currentPath) const --{ -- // TODO: Replace with EntrySearcher -- QStringList response; -- if (locateTerm.isEmpty()) { -- return response; -- } -- -- for (const Entry* entry : asConst(m_entries)) { -- QString entryPath = currentPath + entry->title(); -- if (entryPath.contains(locateTerm, Qt::CaseInsensitive)) { -- response << entryPath; -- } -- } -- -- for (const Group* group : asConst(m_children)) { -- for (const QString& path : group->locate(locateTerm, currentPath + group->name() + QString("/"))) { -- response << path; -- } -- } -- -- return response; --} -- --Entry* Group::addEntryWithPath(const QString& entryPath) --{ -- if (entryPath.isEmpty() || findEntryByPath(entryPath)) { -- return nullptr; -- } -- -- QStringList groups = entryPath.split("/"); -- QString entryTitle = groups.takeLast(); -- QString groupPath = groups.join("/"); -- -- Group* group = findGroupByPath(groupPath); -- if (!group) { -- return nullptr; -- } -- -- auto* entry = new Entry(); -- entry->setTitle(entryTitle); -- entry->setUuid(QUuid::createUuid()); -- entry->setGroup(group); -- -- return entry; --} -- --void Group::applyGroupIconOnCreateTo(Entry* entry) --{ -- Q_ASSERT(entry); -- -- if (!config()->get(Config::UseGroupIconOnEntryCreation).toBool()) { -- return; -- } -- -- if (iconNumber() == Group::DefaultIconNumber && iconUuid().isNull()) { -- return; -- } -- -- applyGroupIconTo(entry); --} -- --void Group::applyGroupIconTo(Entry* entry) --{ -- Q_ASSERT(entry); -- -- if (iconUuid().isNull()) { -- entry->setIcon(iconNumber()); -- } else { -- entry->setIcon(iconUuid()); -- } --} -- --void Group::applyGroupIconTo(Group* other) --{ -- Q_ASSERT(other); -- -- if (iconUuid().isNull()) { -- other->setIcon(iconNumber()); -- } else { -- other->setIcon(iconUuid()); -- } --} -- --void Group::applyGroupIconToChildGroups() --{ -- for (Group* recursiveChild : groupsRecursive(false)) { -- applyGroupIconTo(recursiveChild); -- } --} -- --void Group::applyGroupIconToChildEntries() --{ -- for (Entry* recursiveEntry : entriesRecursive(false)) { -- applyGroupIconTo(recursiveEntry); -- } --} -- --void Group::sortChildrenRecursively(bool reverse) --{ -- std::sort( -- m_children.begin(), m_children.end(), [reverse](const Group* childGroup1, const Group* childGroup2) -> bool { -- QString name1 = childGroup1->name(); -- QString name2 = childGroup2->name(); -- return reverse ? name1.compare(name2, Qt::CaseInsensitive) > 0 -- : name1.compare(name2, Qt::CaseInsensitive) < 0; -- }); -- -- for (auto child : m_children) { -- child->sortChildrenRecursively(reverse); -- } -- -- emit groupModified(); --} -- --bool Group::GroupData::operator==(const Group::GroupData& other) const --{ -- return equals(other, CompareItemDefault); --} -- --bool Group::GroupData::operator!=(const Group::GroupData& other) const --{ -- return !(*this == other); --} -- --bool Group::GroupData::equals(const Group::GroupData& other, CompareItemOptions options) const --{ -- if (::compare(name, other.name, options) != 0) { -- return false; -- } -- if (::compare(notes, other.notes, options) != 0) { -- return false; -- } -- if (::compare(iconNumber, other.iconNumber) != 0) { -- return false; -- } -- if (::compare(customIcon, other.customIcon) != 0) { -- return false; -- } -- if (!timeInfo.equals(other.timeInfo, options)) { -- return false; -- } -- // TODO HNH: Some properties are configurable - should they be ignored? -- if (::compare(isExpanded, other.isExpanded, options) != 0) { -- return false; -- } -- if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { -- return false; -- } -- if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { -- return false; -- } -- if (::compare(searchingEnabled, other.searchingEnabled, options) != 0) { -- return false; -- } -- if (::compare(mergeMode, other.mergeMode, options) != 0) { -- return false; -- } -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Group.h keepassxc-2.6.4-patched/src/core/Group.h ---- keepassxc-2.6.4-orig/src/core/Group.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Group.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,234 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_GROUP_H --#define KEEPASSX_GROUP_H -- --#include --#include --#include -- --#include "core/CustomData.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/TimeInfo.h" -- --class Group : public QObject --{ -- Q_OBJECT -- --public: -- enum TriState -- { -- Inherit, -- Enable, -- Disable -- }; -- enum MergeMode -- { -- Default, // Determine merge strategy from parent or fallback (Synchronize) -- Duplicate, // lossy strategy regarding deletions, duplicate older changes in a new entry -- KeepLocal, // merge history forcing local as top regardless of age -- KeepRemote, // merge history forcing remote as top regardless of age -- KeepNewer, // merge history -- Synchronize, // merge history keeping most recent as top entry and appling deletions -- }; -- -- enum CloneFlag -- { -- CloneNoFlags = 0, -- CloneNewUuid = 1, // generate a random uuid for the clone -- CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time -- CloneIncludeEntries = 4, // clone the group entries -- CloneDefault = CloneNewUuid | CloneResetTimeInfo | CloneIncludeEntries, -- }; -- Q_DECLARE_FLAGS(CloneFlags, CloneFlag) -- -- struct GroupData -- { -- QString name; -- QString notes; -- int iconNumber; -- QUuid customIcon; -- TimeInfo timeInfo; -- bool isExpanded; -- QString defaultAutoTypeSequence; -- Group::TriState autoTypeEnabled; -- Group::TriState searchingEnabled; -- Group::MergeMode mergeMode; -- -- bool operator==(const GroupData& other) const; -- bool operator!=(const GroupData& other) const; -- bool equals(const GroupData& other, CompareItemOptions options) const; -- }; -- -- Group(); -- ~Group(); -- -- const QUuid& uuid() const; -- const QString uuidToHex() const; -- QString name() const; -- QString notes() const; -- QImage icon() const; -- QPixmap iconPixmap(IconSize size = IconSize::Default) const; -- int iconNumber() const; -- const QUuid& iconUuid() const; -- const TimeInfo& timeInfo() const; -- bool isExpanded() const; -- QString defaultAutoTypeSequence() const; -- QString effectiveAutoTypeSequence() const; -- Group::TriState autoTypeEnabled() const; -- Group::TriState searchingEnabled() const; -- Group::MergeMode mergeMode() const; -- bool resolveSearchingEnabled() const; -- bool resolveAutoTypeEnabled() const; -- Entry* lastTopVisibleEntry() const; -- bool isExpired() const; -- bool isRecycled() const; -- bool isEmpty() const; -- CustomData* customData(); -- const CustomData* customData() const; -- -- bool equals(const Group* other, CompareItemOptions options) const; -- -- static const int DefaultIconNumber; -- static const int RecycleBinIconNumber; -- static const QString RootAutoTypeSequence; -- -- Group* findChildByName(const QString& name); -- Entry* findEntryByUuid(const QUuid& uuid, bool recursive = true) const; -- Entry* findEntryByPath(const QString& entryPath); -- Entry* findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType); -- Group* findGroupByUuid(const QUuid& uuid); -- Group* findGroupByPath(const QString& groupPath); -- QStringList locate(const QString& locateTerm, const QString& currentPath = {"/"}) const; -- Entry* addEntryWithPath(const QString& entryPath); -- void setUuid(const QUuid& uuid); -- void setName(const QString& name); -- void setNotes(const QString& notes); -- void setIcon(int iconNumber); -- void setIcon(const QUuid& uuid); -- void setTimeInfo(const TimeInfo& timeInfo); -- void setExpanded(bool expanded); -- void setDefaultAutoTypeSequence(const QString& sequence); -- void setAutoTypeEnabled(TriState enable); -- void setSearchingEnabled(TriState enable); -- void setLastTopVisibleEntry(Entry* entry); -- void setExpires(bool value); -- void setExpiryTime(const QDateTime& dateTime); -- void setMergeMode(MergeMode newMode); -- -- bool canUpdateTimeinfo() const; -- void setUpdateTimeinfo(bool value); -- -- Group* parentGroup(); -- const Group* parentGroup() const; -- void setParent(Group* parent, int index = -1); -- QStringList hierarchy(int height = -1) const; -- bool hasChildren() const; -- -- Database* database(); -- const Database* database() const; -- QList children(); -- const QList& children() const; -- QList entries(); -- const QList& entries() const; -- Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group = nullptr); -- QList referencesRecursive(const Entry* entry) const; -- QList entriesRecursive(bool includeHistoryItems = false) const; -- QList groupsRecursive(bool includeSelf) const; -- QList groupsRecursive(bool includeSelf); -- QSet customIconsRecursive() const; -- QList usernamesRecursive(int topN = -1) const; -- -- Group* clone(Entry::CloneFlags entryFlags = Entry::CloneDefault, -- Group::CloneFlags groupFlags = Group::CloneDefault) const; -- -- void copyDataFrom(const Group* other); -- QString print(bool recursive = false, bool flatten = false, int depth = 0); -- -- void addEntry(Entry* entry); -- void removeEntry(Entry* entry); -- void moveEntryUp(Entry* entry); -- void moveEntryDown(Entry* entry); -- -- void applyGroupIconOnCreateTo(Entry* entry); -- void applyGroupIconTo(Entry* entry); -- void applyGroupIconTo(Group* other); -- void applyGroupIconToChildGroups(); -- void applyGroupIconToChildEntries(); -- -- void sortChildrenRecursively(bool reverse = false); -- --signals: -- void groupDataChanged(Group* group); -- void groupAboutToAdd(Group* group, int index); -- void groupAdded(); -- void groupAboutToRemove(Group* group); -- void groupRemoved(); -- void aboutToMove(Group* group, Group* toGroup, int index); -- void groupMoved(); -- void groupModified(); -- void groupNonDataChange(); -- void entryAboutToAdd(Entry* entry); -- void entryAdded(Entry* entry); -- void entryAboutToRemove(Entry* entry); -- void entryRemoved(Entry* entry); -- void entryAboutToMoveUp(int row); -- void entryMovedUp(); -- void entryAboutToMoveDown(int row); -- void entryMovedDown(); -- void entryDataChanged(Entry* entry); -- --private slots: -- void updateTimeinfo(); -- --private: -- template bool set(P& property, const V& value); -- -- void setParent(Database* db); -- -- void connectDatabaseSignalsRecursive(Database* db); -- void cleanupParent(); -- void recCreateDelObjects(); -- -- Entry* findEntryByPathRecursive(const QString& entryPath, const QString& basePath); -- Group* findGroupByPathRecursive(const QString& groupPath, const QString& basePath); -- -- QPointer m_db; -- QUuid m_uuid; -- GroupData m_data; -- QPointer m_lastTopVisibleEntry; -- QList m_children; -- QList m_entries; -- -- QPointer m_customData; -- -- QPointer m_parent; -- -- bool m_updateTimeinfo; -- -- friend void Database::setRootGroup(Group* group); -- friend Entry::~Entry(); -- friend void Entry::setGroup(Group* group); --}; -- --Q_DECLARE_OPERATORS_FOR_FLAGS(Group::CloneFlags) -- --#endif // KEEPASSX_GROUP_H -diff -urNr keepassxc-2.6.4-orig/src/core/HibpDownloader.cpp keepassxc-2.6.4-patched/src/core/HibpDownloader.cpp ---- keepassxc-2.6.4-orig/src/core/HibpDownloader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/HibpDownloader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,190 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "HibpDownloader.h" --#include "core/Config.h" --#include "core/Global.h" --#include "core/NetworkManager.h" -- --#include --#include --#include -- --namespace --{ -- /* -- * Return the SHA1 hash of the specified password in upper-case hex. -- * -- * The result is always exactly 40 characters long. -- */ -- QString sha1Hex(const QString& password) -- { -- // Get the binary SHA1 -- const auto sha1 = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Sha1); -- return sha1.toHex().toUpper(); -- } -- -- /* -- * Search a password's hash in the output of the HIBP web service. -- * -- * Returns the number of times the password is found in breaches, or -- * 0 if the password is not in the HIBP result. -- */ -- int pwnCount(const QString& password, const QString& hibpResult) -- { -- // The first 5 characters of the hash are in the URL already, -- // the HIBP result contains the remainder -- auto pos = hibpResult.indexOf(sha1Hex(password).mid(5)); -- if (pos < 0) { -- return 0; -- } -- -- // Skip past the sha1 and ':' -- pos += 36; -- -- // Find where the count ends -- auto end = hibpResult.indexOf('\n', pos); -- if (end < 0) { -- end = hibpResult.size(); -- } -- -- // Extract the count, remove remaining whitespace, and convert to int -- return hibpResult.midRef(pos, end - pos).trimmed().toInt(); -- } --} // namespace -- --HibpDownloader::HibpDownloader(QObject* parent) -- : QObject(parent) --{ --} -- --HibpDownloader::~HibpDownloader() --{ -- abort(); --} -- --/* -- * Add one password to the list list of passwords to check. -- * -- * Invoke this function once for every password to check, -- * then call validate(). -- */ --void HibpDownloader::add(const QString& password) --{ -- if (!m_pwdsToTry.contains(password)) { -- m_pwdsToTry << password; -- } --} -- --/* -- * Start validating the passwords against HIBP. -- */ --void HibpDownloader::validate() --{ -- for (auto password : m_pwdsToTry) { -- // The URL we query is https://api.pwnedpasswords.com/range/XXXXX, -- // where XXXXX is the first five bytes of the hex representation of -- // the password's SHA1. -- const auto url = QString("https://api.pwnedpasswords.com/range/") + sha1Hex(password).left(5); -- -- // HIBP requires clients to specify a user agent in the request -- // (https://haveibeenpwned.com/API/v3#UserAgent); however, in order -- // to minimize the amount of information we expose about ourselves, -- // we don't add the KeePassXC version number or platform. -- auto request = QNetworkRequest(url); -- request.setRawHeader("User-Agent", "KeePassXC"); -- -- // Finally, submit the request to HIBP. -- auto reply = getNetMgr()->get(request); -- connect(reply, &QNetworkReply::finished, this, &HibpDownloader::fetchFinished); -- connect(reply, &QIODevice::readyRead, this, &HibpDownloader::fetchReadyRead); -- m_replies.insert(reply, {password, {}}); -- } -- -- m_pwdsToTry.clear(); --} -- --int HibpDownloader::passwordsToValidate() const --{ -- return m_pwdsToTry.size(); --} -- --int HibpDownloader::passwordsRemaining() const --{ -- return m_replies.size(); --} -- --/* -- * Abort the current online activity (if any). -- */ --void HibpDownloader::abort() --{ -- for (auto reply : m_replies.keys()) { -- reply->abort(); -- reply->deleteLater(); -- } -- m_replies.clear(); --} -- --/* -- * Called when new data has been loaded from the HIBP server. -- */ --void HibpDownloader::fetchReadyRead() --{ -- const auto reply = qobject_cast(sender()); -- auto entry = m_replies.find(reply); -- if (entry != m_replies.end()) { -- entry->second += reply->readAll(); -- } --} -- --/* -- * Called after all data has been loaded from the HIBP server. -- */ --void HibpDownloader::fetchFinished() --{ -- const auto reply = qobject_cast(sender()); -- const auto entry = m_replies.find(reply); -- if (entry == m_replies.end()) { -- return; -- } -- -- // Get result status -- const auto ok = reply->error() == QNetworkReply::NoError; -- const auto err = reply->errorString(); -- -- const auto password = entry->first; -- const auto hibpReply = entry->second; -- -- reply->deleteLater(); -- m_replies.remove(reply); -- -- // If there was an error, assume it's permanent and abort -- // (don't process the rest of the password list). -- if (!ok) { -- auto msg = tr("Online password validation failed") + ":\n" + err; -- if (!hibpReply.isEmpty()) { -- msg += "\n" + hibpReply; -- } -- abort(); -- emit fetchFailed(msg); -- return; -- } -- -- // Current password validated, send the result to the caller -- emit hibpResult(password, pwnCount(password, hibpReply)); --} -diff -urNr keepassxc-2.6.4-orig/src/core/HibpDownloader.h keepassxc-2.6.4-patched/src/core/HibpDownloader.h ---- keepassxc-2.6.4-orig/src/core/HibpDownloader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/HibpDownloader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,72 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_HIBPDOWNLOADER_H --#define KEEPASSXC_HIBPDOWNLOADER_H -- --#include "config-keepassx.h" --#include --#include --#include -- --#ifndef WITH_XC_NETWORKING --#error This file requires KeePassXC to be built with network support. --#endif -- --class QNetworkReply; -- --/* -- * Check if a password has been hacked by looking it up on the -- * "Have I Been Pwned" website (https://haveibeenpwned.com/) -- * in the background. -- * -- * Usage: Pass the password to check to the ctor and process -- * the `finished` signal to get the result. Process the -- * `failed` signal to handle errors. -- */ --class HibpDownloader : public QObject --{ -- Q_OBJECT -- --public: -- explicit HibpDownloader(QObject* parent = nullptr); -- ~HibpDownloader() override; -- -- void add(const QString& password); -- void validate(); -- int passwordsToValidate() const; -- int passwordsRemaining() const; -- --signals: -- void hibpResult(const QString& password, int count); -- void fetchFailed(const QString& error); -- --public slots: -- void abort(); -- --private slots: -- void fetchFinished(); -- void fetchReadyRead(); -- --private: -- void fetchPassword(const QString& password); -- -- QStringList m_pwdsToTry; // The list of remaining passwords to validate -- QHash> m_replies; --}; -- --#endif // KEEPASSXC_HIBPDOWNLOADER_H -diff -urNr keepassxc-2.6.4-orig/src/core/HibpOffline.cpp keepassxc-2.6.4-patched/src/core/HibpOffline.cpp ---- keepassxc-2.6.4-orig/src/core/HibpOffline.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/HibpOffline.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,109 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "HibpOffline.h" -- --#include --#include -- --#include "core/Database.h" --#include "core/Group.h" -- --namespace HibpOffline --{ -- const std::size_t SHA1_BYTES = 20; -- -- enum class ParseResult -- { -- Ok, -- Eof, -- Error -- }; -- -- ParseResult parseHibpLine(QIODevice& input, QByteArray& sha1, int& count) -- { -- QByteArray hexSha1(SHA1_BYTES * 2, '\0'); -- const qint64 rc = input.read(hexSha1.data(), hexSha1.size()); -- if (rc == 0) { -- return ParseResult::Eof; -- } else if (rc != hexSha1.size()) { -- return ParseResult::Error; -- } -- -- sha1 = QByteArray::fromHex(hexSha1); -- -- char c; -- if (!input.getChar(&c) || c != ':') { -- return ParseResult::Error; -- } -- -- count = 0; -- while (true) { -- if (!input.getChar(&c)) { -- return ParseResult::Error; -- } -- -- if (c == '\n' || c == '\r') { -- break; -- } -- -- if (!('0' <= c && c <= '9')) { -- return ParseResult::Error; -- } -- -- count *= 10; -- count += (c - '0'); -- } -- -- while (1 == input.peek(&c, 1) && (c == '\n' || c == '\r')) { -- input.getChar(&c); -- } -- -- return ParseResult::Ok; -- } -- -- bool -- report(QSharedPointer db, QIODevice& hibpInput, QList>& findings, QString* error) -- { -- QMultiHash entriesBySha1; -- for (const auto* entry : db->rootGroup()->entriesRecursive()) { -- if (!entry->isRecycled()) { -- const auto sha1 = QCryptographicHash::hash(entry->password().toUtf8(), QCryptographicHash::Sha1); -- entriesBySha1.insert(sha1, entry); -- } -- } -- -- QByteArray sha1; -- for (quint64 lineNum = 1;; ++lineNum) { -- int count = 0; -- -- switch (parseHibpLine(hibpInput, sha1, count)) { -- case ParseResult::Eof: -- return true; -- case ParseResult::Error: -- *error = QObject::tr("HIBP file, line %1: parse error").arg(lineNum); -- return false; -- default: -- break; -- } -- -- for (const auto* entry : entriesBySha1.values(sha1)) { -- findings.append({entry, count}); -- } -- } -- } --} // namespace HibpOffline -diff -urNr keepassxc-2.6.4-orig/src/core/HibpOffline.h keepassxc-2.6.4-patched/src/core/HibpOffline.h ---- keepassxc-2.6.4-orig/src/core/HibpOffline.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/HibpOffline.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_HIBPOFFLINE_H --#define KEEPASSXC_HIBPOFFLINE_H -- --#include --#include --#include -- --class Database; --class Entry; -- --namespace HibpOffline --{ -- bool report(QSharedPointer db, -- QIODevice& hibpInput, -- QList>& findings, -- QString* error); --} -- --#endif // KEEPASSXC_HIBPOFFLINE_H -diff -urNr keepassxc-2.6.4-orig/src/core/IconDownloader.cpp keepassxc-2.6.4-patched/src/core/IconDownloader.cpp ---- keepassxc-2.6.4-orig/src/core/IconDownloader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/IconDownloader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,239 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "IconDownloader.h" --#include "core/Config.h" --#include "core/NetworkManager.h" -- --#include --#include --#include -- --#define MAX_REDIRECTS 5 -- --IconDownloader::IconDownloader(QObject* parent) -- : QObject(parent) -- , m_reply(nullptr) -- , m_redirects(0) --{ -- m_timeout.setSingleShot(true); -- connect(&m_timeout, SIGNAL(timeout()), SLOT(abortDownload())); --} -- --IconDownloader::~IconDownloader() --{ -- abortDownload(); --} -- --namespace --{ -- // Try to get the 2nd level domain of the host part of a QUrl. For example, -- // "foo.bar.example.com" would become "example.com", and "foo.bar.example.co.uk" -- // would become "example.co.uk". -- QString getSecondLevelDomain(const QUrl& url) -- { -- QString fqdn = url.host(); -- fqdn.truncate(fqdn.length() - url.topLevelDomain().length()); -- QStringList parts = fqdn.split('.'); -- QString newdom = parts.takeLast() + url.topLevelDomain(); -- return newdom; -- } -- -- QUrl convertVariantToUrl(const QVariant& var) -- { -- QUrl url; -- if (var.canConvert()) { -- url = var.toUrl(); -- } -- return url; -- } -- -- QUrl getRedirectTarget(QNetworkReply* reply) -- { -- QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); -- QUrl url = convertVariantToUrl(var); -- return url; -- } --} // namespace -- --void IconDownloader::setUrl(const QString& entryUrl) --{ -- m_url = entryUrl; -- QUrl url(m_url); -- if (!url.isValid()) { -- return; -- } -- -- m_redirects = 0; -- m_urlsToTry.clear(); -- -- if (url.scheme().isEmpty()) { -- url.setUrl(QString("https://%1").arg(url.toString())); -- } -- -- QString fullyQualifiedDomain = url.host(); -- -- // Determine if host portion of URL is an IP address by resolving it and -- // searching for a match with the returned address(es). -- bool hostIsIp = false; -- QList hostAddressess = QHostInfo::fromName(fullyQualifiedDomain).addresses(); -- for (const auto& addr : hostAddressess) { -- if (addr.toString() == fullyQualifiedDomain) { -- hostIsIp = true; -- } -- } -- -- // Determine the second-level domain, if available -- QString secondLevelDomain; -- if (!hostIsIp) { -- secondLevelDomain = getSecondLevelDomain(m_url); -- } -- -- // Start with the "fallback" url (if enabled) to try to get the best favicon -- if (config()->get(Config::Security_IconDownloadFallback).toBool()) { -- QUrl fallbackUrl = QUrl("https://icons.duckduckgo.com"); -- fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(fullyQualifiedDomain) + ".ico"); -- m_urlsToTry.append(fallbackUrl); -- -- // Also try a direct pull of the second-level domain (if possible) -- if (!hostIsIp && fullyQualifiedDomain != secondLevelDomain) { -- fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(secondLevelDomain) + ".ico"); -- m_urlsToTry.append(fallbackUrl); -- } -- } -- -- // Add a direct pull of the website's own favicon.ico file -- m_urlsToTry.append(QUrl(url.scheme() + "://" + fullyQualifiedDomain + "/favicon.ico")); -- -- // Also try a direct pull of the second-level domain (if possible) -- if (!hostIsIp && fullyQualifiedDomain != secondLevelDomain) { -- m_urlsToTry.append(QUrl(url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); -- } --} -- --void IconDownloader::download() --{ -- if (m_urlsToTry.isEmpty()) { -- return; -- } -- -- if (!m_timeout.isActive()) { -- int timeout = config()->get(Config::FaviconDownloadTimeout).toInt(); -- m_timeout.start(timeout * 1000); -- -- // Use the first URL to start the download process -- // If a favicon is not found, the next URL will be tried -- fetchFavicon(m_urlsToTry.takeFirst()); -- } --} -- --void IconDownloader::abortDownload() --{ -- if (m_reply) { -- m_reply->abort(); -- } --} -- --void IconDownloader::fetchFavicon(const QUrl& url) --{ -- m_bytesReceived.clear(); -- m_fetchUrl = url; -- -- QNetworkRequest request(url); -- m_reply = getNetMgr()->get(request); -- -- connect(m_reply, &QNetworkReply::finished, this, &IconDownloader::fetchFinished); -- connect(m_reply, &QIODevice::readyRead, this, &IconDownloader::fetchReadyRead); --} -- --void IconDownloader::fetchReadyRead() --{ -- m_bytesReceived += m_reply->readAll(); --} -- --void IconDownloader::fetchFinished() --{ -- QImage image; -- QString url = m_url; -- -- bool error = (m_reply->error() != QNetworkReply::NoError); -- QUrl redirectTarget = getRedirectTarget(m_reply); -- -- m_reply->deleteLater(); -- m_reply = nullptr; -- -- if (!error) { -- if (redirectTarget.isValid()) { -- // Redirected, we need to follow it, or fall through if we have -- // done too many redirects already. -- if (m_redirects < MAX_REDIRECTS) { -- m_redirects++; -- if (redirectTarget.isRelative()) { -- redirectTarget = m_fetchUrl.resolved(redirectTarget); -- } -- m_urlsToTry.prepend(redirectTarget); -- } -- } else { -- // No redirect, and we theoretically have some icon data now. -- image = parseImage(m_bytesReceived); -- } -- } -- -- if (!image.isNull()) { -- // Valid icon received -- m_timeout.stop(); -- emit finished(url, image); -- } else if (!m_urlsToTry.empty()) { -- // Try the next url -- m_redirects = 0; -- fetchFavicon(m_urlsToTry.takeFirst()); -- } else { -- // No icon found -- m_timeout.stop(); -- emit finished(url, image); -- } --} -- --/** -- * Parse fetched image bytes. -- * -- * Parses the given byte array into a QImage. Unlike QImage::loadFromData(), this method -- * tries to extract the highest resolution image from .ICO files. -- * -- * @param imageBytes raw image bytes -- * @return parsed image -- */ --QImage IconDownloader::parseImage(QByteArray& imageBytes) const --{ -- QBuffer buff(&imageBytes); -- buff.open(QIODevice::ReadOnly); -- QImageReader reader(&buff); -- -- if (reader.imageCount() <= 0) { -- return reader.read(); -- } -- -- QImage img; -- for (int i = 0; i < reader.imageCount(); ++i) { -- if (img.isNull() || reader.size().width() > img.size().width()) { -- img = reader.read(); -- } -- reader.jumpToNextImage(); -- } -- -- return img; --} -diff -urNr keepassxc-2.6.4-orig/src/core/IconDownloader.h keepassxc-2.6.4-patched/src/core/IconDownloader.h ---- keepassxc-2.6.4-orig/src/core/IconDownloader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/IconDownloader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ICONDOWNLOADER_H --#define KEEPASSXC_ICONDOWNLOADER_H -- --#include --#include --#include --#include -- --#include "core/Global.h" -- --class QNetworkReply; -- --class IconDownloader : public QObject --{ -- Q_OBJECT -- --public: -- explicit IconDownloader(QObject* parent = nullptr); -- ~IconDownloader() override; -- -- void setUrl(const QString& entryUrl); -- void download(); -- --signals: -- void finished(const QString& entryUrl, const QImage& image); -- --public slots: -- void abortDownload(); -- --private slots: -- void fetchFinished(); -- void fetchReadyRead(); -- --private: -- void fetchFavicon(const QUrl& url); -- QImage parseImage(QByteArray& imageBytes) const; -- -- QString m_url; -- QUrl m_fetchUrl; -- QList m_urlsToTry; -- QByteArray m_bytesReceived; -- QNetworkReply* m_reply; -- QTimer m_timeout; -- int m_redirects; --}; -- --#endif // KEEPASSXC_ICONDOWNLOADER_H -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/src/core/InactivityTimer.cpp keepassxc-2.6.4-patched/src/core/InactivityTimer.cpp ---- keepassxc-2.6.4-orig/src/core/InactivityTimer.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/InactivityTimer.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,81 +0,0 @@ --/* -- * Copyright (C) 2014 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "InactivityTimer.h" -- --#include --#include -- --InactivityTimer::InactivityTimer(QObject* parent) -- : QObject(parent) -- , m_timer(new QTimer(this)) -- , m_active(false) --{ -- m_timer->setSingleShot(true); -- connect(m_timer, SIGNAL(timeout()), SLOT(timeout())); --} -- --void InactivityTimer::setInactivityTimeout(int inactivityTimeout) --{ -- Q_ASSERT(inactivityTimeout > 0); -- -- m_timer->setInterval(inactivityTimeout); --} -- --void InactivityTimer::activate() --{ -- if (!m_active) { -- qApp->installEventFilter(this); -- } -- m_active = true; -- m_timer->start(); --} -- --void InactivityTimer::deactivate() --{ -- qApp->removeEventFilter(this); -- m_active = false; -- m_timer->stop(); --} -- --bool InactivityTimer::eventFilter(QObject* watched, QEvent* event) --{ -- const QEvent::Type type = event->type(); -- // clang-format off -- if ((type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) -- || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) -- || (type == QEvent::Wheel)) { -- m_timer->start(); -- } -- // clang-format on -- -- return QObject::eventFilter(watched, event); --} -- --void InactivityTimer::timeout() --{ -- // make sure we don't emit the signal a second time while it's still processed -- if (!m_emitMutx.tryLock()) { -- return; -- } -- -- if (m_active && !m_timer->isActive()) { -- emit inactivityDetected(); -- } -- -- m_emitMutx.unlock(); --} -diff -urNr keepassxc-2.6.4-orig/src/core/InactivityTimer.h keepassxc-2.6.4-patched/src/core/InactivityTimer.h ---- keepassxc-2.6.4-orig/src/core/InactivityTimer.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/InactivityTimer.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,51 +0,0 @@ --/* -- * Copyright (C) 2014 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_INACTIVITYTIMER_H --#define KEEPASSX_INACTIVITYTIMER_H -- --#include --#include -- --class QTimer; -- --class InactivityTimer : public QObject --{ -- Q_OBJECT -- --public: -- explicit InactivityTimer(QObject* parent = nullptr); -- void setInactivityTimeout(int inactivityTimeout); -- void activate(); -- void deactivate(); -- --signals: -- void inactivityDetected(); -- --protected: -- bool eventFilter(QObject* watched, QEvent* event); -- --private slots: -- void timeout(); -- --private: -- QTimer* m_timer; -- bool m_active; -- QMutex m_emitMutx; --}; -- --#endif // KEEPASSX_INACTIVITYTIMER_H -diff -urNr keepassxc-2.6.4-orig/src/core/ListDeleter.h keepassxc-2.6.4-patched/src/core/ListDeleter.h ---- keepassxc-2.6.4-orig/src/core/ListDeleter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ListDeleter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,39 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_LISTDELETER_H --#define KEEPASSX_LISTDELETER_H -- --#include -- --template class ListDeleter --{ --public: -- inline explicit ListDeleter(QList* list) -- : m_list(list) -- { -- } -- inline ~ListDeleter() -- { -- qDeleteAll(*m_list); -- } -- --private: -- QList* m_list; --}; -- --#endif // KEEPASSX_LISTDELETER_H -diff -urNr keepassxc-2.6.4-orig/src/core/MacPasteboard.cpp keepassxc-2.6.4-patched/src/core/MacPasteboard.cpp ---- keepassxc-2.6.4-orig/src/core/MacPasteboard.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/MacPasteboard.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,99 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "MacPasteboard.h" -- --QString MacPasteboard::convertorName() --{ -- return QLatin1String("MacPasteboard"); --} -- --QString MacPasteboard::flavorFor(const QString& mimetype) --{ -- if (mimetype == QLatin1String("text/plain")) { -- return QLatin1String("public.utf8-plain-text"); -- } else if (mimetype == QLatin1String("application/x-nspasteboard-concealed-type")) { -- return QLatin1String("org.nspasteboard.ConcealedType"); -- } -- -- int i = mimetype.indexOf(QLatin1String("charset=")); -- -- if (i >= 0) { -- QString cs(mimetype.mid(i + 8).toLower()); -- i = cs.indexOf(QLatin1Char(';')); -- -- if (i >= 0) { -- cs = cs.left(i); -- } -- -- if (cs == QLatin1String("system")) { -- return QLatin1String("public.utf8-plain-text"); -- } else if (cs == QLatin1String("iso-10646-ucs-2") || cs == QLatin1String("utf16")) { -- return QLatin1String("public.utf16-plain-text"); -- } -- } -- return QString(); --} -- --QString MacPasteboard::mimeFor(QString flavor) --{ -- if (flavor == QLatin1String("public.utf8-plain-text")) -- return QLatin1String("text/plain"); -- if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) -- return QLatin1String("application/x-nspasteboard-concealed-type"); -- if (flavor == QLatin1String("public.utf16-plain-text")) -- return QLatin1String("text/plain;charset=utf16"); -- return QString(); --} -- --bool MacPasteboard::canConvert(const QString& mimetype, QString flavor) --{ -- Q_UNUSED(mimetype); -- Q_UNUSED(flavor); -- return true; --} -- --QVariant MacPasteboard::convertToMime(const QString& mimetype, QList data, QString flavor) --{ -- if (data.count() > 1) -- qWarning("QMime::convertToMime: Cannot handle multiple member data"); -- const QByteArray& firstData = data.first(); -- QVariant ret; -- if (flavor == QLatin1String("public.utf8-plain-text")) { -- ret = QString::fromUtf8(firstData); -- } else if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) { -- ret = QString::fromUtf8(firstData); -- } else if (flavor == QLatin1String("public.utf16-plain-text")) { -- ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData); -- } else { -- qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype)); -- } -- return ret; --} -- --QList MacPasteboard::convertFromMime(const QString&, QVariant data, QString flavor) --{ -- QList ret; -- QString string = data.toString(); -- if (flavor == QLatin1String("public.utf8-plain-text")) -- ret.append(string.toUtf8()); -- else if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) -- ret.append(string.toUtf8()); -- else if (flavor == QLatin1String("public.utf16-plain-text")) -- ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string)); -- return ret; --} -diff -urNr keepassxc-2.6.4-orig/src/core/MacPasteboard.h keepassxc-2.6.4-patched/src/core/MacPasteboard.h ---- keepassxc-2.6.4-orig/src/core/MacPasteboard.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/MacPasteboard.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_MACPASTEBOARD_H --#define KEEPASSXC_MACPASTEBOARD_H -- --#include --#include --#include -- --class MacPasteboard : public QObject, public QMacPasteboardMime --{ --public: -- explicit MacPasteboard() -- : QMacPasteboardMime(MIME_ALL) -- { -- } -- -- QString convertorName() override; -- bool canConvert(const QString& mime, QString flav) override; -- QString mimeFor(QString flav) override; -- QString flavorFor(const QString& mime) override; -- QVariant convertToMime(const QString& mime, QList data, QString flav) override; -- QList convertFromMime(const QString& mime, QVariant data, QString flav) override; --}; -- --#endif // KEEPASSXC_MACPASTEBOARD_H -diff -urNr keepassxc-2.6.4-orig/src/core/Merger.cpp keepassxc-2.6.4-patched/src/core/Merger.cpp ---- keepassxc-2.6.4-orig/src/core/Merger.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Merger.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,661 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Merger.h" -- --#include "core/Clock.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Metadata.h" -- --Merger::Merger(const Database* sourceDb, Database* targetDb) -- : m_mode(Group::Default) --{ -- if (!sourceDb || !targetDb) { -- Q_ASSERT(sourceDb && targetDb); -- return; -- } -- -- m_context = MergeContext{ -- sourceDb, targetDb, sourceDb->rootGroup(), targetDb->rootGroup(), sourceDb->rootGroup(), targetDb->rootGroup()}; --} -- --Merger::Merger(const Group* sourceGroup, Group* targetGroup) -- : m_mode(Group::Default) --{ -- if (!sourceGroup || !targetGroup) { -- Q_ASSERT(sourceGroup && targetGroup); -- return; -- } -- -- m_context = MergeContext{sourceGroup->database(), -- targetGroup->database(), -- sourceGroup->database()->rootGroup(), -- targetGroup->database()->rootGroup(), -- sourceGroup, -- targetGroup}; --} -- --void Merger::setForcedMergeMode(Group::MergeMode mode) --{ -- m_mode = mode; --} -- --void Merger::resetForcedMergeMode() --{ -- m_mode = Group::Default; --} -- --QStringList Merger::merge() --{ -- // Order of merge steps is important - it is possible that we -- // create some items before deleting them afterwards -- ChangeList changes; -- changes << mergeGroup(m_context); -- changes << mergeDeletions(m_context); -- changes << mergeMetadata(m_context); -- -- // qDebug("Merged %s", qPrintable(changes.join("\n\t"))); -- -- // At this point we have a list of changes we may want to show the user -- if (!changes.isEmpty()) { -- m_context.m_targetDb->markAsModified(); -- } -- return changes; --} -- --Merger::ChangeList Merger::mergeGroup(const MergeContext& context) --{ -- ChangeList changes; -- // merge entries -- const QList sourceEntries = context.m_sourceGroup->entries(); -- for (Entry* sourceEntry : sourceEntries) { -- Entry* targetEntry = context.m_targetRootGroup->findEntryByUuid(sourceEntry->uuid()); -- if (!targetEntry) { -- changes << tr("Creating missing %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); -- // This entry does not exist at all. Create it. -- targetEntry = sourceEntry->clone(Entry::CloneIncludeHistory); -- moveEntry(targetEntry, context.m_targetGroup); -- } else { -- // Entry is already present in the database. Update it. -- const bool locationChanged = -- targetEntry->timeInfo().locationChanged() < sourceEntry->timeInfo().locationChanged(); -- if (locationChanged && targetEntry->group() != context.m_targetGroup) { -- changes << tr("Relocating %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); -- moveEntry(targetEntry, context.m_targetGroup); -- } -- changes << resolveEntryConflict(context, sourceEntry, targetEntry); -- } -- } -- -- // merge groups recursively -- const QList sourceChildGroups = context.m_sourceGroup->children(); -- for (Group* sourceChildGroup : sourceChildGroups) { -- Group* targetChildGroup = context.m_targetRootGroup->findGroupByUuid(sourceChildGroup->uuid()); -- if (!targetChildGroup) { -- changes << tr("Creating missing %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); -- targetChildGroup = sourceChildGroup->clone(Entry::CloneNoFlags, Group::CloneNoFlags); -- moveGroup(targetChildGroup, context.m_targetGroup); -- TimeInfo timeinfo = targetChildGroup->timeInfo(); -- timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); -- targetChildGroup->setTimeInfo(timeinfo); -- } else { -- bool locationChanged = -- targetChildGroup->timeInfo().locationChanged() < sourceChildGroup->timeInfo().locationChanged(); -- if (locationChanged && targetChildGroup->parent() != context.m_targetGroup) { -- changes << tr("Relocating %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); -- moveGroup(targetChildGroup, context.m_targetGroup); -- TimeInfo timeinfo = targetChildGroup->timeInfo(); -- timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); -- targetChildGroup->setTimeInfo(timeinfo); -- } -- changes << resolveGroupConflict(context, sourceChildGroup, targetChildGroup); -- } -- MergeContext subcontext{context.m_sourceDb, -- context.m_targetDb, -- context.m_sourceRootGroup, -- context.m_targetRootGroup, -- sourceChildGroup, -- targetChildGroup}; -- changes << mergeGroup(subcontext); -- } -- return changes; --} -- --Merger::ChangeList --Merger::resolveGroupConflict(const MergeContext& context, const Group* sourceChildGroup, Group* targetChildGroup) --{ -- Q_UNUSED(context); -- ChangeList changes; -- -- const QDateTime timeExisting = targetChildGroup->timeInfo().lastModificationTime(); -- const QDateTime timeOther = sourceChildGroup->timeInfo().lastModificationTime(); -- -- // only if the other group is newer, update the existing one. -- if (timeExisting < timeOther) { -- changes << tr("Overwriting %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); -- targetChildGroup->setName(sourceChildGroup->name()); -- targetChildGroup->setNotes(sourceChildGroup->notes()); -- if (sourceChildGroup->iconNumber() == 0) { -- targetChildGroup->setIcon(sourceChildGroup->iconUuid()); -- } else { -- targetChildGroup->setIcon(sourceChildGroup->iconNumber()); -- } -- targetChildGroup->setExpiryTime(sourceChildGroup->timeInfo().expiryTime()); -- TimeInfo timeInfo = targetChildGroup->timeInfo(); -- timeInfo.setLastModificationTime(timeOther); -- targetChildGroup->setTimeInfo(timeInfo); -- } -- return changes; --} -- --bool Merger::markOlderEntry(Entry* entry) --{ -- entry->attributes()->set( -- "merged", tr("older entry merged from database \"%1\"").arg(entry->group()->database()->metadata()->name())); -- return true; --} -- --void Merger::moveEntry(Entry* entry, Group* targetGroup) --{ -- Q_ASSERT(entry); -- Group* sourceGroup = entry->group(); -- if (sourceGroup == targetGroup) { -- return; -- } -- const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; -- if (sourceGroup) { -- sourceGroup->setUpdateTimeinfo(false); -- } -- const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; -- if (targetGroup) { -- targetGroup->setUpdateTimeinfo(false); -- } -- const bool entryUpdateTimeInfo = entry->canUpdateTimeinfo(); -- entry->setUpdateTimeinfo(false); -- -- entry->setGroup(targetGroup); -- -- entry->setUpdateTimeinfo(entryUpdateTimeInfo); -- if (targetGroup) { -- targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); -- } -- if (sourceGroup) { -- sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); -- } --} -- --void Merger::moveGroup(Group* group, Group* targetGroup) --{ -- Q_ASSERT(group); -- Group* sourceGroup = group->parentGroup(); -- if (sourceGroup == targetGroup) { -- return; -- } -- const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; -- if (sourceGroup) { -- sourceGroup->setUpdateTimeinfo(false); -- } -- const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; -- if (targetGroup) { -- targetGroup->setUpdateTimeinfo(false); -- } -- const bool groupUpdateTimeInfo = group->canUpdateTimeinfo(); -- group->setUpdateTimeinfo(false); -- -- group->setParent(targetGroup); -- -- group->setUpdateTimeinfo(groupUpdateTimeInfo); -- if (targetGroup) { -- targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); -- } -- if (sourceGroup) { -- sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); -- } --} -- --void Merger::eraseEntry(Entry* entry) --{ -- Database* database = entry->database(); -- // most simple method to remove an item from DeletedObjects :( -- const QList deletions = database->deletedObjects(); -- Group* parentGroup = entry->group(); -- const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; -- if (parentGroup) { -- parentGroup->setUpdateTimeinfo(false); -- } -- delete entry; -- if (parentGroup) { -- parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); -- } -- database->setDeletedObjects(deletions); --} -- --void Merger::eraseGroup(Group* group) --{ -- Database* database = group->database(); -- // most simple method to remove an item from DeletedObjects :( -- const QList deletions = database->deletedObjects(); -- Group* parentGroup = group->parentGroup(); -- const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; -- if (parentGroup) { -- parentGroup->setUpdateTimeinfo(false); -- } -- delete group; -- if (parentGroup) { -- parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); -- } -- database->setDeletedObjects(deletions); --} -- --Merger::ChangeList --Merger::resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) --{ -- ChangeList changes; -- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), -- sourceEntry->timeInfo().lastModificationTime(), -- CompareItemIgnoreMilliseconds); -- // if one entry is newer, create a clone and add it to the group -- if (comparison < 0) { -- Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); -- moveEntry(clonedEntry, context.m_targetGroup); -- markOlderEntry(targetEntry); -- changes << tr("Adding backup for older target %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); -- } else if (comparison > 0) { -- Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); -- moveEntry(clonedEntry, context.m_targetGroup); -- markOlderEntry(clonedEntry); -- changes << tr("Adding backup for older source %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); -- } -- return changes; --} -- --Merger::ChangeList --Merger::resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) --{ -- Q_UNUSED(context); -- ChangeList changes; -- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), -- sourceEntry->timeInfo().lastModificationTime(), -- CompareItemIgnoreMilliseconds); -- if (comparison < 0) { -- // we need to make our older entry "newer" than the new entry - therefore -- // we just create a new history entry without any changes - this preserves -- // the old state before merging the new state and updates the timestamp -- // the merge takes care, that the newer entry is sorted inbetween both entries -- // this type of merge changes the database timestamp since reapplying the -- // old entry is an active change of the database! -- changes << tr("Reapplying older target entry on top of newer source %1 [%2]") -- .arg(targetEntry->title(), targetEntry->uuidToHex()); -- Entry* agedTargetEntry = targetEntry->clone(Entry::CloneNoFlags); -- targetEntry->addHistoryItem(agedTargetEntry); -- } -- return changes; --} -- --Merger::ChangeList --Merger::resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) --{ -- Q_UNUSED(context); -- ChangeList changes; -- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), -- sourceEntry->timeInfo().lastModificationTime(), -- CompareItemIgnoreMilliseconds); -- if (comparison > 0) { -- // we need to make our older entry "newer" than the new entry - therefore -- // we just create a new history entry without any changes - this preserves -- // the old state before merging the new state and updates the timestamp -- // the merge takes care, that the newer entry is sorted inbetween both entries -- // this type of merge changes the database timestamp since reapplying the -- // old entry is an active change of the database! -- changes << tr("Reapplying older source entry on top of newer target %1 [%2]") -- .arg(targetEntry->title(), targetEntry->uuidToHex()); -- targetEntry->beginUpdate(); -- targetEntry->copyDataFrom(sourceEntry); -- targetEntry->endUpdate(); -- // History item is created by endUpdate since we should have changes -- } -- return changes; --} -- --Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContext& context, -- const Entry* sourceEntry, -- Entry* targetEntry, -- Group::MergeMode mergeMethod) --{ -- Q_UNUSED(context); -- -- ChangeList changes; -- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), -- sourceEntry->timeInfo().lastModificationTime(), -- CompareItemIgnoreMilliseconds); -- if (comparison < 0) { -- Group* currentGroup = targetEntry->group(); -- Entry* clonedEntry = sourceEntry->clone(Entry::CloneIncludeHistory); -- qDebug("Merge %s/%s with alien on top under %s", -- qPrintable(targetEntry->title()), -- qPrintable(sourceEntry->title()), -- qPrintable(currentGroup->name())); -- changes << tr("Synchronizing from newer source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); -- moveEntry(clonedEntry, currentGroup); -- mergeHistory(targetEntry, clonedEntry, mergeMethod); -- eraseEntry(targetEntry); -- } else { -- qDebug("Merge %s/%s with local on top/under %s", -- qPrintable(targetEntry->title()), -- qPrintable(sourceEntry->title()), -- qPrintable(targetEntry->group()->name())); -- const bool changed = mergeHistory(sourceEntry, targetEntry, mergeMethod); -- if (changed) { -- changes -- << tr("Synchronizing from older source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); -- } -- } -- return changes; --} -- --Merger::ChangeList --Merger::resolveEntryConflict(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) --{ -- ChangeList changes; -- // We need to cut off the milliseconds since the persistent format only supports times down to seconds -- // so when we import data from a remote source, it may represent the (or even some msec newer) data -- // which may be discarded due to higher runtime precision -- -- Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; -- switch (mergeMode) { -- case Group::Duplicate: -- changes << resolveEntryConflict_Duplicate(context, sourceEntry, targetEntry); -- break; -- -- case Group::KeepLocal: -- changes << resolveEntryConflict_KeepLocal(context, sourceEntry, targetEntry); -- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); -- break; -- -- case Group::KeepRemote: -- changes << resolveEntryConflict_KeepRemote(context, sourceEntry, targetEntry); -- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); -- break; -- -- case Group::Synchronize: -- case Group::KeepNewer: -- // nothing special to do since resolveEntryConflictMergeHistories takes care to use the newest entry -- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); -- break; -- -- default: -- // do nothing -- break; -- } -- return changes; --} -- --bool Merger::mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod) --{ -- Q_UNUSED(mergeMethod); -- const auto targetHistoryItems = targetEntry->historyItems(); -- const auto sourceHistoryItems = sourceEntry->historyItems(); -- const int comparison = compare(sourceEntry->timeInfo().lastModificationTime(), -- targetEntry->timeInfo().lastModificationTime(), -- CompareItemIgnoreMilliseconds); -- const bool preferLocal = mergeMethod == Group::KeepLocal || comparison < 0; -- const bool preferRemote = mergeMethod == Group::KeepRemote || comparison > 0; -- -- QMap merged; -- for (Entry* historyItem : targetHistoryItems) { -- const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); -- if (merged.contains(modificationTime) -- && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { -- ::qWarning("Inconsistent history entry of %s[%s] at %s contains conflicting changes - conflict resolution " -- "may lose data!", -- qPrintable(sourceEntry->title()), -- qPrintable(sourceEntry->uuidToHex()), -- qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); -- } -- merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); -- } -- for (Entry* historyItem : sourceHistoryItems) { -- // Items with same modification-time changes will be regarded as same (like KeePass2) -- const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); -- if (merged.contains(modificationTime) -- && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { -- ::qWarning( -- "History entry of %s[%s] at %s contains conflicting changes - conflict resolution may lose data!", -- qPrintable(sourceEntry->title()), -- qPrintable(sourceEntry->uuidToHex()), -- qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); -- } -- if (preferRemote && merged.contains(modificationTime)) { -- // forcefully apply the remote history item -- delete merged.take(modificationTime); -- } -- if (!merged.contains(modificationTime)) { -- merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); -- } -- } -- -- const QDateTime targetModificationTime = Clock::serialized(targetEntry->timeInfo().lastModificationTime()); -- const QDateTime sourceModificationTime = Clock::serialized(sourceEntry->timeInfo().lastModificationTime()); -- if (targetModificationTime == sourceModificationTime -- && !targetEntry->equals(sourceEntry, -- CompareItemIgnoreMilliseconds | CompareItemIgnoreHistory | CompareItemIgnoreLocation)) { -- ::qWarning("Entry of %s[%s] contains conflicting changes - conflict resolution may lose data!", -- qPrintable(sourceEntry->title()), -- qPrintable(sourceEntry->uuidToHex())); -- } -- -- if (targetModificationTime < sourceModificationTime) { -- if (preferLocal && merged.contains(targetModificationTime)) { -- // forcefully apply the local history item -- delete merged.take(targetModificationTime); -- } -- if (!merged.contains(targetModificationTime)) { -- merged[targetModificationTime] = targetEntry->clone(Entry::CloneNoFlags); -- } -- } else if (targetModificationTime > sourceModificationTime) { -- if (preferRemote && !merged.contains(sourceModificationTime)) { -- // forcefully apply the remote history item -- delete merged.take(sourceModificationTime); -- } -- if (!merged.contains(sourceModificationTime)) { -- merged[sourceModificationTime] = sourceEntry->clone(Entry::CloneNoFlags); -- } -- } -- -- bool changed = false; -- const int maxItems = targetEntry->database()->metadata()->historyMaxItems(); -- const auto updatedHistoryItems = merged.values(); -- for (int i = 0; i < maxItems; ++i) { -- const Entry* oldEntry = targetHistoryItems.value(targetHistoryItems.count() - i); -- const Entry* newEntry = updatedHistoryItems.value(updatedHistoryItems.count() - i); -- if (!oldEntry && !newEntry) { -- continue; -- } -- if (oldEntry && newEntry && oldEntry->equals(newEntry, CompareItemIgnoreMilliseconds)) { -- continue; -- } -- changed = true; -- break; -- } -- if (!changed) { -- qDeleteAll(updatedHistoryItems); -- return false; -- } -- // We need to prevent any modification to the database since every change should be tracked either -- // in a clone history item or in the Entry itself -- const TimeInfo timeInfo = targetEntry->timeInfo(); -- const bool blockedSignals = targetEntry->blockSignals(true); -- bool updateTimeInfo = targetEntry->canUpdateTimeinfo(); -- targetEntry->setUpdateTimeinfo(false); -- targetEntry->removeHistoryItems(targetHistoryItems); -- for (Entry* historyItem : merged) { -- Q_ASSERT(!historyItem->parent()); -- targetEntry->addHistoryItem(historyItem); -- } -- targetEntry->truncateHistory(); -- targetEntry->blockSignals(blockedSignals); -- targetEntry->setUpdateTimeinfo(updateTimeInfo); -- Q_ASSERT(timeInfo == targetEntry->timeInfo()); -- Q_UNUSED(timeInfo); -- return true; --} -- --Merger::ChangeList Merger::mergeDeletions(const MergeContext& context) --{ -- ChangeList changes; -- Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; -- if (mergeMode != Group::Synchronize) { -- // no deletions are applied for any other strategy! -- return changes; -- } -- -- const auto targetDeletions = context.m_targetDb->deletedObjects(); -- const auto sourceDeletions = context.m_sourceDb->deletedObjects(); -- -- QList deletions; -- QMap mergedDeletions; -- QList entries; -- QList groups; -- -- for (const auto& object : (targetDeletions + sourceDeletions)) { -- if (!mergedDeletions.contains(object.uuid)) { -- mergedDeletions[object.uuid] = object; -- -- auto* entry = context.m_targetRootGroup->findEntryByUuid(object.uuid); -- if (entry) { -- entries << entry; -- continue; -- } -- auto* group = context.m_targetRootGroup->findGroupByUuid(object.uuid); -- if (group) { -- groups << group; -- continue; -- } -- deletions << object; -- continue; -- } -- if (mergedDeletions[object.uuid].deletionTime > object.deletionTime) { -- mergedDeletions[object.uuid] = object; -- } -- } -- -- while (!entries.isEmpty()) { -- auto* entry = entries.takeFirst(); -- const auto& object = mergedDeletions[entry->uuid()]; -- if (entry->timeInfo().lastModificationTime() > object.deletionTime) { -- // keep deleted entry since it was changed after deletion date -- continue; -- } -- deletions << object; -- if (entry->group()) { -- changes << tr("Deleting child %1 [%2]").arg(entry->title(), entry->uuidToHex()); -- } else { -- changes << tr("Deleting orphan %1 [%2]").arg(entry->title(), entry->uuidToHex()); -- } -- // Entry is inserted into deletedObjects after deletions are processed -- eraseEntry(entry); -- } -- -- while (!groups.isEmpty()) { -- auto* group = groups.takeFirst(); -- if (!(group->children().toSet() & groups.toSet()).isEmpty()) { -- // we need to finish all children before we are able to determine if the group can be removed -- groups << group; -- continue; -- } -- const auto& object = mergedDeletions[group->uuid()]; -- if (group->timeInfo().lastModificationTime() > object.deletionTime) { -- // keep deleted group since it was changed after deletion date -- continue; -- } -- if (!group->entriesRecursive(false).isEmpty() || !group->groupsRecursive(false).isEmpty()) { -- // keep deleted group since it contains undeleted content -- continue; -- } -- deletions << object; -- if (group->parentGroup()) { -- changes << tr("Deleting child %1 [%2]").arg(group->name(), group->uuidToHex()); -- } else { -- changes << tr("Deleting orphan %1 [%2]").arg(group->name(), group->uuidToHex()); -- } -- eraseGroup(group); -- } -- // Put every deletion to the earliest date of deletion -- if (deletions != context.m_targetDb->deletedObjects()) { -- changes << tr("Changed deleted objects"); -- } -- context.m_targetDb->setDeletedObjects(deletions); -- return changes; --} -- --Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) --{ -- // TODO HNH: missing handling of recycle bin, names, templates for groups and entries, -- // public data (entries of newer dict override keys of older dict - ignoring -- // their own age - it is enough if one entry of the whole dict is newer) => possible lost update -- ChangeList changes; -- auto* sourceMetadata = context.m_sourceDb->metadata(); -- auto* targetMetadata = context.m_targetDb->metadata(); -- -- for (const auto& iconUuid : sourceMetadata->customIconsOrder()) { -- if (!targetMetadata->hasCustomIcon(iconUuid)) { -- QImage customIcon = sourceMetadata->customIcon(iconUuid); -- targetMetadata->addCustomIcon(iconUuid, customIcon); -- changes << tr("Adding missing icon %1").arg(QString::fromLatin1(iconUuid.toRfc4122().toHex())); -- } -- } -- -- // Merge Custom Data if source is newer -- const auto targetCustomDataModificationTime = targetMetadata->customData()->getLastModified(); -- const auto sourceCustomDataModificationTime = sourceMetadata->customData()->getLastModified(); -- if (!targetMetadata->customData()->contains(CustomData::LastModified) -- || (targetCustomDataModificationTime.isValid() && sourceCustomDataModificationTime.isValid() -- && targetCustomDataModificationTime < sourceCustomDataModificationTime)) { -- const auto sourceCustomDataKeys = sourceMetadata->customData()->keys(); -- const auto targetCustomDataKeys = targetMetadata->customData()->keys(); -- -- // Check missing keys from source. Remove those from target -- for (const auto& key : targetCustomDataKeys) { -- // Do not remove protected custom data -- if (!sourceMetadata->customData()->contains(key) -- && !sourceMetadata->customData()->isProtectedCustomData(key)) { -- auto value = targetMetadata->customData()->value(key); -- targetMetadata->customData()->remove(key); -- changes << tr("Removed custom data %1 [%2]").arg(key, value); -- } -- } -- -- // Transfer new/existing keys -- for (const auto& key : sourceCustomDataKeys) { -- // Don't merge this meta field, it is updated automatically. -- if (key == CustomData::LastModified) { -- continue; -- } -- -- auto sourceValue = sourceMetadata->customData()->value(key); -- auto targetValue = targetMetadata->customData()->value(key); -- // Merge only if the values are not the same. -- if (sourceValue != targetValue) { -- targetMetadata->customData()->set(key, sourceValue); -- changes << tr("Adding custom data %1 [%2]").arg(key, sourceValue); -- } -- } -- } -- -- return changes; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Merger.h keepassxc-2.6.4-patched/src/core/Merger.h ---- keepassxc-2.6.4-orig/src/core/Merger.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Merger.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,80 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_MERGER_H --#define KEEPASSXC_MERGER_H -- --#include "core/Group.h" --#include --#include -- --class Database; --class Entry; -- --class Merger : public QObject --{ -- Q_OBJECT --public: -- Merger(const Database* sourceDb, Database* targetDb); -- Merger(const Group* sourceGroup, Group* targetGroup); -- void setForcedMergeMode(Group::MergeMode mode); -- void resetForcedMergeMode(); -- QStringList merge(); -- --private: -- typedef QString Change; -- typedef QStringList ChangeList; -- -- struct MergeContext -- { -- QPointer m_sourceDb; -- QPointer m_targetDb; -- QPointer m_sourceRootGroup; -- QPointer m_targetRootGroup; -- QPointer m_sourceGroup; -- QPointer m_targetGroup; -- }; -- ChangeList mergeGroup(const MergeContext& context); -- ChangeList mergeDeletions(const MergeContext& context); -- ChangeList mergeMetadata(const MergeContext& context); -- bool markOlderEntry(Entry* entry); -- bool mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod); -- void moveEntry(Entry* entry, Group* targetGroup); -- void moveGroup(Group* group, Group* targetGroup); -- // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries -- void eraseEntry(Entry* entry); -- // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries -- void eraseGroup(Group* group); -- ChangeList resolveEntryConflict(const MergeContext& context, const Entry* existingEntry, Entry* otherEntry); -- ChangeList resolveGroupConflict(const MergeContext& context, const Group* existingGroup, Group* otherGroup); -- Merger::ChangeList -- resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); -- Merger::ChangeList -- resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); -- Merger::ChangeList -- resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); -- Merger::ChangeList resolveEntryConflict_MergeHistories(const MergeContext& context, -- const Entry* sourceEntry, -- Entry* targetEntry, -- Group::MergeMode mergeMethod); -- --private: -- MergeContext m_context; -- Group::MergeMode m_mode; --}; -- --#endif // KEEPASSXC_MERGER_H -diff -urNr keepassxc-2.6.4-orig/src/core/Metadata.cpp keepassxc-2.6.4-patched/src/core/Metadata.cpp ---- keepassxc-2.6.4-orig/src/core/Metadata.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Metadata.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,509 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Metadata.h" --#include --#include -- --#include "core/Clock.h" --#include "core/DatabaseIcons.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Tools.h" -- --const int Metadata::DefaultHistoryMaxItems = 10; --const int Metadata::DefaultHistoryMaxSize = 6 * 1024 * 1024; -- --Metadata::Metadata(QObject* parent) -- : QObject(parent) -- , m_customData(new CustomData(this)) -- , m_updateDatetime(true) --{ -- init(); -- connect(m_customData, SIGNAL(customDataModified()), SIGNAL(metadataModified())); --} -- --void Metadata::init() --{ -- m_data.generator = QStringLiteral("KeePassXC"); -- m_data.maintenanceHistoryDays = 365; -- m_data.masterKeyChangeRec = -1; -- m_data.masterKeyChangeForce = -1; -- m_data.historyMaxItems = DefaultHistoryMaxItems; -- m_data.historyMaxSize = DefaultHistoryMaxSize; -- m_data.recycleBinEnabled = true; -- m_data.protectTitle = false; -- m_data.protectUsername = false; -- m_data.protectPassword = true; -- m_data.protectUrl = false; -- m_data.protectNotes = false; -- -- QDateTime now = Clock::currentDateTimeUtc(); -- m_data.nameChanged = now; -- m_data.descriptionChanged = now; -- m_data.defaultUserNameChanged = now; -- m_recycleBinChanged = now; -- m_entryTemplatesGroupChanged = now; -- m_masterKeyChanged = now; -- m_settingsChanged = now; --} -- --void Metadata::clear() --{ -- init(); -- m_customIcons.clear(); -- m_customIconsRaw.clear(); -- m_customIconsOrder.clear(); -- m_customIconsHashes.clear(); -- m_customData->clear(); --} -- --template bool Metadata::set(P& property, const V& value) --{ -- if (property != value) { -- property = value; -- emit metadataModified(); -- return true; -- } else { -- return false; -- } --} -- --template bool Metadata::set(P& property, const V& value, QDateTime& dateTime) --{ -- if (property != value) { -- property = value; -- if (m_updateDatetime) { -- dateTime = Clock::currentDateTimeUtc(); -- } -- emit metadataModified(); -- return true; -- } else { -- return false; -- } --} -- --void Metadata::setUpdateDatetime(bool value) --{ -- m_updateDatetime = value; --} -- --void Metadata::copyAttributesFrom(const Metadata* other) --{ -- m_data = other->m_data; --} -- --QString Metadata::generator() const --{ -- return m_data.generator; --} -- --QString Metadata::name() const --{ -- return m_data.name; --} -- --QDateTime Metadata::nameChanged() const --{ -- return m_data.nameChanged; --} -- --QString Metadata::description() const --{ -- return m_data.description; --} -- --QDateTime Metadata::descriptionChanged() const --{ -- return m_data.descriptionChanged; --} -- --QString Metadata::defaultUserName() const --{ -- return m_data.defaultUserName; --} -- --QDateTime Metadata::defaultUserNameChanged() const --{ -- return m_data.defaultUserNameChanged; --} -- --int Metadata::maintenanceHistoryDays() const --{ -- return m_data.maintenanceHistoryDays; --} -- --QString Metadata::color() const --{ -- return m_data.color; --} -- --bool Metadata::protectTitle() const --{ -- return m_data.protectTitle; --} -- --bool Metadata::protectUsername() const --{ -- return m_data.protectUsername; --} -- --bool Metadata::protectPassword() const --{ -- return m_data.protectPassword; --} -- --bool Metadata::protectUrl() const --{ -- return m_data.protectUrl; --} -- --bool Metadata::protectNotes() const --{ -- return m_data.protectNotes; --} -- --QImage Metadata::customIcon(const QUuid& uuid) const --{ -- return m_customIconsRaw.value(uuid); --} -- --QPixmap Metadata::customIconPixmap(const QUuid& uuid, IconSize size) const --{ -- if (!hasCustomIcon(uuid)) { -- return {}; -- } -- return m_customIcons.value(uuid).pixmap(databaseIcons()->iconSize(size)); --} -- --QHash Metadata::customIconsPixmaps(IconSize size) const --{ -- QHash result; -- -- for (const QUuid& uuid : m_customIconsOrder) { -- result.insert(uuid, customIconPixmap(uuid, size)); -- } -- -- return result; --} -- --bool Metadata::hasCustomIcon(const QUuid& uuid) const --{ -- return m_customIconsRaw.contains(uuid); --} -- --QList Metadata::customIconsOrder() const --{ -- return m_customIconsOrder; --} -- --bool Metadata::recycleBinEnabled() const --{ -- return m_data.recycleBinEnabled; --} -- --Group* Metadata::recycleBin() --{ -- return m_recycleBin; --} -- --const Group* Metadata::recycleBin() const --{ -- return m_recycleBin; --} -- --QDateTime Metadata::recycleBinChanged() const --{ -- return m_recycleBinChanged; --} -- --const Group* Metadata::entryTemplatesGroup() const --{ -- return m_entryTemplatesGroup; --} -- --QDateTime Metadata::entryTemplatesGroupChanged() const --{ -- return m_entryTemplatesGroupChanged; --} -- --const Group* Metadata::lastSelectedGroup() const --{ -- return m_lastSelectedGroup; --} -- --const Group* Metadata::lastTopVisibleGroup() const --{ -- return m_lastTopVisibleGroup; --} -- --QDateTime Metadata::databaseKeyChanged() const --{ -- return m_masterKeyChanged; --} -- --int Metadata::databaseKeyChangeRec() const --{ -- return m_data.masterKeyChangeRec; --} -- --int Metadata::databaseKeyChangeForce() const --{ -- return m_data.masterKeyChangeForce; --} -- --int Metadata::historyMaxItems() const --{ -- return m_data.historyMaxItems; --} -- --int Metadata::historyMaxSize() const --{ -- return m_data.historyMaxSize; --} -- --CustomData* Metadata::customData() --{ -- return m_customData; --} -- --const CustomData* Metadata::customData() const --{ -- return m_customData; --} -- --void Metadata::setGenerator(const QString& value) --{ -- set(m_data.generator, value); --} -- --void Metadata::setName(const QString& value) --{ -- set(m_data.name, value, m_data.nameChanged); --} -- --void Metadata::setNameChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_data.nameChanged = value; --} -- --void Metadata::setDescription(const QString& value) --{ -- set(m_data.description, value, m_data.descriptionChanged); --} -- --void Metadata::setDescriptionChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_data.descriptionChanged = value; --} -- --void Metadata::setDefaultUserName(const QString& value) --{ -- set(m_data.defaultUserName, value, m_data.defaultUserNameChanged); --} -- --void Metadata::setDefaultUserNameChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_data.defaultUserNameChanged = value; --} -- --void Metadata::setMaintenanceHistoryDays(int value) --{ -- set(m_data.maintenanceHistoryDays, value); --} -- --void Metadata::setColor(const QString& value) --{ -- set(m_data.color, value); --} -- --void Metadata::setProtectTitle(bool value) --{ -- set(m_data.protectTitle, value); --} -- --void Metadata::setProtectUsername(bool value) --{ -- set(m_data.protectUsername, value); --} -- --void Metadata::setProtectPassword(bool value) --{ -- set(m_data.protectPassword, value); --} -- --void Metadata::setProtectUrl(bool value) --{ -- set(m_data.protectUrl, value); --} -- --void Metadata::setProtectNotes(bool value) --{ -- set(m_data.protectNotes, value); --} -- --void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image) --{ -- Q_ASSERT(!uuid.isNull()); -- Q_ASSERT(!m_customIconsRaw.contains(uuid)); -- -- m_customIconsRaw[uuid] = image; -- // remove all uuids to prevent duplicates in release mode -- m_customIconsOrder.removeAll(uuid); -- m_customIconsOrder.append(uuid); -- // Associate image hash to uuid -- QByteArray hash = hashImage(image); -- m_customIconsHashes[hash] = uuid; -- Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); -- -- // TODO: This check can go away when we move all QIcon handling outside of core -- // On older versions of Qt, loading a QPixmap from QImage outside of a GUI -- // environment causes ASAN to fail and crash on nullptr violation -- static bool isGui = qApp->inherits("QGuiApplication"); -- if (isGui) { -- // Generate QIcon with pre-baked resolutions -- auto basePixmap = QPixmap::fromImage(image.scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); -- QIcon icon(basePixmap); -- m_customIcons.insert(uuid, icon); -- } else { -- m_customIcons.insert(uuid, QIcon()); -- } -- -- emit metadataModified(); --} -- --void Metadata::removeCustomIcon(const QUuid& uuid) --{ -- Q_ASSERT(!uuid.isNull()); -- Q_ASSERT(m_customIconsRaw.contains(uuid)); -- -- // Remove hash record only if this is the same uuid -- QByteArray hash = hashImage(m_customIconsRaw[uuid]); -- if (m_customIconsHashes.contains(hash) && m_customIconsHashes[hash] == uuid) { -- m_customIconsHashes.remove(hash); -- } -- -- m_customIcons.remove(uuid); -- m_customIconsRaw.remove(uuid); -- m_customIconsOrder.removeAll(uuid); -- Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); -- emit metadataModified(); --} -- --QUuid Metadata::findCustomIcon(const QImage& candidate) --{ -- QByteArray hash = hashImage(candidate); -- return m_customIconsHashes.value(hash, QUuid()); --} -- --void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) --{ -- for (const QUuid& uuid : iconList) { -- Q_ASSERT(otherMetadata->hasCustomIcon(uuid)); -- -- if (!hasCustomIcon(uuid) && otherMetadata->hasCustomIcon(uuid)) { -- addCustomIcon(uuid, otherMetadata->customIcon(uuid)); -- } -- } --} -- --QByteArray Metadata::hashImage(const QImage& image) --{ --#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) -- auto data = QByteArray(reinterpret_cast(image.bits()), static_cast(image.sizeInBytes())); --#else -- auto data = QByteArray(reinterpret_cast(image.bits()), image.byteCount()); --#endif -- return QCryptographicHash::hash(data, QCryptographicHash::Md5); --} -- --void Metadata::setRecycleBinEnabled(bool value) --{ -- set(m_data.recycleBinEnabled, value); --} -- --void Metadata::setRecycleBin(Group* group) --{ -- set(m_recycleBin, group, m_recycleBinChanged); --} -- --void Metadata::setRecycleBinChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_recycleBinChanged = value; --} -- --void Metadata::setEntryTemplatesGroup(Group* group) --{ -- set(m_entryTemplatesGroup, group, m_entryTemplatesGroupChanged); --} -- --void Metadata::setEntryTemplatesGroupChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_entryTemplatesGroupChanged = value; --} -- --void Metadata::setLastSelectedGroup(Group* group) --{ -- set(m_lastSelectedGroup, group); --} -- --void Metadata::setLastTopVisibleGroup(Group* group) --{ -- set(m_lastTopVisibleGroup, group); --} -- --void Metadata::setDatabaseKeyChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_masterKeyChanged = value; --} -- --void Metadata::setMasterKeyChangeRec(int value) --{ -- set(m_data.masterKeyChangeRec, value); --} -- --void Metadata::setMasterKeyChangeForce(int value) --{ -- set(m_data.masterKeyChangeForce, value); --} -- --void Metadata::setHistoryMaxItems(int value) --{ -- set(m_data.historyMaxItems, value); --} -- --void Metadata::setHistoryMaxSize(int value) --{ -- set(m_data.historyMaxSize, value); --} -- --QDateTime Metadata::settingsChanged() const --{ -- return m_settingsChanged; --} -- --void Metadata::setSettingsChanged(const QDateTime& value) --{ -- Q_ASSERT(value.timeSpec() == Qt::UTC); -- m_settingsChanged = value; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Metadata.h keepassxc-2.6.4-patched/src/core/Metadata.h ---- keepassxc-2.6.4-orig/src/core/Metadata.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Metadata.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,183 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_METADATA_H --#define KEEPASSX_METADATA_H -- --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "core/CustomData.h" --#include "core/Global.h" -- --class Database; --class Group; -- --class Metadata : public QObject --{ -- Q_OBJECT -- --public: -- explicit Metadata(QObject* parent = nullptr); -- -- struct MetadataData -- { -- QString generator; -- QString name; -- QDateTime nameChanged; -- QString description; -- QDateTime descriptionChanged; -- QString defaultUserName; -- QDateTime defaultUserNameChanged; -- int maintenanceHistoryDays; -- QString color; -- bool recycleBinEnabled; -- int historyMaxItems; -- int historyMaxSize; -- int masterKeyChangeRec; -- int masterKeyChangeForce; -- -- bool protectTitle; -- bool protectUsername; -- bool protectPassword; -- bool protectUrl; -- bool protectNotes; -- }; -- -- void init(); -- void clear(); -- -- QString generator() const; -- QString name() const; -- QDateTime nameChanged() const; -- QString description() const; -- QDateTime descriptionChanged() const; -- QString defaultUserName() const; -- QDateTime defaultUserNameChanged() const; -- QDateTime settingsChanged() const; -- int maintenanceHistoryDays() const; -- QString color() const; -- bool protectTitle() const; -- bool protectUsername() const; -- bool protectPassword() const; -- bool protectUrl() const; -- bool protectNotes() const; -- QImage customIcon(const QUuid& uuid) const; -- bool hasCustomIcon(const QUuid& uuid) const; -- QPixmap customIconPixmap(const QUuid& uuid, IconSize size = IconSize::Default) const; -- QHash customIconsPixmaps(IconSize size = IconSize::Default) const; -- QList customIconsOrder() const; -- bool recycleBinEnabled() const; -- Group* recycleBin(); -- const Group* recycleBin() const; -- QDateTime recycleBinChanged() const; -- const Group* entryTemplatesGroup() const; -- QDateTime entryTemplatesGroupChanged() const; -- const Group* lastSelectedGroup() const; -- const Group* lastTopVisibleGroup() const; -- QDateTime databaseKeyChanged() const; -- int databaseKeyChangeRec() const; -- int databaseKeyChangeForce() const; -- int historyMaxItems() const; -- int historyMaxSize() const; -- CustomData* customData(); -- const CustomData* customData() const; -- -- static const int DefaultHistoryMaxItems; -- static const int DefaultHistoryMaxSize; -- -- void setGenerator(const QString& value); -- void setName(const QString& value); -- void setNameChanged(const QDateTime& value); -- void setDescription(const QString& value); -- void setDescriptionChanged(const QDateTime& value); -- void setDefaultUserName(const QString& value); -- void setDefaultUserNameChanged(const QDateTime& value); -- void setSettingsChanged(const QDateTime& value); -- void setMaintenanceHistoryDays(int value); -- void setColor(const QString& value); -- void setProtectTitle(bool value); -- void setProtectUsername(bool value); -- void setProtectPassword(bool value); -- void setProtectUrl(bool value); -- void setProtectNotes(bool value); -- void addCustomIcon(const QUuid& uuid, const QImage& image); -- void removeCustomIcon(const QUuid& uuid); -- void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); -- QUuid findCustomIcon(const QImage& candidate); -- void setRecycleBinEnabled(bool value); -- void setRecycleBin(Group* group); -- void setRecycleBinChanged(const QDateTime& value); -- void setEntryTemplatesGroup(Group* group); -- void setEntryTemplatesGroupChanged(const QDateTime& value); -- void setLastSelectedGroup(Group* group); -- void setLastTopVisibleGroup(Group* group); -- void setDatabaseKeyChanged(const QDateTime& value); -- void setMasterKeyChangeRec(int value); -- void setMasterKeyChangeForce(int value); -- void setHistoryMaxItems(int value); -- void setHistoryMaxSize(int value); -- void setUpdateDatetime(bool value); -- /* -- * Copy all attributes from other except: -- * - Group pointers/uuids -- * - Database key changed date -- * - Custom icons -- * - Custom fields -- * - Settings changed date -- */ -- void copyAttributesFrom(const Metadata* other); -- --signals: -- void metadataModified(); -- --private: -- template bool set(P& property, const V& value); -- template bool set(P& property, const V& value, QDateTime& dateTime); -- -- QByteArray hashImage(const QImage& image); -- -- MetadataData m_data; -- -- QHash m_customIcons; -- QHash m_customIconsRaw; -- QList m_customIconsOrder; -- QHash m_customIconsHashes; -- -- QPointer m_recycleBin; -- QDateTime m_recycleBinChanged; -- QPointer m_entryTemplatesGroup; -- QDateTime m_entryTemplatesGroupChanged; -- QPointer m_lastSelectedGroup; -- QPointer m_lastTopVisibleGroup; -- -- QDateTime m_masterKeyChanged; -- QDateTime m_settingsChanged; -- -- QPointer m_customData; -- -- bool m_updateDatetime; --}; -- --#endif // KEEPASSX_METADATA_H -diff -urNr keepassxc-2.6.4-orig/src/core/NetworkManager.cpp keepassxc-2.6.4-patched/src/core/NetworkManager.cpp ---- keepassxc-2.6.4-orig/src/core/NetworkManager.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/NetworkManager.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,33 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "config-keepassx.h" -- --#ifdef WITH_XC_NETWORKING --#include "NetworkManager.h" -- --#include -- --QNetworkAccessManager* g_netMgr = nullptr; --QNetworkAccessManager* getNetMgr() --{ -- if (!g_netMgr) { -- g_netMgr = new QNetworkAccessManager(QCoreApplication::instance()); -- } -- return g_netMgr; --} --#endif -diff -urNr keepassxc-2.6.4-orig/src/core/NetworkManager.h keepassxc-2.6.4-patched/src/core/NetworkManager.h ---- keepassxc-2.6.4-orig/src/core/NetworkManager.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/NetworkManager.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_NETWORKMANAGER_H --#define KEEPASSXC_NETWORKMANAGER_H -- --#include "config-keepassx.h" --#include -- --#ifdef WITH_XC_NETWORKING --#include --#include --#include -- --QNetworkAccessManager* getNetMgr(); --#else --Q_STATIC_ASSERT_X(false, "Qt Networking used when WITH_XC_NETWORKING is disabled!"); --#endif -- --#endif // KEEPASSXC_NETWORKMANAGER_H -diff -urNr keepassxc-2.6.4-orig/src/core/OSEventFilter.cpp keepassxc-2.6.4-patched/src/core/OSEventFilter.cpp ---- keepassxc-2.6.4-orig/src/core/OSEventFilter.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/OSEventFilter.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2013 Felix Geyer -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OSEventFilter.h" -- --#include -- --#include "autotype/AutoType.h" --#include "gui/MainWindow.h" --#ifdef Q_OS_WIN --#include --#endif -- --OSEventFilter::OSEventFilter() --{ --} -- --bool OSEventFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result) --{ -- Q_UNUSED(result) -- --#if defined(Q_OS_UNIX) -- if (eventType == QByteArrayLiteral("xcb_generic_event_t")) { --#elif defined(Q_OS_WIN) -- if (eventType == QByteArrayLiteral("windows_generic_MSG") -- || eventType == QByteArrayLiteral("windows_dispatcher_MSG")) { --#endif -- return autoType()->callEventFilter(message) == 1; -- } -- -- return false; --} -diff -urNr keepassxc-2.6.4-orig/src/core/OSEventFilter.h keepassxc-2.6.4-patched/src/core/OSEventFilter.h ---- keepassxc-2.6.4-orig/src/core/OSEventFilter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/OSEventFilter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2013 Felix Geyer -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef OSEVENTFILTER_H --#define OSEVENTFILTER_H --#include -- --class QByteArray; -- --class OSEventFilter : public QAbstractNativeEventFilter --{ --public: -- OSEventFilter(); -- bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; -- --private: -- Q_DISABLE_COPY(OSEventFilter) --}; -- --#endif // OSEVENTFILTER_H -diff -urNr keepassxc-2.6.4-orig/src/core/PassphraseGenerator.cpp keepassxc-2.6.4-patched/src/core/PassphraseGenerator.cpp ---- keepassxc-2.6.4-orig/src/core/PassphraseGenerator.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PassphraseGenerator.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,133 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "PassphraseGenerator.h" -- --#include --#include --#include -- --#include "core/Resources.h" --#include "crypto/Random.h" -- --const char* PassphraseGenerator::DefaultSeparator = " "; --const char* PassphraseGenerator::DefaultWordList = "eff_large.wordlist"; -- --PassphraseGenerator::PassphraseGenerator() -- : m_wordCount(DefaultWordCount) -- , m_wordCase(LOWERCASE) -- , m_separator(DefaultSeparator) --{ -- setDefaultWordList(); --} -- --double PassphraseGenerator::estimateEntropy(int wordCount) --{ -- if (m_wordlist.isEmpty()) { -- return 0.0; -- } -- if (wordCount < 1) { -- wordCount = m_wordCount; -- } -- -- return std::log2(m_wordlist.size()) * wordCount; --} -- --void PassphraseGenerator::setWordCount(int wordCount) --{ -- m_wordCount = qMax(1, wordCount); --} -- --void PassphraseGenerator::setWordCase(PassphraseWordCase wordCase) --{ -- m_wordCase = wordCase; --} -- --void PassphraseGenerator::setWordList(const QString& path) --{ -- m_wordlist.clear(); -- -- QFile file(path); -- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { -- qWarning("Couldn't load passphrase wordlist."); -- return; -- } -- -- QTextStream in(&file); -- while (!in.atEnd()) { -- m_wordlist.append(in.readLine()); -- } -- -- if (m_wordlist.size() < 4000) { -- qWarning("Wordlist too short!"); -- return; -- } --} -- --void PassphraseGenerator::setDefaultWordList() --{ -- const QString path = resources()->wordlistPath(PassphraseGenerator::DefaultWordList); -- setWordList(path); --} -- --void PassphraseGenerator::setWordSeparator(const QString& separator) --{ -- m_separator = separator; --} -- --QString PassphraseGenerator::generatePassphrase() const --{ -- QString tmpWord; -- Q_ASSERT(isValid()); -- -- // In case there was an error loading the wordlist -- if (m_wordlist.length() == 0) { -- return QString(); -- } -- -- QStringList words; -- for (int i = 0; i < m_wordCount; ++i) { -- int wordIndex = randomGen()->randomUInt(static_cast(m_wordlist.length())); -- tmpWord = m_wordlist.at(wordIndex); -- -- // convert case -- switch (m_wordCase) { -- case UPPERCASE: -- tmpWord = tmpWord.toUpper(); -- break; -- case TITLECASE: -- tmpWord = tmpWord.replace(0, 1, tmpWord.left(1).toUpper()); -- break; -- case LOWERCASE: -- default: -- tmpWord = tmpWord.toLower(); -- break; -- } -- words.append(tmpWord); -- } -- -- return words.join(m_separator); --} -- --bool PassphraseGenerator::isValid() const --{ -- if (m_wordCount == 0) { -- return false; -- } -- -- return m_wordlist.size() >= 1000; --} -diff -urNr keepassxc-2.6.4-orig/src/core/PassphraseGenerator.h keepassxc-2.6.4-patched/src/core/PassphraseGenerator.h ---- keepassxc-2.6.4-orig/src/core/PassphraseGenerator.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PassphraseGenerator.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_PASSPHRASEGENERATOR_H --#define KEEPASSX_PASSPHRASEGENERATOR_H -- --#include --#include --#include -- --class PassphraseGenerator --{ --public: -- PassphraseGenerator(); -- Q_DISABLE_COPY(PassphraseGenerator) -- -- enum PassphraseWordCase -- { -- LOWERCASE, -- UPPERCASE, -- TITLECASE -- }; -- -- double estimateEntropy(int wordCount = 0); -- void setWordCount(int wordCount); -- void setWordList(const QString& path); -- void setWordCase(PassphraseWordCase wordCase); -- void setDefaultWordList(); -- void setWordSeparator(const QString& separator); -- bool isValid() const; -- -- QString generatePassphrase() const; -- -- static constexpr int DefaultWordCount = 7; -- static const char* DefaultSeparator; -- static const char* DefaultWordList; -- --private: -- int m_wordCount; -- PassphraseWordCase m_wordCase; -- QString m_separator; -- QVector m_wordlist; --}; -- --#endif // KEEPASSX_PASSPHRASEGENERATOR_H -diff -urNr keepassxc-2.6.4-orig/src/core/PasswordGenerator.cpp keepassxc-2.6.4-patched/src/core/PasswordGenerator.cpp ---- keepassxc-2.6.4-orig/src/core/PasswordGenerator.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PasswordGenerator.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,339 +0,0 @@ --/* -- * Copyright (C) 2013 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "PasswordGenerator.h" -- --#include "crypto/Random.h" -- --const char* PasswordGenerator::DefaultAdditionalChars = ""; --const char* PasswordGenerator::DefaultExcludedChars = ""; -- --PasswordGenerator::PasswordGenerator() -- : m_length(0) -- , m_classes(nullptr) -- , m_flags(nullptr) -- , m_additional(PasswordGenerator::DefaultAdditionalChars) -- , m_excluded(PasswordGenerator::DefaultExcludedChars) --{ --} -- --void PasswordGenerator::setLength(int length) --{ -- if (length <= 0) { -- m_length = DefaultLength; -- return; -- } -- m_length = length; --} -- --void PasswordGenerator::setCharClasses(const CharClasses& classes) --{ -- if (classes == 0) { -- m_classes = DefaultCharset; -- return; -- } -- m_classes = classes; --} -- --void PasswordGenerator::setFlags(const GeneratorFlags& flags) --{ -- m_flags = flags; --} -- --void PasswordGenerator::setAdditionalChars(const QString& chars) --{ -- m_additional = chars; --} -- --void PasswordGenerator::setExcludedChars(const QString& chars) --{ -- m_excluded = chars; --} -- --QString PasswordGenerator::generatePassword() const --{ -- Q_ASSERT(isValid()); -- -- const QVector groups = passwordGroups(); -- -- QVector passwordChars; -- for (const PasswordGroup& group : groups) { -- for (QChar ch : group) { -- passwordChars.append(ch); -- } -- } -- -- QString password; -- -- if (m_flags & CharFromEveryGroup) { -- for (const auto& group : groups) { -- int pos = randomGen()->randomUInt(static_cast(group.size())); -- -- password.append(group[pos]); -- } -- -- for (int i = groups.size(); i < m_length; i++) { -- int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); -- -- password.append(passwordChars[pos]); -- } -- -- // shuffle chars -- for (int i = (password.size() - 1); i >= 1; i--) { -- int j = randomGen()->randomUInt(static_cast(i + 1)); -- -- QChar tmp = password[i]; -- password[i] = password[j]; -- password[j] = tmp; -- } -- } else { -- for (int i = 0; i < m_length; i++) { -- int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); -- -- password.append(passwordChars[pos]); -- } -- } -- -- return password; --} -- --bool PasswordGenerator::isValid() const --{ -- if (m_classes == 0 && m_additional.isEmpty()) { -- return false; -- } else if (m_length == 0) { -- return false; -- } -- -- if ((m_flags & CharFromEveryGroup) && (m_length < numCharClasses())) { -- return false; -- } -- -- return !passwordGroups().isEmpty(); --} -- --QVector PasswordGenerator::passwordGroups() const --{ -- QVector passwordGroups; -- -- if (m_classes & LowerLetters) { -- PasswordGroup group; -- -- for (int i = 97; i <= (97 + 25); i++) { -- -- if ((m_flags & ExcludeLookAlike) && (i == 108)) { // "l" -- continue; -- } -- -- group.append(i); -- } -- -- passwordGroups.append(group); -- } -- if (m_classes & UpperLetters) { -- PasswordGroup group; -- -- for (int i = 65; i <= (65 + 25); i++) { -- -- if ((m_flags & ExcludeLookAlike) && (i == 73 || i == 79)) { // "I" and "O" -- continue; -- } -- -- group.append(i); -- } -- -- passwordGroups.append(group); -- } -- if (m_classes & Numbers) { -- PasswordGroup group; -- -- for (int i = 48; i < (48 + 10); i++) { -- if ((m_flags & ExcludeLookAlike) && (i == 48 || i == 49)) { // "0" and "1" -- continue; -- } -- -- group.append(i); -- } -- -- passwordGroups.append(group); -- } -- if (m_classes & Braces) { -- PasswordGroup group; -- -- // ()[]{} -- group.append(40); -- group.append(41); -- group.append(91); -- group.append(93); -- group.append(123); -- group.append(125); -- -- passwordGroups.append(group); -- } -- if (m_classes & Punctuation) { -- PasswordGroup group; -- -- // .,:; -- group.append(44); -- group.append(46); -- group.append(58); -- group.append(59); -- -- passwordGroups.append(group); -- } -- if (m_classes & Quotes) { -- PasswordGroup group; -- -- // "' -- group.append(34); -- group.append(39); -- -- passwordGroups.append(group); -- } -- if (m_classes & Dashes) { -- PasswordGroup group; -- -- // -/\_| -- group.append(45); -- group.append(47); -- group.append(92); -- group.append(95); -- if (!(m_flags & ExcludeLookAlike)) { -- group.append(124); // "|" -- } -- -- passwordGroups.append(group); -- } -- if (m_classes & Math) { -- PasswordGroup group; -- -- // !*+-<=>? -- group.append(33); -- group.append(42); -- group.append(43); -- group.append(60); -- group.append(61); -- group.append(62); -- group.append(63); -- -- passwordGroups.append(group); -- } -- if (m_classes & Logograms) { -- PasswordGroup group; -- -- // #$%& -- for (int i = 35; i <= 38; i++) { -- group.append(i); -- } -- // @^`~ -- group.append(64); -- group.append(94); -- group.append(96); -- group.append(126); -- -- passwordGroups.append(group); -- } -- if (m_classes & EASCII) { -- PasswordGroup group; -- -- // [U+0080, U+009F] are C1 control characters, -- // U+00A0 is non-breaking space -- for (int i = 161; i <= 172; i++) { -- group.append(i); -- } -- // U+00AD is soft hyphen (format character) -- for (int i = 174; i <= 255; i++) { -- if ((m_flags & ExcludeLookAlike) && (i == 249)) { // "﹒" -- continue; -- } -- group.append(i); -- } -- -- passwordGroups.append(group); -- } -- if (!m_additional.isEmpty()) { -- PasswordGroup group; -- -- for (auto ch : m_additional) { -- group.append(ch); -- } -- -- passwordGroups.append(group); -- } -- -- // Loop over character groups and remove excluded characters from them; -- // remove empty groups -- int i = 0; -- while (i != passwordGroups.size()) { -- PasswordGroup group = passwordGroups[i]; -- -- for (QChar ch : m_excluded) { -- int j = group.indexOf(ch); -- while (j != -1) { -- group.remove(j); -- j = group.indexOf(ch); -- } -- } -- if (!group.isEmpty()) { -- passwordGroups.replace(i, group); -- ++i; -- } else { -- passwordGroups.remove(i); -- } -- } -- -- return passwordGroups; --} -- --int PasswordGenerator::numCharClasses() const --{ -- int numClasses = 0; -- -- if (m_classes & LowerLetters) { -- numClasses++; -- } -- if (m_classes & UpperLetters) { -- numClasses++; -- } -- if (m_classes & Numbers) { -- numClasses++; -- } -- if (m_classes & Braces) { -- numClasses++; -- } -- if (m_classes & Punctuation) { -- numClasses++; -- } -- if (m_classes & Quotes) { -- numClasses++; -- } -- if (m_classes & Dashes) { -- numClasses++; -- } -- if (m_classes & Math) { -- numClasses++; -- } -- if (m_classes & Logograms) { -- numClasses++; -- } -- if (m_classes & EASCII) { -- numClasses++; -- } -- -- return numClasses; --} -diff -urNr keepassxc-2.6.4-orig/src/core/PasswordGenerator.h keepassxc-2.6.4-patched/src/core/PasswordGenerator.h ---- keepassxc-2.6.4-orig/src/core/PasswordGenerator.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PasswordGenerator.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,91 +0,0 @@ --/* -- * Copyright (C) 2013 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_PASSWORDGENERATOR_H --#define KEEPASSX_PASSWORDGENERATOR_H -- --#include --#include --#include -- --typedef QVector PasswordGroup; -- --class PasswordGenerator --{ --public: -- enum CharClass -- { -- LowerLetters = (1 << 0), -- UpperLetters = (1 << 1), -- Numbers = (1 << 2), -- Braces = (1 << 3), -- Punctuation = (1 << 4), -- Quotes = (1 << 5), -- Dashes = (1 << 6), -- Math = (1 << 7), -- Logograms = (1 << 8), -- SpecialCharacters = Braces | Punctuation | Quotes | Dashes | Math | Logograms, -- EASCII = (1 << 9), -- DefaultCharset = LowerLetters | UpperLetters | Numbers -- }; -- Q_DECLARE_FLAGS(CharClasses, CharClass) -- -- enum GeneratorFlag -- { -- ExcludeLookAlike = (1 << 0), -- CharFromEveryGroup = (1 << 1), -- AdvancedMode = (1 << 2), -- DefaultFlags = ExcludeLookAlike | CharFromEveryGroup -- }; -- Q_DECLARE_FLAGS(GeneratorFlags, GeneratorFlag) -- --public: -- PasswordGenerator(); -- -- void setLength(int length); -- void setCharClasses(const CharClasses& classes); -- void setFlags(const GeneratorFlags& flags); -- void setAdditionalChars(const QString& chars); -- void setExcludedChars(const QString& chars); -- -- bool isValid() const; -- -- QString generatePassword() const; -- -- static const int DefaultLength = 32; -- static const char* DefaultAdditionalChars; -- static const char* DefaultExcludedChars; -- --private: -- QVector passwordGroups() const; -- int numCharClasses() const; -- -- int m_length; -- CharClasses m_classes; -- GeneratorFlags m_flags; -- QString m_additional; -- QString m_excluded; -- -- Q_DISABLE_COPY(PasswordGenerator) --}; -- --Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::CharClasses) -- --Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::GeneratorFlags) -- --#endif // KEEPASSX_PASSWORDGENERATOR_H -diff -urNr keepassxc-2.6.4-orig/src/core/PasswordHealth.cpp keepassxc-2.6.4-patched/src/core/PasswordHealth.cpp ---- keepassxc-2.6.4-orig/src/core/PasswordHealth.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PasswordHealth.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,189 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "Database.h" --#include "Entry.h" --#include "Group.h" --#include "PasswordHealth.h" --#include "zxcvbn.h" -- --// Define the static member variable with the custom field name --const QString PasswordHealth::OPTION_KNOWN_BAD = QStringLiteral("KnownBad"); -- --PasswordHealth::PasswordHealth(double entropy) -- : m_score(entropy) -- , m_entropy(entropy) --{ -- switch (quality()) { -- case Quality::Bad: -- case Quality::Poor: -- m_scoreReasons << QApplication::tr("Very weak password"); -- m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2)); -- break; -- -- case Quality::Weak: -- m_scoreReasons << QApplication::tr("Weak password"); -- m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2)); -- break; -- -- default: -- // No reason or details for good and excellent passwords -- break; -- } --} -- --PasswordHealth::PasswordHealth(QString pwd) -- : PasswordHealth(ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr)) --{ --} -- --void PasswordHealth::setScore(int score) --{ -- m_score = score; --} -- --void PasswordHealth::adjustScore(int amount) --{ -- m_score += amount; --} -- --QString PasswordHealth::scoreReason() const --{ -- return m_scoreReasons.join("\n"); --} -- --void PasswordHealth::addScoreReason(QString reason) --{ -- m_scoreReasons << reason; --} -- --QString PasswordHealth::scoreDetails() const --{ -- return m_scoreDetails.join("\n"); --} -- --void PasswordHealth::addScoreDetails(QString details) --{ -- m_scoreDetails.append(details); --} -- --PasswordHealth::Quality PasswordHealth::quality() const --{ -- if (m_score <= 0) { -- return Quality::Bad; -- } else if (m_score < 40) { -- return Quality::Poor; -- } else if (m_score < 65) { -- return Quality::Weak; -- } else if (m_score < 100) { -- return Quality::Good; -- } -- return Quality::Excellent; --} -- --/** -- * This class provides additional information about password health -- * than can be derived from the password itself (re-use, expiry). -- */ --HealthChecker::HealthChecker(QSharedPointer db) --{ -- // Build the cache of re-used passwords -- for (const auto* entry : db->rootGroup()->entriesRecursive()) { -- if (!entry->isRecycled() && !entry->isAttributeReference("Password")) { -- m_reuse[entry->password()] -- << QApplication::tr("Used in %1/%2").arg(entry->group()->hierarchy().join('/'), entry->title()); -- } -- } --} -- --/** -- * Call operator of the Health Checker class. -- * -- * Returns the health of the password in `entry`, considering -- * password entropy, re-use, expiration, etc. -- */ --QSharedPointer HealthChecker::evaluate(const Entry* entry) const --{ -- // Pointer sanity check -- if (!entry) { -- return {}; -- } -- -- // First analyse the password itself -- const auto pwd = entry->password(); -- auto health = QSharedPointer(new PasswordHealth(pwd)); -- -- // Second, if the password is in the database more than once, -- // reduce the score accordingly -- const auto& used = m_reuse[pwd]; -- const auto count = used.size(); -- if (count > 1) { -- constexpr auto penalty = 15; -- health->adjustScore(-penalty * (count - 1)); -- health->addScoreReason(QApplication::tr("Password is used %1 times").arg(QString::number(count))); -- // Add the first 20 uses of the password to prevent the details display from growing too large -- for (int i = 0; i < used.size(); ++i) { -- health->addScoreDetails(used[i]); -- if (i == 19) { -- health->addScoreDetails("…"); -- break; -- } -- } -- -- // Don't allow re-used passwords to be considered "good" -- // no matter how great their entropy is. -- if (health->score() > 64) { -- health->setScore(64); -- } -- } -- -- // Third, if the password has already expired, reduce score to 0; -- // or, if the password is going to expire in the next 30 days, -- // reduce score by 2 points per day. -- if (entry->isExpired()) { -- health->setScore(0); -- health->addScoreReason(QApplication::tr("Password has expired")); -- health->addScoreDetails(QApplication::tr("Password expiry was %1") -- .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); -- } else if (entry->timeInfo().expires()) { -- const auto days = QDateTime::currentDateTime().daysTo(entry->timeInfo().expiryTime()); -- if (days <= 30) { -- // First bring the score down into the "weak" range -- // so that the entry appears in Health Check. Then -- // reduce the score by 2 points for every day that -- // we get closer to expiry. days<=0 has already -- // been handled above ("isExpired()"). -- if (health->score() > 60) { -- health->setScore(60); -- } -- // clang-format off -- health->adjustScore((30 - days) * -2); -- health->addScoreReason(days <= 2 ? QApplication::tr("Password is about to expire") -- : days <= 10 ? QApplication::tr("Password expires in %1 days").arg(days) -- : QApplication::tr("Password will expire soon")); -- health->addScoreDetails(QApplication::tr("Password expires on %1") -- .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); -- //clang-format on -- } -- } -- -- // Return the result -- return health; --} -diff -urNr keepassxc-2.6.4-orig/src/core/PasswordHealth.h keepassxc-2.6.4-patched/src/core/PasswordHealth.h ---- keepassxc-2.6.4-orig/src/core/PasswordHealth.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/PasswordHealth.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,119 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_PASSWORDHEALTH_H --#define KEEPASSX_PASSWORDHEALTH_H -- --#include --#include --#include -- --class Database; --class Entry; -- --/** -- * Health status of a single password. -- * -- * @see HealthChecker -- */ --class PasswordHealth --{ --public: -- explicit PasswordHealth(double entropy); -- explicit PasswordHealth(QString pwd); -- -- /* -- * The password score is defined to be the greater the better -- * (more secure) the password is. It doesn't have a dimension, -- * there are no defined maximum or minimum values, and score -- * values may change with different versions of the software. -- */ -- int score() const -- { -- return m_score; -- } -- -- void setScore(int score); -- void adjustScore(int amount); -- -- /* -- * A text description for the password's quality assessment -- * (translated into the application language), and additional -- * information. Empty if nothing is wrong with the password. -- * May contain more than line, separated by '\n'. -- */ -- QString scoreReason() const; -- void addScoreReason(QString reason); -- -- QString scoreDetails() const; -- void addScoreDetails(QString details); -- -- /* -- * The password quality assessment (based on the score). -- */ -- enum class Quality -- { -- Bad, -- Poor, -- Weak, -- Good, -- Excellent -- }; -- Quality quality() const; -- -- /* -- * The password's raw entropy value, in bits. -- */ -- double entropy() const -- { -- return m_entropy; -- } -- -- /** -- * Name of custom data field that holds the "this is a known -- * bad password" flag. Legal values of the field are TRUE_STR -- * and FALSE_STR, the default (used if the field doesn't exist) -- * is false. -- */ -- static const QString OPTION_KNOWN_BAD; -- --private: -- int m_score = 0; -- double m_entropy = 0.0; -- QStringList m_scoreReasons; -- QStringList m_scoreDetails; --}; -- --/** -- * Password health check for all entries of a database. -- * -- * @see PasswordHealth -- */ --class HealthChecker --{ --public: -- explicit HealthChecker(QSharedPointer); -- -- // Get the health status of an entry in the database -- QSharedPointer evaluate(const Entry* entry) const; -- --private: -- // To determine password re-use: first = password, second = entries that use it -- QHash m_reuse; --}; -- --#endif // KEEPASSX_PASSWORDHEALTH_H -diff -urNr keepassxc-2.6.4-orig/src/core/Resources.cpp keepassxc-2.6.4-patched/src/core/Resources.cpp ---- keepassxc-2.6.4-orig/src/core/Resources.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Resources.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,308 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Resources.h" -- --#include --#include --#include --#include --#include --#include -- --#include "config-keepassx.h" --#include "core/Config.h" --#include "core/Global.h" --#include "gui/MainWindow.h" --#include "gui/osutils/OSUtils.h" -- --class AdaptiveIconEngine : public QIconEngine --{ --public: -- explicit AdaptiveIconEngine(QIcon baseIcon); -- void paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) override; -- QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) override; -- QIconEngine* clone() const override; -- --private: -- QIcon m_baseIcon; --}; -- --Resources* Resources::m_instance(nullptr); -- --QString Resources::dataPath(const QString& name) const --{ -- if (name.isEmpty() || name.startsWith('/')) { -- return m_dataPath + name; -- } -- return m_dataPath + "/" + name; --} -- --QString Resources::pluginPath(const QString& name) const --{ -- QStringList pluginPaths; -- -- QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype"); -- const QStringList buildDirEntryList = buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); -- for (const QString& dir : buildDirEntryList) { -- pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir; -- } -- -- // for TestAutoType -- pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test"; -- --#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) -- pluginPaths << QCoreApplication::applicationDirPath() + "/../PlugIns"; --#endif -- -- pluginPaths << QCoreApplication::applicationDirPath(); -- -- QString configuredPluginDir = KEEPASSX_PLUGIN_DIR; -- if (configuredPluginDir != ".") { -- if (QDir(configuredPluginDir).isAbsolute()) { -- pluginPaths << configuredPluginDir; -- } else { -- QString relativePluginDir = -- QStringLiteral("%1/../%2").arg(QCoreApplication::applicationDirPath(), configuredPluginDir); -- pluginPaths << QDir(relativePluginDir).canonicalPath(); -- -- QString absolutePluginDir = QStringLiteral("%1/%2").arg(KEEPASSX_PREFIX_DIR, configuredPluginDir); -- pluginPaths << QDir(absolutePluginDir).canonicalPath(); -- } -- } -- -- QStringList dirFilter; -- dirFilter << QStringLiteral("*%1*").arg(name); -- -- for (const QString& path : asConst(pluginPaths)) { -- const QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files); -- -- for (const QString& file : fileCandidates) { -- QString filePath = path + "/" + file; -- -- if (QLibrary::isLibrary(filePath)) { -- return filePath; -- } -- } -- } -- -- return {}; --} -- --QString Resources::wordlistPath(const QString& name) const --{ -- return dataPath(QStringLiteral("wordlists/%1").arg(name)); --} -- --QIcon Resources::applicationIcon() --{ -- return icon("keepassxc", false); --} -- --QString Resources::trayIconAppearance() const --{ -- auto iconAppearance = config()->get(Config::GUI_TrayIconAppearance).toString(); -- if (iconAppearance.isNull()) { --#ifdef Q_OS_MACOS -- iconAppearance = osUtils->isDarkMode() ? "monochrome-light" : "monochrome-dark"; --#else -- iconAppearance = "monochrome-light"; --#endif -- } -- return iconAppearance; --} -- --QIcon Resources::trayIcon(QString style) --{ -- if (style == "unlocked") { -- style.clear(); -- } -- if (!style.isEmpty()) { -- style = "-" + style; -- } -- -- auto iconApperance = trayIconAppearance(); -- if (!iconApperance.startsWith("monochrome")) { -- return icon(QString("keepassxc%1").arg(style), false); -- } -- -- QIcon i; --#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) -- if (osUtils->isStatusBarDark()) { -- i = icon(QString("keepassxc-monochrome-light%1").arg(style), false); -- } else { -- i = icon(QString("keepassxc-monochrome-dark%1").arg(style), false); -- } --#else -- i = icon(QString("keepassxc-%1%2").arg(iconApperance, style), false); --#endif --#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) -- // Set as mask to allow the operating system to recolour the tray icon. This may look weird -- // if we failed to detect the status bar background colour correctly, but it is certainly -- // better than a barely visible icon and even if we did guess correctly, it allows for better -- // integration should the system's preferred colours not be 100% black or white. -- i.setIsMask(true); --#endif -- return i; --} -- --QIcon Resources::trayIconLocked() --{ -- return trayIcon("locked"); --} -- --QIcon Resources::trayIconUnlocked() --{ -- return trayIcon("unlocked"); --} -- --AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon) -- : QIconEngine() -- , m_baseIcon(std::move(baseIcon)) --{ --} -- --void AdaptiveIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) --{ -- // Temporary image canvas to ensure that the background is transparent and alpha blending works. --#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) -- auto scale = painter->device()->devicePixelRatioF(); --#else -- auto scale = painter->device()->devicePixelRatio(); --#endif -- QImage img(rect.size() * scale, QImage::Format_ARGB32_Premultiplied); -- img.fill(0); -- QPainter p(&img); -- -- m_baseIcon.paint(&p, img.rect(), Qt::AlignCenter, mode, state); -- -- if (getMainWindow()) { -- QPalette palette = getMainWindow()->palette(); -- p.setCompositionMode(QPainter::CompositionMode_SourceIn); -- -- if (mode == QIcon::Active) { -- p.fillRect(img.rect(), palette.color(QPalette::Active, QPalette::ButtonText)); -- } else if (mode == QIcon::Selected) { -- p.fillRect(img.rect(), palette.color(QPalette::Active, QPalette::HighlightedText)); -- } else if (mode == QIcon::Disabled) { -- p.fillRect(img.rect(), palette.color(QPalette::Disabled, QPalette::WindowText)); -- } else { -- p.fillRect(img.rect(), palette.color(QPalette::Normal, QPalette::WindowText)); -- } -- } -- -- painter->drawImage(rect, img); --} -- --QPixmap AdaptiveIconEngine::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) --{ -- QImage img(size, QImage::Format_ARGB32_Premultiplied); -- img.fill(0); -- QPainter painter(&img); -- paint(&painter, QRect(0, 0, size.width(), size.height()), mode, state); -- return QPixmap::fromImage(img, Qt::ImageConversionFlag::NoFormatConversion); --} -- --QIconEngine* AdaptiveIconEngine::clone() const --{ -- return new AdaptiveIconEngine(m_baseIcon); --} -- --QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideColor) --{ --#ifdef Q_OS_LINUX -- // Resetting the application theme name before calling QIcon::fromTheme() is required for hacky -- // QPA platform themes such as qt5ct, which randomly mess with the configured icon theme. -- // If we do not reset the theme name here, it will become empty at some point, causing -- // Qt to look for icons at the user-level and global default locations. -- // -- // See issue #4963: https://github.com/keepassxreboot/keepassxc/issues/4963 -- // and qt5ct issue #80: https://sourceforge.net/p/qt5ct/tickets/80/ -- QIcon::setThemeName("application"); --#endif -- -- QString cacheName = -- QString("%1:%2:%3").arg(recolor ? "1" : "0", overrideColor.isValid() ? overrideColor.name() : "#", name); -- QIcon icon = m_iconCache.value(cacheName); -- -- if (!icon.isNull() && !overrideColor.isValid()) { -- return icon; -- } -- -- icon = QIcon::fromTheme(name); -- if (recolor) { -- icon = QIcon(new AdaptiveIconEngine(icon)); --#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) -- icon.setIsMask(true); --#endif -- } -- -- m_iconCache.insert(cacheName, icon); -- return icon; --} -- --QIcon Resources::onOffIcon(const QString& name, bool on, bool recolor) --{ -- return icon(name + (on ? "-on" : "-off"), recolor); --} -- --Resources::Resources() --{ -- const QString appDirPath = QCoreApplication::applicationDirPath(); --#if defined(Q_OS_UNIX) && !(defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)) -- trySetResourceDir(KEEPASSX_DATA_DIR) || trySetResourceDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR)) -- || trySetResourceDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR)); --#elif defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) -- trySetResourceDir(appDirPath + QStringLiteral("/../Resources")); --#elif defined(Q_OS_WIN) -- trySetResourceDir(appDirPath + QStringLiteral("/share")); --#endif -- -- if (m_dataPath.isEmpty()) { -- // Last ditch check if we are running from inside the src or test build directory -- trySetResourceDir(appDirPath + QStringLiteral("/../share")) -- || trySetResourceDir(appDirPath + QStringLiteral("/../../share")); -- } -- -- if (m_dataPath.isEmpty()) { -- qWarning("Resources::DataPath: can't find data dir"); -- } --} -- --bool Resources::trySetResourceDir(const QString& path) --{ -- QDir dir(path); -- if (dir.exists()) { -- m_dataPath = dir.canonicalPath(); -- return true; -- } -- return false; --} -- --Resources* Resources::instance() --{ -- if (!m_instance) { -- m_instance = new Resources(); -- -- Q_INIT_RESOURCE(icons); -- QIcon::setThemeSearchPaths(QStringList{":/icons"} << QIcon::themeSearchPaths()); -- QIcon::setThemeName("application"); -- } -- -- return m_instance; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Resources.h keepassxc-2.6.4-patched/src/core/Resources.h ---- keepassxc-2.6.4-orig/src/core/Resources.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Resources.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2020 KeePassXC Team -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_RESOURCES_H --#define KEEPASSX_RESOURCES_H -- --#include --#include --#include --#include -- --class Resources --{ --public: -- QString dataPath(const QString& name) const; -- QString pluginPath(const QString& name) const; -- QString wordlistPath(const QString& name) const; -- QIcon applicationIcon(); -- QIcon trayIcon(QString style = "unlocked"); -- QIcon trayIconLocked(); -- QIcon trayIconUnlocked(); -- QString trayIconAppearance() const; -- QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid); -- QIcon onOffIcon(const QString& name, bool on, bool recolor = true); -- -- static Resources* instance(); -- --private: -- Resources(); -- bool trySetResourceDir(const QString& path); -- -- static Resources* m_instance; -- -- QString m_dataPath; -- QHash m_iconCache; -- -- Q_DISABLE_COPY(Resources) --}; -- --inline Resources* resources() --{ -- return Resources::instance(); --} -- --#endif // KEEPASSX_RESOURCES_H -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListener.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListener.cpp ---- keepassxc-2.6.4-orig/src/core/ScreenLockListener.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListener.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,30 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ScreenLockListener.h" --#include "ScreenLockListenerPrivate.h" -- --ScreenLockListener::ScreenLockListener(QWidget* parent) -- : QObject(parent) --{ -- m_listener = ScreenLockListenerPrivate::instance(parent); -- connect(m_listener, SIGNAL(screenLocked()), this, SIGNAL(screenLocked())); --} -- --ScreenLockListener::~ScreenLockListener() --{ --} -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.cpp ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,132 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ScreenLockListenerDBus.h" -- --#include --#include --#include --#include --#include --#include -- --ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent) -- : ScreenLockListenerPrivate(parent) --{ -- QDBusConnection sessionBus = QDBusConnection::sessionBus(); -- QDBusConnection systemBus = QDBusConnection::systemBus(); -- -- sessionBus.connect("org.freedesktop.ScreenSaver", // service -- "/org/freedesktop/ScreenSaver", // path -- "org.freedesktop.ScreenSaver", // interface -- "ActiveChanged", // signal name -- this, // receiver -- SLOT(freedesktopScreenSaver(bool))); -- -- sessionBus.connect("org.gnome.ScreenSaver", // service -- "/org/gnome/ScreenSaver", // path -- "org.gnome.ScreenSaver", // interface -- "ActiveChanged", // signal name -- this, // receiver -- SLOT(freedesktopScreenSaver(bool))); -- -- sessionBus.connect("org.gnome.SessionManager", // service -- "/org/gnome/SessionManager/Presence", // path -- "org.gnome.SessionManager.Presence", // interface -- "StatusChanged", // signal name -- this, // receiver -- SLOT(gnomeSessionStatusChanged(uint))); -- -- sessionBus.connect("org.xfce.ScreenSaver", // service -- "/org/xfce/ScreenSaver", // path -- "org.xfce.ScreenSaver", // interface -- "ActiveChanged", // signal name -- this, // receiver -- SLOT(freedesktopScreenSaver(bool))); -- -- systemBus.connect("org.freedesktop.login1", // service -- "/org/freedesktop/login1", // path -- "org.freedesktop.login1.Manager", // interface -- "PrepareForSleep", // signal name -- this, // receiver -- SLOT(logindPrepareForSleep(bool))); -- -- QString sessionId = QProcessEnvironment::systemEnvironment().value("XDG_SESSION_ID"); -- QDBusInterface loginManager("org.freedesktop.login1", // service -- "/org/freedesktop/login1", // path -- "org.freedesktop.login1.Manager", // interface -- systemBus); -- if (loginManager.isValid()) { -- QList args = {sessionId}; -- loginManager.callWithCallback("GetSession", args, this, SLOT(login1SessionObjectReceived(QDBusMessage))); -- } -- -- sessionBus.connect("com.canonical.Unity", // service -- "/com/canonical/Unity/Session", // path -- "com.canonical.Unity.Session", // interface -- "Locked", // signal name -- this, // receiver -- SLOT(unityLocked())); --} -- --void ScreenLockListenerDBus::login1SessionObjectReceived(QDBusMessage response) --{ -- if (response.arguments().isEmpty()) { -- qDebug() << "org.freedesktop.login1.Manager.GetSession did not return results"; -- return; -- } -- QVariant arg0 = response.arguments().at(0); -- if (!arg0.canConvert()) { -- qDebug() << "org.freedesktop.login1.Manager.GetSession did not return a QDBusObjectPath"; -- return; -- } -- QDBusObjectPath path = arg0.value(); -- QDBusConnection systemBus = QDBusConnection::systemBus(); -- -- systemBus.connect("", // service -- path.path(), // path -- "org.freedesktop.login1.Session", // interface -- "Lock", // signal name -- this, // receiver -- SLOT(unityLocked())); --} -- --void ScreenLockListenerDBus::gnomeSessionStatusChanged(uint status) --{ -- if (status != 0) { -- emit screenLocked(); -- } --} -- --void ScreenLockListenerDBus::logindPrepareForSleep(bool beforeSleep) --{ -- if (beforeSleep) { -- emit screenLocked(); -- } --} -- --void ScreenLockListenerDBus::unityLocked() --{ -- emit screenLocked(); --} -- --void ScreenLockListenerDBus::freedesktopScreenSaver(bool status) --{ -- if (status) { -- emit screenLocked(); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.h ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,39 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef SCREENLOCKLISTENERDBUS_H --#define SCREENLOCKLISTENERDBUS_H --#include "ScreenLockListenerPrivate.h" --#include --#include --#include -- --class ScreenLockListenerDBus : public ScreenLockListenerPrivate --{ -- Q_OBJECT --public: -- explicit ScreenLockListenerDBus(QWidget* parent = nullptr); -- --private slots: -- void gnomeSessionStatusChanged(uint status); -- void logindPrepareForSleep(bool beforeSleep); -- void unityLocked(); -- void freedesktopScreenSaver(bool status); -- void login1SessionObjectReceived(QDBusMessage); --}; -- --#endif // SCREENLOCKLISTENERDBUS_H -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListener.h keepassxc-2.6.4-patched/src/core/ScreenLockListener.h ---- keepassxc-2.6.4-orig/src/core/ScreenLockListener.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListener.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,39 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef SCREENLOCKLISTENER_H --#define SCREENLOCKLISTENER_H --#include -- --class ScreenLockListenerPrivate; -- --class ScreenLockListener : public QObject --{ -- Q_OBJECT -- --public: -- ScreenLockListener(QWidget* parent = nullptr); -- ~ScreenLockListener(); -- --signals: -- void screenLocked(); -- --private: -- ScreenLockListenerPrivate* m_listener; --}; -- --#endif // SCREENLOCKLISTENER_H -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.cpp ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,65 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ScreenLockListenerMac.h" -- --#include --#include -- --ScreenLockListenerMac* ScreenLockListenerMac::instance() --{ -- static QMutex mutex; -- QMutexLocker lock(&mutex); -- -- static ScreenLockListenerMac* m_ptr = nullptr; -- if (m_ptr == nullptr) { -- m_ptr = new ScreenLockListenerMac(); -- } -- return m_ptr; --} -- --void ScreenLockListenerMac::notificationCenterCallBack(CFNotificationCenterRef, -- void*, -- CFStringRef, -- const void*, -- CFDictionaryRef) --{ -- instance()->onSignalReception(); --} -- --ScreenLockListenerMac::ScreenLockListenerMac(QWidget* parent) -- : ScreenLockListenerPrivate(parent) --{ -- CFNotificationCenterRef distCenter; -- CFStringRef screenIsLockedSignal = CFSTR("com.apple.screenIsLocked"); -- distCenter = CFNotificationCenterGetDistributedCenter(); -- if (nullptr == distCenter) { -- return; -- } -- -- CFNotificationCenterAddObserver(distCenter, -- this, -- &ScreenLockListenerMac::notificationCenterCallBack, -- screenIsLockedSignal, -- nullptr, -- CFNotificationSuspensionBehaviorDeliverImmediately); --} -- --void ScreenLockListenerMac::onSignalReception() --{ -- emit screenLocked(); --} -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.h ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,44 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef SCREENLOCKLISTENERMAC_H --#define SCREENLOCKLISTENERMAC_H --#include --#include -- --#include -- --#include "ScreenLockListenerPrivate.h" -- --class ScreenLockListenerMac : public ScreenLockListenerPrivate --{ -- Q_OBJECT -- --public: -- static ScreenLockListenerMac* instance(); -- static void notificationCenterCallBack(CFNotificationCenterRef center, -- void* observer, -- CFStringRef name, -- const void* object, -- CFDictionaryRef userInfo); -- --private: -- ScreenLockListenerMac(QWidget* parent = nullptr); -- void onSignalReception(); --}; -- --#endif // SCREENLOCKLISTENERMAC_H -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.cpp ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,42 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ScreenLockListenerPrivate.h" --#if defined(Q_OS_MACOS) --#include "ScreenLockListenerMac.h" --#elif defined(Q_OS_UNIX) --#include "ScreenLockListenerDBus.h" --#elif defined(Q_OS_WIN) --#include "ScreenLockListenerWin.h" --#endif -- --ScreenLockListenerPrivate::ScreenLockListenerPrivate(QWidget* parent) -- : QObject(parent) --{ --} -- --ScreenLockListenerPrivate* ScreenLockListenerPrivate::instance(QWidget* parent) --{ --#if defined(Q_OS_MACOS) -- Q_UNUSED(parent); -- return ScreenLockListenerMac::instance(); --#elif defined(Q_OS_UNIX) -- return new ScreenLockListenerDBus(parent); --#elif defined(Q_OS_WIN) -- return new ScreenLockListenerWin(parent); --#endif --} -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.h ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef SCREENLOCKLISTENERPRIVATE_H --#define SCREENLOCKLISTENERPRIVATE_H --#include --#include -- --class ScreenLockListenerPrivate : public QObject --{ -- Q_OBJECT --public: -- static ScreenLockListenerPrivate* instance(QWidget* parent = nullptr); -- --protected: -- ScreenLockListenerPrivate(QWidget* parent = nullptr); -- --signals: -- void screenLocked(); --}; -- --#endif // SCREENLOCKLISTENERPRIVATE_H -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.cpp ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ScreenLockListenerWin.h" --#include --#include --#include -- --/* -- * See https://msdn.microsoft.com/en-us/library/windows/desktop/aa373196(v=vs.85).aspx -- * See https://msdn.microsoft.com/en-us/library/aa383841(v=vs.85).aspx -- * See https://blogs.msdn.microsoft.com/oldnewthing/20060104-50/?p=32783 -- */ --ScreenLockListenerWin::ScreenLockListenerWin(QWidget* parent) -- : ScreenLockListenerPrivate(parent) -- , QAbstractNativeEventFilter() --{ -- Q_ASSERT(parent != nullptr); -- // On windows, we need to register for platform specific messages and -- // install a message handler for them -- QCoreApplication::instance()->installNativeEventFilter(this); -- -- // This call requests a notification from windows when a laptop is closed -- HPOWERNOTIFY hPnotify = RegisterPowerSettingNotification( -- reinterpret_cast(parent->winId()), &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_WINDOW_HANDLE); -- m_powerNotificationHandle = reinterpret_cast(hPnotify); -- -- // This call requests a notification for session changes -- if (!WTSRegisterSessionNotification(reinterpret_cast(parent->winId()), NOTIFY_FOR_THIS_SESSION)) { -- } --} -- --ScreenLockListenerWin::~ScreenLockListenerWin() --{ -- HWND h = reinterpret_cast(static_cast(parent())->winId()); -- WTSUnRegisterSessionNotification(h); -- -- if (m_powerNotificationHandle) { -- UnregisterPowerSettingNotification(reinterpret_cast(m_powerNotificationHandle)); -- } --} -- --bool ScreenLockListenerWin::nativeEventFilter(const QByteArray& eventType, void* message, long*) --{ -- if (eventType == "windows_generic_MSG" || eventType == "windows_dispatcher_MSG") { -- MSG* m = static_cast(message); -- if (m->message == WM_POWERBROADCAST) { -- if (m->wParam == PBT_POWERSETTINGCHANGE) { -- const POWERBROADCAST_SETTING* setting = reinterpret_cast(m->lParam); -- if (setting != nullptr && setting->PowerSetting == GUID_LIDSWITCH_STATE_CHANGE) { -- const DWORD* state = reinterpret_cast(&setting->Data); -- if (*state == 0) { -- emit screenLocked(); -- return true; -- } -- } -- } else if (m->wParam == PBT_APMSUSPEND) { -- emit screenLocked(); -- return true; -- } -- } -- if (m->message == WM_WTSSESSION_CHANGE) { -- if (m->wParam == WTS_CONSOLE_DISCONNECT) { -- emit screenLocked(); -- return true; -- } -- if (m->wParam == WTS_SESSION_LOCK) { -- emit screenLocked(); -- return true; -- } -- } -- } -- return false; --} -diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.h ---- keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,38 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef SCREENLOCKLISTENERWIN_H --#define SCREENLOCKLISTENERWIN_H --#include --#include --#include -- --#include "ScreenLockListenerPrivate.h" -- --class ScreenLockListenerWin : public ScreenLockListenerPrivate, public QAbstractNativeEventFilter --{ -- Q_OBJECT --public: -- explicit ScreenLockListenerWin(QWidget* parent = nullptr); -- ~ScreenLockListenerWin(); -- bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override; -- --private: -- void* m_powerNotificationHandle; --}; -- --#endif // SCREENLOCKLISTENERWIN_H -diff -urNr keepassxc-2.6.4-orig/src/core/SignalMultiplexer.cpp keepassxc-2.6.4-patched/src/core/SignalMultiplexer.cpp ---- keepassxc-2.6.4-orig/src/core/SignalMultiplexer.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/SignalMultiplexer.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,148 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SignalMultiplexer.h" -- --#include "core/Global.h" -- --SignalMultiplexer::SignalMultiplexer() --{ --} -- --SignalMultiplexer::~SignalMultiplexer() --{ -- // disconnect all connections -- setCurrentObject(nullptr); --} -- --QObject* SignalMultiplexer::currentObject() const --{ -- return m_currentObject; --} -- --void SignalMultiplexer::setCurrentObject(QObject* object) --{ -- // remove all Connections from the list whose senders/receivers have been deleted -- QMutableListIterator i = m_connections; -- while (i.hasNext()) { -- const Connection& con = i.next(); -- -- if (!con.sender && !con.receiver) { -- i.remove(); -- } -- } -- -- if (m_currentObject) { -- for (const Connection& con : asConst(m_connections)) { -- disconnect(con); -- } -- } -- -- m_currentObject = object; -- -- if (object) { -- for (const Connection& con : asConst(m_connections)) { -- connect(con); -- } -- } --} -- --void SignalMultiplexer::connect(QObject* sender, const char* signal, const char* slot) --{ -- Q_ASSERT(sender); -- -- Connection con; -- con.slot = slot; -- con.sender = sender; -- con.signal = signal; -- m_connections << con; -- -- if (m_currentObject) { -- connect(con); -- } --} -- --void SignalMultiplexer::connect(const char* signal, QObject* receiver, const char* slot) --{ -- Q_ASSERT(receiver); -- -- Connection con; -- con.receiver = receiver; -- con.signal = signal; -- con.slot = slot; -- m_connections << con; -- -- if (m_currentObject) { -- connect(con); -- } --} -- --void SignalMultiplexer::disconnect(QObject* sender, const char* signal, const char* slot) --{ -- Q_ASSERT(sender); -- -- QMutableListIterator i = m_connections; -- while (i.hasNext()) { -- const Connection& con = i.next(); -- -- if (con.sender == sender && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { -- if (m_currentObject) { -- disconnect(con); -- } -- i.remove(); -- } -- } --} -- --void SignalMultiplexer::disconnect(const char* signal, QObject* receiver, const char* slot) --{ -- Q_ASSERT(receiver); -- -- QMutableListIterator i = m_connections; -- while (i.hasNext()) { -- const Connection& con = i.next(); -- -- if (con.receiver == receiver && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { -- if (m_currentObject) { -- disconnect(con); -- } -- i.remove(); -- } -- } --} -- --void SignalMultiplexer::connect(const Connection& con) --{ -- Q_ASSERT(con.sender || con.receiver); -- -- if (con.sender) { -- QObject::connect(con.sender, con.signal, m_currentObject, con.slot); -- } else { -- QObject::connect(m_currentObject, con.signal, con.receiver, con.slot); -- } --} -- --void SignalMultiplexer::disconnect(const Connection& con) --{ -- Q_ASSERT(con.sender || con.receiver); -- -- if (con.sender) { -- QObject::disconnect(con.sender, con.signal, m_currentObject, con.slot); -- } else { -- QObject::disconnect(m_currentObject, con.signal, con.receiver, con.slot); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/core/SignalMultiplexer.h keepassxc-2.6.4-patched/src/core/SignalMultiplexer.h ---- keepassxc-2.6.4-orig/src/core/SignalMultiplexer.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/SignalMultiplexer.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,56 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SIGNALMULTIPLEXER_H --#define KEEPASSX_SIGNALMULTIPLEXER_H -- --#include --#include -- --class SignalMultiplexer --{ --public: -- SignalMultiplexer(); -- ~SignalMultiplexer(); -- QObject* currentObject() const; -- void setCurrentObject(QObject* object); -- -- void connect(QObject* sender, const char* signal, const char* slot); -- void disconnect(QObject* sender, const char* signal, const char* slot); -- -- void connect(const char* signal, QObject* receiver, const char* slot); -- void disconnect(const char* signal, QObject* receiver, const char* slot); -- --private: -- struct Connection -- { -- QPointer sender; -- QPointer receiver; -- const char* signal; -- const char* slot; -- }; -- -- void connect(const Connection& con); -- void disconnect(const Connection& con); -- -- QPointer m_currentObject; -- QList m_connections; -- -- Q_DISABLE_COPY(SignalMultiplexer) --}; -- --#endif // KEEPASSX_SIGNALMULTIPLEXER_H -diff -urNr keepassxc-2.6.4-orig/src/core/TimeDelta.cpp keepassxc-2.6.4-patched/src/core/TimeDelta.cpp ---- keepassxc-2.6.4-orig/src/core/TimeDelta.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/TimeDelta.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "TimeDelta.h" -- --#include -- --QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) --{ -- return dateTime.addDays(delta.getDays()).addMonths(delta.getMonths()).addYears(delta.getYears()); --} -- --TimeDelta TimeDelta::fromDays(int days) --{ -- return TimeDelta(days, 0, 0); --} -- --TimeDelta TimeDelta::fromMonths(int months) --{ -- return TimeDelta(0, months, 0); --} -- --TimeDelta TimeDelta::fromYears(int years) --{ -- return TimeDelta(0, 0, years); --} -- --TimeDelta::TimeDelta() -- : m_days(0) -- , m_months(0) -- , m_years(0) --{ --} -- --TimeDelta::TimeDelta(int days, int months, int years) -- : m_days(days) -- , m_months(months) -- , m_years(years) --{ --} -- --int TimeDelta::getDays() const --{ -- return m_days; --} -- --int TimeDelta::getMonths() const --{ -- return m_months; --} -- --int TimeDelta::getYears() const --{ -- return m_years; --} -diff -urNr keepassxc-2.6.4-orig/src/core/TimeDelta.h keepassxc-2.6.4-patched/src/core/TimeDelta.h ---- keepassxc-2.6.4-orig/src/core/TimeDelta.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/TimeDelta.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_TIMEDELTA_H --#define KEEPASSX_TIMEDELTA_H -- --#include -- --class QDateTime; --class TimeDelta; -- --QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta); -- --class TimeDelta --{ --public: -- static TimeDelta fromDays(int days); -- static TimeDelta fromMonths(int months); -- static TimeDelta fromYears(int years); -- -- TimeDelta(); -- TimeDelta(int days, int months, int years); -- -- int getDays() const; -- int getMonths() const; -- int getYears() const; -- --private: -- int m_days; -- int m_months; -- int m_years; --}; -- --Q_DECLARE_METATYPE(TimeDelta) -- --#endif // KEEPASSX_TIMEDELTA_H -diff -urNr keepassxc-2.6.4-orig/src/core/TimeInfo.cpp keepassxc-2.6.4-patched/src/core/TimeInfo.cpp ---- keepassxc-2.6.4-orig/src/core/TimeInfo.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/TimeInfo.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,142 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "TimeInfo.h" -- --#include "core/Clock.h" -- --TimeInfo::TimeInfo() -- : m_expires(false) -- , m_usageCount(0) --{ -- QDateTime now = Clock::currentDateTimeUtc(); -- m_lastModificationTime = now; -- m_creationTime = now; -- m_lastAccessTime = now; -- m_expiryTime = now; -- m_locationChanged = now; --} -- --QDateTime TimeInfo::lastModificationTime() const --{ -- return m_lastModificationTime; --} -- --QDateTime TimeInfo::creationTime() const --{ -- return m_creationTime; --} -- --QDateTime TimeInfo::lastAccessTime() const --{ -- return m_lastAccessTime; --} -- --QDateTime TimeInfo::expiryTime() const --{ -- return m_expiryTime; --} -- --bool TimeInfo::expires() const --{ -- return m_expires; --} -- --int TimeInfo::usageCount() const --{ -- return m_usageCount; --} -- --QDateTime TimeInfo::locationChanged() const --{ -- return m_locationChanged; --} -- --void TimeInfo::setLastModificationTime(const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- m_lastModificationTime = dateTime; --} -- --void TimeInfo::setCreationTime(const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- m_creationTime = dateTime; --} -- --void TimeInfo::setLastAccessTime(const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- m_lastAccessTime = dateTime; --} -- --void TimeInfo::setExpiryTime(const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- m_expiryTime = dateTime; --} -- --void TimeInfo::setExpires(bool expires) --{ -- m_expires = expires; --} -- --void TimeInfo::setUsageCount(int count) --{ -- m_usageCount = count; --} -- --void TimeInfo::setLocationChanged(const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- m_locationChanged = dateTime; --} -- --bool TimeInfo::operator==(const TimeInfo& other) const --{ -- return equals(other, CompareItemDefault); --} -- --bool TimeInfo::operator!=(const TimeInfo& other) const --{ -- return !this->operator==(other); --} -- --bool TimeInfo::equals(const TimeInfo& other, CompareItemOptions options) const --{ -- // clang-format off -- if (::compare(m_lastModificationTime, other.m_lastModificationTime, options) != 0) { -- return false; -- } -- if (::compare(m_creationTime, other.m_creationTime, options) != 0) { -- return false; -- } -- if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_lastAccessTime, other.m_lastAccessTime, options) != 0) { -- return false; -- } -- if (::compare(m_expires, m_expiryTime, other.m_expires, other.expiryTime(), options) != 0) { -- return false; -- } -- if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_usageCount, other.m_usageCount, options) != 0) { -- return false; -- } -- if (::compare(!options.testFlag(CompareItemIgnoreLocation), m_locationChanged, other.m_locationChanged, options) != 0) { -- return false; -- } -- return true; -- // clang-format on --} -diff -urNr keepassxc-2.6.4-orig/src/core/TimeInfo.h keepassxc-2.6.4-patched/src/core/TimeInfo.h ---- keepassxc-2.6.4-orig/src/core/TimeInfo.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/TimeInfo.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,61 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_TIMEINFO_H --#define KEEPASSX_TIMEINFO_H -- --#include --#include -- --#include "core/Compare.h" -- --class TimeInfo --{ --public: -- TimeInfo(); -- -- QDateTime lastModificationTime() const; -- QDateTime creationTime() const; -- QDateTime lastAccessTime() const; -- QDateTime expiryTime() const; -- bool expires() const; -- int usageCount() const; -- QDateTime locationChanged() const; -- -- bool operator==(const TimeInfo& other) const; -- bool operator!=(const TimeInfo& other) const; -- bool equals(const TimeInfo& other, CompareItemOptions options = CompareItemDefault) const; -- -- void setLastModificationTime(const QDateTime& dateTime); -- void setCreationTime(const QDateTime& dateTime); -- void setLastAccessTime(const QDateTime& dateTime); -- void setExpiryTime(const QDateTime& dateTime); -- void setExpires(bool expires); -- void setUsageCount(int count); -- void setLocationChanged(const QDateTime& dateTime); -- --private: -- QDateTime m_lastModificationTime; -- QDateTime m_creationTime; -- QDateTime m_lastAccessTime; -- QDateTime m_expiryTime; -- bool m_expires; -- int m_usageCount; -- QDateTime m_locationChanged; --}; -- --#endif // KEEPASSX_TIMEINFO_H -diff -urNr keepassxc-2.6.4-orig/src/core/Tools.cpp keepassxc-2.6.4-patched/src/core/Tools.cpp ---- keepassxc-2.6.4-orig/src/core/Tools.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Tools.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,381 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 Lennart Glauer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Tools.h" -- --#include "config-keepassx.h" --#include "core/Config.h" --#include "core/Translator.h" -- --#include "git-info.h" --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#ifdef Q_OS_WIN --#include // for Sleep() --#endif -- --#ifdef Q_OS_UNIX --#include // for nanosleep() --#endif -- --namespace Tools --{ -- QString debugInfo() -- { -- QString debugInfo = "KeePassXC - "; -- debugInfo.append(QObject::tr("Version %1").arg(KEEPASSXC_VERSION).append("\n")); --#ifndef KEEPASSXC_BUILD_TYPE_RELEASE -- debugInfo.append(QObject::tr("Build Type: %1").arg(KEEPASSXC_BUILD_TYPE).append("\n")); --#endif -- -- QString commitHash; -- if (!QString(GIT_HEAD).isEmpty()) { -- commitHash = GIT_HEAD; -- } -- if (!commitHash.isEmpty()) { -- debugInfo.append(QObject::tr("Revision: %1").arg(commitHash.left(7)).append("\n")); -- } -- --#ifdef KEEPASSXC_DIST -- debugInfo.append(QObject::tr("Distribution: %1").arg(KEEPASSXC_DIST_TYPE).append("\n")); --#endif -- -- // Qt related debugging information. -- debugInfo.append("\n"); -- debugInfo.append("Qt ").append(QString::fromLocal8Bit(qVersion())).append("\n"); --#ifdef QT_NO_DEBUG -- debugInfo.append(QObject::tr("Debugging mode is disabled.").append("\n")); --#else -- debugInfo.append(QObject::tr("Debugging mode is enabled.").append("\n")); --#endif -- debugInfo.append("\n"); -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) -- debugInfo.append(QObject::tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4") -- .arg(QSysInfo::prettyProductName(), -- QSysInfo::currentCpuArchitecture(), -- QSysInfo::kernelType(), -- QSysInfo::kernelVersion())); -- -- debugInfo.append("\n\n"); --#endif -- -- QString extensions; --#ifdef WITH_XC_AUTOTYPE -- extensions += "\n- " + QObject::tr("Auto-Type"); --#endif --#ifdef WITH_XC_BROWSER -- extensions += "\n- " + QObject::tr("Browser Integration"); --#endif --#ifdef WITH_XC_SSHAGENT -- extensions += "\n- " + QObject::tr("SSH Agent"); --#endif --#if defined(WITH_XC_KEESHARE_SECURE) && defined(WITH_XC_KEESHARE_INSECURE) -- extensions += "\n- " + QObject::tr("KeeShare (signed and unsigned sharing)"); --#elif defined(WITH_XC_KEESHARE_SECURE) -- extensions += "\n- " + QObject::tr("KeeShare (only signed sharing)"); --#elif defined(WITH_XC_KEESHARE_INSECURE) -- extensions += "\n- " + QObject::tr("KeeShare (only unsigned sharing)"); --#endif --#ifdef WITH_XC_YUBIKEY -- extensions += "\n- " + QObject::tr("YubiKey"); --#endif --#ifdef WITH_XC_TOUCHID -- extensions += "\n- " + QObject::tr("TouchID"); --#endif --#ifdef WITH_XC_FDOSECRETS -- extensions += "\n- " + QObject::tr("Secret Service Integration"); --#endif -- -- if (extensions.isEmpty()) { -- extensions = " " + QObject::tr("None"); -- } -- -- debugInfo.append(QObject::tr("Enabled extensions:").append(extensions).append("\n")); -- return debugInfo; -- } -- -- QString humanReadableFileSize(qint64 bytes, quint32 precision) -- { -- constexpr auto kibibyte = 1024; -- double size = bytes; -- -- QStringList units = QStringList() << "B" -- << "KiB" -- << "MiB" -- << "GiB"; -- int i = 0; -- int maxI = units.size() - 1; -- -- while ((size >= kibibyte) && (i < maxI)) { -- size /= kibibyte; -- i++; -- } -- -- return QString("%1 %2").arg(QLocale().toString(size, 'f', precision), units.at(i)); -- } -- -- bool readFromDevice(QIODevice* device, QByteArray& data, int size) -- { -- QByteArray buffer; -- buffer.resize(size); -- -- qint64 readResult = device->read(buffer.data(), size); -- if (readResult == -1) { -- return false; -- } else { -- buffer.resize(readResult); -- data = buffer; -- return true; -- } -- } -- -- bool readAllFromDevice(QIODevice* device, QByteArray& data) -- { -- QByteArray result; -- qint64 readBytes = 0; -- qint64 readResult; -- do { -- result.resize(result.size() + 16384); -- readResult = device->read(result.data() + readBytes, result.size() - readBytes); -- if (readResult > 0) { -- readBytes += readResult; -- } -- } while (readResult > 0); -- -- if (readResult == -1) { -- return false; -- } else { -- result.resize(static_cast(readBytes)); -- data = result; -- return true; -- } -- } -- -- QString imageReaderFilter() -- { -- const QList formats = QImageReader::supportedImageFormats(); -- QStringList formatsStringList; -- -- for (const QByteArray& format : formats) { -- for (char codePoint : format) { -- if (!QChar(codePoint).isLetterOrNumber()) { -- continue; -- } -- } -- -- formatsStringList.append("*." + QString::fromLatin1(format).toLower()); -- } -- -- return formatsStringList.join(" "); -- } -- -- bool isHex(const QByteArray& ba) -- { -- for (const uchar c : ba) { -- if (!std::isxdigit(c)) { -- return false; -- } -- } -- -- return true; -- } -- -- bool isBase64(const QByteArray& ba) -- { -- constexpr auto pattern = R"(^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$)"; -- QRegExp regexp(pattern, Qt::CaseInsensitive, QRegExp::RegExp2); -- -- QString base64 = QString::fromLatin1(ba.constData(), ba.size()); -- -- return regexp.exactMatch(base64); -- } -- -- void sleep(int ms) -- { -- Q_ASSERT(ms >= 0); -- -- if (ms == 0) { -- return; -- } -- --#ifdef Q_OS_WIN -- Sleep(uint(ms)); --#else -- timespec ts; -- ts.tv_sec = ms / 1000; -- ts.tv_nsec = (ms % 1000) * 1000 * 1000; -- nanosleep(&ts, nullptr); --#endif -- } -- -- void wait(int ms) -- { -- Q_ASSERT(ms >= 0); -- -- if (ms == 0) { -- return; -- } -- -- QElapsedTimer timer; -- timer.start(); -- -- if (ms <= 50) { -- QCoreApplication::processEvents(QEventLoop::AllEvents, ms); -- sleep(qMax(ms - static_cast(timer.elapsed()), 0)); -- } else { -- int timeLeft; -- do { -- timeLeft = ms - timer.elapsed(); -- if (timeLeft > 0) { -- QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); -- sleep(10); -- } -- } while (!timer.hasExpired(ms)); -- } -- } -- -- bool checkUrlValid(const QString& urlField) -- { -- if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive) -- || urlField.startsWith("{REF:A", Qt::CaseInsensitive)) { -- return true; -- } -- -- QUrl url; -- if (urlField.contains("://")) { -- url = urlField; -- } else { -- url = QUrl::fromUserInput(urlField); -- } -- -- if (url.scheme() != "file" && url.host().isEmpty()) { -- return false; -- } -- -- // Check for illegal characters. Adds also the wildcard * to the list -- QRegularExpression re("[<>\\^`{|}\\*]"); -- auto match = re.match(urlField); -- if (match.hasMatch()) { -- return false; -- } -- -- return true; -- } -- -- // Escape common regex symbols except for *, ?, and | -- auto regexEscape = QRegularExpression(R"re(([-[\]{}()+.,\\\/^$#]))re"); -- -- QRegularExpression convertToRegex(const QString& string, bool useWildcards, bool exactMatch, bool caseSensitive) -- { -- QString pattern = string; -- -- // Wildcard support (*, ?, |) -- if (useWildcards) { -- pattern.replace(regexEscape, "\\\\1"); -- pattern.replace("*", ".*"); -- pattern.replace("?", "."); -- } -- -- // Exact modifier -- if (exactMatch) { -- pattern = "^" + pattern + "$"; -- } -- -- auto regex = QRegularExpression(pattern); -- if (!caseSensitive) { -- regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption); -- } -- -- return regex; -- } -- -- QString uuidToHex(const QUuid& uuid) -- { -- return QString::fromLatin1(uuid.toRfc4122().toHex()); -- } -- -- QUuid hexToUuid(const QString& uuid) -- { -- return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); -- } -- -- QString envSubstitute(const QString& filepath, QProcessEnvironment environment) -- { -- QString subbed = filepath; -- --#if defined(Q_OS_WIN) -- QRegularExpression varRe("\\%([A-Za-z][A-Za-z0-9_]*)\\%"); -- QString homeEnv = "USERPROFILE"; --#else -- QRegularExpression varRe("\\$([A-Za-z][A-Za-z0-9_]*)"); -- QString homeEnv = "HOME"; --#endif -- -- if (subbed.startsWith("~/") || subbed.startsWith("~\\")) -- subbed.replace(0, 1, environment.value(homeEnv)); -- -- QRegularExpressionMatch match; -- -- do { -- match = varRe.match(subbed); -- if (match.hasMatch()) { -- subbed.replace(match.capturedStart(), match.capturedLength(), environment.value(match.captured(1))); -- } -- } while (match.hasMatch()); -- -- return subbed; -- } -- -- Buffer::Buffer() -- : raw(nullptr) -- , size(0) -- { -- } -- -- Buffer::~Buffer() -- { -- clear(); -- } -- -- void Buffer::clear() -- { -- if (size > 0) { -- free(raw); -- } -- raw = nullptr; -- size = 0; -- } -- -- QByteArray Buffer::content() const -- { -- return QByteArray(reinterpret_cast(raw), size); -- } -- --} // namespace Tools -diff -urNr keepassxc-2.6.4-orig/src/core/Tools.h keepassxc-2.6.4-patched/src/core/Tools.h ---- keepassxc-2.6.4-orig/src/core/Tools.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Tools.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,110 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_TOOLS_H --#define KEEPASSX_TOOLS_H -- --#include "core/Global.h" -- --#include --#include --#include --#include -- --#include -- --class QIODevice; --class QRegularExpression; -- --namespace Tools --{ -- QString debugInfo(); -- QString humanReadableFileSize(qint64 bytes, quint32 precision = 2); -- bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); -- bool readAllFromDevice(QIODevice* device, QByteArray& data); -- QString imageReaderFilter(); -- bool isHex(const QByteArray& ba); -- bool isBase64(const QByteArray& ba); -- void sleep(int ms); -- void wait(int ms); -- bool checkUrlValid(const QString& urlField); -- QString uuidToHex(const QUuid& uuid); -- QUuid hexToUuid(const QString& uuid); -- QRegularExpression convertToRegex(const QString& string, -- bool useWildcards = false, -- bool exactMatch = false, -- bool caseSensitive = false); -- QString envSubstitute(const QString& filepath, -- QProcessEnvironment environment = QProcessEnvironment::systemEnvironment()); -- -- template -- RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value) -- { -- RandomAccessIterator it = std::lower_bound(begin, end, value); -- -- if ((it == end) || (value < *it)) { -- return end; -- } else { -- return it; -- } -- } -- -- template struct Map -- { -- QMap values; -- Value& operator[](const Key index) -- { -- return values[index]; -- } -- -- ~Map() -- { -- for (Value m : values) { -- deleter(m); -- } -- } -- }; -- -- struct Buffer -- { -- unsigned char* raw; -- size_t size; -- -- Buffer(); -- ~Buffer(); -- -- void clear(); -- QByteArray content() const; -- }; -- -- inline int qtRuntimeVersion() -- { -- // Cache the result since the Qt version can't change during -- // the execution, computing it once will be enough -- const static int version = []() { -- const auto sq = QString::fromLatin1(qVersion()); -- return (sq.section(QChar::fromLatin1('.'), 0, 0).toInt() << 16) -- + (sq.section(QChar::fromLatin1('.'), 1, 1).toInt() << 8) -- + (sq.section(QChar::fromLatin1('.'), 2, 2).toInt()); -- }(); -- -- return version; -- } --} // namespace Tools -- --#endif // KEEPASSX_TOOLS_H -diff -urNr keepassxc-2.6.4-orig/src/core/Translator.cpp keepassxc-2.6.4-patched/src/core/Translator.cpp ---- keepassxc-2.6.4-orig/src/core/Translator.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Translator.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,138 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2014 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Translator.h" -- --#include --#include --#include --#include --#include --#include -- --#include "config-keepassx.h" --#include "core/Config.h" --#include "core/Resources.h" -- --/** -- * Install all KeePassXC and Qt translators. -- */ --void Translator::installTranslators() --{ -- QStringList languages; -- QString languageSetting = config()->get(Config::GUI_Language).toString(); -- if (languageSetting.isEmpty() || languageSetting == "system") { -- // NOTE: this is a workaround for the terrible way Qt loads languages -- // using the QLocale::uiLanguages() approach. Instead, we search each -- // language and all country variants in order before moving to the next. -- QLocale locale; -- languages = locale.uiLanguages(); -- } else { -- languages << languageSetting; -- } -- -- // Always try to load english last -- languages << "en_US"; -- -- const auto path = resources()->dataPath("translations"); -- installQtTranslator(languages, path); -- if (!installTranslator(languages, path)) { -- // couldn't load configured language or fallback -- qWarning("Couldn't load translations."); -- } --} -- --/** -- * Install KeePassXC translator. -- * -- * @param languages priority-ordered list of languages -- * @param path absolute search path -- * @return true on success -- */ --bool Translator::installTranslator(const QStringList& languages, const QString& path) --{ -- for (const auto& language : languages) { -- QLocale locale(language); -- QScopedPointer translator(new QTranslator(qApp)); -- if (translator->load(locale, "keepassx_", "", path)) { -- return QCoreApplication::installTranslator(translator.take()); -- } else if (translator->load(locale, "keepassx_", "", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { -- return QCoreApplication::installTranslator(translator.take()); -- } -- } -- -- return false; --} -- --/** -- * Install Qt5 base translator from the specified local search path or the default system path -- * if no qtbase_* translations were found at the local path. -- * -- * @param languages priority-ordered list of languages -- * @param path absolute search path -- * @return true on success -- */ --bool Translator::installQtTranslator(const QStringList& languages, const QString& path) --{ -- for (const auto& language : languages) { -- QLocale locale(language); -- QScopedPointer qtTranslator(new QTranslator(qApp)); -- if (qtTranslator->load(locale, "qtbase_", "", path)) { -- return QCoreApplication::installTranslator(qtTranslator.take()); -- } else if (qtTranslator->load(locale, "qtbase_", "", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { -- return QCoreApplication::installTranslator(qtTranslator.take()); -- } -- } -- return false; --} -- --/** -- * @return list of pairs of available language codes and names -- */ --QList> Translator::availableLanguages() --{ -- QList> languages; -- languages.append(QPair("system", "System default")); -- -- QRegularExpression regExp("^keepassx_([a-zA-Z_]+)\\.qm$", QRegularExpression::CaseInsensitiveOption); -- const QStringList fileList = QDir(resources()->dataPath("translations")).entryList(); -- for (const QString& filename : fileList) { -- QRegularExpressionMatch match = regExp.match(filename); -- if (match.hasMatch()) { -- QString langcode = match.captured(1); -- if (langcode == "en") { -- continue; -- } -- -- QLocale locale(langcode); -- QString languageStr = QLocale::languageToString(locale.language()); -- if (langcode == "la") { -- // langcode "la" (Latin) is translated into "C" by QLocale::languageToString() -- languageStr = "Latin"; -- } -- if (langcode.contains("_")) { -- languageStr += QString(" (%1)").arg(QLocale::countryToString(locale.country())); -- } -- -- QPair language(langcode, languageStr); -- languages.append(language); -- } -- } -- -- return languages; --} -diff -urNr keepassxc-2.6.4-orig/src/core/Translator.h keepassxc-2.6.4-patched/src/core/Translator.h ---- keepassxc-2.6.4-orig/src/core/Translator.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/core/Translator.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2014 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_TRANSLATOR_H --#define KEEPASSX_TRANSLATOR_H -- --#include --#include --#include -- --class Translator --{ --public: -- static void installTranslators(); -- static QList> availableLanguages(); -- --private: -- static bool installTranslator(const QStringList& languages, const QString& path); -- static bool installQtTranslator(const QStringList& languages, const QString& path); --}; -- --#endif // KEEPASSX_TRANSLATOR_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/argon2/argon2.h keepassxc-2.6.4-patched/src/crypto/argon2/argon2.h ---- keepassxc-2.6.4-orig/src/crypto/argon2/argon2.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/argon2/argon2.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_CRYPTO_ARGON2_H --#define KEEPASSXC_CRYPTO_ARGON2_H -- --/* -- Argon2 wrapper header with redefined symbols to be used with the -- patched libargon2 binary which is generated by the build system. -- This is to avoid link-time definition clashes with libsodium on Windows. -- */ -- --#ifdef Q_OS_WIN --#define argon2_hash libargon2_argon2_hash --#define argon2_error_message libargon2_argon2_error_message --#endif -- --#include -- --#endif // KEEPASSXC_CRYPTO_ARGON2_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/Crypto.cpp keepassxc-2.6.4-patched/src/crypto/Crypto.cpp ---- keepassxc-2.6.4-orig/src/crypto/Crypto.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/Crypto.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,344 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Crypto.h" -- --#include -- --#include -- --#include "config-keepassx.h" --#include "crypto/CryptoHash.h" --#include "crypto/SymmetricCipher.h" -- --bool Crypto::m_initialized(false); --QString Crypto::m_errorStr; --QString Crypto::m_backendVersion; -- --Crypto::Crypto() --{ --} -- --bool Crypto::init() --{ -- if (m_initialized) { -- qWarning("Crypto::init: already initialized"); -- return true; -- } -- -- m_backendVersion = QString::fromLocal8Bit(gcry_check_version(0)); -- gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); -- -- if (!checkAlgorithms()) { -- return false; -- } -- -- // has to be set before testing Crypto classes -- m_initialized = true; -- -- if (!backendSelfTest() || !selfTest()) { -- m_initialized = false; -- return false; -- } -- -- return true; --} -- --bool Crypto::initialized() --{ -- return m_initialized; --} -- --QString Crypto::errorString() --{ -- return m_errorStr; --} -- --QString Crypto::debugInfo() --{ -- Q_ASSERT(Crypto::initialized()); -- -- QString debugInfo = QObject::tr("Cryptographic libraries:").append("\n"); -- debugInfo.append("- libgcrypt ").append(m_backendVersion).append("\n"); -- return debugInfo; --} -- --bool Crypto::backendSelfTest() --{ -- return (gcry_control(GCRYCTL_SELFTEST) == 0); --} -- --bool Crypto::checkAlgorithms() --{ -- if (gcry_cipher_algo_info(GCRY_CIPHER_AES256, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { -- m_errorStr = "GCRY_CIPHER_AES256 not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- if (gcry_cipher_algo_info(GCRY_CIPHER_TWOFISH, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { -- m_errorStr = "GCRY_CIPHER_TWOFISH not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- if (gcry_cipher_algo_info(GCRY_CIPHER_SALSA20, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { -- m_errorStr = "GCRY_CIPHER_SALSA20 not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- if (gcry_cipher_algo_info(GCRY_CIPHER_CHACHA20, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { -- m_errorStr = "GCRY_CIPHER_CHACHA20 not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- if (gcry_md_test_algo(GCRY_MD_SHA256) != 0) { -- m_errorStr = "GCRY_MD_SHA256 not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- if (gcry_md_test_algo(GCRY_MD_SHA512) != 0) { -- m_errorStr = "GCRY_MD_SHA512 not found."; -- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); -- return false; -- } -- -- return true; --} -- --bool Crypto::selfTest() --{ -- return testSha256() && testSha512() && testAes256Cbc() && testAes256Ecb() && testTwofish() && testSalsa20() -- && testChaCha20(); --} -- --void Crypto::raiseError(const QString& str) --{ -- m_errorStr = str; -- qWarning("Crypto::selfTest: %s", qPrintable(m_errorStr)); --} -- --bool Crypto::testSha256() --{ -- QByteArray sha256Test = -- CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha256); -- -- if (sha256Test != QByteArray::fromHex("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1")) { -- raiseError("SHA-256 mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testSha512() --{ -- QByteArray sha512Test = -- CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha512); -- -- if (sha512Test -- != QByteArray::fromHex("204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b" -- "07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445")) { -- raiseError("SHA-512 mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testAes256Cbc() --{ -- QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); -- QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); -- QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); -- plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); -- QByteArray cipherText = QByteArray::fromHex("f58c4c04d6e5f1ba779eabfb5f7bfbd6"); -- cipherText.append(QByteArray::fromHex("9cfc4e967edb808d679f777bc6702c7d")); -- bool ok; -- -- SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); -- if (!aes256Encrypt.init(key, iv)) { -- raiseError(aes256Encrypt.errorString()); -- return false; -- } -- QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); -- if (!ok) { -- raiseError(aes256Encrypt.errorString()); -- return false; -- } -- if (encryptedText != cipherText) { -- raiseError("AES-256 CBC encryption mismatch."); -- return false; -- } -- -- SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); -- if (!aes256Decrypt.init(key, iv)) { -- raiseError(aes256Decrypt.errorString()); -- return false; -- } -- QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok); -- if (!ok) { -- raiseError(aes256Decrypt.errorString()); -- return false; -- } -- if (decryptedText != plainText) { -- raiseError("AES-256 CBC decryption mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testAes256Ecb() --{ -- QByteArray key = QByteArray::fromHex("000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); -- QByteArray iv = QByteArray::fromHex("00000000000000000000000000000000"); -- QByteArray plainText = QByteArray::fromHex("00112233445566778899AABBCCDDEEFF"); -- plainText.append(QByteArray::fromHex("00112233445566778899AABBCCDDEEFF")); -- QByteArray cipherText = QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089"); -- cipherText.append(QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089")); -- bool ok; -- -- SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); -- if (!aes256Encrypt.init(key, iv)) { -- raiseError(aes256Encrypt.errorString()); -- return false; -- } -- QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); -- if (!ok) { -- raiseError(aes256Encrypt.errorString()); -- return false; -- } -- if (encryptedText != cipherText) { -- raiseError("AES-256 ECB encryption mismatch."); -- return false; -- } -- -- SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Decrypt); -- if (!aes256Decrypt.init(key, iv)) { -- raiseError(aes256Decrypt.errorString()); -- return false; -- } -- QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok); -- if (!ok) { -- raiseError(aes256Decrypt.errorString()); -- return false; -- } -- if (decryptedText != plainText) { -- raiseError("AES-256 ECB decryption mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testTwofish() --{ -- QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); -- QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); -- QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); -- plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); -- QByteArray cipherText = QByteArray::fromHex("e0227c3cc80f3cb1b2ed847cc6f57d3c"); -- cipherText.append(QByteArray::fromHex("657b1e7960b30fb7c8d62e72ae37c3a0")); -- bool ok; -- -- SymmetricCipher twofishEncrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); -- if (!twofishEncrypt.init(key, iv)) { -- raiseError(twofishEncrypt.errorString()); -- return false; -- } -- QByteArray encryptedText = twofishEncrypt.process(plainText, &ok); -- if (!ok) { -- raiseError(twofishEncrypt.errorString()); -- return false; -- } -- if (encryptedText != cipherText) { -- raiseError("Twofish encryption mismatch."); -- return false; -- } -- -- SymmetricCipher twofishDecrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); -- if (!twofishDecrypt.init(key, iv)) { -- raiseError(twofishEncrypt.errorString()); -- return false; -- } -- QByteArray decryptedText = twofishDecrypt.process(cipherText, &ok); -- if (!ok) { -- raiseError(twofishDecrypt.errorString()); -- return false; -- } -- if (decryptedText != plainText) { -- raiseError("Twofish encryption mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testSalsa20() --{ -- QByteArray salsa20Key = QByteArray::fromHex("F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112"); -- QByteArray salsa20iv = QByteArray::fromHex("0000000000000000"); -- QByteArray salsa20Plain = QByteArray::fromHex("00000000000000000000000000000000"); -- QByteArray salsa20Cipher = QByteArray::fromHex("B4C0AFA503BE7FC29A62058166D56F8F"); -- bool ok; -- -- SymmetricCipher salsa20Stream(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); -- if (!salsa20Stream.init(salsa20Key, salsa20iv)) { -- raiseError(salsa20Stream.errorString()); -- return false; -- } -- -- QByteArray salsaProcessed = salsa20Stream.process(salsa20Plain, &ok); -- if (!ok) { -- raiseError(salsa20Stream.errorString()); -- return false; -- } -- if (salsaProcessed != salsa20Cipher) { -- raiseError("Salsa20 stream cipher mismatch."); -- return false; -- } -- -- return true; --} -- --bool Crypto::testChaCha20() --{ -- QByteArray chacha20Key = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000"); -- QByteArray chacha20iv = QByteArray::fromHex("0000000000000000"); -- QByteArray chacha20Plain = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000000" -- "0000000000000000000000000000000000000000000000000000000000000"); -- QByteArray chacha20Cipher = QByteArray::fromHex("76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da" -- "41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586"); -- bool ok; -- -- SymmetricCipher chacha20Stream(SymmetricCipher::ChaCha20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); -- if (!chacha20Stream.init(chacha20Key, chacha20iv)) { -- raiseError(chacha20Stream.errorString()); -- return false; -- } -- -- QByteArray chacha20Processed = chacha20Stream.process(chacha20Plain, &ok); -- if (!ok) { -- raiseError(chacha20Stream.errorString()); -- return false; -- } -- if (chacha20Processed != chacha20Cipher) { -- raiseError("ChaCha20 stream cipher mismatch."); -- return false; -- } -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/Crypto.h keepassxc-2.6.4-patched/src/crypto/Crypto.h ---- keepassxc-2.6.4-orig/src/crypto/Crypto.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/Crypto.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CRYPTO_H --#define KEEPASSX_CRYPTO_H -- --#include -- --class Crypto --{ --public: -- static bool init(); -- static bool initialized(); -- static bool backendSelfTest(); -- static QString errorString(); -- static QString debugInfo(); -- --private: -- Crypto(); -- static bool checkAlgorithms(); -- static bool selfTest(); -- static void raiseError(const QString& str); -- static bool testSha256(); -- static bool testSha512(); -- static bool testAes256Cbc(); -- static bool testAes256Ecb(); -- static bool testTwofish(); -- static bool testSalsa20(); -- static bool testChaCha20(); -- -- static bool m_initialized; -- static QString m_errorStr; -- static QString m_backendVersion; --}; -- --#endif // KEEPASSX_CRYPTO_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/CryptoHash.cpp keepassxc-2.6.4-patched/src/crypto/CryptoHash.cpp ---- keepassxc-2.6.4-orig/src/crypto/CryptoHash.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/CryptoHash.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,122 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CryptoHash.h" -- --#include -- --#include "crypto/Crypto.h" -- --class CryptoHashPrivate --{ --public: -- gcry_md_hd_t ctx; -- int hashLen; --}; -- --CryptoHash::CryptoHash(Algorithm algo, bool hmac) -- : d_ptr(new CryptoHashPrivate()) --{ -- Q_D(CryptoHash); -- -- Q_ASSERT(Crypto::initialized()); -- -- int algoGcrypt = -1; -- unsigned int flagsGcrypt = GCRY_MD_FLAG_SECURE; -- -- switch (algo) { -- case CryptoHash::Sha256: -- algoGcrypt = GCRY_MD_SHA256; -- break; -- -- case CryptoHash::Sha512: -- algoGcrypt = GCRY_MD_SHA512; -- break; -- -- default: -- Q_ASSERT(false); -- break; -- } -- -- if (hmac) { -- flagsGcrypt |= GCRY_MD_FLAG_HMAC; -- } -- -- gcry_error_t error = gcry_md_open(&d->ctx, algoGcrypt, flagsGcrypt); -- if (error != GPG_ERR_NO_ERROR) { -- qWarning("Gcrypt error (ctor): %s\n %s", gcry_strerror(error), gcry_strsource(error)); -- } -- Q_ASSERT(error == 0); // TODO: error handling -- -- d->hashLen = gcry_md_get_algo_dlen(algoGcrypt); --} -- --CryptoHash::~CryptoHash() --{ -- Q_D(CryptoHash); -- -- gcry_md_close(d->ctx); -- -- delete d_ptr; --} -- --void CryptoHash::addData(const QByteArray& data) --{ -- Q_D(CryptoHash); -- -- if (data.isEmpty()) { -- return; -- } -- -- gcry_md_write(d->ctx, data.constData(), static_cast(data.size())); --} -- --void CryptoHash::setKey(const QByteArray& data) --{ -- Q_D(CryptoHash); -- -- gcry_error_t error = gcry_md_setkey(d->ctx, data.constData(), static_cast(data.size())); -- if (error) { -- qWarning("Gcrypt error (setKey): %s\n %s", gcry_strerror(error), gcry_strsource(error)); -- } -- Q_ASSERT(error == 0); --} -- --QByteArray CryptoHash::result() const --{ -- Q_D(const CryptoHash); -- -- const auto result = reinterpret_cast(gcry_md_read(d->ctx, 0)); -- return QByteArray(result, d->hashLen); --} -- --QByteArray CryptoHash::hash(const QByteArray& data, Algorithm algo) --{ -- // replace with gcry_md_hash_buffer()? -- CryptoHash cryptoHash(algo); -- cryptoHash.addData(data); -- return cryptoHash.result(); --} -- --QByteArray CryptoHash::hmac(const QByteArray& data, const QByteArray& key, Algorithm algo) --{ -- // replace with gcry_md_hash_buffer()? -- CryptoHash cryptoHash(algo, true); -- cryptoHash.setKey(key); -- cryptoHash.addData(data); -- return cryptoHash.result(); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/CryptoHash.h keepassxc-2.6.4-patched/src/crypto/CryptoHash.h ---- keepassxc-2.6.4-orig/src/crypto/CryptoHash.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/CryptoHash.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,49 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CRYPTOHASH_H --#define KEEPASSX_CRYPTOHASH_H -- --#include -- --class CryptoHashPrivate; -- --class CryptoHash --{ --public: -- enum Algorithm -- { -- Sha256, -- Sha512 -- }; -- -- explicit CryptoHash(Algorithm algo, bool hmac = false); -- ~CryptoHash(); -- void addData(const QByteArray& data); -- QByteArray result() const; -- void setKey(const QByteArray& data); -- -- static QByteArray hash(const QByteArray& data, Algorithm algo); -- static QByteArray hmac(const QByteArray& data, const QByteArray& key, Algorithm algo); -- --private: -- CryptoHashPrivate* const d_ptr; -- -- Q_DECLARE_PRIVATE(CryptoHash) --}; -- --#endif // KEEPASSX_CRYPTOHASH_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.cpp ---- keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,132 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AesKdf.h" -- --#include -- --#include "crypto/CryptoHash.h" --#include "format/KeePass2.h" -- --AesKdf::AesKdf() -- : Kdf::Kdf(KeePass2::KDF_AES_KDBX4) --{ --} -- --/** -- * @param legacyKdbx3 initialize as legacy KDBX3 KDF -- */ --AesKdf::AesKdf(bool legacyKdbx3) -- : Kdf::Kdf(legacyKdbx3 ? KeePass2::KDF_AES_KDBX3 : KeePass2::KDF_AES_KDBX4) --{ --} -- --bool AesKdf::processParameters(const QVariantMap& p) --{ -- bool ok; -- int rounds = p.value(KeePass2::KDFPARAM_AES_ROUNDS).toInt(&ok); -- if (!ok || !setRounds(rounds)) { -- return false; -- } -- -- QByteArray seed = p.value(KeePass2::KDFPARAM_AES_SEED).toByteArray(); -- return setSeed(seed); --} -- --QVariantMap AesKdf::writeParameters() --{ -- QVariantMap p; -- -- // always write old KDBX3 AES-KDF UUID for compatibility with other applications -- p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_AES_KDBX3.toRfc4122()); -- -- p.insert(KeePass2::KDFPARAM_AES_ROUNDS, static_cast(rounds())); -- p.insert(KeePass2::KDFPARAM_AES_SEED, seed()); -- return p; --} -- --bool AesKdf::transform(const QByteArray& raw, QByteArray& result) const --{ -- QByteArray resultLeft; -- QByteArray resultRight; -- -- QFuture future = QtConcurrent::run(transformKeyRaw, raw.left(16), m_seed, m_rounds, &resultLeft); -- -- bool rightResult = transformKeyRaw(raw.right(16), m_seed, m_rounds, &resultRight); -- bool leftResult = future.result(); -- -- if (!rightResult || !leftResult) { -- return false; -- } -- -- QByteArray transformed; -- transformed.append(resultLeft); -- transformed.append(resultRight); -- -- result = CryptoHash::hash(transformed, CryptoHash::Sha256); -- return true; --} -- --bool AesKdf::transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result) --{ -- QByteArray iv(16, 0); -- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); -- if (!cipher.init(seed, iv)) { -- qWarning("AesKdf::transformKeyRaw: error in SymmetricCipher::init: %s", cipher.errorString().toUtf8().data()); -- return false; -- } -- -- *result = key; -- -- if (!cipher.processInPlace(*result, rounds)) { -- qWarning("AesKdf::transformKeyRaw: error in SymmetricCipher::processInPlace: %s", -- cipher.errorString().toUtf8().data()); -- return false; -- } -- -- return true; --} -- --QSharedPointer AesKdf::clone() const --{ -- return QSharedPointer::create(*this); --} -- --int AesKdf::benchmarkImpl(int msec) const --{ -- QByteArray key = QByteArray(16, '\x7E'); -- QByteArray seed = QByteArray(32, '\x4B'); -- QByteArray iv(16, 0); -- -- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); -- cipher.init(seed, iv); -- -- quint64 rounds = 1000000; -- QElapsedTimer timer; -- timer.start(); -- -- if (!cipher.processInPlace(key, rounds)) { -- return -1; -- } -- -- return static_cast(rounds * (static_cast(msec) / timer.elapsed())); --} -- --QString AesKdf::toString() const --{ -- return QObject::tr("AES (%1 rounds)").arg(QString::number(rounds())); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.h keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.h ---- keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AESKDF_H --#define KEEPASSX_AESKDF_H -- --#include "Kdf.h" -- --class AesKdf : public Kdf --{ --public: -- AesKdf(); -- explicit AesKdf(bool legacyKdbx3); -- -- bool processParameters(const QVariantMap& p) override; -- QVariantMap writeParameters() override; -- bool transform(const QByteArray& raw, QByteArray& result) const override; -- QSharedPointer clone() const override; -- QString toString() const override; -- --protected: -- int benchmarkImpl(int msec) const override; -- --private: -- Q_REQUIRED_RESULT static bool -- transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result); --}; -- --#endif // KEEPASSX_AESKDF_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.cpp ---- keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,226 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Argon2Kdf.h" -- --#include -- --#include "crypto/argon2/argon2.h" --#include "format/KeePass2.h" -- --/** -- * KeePass' Argon2 implementation supports all parameters that are defined in the official specification, -- * but only the number of iterations, the memory size and the degree of parallelism can be configured by -- * the user in the database settings dialog. For the other parameters, KeePass chooses reasonable defaults: -- * a 256-bit salt is generated each time the database is saved, the tag length is 256 bits, no secret key -- * or associated data. KeePass uses the latest version of Argon2, v1.3. -- */ --Argon2Kdf::Argon2Kdf(Type type) -- : Kdf::Kdf(type == Type::Argon2d ? KeePass2::KDF_ARGON2D : KeePass2::KDF_ARGON2ID) -- , m_version(0x13) -- , m_memory(1 << 16) -- , m_parallelism(static_cast(QThread::idealThreadCount())) --{ -- m_rounds = 10; --} -- --quint32 Argon2Kdf::version() const --{ -- return m_version; --} -- --bool Argon2Kdf::setVersion(quint32 version) --{ -- // MIN=0x10; MAX=0x13) -- if (version >= 0x10 && version <= 0x13) { -- m_version = version; -- return true; -- } -- m_version = 0x13; -- return false; --} -- --Argon2Kdf::Type Argon2Kdf::type() const --{ -- return uuid() == KeePass2::KDF_ARGON2D ? Type::Argon2d : Type::Argon2id; --} -- --quint64 Argon2Kdf::memory() const --{ -- return m_memory; --} -- --bool Argon2Kdf::setMemory(quint64 kibibytes) --{ -- // MIN=8KB; MAX=2,147,483,648KB -- if (kibibytes >= 8 && kibibytes < (1ULL << 32)) { -- m_memory = kibibytes; -- return true; -- } -- m_memory = 16; -- return false; --} -- --quint32 Argon2Kdf::parallelism() const --{ -- return m_parallelism; --} -- --bool Argon2Kdf::setParallelism(quint32 threads) --{ -- // MIN=1; MAX=16,777,215 -- if (threads >= 1 && threads < (1 << 24)) { -- m_parallelism = threads; -- return true; -- } -- m_parallelism = 1; -- return false; --} -- --bool Argon2Kdf::processParameters(const QVariantMap& p) --{ -- QByteArray salt = p.value(KeePass2::KDFPARAM_ARGON2_SALT).toByteArray(); -- if (!setSeed(salt)) { -- return false; -- } -- -- bool ok; -- quint32 version = p.value(KeePass2::KDFPARAM_ARGON2_VERSION).toUInt(&ok); -- if (!ok || !setVersion(version)) { -- return false; -- } -- -- quint32 lanes = p.value(KeePass2::KDFPARAM_ARGON2_PARALLELISM).toUInt(&ok); -- if (!ok || !setParallelism(lanes)) { -- return false; -- } -- -- quint64 memory = p.value(KeePass2::KDFPARAM_ARGON2_MEMORY).toULongLong(&ok) / 1024ULL; -- if (!ok || !setMemory(memory)) { -- return false; -- } -- -- quint64 iterations = p.value(KeePass2::KDFPARAM_ARGON2_ITERATIONS).toULongLong(&ok); -- if (!ok || !setRounds(iterations)) { -- return false; -- } -- -- /* KeePass2 does not currently implement these parameters -- * -- QByteArray secret = p.value(KeePass2::KDFPARAM_ARGON2_SECRET).toByteArray(); -- if (!argon2Kdf->setSecret(secret)) { -- return nullptr; -- } -- -- QByteArray ad = p.value(KeePass2::KDFPARAM_ARGON2_ASSOCDATA).toByteArray(); -- if (!argon2Kdf->setAssocData(ad)) { -- return nullptr; -- } -- */ -- -- return true; --} -- --QVariantMap Argon2Kdf::writeParameters() --{ -- QVariantMap p; -- p.insert(KeePass2::KDFPARAM_UUID, uuid().toRfc4122()); -- p.insert(KeePass2::KDFPARAM_ARGON2_VERSION, version()); -- p.insert(KeePass2::KDFPARAM_ARGON2_PARALLELISM, parallelism()); -- p.insert(KeePass2::KDFPARAM_ARGON2_MEMORY, memory() * 1024); -- p.insert(KeePass2::KDFPARAM_ARGON2_ITERATIONS, static_cast(rounds())); -- p.insert(KeePass2::KDFPARAM_ARGON2_SALT, seed()); -- -- /* KeePass2 does not currently implement these -- * -- if (!assocData().isEmpty()) { -- p.insert(KeePass2::KDFPARAM_ARGON2_ASSOCDATA, argon2Kdf.assocData()); -- } -- -- if (!secret().isEmpty()) { -- p.insert(KeePass2::KDFPARAM_ARGON2_SECRET, argon2Kdf.secret()); -- } -- */ -- -- return p; --} -- --bool Argon2Kdf::transform(const QByteArray& raw, QByteArray& result) const --{ -- result.clear(); -- result.resize(32); -- return transformKeyRaw(raw, seed(), version(), type(), rounds(), memory(), parallelism(), result); --} -- --bool Argon2Kdf::transformKeyRaw(const QByteArray& key, -- const QByteArray& seed, -- quint32 version, -- Type type, -- quint32 rounds, -- quint64 memory, -- quint32 parallelism, -- QByteArray& result) --{ -- // Time Cost, Mem Cost, Threads/Lanes, Password, length, Salt, length, out, length -- -- int rc = argon2_hash(rounds, -- memory, -- parallelism, -- key.data(), -- key.size(), -- seed.data(), -- seed.size(), -- result.data(), -- result.size(), -- nullptr, -- 0, -- type == Type::Argon2d ? Argon2_d : Argon2_id, -- version); -- if (rc != ARGON2_OK) { -- qWarning("Argon2 error: %s", argon2_error_message(rc)); -- return false; -- } -- -- return true; --} -- --QSharedPointer Argon2Kdf::clone() const --{ -- return QSharedPointer::create(*this); --} -- --int Argon2Kdf::benchmarkImpl(int msec) const --{ -- QByteArray key = QByteArray(16, '\x7E'); -- QByteArray seed = QByteArray(32, '\x4B'); -- -- QElapsedTimer timer; -- timer.start(); -- -- int rounds = 4; -- if (transformKeyRaw(key, seed, version(), type(), rounds, memory(), parallelism(), key)) { -- return static_cast(rounds * (static_cast(msec) / timer.elapsed())); -- } -- -- return 1; --} -- --QString Argon2Kdf::toString() const --{ -- return QObject::tr("Argon2%1 (%2 rounds, %3 KB)") -- .arg(type() == Type::Argon2d ? "d" : "id", QString::number(rounds()), QString::number(memory())); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.h keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.h ---- keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,66 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ARGON2KDF_H --#define KEEPASSX_ARGON2KDF_H -- --#include "Kdf.h" -- --class Argon2Kdf : public Kdf --{ --public: -- enum class Type -- { -- Argon2d, -- Argon2id -- }; -- -- Argon2Kdf(Type type); -- -- bool processParameters(const QVariantMap& p) override; -- QVariantMap writeParameters() override; -- bool transform(const QByteArray& raw, QByteArray& result) const override; -- QSharedPointer clone() const override; -- -- quint32 version() const; -- bool setVersion(quint32 version); -- Type type() const; -- quint64 memory() const; -- bool setMemory(quint64 kibibytes); -- quint32 parallelism() const; -- bool setParallelism(quint32 threads); -- QString toString() const override; -- --protected: -- int benchmarkImpl(int msec) const override; -- -- quint32 m_version; -- quint64 m_memory; -- quint32 m_parallelism; -- --private: -- Q_REQUIRED_RESULT static bool transformKeyRaw(const QByteArray& key, -- const QByteArray& seed, -- quint32 version, -- Type type, -- quint32 rounds, -- quint64 memory, -- quint32 parallelism, -- QByteArray& result); --}; -- --#endif // KEEPASSX_ARGON2KDF_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.cpp ---- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,104 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdf.h" --#include "Kdf_p.h" -- --#include -- --#include "crypto/Random.h" -- --Kdf::Kdf(const QUuid& uuid) -- : m_rounds(KDF_DEFAULT_ROUNDS) -- , m_seed(QByteArray(KDF_MAX_SEED_SIZE, 0)) -- , m_uuid(uuid) --{ --} -- --const QUuid& Kdf::uuid() const --{ -- return m_uuid; --} -- --int Kdf::rounds() const --{ -- return m_rounds; --} -- --QByteArray Kdf::seed() const --{ -- return m_seed; --} -- --bool Kdf::setRounds(int rounds) --{ -- if (rounds >= 1 && rounds < INT_MAX) { -- m_rounds = rounds; -- return true; -- } -- m_rounds = 1; -- return false; --} -- --bool Kdf::setSeed(const QByteArray& seed) --{ -- if (seed.size() < KDF_MIN_SEED_SIZE || seed.size() > KDF_MAX_SEED_SIZE) { -- return false; -- } -- -- m_seed = seed; -- return true; --} -- --void Kdf::randomizeSeed() --{ -- setSeed(randomGen()->randomArray(m_seed.size())); --} -- --int Kdf::benchmark(int msec) const --{ -- // Run the benchmark twice using half the time for each run -- BenchmarkThread thread(msec / 2, this); -- int rounds = 0; -- -- thread.start(); -- thread.wait(); -- rounds += thread.rounds(); -- -- thread.start(); -- thread.wait(); -- rounds += thread.rounds(); -- -- return qMax(1, rounds); --} -- --Kdf::BenchmarkThread::BenchmarkThread(int msec, const Kdf* kdf) -- : m_rounds(1) -- , m_msec(msec) -- , m_kdf(kdf) --{ --} -- --int Kdf::BenchmarkThread::rounds() --{ -- return m_rounds; --} -- --void Kdf::BenchmarkThread::run() --{ -- m_rounds = m_kdf->benchmarkImpl(m_msec); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.h keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.h ---- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,74 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDF_H --#define KEEPASSX_KDF_H -- --#include --#include -- --#define KDF_MIN_SEED_SIZE 8 --#define KDF_MAX_SEED_SIZE 32 --#define KDF_DEFAULT_ROUNDS 1000000ull -- --class Kdf --{ --public: -- explicit Kdf(const QUuid& uuid); -- virtual ~Kdf() = default; -- -- const QUuid& uuid() const; -- -- int rounds() const; -- virtual bool setRounds(int rounds); -- QByteArray seed() const; -- virtual bool setSeed(const QByteArray& seed); -- virtual void randomizeSeed(); -- -- virtual bool processParameters(const QVariantMap& p) = 0; -- virtual QVariantMap writeParameters() = 0; -- virtual bool transform(const QByteArray& raw, QByteArray& result) const = 0; -- virtual QSharedPointer clone() const = 0; -- -- virtual QString toString() const = 0; -- -- int benchmark(int msec) const; -- -- /* -- * Default target encryption time, in MS. -- */ -- static const int DEFAULT_ENCRYPTION_TIME = 1000; -- /* -- * Minimum target encryption time, in MS. -- */ -- static const int MIN_ENCRYPTION_TIME = 100; -- /* -- * Maximum target encryption time, in MS. -- */ -- static const int MAX_ENCRYPTION_TIME = 5000; -- --protected: -- virtual int benchmarkImpl(int msec) const = 0; -- -- int m_rounds; -- QByteArray m_seed; -- --private: -- class BenchmarkThread; -- const QUuid m_uuid; --}; --#endif // KEEPASSX_KDF_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf_p.h keepassxc-2.6.4-patched/src/crypto/kdf/Kdf_p.h ---- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf_p.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf_p.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdf.h" -- --#include -- --#ifndef KEEPASSXC_KDF_P_H --#define KEEPASSXC_KDF_P_H -- --class Kdf::BenchmarkThread : public QThread --{ -- Q_OBJECT -- --public: -- explicit BenchmarkThread(int msec, const Kdf* kdf); -- -- int rounds(); -- --protected: -- void run(); -- --private: -- int m_rounds; -- int m_msec; -- const Kdf* m_kdf; --}; -- --#endif // KEEPASSXC_KDF_P_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/Random.cpp keepassxc-2.6.4-patched/src/crypto/Random.cpp ---- keepassxc-2.6.4-orig/src/crypto/Random.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/Random.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,103 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Random.h" -- --#include -- --#include "core/Global.h" --#include "crypto/Crypto.h" -- --class RandomBackendGcrypt : public RandomBackend --{ --public: -- void randomize(void* data, int len) override; --}; -- --QSharedPointer Random::m_instance; -- --void Random::randomize(QByteArray& ba) --{ -- m_backend->randomize(ba.data(), ba.size()); --} -- --QByteArray Random::randomArray(int len) --{ -- QByteArray ba; -- ba.resize(len); -- -- randomize(ba); -- -- return ba; --} -- --quint32 Random::randomUInt(quint32 limit) --{ -- Q_ASSERT(limit != 0); -- Q_ASSERT(limit <= QUINT32_MAX); -- -- quint32 rand; -- const quint32 ceil = QUINT32_MAX - (QUINT32_MAX % limit) - 1; -- -- // To avoid modulo bias: -- // Make sure rand is below the largest number where rand%limit==0 -- do { -- m_backend->randomize(&rand, 4); -- } while (rand > ceil); -- -- return (rand % limit); --} -- --quint32 Random::randomUIntRange(quint32 min, quint32 max) --{ -- return min + randomUInt(max - min); --} -- --Random* Random::instance() --{ -- if (!m_instance) { -- m_instance.reset(new Random(new RandomBackendGcrypt())); -- } -- -- return m_instance.data(); --} -- --void Random::resetInstance() --{ -- m_instance.reset(); --} -- --void Random::setInstance(RandomBackend* backend) --{ -- m_instance.reset(new Random(backend)); --} -- --Random::Random(RandomBackend* backend) -- : m_backend(backend) --{ --} -- --void RandomBackendGcrypt::randomize(void* data, int len) --{ -- Q_ASSERT(Crypto::initialized()); -- -- gcry_randomize(data, len, GCRY_STRONG_RANDOM); --} -- --RandomBackend::~RandomBackend() --{ --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/Random.h keepassxc-2.6.4-patched/src/crypto/Random.h ---- keepassxc-2.6.4-orig/src/crypto/Random.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/Random.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_RANDOM_H --#define KEEPASSX_RANDOM_H -- --#include --#include --#include -- --class RandomBackend --{ --public: -- virtual void randomize(void* data, int len) = 0; -- virtual ~RandomBackend(); --}; -- --class Random --{ --public: -- void randomize(QByteArray& ba); -- QByteArray randomArray(int len); -- -- /** -- * Generate a random quint32 in the range [0, @p limit) -- */ -- quint32 randomUInt(quint32 limit); -- -- /** -- * Generate a random quint32 in the range [@p min, @p max) -- */ -- quint32 randomUIntRange(quint32 min, quint32 max); -- -- static Random* instance(); -- --protected: -- static void resetInstance(); -- static void setInstance(RandomBackend* backend); -- --private: -- static QSharedPointer m_instance; -- -- explicit Random(RandomBackend* backend); -- -- QScopedPointer m_backend; -- -- Q_DISABLE_COPY(Random) --}; -- --inline Random* randomGen() --{ -- return Random::instance(); --} -- --#endif // KEEPASSX_RANDOM_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.cpp keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.cpp ---- keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,226 +0,0 @@ --/* -- * Copyright (C) 2018 Toni Spets -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ASN1Key.h" --#include "crypto/ssh/BinaryStream.h" -- --#include -- --namespace --{ -- constexpr quint8 TAG_INT = 0x02; -- constexpr quint8 TAG_SEQUENCE = 0x30; -- constexpr quint8 KEY_ZERO = 0x0; -- -- bool nextTag(BinaryStream& stream, quint8& tag, quint32& len) -- { -- stream.read(tag); -- -- quint8 lenByte; -- stream.read(lenByte); -- -- if (lenByte & 0x80) { -- quint32 bytes = lenByte & ~0x80; -- if (bytes == 1) { -- stream.read(lenByte); -- len = lenByte; -- } else if (bytes == 2) { -- quint16 lenShort; -- stream.read(lenShort); -- len = lenShort; -- } else if (bytes == 4) { -- stream.read(len); -- } else { -- return false; -- } -- } else { -- len = lenByte; -- } -- -- return true; -- } -- -- bool parsePublicHeader(BinaryStream& stream) -- { -- quint8 tag; -- quint32 len; -- -- nextTag(stream, tag, len); -- -- return (tag == TAG_SEQUENCE); -- } -- -- bool parsePrivateHeader(BinaryStream& stream, quint8 wantedType) -- { -- quint8 tag; -- quint32 len; -- -- nextTag(stream, tag, len); -- -- if (tag != TAG_SEQUENCE) { -- return false; -- } -- -- nextTag(stream, tag, len); -- -- if (tag != TAG_INT || len != 1) { -- return false; -- } -- -- quint8 keyType; -- stream.read(keyType); -- -- return (keyType == wantedType); -- } -- -- bool readInt(BinaryStream& stream, QByteArray& target) -- { -- quint8 tag; -- quint32 len; -- -- nextTag(stream, tag, len); -- -- if (tag != TAG_INT) { -- return false; -- } -- -- target.resize(len); -- stream.read(target); -- return true; -- } -- -- QByteArray calculateIqmp(QByteArray& bap, QByteArray& baq) -- { -- gcry_mpi_t u, p, q; -- QByteArray iqmp_hex; -- -- u = gcry_mpi_snew(bap.length() * 8); -- gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, bap.toHex().data(), 0, nullptr); -- gcry_mpi_scan(&q, GCRYMPI_FMT_HEX, baq.toHex().data(), 0, nullptr); -- -- mpi_invm(u, q, p); -- -- iqmp_hex.resize(bap.length() * 2); -- gcry_mpi_print(GCRYMPI_FMT_HEX, reinterpret_cast(iqmp_hex.data()), iqmp_hex.size(), nullptr, u); -- -- gcry_mpi_release(u); -- gcry_mpi_release(p); -- gcry_mpi_release(q); -- -- return QByteArray::fromHex(QString(iqmp_hex).toLatin1()); -- } --} // namespace -- --bool ASN1Key::parseDSA(QByteArray& ba, OpenSSHKey& key) --{ -- BinaryStream stream(&ba); -- -- if (!parsePrivateHeader(stream, KEY_ZERO)) { -- return false; -- } -- -- QByteArray p, q, g, y, x; -- readInt(stream, p); -- readInt(stream, q); -- readInt(stream, g); -- readInt(stream, y); -- readInt(stream, x); -- -- QList publicData; -- publicData.append(p); -- publicData.append(q); -- publicData.append(g); -- publicData.append(y); -- -- QList privateData; -- privateData.append(p); -- privateData.append(q); -- privateData.append(g); -- privateData.append(y); -- privateData.append(x); -- -- key.setType("ssh-dss"); -- key.setPublicData(publicData); -- key.setPrivateData(privateData); -- key.setComment(""); -- return true; --} -- --bool ASN1Key::parsePublicRSA(QByteArray& ba, OpenSSHKey& key) --{ -- BinaryStream stream(&ba); -- -- if (!parsePublicHeader(stream)) { -- return false; -- } -- -- QByteArray n, e; -- readInt(stream, n); -- readInt(stream, e); -- -- QList publicData; -- publicData.append(e); -- publicData.append(n); -- -- QList privateData; -- privateData.append(n); -- privateData.append(e); -- -- key.setType("ssh-rsa"); -- key.setPublicData(publicData); -- key.setPrivateData(privateData); -- key.setComment(""); -- return true; --} -- --bool ASN1Key::parsePrivateRSA(QByteArray& ba, OpenSSHKey& key) --{ -- BinaryStream stream(&ba); -- -- if (!parsePrivateHeader(stream, KEY_ZERO)) { -- return false; -- } -- -- QByteArray n, e, d, p, q, dp, dq, qinv; -- readInt(stream, n); -- readInt(stream, e); -- readInt(stream, d); -- readInt(stream, p); -- readInt(stream, q); -- readInt(stream, dp); -- readInt(stream, dq); -- readInt(stream, qinv); -- -- QList publicData; -- publicData.append(e); -- publicData.append(n); -- -- QList privateData; -- privateData.append(n); -- privateData.append(e); -- privateData.append(d); -- privateData.append(calculateIqmp(p, q)); -- privateData.append(p); -- privateData.append(q); -- -- key.setType("ssh-rsa"); -- key.setPublicData(publicData); -- key.setPrivateData(privateData); -- key.setComment(""); -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.h keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.h ---- keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --/* -- * Copyright (C) 2018 Toni Spets -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ASN1KEY_H --#define KEEPASSXC_ASN1KEY_H -- --#include "OpenSSHKey.h" --#include -- --namespace ASN1Key --{ -- bool parseDSA(QByteArray& ba, OpenSSHKey& key); -- bool parsePrivateRSA(QByteArray& ba, OpenSSHKey& key); -- bool parsePublicRSA(QByteArray& ba, OpenSSHKey& key); --} // namespace ASN1Key -- --#endif // KEEPASSXC_ASN1KEY_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/bcrypt_pbkdf.cpp keepassxc-2.6.4-patched/src/crypto/ssh/bcrypt_pbkdf.cpp ---- keepassxc-2.6.4-orig/src/crypto/ssh/bcrypt_pbkdf.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/bcrypt_pbkdf.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,172 +0,0 @@ --/* $OpenBSD: bcrypt_pbkdf.c,v 1.13 2015/01/12 03:20:04 tedu Exp $ */ --/* -- * Copyright (c) 2013 Ted Unangst -- * -- * Permission to use, copy, modify, and distribute this software for any -- * purpose with or without fee is hereby granted, provided that the above -- * copyright notice and this permission notice appear in all copies. -- * -- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- */ -- --#include -- --extern "C" { --#include "blf.h" --} -- --#define MINIMUM(a,b) (((a) < (b)) ? (a) : (b)) -- --/* -- * pkcs #5 pbkdf2 implementation using the "bcrypt" hash -- * -- * The bcrypt hash function is derived from the bcrypt password hashing -- * function with the following modifications: -- * 1. The input password and salt are preprocessed with SHA512. -- * 2. The output length is expanded to 256 bits. -- * 3. Subsequently the magic string to be encrypted is lengthened and modifed -- * to "OxychromaticBlowfishSwatDynamite" -- * 4. The hash function is defined to perform 64 rounds of initial state -- * expansion. (More rounds are performed by iterating the hash.) -- * -- * Note that this implementation pulls the SHA512 operations into the caller -- * as a performance optimization. -- * -- * One modification from official pbkdf2. Instead of outputting key material -- * linearly, we mix it. pbkdf2 has a known weakness where if one uses it to -- * generate (e.g.) 512 bits of key material for use as two 256 bit keys, an -- * attacker can merely run once through the outer loop, but the user -- * always runs it twice. Shuffling output bytes requires computing the -- * entirety of the key material to assemble any subkey. This is something a -- * wise caller could do; we just do it for you. -- */ -- --#define BCRYPT_WORDS 8 --#define BCRYPT_HASHSIZE (BCRYPT_WORDS * 4) --#define SHA512_DIGEST_LENGTH 64 -- --// FIXME: explicit_bzero exists to ensure bzero is not optimized out --#define explicit_bzero bzero -- --static void --bcrypt_hash(const quint8* sha2pass, const quint8* sha2salt, quint8* out) --{ -- blf_ctx state; -- quint8 ciphertext[BCRYPT_HASHSIZE] = // "OxychromaticBlowfishSwatDynamite" -- { 0x4f, 0x78, 0x79, 0x63, 0x68, 0x72, 0x6f, 0x6d, -- 0x61, 0x74, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x77, -- 0x66, 0x69, 0x73, 0x68, 0x53, 0x77, 0x61, 0x74, -- 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x74, 0x65 }; -- quint32 cdata[BCRYPT_WORDS]; -- int i; -- quint16 j; -- size_t shalen = SHA512_DIGEST_LENGTH; -- -- /* key expansion */ -- Blowfish_initstate(&state); -- Blowfish_expandstate(&state, sha2salt, shalen, sha2pass, shalen); -- for (i = 0; i < 64; i++) { -- Blowfish_expand0state(&state, sha2salt, shalen); -- Blowfish_expand0state(&state, sha2pass, shalen); -- } -- -- /* encryption */ -- j = 0; -- for (i = 0; i < BCRYPT_WORDS; i++) -- cdata[i] = Blowfish_stream2word(ciphertext, sizeof(ciphertext), -- &j); -- for (i = 0; i < 64; i++) -- blf_enc(&state, cdata, BCRYPT_WORDS / 2); -- -- /* copy out */ -- for (i = 0; i < BCRYPT_WORDS; i++) { -- out[4 * i + 3] = (cdata[i] >> 24) & 0xff; -- out[4 * i + 2] = (cdata[i] >> 16) & 0xff; -- out[4 * i + 1] = (cdata[i] >> 8) & 0xff; -- out[4 * i + 0] = cdata[i] & 0xff; -- } -- -- /* zap */ -- explicit_bzero(ciphertext, sizeof(ciphertext)); -- explicit_bzero(cdata, sizeof(cdata)); -- explicit_bzero(&state, sizeof(state)); --} -- --int bcrypt_pbkdf(const QByteArray& pass, const QByteArray& salt, QByteArray& key, quint32 rounds) --{ -- QCryptographicHash ctx(QCryptographicHash::Sha512); -- QByteArray sha2pass; -- QByteArray sha2salt; -- quint8 out[BCRYPT_HASHSIZE]; -- quint8 tmpout[BCRYPT_HASHSIZE]; -- quint8 countsalt[4]; -- -- /* nothing crazy */ -- if (rounds < 1) { -- return -1; -- } -- -- if (pass.isEmpty() || salt.isEmpty() || key.isEmpty() || -- static_cast(key.length()) > sizeof(out) * sizeof(out)) { -- return -1; -- } -- -- quint32 stride = (key.length() + sizeof(out) - 1) / sizeof(out); -- quint32 amt = (key.length() + stride - 1) / stride; -- -- /* collapse password */ -- ctx.reset(); -- ctx.addData(pass); -- sha2pass = ctx.result(); -- -- /* generate key, sizeof(out) at a time */ -- for (quint32 count = 1, keylen = key.length(); keylen > 0; count++) { -- countsalt[0] = (count >> 24) & 0xff; -- countsalt[1] = (count >> 16) & 0xff; -- countsalt[2] = (count >> 8) & 0xff; -- countsalt[3] = count & 0xff; -- -- /* first round, salt is salt */ -- ctx.reset(); -- ctx.addData(salt); -- ctx.addData(reinterpret_cast(countsalt), sizeof(countsalt)); -- sha2salt = ctx.result(); -- -- bcrypt_hash(reinterpret_cast(sha2pass.data()), reinterpret_cast(sha2salt.data()), tmpout); -- memcpy(out, tmpout, sizeof(out)); -- -- for (quint32 i = 1; i < rounds; i++) { -- /* subsequent rounds, salt is previous output */ -- ctx.reset(); -- ctx.addData(reinterpret_cast(tmpout), sizeof(tmpout)); -- sha2salt = ctx.result(); -- bcrypt_hash(reinterpret_cast(sha2pass.data()), reinterpret_cast(sha2salt.data()), tmpout); -- for (quint32 j = 0; j < sizeof(out); j++) -- out[j] ^= tmpout[j]; -- } -- -- /* -- * pbkdf2 deviation: output the key material non-linearly. -- */ -- amt = MINIMUM(amt, keylen); -- quint32 i; -- for (i = 0; i < amt; i++) { -- int dest = i * stride + (count - 1); -- if (dest >= key.length()) -- break; -- key.data()[dest] = out[i]; -- } -- keylen -= i; -- } -- -- /* zap */ -- explicit_bzero(out, sizeof(out)); -- -- return 0; --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.cpp keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.cpp ---- keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,200 +0,0 @@ --/* -- * Copyright (C) 2017 Toni Spets -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "BinaryStream.h" --#include -- --BinaryStream::BinaryStream(QIODevice* device) -- : QObject(device) -- , m_timeout(-1) -- , m_device(device) --{ --} -- --BinaryStream::BinaryStream(QByteArray* ba, QObject* parent) -- : QObject(parent) -- , m_timeout(-1) --{ -- m_buffer.reset(new QBuffer(ba)); -- m_buffer->open(QIODevice::ReadWrite); -- -- m_device = m_buffer.data(); --} -- --BinaryStream::~BinaryStream() --{ --} -- --const QString BinaryStream::errorString() const --{ -- return m_error; --} -- --QIODevice* BinaryStream::device() const --{ -- return m_device; --} -- --void BinaryStream::setTimeout(int timeout) --{ -- m_timeout = timeout; --} -- --bool BinaryStream::read(char* ptr, qint64 size) --{ -- qint64 pos = 0; -- -- while (pos < size) { -- if (m_device->bytesAvailable() == 0) { -- if (!m_device->waitForReadyRead(m_timeout)) { -- m_error = m_device->errorString(); -- return false; -- } -- } -- -- qint64 nread = m_device->read(ptr + pos, size - pos); -- -- if (nread == -1) { -- m_error = m_device->errorString(); -- return false; -- } -- -- pos += nread; -- } -- -- return true; --} -- --bool BinaryStream::read(QByteArray& ba) --{ -- return read(ba.data(), ba.length()); --} -- --bool BinaryStream::read(quint32& i) --{ -- if (read(reinterpret_cast(&i), sizeof(i))) { -- i = qFromBigEndian(i); -- return true; -- } -- -- return false; --} -- --bool BinaryStream::read(quint16& i) --{ -- if (read(reinterpret_cast(&i), sizeof(i))) { -- i = qFromBigEndian(i); -- return true; -- } -- -- return false; --} -- --bool BinaryStream::read(quint8& i) --{ -- return read(reinterpret_cast(&i), sizeof(i)); --} -- --bool BinaryStream::readString(QByteArray& ba) --{ -- quint32 length; -- -- if (!read(length)) { -- return false; -- } -- -- ba.resize(length); -- -- if (!read(ba.data(), ba.length())) { -- return false; -- } -- -- return true; --} -- --bool BinaryStream::readString(QString& str) --{ -- QByteArray ba; -- -- if (!readString(ba)) { -- return false; -- } -- -- str = QString::fromLatin1(ba); -- return true; --} -- --bool BinaryStream::write(const char* ptr, qint64 size) --{ -- if (m_device->write(ptr, size) < 0) { -- m_error = m_device->errorString(); -- return false; -- } -- -- return true; --} -- --bool BinaryStream::flush() --{ -- if (!m_device->waitForBytesWritten(m_timeout)) { -- m_error = m_device->errorString(); -- return false; -- } -- -- return true; --} -- --bool BinaryStream::write(const QByteArray& ba) --{ -- return write(ba.data(), ba.length()); --} -- --bool BinaryStream::write(quint32 i) --{ -- i = qToBigEndian(i); -- return write(reinterpret_cast(&i), sizeof(i)); --} -- --bool BinaryStream::write(quint16 i) --{ -- i = qToBigEndian(i); -- return write(reinterpret_cast(&i), sizeof(i)); --} -- --bool BinaryStream::write(quint8 i) --{ -- return write(reinterpret_cast(&i), sizeof(i)); --} -- --bool BinaryStream::writeString(const QByteArray& ba) --{ -- if (!write(static_cast(ba.length()))) { -- return false; -- } -- -- if (!write(ba)) { -- return false; -- } -- -- return true; --} -- --bool BinaryStream::writeString(const QString& s) --{ -- return writeString(s.toLatin1()); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.h keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.h ---- keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,66 +0,0 @@ --/* -- * Copyright (C) 2017 Toni Spets -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_BINARYSTREAM_H --#define KEEPASSXC_BINARYSTREAM_H -- --#include --#include --#include -- --class BinaryStream : QObject --{ -- Q_OBJECT -- Q_DISABLE_COPY(BinaryStream) --public: -- explicit BinaryStream(QIODevice* device); -- explicit BinaryStream(QByteArray* ba, QObject* parent = nullptr); -- ~BinaryStream() override; -- -- const QString errorString() const; -- QIODevice* device() const; -- void setTimeout(int timeout); -- -- bool read(QByteArray& ba); -- bool read(quint32& i); -- bool read(quint16& i); -- bool read(quint8& i); -- bool readString(QByteArray& ba); -- bool readString(QString& s); -- -- bool write(const QByteArray& ba); -- bool write(quint32 i); -- bool write(quint16 i); -- bool write(quint8 i); -- bool writeString(const QByteArray& ba); -- bool writeString(const QString& s); -- -- bool flush(); -- --protected: -- bool read(char* ptr, qint64 len); -- bool write(const char* ptr, qint64 len); -- --private: -- int m_timeout; -- QString m_error; -- QIODevice* m_device; -- QScopedPointer m_buffer; --}; -- --#endif // KEEPASSXC_BINARYSTREAM_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/blf.h keepassxc-2.6.4-patched/src/crypto/ssh/blf.h ---- keepassxc-2.6.4-orig/src/crypto/ssh/blf.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/blf.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ --/* $OpenBSD: blf.h,v 1.7 2007/03/14 17:59:41 grunk Exp $ */ --/* -- * Blowfish - a fast block cipher designed by Bruce Schneier -- * -- * Copyright 1997 Niels Provos -- * All rights reserved. -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted provided that the following conditions -- * are met: -- * 1. Redistributions of source code must retain the above copyright -- * notice, this list of conditions and the following disclaimer. -- * 2. Redistributions in binary form must reproduce the above copyright -- * notice, this list of conditions and the following disclaimer in the -- * documentation and/or other materials provided with the distribution. -- * 3. All advertising materials mentioning features or use of this software -- * must display the following acknowledgement: -- * This product includes software developed by Niels Provos. -- * 4. The name of the author may not be used to endorse or promote products -- * derived from this software without specific prior written permission. -- * -- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- */ -- --#ifndef _BLF_H_ --#define _BLF_H_ -- --#include "includes.h" -- --#if !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) -- --/* Schneier specifies a maximum key length of 56 bytes. -- * This ensures that every key bit affects every cipher -- * bit. However, the subkeys can hold up to 72 bytes. -- * Warning: For normal blowfish encryption only 56 bytes -- * of the key affect all cipherbits. -- */ -- --#define BLF_N 16 /* Number of Subkeys */ --#define BLF_MAXKEYLEN ((BLF_N-2)*4) /* 448 bits */ --#define BLF_MAXUTILIZED ((BLF_N+2)*4) /* 576 bits */ -- --/* Blowfish context */ --typedef struct BlowfishContext { -- u_int32_t S[4][256]; /* S-Boxes */ -- u_int32_t P[BLF_N + 2]; /* Subkeys */ --} blf_ctx; -- --/* Raw access to customized Blowfish -- * blf_key is just: -- * Blowfish_initstate( state ) -- * Blowfish_expand0state( state, key, keylen ) -- */ -- --void Blowfish_encipher(blf_ctx *, u_int32_t *, u_int32_t *); --void Blowfish_decipher(blf_ctx *, u_int32_t *, u_int32_t *); --void Blowfish_initstate(blf_ctx *); --void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t); --void Blowfish_expandstate --(blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t); -- --/* Standard Blowfish */ -- --void blf_key(blf_ctx *, const u_int8_t *, u_int16_t); --void blf_enc(blf_ctx *, u_int32_t *, u_int16_t); --void blf_dec(blf_ctx *, u_int32_t *, u_int16_t); -- --void blf_ecb_encrypt(blf_ctx *, u_int8_t *, u_int32_t); --void blf_ecb_decrypt(blf_ctx *, u_int8_t *, u_int32_t); -- --void blf_cbc_encrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t); --void blf_cbc_decrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t); -- --/* Converts u_int8_t to u_int32_t */ --u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t , u_int16_t *); -- --#endif /* !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) */ --#endif /* _BLF_H */ -- -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/blowfish.c keepassxc-2.6.4-patched/src/crypto/ssh/blowfish.c ---- keepassxc-2.6.4-orig/src/crypto/ssh/blowfish.c 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/blowfish.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,696 +0,0 @@ --/* $OpenBSD: blowfish.c,v 1.18 2004/11/02 17:23:26 hshoexer Exp $ */ --/* -- * Blowfish block cipher for OpenBSD -- * Copyright 1997 Niels Provos -- * All rights reserved. -- * -- * Implementation advice by David Mazieres . -- * -- * Redistribution and use in source and binary forms, with or without -- * modification, are permitted provided that the following conditions -- * are met: -- * 1. Redistributions of source code must retain the above copyright -- * notice, this list of conditions and the following disclaimer. -- * 2. Redistributions in binary form must reproduce the above copyright -- * notice, this list of conditions and the following disclaimer in the -- * documentation and/or other materials provided with the distribution. -- * 3. All advertising materials mentioning features or use of this software -- * must display the following acknowledgement: -- * This product includes software developed by Niels Provos. -- * 4. The name of the author may not be used to endorse or promote products -- * derived from this software without specific prior written permission. -- * -- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- */ -- --/* -- * This code is derived from section 14.3 and the given source -- * in section V of Applied Cryptography, second edition. -- * Blowfish is an unpatented fast block cipher designed by -- * Bruce Schneier. -- */ -- --#include "includes.h" -- --#if !defined(HAVE_BCRYPT_PBKDF) && (!defined(HAVE_BLOWFISH_INITSTATE) || \ -- !defined(HAVE_BLOWFISH_EXPAND0STATE) || !defined(HAVE_BLF_ENC)) -- --#if 0 --#include /* used for debugging */ --#include --#endif -- --#include --#ifdef HAVE_BLF_H --#include --#endif -- --#undef inline --#ifdef __GNUC__ --#define inline __inline --#else /* !__GNUC__ */ --#define inline --#endif /* !__GNUC__ */ -- --/* Function for Feistel Networks */ -- --#define F(s, x) ((((s)[ (((x)>>24)&0xFF)] \ -- + (s)[0x100 + (((x)>>16)&0xFF)]) \ -- ^ (s)[0x200 + (((x)>> 8)&0xFF)]) \ -- + (s)[0x300 + ( (x) &0xFF)]) -- --#define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n]) -- --void --Blowfish_encipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr) --{ -- u_int32_t Xl; -- u_int32_t Xr; -- u_int32_t *s = c->S[0]; -- u_int32_t *p = c->P; -- -- Xl = *xl; -- Xr = *xr; -- -- Xl ^= p[0]; -- BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2); -- BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4); -- BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6); -- BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8); -- BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10); -- BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12); -- BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14); -- BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16); -- -- *xl = Xr ^ p[17]; -- *xr = Xl; --} -- --void --Blowfish_decipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr) --{ -- u_int32_t Xl; -- u_int32_t Xr; -- u_int32_t *s = c->S[0]; -- u_int32_t *p = c->P; -- -- Xl = *xl; -- Xr = *xr; -- -- Xl ^= p[17]; -- BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15); -- BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13); -- BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11); -- BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9); -- BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7); -- BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5); -- BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3); -- BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1); -- -- *xl = Xr ^ p[0]; -- *xr = Xl; --} -- --void --Blowfish_initstate(blf_ctx *c) --{ -- /* P-box and S-box tables initialized with digits of Pi */ -- -- static const blf_ctx initstate = -- { { -- { -- 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, -- 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, -- 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, -- 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, -- 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, -- 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, -- 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, -- 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, -- 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, -- 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, -- 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, -- 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, -- 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, -- 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, -- 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, -- 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, -- 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, -- 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, -- 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, -- 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, -- 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, -- 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, -- 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, -- 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, -- 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, -- 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, -- 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, -- 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, -- 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, -- 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, -- 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, -- 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, -- 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, -- 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, -- 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, -- 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, -- 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, -- 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, -- 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, -- 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, -- 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, -- 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, -- 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, -- 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, -- 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, -- 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, -- 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, -- 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, -- 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, -- 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, -- 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, -- 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, -- 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, -- 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, -- 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, -- 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, -- 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, -- 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, -- 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, -- 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, -- 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, -- 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, -- 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, -- 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a}, -- { -- 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, -- 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, -- 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, -- 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, -- 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, -- 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, -- 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, -- 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, -- 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, -- 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, -- 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, -- 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, -- 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, -- 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, -- 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, -- 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, -- 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, -- 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, -- 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, -- 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, -- 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, -- 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, -- 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, -- 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, -- 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, -- 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, -- 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, -- 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, -- 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, -- 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, -- 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, -- 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, -- 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, -- 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, -- 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, -- 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, -- 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, -- 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, -- 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, -- 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, -- 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, -- 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, -- 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, -- 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, -- 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, -- 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, -- 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, -- 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, -- 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, -- 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, -- 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, -- 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, -- 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, -- 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, -- 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, -- 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, -- 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, -- 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, -- 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, -- 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, -- 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, -- 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, -- 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, -- 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7}, -- { -- 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, -- 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, -- 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, -- 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, -- 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, -- 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, -- 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, -- 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, -- 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, -- 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, -- 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, -- 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, -- 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, -- 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, -- 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, -- 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, -- 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, -- 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, -- 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, -- 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, -- 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, -- 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, -- 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, -- 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, -- 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, -- 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, -- 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, -- 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, -- 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, -- 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, -- 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, -- 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, -- 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, -- 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, -- 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, -- 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, -- 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, -- 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, -- 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, -- 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, -- 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, -- 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, -- 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, -- 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, -- 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, -- 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, -- 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, -- 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, -- 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, -- 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, -- 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, -- 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, -- 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, -- 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, -- 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, -- 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, -- 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, -- 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, -- 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, -- 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, -- 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, -- 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, -- 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, -- 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0}, -- { -- 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, -- 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, -- 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, -- 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, -- 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, -- 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, -- 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, -- 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, -- 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, -- 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, -- 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, -- 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, -- 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, -- 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, -- 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, -- 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, -- 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, -- 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, -- 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, -- 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, -- 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, -- 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, -- 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, -- 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, -- 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, -- 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, -- 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, -- 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, -- 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, -- 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, -- 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, -- 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, -- 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, -- 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, -- 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, -- 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, -- 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, -- 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, -- 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, -- 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, -- 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, -- 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, -- 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, -- 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, -- 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, -- 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, -- 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, -- 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, -- 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, -- 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, -- 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, -- 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, -- 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, -- 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, -- 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, -- 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, -- 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, -- 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, -- 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, -- 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, -- 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, -- 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, -- 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, -- 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6} -- }, -- { -- 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, -- 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, -- 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, -- 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, -- 0x9216d5d9, 0x8979fb1b -- } }; -- -- *c = initstate; --} -- --u_int32_t --Blowfish_stream2word(const u_int8_t *data, u_int16_t databytes, -- u_int16_t *current) --{ -- u_int8_t i; -- u_int16_t j; -- u_int32_t temp; -- -- temp = 0x00000000; -- j = *current; -- -- for (i = 0; i < 4; i++, j++) { -- if (j >= databytes) -- j = 0; -- temp = (temp << 8) | data[j]; -- } -- -- *current = j; -- return temp; --} -- --void --Blowfish_expand0state(blf_ctx *c, const u_int8_t *key, u_int16_t keybytes) --{ -- u_int16_t i; -- u_int16_t j; -- u_int16_t k; -- u_int32_t temp; -- u_int32_t datal; -- u_int32_t datar; -- -- j = 0; -- for (i = 0; i < BLF_N + 2; i++) { -- /* Extract 4 int8 to 1 int32 from keystream */ -- temp = Blowfish_stream2word(key, keybytes, &j); -- c->P[i] = c->P[i] ^ temp; -- } -- -- j = 0; -- datal = 0x00000000; -- datar = 0x00000000; -- for (i = 0; i < BLF_N + 2; i += 2) { -- Blowfish_encipher(c, &datal, &datar); -- -- c->P[i] = datal; -- c->P[i + 1] = datar; -- } -- -- for (i = 0; i < 4; i++) { -- for (k = 0; k < 256; k += 2) { -- Blowfish_encipher(c, &datal, &datar); -- -- c->S[i][k] = datal; -- c->S[i][k + 1] = datar; -- } -- } --} -- -- --void --Blowfish_expandstate(blf_ctx *c, const u_int8_t *data, u_int16_t databytes, -- const u_int8_t *key, u_int16_t keybytes) --{ -- u_int16_t i; -- u_int16_t j; -- u_int16_t k; -- u_int32_t temp; -- u_int32_t datal; -- u_int32_t datar; -- -- j = 0; -- for (i = 0; i < BLF_N + 2; i++) { -- /* Extract 4 int8 to 1 int32 from keystream */ -- temp = Blowfish_stream2word(key, keybytes, &j); -- c->P[i] = c->P[i] ^ temp; -- } -- -- j = 0; -- datal = 0x00000000; -- datar = 0x00000000; -- for (i = 0; i < BLF_N + 2; i += 2) { -- datal ^= Blowfish_stream2word(data, databytes, &j); -- datar ^= Blowfish_stream2word(data, databytes, &j); -- Blowfish_encipher(c, &datal, &datar); -- -- c->P[i] = datal; -- c->P[i + 1] = datar; -- } -- -- for (i = 0; i < 4; i++) { -- for (k = 0; k < 256; k += 2) { -- datal ^= Blowfish_stream2word(data, databytes, &j); -- datar ^= Blowfish_stream2word(data, databytes, &j); -- Blowfish_encipher(c, &datal, &datar); -- -- c->S[i][k] = datal; -- c->S[i][k + 1] = datar; -- } -- } -- --} -- --void --blf_key(blf_ctx *c, const u_int8_t *k, u_int16_t len) --{ -- /* Initialize S-boxes and subkeys with Pi */ -- Blowfish_initstate(c); -- -- /* Transform S-boxes and subkeys with key */ -- Blowfish_expand0state(c, k, len); --} -- --void --blf_enc(blf_ctx *c, u_int32_t *data, u_int16_t blocks) --{ -- u_int32_t *d; -- u_int16_t i; -- -- d = data; -- for (i = 0; i < blocks; i++) { -- Blowfish_encipher(c, d, d + 1); -- d += 2; -- } --} -- --void --blf_dec(blf_ctx *c, u_int32_t *data, u_int16_t blocks) --{ -- u_int32_t *d; -- u_int16_t i; -- -- d = data; -- for (i = 0; i < blocks; i++) { -- Blowfish_decipher(c, d, d + 1); -- d += 2; -- } --} -- --void --blf_ecb_encrypt(blf_ctx *c, u_int8_t *data, u_int32_t len) --{ -- u_int32_t l, r; -- u_int32_t i; -- -- for (i = 0; i < len; i += 8) { -- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; -- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; -- Blowfish_encipher(c, &l, &r); -- data[0] = l >> 24 & 0xff; -- data[1] = l >> 16 & 0xff; -- data[2] = l >> 8 & 0xff; -- data[3] = l & 0xff; -- data[4] = r >> 24 & 0xff; -- data[5] = r >> 16 & 0xff; -- data[6] = r >> 8 & 0xff; -- data[7] = r & 0xff; -- data += 8; -- } --} -- --void --blf_ecb_decrypt(blf_ctx *c, u_int8_t *data, u_int32_t len) --{ -- u_int32_t l, r; -- u_int32_t i; -- -- for (i = 0; i < len; i += 8) { -- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; -- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; -- Blowfish_decipher(c, &l, &r); -- data[0] = l >> 24 & 0xff; -- data[1] = l >> 16 & 0xff; -- data[2] = l >> 8 & 0xff; -- data[3] = l & 0xff; -- data[4] = r >> 24 & 0xff; -- data[5] = r >> 16 & 0xff; -- data[6] = r >> 8 & 0xff; -- data[7] = r & 0xff; -- data += 8; -- } --} -- --void --blf_cbc_encrypt(blf_ctx *c, u_int8_t *iv, u_int8_t *data, u_int32_t len) --{ -- u_int32_t l, r; -- u_int32_t i, j; -- -- for (i = 0; i < len; i += 8) { -- for (j = 0; j < 8; j++) -- data[j] ^= iv[j]; -- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; -- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; -- Blowfish_encipher(c, &l, &r); -- data[0] = l >> 24 & 0xff; -- data[1] = l >> 16 & 0xff; -- data[2] = l >> 8 & 0xff; -- data[3] = l & 0xff; -- data[4] = r >> 24 & 0xff; -- data[5] = r >> 16 & 0xff; -- data[6] = r >> 8 & 0xff; -- data[7] = r & 0xff; -- iv = data; -- data += 8; -- } --} -- --void --blf_cbc_decrypt(blf_ctx *c, u_int8_t *iva, u_int8_t *data, u_int32_t len) --{ -- u_int32_t l, r; -- u_int8_t *iv; -- u_int32_t i, j; -- -- iv = data + len - 16; -- data = data + len - 8; -- for (i = len - 8; i >= 8; i -= 8) { -- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; -- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; -- Blowfish_decipher(c, &l, &r); -- data[0] = l >> 24 & 0xff; -- data[1] = l >> 16 & 0xff; -- data[2] = l >> 8 & 0xff; -- data[3] = l & 0xff; -- data[4] = r >> 24 & 0xff; -- data[5] = r >> 16 & 0xff; -- data[6] = r >> 8 & 0xff; -- data[7] = r & 0xff; -- for (j = 0; j < 8; j++) -- data[j] ^= iv[j]; -- iv -= 8; -- data -= 8; -- } -- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; -- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; -- Blowfish_decipher(c, &l, &r); -- data[0] = l >> 24 & 0xff; -- data[1] = l >> 16 & 0xff; -- data[2] = l >> 8 & 0xff; -- data[3] = l & 0xff; -- data[4] = r >> 24 & 0xff; -- data[5] = r >> 16 & 0xff; -- data[6] = r >> 8 & 0xff; -- data[7] = r & 0xff; -- for (j = 0; j < 8; j++) -- data[j] ^= iva[j]; --} -- --#if 0 --void --report(u_int32_t data[], u_int16_t len) --{ -- u_int16_t i; -- for (i = 0; i < len; i += 2) -- printf("Block %0hd: %08lx %08lx.\n", -- i / 2, data[i], data[i + 1]); --} --void --main(void) --{ -- -- blf_ctx c; -- char key[] = "AAAAA"; -- char key2[] = "abcdefghijklmnopqrstuvwxyz"; -- -- u_int32_t data[10]; -- u_int32_t data2[] = -- {0x424c4f57l, 0x46495348l}; -- -- u_int16_t i; -- -- /* First test */ -- for (i = 0; i < 10; i++) -- data[i] = i; -- -- blf_key(&c, (u_int8_t *) key, 5); -- blf_enc(&c, data, 5); -- blf_dec(&c, data, 1); -- blf_dec(&c, data + 2, 4); -- printf("Should read as 0 - 9.\n"); -- report(data, 10); -- -- /* Second test */ -- blf_key(&c, (u_int8_t *) key2, strlen(key2)); -- blf_enc(&c, data2, 1); -- printf("\nShould read as: 0x324ed0fe 0xf413a203.\n"); -- report(data2, 2); -- blf_dec(&c, data2, 1); -- report(data2, 2); --} --#endif -- --#endif /* !defined(HAVE_BCRYPT_PBKDF) && (!defined(HAVE_BLOWFISH_INITSTATE) || \ -- !defined(HAVE_BLOWFISH_EXPAND0STATE) || !defined(HAVE_BLF_ENC)) */ -- -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/CMakeLists.txt keepassxc-2.6.4-patched/src/crypto/ssh/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/crypto/ssh/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,14 +0,0 @@ --if(WITH_XC_CRYPTO_SSH) -- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -- -- set(crypto_ssh_SOURCES -- bcrypt_pbkdf.cpp -- blowfish.c -- ASN1Key.cpp -- BinaryStream.cpp -- OpenSSHKey.cpp -- ) -- -- add_library(crypto_ssh STATIC ${crypto_ssh_SOURCES}) -- target_link_libraries(crypto_ssh Qt5::Core ${GCRYPT_LIBRARIES}) --endif() -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/includes.h keepassxc-2.6.4-patched/src/crypto/ssh/includes.h ---- keepassxc-2.6.4-orig/src/crypto/ssh/includes.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/includes.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,19 +0,0 @@ --// mimic openSSH-portable's includes.h file to be able to use --// its unmodified blowfish code -- --#define HAVE_BLF_H -- --#ifndef _GNU_SOURCE --#define _GNU_SOURCE /* activate extra prototypes for glibc */ --#endif --#include -- --#if defined(_WIN32) || defined(__HAIKU__) --#include -- --typedef uint32_t u_int32_t; --typedef uint16_t u_int16_t; --typedef uint8_t u_int8_t; -- --#define bzero(p, s) memset(p, 0, s) --#endif -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.cpp keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.cpp ---- keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,828 +0,0 @@ --/* -- * Copyright (C) 2017 Toni Spets -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpenSSHKey.h" -- --#include "core/Tools.h" --#include "crypto/SymmetricCipher.h" --#include "crypto/ssh/ASN1Key.h" --#include "crypto/ssh/BinaryStream.h" -- --#include --#include --#include -- --#include -- --const QString OpenSSHKey::TYPE_DSA_PRIVATE = "DSA PRIVATE KEY"; --const QString OpenSSHKey::TYPE_RSA_PRIVATE = "RSA PRIVATE KEY"; --const QString OpenSSHKey::TYPE_RSA_PUBLIC = "RSA PUBLIC KEY"; --const QString OpenSSHKey::TYPE_OPENSSH_PRIVATE = "OPENSSH PRIVATE KEY"; -- --namespace --{ -- QPair> binaryDeserialize(const QByteArray& serialized) -- { -- if (serialized.isEmpty()) { -- return {}; -- } -- QBuffer buffer; -- buffer.setData(serialized); -- buffer.open(QBuffer::ReadOnly); -- BinaryStream stream(&buffer); -- QString type; -- stream.readString(type); -- QByteArray temp; -- QList data; -- while (stream.readString(temp)) { -- data << temp; -- } -- return ::qMakePair(type, data); -- } -- -- QByteArray binarySerialize(const QString& type, const QList& data) -- { -- if (type.isEmpty() && data.isEmpty()) { -- return {}; -- } -- QByteArray buffer; -- BinaryStream stream(&buffer); -- stream.writeString(type); -- for (const QByteArray& part : data) { -- stream.writeString(part); -- } -- return buffer; -- } --} // namespace -- --// bcrypt_pbkdf.cpp --int bcrypt_pbkdf(const QByteArray& pass, const QByteArray& salt, QByteArray& key, quint32 rounds); -- --OpenSSHKey OpenSSHKey::generate(bool secure) --{ -- enum Index -- { -- Params, -- CombinedKey, -- PrivateKey, -- PublicKey, -- -- Private_N, -- Private_E, -- Private_D, -- Private_P, -- Private_Q, -- Private_U, // private key -- Public_N, -- Public_E, -- }; -- -- Tools::Map mpi; -- Tools::Map sexp; -- gcry_error_t rc = GPG_ERR_NO_ERROR; -- rc = gcry_sexp_build(&sexp[Params], -- NULL, -- secure ? "(genkey (rsa (nbits 4:2048)))" : "(genkey (rsa (transient-key) (nbits 4:2048)))"); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not create ssh key" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- -- rc = gcry_pk_genkey(&sexp[CombinedKey], sexp[Params]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not create ssh key" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- -- sexp[PrivateKey] = gcry_sexp_find_token(sexp[CombinedKey], "private-key", 0); -- sexp[PublicKey] = gcry_sexp_find_token(sexp[CombinedKey], "public-key", 0); -- -- sexp[Private_N] = gcry_sexp_find_token(sexp[PrivateKey], "n", 1); -- mpi[Private_N] = gcry_sexp_nth_mpi(sexp[Private_N], 1, GCRYMPI_FMT_USG); -- sexp[Private_E] = gcry_sexp_find_token(sexp[PrivateKey], "e", 1); -- mpi[Private_E] = gcry_sexp_nth_mpi(sexp[Private_E], 1, GCRYMPI_FMT_USG); -- sexp[Private_D] = gcry_sexp_find_token(sexp[PrivateKey], "d", 1); -- mpi[Private_D] = gcry_sexp_nth_mpi(sexp[Private_D], 1, GCRYMPI_FMT_USG); -- sexp[Private_Q] = gcry_sexp_find_token(sexp[PrivateKey], "q", 1); -- mpi[Private_Q] = gcry_sexp_nth_mpi(sexp[Private_Q], 1, GCRYMPI_FMT_USG); -- sexp[Private_P] = gcry_sexp_find_token(sexp[PrivateKey], "p", 1); -- mpi[Private_P] = gcry_sexp_nth_mpi(sexp[Private_P], 1, GCRYMPI_FMT_USG); -- sexp[Private_U] = gcry_sexp_find_token(sexp[PrivateKey], "u", 1); -- mpi[Private_U] = gcry_sexp_nth_mpi(sexp[Private_U], 1, GCRYMPI_FMT_USG); -- -- sexp[Public_N] = gcry_sexp_find_token(sexp[PublicKey], "n", 1); -- mpi[Public_N] = gcry_sexp_nth_mpi(sexp[Public_N], 1, GCRYMPI_FMT_USG); -- sexp[Public_E] = gcry_sexp_find_token(sexp[PublicKey], "e", 1); -- mpi[Public_E] = gcry_sexp_nth_mpi(sexp[Public_E], 1, GCRYMPI_FMT_USG); -- -- QList publicParts; -- QList privateParts; -- Tools::Buffer buffer; -- gcry_mpi_format format = GCRYMPI_FMT_USG; -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_N]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_E]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_D]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_U]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_P]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_Q]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract private key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- privateParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_E]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract public key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- publicParts << buffer.content(); -- -- buffer.clear(); -- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_N]); -- if (rc != GPG_ERR_NO_ERROR) { -- qWarning() << "Could not extract public key part" << gcry_err_code(rc); -- return OpenSSHKey(); -- } -- publicParts << buffer.content(); -- OpenSSHKey key; -- key.m_rawType = OpenSSHKey::TYPE_RSA_PRIVATE; -- key.setType("ssh-rsa"); -- key.setPublicData(publicParts); -- key.setPrivateData(privateParts); -- key.setComment(""); -- return key; --} -- --OpenSSHKey::OpenSSHKey(QObject* parent) -- : QObject(parent) -- , m_type(QString()) -- , m_cipherName(QString("none")) -- , m_kdfName(QString("none")) -- , m_kdfOptions(QByteArray()) -- , m_rawType(QString()) -- , m_rawData(QByteArray()) -- , m_rawPublicData(QList()) -- , m_rawPrivateData(QList()) -- , m_comment(QString()) -- , m_error(QString()) --{ --} -- --OpenSSHKey::OpenSSHKey(const OpenSSHKey& other) -- : QObject(nullptr) -- , m_type(other.m_type) -- , m_cipherName(other.m_cipherName) -- , m_kdfName(other.m_kdfName) -- , m_kdfOptions(other.m_kdfOptions) -- , m_rawType(other.m_rawType) -- , m_rawData(other.m_rawData) -- , m_rawPublicData(other.m_rawPublicData) -- , m_rawPrivateData(other.m_rawPrivateData) -- , m_comment(other.m_comment) -- , m_error(other.m_error) --{ --} -- --bool OpenSSHKey::operator==(const OpenSSHKey& other) const --{ -- // close enough for now -- return (fingerprint() == other.fingerprint()); --} -- --const QString OpenSSHKey::cipherName() const --{ -- return m_cipherName; --} -- --const QString OpenSSHKey::type() const --{ -- return m_type; --} -- --int OpenSSHKey::keyLength() const --{ -- if (m_type == "ssh-dss" && m_rawPublicData.length() == 4) { -- return (m_rawPublicData[0].length() - 1) * 8; -- } else if (m_type == "ssh-rsa" && m_rawPublicData.length() == 2) { -- return (m_rawPublicData[1].length() - 1) * 8; -- } else if (m_type.startsWith("ecdsa-sha2-") && m_rawPublicData.length() == 2) { -- return (m_rawPublicData[1].length() - 1) * 4; -- } else if (m_type == "ssh-ed25519" && m_rawPublicData.length() == 1) { -- return m_rawPublicData[0].length() * 8; -- } -- return 0; --} -- --const QString OpenSSHKey::fingerprint(QCryptographicHash::Algorithm algo) const --{ -- if (m_rawPublicData.isEmpty()) { -- return {}; -- } -- -- QByteArray publicKey; -- BinaryStream stream(&publicKey); -- -- stream.writeString(m_type); -- -- for (const QByteArray& ba : m_rawPublicData) { -- stream.writeString(ba); -- } -- -- QByteArray rawHash = QCryptographicHash::hash(publicKey, algo); -- -- if (algo == QCryptographicHash::Md5) { -- QString md5Hash = QString::fromLatin1(rawHash.toHex()); -- QStringList md5HashParts; -- for (int i = 0; i < md5Hash.length(); i += 2) { -- md5HashParts.append(md5Hash.mid(i, 2)); -- } -- return "MD5:" + md5HashParts.join(':'); -- } else if (algo == QCryptographicHash::Sha256) { -- return "SHA256:" + QString::fromLatin1(rawHash.toBase64(QByteArray::OmitTrailingEquals)); -- } -- -- return "HASH:" + QString::fromLatin1(rawHash.toHex()); --} -- --const QString OpenSSHKey::comment() const --{ -- return m_comment; --} -- --const QString OpenSSHKey::privateKey() const --{ -- if (m_rawPrivateData.isEmpty()) { -- return {}; -- } -- -- QByteArray privateKey; -- BinaryStream stream(&privateKey); -- -- stream.writeString(m_type); -- -- for (QByteArray ba : m_rawPrivateData) { -- stream.writeString(ba); -- } -- -- return m_type + " " + QString::fromLatin1(privateKey.toBase64()) + " " + m_comment; --} -- --const QString OpenSSHKey::publicKey() const --{ -- if (m_rawPublicData.isEmpty()) { -- return {}; -- } -- -- QByteArray publicKey; -- BinaryStream stream(&publicKey); -- -- stream.writeString(m_type); -- -- for (QByteArray ba : m_rawPublicData) { -- stream.writeString(ba); -- } -- -- return m_type + " " + QString::fromLatin1(publicKey.toBase64()) + " " + m_comment; --} -- --const QString OpenSSHKey::errorString() const --{ -- return m_error; --} -- --void OpenSSHKey::setType(const QString& type) --{ -- m_type = type; --} -- --void OpenSSHKey::setPublicData(const QList& data) --{ -- m_rawPublicData = data; --} -- --void OpenSSHKey::setPrivateData(const QList& data) --{ -- m_rawPrivateData = data; --} -- --void OpenSSHKey::setComment(const QString& comment) --{ -- m_comment = comment; --} -- --void OpenSSHKey::clearPrivate() --{ -- m_rawData.clear(); -- m_rawPrivateData.clear(); --} -- --bool OpenSSHKey::extractPEM(const QByteArray& in, QByteArray& out) --{ -- QString pem = QString::fromLatin1(in); -- QStringList rows = pem.split(QRegularExpression("(?:\r?\n|\r)"), QString::SkipEmptyParts); -- -- if (rows.length() < 3) { -- m_error = tr("Invalid key file, expecting an OpenSSH key"); -- return false; -- } -- -- QString begin = rows.first(); -- QString end = rows.last(); -- -- QRegularExpressionMatch beginMatch = QRegularExpression("^-----BEGIN ([^\\-]+)-----$").match(begin); -- QRegularExpressionMatch endMatch = QRegularExpression("^-----END ([^\\-]+)-----$").match(end); -- -- if (!beginMatch.hasMatch() || !endMatch.hasMatch()) { -- m_error = tr("Invalid key file, expecting an OpenSSH key"); -- return false; -- } -- -- if (beginMatch.captured(1) != endMatch.captured(1)) { -- m_error = tr("PEM boundary mismatch"); -- return false; -- } -- -- m_rawType = beginMatch.captured(1); -- -- rows.removeFirst(); -- rows.removeLast(); -- -- QRegularExpression keyValueExpr = QRegularExpression("^([A-Za-z0-9-]+): (.+)$"); -- QMap pemOptions; -- -- do { -- QRegularExpressionMatch keyValueMatch = keyValueExpr.match(rows.first()); -- -- if (!keyValueMatch.hasMatch()) { -- break; -- } -- -- pemOptions.insert(keyValueMatch.captured(1), keyValueMatch.captured(2)); -- -- rows.removeFirst(); -- } while (!rows.isEmpty()); -- -- if (pemOptions.value("Proc-Type").compare("4,encrypted", Qt::CaseInsensitive) == 0) { -- m_kdfName = "md5"; -- m_cipherName = pemOptions.value("DEK-Info").section(",", 0, 0); -- m_cipherIV = QByteArray::fromHex(pemOptions.value("DEK-Info").section(",", 1, 1).toLatin1()); -- } -- -- out = QByteArray::fromBase64(rows.join("").toLatin1()); -- -- if (out.isEmpty()) { -- m_error = tr("Base64 decoding failed"); -- return false; -- } -- -- return true; --} -- --bool OpenSSHKey::parsePKCS1PEM(const QByteArray& in) --{ -- QByteArray data; -- -- if (!extractPEM(in, data)) { -- return false; -- } -- -- if (m_rawType == TYPE_DSA_PRIVATE || m_rawType == TYPE_RSA_PRIVATE || m_rawType == TYPE_RSA_PUBLIC) { -- m_rawData = data; -- } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { -- BinaryStream stream(&data); -- -- QByteArray magic; -- magic.resize(15); -- -- if (!stream.read(magic)) { -- m_error = tr("Key file way too small."); -- return false; -- } -- -- if (QString::fromLatin1(magic) != "openssh-key-v1") { -- m_error = tr("Key file magic header id invalid"); -- return false; -- } -- -- stream.readString(m_cipherName); -- stream.readString(m_kdfName); -- stream.readString(m_kdfOptions); -- -- quint32 numberOfKeys; -- stream.read(numberOfKeys); -- -- if (numberOfKeys == 0) { -- m_error = tr("Found zero keys"); -- return false; -- } -- -- for (quint32 i = 0; i < numberOfKeys; ++i) { -- QByteArray publicKey; -- if (!stream.readString(publicKey)) { -- m_error = tr("Failed to read public key."); -- return false; -- } -- -- if (i == 0) { -- BinaryStream publicStream(&publicKey); -- if (!readPublic(publicStream)) { -- return false; -- } -- } -- } -- -- // padded list of keys -- if (!stream.readString(m_rawData)) { -- m_error = tr("Corrupted key file, reading private key failed"); -- return false; -- } -- } else { -- m_error = tr("Unsupported key type: %1").arg(m_rawType); -- return false; -- } -- -- // load private if no encryption -- if (!encrypted()) { -- return openKey(); -- } -- -- return true; --} -- --bool OpenSSHKey::encrypted() const --{ -- return (m_cipherName != "none"); --} -- --bool OpenSSHKey::openKey(const QString& passphrase) --{ -- QScopedPointer cipher; -- -- if (!m_rawPrivateData.isEmpty()) { -- return true; -- } -- -- if (m_rawData.isEmpty()) { -- m_error = tr("No private key payload to decrypt"); -- return false; -- } -- -- if (m_cipherName.compare("aes-128-cbc", Qt::CaseInsensitive) == 0) { -- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); -- } else if (m_cipherName == "aes256-cbc" || m_cipherName.compare("aes-256-cbc", Qt::CaseInsensitive) == 0) { -- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); -- } else if (m_cipherName == "aes256-ctr" || m_cipherName.compare("aes-256-ctr", Qt::CaseInsensitive) == 0) { -- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Ctr, SymmetricCipher::Decrypt)); -- } else if (m_cipherName != "none") { -- m_error = tr("Unknown cipher: %1").arg(m_cipherName); -- return false; -- } -- -- if (m_kdfName == "bcrypt") { -- if (!cipher) { -- m_error = tr("Trying to run KDF without cipher"); -- return false; -- } -- -- if (passphrase.isEmpty()) { -- m_error = tr("Passphrase is required to decrypt this key"); -- return false; -- } -- -- BinaryStream optionStream(&m_kdfOptions); -- -- QByteArray salt; -- quint32 rounds; -- -- optionStream.readString(salt); -- optionStream.read(rounds); -- -- QByteArray decryptKey; -- decryptKey.fill(0, cipher->keySize() + cipher->blockSize()); -- -- QByteArray phraseData = passphrase.toUtf8(); -- if (bcrypt_pbkdf(phraseData, salt, decryptKey, rounds) < 0) { -- m_error = tr("Key derivation failed, key file corrupted?"); -- return false; -- } -- -- QByteArray keyData, ivData; -- keyData.setRawData(decryptKey.data(), cipher->keySize()); -- ivData.setRawData(decryptKey.data() + cipher->keySize(), cipher->blockSize()); -- -- cipher->init(keyData, ivData); -- -- if (!cipher->init(keyData, ivData)) { -- m_error = cipher->errorString(); -- return false; -- } -- } else if (m_kdfName == "md5") { -- if (m_cipherIV.length() < 8) { -- m_error = tr("Cipher IV is too short for MD5 kdf"); -- return false; -- } -- -- QByteArray keyData; -- QByteArray mdBuf; -- do { -- QCryptographicHash hash(QCryptographicHash::Md5); -- hash.addData(mdBuf); -- hash.addData(passphrase.toUtf8()); -- hash.addData(m_cipherIV.data(), 8); -- mdBuf = hash.result(); -- keyData.append(mdBuf); -- } while (keyData.size() < cipher->keySize()); -- -- if (keyData.size() > cipher->keySize()) { -- // If our key size isn't a multiple of 16 (e.g. AES-192 or something), -- // then we will need to truncate it. -- keyData.resize(cipher->keySize()); -- } -- -- if (!cipher->init(keyData, m_cipherIV)) { -- m_error = cipher->errorString(); -- return false; -- } -- } else if (m_kdfName != "none") { -- m_error = tr("Unknown KDF: %1").arg(m_kdfName); -- return false; -- } -- -- QByteArray rawData = m_rawData; -- -- if (cipher && cipher->isInitalized()) { -- bool ok = false; -- rawData = cipher->process(rawData, &ok); -- if (!ok) { -- m_error = tr("Decryption failed, wrong passphrase?"); -- return false; -- } -- } -- -- if (m_rawType == TYPE_DSA_PRIVATE) { -- if (!ASN1Key::parseDSA(rawData, *this)) { -- m_error = tr("Decryption failed, wrong passphrase?"); -- return false; -- } -- -- return true; -- } else if (m_rawType == TYPE_RSA_PRIVATE) { -- if (!ASN1Key::parsePrivateRSA(rawData, *this)) { -- m_error = tr("Decryption failed, wrong passphrase?"); -- return false; -- } -- return true; -- } else if (m_rawType == TYPE_RSA_PUBLIC) { -- if (!ASN1Key::parsePublicRSA(rawData, *this)) { -- m_error = tr("Decryption failed, wrong passphrase?"); -- return false; -- } -- return true; -- } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { -- BinaryStream keyStream(&rawData); -- -- quint32 checkInt1; -- quint32 checkInt2; -- -- keyStream.read(checkInt1); -- keyStream.read(checkInt2); -- -- if (checkInt1 != checkInt2) { -- m_error = tr("Decryption failed, wrong passphrase?"); -- return false; -- } -- -- return readPrivate(keyStream); -- } -- -- m_error = tr("Unsupported key type: %1").arg(m_rawType); -- return false; --} -- --bool OpenSSHKey::readPublic(BinaryStream& stream) --{ -- m_rawPublicData.clear(); -- -- if (!stream.readString(m_type)) { -- m_error = tr("Unexpected EOF while reading public key"); -- return false; -- } -- -- int keyParts; -- if (m_type == "ssh-dss") { -- keyParts = 4; -- } else if (m_type == "ssh-rsa") { -- keyParts = 2; -- } else if (m_type.startsWith("ecdsa-sha2-")) { -- keyParts = 2; -- } else if (m_type == "ssh-ed25519") { -- keyParts = 1; -- } else { -- m_error = tr("Unknown key type: %1").arg(m_type); -- return false; -- } -- -- for (int i = 0; i < keyParts; ++i) { -- QByteArray t; -- -- if (!stream.readString(t)) { -- m_error = tr("Unexpected EOF while reading public key"); -- return false; -- } -- -- m_rawPublicData.append(t); -- } -- -- return true; --} -- --bool OpenSSHKey::readPrivate(BinaryStream& stream) --{ -- m_rawPrivateData.clear(); -- -- if (!stream.readString(m_type)) { -- m_error = tr("Unexpected EOF while reading private key"); -- return false; -- } -- -- int keyParts; -- if (m_type == "ssh-dss") { -- keyParts = 5; -- } else if (m_type == "ssh-rsa") { -- keyParts = 6; -- } else if (m_type.startsWith("ecdsa-sha2-")) { -- keyParts = 3; -- } else if (m_type == "ssh-ed25519") { -- keyParts = 2; -- } else { -- m_error = tr("Unknown key type: %1").arg(m_type); -- return false; -- } -- -- for (int i = 0; i < keyParts; ++i) { -- QByteArray t; -- -- if (!stream.readString(t)) { -- m_error = tr("Unexpected EOF while reading private key"); -- return false; -- } -- -- m_rawPrivateData.append(t); -- } -- -- if (!stream.readString(m_comment)) { -- m_error = tr("Unexpected EOF while reading private key"); -- return false; -- } -- -- return true; --} -- --bool OpenSSHKey::writePublic(BinaryStream& stream) --{ -- if (m_rawPublicData.isEmpty()) { -- m_error = tr("Can't write public key as it is empty"); -- return false; -- } -- -- if (!stream.writeString(m_type)) { -- m_error = tr("Unexpected EOF when writing public key"); -- return false; -- } -- -- for (QByteArray t : m_rawPublicData) { -- if (!stream.writeString(t)) { -- m_error = tr("Unexpected EOF when writing public key"); -- return false; -- } -- } -- -- return true; --} -- --bool OpenSSHKey::writePrivate(BinaryStream& stream) --{ -- if (m_rawPrivateData.isEmpty()) { -- m_error = tr("Can't write private key as it is empty"); -- return false; -- } -- -- if (!stream.writeString(m_type)) { -- m_error = tr("Unexpected EOF when writing private key"); -- return false; -- } -- -- for (QByteArray t : m_rawPrivateData) { -- if (!stream.writeString(t)) { -- m_error = tr("Unexpected EOF when writing private key"); -- return false; -- } -- } -- -- if (!stream.writeString(m_comment)) { -- m_error = tr("Unexpected EOF when writing private key"); -- return false; -- } -- -- return true; --} -- --QList OpenSSHKey::publicParts() const --{ -- return m_rawPublicData; --} -- --QList OpenSSHKey::privateParts() const --{ -- return m_rawPrivateData; --} -- --const QString& OpenSSHKey::privateType() const --{ -- return m_rawType; --} -- --OpenSSHKey OpenSSHKey::restoreFromBinary(Type type, const QByteArray& serialized) --{ -- OpenSSHKey key; -- auto data = binaryDeserialize(serialized); -- key.setType(data.first); -- switch (type) { -- case Public: -- key.setPublicData(data.second); -- break; -- case Private: -- key.setPrivateData(data.second); -- break; -- } -- return key; --} -- --QByteArray OpenSSHKey::serializeToBinary(Type type, const OpenSSHKey& key) --{ -- Q_ASSERT(!key.encrypted()); -- switch (type) { -- case Public: -- return binarySerialize(key.type(), key.publicParts()); -- case Private: -- return binarySerialize(key.type(), key.privateParts()); -- } -- return {}; --} -- --uint qHash(const OpenSSHKey& key) --{ -- return qHash(key.fingerprint()); --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.h keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.h ---- keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,98 +0,0 @@ --/* -- * Copyright (C) 2017 Toni Spets -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_OPENSSHKEY_H --#define KEEPASSXC_OPENSSHKEY_H -- --#include -- --class BinaryStream; -- --class OpenSSHKey : public QObject --{ -- Q_OBJECT --public: -- static OpenSSHKey generate(bool secure = true); -- -- explicit OpenSSHKey(QObject* parent = nullptr); -- OpenSSHKey(const OpenSSHKey& other); -- bool operator==(const OpenSSHKey& other) const; -- -- bool parsePKCS1PEM(const QByteArray& in); -- bool encrypted() const; -- bool openKey(const QString& passphrase = QString()); -- -- const QString cipherName() const; -- const QString type() const; -- int keyLength() const; -- const QString fingerprint(QCryptographicHash::Algorithm algo = QCryptographicHash::Sha256) const; -- const QString comment() const; -- const QString publicKey() const; -- const QString privateKey() const; -- const QString errorString() const; -- -- void setType(const QString& type); -- void setPublicData(const QList& data); -- void setPrivateData(const QList& data); -- void setComment(const QString& comment); -- -- void clearPrivate(); -- -- bool readPublic(BinaryStream& stream); -- bool readPrivate(BinaryStream& stream); -- bool writePublic(BinaryStream& stream); -- bool writePrivate(BinaryStream& stream); -- -- QList publicParts() const; -- QList privateParts() const; -- const QString& privateType() const; -- -- static const QString TYPE_DSA_PRIVATE; -- static const QString TYPE_RSA_PRIVATE; -- static const QString TYPE_RSA_PUBLIC; -- static const QString TYPE_OPENSSH_PRIVATE; -- -- enum Type -- { -- Public, -- Private -- }; -- -- static OpenSSHKey restoreFromBinary(Type eType, const QByteArray& serialized); -- static QByteArray serializeToBinary(Type eType, const OpenSSHKey& key); -- --private: -- bool extractPEM(const QByteArray& in, QByteArray& out); -- -- QString m_type; -- QString m_cipherName; -- QByteArray m_cipherIV; -- QString m_kdfName; -- QByteArray m_kdfOptions; -- -- QString m_rawType; -- QByteArray m_rawData; -- QList m_rawPublicData; -- QList m_rawPrivateData; -- QString m_comment; -- QString m_error; --}; -- --uint qHash(const OpenSSHKey& key); -- --#endif // KEEPASSXC_OPENSSHKEY_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherBackend.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipherBackend.h ---- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherBackend.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherBackend.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,44 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SYMMETRICCIPHERBACKEND_H --#define KEEPASSX_SYMMETRICCIPHERBACKEND_H -- --#include -- --class SymmetricCipherBackend --{ --public: -- virtual ~SymmetricCipherBackend() -- { -- } -- virtual bool init() = 0; -- virtual bool setKey(const QByteArray& key) = 0; -- virtual bool setIv(const QByteArray& iv) = 0; -- -- virtual QByteArray process(const QByteArray& data, bool* ok) = 0; -- Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data) = 0; -- Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data, quint64 rounds) = 0; -- -- virtual bool reset() = 0; -- virtual int keySize() const = 0; -- virtual int blockSize() const = 0; -- -- virtual QString error() const = 0; --}; -- --#endif // KEEPASSX_SYMMETRICCIPHERBACKEND_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.cpp keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.cpp ---- keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,158 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SymmetricCipher.h" -- --#include "config-keepassx.h" --#include "crypto/SymmetricCipherGcrypt.h" -- --SymmetricCipher::SymmetricCipher(Algorithm algo, Mode mode, Direction direction) -- : m_backend(createBackend(algo, mode, direction)) -- , m_initialized(false) -- , m_algo(algo) --{ --} -- --SymmetricCipher::~SymmetricCipher() --{ --} -- --bool SymmetricCipher::init(const QByteArray& key, const QByteArray& iv) --{ -- if (!m_backend->init()) { -- return false; -- } -- -- if (!m_backend->setKey(key)) { -- return false; -- } -- -- if (!m_backend->setIv(iv)) { -- return false; -- } -- -- m_initialized = true; -- return true; --} -- --bool SymmetricCipher::isInitalized() const --{ -- return m_initialized; --} -- --SymmetricCipherBackend* SymmetricCipher::createBackend(Algorithm algo, Mode mode, Direction direction) --{ -- switch (algo) { -- case Aes128: -- case Aes256: -- case Twofish: -- case Salsa20: -- case ChaCha20: -- return new SymmetricCipherGcrypt(algo, mode, direction); -- -- default: -- Q_ASSERT(false); -- return nullptr; -- } --} -- --bool SymmetricCipher::reset() --{ -- return m_backend->reset(); --} -- --int SymmetricCipher::keySize() const --{ -- return m_backend->keySize(); --} -- --int SymmetricCipher::blockSize() const --{ -- return m_backend->blockSize(); --} -- --QString SymmetricCipher::errorString() const --{ -- return m_backend->error(); --} -- --SymmetricCipher::Algorithm SymmetricCipher::cipherToAlgorithm(const QUuid& cipher) --{ -- if (cipher == KeePass2::CIPHER_AES256) { -- return Aes256; -- } else if (cipher == KeePass2::CIPHER_CHACHA20) { -- return ChaCha20; -- } else if (cipher == KeePass2::CIPHER_TWOFISH) { -- return Twofish; -- } -- -- qWarning("SymmetricCipher::cipherToAlgorithm: invalid UUID %s", cipher.toString().toLatin1().data()); -- return InvalidAlgorithm; --} -- --QUuid SymmetricCipher::algorithmToCipher(Algorithm algo) --{ -- switch (algo) { -- case Aes128: -- return KeePass2::CIPHER_AES128; -- case Aes256: -- return KeePass2::CIPHER_AES256; -- case ChaCha20: -- return KeePass2::CIPHER_CHACHA20; -- case Twofish: -- return KeePass2::CIPHER_TWOFISH; -- default: -- qWarning("SymmetricCipher::algorithmToCipher: invalid algorithm %d", algo); -- return {}; -- } --} -- --int SymmetricCipher::algorithmIvSize(Algorithm algo) --{ -- switch (algo) { -- case ChaCha20: -- return 12; -- case Aes128: -- return 16; -- case Aes256: -- return 16; -- case Twofish: -- return 16; -- default: -- qWarning("SymmetricCipher::algorithmIvSize: invalid algorithm %d", algo); -- return -1; -- } --} -- --SymmetricCipher::Mode SymmetricCipher::algorithmMode(Algorithm algo) --{ -- switch (algo) { -- case ChaCha20: -- return Stream; -- case Aes256: -- case Twofish: -- return Cbc; -- default: -- qWarning("SymmetricCipher::algorithmMode: invalid algorithm %d", algo); -- return InvalidMode; -- } --} -- --SymmetricCipher::Algorithm SymmetricCipher::algorithm() const --{ -- return m_algo; --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.cpp keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.cpp ---- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,261 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SymmetricCipherGcrypt.h" -- --#include "config-keepassx.h" --#include "crypto/Crypto.h" -- --SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, -- SymmetricCipher::Mode mode, -- SymmetricCipher::Direction direction) -- : m_ctx(nullptr) -- , m_algo(gcryptAlgo(algo)) -- , m_mode(gcryptMode(mode)) -- , m_direction(direction) --{ --} -- --SymmetricCipherGcrypt::~SymmetricCipherGcrypt() --{ -- gcry_cipher_close(m_ctx); --} -- --int SymmetricCipherGcrypt::gcryptAlgo(SymmetricCipher::Algorithm algo) --{ -- switch (algo) { -- case SymmetricCipher::Aes128: -- return GCRY_CIPHER_AES128; -- -- case SymmetricCipher::Aes256: -- return GCRY_CIPHER_AES256; -- -- case SymmetricCipher::Twofish: -- return GCRY_CIPHER_TWOFISH; -- -- case SymmetricCipher::Salsa20: -- return GCRY_CIPHER_SALSA20; -- -- case SymmetricCipher::ChaCha20: -- return GCRY_CIPHER_CHACHA20; -- -- default: -- Q_ASSERT(false); -- return -1; -- } --} -- --int SymmetricCipherGcrypt::gcryptMode(SymmetricCipher::Mode mode) --{ -- switch (mode) { -- case SymmetricCipher::Ecb: -- return GCRY_CIPHER_MODE_ECB; -- -- case SymmetricCipher::Cbc: -- return GCRY_CIPHER_MODE_CBC; -- -- case SymmetricCipher::Ctr: -- return GCRY_CIPHER_MODE_CTR; -- -- case SymmetricCipher::Stream: -- return GCRY_CIPHER_MODE_STREAM; -- -- default: -- Q_ASSERT(false); -- return -1; -- } --} -- --void SymmetricCipherGcrypt::setError(const gcry_error_t& err) --{ -- const char* gcryptError = gcry_strerror(err); -- const char* gcryptErrorSource = gcry_strsource(err); -- -- m_error = QString("%1/%2").arg(QString::fromLocal8Bit(gcryptErrorSource), QString::fromLocal8Bit(gcryptError)); --} -- --bool SymmetricCipherGcrypt::init() --{ -- Q_ASSERT(Crypto::initialized()); -- -- gcry_error_t error; -- -- if (m_ctx != nullptr) -- gcry_cipher_close(m_ctx); -- error = gcry_cipher_open(&m_ctx, m_algo, m_mode, 0); -- if (error != 0) { -- setError(error); -- return false; -- } -- -- return true; --} -- --bool SymmetricCipherGcrypt::setKey(const QByteArray& key) --{ -- m_key = key; -- gcry_error_t error = gcry_cipher_setkey(m_ctx, m_key.constData(), m_key.size()); -- -- if (error != 0) { -- setError(error); -- return false; -- } -- -- return true; --} -- --bool SymmetricCipherGcrypt::setIv(const QByteArray& iv) --{ -- m_iv = iv; -- gcry_error_t error; -- -- if (m_mode == GCRY_CIPHER_MODE_CTR) { -- error = gcry_cipher_setctr(m_ctx, m_iv.constData(), m_iv.size()); -- } else { -- error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); -- } -- -- if (error != 0) { -- setError(error); -- return false; -- } -- -- return true; --} -- --QByteArray SymmetricCipherGcrypt::process(const QByteArray& data, bool* ok) --{ -- // TODO: check block size -- -- QByteArray result; -- result.resize(data.size()); -- -- gcry_error_t error; -- -- if (m_direction == SymmetricCipher::Decrypt) { -- error = gcry_cipher_decrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); -- } else { -- error = gcry_cipher_encrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); -- } -- -- if (error != 0) { -- setError(error); -- *ok = false; -- } else { -- *ok = true; -- } -- -- return result; --} -- --bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) --{ -- // TODO: check block size -- -- gcry_error_t error; -- -- if (m_direction == SymmetricCipher::Decrypt) { -- error = gcry_cipher_decrypt(m_ctx, data.data(), data.size(), nullptr, 0); -- } else { -- error = gcry_cipher_encrypt(m_ctx, data.data(), data.size(), nullptr, 0); -- } -- -- if (error != 0) { -- setError(error); -- return false; -- } -- -- return true; --} -- --bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) --{ -- gcry_error_t error; -- -- char* rawData = data.data(); -- int size = data.size(); -- -- if (m_direction == SymmetricCipher::Decrypt) { -- for (quint64 i = 0; i != rounds; ++i) { -- error = gcry_cipher_decrypt(m_ctx, rawData, size, nullptr, 0); -- -- if (error != 0) { -- setError(error); -- return false; -- } -- } -- } else { -- for (quint64 i = 0; i != rounds; ++i) { -- error = gcry_cipher_encrypt(m_ctx, rawData, size, nullptr, 0); -- -- if (error != 0) { -- setError(error); -- return false; -- } -- } -- } -- -- return true; --} -- --bool SymmetricCipherGcrypt::reset() --{ -- gcry_error_t error; -- -- error = gcry_cipher_reset(m_ctx); -- if (error != 0) { -- setError(error); -- return false; -- } -- -- error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); -- if (error != 0) { -- setError(error); -- return false; -- } -- -- return true; --} -- --int SymmetricCipherGcrypt::keySize() const --{ -- gcry_error_t error; -- size_t keySizeT; -- -- error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_KEYLEN, nullptr, &keySizeT); -- if (error != 0) -- return -1; -- -- return keySizeT; --} -- --int SymmetricCipherGcrypt::blockSize() const --{ -- gcry_error_t error; -- size_t blockSizeT; -- -- error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, nullptr, &blockSizeT); -- if (error != 0) -- return -1; -- -- return blockSizeT; --} -- --QString SymmetricCipherGcrypt::error() const --{ -- return m_error; --} -diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.h ---- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SYMMETRICCIPHERGCRYPT_H --#define KEEPASSX_SYMMETRICCIPHERGCRYPT_H -- --#include -- --#include "crypto/SymmetricCipher.h" --#include "crypto/SymmetricCipherBackend.h" -- --class SymmetricCipherGcrypt : public SymmetricCipherBackend --{ --public: -- SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, -- SymmetricCipher::Mode mode, -- SymmetricCipher::Direction direction); -- ~SymmetricCipherGcrypt(); -- -- bool init(); -- bool setKey(const QByteArray& key); -- bool setIv(const QByteArray& iv); -- -- QByteArray process(const QByteArray& data, bool* ok); -- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); -- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data, quint64 rounds); -- -- bool reset(); -- int keySize() const; -- int blockSize() const; -- -- QString error() const; -- --private: -- static int gcryptAlgo(SymmetricCipher::Algorithm algo); -- static int gcryptMode(SymmetricCipher::Mode mode); -- void setError(const gcry_error_t& err); -- -- gcry_cipher_hd_t m_ctx; -- const int m_algo; -- const int m_mode; -- const SymmetricCipher::Direction m_direction; -- QByteArray m_key; -- QByteArray m_iv; -- QString m_error; --}; -- --#endif // KEEPASSX_SYMMETRICCIPHERGCRYPT_H -diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.h ---- keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,99 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SYMMETRICCIPHER_H --#define KEEPASSX_SYMMETRICCIPHER_H -- --#include --#include --#include --#include -- --#include "crypto/SymmetricCipherBackend.h" --#include "format/KeePass2.h" -- --class SymmetricCipher --{ --public: -- enum Algorithm -- { -- Aes128, -- Aes256, -- Twofish, -- Salsa20, -- ChaCha20, -- InvalidAlgorithm = -1 -- }; -- -- enum Mode -- { -- Cbc, -- Ctr, -- Ecb, -- Stream, -- InvalidMode = -1 -- }; -- -- enum Direction -- { -- Decrypt, -- Encrypt -- }; -- -- SymmetricCipher(Algorithm algo, Mode mode, Direction direction); -- ~SymmetricCipher(); -- Q_DISABLE_COPY(SymmetricCipher) -- -- bool init(const QByteArray& key, const QByteArray& iv); -- bool isInitalized() const; -- -- inline QByteArray process(const QByteArray& data, bool* ok) -- { -- return m_backend->process(data, ok); -- } -- -- Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data) -- { -- return m_backend->processInPlace(data); -- } -- -- Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data, quint64 rounds) -- { -- Q_ASSERT(rounds > 0); -- return m_backend->processInPlace(data, rounds); -- } -- -- bool reset(); -- int keySize() const; -- int blockSize() const; -- QString errorString() const; -- Algorithm algorithm() const; -- -- static Algorithm cipherToAlgorithm(const QUuid& cipher); -- static QUuid algorithmToCipher(Algorithm algo); -- static int algorithmIvSize(Algorithm algo); -- static Mode algorithmMode(Algorithm algo); -- --private: -- static SymmetricCipherBackend* createBackend(Algorithm algo, Mode mode, Direction direction); -- -- const QScopedPointer m_backend; -- bool m_initialized; -- Algorithm m_algo; --}; -- --#endif // KEEPASSX_SYMMETRICCIPHER_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/CMakeLists.txt keepassxc-2.6.4-patched/src/fdosecrets/CMakeLists.txt ---- keepassxc-2.6.4-orig/src/fdosecrets/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -@@ -1,37 +0,0 @@ --if(WITH_XC_FDOSECRETS) -- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -- -- add_library(fdosecrets STATIC -- # app settings page -- FdoSecretsPlugin.cpp -- widgets/SettingsModels.cpp -- widgets/SettingsWidgetFdoSecrets.cpp -- -- # per database settings page -- DatabaseSettingsPageFdoSecrets.cpp -- widgets/DatabaseSettingsWidgetFdoSecrets.cpp -- -- # setting storage -- FdoSecretsSettings.cpp -- -- # gcrypt MPI wrapper -- GcryptMPI.cpp -- -- # dbus objects -- objects/DBusObject.cpp -- objects/Service.cpp -- objects/Session.cpp -- objects/SessionCipher.cpp -- objects/Collection.cpp -- objects/Item.cpp -- objects/Prompt.cpp -- objects/adaptors/ServiceAdaptor.cpp -- objects/adaptors/SessionAdaptor.cpp -- objects/adaptors/CollectionAdaptor.cpp -- objects/adaptors/ItemAdaptor.cpp -- objects/adaptors/PromptAdaptor.cpp -- objects/DBusReturn.cpp -- objects/DBusTypes.cpp -- ) -- target_link_libraries(fdosecrets Qt5::Core Qt5::Widgets Qt5::DBus ${GCRYPT_LIBRARIES}) --endif() -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,49 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsPageFdoSecrets.h" -- --#include "fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h" -- --#include "core/Resources.h" -- --QString DatabaseSettingsPageFdoSecrets::name() --{ -- return QObject::tr("Secret Service Integration"); --} -- --QIcon DatabaseSettingsPageFdoSecrets::icon() --{ -- return resources()->icon(QStringLiteral("freedesktop")); --} -- --QWidget* DatabaseSettingsPageFdoSecrets::createWidget() --{ -- return new DatabaseSettingsWidgetFdoSecrets; --} -- --void DatabaseSettingsPageFdoSecrets::loadSettings(QWidget* widget, QSharedPointer db) --{ -- auto settingsWidget = qobject_cast(widget); -- settingsWidget->loadSettings(db); --} -- --void DatabaseSettingsPageFdoSecrets::saveSettings(QWidget* widget) --{ -- auto settingsWidget = qobject_cast(widget); -- settingsWidget->saveSettings(); --} -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h ---- keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,36 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H --#define KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H -- --#include "gui/dbsettings/DatabaseSettingsDialog.h" -- --class DatabaseSettingsPageFdoSecrets : public IDatabaseSettingsPage --{ -- Q_DISABLE_COPY(DatabaseSettingsPageFdoSecrets) --public: -- DatabaseSettingsPageFdoSecrets() = default; -- -- QString name() override; -- QIcon icon() override; -- QWidget* createWidget() override; -- void loadSettings(QWidget* widget, QSharedPointer db) override; -- void saveSettings(QWidget* widget) override; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.cpp keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,134 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "FdoSecretsPlugin.h" -- --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/DBusTypes.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/widgets/SettingsWidgetFdoSecrets.h" -- --#include "gui/DatabaseTabWidget.h" -- --#include -- --#include -- --using FdoSecrets::Service; -- --// TODO: Only used for testing. Need to split service functions away from settings page. --QPointer g_fdoSecretsPlugin; -- --FdoSecretsPlugin::FdoSecretsPlugin(DatabaseTabWidget* tabWidget) -- : m_dbTabs(tabWidget) --{ -- g_fdoSecretsPlugin = this; -- FdoSecrets::registerDBusTypes(); --} -- --FdoSecretsPlugin* FdoSecretsPlugin::getPlugin() --{ -- return g_fdoSecretsPlugin; --} -- --QWidget* FdoSecretsPlugin::createWidget() --{ -- return new SettingsWidgetFdoSecrets(this); --} -- --void FdoSecretsPlugin::loadSettings(QWidget* widget) --{ -- qobject_cast(widget)->loadSettings(); --} -- --void FdoSecretsPlugin::saveSettings(QWidget* widget) --{ -- qobject_cast(widget)->saveSettings(); -- updateServiceState(); --} -- --void FdoSecretsPlugin::updateServiceState() --{ -- if (FdoSecrets::settings()->isEnabled()) { -- if (!m_secretService && m_dbTabs) { -- m_secretService.reset(new Service(this, m_dbTabs)); -- connect(m_secretService.data(), &Service::error, this, [this](const QString& msg) { -- emit error(tr("Fdo Secret Service: %1").arg(msg)); -- }); -- if (!m_secretService->initialize()) { -- m_secretService.reset(); -- FdoSecrets::settings()->setEnabled(false); -- return; -- } -- emit secretServiceStarted(); -- } -- } else { -- if (m_secretService) { -- m_secretService.reset(); -- emit secretServiceStopped(); -- } -- } --} -- --Service* FdoSecretsPlugin::serviceInstance() const --{ -- return m_secretService.data(); --} -- --DatabaseTabWidget* FdoSecretsPlugin::dbTabs() const --{ -- return m_dbTabs; --} -- --void FdoSecretsPlugin::emitRequestSwitchToDatabases() --{ -- emit requestSwitchToDatabases(); --} -- --void FdoSecretsPlugin::emitRequestShowNotification(const QString& msg, const QString& title) --{ -- if (!FdoSecrets::settings()->showNotification()) { -- return; -- } -- emit requestShowNotification(msg, title, 10000); --} -- --QString FdoSecretsPlugin::reportExistingService() const --{ -- auto pidStr = tr("Unknown", "Unknown PID"); -- auto exeStr = tr("Unknown", "Unknown executable path"); -- -- // try get pid -- auto pid = QDBusConnection::sessionBus().interface()->servicePid(DBUS_SERVICE_SECRET); -- if (pid.isValid()) { -- pidStr = QString::number(pid.value()); -- -- // try get the first part of the cmdline, which usually is the executable name/path -- QFile proc(QStringLiteral("/proc/%1/cmdline").arg(pid.value())); -- if (proc.open(QFile::ReadOnly)) { -- auto parts = proc.readAll().split('\0'); -- if (parts.length() >= 1) { -- exeStr = QString::fromLocal8Bit(parts[0]).trimmed(); -- } -- } -- } -- auto otherService = tr("PID: %1, Executable: %2", "PID: 1234, Executable: /path/to/exe") -- .arg(pidStr, exeStr.toHtmlEscaped()); -- return tr("Another secret service is running (%1).
" -- "Please stop/remove it before re-enabling the Secret Service Integration.") -- .arg(otherService); --} -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.h keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.h ---- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,92 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETSPLUGIN_H --#define KEEPASSXC_FDOSECRETSPLUGIN_H -- --#include "core/Resources.h" --#include "gui/ApplicationSettingsWidget.h" -- --#include --#include -- --class DatabaseTabWidget; -- --namespace FdoSecrets --{ -- class Service; --} // namespace FdoSecrets -- --class FdoSecretsPlugin : public QObject, public ISettingsPage --{ -- Q_OBJECT --public: -- explicit FdoSecretsPlugin(DatabaseTabWidget* tabWidget); -- ~FdoSecretsPlugin() override = default; -- -- QString name() override -- { -- return QObject::tr("Secret Service Integration"); -- } -- -- QIcon icon() override -- { -- return Resources::instance()->icon("freedesktop"); -- } -- -- QWidget* createWidget() override; -- void loadSettings(QWidget* widget) override; -- void saveSettings(QWidget* widget) override; -- -- void updateServiceState(); -- -- /** -- * @return The service instance, can be nullptr if the service is disabled. -- */ -- FdoSecrets::Service* serviceInstance() const; -- -- /** -- * @return The db tabs widget, containing opened databases. Can be nullptr. -- */ -- DatabaseTabWidget* dbTabs() const; -- -- /** -- * Check the running secret service and returns info about it -- * @return html string suitable to be shown in the UI -- */ -- QString reportExistingService() const; -- -- // TODO: Only used for testing. Need to split service functions away from settings page. -- static FdoSecretsPlugin* getPlugin(); -- --public slots: -- void emitRequestSwitchToDatabases(); -- void emitRequestShowNotification(const QString& msg, const QString& title = {}); -- --signals: -- void error(const QString& msg); -- void requestSwitchToDatabases(); -- void requestShowNotification(const QString& msg, const QString& title, int msTimeoutHint); -- void secretServiceStarted(); -- void secretServiceStopped(); -- --private: -- QPointer m_dbTabs; -- QScopedPointer m_secretService; --}; -- --#endif // KEEPASSXC_FDOSECRETSPLUGIN_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.cpp keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,98 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "FdoSecretsSettings.h" -- --#include "core/Config.h" --#include "core/CustomData.h" --#include "core/Database.h" --#include "core/Metadata.h" -- --namespace Keys --{ -- namespace Db -- { -- constexpr auto FdoSecretsExposedGroup = "FDO_SECRETS_EXPOSED_GROUP"; -- } // namespace Db -- --} // namespace Keys -- --namespace FdoSecrets --{ -- -- FdoSecretsSettings* FdoSecretsSettings::m_instance = nullptr; -- -- FdoSecretsSettings* FdoSecretsSettings::instance() -- { -- if (!m_instance) { -- m_instance = new FdoSecretsSettings; -- } -- return m_instance; -- } -- -- bool FdoSecretsSettings::isEnabled() const -- { -- return config()->get(Config::FdoSecrets_Enabled).toBool(); -- } -- -- void FdoSecretsSettings::setEnabled(bool enabled) -- { -- config()->set(Config::FdoSecrets_Enabled, enabled); -- } -- -- bool FdoSecretsSettings::showNotification() const -- { -- return config()->get(Config::FdoSecrets_ShowNotification).toBool(); -- } -- -- void FdoSecretsSettings::setShowNotification(bool show) -- { -- config()->set(Config::FdoSecrets_ShowNotification, show); -- } -- -- bool FdoSecretsSettings::noConfirmDeleteItem() const -- { -- return config()->get(Config::FdoSecrets_NoConfirmDeleteItem).toBool(); -- } -- -- void FdoSecretsSettings::setNoConfirmDeleteItem(bool noConfirm) -- { -- config()->set(Config::FdoSecrets_NoConfirmDeleteItem, noConfirm); -- } -- -- QUuid FdoSecretsSettings::exposedGroup(const QSharedPointer& db) const -- { -- return exposedGroup(db.data()); -- } -- -- void FdoSecretsSettings::setExposedGroup(const QSharedPointer& db, -- const QUuid& group) // clazy:exclude=function-args-by-value -- { -- setExposedGroup(db.data(), group); -- } -- -- QUuid FdoSecretsSettings::exposedGroup(Database* db) const -- { -- return {db->metadata()->customData()->value(Keys::Db::FdoSecretsExposedGroup)}; -- } -- -- void FdoSecretsSettings::setExposedGroup(Database* db, const QUuid& group) // clazy:exclude=function-args-by-value -- { -- db->metadata()->customData()->set(Keys::Db::FdoSecretsExposedGroup, group.toString()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.h keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.h ---- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETSSETTINGS_H --#define KEEPASSXC_FDOSECRETSSETTINGS_H -- --#include --#include -- --class Database; -- --namespace FdoSecrets --{ -- -- class FdoSecretsSettings -- { -- public: -- FdoSecretsSettings() = default; -- static FdoSecretsSettings* instance(); -- -- bool isEnabled() const; -- void setEnabled(bool enabled); -- -- bool showNotification() const; -- void setShowNotification(bool show); -- -- bool noConfirmDeleteItem() const; -- void setNoConfirmDeleteItem(bool noConfirm); -- -- // Per db settings -- -- QUuid exposedGroup(const QSharedPointer& db) const; -- void setExposedGroup(const QSharedPointer& db, const QUuid& group); -- QUuid exposedGroup(Database* db) const; -- void setExposedGroup(Database* db, const QUuid& group); -- -- private: -- static FdoSecretsSettings* m_instance; -- }; -- -- inline FdoSecretsSettings* settings() -- { -- return FdoSecretsSettings::instance(); -- } -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETSSETTINGS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.cpp keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,63 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "GcryptMPI.h" -- --GcryptMPI MpiFromBytes(const QByteArray& bytes, bool secure, gcry_mpi_format format) --{ -- auto bufLen = static_cast(bytes.size()); -- -- const char* buf = nullptr; -- -- // gcry_mpi_scan uses secure memory only if input buffer is secure memory, so we have to make a copy -- GcryptMemPtr secureBuf; -- if (secure) { -- secureBuf.reset(static_cast(gcry_malloc_secure(bufLen))); -- memcpy(secureBuf.get(), bytes.data(), bufLen); -- buf = secureBuf.get(); -- } else { -- buf = bytes.data(); -- } -- -- gcry_mpi_t rawMpi; -- auto err = gcry_mpi_scan(&rawMpi, format, buf, format == GCRYMPI_FMT_HEX ? 0 : bufLen, nullptr); -- GcryptMPI mpi(rawMpi); -- -- if (gcry_err_code(err) != GPG_ERR_NO_ERROR) { -- mpi.reset(); -- } -- -- return mpi; --} -- --GcryptMPI MpiFromHex(const char* hex, bool secure) --{ -- return MpiFromBytes(QByteArray::fromRawData(hex, static_cast(strlen(hex) + 1)), secure, GCRYMPI_FMT_HEX); --} -- --QByteArray MpiToBytes(const GcryptMPI& mpi) --{ -- unsigned char* buf = nullptr; -- size_t buflen = 0; -- gcry_mpi_aprint(GCRYMPI_FMT_USG, &buf, &buflen, mpi.get()); -- -- QByteArray bytes(reinterpret_cast(buf), static_cast(buflen)); -- -- gcry_free(buf); -- -- return bytes; --} -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.h keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.h ---- keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_GCRYPTMPI_H --#define KEEPASSXC_GCRYPTMPI_H -- --#include -- --#include -- --#include --#include -- --template using deleter_from_fn = std::integral_constant; -- --/** -- * A simple RAII wrapper for gcry_mpi_t -- */ --using GcryptMPI = std::unique_ptr>; -- --/** -- * A simple RAII wrapper for libgcrypt allocated memory -- */ --using GcryptMemPtr = std::unique_ptr>; -- --/** -- * Parse a QByteArray as MPI -- * @param bytes -- * @param secure -- * @param format -- * @return -- */ --GcryptMPI MpiFromBytes(const QByteArray& bytes, bool secure = true, gcry_mpi_format format = GCRYMPI_FMT_USG); -- --/** -- * Parse MPI from hex data -- * @param hex -- * @param secure -- * @return -- */ --GcryptMPI MpiFromHex(const char* hex, bool secure = true); -- --/** -- * Dump MPI to bytes in USG format -- * @param mpi -- * @return -- */ --QByteArray MpiToBytes(const GcryptMPI& mpi); -- --#endif // KEEPASSXC_GCRYPTMPI_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,89 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CollectionAdaptor.h" -- --#include "fdosecrets/objects/Collection.h" --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Prompt.h" -- --namespace FdoSecrets --{ -- -- CollectionAdaptor::CollectionAdaptor(Collection* parent) -- : DBusAdaptor(parent) -- { -- connect( -- p(), &Collection::itemCreated, this, [this](const Item* item) { emit ItemCreated(objectPathSafe(item)); }); -- connect( -- p(), &Collection::itemDeleted, this, [this](const Item* item) { emit ItemDeleted(objectPathSafe(item)); }); -- connect( -- p(), &Collection::itemChanged, this, [this](const Item* item) { emit ItemChanged(objectPathSafe(item)); }); -- } -- -- const QList CollectionAdaptor::items() const -- { -- return objectsToPath(p()->items().valueOrHandle(p())); -- } -- -- QString CollectionAdaptor::label() const -- { -- return p()->label().valueOrHandle(p()); -- } -- -- void CollectionAdaptor::setLabel(const QString& label) -- { -- p()->setLabel(label).handle(p()); -- } -- -- bool CollectionAdaptor::locked() const -- { -- return p()->locked().valueOrHandle(p()); -- } -- -- qulonglong CollectionAdaptor::created() const -- { -- return p()->created().valueOrHandle(p()); -- } -- -- qulonglong CollectionAdaptor::modified() const -- { -- return p()->modified().valueOrHandle(p()); -- } -- -- QDBusObjectPath CollectionAdaptor::Delete() -- { -- return objectPathSafe(p()->deleteCollection().valueOrHandle(p())); -- } -- -- QList CollectionAdaptor::SearchItems(const StringStringMap& attributes) -- { -- return objectsToPath(p()->searchItems(attributes).valueOrHandle(p())); -- } -- -- QDBusObjectPath CollectionAdaptor::CreateItem(const QVariantMap& properties, -- const SecretStruct& secret, -- bool replace, -- QDBusObjectPath& prompt) -- { -- PromptBase* pp = nullptr; -- auto item = p()->createItem(properties, secret, replace, pp).valueOrHandle(p()); -- prompt = objectPathSafe(pp); -- return objectPathSafe(item); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,71 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H --#define KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H -- --#include "fdosecrets/objects/adaptors/DBusAdaptor.h" -- --#include -- --namespace FdoSecrets --{ -- -- class Collection; -- class CollectionAdaptor : public DBusAdaptor -- { -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_COLLECTION) -- -- Q_PROPERTY(QList Items READ items) -- Q_PROPERTY(QString Label READ label WRITE setLabel) -- Q_PROPERTY(bool Locked READ locked) -- Q_PROPERTY(qulonglong Created READ created) -- Q_PROPERTY(qulonglong Modified READ modified) -- -- public: -- explicit CollectionAdaptor(Collection* parent); -- ~CollectionAdaptor() override = default; -- -- const QList items() const; -- -- QString label() const; -- void setLabel(const QString& label); -- -- bool locked() const; -- -- qulonglong created() const; -- -- qulonglong modified() const; -- -- public slots: -- QDBusObjectPath Delete(); -- QList SearchItems(const StringStringMap& attributes); -- QDBusObjectPath CreateItem(const QVariantMap& properties, -- const FdoSecrets::SecretStruct& secret, -- bool replace, -- QDBusObjectPath& prompt); -- -- signals: -- void ItemCreated(const QDBusObjectPath& item); -- void ItemDeleted(const QDBusObjectPath& item); -- void ItemChanged(const QDBusObjectPath& item); -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/DBusAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/DBusAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/DBusAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/DBusAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,51 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H --#define KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H -- --#include "fdosecrets/objects/DBusReturn.h" --#include "fdosecrets/objects/DBusTypes.h" -- --#include -- --namespace FdoSecrets --{ -- -- /** -- * @brief A common adapter class -- */ -- template class DBusAdaptor : public QDBusAbstractAdaptor -- { -- public: -- explicit DBusAdaptor(QObject* parent = nullptr) -- : QDBusAbstractAdaptor(parent) -- { -- } -- -- ~DBusAdaptor() override = default; -- -- protected: -- Parent* p() const -- { -- return qobject_cast(parent()); -- } -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,83 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ItemAdaptor.h" -- --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Prompt.h" --#include "fdosecrets/objects/Session.h" -- --namespace FdoSecrets --{ -- -- ItemAdaptor::ItemAdaptor(Item* parent) -- : DBusAdaptor(parent) -- { -- } -- -- bool ItemAdaptor::locked() const -- { -- return p()->locked().valueOrHandle(p()); -- } -- -- const StringStringMap ItemAdaptor::attributes() const -- { -- return p()->attributes().valueOrHandle(p()); -- } -- -- void ItemAdaptor::setAttributes(const StringStringMap& attrs) -- { -- p()->setAttributes(attrs).handle(p()); -- } -- -- QString ItemAdaptor::label() const -- { -- return p()->label().valueOrHandle(p()); -- } -- -- void ItemAdaptor::setLabel(const QString& label) -- { -- p()->setLabel(label).handle(p()); -- } -- -- qulonglong ItemAdaptor::created() const -- { -- return p()->created().valueOrHandle(p()); -- } -- -- qulonglong ItemAdaptor::modified() const -- { -- return p()->modified().valueOrHandle(p()); -- } -- -- QDBusObjectPath ItemAdaptor::Delete() -- { -- auto prompt = p()->deleteItem().valueOrHandle(p()); -- return objectPathSafe(prompt); -- } -- -- SecretStruct ItemAdaptor::GetSecret(const QDBusObjectPath& session) -- { -- return p()->getSecret(pathToObject(session)).valueOrHandle(p()); -- } -- -- void ItemAdaptor::SetSecret(const SecretStruct& secret) -- { -- p()->setSecret(secret).handle(p()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H --#define KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H -- --#include "fdosecrets/objects/adaptors/DBusAdaptor.h" -- --namespace FdoSecrets --{ -- -- class Item; -- class ItemAdaptor : public DBusAdaptor -- { -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_ITEM) -- -- Q_PROPERTY(bool Locked READ locked) -- Q_PROPERTY(StringStringMap Attributes READ attributes WRITE setAttributes) -- Q_PROPERTY(QString Label READ label WRITE setLabel) -- Q_PROPERTY(qulonglong Created READ created) -- Q_PROPERTY(qulonglong Modified READ modified) -- -- public: -- explicit ItemAdaptor(Item* parent); -- ~ItemAdaptor() override = default; -- -- bool locked() const; -- -- const StringStringMap attributes() const; -- void setAttributes(const StringStringMap& attrs); -- -- QString label() const; -- void setLabel(const QString& label); -- -- qulonglong created() const; -- -- qulonglong modified() const; -- -- public slots: -- QDBusObjectPath Delete(); -- FdoSecrets::SecretStruct GetSecret(const QDBusObjectPath& session); -- void SetSecret(const FdoSecrets::SecretStruct& secret); -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "PromptAdaptor.h" -- --#include "fdosecrets/objects/Prompt.h" -- --namespace FdoSecrets --{ -- -- PromptAdaptor::PromptAdaptor(PromptBase* parent) -- : DBusAdaptor(parent) -- { -- connect(p(), &PromptBase::completed, this, [this](bool dismissed, QVariant result) { -- // make sure the result contains a valid value, otherwise QDBusVariant refuses to marshall it. -- if (!result.isValid()) { -- result = QString{}; -- } -- emit Completed(dismissed, QDBusVariant(std::move(result))); -- }); -- } -- -- void PromptAdaptor::Prompt(const QString& windowId) -- { -- p()->prompt(windowId).handle(p()); -- } -- -- void PromptAdaptor::Dismiss() -- { -- p()->dismiss().handle(p()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H --#define KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H -- --#include "fdosecrets/objects/adaptors/DBusAdaptor.h" -- --namespace FdoSecrets --{ -- -- class PromptBase; -- class PromptAdaptor : public DBusAdaptor -- { -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_PROMPT) -- -- public: -- explicit PromptAdaptor(PromptBase* parent); -- ~PromptAdaptor() override = default; -- -- public slots: -- void Prompt(const QString& windowId); -- void Dismiss(); -- -- signals: -- void Completed(bool dismissed, const QDBusVariant& result); -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,137 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ServiceAdaptor.h" -- --#include "fdosecrets/objects/Collection.h" --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Prompt.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/objects/Session.h" -- --namespace FdoSecrets --{ -- -- ServiceAdaptor::ServiceAdaptor(Service* parent) -- : DBusAdaptor(parent) -- { -- connect(p(), &Service::collectionCreated, this, [this](Collection* coll) { -- emit CollectionCreated(objectPathSafe(coll)); -- }); -- connect(p(), &Service::collectionDeleted, this, [this](Collection* coll) { -- emit CollectionDeleted(objectPathSafe(coll)); -- }); -- connect(p(), &Service::collectionChanged, this, [this](Collection* coll) { -- emit CollectionChanged(objectPathSafe(coll)); -- }); -- } -- -- const QList ServiceAdaptor::collections() const -- { -- auto colls = p()->collections().valueOrHandle(p()); -- return objectsToPath(std::move(colls)); -- } -- -- QDBusVariant -- ServiceAdaptor::OpenSession(const QString& algorithm, const QDBusVariant& input, QDBusObjectPath& result) -- { -- Session* session = nullptr; -- auto output = p()->openSession(algorithm, input.variant(), session).valueOrHandle(p()); -- result = objectPathSafe(session); -- return QDBusVariant(std::move(output)); -- } -- -- QDBusObjectPath -- ServiceAdaptor::CreateCollection(const QVariantMap& properties, const QString& alias, QDBusObjectPath& prompt) -- { -- PromptBase* pp; -- auto coll = p()->createCollection(properties, alias, pp).valueOrHandle(p()); -- prompt = objectPathSafe(pp); -- return objectPathSafe(coll); -- } -- -- const QList ServiceAdaptor::SearchItems(const StringStringMap& attributes, -- QList& locked) -- { -- QList lockedItems, unlockedItems; -- unlockedItems = p()->searchItems(attributes, lockedItems).valueOrHandle(p()); -- locked = objectsToPath(lockedItems); -- return objectsToPath(unlockedItems); -- } -- -- const QList ServiceAdaptor::Unlock(const QList& paths, QDBusObjectPath& prompt) -- { -- auto objects = pathsToObject(paths); -- if (!paths.isEmpty() && objects.isEmpty()) { -- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); -- return {}; -- } -- -- PromptBase* pp = nullptr; -- auto unlocked = p()->unlock(objects, pp).valueOrHandle(p()); -- -- prompt = objectPathSafe(pp); -- return objectsToPath(unlocked); -- } -- -- const QList ServiceAdaptor::Lock(const QList& paths, QDBusObjectPath& prompt) -- { -- auto objects = pathsToObject(paths); -- if (!paths.isEmpty() && objects.isEmpty()) { -- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); -- return {}; -- } -- -- PromptBase* pp = nullptr; -- auto locked = p()->lock(objects, pp).valueOrHandle(p()); -- -- prompt = objectPathSafe(pp); -- return objectsToPath(locked); -- } -- -- const ObjectPathSecretMap ServiceAdaptor::GetSecrets(const QList& items, -- const QDBusObjectPath& session) -- { -- auto itemObjects = pathsToObject(items); -- if (!items.isEmpty() && itemObjects.isEmpty()) { -- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); -- return {}; -- } -- -- auto secrets = p()->getSecrets(pathsToObject(items), pathToObject(session)).valueOrHandle(p()); -- -- ObjectPathSecretMap res; -- auto iter = secrets.begin(); -- while (iter != secrets.end()) { -- res[objectPathSafe(iter.key())] = std::move(iter.value()); -- ++iter; -- } -- return res; -- } -- -- QDBusObjectPath ServiceAdaptor::ReadAlias(const QString& name) -- { -- auto coll = p()->readAlias(name).valueOrHandle(p()); -- return objectPathSafe(coll); -- } -- -- void ServiceAdaptor::SetAlias(const QString& name, const QDBusObjectPath& collection) -- { -- p()->setAlias(name, pathToObject(collection)).handle(p()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,71 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H --#define KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H -- --#include "DBusAdaptor.h" -- --#include -- --namespace FdoSecrets --{ -- /** -- * @brief Adapter class for interface org.freedesktop.Secret.Service -- */ -- class Service; -- class ServiceAdaptor : public DBusAdaptor -- { -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_SERVICE) -- -- Q_PROPERTY(QList Collections READ collections) -- -- public: -- explicit ServiceAdaptor(Service* parent); -- ~ServiceAdaptor() override = default; -- -- const QList collections() const; -- -- public slots: -- QDBusVariant OpenSession(const QString& algorithm, const QDBusVariant& input, QDBusObjectPath& result); -- -- QDBusObjectPath CreateCollection(const QVariantMap& properties, const QString& alias, QDBusObjectPath& prompt); -- -- const QList SearchItems(const StringStringMap& attributes, QList& locked); -- -- const QList Unlock(const QList& paths, QDBusObjectPath& prompt); -- -- const QList Lock(const QList& paths, QDBusObjectPath& prompt); -- -- const ObjectPathSecretMap GetSecrets(const QList& items, const QDBusObjectPath& session); -- -- QDBusObjectPath ReadAlias(const QString& name); -- -- void SetAlias(const QString& name, const QDBusObjectPath& collection); -- -- signals: -- void CollectionCreated(const QDBusObjectPath& collection); -- -- void CollectionDeleted(const QDBusObjectPath& collection); -- -- void CollectionChanged(const QDBusObjectPath& collection); -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SessionAdaptor.h" -- --#include "fdosecrets/objects/Session.h" -- --namespace FdoSecrets --{ -- -- SessionAdaptor::SessionAdaptor(Session* parent) -- : DBusAdaptor(parent) -- { -- } -- -- void SessionAdaptor::Close() -- { -- p()->close().handle(p()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,42 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H --#define KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H -- --#include "fdosecrets/objects/adaptors/DBusAdaptor.h" -- --namespace FdoSecrets --{ -- -- class Session; -- class SessionAdaptor : public DBusAdaptor -- { -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_SESSION) -- -- public: -- explicit SessionAdaptor(Session* parent); -- ~SessionAdaptor() override = default; -- -- public slots: -- void Close(); -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,733 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Collection.h" -- --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Prompt.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/objects/Session.h" -- --#include "core/Config.h" --#include "core/Database.h" --#include "core/Tools.h" --#include "gui/DatabaseTabWidget.h" --#include "gui/DatabaseWidget.h" -- --#include --#include -- --namespace FdoSecrets --{ -- -- Collection::Collection(Service* parent, DatabaseWidget* backend) -- : DBusObject(parent) -- , m_backend(backend) -- , m_exposedGroup(nullptr) -- , m_registered(false) -- { -- // whenever the file path or the database object itself change, we do a full reload. -- connect(backend, &DatabaseWidget::databaseFilePathChanged, this, &Collection::reloadBackend); -- connect(backend, &DatabaseWidget::databaseReplaced, this, &Collection::reloadBackend); -- -- // also remember to clear/populate the database when lock state changes. -- connect(backend, &DatabaseWidget::databaseUnlocked, this, &Collection::onDatabaseLockChanged); -- connect(backend, &DatabaseWidget::databaseLocked, this, &Collection::onDatabaseLockChanged); -- -- // get notified whenever unlock db dialog finishes -- connect(parent, &Service::doneUnlockDatabaseInDialog, this, [this](bool accepted, DatabaseWidget* dbWidget) { -- if (!dbWidget || dbWidget != m_backend) { -- return; -- } -- emit doneUnlockCollection(accepted); -- }); -- -- reloadBackend(); -- } -- -- void Collection::reloadBackend() -- { -- if (m_registered) { -- // delete all items -- // this has to be done because the backend is actually still there, just we don't expose them -- // NOTE: Do NOT use a for loop, because Item::doDelete will remove itself from m_items. -- while (!m_items.isEmpty()) { -- m_items.first()->doDelete(); -- } -- cleanupConnections(); -- -- unregisterCurrentPath(); -- m_registered = false; -- } -- -- Q_ASSERT(m_backend); -- -- // make sure we have updated copy of the filepath, which is used to identify the database. -- m_backendPath = m_backend->database()->filePath(); -- -- // the database may not have a name (derived from filePath) yet, which may happen if it's newly created. -- // defer the registration to next time a file path change happens. -- if (!name().isEmpty()) { -- registerWithPath( -- QStringLiteral(DBUS_PATH_TEMPLATE_COLLECTION).arg(p()->objectPath().path(), encodePath(name())), -- new CollectionAdaptor(this)); -- m_registered = true; -- } -- -- // populate contents after expose on dbus, because items rely on parent's dbus object path -- if (!backendLocked()) { -- populateContents(); -- } else { -- cleanupConnections(); -- } -- } -- -- DBusReturn Collection::ensureBackend() const -- { -- if (!m_backend) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); -- } -- return {}; -- } -- -- DBusReturn Collection::ensureUnlocked() const -- { -- if (backendLocked()) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_IS_LOCKED)); -- } -- return {}; -- } -- -- DBusReturn> Collection::items() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- return m_items; -- } -- -- DBusReturn Collection::label() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- -- if (backendLocked()) { -- return name(); -- } -- return m_backend->database()->metadata()->name(); -- } -- -- DBusReturn Collection::setLabel(const QString& label) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- m_backend->database()->metadata()->setName(label); -- return {}; -- } -- -- DBusReturn Collection::locked() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- return backendLocked(); -- } -- -- DBusReturn Collection::created() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- return static_cast(m_backend->database()->rootGroup()->timeInfo().creationTime().toMSecsSinceEpoch() -- / 1000); -- } -- -- DBusReturn Collection::modified() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- // FIXME: there seems not to have a global modified time. -- // Use a more accurate time, considering all metadata, group, entry. -- return static_cast( -- m_backend->database()->rootGroup()->timeInfo().lastModificationTime().toMSecsSinceEpoch() / 1000); -- } -- -- DBusReturn Collection::deleteCollection() -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- -- // Delete means close database -- auto prompt = new DeleteCollectionPrompt(service(), this); -- if (backendLocked()) { -- // this won't raise a dialog, immediate execute -- auto pret = prompt->prompt({}); -- if (pret.isError()) { -- return pret; -- } -- prompt = nullptr; -- } -- // defer the close to the prompt -- return prompt; -- } -- -- DBusReturn> Collection::searchItems(const StringStringMap& attributes) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- // searchItems should work, whether `this` is locked or not. -- // however, we can't search items the same way as in gnome-keying, -- // because there's no database at all when locked. -- return QList{}; -- } -- -- // shortcut logic for Uuid/Path attributes, as they can uniquely identify an item. -- if (attributes.contains(ItemAttributes::UuidKey)) { -- auto uuid = QUuid::fromRfc4122(QByteArray::fromHex(attributes.value(ItemAttributes::UuidKey).toLatin1())); -- auto entry = m_exposedGroup->findEntryByUuid(uuid); -- if (entry) { -- return QList{m_entryToItem.value(entry)}; -- } else { -- return QList{}; -- } -- } -- -- if (attributes.contains(ItemAttributes::PathKey)) { -- auto path = attributes.value(ItemAttributes::PathKey); -- auto entry = m_exposedGroup->findEntryByPath(path); -- if (entry) { -- return QList{m_entryToItem.value(entry)}; -- } else { -- return QList{}; -- } -- } -- -- QList terms; -- for (auto it = attributes.constBegin(); it != attributes.constEnd(); ++it) { -- terms << attributeToTerm(it.key(), it.value()); -- } -- -- QList items; -- const auto foundEntries = EntrySearcher(false, true).search(terms, m_exposedGroup); -- items.reserve(foundEntries.size()); -- for (const auto& entry : foundEntries) { -- items << m_entryToItem.value(entry); -- } -- return items; -- } -- -- EntrySearcher::SearchTerm Collection::attributeToTerm(const QString& key, const QString& value) -- { -- static QMap attrKeyToField{ -- {EntryAttributes::TitleKey, EntrySearcher::Field::Title}, -- {EntryAttributes::UserNameKey, EntrySearcher::Field::Username}, -- {EntryAttributes::URLKey, EntrySearcher::Field::Url}, -- {EntryAttributes::NotesKey, EntrySearcher::Field::Notes}, -- }; -- -- EntrySearcher::SearchTerm term{}; -- term.field = attrKeyToField.value(key, EntrySearcher::Field::AttributeValue); -- term.word = key; -- term.exclude = false; -- -- const auto useWildcards = false; -- const auto exactMatch = true; -- const auto caseSensitive = true; -- term.regex = Tools::convertToRegex(QRegularExpression::escape(value), useWildcards, exactMatch, caseSensitive); -- -- return term; -- } -- -- DBusReturn -- Collection::createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- if (!pathToObject(secret.session)) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); -- } -- -- prompt = nullptr; -- -- bool newlyCreated = true; -- Item* item = nullptr; -- QString itemPath; -- StringStringMap attributes; -- -- auto iterAttr = properties.find(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")); -- if (iterAttr != properties.end()) { -- attributes = iterAttr.value().value(); -- -- itemPath = attributes.value(ItemAttributes::PathKey); -- -- // check existing item using attributes -- auto existings = searchItems(attributes); -- if (existings.isError()) { -- return existings; -- } -- if (!existings.value().isEmpty() && replace) { -- item = existings.value().front(); -- newlyCreated = false; -- } -- } -- -- if (!item) { -- // normalize itemPath -- itemPath = itemPath.startsWith('/') ? QString{} : QStringLiteral("/") + itemPath; -- -- // split itemPath to groupPath and itemName -- auto components = itemPath.split('/'); -- Q_ASSERT(components.size() >= 2); -- -- auto itemName = components.takeLast(); -- Group* group = findCreateGroupByPath(components.join('/')); -- -- // create new Entry in backend -- auto* entry = new Entry(); -- entry->setUuid(QUuid::createUuid()); -- entry->setTitle(itemName); -- entry->setUsername(m_backend->database()->metadata()->defaultUserName()); -- group->applyGroupIconOnCreateTo(entry); -- -- entry->setGroup(group); -- -- // when creation finishes in backend, we will already have item -- item = m_entryToItem.value(entry, nullptr); -- -- if (!item) { -- // may happen if entry somehow ends up in recycle bin -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); -- } -- } -- -- ret = item->setProperties(properties); -- if (ret.isError()) { -- if (newlyCreated) { -- item->doDelete(); -- } -- return ret; -- } -- ret = item->setSecret(secret); -- if (ret.isError()) { -- if (newlyCreated) { -- item->doDelete(); -- } -- return ret; -- } -- -- return item; -- } -- -- DBusReturn Collection::setProperties(const QVariantMap& properties) -- { -- auto label = properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_COLLECTION ".Label")).toString(); -- -- auto ret = setLabel(label); -- if (ret.isError()) { -- return ret; -- } -- -- return {}; -- } -- -- const QSet Collection::aliases() const -- { -- return m_aliases; -- } -- -- DBusReturn Collection::addAlias(QString alias) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- -- alias = encodePath(alias); -- -- if (m_aliases.contains(alias)) { -- return {}; -- } -- -- emit aliasAboutToAdd(alias); -- -- bool ok = QDBusConnection::sessionBus().registerObject( -- QStringLiteral(DBUS_PATH_TEMPLATE_ALIAS).arg(p()->objectPath().path(), alias), this); -- if (ok) { -- m_aliases.insert(alias); -- emit aliasAdded(alias); -- } -- -- return {}; -- } -- -- DBusReturn Collection::removeAlias(QString alias) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- -- alias = encodePath(alias); -- -- if (!m_aliases.contains(alias)) { -- return {}; -- } -- -- QDBusConnection::sessionBus().unregisterObject( -- QStringLiteral(DBUS_PATH_TEMPLATE_ALIAS).arg(p()->objectPath().path(), alias)); -- -- m_aliases.remove(alias); -- emit aliasRemoved(alias); -- -- return {}; -- } -- -- QString Collection::name() const -- { -- if (m_backendPath.isEmpty()) { -- // This is a newly created db without saving to file. -- // This name is also used to register dbus path. -- // For simplicity, we don't monitor the name change. -- // So the dbus object path is not updated if the db name -- // changes. This should not be a problem because once the database -- // gets saved, the dbus path will be updated to use filename and -- // everything back to normal. -- return m_backend->database()->metadata()->name(); -- } -- return QFileInfo(m_backendPath).baseName(); -- } -- -- DatabaseWidget* Collection::backend() const -- { -- return m_backend; -- } -- -- void Collection::onDatabaseLockChanged() -- { -- auto locked = backendLocked(); -- if (!locked) { -- populateContents(); -- } else { -- cleanupConnections(); -- } -- emit collectionLockChanged(locked); -- emit collectionChanged(); -- } -- -- void Collection::populateContents() -- { -- if (!m_registered) { -- return; -- } -- -- // we have an unlocked db -- -- auto newUuid = FdoSecrets::settings()->exposedGroup(m_backend->database()); -- auto newGroup = m_backend->database()->rootGroup()->findGroupByUuid(newUuid); -- if (!newGroup || inRecycleBin(newGroup)) { -- // no exposed group, delete self -- doDelete(); -- return; -- } -- -- // clean up old group connections -- cleanupConnections(); -- -- m_exposedGroup = newGroup; -- -- // Attach signal to update exposed group settings if the group was removed. -- // -- // When the group object is normally deleted due to ~Database, the databaseReplaced -- // signal should be first emitted, and we will clean up connection in reloadDatabase, -- // so this handler won't be triggered. -- connect(m_exposedGroup.data(), &Group::groupAboutToRemove, this, [this](Group* toBeRemoved) { -- if (backendLocked()) { -- return; -- } -- auto db = m_backend->database(); -- if (toBeRemoved->database() != db) { -- // should not happen, but anyway. -- // somehow our current database has been changed, and the old group is being deleted -- // possibly logic changes in replaceDatabase. -- return; -- } -- auto uuid = FdoSecrets::settings()->exposedGroup(db); -- auto exposedGroup = db->rootGroup()->findGroupByUuid(uuid); -- if (toBeRemoved == exposedGroup) { -- // reset the exposed group to none -- FdoSecrets::settings()->setExposedGroup(db, {}); -- } -- }); -- // Another possibility is the group being moved to recycle bin. -- connect(m_exposedGroup.data(), &Group::groupModified, this, [this]() { -- if (inRecycleBin(m_exposedGroup->parentGroup())) { -- // reset the exposed group to none -- FdoSecrets::settings()->setExposedGroup(m_backend->database().data(), {}); -- } -- }); -- -- // Monitor exposed group settings -- connect(m_backend->database()->metadata()->customData(), &CustomData::customDataModified, this, [this]() { -- if (!m_exposedGroup || backendLocked()) { -- return; -- } -- if (m_exposedGroup->uuid() == FdoSecrets::settings()->exposedGroup(m_backend->database())) { -- // no change -- return; -- } -- onDatabaseExposedGroupChanged(); -- }); -- -- // Add items for existing entry -- const auto entries = m_exposedGroup->entriesRecursive(false); -- for (const auto& entry : entries) { -- onEntryAdded(entry, false); -- } -- -- connectGroupSignalRecursive(m_exposedGroup); -- } -- -- void Collection::onDatabaseExposedGroupChanged() -- { -- // delete all items -- // this has to be done because the backend is actually still there -- // just we don't expose them -- for (const auto& item : asConst(m_items)) { -- item->doDelete(); -- } -- -- // repopulate -- if (!backendLocked()) { -- populateContents(); -- } -- } -- -- void Collection::onEntryAdded(Entry* entry, bool emitSignal) -- { -- if (inRecycleBin(entry)) { -- return; -- } -- -- auto item = new Item(this, entry); -- m_items << item; -- m_entryToItem[entry] = item; -- -- // forward delete signals -- connect(entry->group(), &Group::entryAboutToRemove, item, [item](Entry* toBeRemoved) { -- if (item->backend() == toBeRemoved) { -- item->doDelete(); -- } -- }); -- -- // relay signals -- connect(item, &Item::itemChanged, this, [this, item]() { emit itemChanged(item); }); -- connect(item, &Item::itemAboutToDelete, this, [this, item]() { -- m_items.removeAll(item); -- m_entryToItem.remove(item->backend()); -- emit itemDeleted(item); -- }); -- -- if (emitSignal) { -- emit itemCreated(item); -- } -- } -- -- void Collection::connectGroupSignalRecursive(Group* group) -- { -- if (inRecycleBin(group)) { -- return; -- } -- -- connect(group, &Group::groupModified, this, &Collection::collectionChanged); -- connect(group, &Group::entryAdded, this, [this](Entry* entry) { onEntryAdded(entry, true); }); -- -- const auto children = group->children(); -- for (const auto& cg : children) { -- connectGroupSignalRecursive(cg); -- } -- } -- -- Service* Collection::service() const -- { -- return qobject_cast(parent()); -- } -- -- bool Collection::doLock() -- { -- Q_ASSERT(m_backend); -- -- return m_backend->lock(); -- } -- -- void Collection::doUnlock() -- { -- Q_ASSERT(m_backend); -- -- service()->doUnlockDatabaseInDialog(m_backend); -- } -- -- void Collection::doDelete() -- { -- if (!m_backend) { -- // I'm already deleted -- return; -- } -- -- emit collectionAboutToDelete(); -- -- unregisterCurrentPath(); -- -- // remove alias manually to trigger signal -- for (const auto& a : aliases()) { -- removeAlias(a).okOrDie(); -- } -- -- // cleanup connection on Database -- cleanupConnections(); -- // cleanup connection on Backend itself -- m_backend->disconnect(this); -- parent()->disconnect(this); -- -- m_exposedGroup = nullptr; -- -- // reset backend and delete self -- m_backend = nullptr; -- deleteLater(); -- } -- -- void Collection::cleanupConnections() -- { -- m_backend->database()->metadata()->customData()->disconnect(this); -- if (m_exposedGroup) { -- for (const auto group : m_exposedGroup->groupsRecursive(true)) { -- group->disconnect(this); -- } -- } -- -- m_items.clear(); -- } -- -- QString Collection::backendFilePath() const -- { -- return m_backendPath; -- } -- -- Group* Collection::exposedRootGroup() const -- { -- return m_exposedGroup; -- } -- -- bool Collection::backendLocked() const -- { -- return !m_backend || !m_backend->database()->isInitialized() || m_backend->isLocked(); -- } -- -- void Collection::doDeleteEntries(QList entries) -- { -- m_backend->deleteEntries(std::move(entries)); -- } -- -- Group* Collection::findCreateGroupByPath(const QString& groupPath) -- { -- auto group = m_exposedGroup->findGroupByPath(groupPath); -- if (group) { -- return group; -- } -- -- // groupPath can't be empty here, because otherwise it will match m_exposedGroup and was returned above -- Q_ASSERT(!groupPath.isEmpty()); -- -- auto groups = groupPath.split('/', QString::SkipEmptyParts); -- auto groupName = groups.takeLast(); -- -- // create parent group -- auto parentGroup = findCreateGroupByPath(groups.join('/')); -- -- // create this group -- group = new Group(); -- group->setUuid(QUuid::createUuid()); -- group->setName(groupName); -- group->setIcon(Group::DefaultIconNumber); -- group->setParent(parentGroup); -- -- return group; -- } -- -- bool Collection::inRecycleBin(Group* group) const -- { -- Q_ASSERT(m_backend); -- -- if (!group) { -- // the root group's parent is nullptr, we treat it as not in recycle bin. -- return false; -- } -- -- if (!m_backend->database()->metadata()) { -- return false; -- } -- -- auto recycleBin = m_backend->database()->metadata()->recycleBin(); -- if (!recycleBin) { -- return false; -- } -- -- return group->uuid() == recycleBin->uuid() || group->isRecycled(); -- } -- -- bool Collection::inRecycleBin(Entry* entry) const -- { -- Q_ASSERT(entry); -- return inRecycleBin(entry->group()); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,163 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_COLLECTION_H --#define KEEPASSXC_FDOSECRETS_COLLECTION_H -- --#include "DBusObject.h" -- --#include "adaptors/CollectionAdaptor.h" --#include "core/EntrySearcher.h" -- --#include --#include -- --class Database; --class DatabaseWidget; --class Entry; --class Group; -- --namespace FdoSecrets --{ -- class Item; -- class PromptBase; -- class Service; -- class Collection : public DBusObject -- { -- Q_OBJECT -- public: -- explicit Collection(Service* parent, DatabaseWidget* backend); -- -- DBusReturn> items() const; -- -- DBusReturn label() const; -- DBusReturn setLabel(const QString& label); -- -- DBusReturn locked() const; -- -- DBusReturn created() const; -- -- DBusReturn modified() const; -- -- DBusReturn deleteCollection(); -- DBusReturn> searchItems(const StringStringMap& attributes); -- DBusReturn -- createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt); -- -- signals: -- void itemCreated(Item* item); -- void itemDeleted(Item* item); -- void itemChanged(Item* item); -- -- void collectionChanged(); -- void collectionAboutToDelete(); -- void collectionLockChanged(bool newLocked); -- -- void aliasAboutToAdd(const QString& alias); -- void aliasAdded(const QString& alias); -- void aliasRemoved(const QString& alias); -- -- void doneUnlockCollection(bool accepted); -- -- public: -- DBusReturn setProperties(const QVariantMap& properties); -- -- bool isValid() const -- { -- return backend(); -- } -- -- DBusReturn removeAlias(QString alias); -- DBusReturn addAlias(QString alias); -- const QSet aliases() const; -- -- /** -- * A human readable name of the collection, available even if the db is locked -- * @return -- */ -- QString name() const; -- -- Group* exposedRootGroup() const; -- DatabaseWidget* backend() const; -- QString backendFilePath() const; -- Service* service() const; -- bool inRecycleBin(Group* group) const; -- bool inRecycleBin(Entry* entry) const; -- -- static EntrySearcher::SearchTerm attributeToTerm(const QString& key, const QString& value); -- -- public slots: -- // expose some methods for Prmopt to use -- bool doLock(); -- void doUnlock(); -- // will remove self -- void doDelete(); -- -- // delete the Entry in backend from this collection -- void doDeleteEntries(QList entries); -- -- private slots: -- void onDatabaseLockChanged(); -- void onDatabaseExposedGroupChanged(); -- // force reload info from backend, potentially delete self -- void reloadBackend(); -- -- private: -- friend class DeleteCollectionPrompt; -- friend class CreateCollectionPrompt; -- -- void onEntryAdded(Entry* entry, bool emitSignal); -- void populateContents(); -- void connectGroupSignalRecursive(Group* group); -- void cleanupConnections(); -- -- bool backendLocked() const; -- -- /** -- * Check if the backend is a valid object, send error reply if not. -- * @return true if the backend is valid. -- */ -- DBusReturn ensureBackend() const; -- -- /** -- * Ensure the database is unlocked, send error reply if locked. -- * @return true if the database is locked -- */ -- DBusReturn ensureUnlocked() const; -- -- /** -- * Like mkdir -p, find or create the group by path, under m_exposedGroup -- * @param groupPath -- * @return created or found group -- */ -- Group* findCreateGroupByPath(const QString& groupPath); -- -- private: -- QPointer m_backend; -- QString m_backendPath; -- QPointer m_exposedGroup; -- -- QSet m_aliases; -- QList m_items; -- QMap m_entryToItem; -- -- bool m_registered; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_COLLECTION_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DBusObject.h" -- --#include --#include --#include --#include --#include --#include -- --#include -- --namespace FdoSecrets --{ -- -- DBusObject::DBusObject(DBusObject* parent) -- : QObject(parent) -- { -- } -- -- void DBusObject::registerWithPath(const QString& path, QDBusAbstractAdaptor* adaptor) -- { -- m_objectPath.setPath(path); -- m_dbusAdaptor = adaptor; -- adaptor->setParent(this); -- auto ok = QDBusConnection::sessionBus().registerObject(m_objectPath.path(), this); -- Q_UNUSED(ok); -- Q_ASSERT(ok); -- } -- -- QString DBusObject::callingPeerName() const -- { -- auto pid = callingPeerPid(); -- QFile proc(QStringLiteral("/proc/%1/comm").arg(pid)); -- if (!proc.open(QFile::ReadOnly)) { -- return callingPeer(); -- } -- QTextStream stream(&proc); -- return stream.readAll().trimmed(); -- } -- -- QString encodePath(const QString& value) -- { -- // force "-.~_" to be encoded -- return QUrl::toPercentEncoding(value, "", "-.~_").replace('%', '_'); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,178 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_DBUSOBJECT_H --#define KEEPASSXC_FDOSECRETS_DBUSOBJECT_H -- --#include "fdosecrets/objects/DBusReturn.h" --#include "fdosecrets/objects/DBusTypes.h" -- --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --class QDBusAbstractAdaptor; -- --namespace FdoSecrets --{ -- class Service; -- -- /** -- * @brief A common base class for all dbus-exposed objects -- */ -- class DBusObject : public QObject, public QDBusContext -- { -- Q_OBJECT -- public: -- explicit DBusObject(DBusObject* parent = nullptr); -- -- const QDBusObjectPath& objectPath() const -- { -- return m_objectPath; -- } -- -- QDBusAbstractAdaptor& dbusAdaptor() const -- { -- return *m_dbusAdaptor; -- } -- -- protected: -- void registerWithPath(const QString& path, QDBusAbstractAdaptor* adaptor); -- -- void unregisterCurrentPath() -- { -- QDBusConnection::sessionBus().unregisterObject(m_objectPath.path()); -- m_dbusAdaptor = nullptr; -- m_objectPath.setPath(QStringLiteral("/")); -- } -- -- QString callingPeer() const -- { -- Q_ASSERT(calledFromDBus()); -- return message().service(); -- } -- -- uint callingPeerPid() const -- { -- return connection().interface()->servicePid(callingPeer()); -- } -- -- QString callingPeerName() const; -- -- DBusObject* p() const -- { -- return qobject_cast(parent()); -- } -- -- private: -- /** -- * Derived class should not directly use sendErrorReply. -- * Instead, use raiseError -- */ -- using QDBusContext::sendErrorReply; -- -- template friend class DBusReturn; -- -- private: -- QDBusAbstractAdaptor* m_dbusAdaptor; -- QDBusObjectPath m_objectPath; -- }; -- -- /** -- * Return the object path of the pointed DBusObject, or "/" if the pointer is null -- * @tparam T -- * @param object -- * @return -- */ -- template QDBusObjectPath objectPathSafe(T* object) -- { -- if (object) { -- return object->objectPath(); -- } -- return QDBusObjectPath(QStringLiteral("/")); -- } -- -- /** -- * Convert a list of DBusObjects to object path -- * @tparam T -- * @param objects -- * @return -- */ -- template QList objectsToPath(QList objects) -- { -- QList res; -- res.reserve(objects.size()); -- for (auto object : objects) { -- res.append(objectPathSafe(object)); -- } -- return res; -- } -- -- /** -- * Convert an object path to a pointer of the object -- * @tparam T -- * @param path -- * @return the pointer of the object, or nullptr if path is "/" -- */ -- template T* pathToObject(const QDBusObjectPath& path) -- { -- if (path.path() == QStringLiteral("/")) { -- return nullptr; -- } -- return qobject_cast(QDBusConnection::sessionBus().objectRegisteredAt(path.path())); -- } -- -- /** -- * Convert a list of object paths to a list of objects. -- * "/" paths (i.e. nullptrs) will be skipped in the resulting list -- * @tparam T -- * @param paths -- * @return -- */ -- template QList pathsToObject(const QList& paths) -- { -- QList res; -- res.reserve(paths.size()); -- for (const auto& path : paths) { -- auto object = pathToObject(path); -- if (object) { -- res.append(object); -- } -- } -- return res; -- } -- -- /** -- * Encode the string value to a DBus object path safe representation, -- * using a schema similar to URI encoding, but with percentage(%) replaced with -- * underscore(_). All characters except [A-Za-z0-9] are encoded. For non-ascii -- * characters, UTF-8 encoding is first applied and each of the resulting byte -- * value is encoded. -- * @param value -- * @return encoded string -- */ -- QString encodePath(const QString& value); -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_DBUSOBJECT_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,18 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DBusReturn.h" -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,258 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_DBUSRETURN_H --#define KEEPASSXC_FDOSECRETS_DBUSRETURN_H -- --#include --#include --#include -- --#include -- --namespace FdoSecrets --{ -- -- namespace details -- { -- class DBusReturnImpl -- { -- public: -- /** -- * Check if this object contains an error -- * @return true if it contains an error, false otherwise. -- */ -- bool isError() const -- { -- return !m_errorName.isEmpty(); -- } -- -- /** -- * Get the error name -- * @return -- */ -- QString errorName() const -- { -- return m_errorName; -- } -- -- void okOrDie() const -- { -- Q_ASSERT(!isError()); -- } -- -- protected: -- struct WithErrorTag -- { -- }; -- -- /** -- * Construct from an error -- * @param errorName -- * @param value -- */ -- DBusReturnImpl(QString errorName, WithErrorTag) -- : m_errorName(std::move(errorName)) -- { -- } -- -- DBusReturnImpl() = default; -- -- protected: -- QString m_errorName; -- }; -- } // namespace details -- -- /** -- * Either a return value or a DBus error -- * @tparam T -- */ -- template class DBusReturn : public details::DBusReturnImpl -- { -- protected: -- using DBusReturnImpl::DBusReturnImpl; -- -- public: -- using value_type = T; -- -- DBusReturn() = default; -- -- /** -- * Implicitly construct from a value -- * @param value -- */ -- DBusReturn(T&& value) // NOLINT(google-explicit-constructor) -- : m_value(std::move(value)) -- { -- } -- -- DBusReturn(const T& value) // NOLINT(google-explicit-constructor) -- : m_value(std::move(value)) -- { -- } -- -- /** -- * Implicitly convert from another error of different value type. -- * -- * @tparam U must not be the same as T -- * @param other -- */ -- template ::value>::type> -- DBusReturn(const DBusReturn& other) // NOLINT(google-explicit-constructor) -- : DBusReturn(other.errorName(), DBusReturnImpl::WithErrorTag{}) -- { -- Q_ASSERT(other.isError()); -- } -- -- /** -- * Construct from error -- * @param errorType -- * @return a DBusReturn object containing the error -- */ -- static DBusReturn Error(QDBusError::ErrorType errorType) -- { -- return DBusReturn{QDBusError::errorString(errorType), DBusReturnImpl::WithErrorTag{}}; -- } -- -- /** -- * Overloaded version -- * @param errorName -- * @return a DBusReturnImpl object containing the error -- */ -- static DBusReturn Error(QString errorName) -- { -- return DBusReturn{std::move(errorName), DBusReturnImpl::WithErrorTag{}}; -- } -- -- /** -- * Get a reference to the enclosed value -- * @return -- */ -- const T& value() const& -- { -- okOrDie(); -- return m_value; -- } -- -- /** -- * Get a rvalue reference to the enclosed value if this object is rvalue -- * @return a rvalue reference to the enclosed value -- */ -- T value() && -- { -- okOrDie(); -- return std::move(m_value); -- } -- -- /** -- * Get value or handle the error by the passed in dbus object -- * @tparam P -- * @param p -- * @return -- */ -- template T valueOrHandle(P* p) const& -- { -- if (isError()) { -- if (p->calledFromDBus()) { -- p->sendErrorReply(errorName()); -- } -- return {}; -- } -- return m_value; -- } -- -- /** -- * Get value or handle the error by the passed in dbus object -- * @tparam P -- * @param p -- * @return -- */ -- template T&& valueOrHandle(P* p) && -- { -- if (isError()) { -- if (p->calledFromDBus()) { -- p->sendErrorReply(errorName()); -- } -- } -- return std::move(m_value); -- } -- -- private: -- T m_value{}; -- }; -- -- template <> class DBusReturn : public details::DBusReturnImpl -- { -- protected: -- using DBusReturnImpl::DBusReturnImpl; -- -- public: -- using value_type = void; -- -- DBusReturn() = default; -- -- /** -- * Implicitly convert from another error of different value type. -- * -- * @tparam U must not be the same as T -- * @param other -- */ -- template ::value>::type> -- DBusReturn(const DBusReturn& other) // NOLINT(google-explicit-constructor) -- : DBusReturn(other.errorName(), DBusReturnImpl::WithErrorTag{}) -- { -- Q_ASSERT(other.isError()); -- } -- -- /** -- * Construct from error -- * @param errorType -- * @return a DBusReturn object containing the error -- */ -- static DBusReturn Error(QDBusError::ErrorType errorType) -- { -- return DBusReturn{QDBusError::errorString(errorType), DBusReturnImpl::WithErrorTag{}}; -- } -- -- /** -- * Overloaded version -- * @param errorName -- * @return a DBusReturnImpl object containing the error -- */ -- static DBusReturn Error(QString errorName) -- { -- return DBusReturn{std::move(errorName), DBusReturnImpl::WithErrorTag{}}; -- } -- -- /** -- * If this is return contains an error, handle it if we were called from DBus -- * @tparam P -- * @param p -- */ -- template void handle(P* p) const -- { -- if (isError()) { -- if (p->calledFromDBus()) { -- p->sendErrorReply(errorName()); -- } -- } -- } -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_DBUSRETURN_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * Copyright 2010, Michael Leupold -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DBusTypes.h" -- --#include -- --namespace FdoSecrets --{ -- -- void registerDBusTypes() -- { -- // register meta-types needed for this adaptor -- qRegisterMetaType(); -- qDBusRegisterMetaType(); -- -- qRegisterMetaType(); -- qDBusRegisterMetaType(); -- -- qRegisterMetaType(); -- qDBusRegisterMetaType(); -- -- QMetaType::registerConverter([](const QDBusArgument& arg) { -- if (arg.currentSignature() != "a{ss}") { -- return StringStringMap{}; -- } -- // QDBusArgument is COW and qdbus_cast modifies it by detaching even it is const. -- // we don't want to modify the instance (arg) stored in the qvariant so we create a copy -- const auto copy = arg; // NOLINT(performance-unnecessary-copy-initialization) -- return qdbus_cast(copy); -- }); -- -- // NOTE: this is already registered by Qt in qtextratypes.h -- // qRegisterMetaType >(); -- // qDBusRegisterMetaType >(); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,91 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * Copyright 2010, Michael Leupold -- * Copyright 2010-2011, Valentin Rusu -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_DBUSTYPES_H --#define KEEPASSXC_FDOSECRETS_DBUSTYPES_H -- --#include --#include --#include --#include -- --#define DBUS_SERVICE_SECRET "org.freedesktop.secrets" -- --#define DBUS_INTERFACE_SECRET_SERVICE "org.freedesktop.Secret.Service" --#define DBUS_INTERFACE_SECRET_SESSION "org.freedesktop.Secret.Session" --#define DBUS_INTERFACE_SECRET_COLLECTION "org.freedesktop.Secret.Collection" --#define DBUS_INTERFACE_SECRET_ITEM "org.freedesktop.Secret.Item" --#define DBUS_INTERFACE_SECRET_PROMPT "org.freedesktop.Secret.Prompt" -- --#define DBUS_ERROR_SECRET_NO_SESSION "org.freedesktop.Secret.Error.NoSession" --#define DBUS_ERROR_SECRET_NO_SUCH_OBJECT "org.freedesktop.Secret.Error.NoSuchObject" --#define DBUS_ERROR_SECRET_IS_LOCKED "org.freedesktop.Secret.Error.IsLocked" -- --#define DBUS_PATH_SECRETS "/org/freedesktop/secrets" -- --#define DBUS_PATH_TEMPLATE_ALIAS "%1/aliases/%2" --#define DBUS_PATH_TEMPLATE_SESSION "%1/session/%2" --#define DBUS_PATH_TEMPLATE_COLLECTION "%1/collection/%2" --#define DBUS_PATH_TEMPLATE_ITEM "%1/%2" -- --namespace FdoSecrets --{ -- /** -- * This is the basic Secret structure exchanged via the dbus API -- * See the spec for more details -- */ -- struct SecretStruct -- { -- QDBusObjectPath session{}; -- QByteArray parameters{}; -- QByteArray value{}; -- QString contentType{}; -- }; -- -- inline QDBusArgument& operator<<(QDBusArgument& argument, const SecretStruct& secret) -- { -- argument.beginStructure(); -- argument << secret.session << secret.parameters << secret.value << secret.contentType; -- argument.endStructure(); -- return argument; -- } -- -- inline const QDBusArgument& operator>>(const QDBusArgument& argument, SecretStruct& secret) -- { -- argument.beginStructure(); -- argument >> secret.session >> secret.parameters >> secret.value >> secret.contentType; -- argument.endStructure(); -- return argument; -- } -- -- /** -- * Register the types needed for the fd.o Secrets D-Bus interface. -- */ -- void registerDBusTypes(); -- --} // namespace FdoSecrets -- --typedef QMap StringStringMap; --typedef QMap ObjectPathSecretMap; -- --Q_DECLARE_METATYPE(FdoSecrets::SecretStruct) --Q_DECLARE_METATYPE(StringStringMap); --Q_DECLARE_METATYPE(ObjectPathSecretMap); -- --#endif // KEEPASSXC_FDOSECRETS_DBUSTYPES_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,420 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Item.h" -- --#include "fdosecrets/FdoSecretsPlugin.h" --#include "fdosecrets/objects/Collection.h" --#include "fdosecrets/objects/Prompt.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/objects/Session.h" -- --#include "core/Entry.h" --#include "core/EntryAttributes.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" -- --#include --#include --#include --#include -- --namespace FdoSecrets --{ -- -- const QSet Item::ReadOnlyAttributes(QSet() << ItemAttributes::UuidKey << ItemAttributes::PathKey); -- -- static void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType); -- static SecretStruct getEntrySecret(Entry* entry); -- -- namespace -- { -- constexpr auto FDO_SECRETS_DATA = "FDO_SECRETS_DATA"; -- constexpr auto FDO_SECRETS_CONTENT_TYPE = "FDO_SECRETS_CONTENT_TYPE"; -- } // namespace -- -- Item::Item(Collection* parent, Entry* backend) -- : DBusObject(parent) -- , m_backend(backend) -- { -- Q_ASSERT(!p()->objectPath().path().isEmpty()); -- -- registerWithPath(QStringLiteral(DBUS_PATH_TEMPLATE_ITEM).arg(p()->objectPath().path(), m_backend->uuidToHex()), -- new ItemAdaptor(this)); -- -- connect(m_backend.data(), &Entry::entryModified, this, &Item::itemChanged); -- } -- -- DBusReturn Item::locked() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- return collection()->locked(); -- } -- -- DBusReturn Item::attributes() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- StringStringMap attrs; -- -- // add default attributes except password -- auto entryAttrs = m_backend->attributes(); -- for (const auto& attr : EntryAttributes::DefaultAttributes) { -- if (entryAttrs->isProtected(attr) || attr == EntryAttributes::PasswordKey) { -- continue; -- } -- -- auto value = entryAttrs->value(attr); -- if (entryAttrs->isReference(attr)) { -- value = m_backend->maskPasswordPlaceholders(value); -- value = m_backend->resolveMultiplePlaceholders(value); -- } -- attrs[attr] = value; -- } -- -- // add custom attributes -- const auto customKeys = entryAttrs->customKeys(); -- for (const auto& attr : customKeys) { -- attrs[attr] = entryAttrs->value(attr); -- } -- -- // add some informative and readonly attributes -- attrs[ItemAttributes::UuidKey] = m_backend->uuidToHex(); -- attrs[ItemAttributes::PathKey] = path(); -- return attrs; -- } -- -- DBusReturn Item::setAttributes(const StringStringMap& attrs) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- m_backend->beginUpdate(); -- -- auto entryAttrs = m_backend->attributes(); -- for (auto it = attrs.constBegin(); it != attrs.constEnd(); ++it) { -- if (entryAttrs->isProtected(it.key()) || it.key() == EntryAttributes::PasswordKey) { -- continue; -- } -- -- if (ReadOnlyAttributes.contains(it.key())) { -- continue; -- } -- -- entryAttrs->set(it.key(), it.value()); -- } -- -- m_backend->endUpdate(); -- -- return {}; -- } -- -- DBusReturn Item::label() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- return m_backend->title(); -- } -- -- DBusReturn Item::setLabel(const QString& label) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- m_backend->beginUpdate(); -- m_backend->setTitle(label); -- m_backend->endUpdate(); -- -- return {}; -- } -- -- DBusReturn Item::created() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- return static_cast(m_backend->timeInfo().creationTime().toMSecsSinceEpoch() / 1000); -- } -- -- DBusReturn Item::modified() const -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- return static_cast(m_backend->timeInfo().lastModificationTime().toMSecsSinceEpoch() / 1000); -- } -- -- DBusReturn Item::deleteItem() -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- auto prompt = new DeleteItemPrompt(service(), this); -- return prompt; -- } -- -- DBusReturn Item::getSecret(Session* session) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- if (!session) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); -- } -- -- auto secret = getEntrySecret(m_backend); -- -- // encode using session -- secret = session->encode(secret); -- -- // show notification is this was directly called from DBus -- if (calledFromDBus()) { -- service()->plugin()->emitRequestShowNotification( -- tr(R"(Entry "%1" from database "%2" was used by %3)") -- .arg(m_backend->title(), collection()->name(), callingPeerName())); -- } -- return secret; -- } -- -- DBusReturn Item::setSecret(const SecretStruct& secret) -- { -- auto ret = ensureBackend(); -- if (ret.isError()) { -- return ret; -- } -- ret = ensureUnlocked(); -- if (ret.isError()) { -- return ret; -- } -- -- auto session = pathToObject(secret.session); -- if (!session) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); -- } -- -- // decode using session -- auto decoded = session->decode(secret); -- -- // set in backend -- m_backend->beginUpdate(); -- setEntrySecret(m_backend, decoded.value, decoded.contentType); -- m_backend->endUpdate(); -- -- return {}; -- } -- -- DBusReturn Item::setProperties(const QVariantMap& properties) -- { -- auto label = properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Label")).toString(); -- -- auto ret = setLabel(label); -- if (ret.isError()) { -- return ret; -- } -- -- auto attributes = -- properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")).value(); -- ret = setAttributes(attributes); -- if (ret.isError()) { -- return ret; -- } -- -- return {}; -- } -- -- Collection* Item::collection() const -- { -- return qobject_cast(p()); -- } -- -- DBusReturn Item::ensureBackend() const -- { -- if (!m_backend) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); -- } -- return {}; -- } -- -- DBusReturn Item::ensureUnlocked() const -- { -- auto locked = collection()->locked(); -- if (locked.isError()) { -- return locked; -- } -- if (locked.value()) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_IS_LOCKED)); -- } -- return {}; -- } -- -- Entry* Item::backend() const -- { -- return m_backend; -- } -- -- void Item::doDelete() -- { -- emit itemAboutToDelete(); -- -- // Unregister current path early, do not rely on deleteLater's call to destructor -- // as in case of Entry moving between groups, new Item will be created at the same DBus path -- // before the current Item is deleted in the event loop. -- unregisterCurrentPath(); -- -- m_backend = nullptr; -- deleteLater(); -- } -- -- Service* Item::service() const -- { -- return collection()->service(); -- } -- -- QString Item::path() const -- { -- QStringList pathComponents{m_backend->title()}; -- -- Group* group = m_backend->group(); -- while (group && group != collection()->exposedRootGroup()) { -- pathComponents.prepend(group->name()); -- group = group->parentGroup(); -- } -- // we should always reach the exposed root group -- Q_ASSERT(group); -- -- // root group is represented by a single slash, thus adding an empty component. -- pathComponents.prepend(QLatin1Literal("")); -- -- return pathComponents.join('/'); -- } -- -- bool Item::isDeletePermanent() const -- { -- auto recycleBin = backend()->database()->metadata()->recycleBin(); -- return (recycleBin && recycleBin->findEntryByUuid(backend()->uuid())) -- || !backend()->database()->metadata()->recycleBinEnabled(); -- } -- -- void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType) -- { -- auto mimeName = contentType.split(';').takeFirst().trimmed(); -- -- // find the mime type -- QMimeDatabase db; -- auto mimeType = db.mimeTypeForName(mimeName); -- -- // find a suitable codec -- QTextCodec* codec = nullptr; -- static const QRegularExpression charsetPattern(QStringLiteral(R"re(charset=(?.+)$)re")); -- auto match = charsetPattern.match(contentType); -- if (match.hasMatch()) { -- codec = QTextCodec::codecForName(match.captured(QStringLiteral("encode")).toLatin1()); -- } else { -- codec = QTextCodec::codecForName(QByteArrayLiteral("utf-8")); -- } -- -- if (!mimeType.isValid() || !mimeType.inherits(QStringLiteral("text/plain")) || !codec) { -- // we can't handle this content type, save the data as attachment, and clear the password field -- entry->setPassword(""); -- entry->attachments()->set(FDO_SECRETS_DATA, data); -- entry->attributes()->set(FDO_SECRETS_CONTENT_TYPE, contentType); -- return; -- } -- -- // save the data to password field -- if (entry->attachments()->hasKey(FDO_SECRETS_DATA)) { -- entry->attachments()->remove(FDO_SECRETS_DATA); -- } -- if (entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE)) { -- entry->attributes()->remove(FDO_SECRETS_CONTENT_TYPE); -- } -- -- Q_ASSERT(codec); -- entry->setPassword(codec->toUnicode(data)); -- } -- -- SecretStruct getEntrySecret(Entry* entry) -- { -- SecretStruct ss; -- -- if (entry->attachments()->hasKey(FDO_SECRETS_DATA)) { -- ss.value = entry->attachments()->value(FDO_SECRETS_DATA); -- if (entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE)) { -- ss.contentType = entry->attributes()->value(FDO_SECRETS_CONTENT_TYPE); -- } else { -- // the entry is somehow corrupted, maybe the user deleted it. -- // set to binary and hope for the best... -- ss.contentType = QStringLiteral("application/octet-stream"); -- } -- return ss; -- } -- -- ss.value = entry->resolveMultiplePlaceholders(entry->password()).toUtf8(); -- ss.contentType = QStringLiteral("text/plain"); -- return ss; -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,112 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_ITEM_H --#define KEEPASSXC_FDOSECRETS_ITEM_H -- --#include "fdosecrets/objects/DBusObject.h" --#include "fdosecrets/objects/adaptors/ItemAdaptor.h" -- --#include -- --class Entry; -- --namespace FdoSecrets --{ -- -- namespace ItemAttributes -- { -- constexpr const auto UuidKey = "Uuid"; -- constexpr const auto PathKey = "Path"; -- } // namespace ItemAttributes -- -- class Session; -- class Collection; -- class PromptBase; -- -- class Item : public DBusObject -- { -- Q_OBJECT -- public: -- explicit Item(Collection* parent, Entry* backend); -- -- DBusReturn locked() const; -- -- DBusReturn attributes() const; -- DBusReturn setAttributes(const StringStringMap& attrs); -- -- DBusReturn label() const; -- DBusReturn setLabel(const QString& label); -- -- DBusReturn created() const; -- -- DBusReturn modified() const; -- -- DBusReturn deleteItem(); -- DBusReturn getSecret(Session* session); -- DBusReturn setSecret(const SecretStruct& secret); -- -- signals: -- void itemChanged(); -- void itemAboutToDelete(); -- -- public: -- static const QSet ReadOnlyAttributes; -- -- DBusReturn setProperties(const QVariantMap& properties); -- -- Entry* backend() const; -- Collection* collection() const; -- Service* service() const; -- -- /** -- * Compute the entry path relative to the exposed group -- * @return the entry path -- */ -- QString path() const; -- -- /** -- * If the containing db does not have recycle bin enabled, -- * or the entry is already in the recycle bin (not possible for item, though), -- * the delete is permanent -- * @return true if delete is permanent -- */ -- bool isDeletePermanent() const; -- -- public slots: -- void doDelete(); -- -- private: -- /** -- * Check if the backend is a valid object, send error reply if not. -- * @return No error if the backend is valid. -- */ -- DBusReturn ensureBackend() const; -- -- /** -- * Ensure the database is unlocked, send error reply if locked. -- * @return true if the database is locked -- */ -- DBusReturn ensureUnlocked() const; -- -- private: -- QPointer m_backend; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_ITEM_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,286 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Prompt.h" -- --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/Collection.h" --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Service.h" -- --#include "core/Tools.h" --#include "gui/DatabaseWidget.h" --#include "gui/MessageBox.h" -- --#include --#include -- --namespace FdoSecrets --{ -- -- PromptBase::PromptBase(Service* parent) -- : DBusObject(parent) -- { -- registerWithPath( -- QStringLiteral("%1/prompt/%2").arg(p()->objectPath().path(), Tools::uuidToHex(QUuid::createUuid())), -- new PromptAdaptor(this)); -- -- connect(this, &PromptBase::completed, this, &PromptBase::deleteLater); -- } -- -- QWindow* PromptBase::findWindow(const QString& windowId) -- { -- // find parent window, or nullptr if not found -- bool ok = false; -- WId wid = windowId.toULongLong(&ok, 0); -- QWindow* parent = nullptr; -- if (ok) { -- parent = QWindow::fromWinId(wid); -- } -- if (parent) { -- // parent is not the child of any object, so make sure it gets deleted at some point -- QObject::connect(this, &QObject::destroyed, parent, &QObject::deleteLater); -- } -- return parent; -- } -- -- Service* PromptBase::service() const -- { -- return qobject_cast(parent()); -- } -- -- DBusReturn PromptBase::dismiss() -- { -- emit completed(true, ""); -- return {}; -- } -- -- DeleteCollectionPrompt::DeleteCollectionPrompt(Service* parent, Collection* coll) -- : PromptBase(parent) -- , m_collection(coll) -- { -- } -- -- DBusReturn DeleteCollectionPrompt::prompt(const QString& windowId) -- { -- if (thread() != QThread::currentThread()) { -- DBusReturn ret; -- QMetaObject::invokeMethod(this, -- "prompt", -- Qt::BlockingQueuedConnection, -- Q_ARG(QString, windowId), -- Q_RETURN_ARG(DBusReturn, ret)); -- return ret; -- } -- -- if (!m_collection) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); -- } -- -- MessageBox::OverrideParent override(findWindow(windowId)); -- // only need to delete in backend, collection will react itself. -- auto accepted = service()->doCloseDatabase(m_collection->backend()); -- -- emit completed(!accepted, ""); -- -- return {}; -- } -- -- CreateCollectionPrompt::CreateCollectionPrompt(Service* parent) -- : PromptBase(parent) -- { -- } -- -- DBusReturn CreateCollectionPrompt::prompt(const QString& windowId) -- { -- if (thread() != QThread::currentThread()) { -- DBusReturn ret; -- QMetaObject::invokeMethod(this, -- "prompt", -- Qt::BlockingQueuedConnection, -- Q_ARG(QString, windowId), -- Q_RETURN_ARG(DBusReturn, ret)); -- return ret; -- } -- -- MessageBox::OverrideParent override(findWindow(windowId)); -- -- auto coll = service()->doNewDatabase(); -- if (!coll) { -- return dismiss(); -- } -- -- emit collectionCreated(coll); -- emit completed(false, QVariant::fromValue(coll->objectPath())); -- -- return {}; -- } -- -- DBusReturn CreateCollectionPrompt::dismiss() -- { -- emit completed(true, QVariant::fromValue(QDBusObjectPath{"/"})); -- return {}; -- } -- -- LockCollectionsPrompt::LockCollectionsPrompt(Service* parent, const QList& colls) -- : PromptBase(parent) -- { -- m_collections.reserve(colls.size()); -- for (const auto& c : asConst(colls)) { -- m_collections << c; -- } -- } -- -- DBusReturn LockCollectionsPrompt::prompt(const QString& windowId) -- { -- if (thread() != QThread::currentThread()) { -- DBusReturn ret; -- QMetaObject::invokeMethod(this, -- "prompt", -- Qt::BlockingQueuedConnection, -- Q_ARG(QString, windowId), -- Q_RETURN_ARG(DBusReturn, ret)); -- return ret; -- } -- -- MessageBox::OverrideParent override(findWindow(windowId)); -- -- for (const auto& c : asConst(m_collections)) { -- if (c) { -- if (!c->doLock()) { -- return dismiss(); -- } -- m_locked << c->objectPath(); -- } -- } -- -- emit completed(false, QVariant::fromValue(m_locked)); -- -- return {}; -- } -- -- DBusReturn LockCollectionsPrompt::dismiss() -- { -- emit completed(true, QVariant::fromValue(m_locked)); -- return {}; -- } -- -- UnlockCollectionsPrompt::UnlockCollectionsPrompt(Service* parent, const QList& colls) -- : PromptBase(parent) -- { -- m_collections.reserve(colls.size()); -- for (const auto& c : asConst(colls)) { -- m_collections << c; -- } -- } -- -- DBusReturn UnlockCollectionsPrompt::prompt(const QString& windowId) -- { -- if (thread() != QThread::currentThread()) { -- DBusReturn ret; -- QMetaObject::invokeMethod(this, -- "prompt", -- Qt::BlockingQueuedConnection, -- Q_ARG(QString, windowId), -- Q_RETURN_ARG(DBusReturn, ret)); -- return ret; -- } -- -- MessageBox::OverrideParent override(findWindow(windowId)); -- -- for (const auto& c : asConst(m_collections)) { -- if (c) { -- // doUnlock is nonblocking -- connect(c, &Collection::doneUnlockCollection, this, &UnlockCollectionsPrompt::collectionUnlockFinished); -- c->doUnlock(); -- } -- } -- -- return {}; -- } -- -- void UnlockCollectionsPrompt::collectionUnlockFinished(bool accepted) -- { -- auto coll = qobject_cast(sender()); -- if (!coll) { -- return; -- } -- -- if (!m_collections.contains(coll)) { -- // should not happen -- coll->disconnect(this); -- return; -- } -- -- // one shot -- coll->disconnect(this); -- -- if (accepted) { -- m_unlocked << coll->objectPath(); -- } else { -- m_numRejected += 1; -- } -- -- // if we've get all -- if (m_numRejected + m_unlocked.size() == m_collections.size()) { -- emit completed(m_unlocked.isEmpty(), QVariant::fromValue(m_unlocked)); -- } -- } -- DBusReturn UnlockCollectionsPrompt::dismiss() -- { -- emit completed(true, QVariant::fromValue(m_unlocked)); -- return {}; -- } -- -- DeleteItemPrompt::DeleteItemPrompt(Service* parent, Item* item) -- : PromptBase(parent) -- , m_item(item) -- { -- } -- -- DBusReturn DeleteItemPrompt::prompt(const QString& windowId) -- { -- if (thread() != QThread::currentThread()) { -- DBusReturn ret; -- QMetaObject::invokeMethod(this, -- "prompt", -- Qt::BlockingQueuedConnection, -- Q_ARG(QString, windowId), -- Q_RETURN_ARG(DBusReturn, ret)); -- return ret; -- } -- -- MessageBox::OverrideParent override(findWindow(windowId)); -- -- // delete item's backend. Item will be notified after the backend is deleted. -- if (m_item) { -- if (FdoSecrets::settings()->noConfirmDeleteItem()) { -- // based on permanent or not, different button is used -- if (m_item->isDeletePermanent()) { -- MessageBox::setNextAnswer(MessageBox::Delete); -- } else { -- MessageBox::setNextAnswer(MessageBox::Move); -- } -- } -- m_item->collection()->doDeleteEntries({m_item->backend()}); -- } -- -- emit completed(false, ""); -- -- return {}; -- } --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,130 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_PROMPT_H --#define KEEPASSXC_FDOSECRETS_PROMPT_H -- --#include "fdosecrets/objects/DBusObject.h" --#include "fdosecrets/objects/adaptors/PromptAdaptor.h" -- --#include -- --class QWindow; -- --class DatabaseWidget; -- --namespace FdoSecrets --{ -- -- class Service; -- -- class PromptBase : public DBusObject -- { -- Q_OBJECT -- public: -- explicit PromptBase(Service* parent); -- -- virtual DBusReturn prompt(const QString& windowId) = 0; -- -- virtual DBusReturn dismiss(); -- -- signals: -- void completed(bool dismissed, const QVariant& result); -- -- protected: -- QWindow* findWindow(const QString& windowId); -- Service* service() const; -- }; -- -- class Collection; -- -- class DeleteCollectionPrompt : public PromptBase -- { -- Q_OBJECT -- -- public: -- explicit DeleteCollectionPrompt(Service* parent, Collection* coll); -- -- DBusReturn prompt(const QString& windowId) override; -- -- private: -- QPointer m_collection; -- }; -- -- class CreateCollectionPrompt : public PromptBase -- { -- Q_OBJECT -- -- public: -- explicit CreateCollectionPrompt(Service* parent); -- -- DBusReturn prompt(const QString& windowId) override; -- DBusReturn dismiss() override; -- -- signals: -- void collectionCreated(Collection* coll); -- }; -- -- class LockCollectionsPrompt : public PromptBase -- { -- Q_OBJECT -- public: -- explicit LockCollectionsPrompt(Service* parent, const QList& colls); -- -- DBusReturn prompt(const QString& windowId) override; -- DBusReturn dismiss() override; -- -- private: -- QList> m_collections; -- QList m_locked; -- }; -- -- class UnlockCollectionsPrompt : public PromptBase -- { -- Q_OBJECT -- public: -- explicit UnlockCollectionsPrompt(Service* parent, const QList& coll); -- -- DBusReturn prompt(const QString& windowId) override; -- DBusReturn dismiss() override; -- -- private slots: -- void collectionUnlockFinished(bool accepted); -- -- private: -- QList> m_collections; -- QList m_unlocked; -- int m_numRejected = 0; -- }; -- -- class Item; -- class DeleteItemPrompt : public PromptBase -- { -- Q_OBJECT -- -- public: -- explicit DeleteItemPrompt(Service* parent, Item* item); -- -- DBusReturn prompt(const QString& windowId) override; -- -- private: -- QPointer m_item; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_PROMPT_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,492 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Service.h" -- --#include "fdosecrets/FdoSecretsPlugin.h" --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/Collection.h" --#include "fdosecrets/objects/Item.h" --#include "fdosecrets/objects/Prompt.h" --#include "fdosecrets/objects/Session.h" -- --#include "gui/DatabaseTabWidget.h" --#include "gui/DatabaseWidget.h" -- --#include --#include --#include -- --namespace --{ -- constexpr auto DEFAULT_ALIAS = "default"; --} -- --namespace FdoSecrets --{ -- -- Service::Service(FdoSecretsPlugin* plugin, -- QPointer dbTabs) // clazy: exclude=ctor-missing-parent-argument -- : DBusObject(nullptr) -- , m_plugin(plugin) -- , m_databases(std::move(dbTabs)) -- , m_insdieEnsureDefaultAlias(false) -- , m_serviceWatcher(nullptr) -- { -- connect( -- m_databases, &DatabaseTabWidget::databaseUnlockDialogFinished, this, &Service::doneUnlockDatabaseInDialog); -- } -- -- Service::~Service() -- { -- QDBusConnection::sessionBus().unregisterService(QStringLiteral(DBUS_SERVICE_SECRET)); -- } -- -- bool Service::initialize() -- { -- if (!QDBusConnection::sessionBus().registerService(QStringLiteral(DBUS_SERVICE_SECRET))) { -- emit error(tr("Failed to register DBus service at %1.
").arg(QLatin1String(DBUS_SERVICE_SECRET)) -- + m_plugin->reportExistingService()); -- return false; -- } -- -- registerWithPath(QStringLiteral(DBUS_PATH_SECRETS), new ServiceAdaptor(this)); -- -- // Connect to service unregistered signal -- m_serviceWatcher.reset(new QDBusServiceWatcher()); -- connect(m_serviceWatcher.data(), -- &QDBusServiceWatcher::serviceUnregistered, -- this, -- &Service::dbusServiceUnregistered); -- -- m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); -- -- // Add existing database tabs -- for (int idx = 0; idx != m_databases->count(); ++idx) { -- auto dbWidget = m_databases->databaseWidgetFromIndex(idx); -- onDatabaseTabOpened(dbWidget, false); -- } -- -- // Connect to new database signal -- // No need to connect to close signal, as collection will remove itself when backend delete/close database tab. -- connect(m_databases.data(), &DatabaseTabWidget::databaseOpened, this, [this](DatabaseWidget* dbWidget) { -- onDatabaseTabOpened(dbWidget, true); -- }); -- -- // make default alias track current activated database -- connect(m_databases.data(), &DatabaseTabWidget::activateDatabaseChanged, this, &Service::ensureDefaultAlias); -- -- return true; -- } -- -- void Service::onDatabaseTabOpened(DatabaseWidget* dbWidget, bool emitSignal) -- { -- // The Collection will monitor the database's exposed group. -- // When the Collection finds that no exposed group, it will delete itself. -- // Thus the service also needs to monitor it and recreate the collection if the user changes -- // from no exposed to exposed something. -- if (!dbWidget->isLocked()) { -- monitorDatabaseExposedGroup(dbWidget); -- } -- connect(dbWidget, &DatabaseWidget::databaseUnlocked, this, [this, dbWidget]() { -- monitorDatabaseExposedGroup(dbWidget); -- }); -- -- auto coll = new Collection(this, dbWidget); -- // Creation may fail if the database is not exposed. -- // This is okay, because we monitor the expose settings above -- if (!coll->isValid()) { -- coll->deleteLater(); -- return; -- } -- -- m_collections << coll; -- m_dbToCollection[dbWidget] = coll; -- -- // handle alias -- connect(coll, &Collection::aliasAboutToAdd, this, &Service::onCollectionAliasAboutToAdd); -- connect(coll, &Collection::aliasAdded, this, &Service::onCollectionAliasAdded); -- connect(coll, &Collection::aliasRemoved, this, &Service::onCollectionAliasRemoved); -- -- ensureDefaultAlias(); -- -- // Forward delete signal, we have to rely on filepath to identify the database being closed, -- // but we can not access m_backend safely because during the databaseClosed signal, -- // m_backend may already be reset to nullptr -- // We want to remove the collection object from dbus as early as possible, to avoid -- // race conditions when deleteLater was called on the m_backend, but not delivered yet, -- // and new method calls from dbus occurred. Therefore we can't rely on the destroyed -- // signal on m_backend. -- // bind to coll lifespan -- connect(m_databases.data(), &DatabaseTabWidget::databaseClosed, coll, [coll](const QString& filePath) { -- if (filePath == coll->backendFilePath()) { -- coll->doDelete(); -- } -- }); -- -- // relay signals -- connect(coll, &Collection::collectionChanged, this, [this, coll]() { emit collectionChanged(coll); }); -- connect(coll, &Collection::collectionAboutToDelete, this, [this, coll]() { -- m_collections.removeAll(coll); -- m_dbToCollection.remove(coll->backend()); -- emit collectionDeleted(coll); -- }); -- -- if (emitSignal) { -- emit collectionCreated(coll); -- } -- } -- -- void Service::monitorDatabaseExposedGroup(DatabaseWidget* dbWidget) -- { -- Q_ASSERT(dbWidget); -- connect( -- dbWidget->database()->metadata()->customData(), &CustomData::customDataModified, this, [this, dbWidget]() { -- if (!FdoSecrets::settings()->exposedGroup(dbWidget->database()).isNull() && !findCollection(dbWidget)) { -- onDatabaseTabOpened(dbWidget, true); -- } -- }); -- } -- -- void Service::ensureDefaultAlias() -- { -- if (m_insdieEnsureDefaultAlias) { -- return; -- } -- -- m_insdieEnsureDefaultAlias = true; -- -- auto coll = findCollection(m_databases->currentDatabaseWidget()); -- if (coll) { -- // adding alias will automatically remove the association with previous collection. -- coll->addAlias(DEFAULT_ALIAS).okOrDie(); -- } -- -- m_insdieEnsureDefaultAlias = false; -- } -- -- void Service::dbusServiceUnregistered(const QString& service) -- { -- Q_ASSERT(m_serviceWatcher); -- -- auto removed = m_serviceWatcher->removeWatchedService(service); -- Q_UNUSED(removed); -- Q_ASSERT(removed); -- -- Session::CleanupNegotiation(service); -- auto sess = m_peerToSession.value(service, nullptr); -- if (sess) { -- sess->close().okOrDie(); -- } -- } -- -- DBusReturn> Service::collections() const -- { -- return m_collections; -- } -- -- DBusReturn Service::openSession(const QString& algorithm, const QVariant& input, Session*& result) -- { -- QVariant output; -- bool incomplete = false; -- auto peer = callingPeer(); -- -- // watch for service unregister to cleanup -- Q_ASSERT(m_serviceWatcher); -- m_serviceWatcher->addWatchedService(peer); -- -- // negotiate cipher -- auto ciphers = Session::CreateCiphers(peer, algorithm, input, output, incomplete); -- if (incomplete) { -- result = nullptr; -- return output; -- } -- if (!ciphers) { -- return DBusReturn<>::Error(QDBusError::NotSupported); -- } -- result = new Session(std::move(ciphers), callingPeerName(), this); -- -- m_sessions.append(result); -- m_peerToSession[peer] = result; -- connect(result, &Session::aboutToClose, this, [this, peer, result]() { -- emit sessionClosed(result); -- m_sessions.removeAll(result); -- m_peerToSession.remove(peer); -- }); -- emit sessionOpened(result); -- -- return output; -- } -- -- DBusReturn -- Service::createCollection(const QVariantMap& properties, const QString& alias, PromptBase*& prompt) -- { -- prompt = nullptr; -- -- // return existing collection if alias is non-empty and exists. -- auto collection = findCollection(alias); -- if (!collection) { -- auto cp = new CreateCollectionPrompt(this); -- prompt = cp; -- -- // collection will be created when the prompt complets. -- // once it's done, we set additional properties on the collection -- connect(cp, &CreateCollectionPrompt::collectionCreated, cp, [alias, properties](Collection* coll) { -- coll->setProperties(properties).okOrDie(); -- if (!alias.isEmpty()) { -- coll->addAlias(alias).okOrDie(); -- } -- }); -- } -- return collection; -- } -- -- DBusReturn> Service::searchItems(const StringStringMap& attributes, QList& locked) -- { -- auto ret = collections(); -- if (ret.isError()) { -- return ret; -- } -- -- QList unlocked; -- for (const auto& coll : ret.value()) { -- auto items = coll->searchItems(attributes); -- if (items.isError()) { -- return items; -- } -- auto l = coll->locked(); -- if (l.isError()) { -- return l; -- } -- if (l.value()) { -- locked.append(items.value()); -- } else { -- unlocked.append(items.value()); -- } -- } -- return unlocked; -- } -- -- DBusReturn> Service::unlock(const QList& objects, PromptBase*& prompt) -- { -- QSet needUnlock; -- needUnlock.reserve(objects.size()); -- for (const auto& obj : asConst(objects)) { -- auto coll = qobject_cast(obj); -- if (coll) { -- needUnlock << coll; -- } else { -- auto item = qobject_cast(obj); -- if (!item) { -- continue; -- } -- // we lock the whole collection for item -- needUnlock << item->collection(); -- } -- } -- -- // return anything already unlocked -- QList unlocked; -- QList toUnlock; -- for (const auto& coll : asConst(needUnlock)) { -- auto l = coll->locked(); -- if (l.isError()) { -- return l; -- } -- if (!l.value()) { -- unlocked << coll; -- } else { -- toUnlock << coll; -- } -- } -- if (!toUnlock.isEmpty()) { -- prompt = new UnlockCollectionsPrompt(this, toUnlock); -- } -- return unlocked; -- } -- -- DBusReturn> Service::lock(const QList& objects, PromptBase*& prompt) -- { -- QSet needLock; -- needLock.reserve(objects.size()); -- for (const auto& obj : asConst(objects)) { -- auto coll = qobject_cast(obj); -- if (coll) { -- needLock << coll; -- } else { -- auto item = qobject_cast(obj); -- if (!item) { -- continue; -- } -- // we lock the whole collection for item -- needLock << item->collection(); -- } -- } -- -- // return anything already locked -- QList locked; -- QList toLock; -- for (const auto& coll : asConst(needLock)) { -- auto l = coll->locked(); -- if (l.isError()) { -- return l; -- } -- if (l.value()) { -- locked << coll; -- } else { -- toLock << coll; -- } -- } -- if (!toLock.isEmpty()) { -- prompt = new LockCollectionsPrompt(this, toLock); -- } -- return locked; -- } -- -- DBusReturn> Service::getSecrets(const QList& items, Session* session) -- { -- if (!session) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); -- } -- -- QHash res; -- -- for (const auto& item : asConst(items)) { -- auto ret = item->getSecret(session); -- if (ret.isError()) { -- return ret; -- } -- res[item] = std::move(ret).value(); -- } -- if (calledFromDBus()) { -- plugin()->emitRequestShowNotification( -- tr(R"(%n Entry(s) was used by %1)", "%1 is the name of an application", res.size()) -- .arg(callingPeerName())); -- } -- return res; -- } -- -- DBusReturn Service::readAlias(const QString& name) -- { -- return findCollection(name); -- } -- -- DBusReturn Service::setAlias(const QString& name, Collection* collection) -- { -- if (!collection) { -- // remove alias name from its collection -- collection = findCollection(name); -- if (!collection) { -- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); -- } -- return collection->removeAlias(name); -- } -- return collection->addAlias(name); -- } -- -- Collection* Service::findCollection(const QString& alias) const -- { -- if (alias.isEmpty()) { -- return nullptr; -- } -- -- auto it = m_aliases.find(alias); -- if (it != m_aliases.end()) { -- return it.value(); -- } -- return nullptr; -- } -- -- void Service::onCollectionAliasAboutToAdd(const QString& alias) -- { -- auto coll = qobject_cast(sender()); -- -- auto it = m_aliases.constFind(alias); -- if (it != m_aliases.constEnd() && it.value() != coll) { -- // another collection holds the alias -- // remove it first -- it.value()->removeAlias(alias).okOrDie(); -- -- // onCollectionAliasRemoved called through signal -- // `it` becomes invalidated now -- } -- } -- -- void Service::onCollectionAliasAdded(const QString& alias) -- { -- auto coll = qobject_cast(sender()); -- m_aliases[alias] = coll; -- } -- -- void Service::onCollectionAliasRemoved(const QString& alias) -- { -- m_aliases.remove(alias); -- ensureDefaultAlias(); -- } -- -- Collection* Service::findCollection(const DatabaseWidget* db) const -- { -- return m_dbToCollection.value(db, nullptr); -- } -- -- const QList Service::sessions() const -- { -- return m_sessions; -- } -- -- bool Service::doCloseDatabase(DatabaseWidget* dbWidget) -- { -- return m_databases->closeDatabaseTab(dbWidget); -- } -- -- Collection* Service::doNewDatabase() -- { -- auto dbWidget = m_databases->newDatabase(); -- if (!dbWidget) { -- return nullptr; -- } -- -- // database created through dbus will be exposed to dbus by default -- auto db = dbWidget->database(); -- FdoSecrets::settings()->setExposedGroup(db, db->rootGroup()->uuid()); -- -- auto collection = findCollection(dbWidget); -- -- Q_ASSERT(collection); -- -- return collection; -- } -- -- void Service::doSwitchToDatabaseSettings(DatabaseWidget* dbWidget) -- { -- if (dbWidget->isLocked()) { -- return; -- } -- // switch selected to current -- m_databases->setCurrentWidget(dbWidget); -- m_databases->showDatabaseSettings(); -- -- // open settings (switch from app settings to m_dbTabs) -- m_plugin->emitRequestSwitchToDatabases(); -- } -- -- void Service::doUnlockDatabaseInDialog(DatabaseWidget* dbWidget) -- { -- m_databases->unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::None); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,166 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SERVICE_H --#define KEEPASSXC_FDOSECRETS_SERVICE_H -- --#include "fdosecrets/objects/DBusObject.h" --#include "fdosecrets/objects/adaptors/ServiceAdaptor.h" -- --#include --#include --#include --#include --#include -- --class QDBusServiceWatcher; -- --class DatabaseTabWidget; --class DatabaseWidget; --class Group; -- --class FdoSecretsPlugin; -- --namespace FdoSecrets --{ -- -- class Collection; -- class Item; -- class PromptBase; -- class ServiceAdaptor; -- class Session; -- -- class Service : public DBusObject // clazy: exclude=ctor-missing-parent-argument -- { -- Q_OBJECT -- public: -- explicit Service(FdoSecretsPlugin* plugin, QPointer dbTabs); -- ~Service() override; -- -- bool initialize(); -- -- DBusReturn openSession(const QString& algorithm, const QVariant& input, Session*& result); -- DBusReturn -- createCollection(const QVariantMap& properties, const QString& alias, PromptBase*& prompt); -- DBusReturn> searchItems(const StringStringMap& attributes, QList& locked); -- -- DBusReturn> unlock(const QList& objects, PromptBase*& prompt); -- -- DBusReturn> lock(const QList& objects, PromptBase*& prompt); -- -- DBusReturn> getSecrets(const QList& items, Session* session); -- -- DBusReturn readAlias(const QString& name); -- -- DBusReturn setAlias(const QString& name, Collection* collection); -- -- /** -- * List of collections -- * @return -- */ -- DBusReturn> collections() const; -- -- signals: -- void collectionCreated(Collection* collection); -- void collectionDeleted(Collection* collection); -- void collectionChanged(Collection* collection); -- -- void sessionOpened(Session* sess); -- void sessionClosed(Session* sess); -- -- /** -- * Report error message to the GUI -- * @param msg -- */ -- void error(const QString& msg); -- -- /** -- * Finish signal for async action doUnlockDatabaseInDialog -- * @param accepted If false, the action is canceled by the user -- * @param dbWidget The unlocked the dbWidget if succeed -- */ -- void doneUnlockDatabaseInDialog(bool accepted, DatabaseWidget* dbWidget); -- -- public: -- /** -- * List of sessions -- * @return -- */ -- const QList sessions() const; -- -- FdoSecretsPlugin* plugin() const -- { -- return m_plugin; -- } -- -- public slots: -- bool doCloseDatabase(DatabaseWidget* dbWidget); -- Collection* doNewDatabase(); -- void doSwitchToDatabaseSettings(DatabaseWidget* dbWidget); -- -- /** -- * Async, connect to signal doneUnlockDatabaseInDialog for finish notification -- * @param dbWidget -- */ -- void doUnlockDatabaseInDialog(DatabaseWidget* dbWidget); -- -- private slots: -- void dbusServiceUnregistered(const QString& service); -- void ensureDefaultAlias(); -- -- void onDatabaseTabOpened(DatabaseWidget* dbWidget, bool emitSignal); -- void monitorDatabaseExposedGroup(DatabaseWidget* dbWidget); -- -- void onCollectionAliasAboutToAdd(const QString& alias); -- void onCollectionAliasAdded(const QString& alias); -- -- void onCollectionAliasRemoved(const QString& alias); -- -- private: -- /** -- * Find collection by alias name -- * @param alias -- * @return the collection under alias -- */ -- Collection* findCollection(const QString& alias) const; -- -- /** -- * Find collection by dbWidget -- * @param db -- * @return the collection corresponding to the db -- */ -- Collection* findCollection(const DatabaseWidget* db) const; -- -- private: -- FdoSecretsPlugin* m_plugin; -- QPointer m_databases; -- -- QHash m_aliases; -- QList m_collections; -- QHash m_dbToCollection; -- -- QList m_sessions; -- QHash m_peerToSession; -- -- bool m_insdieEnsureDefaultAlias; -- -- QScopedPointer m_serviceWatcher; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SERVICE_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,242 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SessionCipher.h" -- --#include "crypto/CryptoHash.h" --#include "crypto/Random.h" --#include "crypto/SymmetricCipher.h" -- --#include -- --#include -- --namespace --{ -- constexpr const auto IETF1024_SECOND_OAKLEY_GROUP_P_HEX = "FFFFFFFFFFFFFFFFC90FDAA22168C234" -- "C4C6628B80DC1CD129024E088A67CC74" -- "020BBEA63B139B22514A08798E3404DD" -- "EF9519B3CD3A431B302B0A6DF25F1437" -- "4FE1356D6D51C245E485B576625E7EC6" -- "F44C42E9A637ED6B0BFF5CB6F406B7ED" -- "EE386BFB5A899FA5AE9F24117C4B1FE6" -- "49286651ECE65381FFFFFFFFFFFFFFFF"; -- constexpr const size_t KEY_SIZE_BYTES = 128; -- constexpr const int AES_KEY_LEN = 16; // 128 bits -- -- const auto IETF1024_SECOND_OAKLEY_GROUP_P = MpiFromHex(IETF1024_SECOND_OAKLEY_GROUP_P_HEX, false); --} // namespace -- --namespace FdoSecrets --{ -- // XXX: remove the redundant definitions once we are at C++17 -- constexpr char PlainCipher::Algorithm[]; -- constexpr char DhIetf1024Sha256Aes128CbcPkcs7::Algorithm[]; -- -- DhIetf1024Sha256Aes128CbcPkcs7::DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes) -- : m_valid(false) -- { -- // read client public key -- auto clientPub = MpiFromBytes(clientPublicKeyBytes, false); -- -- // generate server side private, 128 bytes -- GcryptMPI serverPrivate = nullptr; -- if (NextPrivKey) { -- serverPrivate = std::move(NextPrivKey); -- } else { -- serverPrivate.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); -- gcry_mpi_randomize(serverPrivate.get(), KEY_SIZE_BYTES * 8, GCRY_STRONG_RANDOM); -- } -- -- // generate server side public key -- GcryptMPI serverPublic = nullptr; -- if (NextPubKey) { -- serverPublic = std::move(NextPubKey); -- } else { -- serverPublic.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); -- // the generator of Second Oakley Group is 2 -- gcry_mpi_powm( -- serverPublic.get(), GCRYMPI_CONST_TWO, serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get()); -- } -- -- initialize(std::move(clientPub), std::move(serverPublic), std::move(serverPrivate)); -- } -- -- bool -- DhIetf1024Sha256Aes128CbcPkcs7::initialize(GcryptMPI clientPublic, GcryptMPI serverPublic, GcryptMPI serverPrivate) -- { -- QByteArray commonSecretBytes; -- if (!diffieHullman(clientPublic, serverPrivate, commonSecretBytes)) { -- return false; -- } -- -- m_privateKey = MpiToBytes(serverPrivate); -- m_publicKey = MpiToBytes(serverPublic); -- -- m_aesKey = hkdf(commonSecretBytes); -- -- m_valid = true; -- return true; -- } -- -- bool DhIetf1024Sha256Aes128CbcPkcs7::diffieHullman(const GcryptMPI& clientPub, -- const GcryptMPI& serverPrivate, -- QByteArray& commonSecretBytes) -- { -- if (!clientPub || !serverPrivate) { -- return false; -- } -- -- // calc common secret -- GcryptMPI commonSecret(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); -- gcry_mpi_powm(commonSecret.get(), clientPub.get(), serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get()); -- commonSecretBytes = MpiToBytes(commonSecret); -- -- return true; -- } -- -- QByteArray DhIetf1024Sha256Aes128CbcPkcs7::hkdf(const QByteArray& IKM) -- { -- // HKDF-Extract(salt, IKM) -> PRK -- // PRK = HMAC-Hash(salt, IKM) -- -- // we use NULL salt as per spec -- auto PRK = CryptoHash::hmac(IKM, -- QByteArrayLiteral("\0\0\0\0\0\0\0\0" -- "\0\0\0\0\0\0\0\0" -- "\0\0\0\0\0\0\0\0" -- "\0\0\0\0\0\0\0\0"), -- CryptoHash::Sha256); -- -- // HKDF-Expand(PRK, info, L) -> OKM -- // N = ceil(L/HashLen) -- // T = T(1) | T(2) | T(3) | ... | T(N) -- // OKM = first L octets of T -- // where: -- // T(0) = empty string (zero length) -- // T(1) = HMAC-Hash(PRK, T(0) | info | 0x01) -- // T(2) = HMAC-Hash(PRK, T(1) | info | 0x02) -- // T(3) = HMAC-Hash(PRK, T(2) | info | 0x03) -- // ... -- // -- // (where the constant concatenated to the end of each T(n) is a -- // single octet.) -- -- // we use empty info as per spec -- // HashLen = 32 (sha256) -- // L = 16 (16 * 8 = 128 bits) -- // N = ceil(16/32) = 1 -- -- auto T1 = CryptoHash::hmac(QByteArrayLiteral("\x01"), PRK, CryptoHash::Sha256); -- -- // resulting AES key is first 128 bits -- Q_ASSERT(T1.size() >= AES_KEY_LEN); -- auto OKM = T1.left(AES_KEY_LEN); -- return OKM; -- } -- -- SecretStruct DhIetf1024Sha256Aes128CbcPkcs7::encrypt(const SecretStruct& input) -- { -- SecretStruct output = input; -- output.value.clear(); -- output.parameters.clear(); -- -- SymmetricCipher encrypter(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); -- -- auto IV = randomGen()->randomArray(SymmetricCipher::algorithmIvSize(SymmetricCipher::Aes128)); -- if (!encrypter.init(m_aesKey, IV)) { -- qWarning() << "Error encrypt: " << encrypter.errorString(); -- return output; -- } -- -- output.parameters = IV; -- -- bool ok; -- output.value = input.value; -- output.value = encrypter.process(padPkcs7(output.value, encrypter.blockSize()), &ok); -- if (!ok) { -- qWarning() << "Error encrypt: " << encrypter.errorString(); -- return output; -- } -- -- return output; -- } -- -- QByteArray& DhIetf1024Sha256Aes128CbcPkcs7::padPkcs7(QByteArray& input, int blockSize) -- { -- // blockSize must be a power of 2. -- Q_ASSERT_X(blockSize > 0 && !(blockSize & (blockSize - 1)), "padPkcs7", "blockSize must be a power of 2"); -- -- int padLen = blockSize - (input.size() & (blockSize - 1)); -- -- input.append(QByteArray(padLen, static_cast(padLen))); -- return input; -- } -- -- SecretStruct DhIetf1024Sha256Aes128CbcPkcs7::decrypt(const SecretStruct& input) -- { -- auto IV = input.parameters; -- SymmetricCipher decrypter(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); -- if (!decrypter.init(m_aesKey, IV)) { -- qWarning() << "Error decoding: " << decrypter.errorString(); -- return input; -- } -- bool ok; -- SecretStruct output = input; -- output.parameters.clear(); -- output.value = decrypter.process(input.value, &ok); -- -- if (!ok) { -- qWarning() << "Error decoding: " << decrypter.errorString(); -- return input; -- } -- -- unpadPkcs7(output.value); -- return output; -- } -- -- QByteArray& DhIetf1024Sha256Aes128CbcPkcs7::unpadPkcs7(QByteArray& input) -- { -- if (input.isEmpty()) { -- return input; -- } -- -- int padLen = input[input.size() - 1]; -- input.chop(padLen); -- return input; -- } -- -- bool DhIetf1024Sha256Aes128CbcPkcs7::isValid() const -- { -- return m_valid; -- } -- -- QVariant DhIetf1024Sha256Aes128CbcPkcs7::negotiationOutput() const -- { -- return m_publicKey; -- } -- -- void DhIetf1024Sha256Aes128CbcPkcs7::fixNextServerKeys(GcryptMPI priv, GcryptMPI pub) -- { -- NextPrivKey = std::move(priv); -- NextPubKey = std::move(pub); -- } -- -- GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPrivKey = nullptr; -- GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPubKey = nullptr; -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.h keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,147 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H --#define KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H -- --#include "fdosecrets/GcryptMPI.h" --#include "fdosecrets/objects/Session.h" -- --class TestFdoSecrets; --class TestGuiFdoSecrets; -- --namespace FdoSecrets --{ -- -- class CipherPair -- { -- Q_DISABLE_COPY(CipherPair) -- public: -- CipherPair() = default; -- virtual ~CipherPair() = default; -- virtual SecretStruct encrypt(const SecretStruct& input) = 0; -- virtual SecretStruct decrypt(const SecretStruct& input) = 0; -- virtual bool isValid() const = 0; -- virtual QVariant negotiationOutput() const = 0; -- }; -- -- class PlainCipher : public CipherPair -- { -- Q_DISABLE_COPY(PlainCipher) -- public: -- static constexpr const char Algorithm[] = "plain"; -- -- PlainCipher() = default; -- SecretStruct encrypt(const SecretStruct& input) override -- { -- return input; -- } -- -- SecretStruct decrypt(const SecretStruct& input) override -- { -- return input; -- } -- -- bool isValid() const override -- { -- return true; -- } -- -- QVariant negotiationOutput() const override -- { -- return QStringLiteral(""); -- } -- }; -- -- class DhIetf1024Sha256Aes128CbcPkcs7 : public CipherPair -- { -- bool m_valid; -- QByteArray m_privateKey; -- QByteArray m_publicKey; -- QByteArray m_aesKey; -- -- /** -- * Diffie Hullman Key Exchange -- * Given client public key, generate server private/public key pair and common secret. -- * This also sets m_publicKey to server's public key -- * @param clientPublicKey client public key -- * @param serverPrivate server private key -- * @param commonSecretBytes output common secret -- * @return true on success. -- */ -- bool -- diffieHullman(const GcryptMPI& clientPublicKey, const GcryptMPI& serverPrivate, QByteArray& commonSecretBytes); -- -- /** -- * Perform HKDF defined in RFC5869, using sha256 as hash function -- * @param IKM input keying material -- * @return derived 128-bit key suitable for AES -- */ -- QByteArray hkdf(const QByteArray& IKM); -- -- /** -- * Add PKCS#7 style padding to input inplace -- * @param input -- * @param blockSize the block size to use, must be 2's power -- * @return reference to input for chaining -- */ -- QByteArray& padPkcs7(QByteArray& input, int blockSize); -- -- /** -- * Remove PKCS#7 style padding from input inplace -- * @param input -- * @return reference to input for chaining -- */ -- QByteArray& unpadPkcs7(QByteArray& input); -- -- bool initialize(GcryptMPI clientPublic, GcryptMPI serverPublic, GcryptMPI serverPrivate); -- -- DhIetf1024Sha256Aes128CbcPkcs7() -- : m_valid(false) -- { -- } -- -- public: -- static constexpr const char Algorithm[] = "dh-ietf1024-sha256-aes128-cbc-pkcs7"; -- -- explicit DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes); -- -- SecretStruct encrypt(const SecretStruct& input) override; -- -- SecretStruct decrypt(const SecretStruct& input) override; -- -- bool isValid() const override; -- -- QVariant negotiationOutput() const override; -- -- private: -- /** -- * For test only, fix the server side private and public key. -- */ -- static void fixNextServerKeys(GcryptMPI priv, GcryptMPI pub); -- static GcryptMPI NextPrivKey; -- static GcryptMPI NextPubKey; -- -- private: -- Q_DISABLE_COPY(DhIetf1024Sha256Aes128CbcPkcs7); -- friend class ::TestFdoSecrets; -- friend class ::TestGuiFdoSecrets; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,105 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ --#include "Session.h" -- --#include "fdosecrets/objects/SessionCipher.h" -- --#include "core/Tools.h" -- --namespace FdoSecrets --{ -- -- QHash Session::negoniationState; -- -- Session::Session(std::unique_ptr&& cipher, const QString& peer, Service* parent) -- : DBusObject(parent) -- , m_cipher(std::move(cipher)) -- , m_peer(peer) -- , m_id(QUuid::createUuid()) -- { -- registerWithPath(QStringLiteral(DBUS_PATH_TEMPLATE_SESSION).arg(p()->objectPath().path(), id()), -- new SessionAdaptor(this)); -- } -- -- void Session::CleanupNegotiation(const QString& peer) -- { -- negoniationState.remove(peer); -- } -- -- DBusReturn Session::close() -- { -- emit aboutToClose(); -- deleteLater(); -- -- return {}; -- } -- -- QString Session::peer() const -- { -- return m_peer; -- } -- -- QString Session::id() const -- { -- return Tools::uuidToHex(m_id); -- } -- -- std::unique_ptr Session::CreateCiphers(const QString& peer, -- const QString& algorithm, -- const QVariant& input, -- QVariant& output, -- bool& incomplete) -- { -- Q_UNUSED(peer); -- incomplete = false; -- -- std::unique_ptr cipher{}; -- if (algorithm == QLatin1String(PlainCipher::Algorithm)) { -- cipher.reset(new PlainCipher); -- } else if (algorithm == QLatin1String(DhIetf1024Sha256Aes128CbcPkcs7::Algorithm)) { -- QByteArray clientPublicKey = input.toByteArray(); -- cipher.reset(new DhIetf1024Sha256Aes128CbcPkcs7(clientPublicKey)); -- } else { -- // error notSupported -- } -- -- if (!cipher) { -- return {}; -- } -- -- if (!cipher->isValid()) { -- qWarning() << "FdoSecrets: Error creating cipher"; -- return {}; -- } -- -- output = cipher->negotiationOutput(); -- return cipher; -- } -- -- SecretStruct Session::encode(const SecretStruct& input) const -- { -- auto output = m_cipher->encrypt(input); -- output.session = objectPath(); -- return output; -- } -- -- SecretStruct Session::decode(const SecretStruct& input) const -- { -- return m_cipher->decrypt(input); -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.h ---- keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,91 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SESSION_H --#define KEEPASSXC_FDOSECRETS_SESSION_H -- --#include "fdosecrets/objects/DBusObject.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/objects/SessionCipher.h" --#include "fdosecrets/objects/adaptors/SessionAdaptor.h" -- --#include --#include --#include --#include -- --#include -- --namespace FdoSecrets --{ -- -- class CipherPair; -- class Session : public DBusObject -- { -- Q_OBJECT -- public: -- static std::unique_ptr CreateCiphers(const QString& peer, -- const QString& algorithm, -- const QVariant& intpu, -- QVariant& output, -- bool& incomplete); -- static void CleanupNegotiation(const QString& peer); -- -- explicit Session(std::unique_ptr&& cipher, const QString& peer, Service* parent); -- -- DBusReturn close(); -- -- /** -- * Encode the secret struct. Note only the value field is encoded. -- * @param input -- * @return -- */ -- SecretStruct encode(const SecretStruct& input) const; -- -- /** -- * Decode the secret struct. -- * @param input -- * @return -- */ -- SecretStruct decode(const SecretStruct& input) const; -- -- /** -- * The peer application that opened this session -- * @return -- */ -- QString peer() const; -- -- QString id() const; -- -- signals: -- /** -- * The session is going to be closed -- * @param sess -- */ -- void aboutToClose(); -- -- private: -- std::unique_ptr m_cipher; -- QString m_peer; -- QUuid m_id; -- -- static QHash negoniationState; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SESSION_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/README.md keepassxc-2.6.4-patched/src/fdosecrets/README.md ---- keepassxc-2.6.4-orig/src/fdosecrets/README.md 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/README.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,42 +0,0 @@ --# Freedesktop.org Secret Storage Spec Server Side API -- --This plugin implements the [Secret Storage specification][secrets] version 0.2. While running KeePassXC, it acts as a --Secret Service server, registered on DBus, so clients like seahorse, python-secretstorage, or other implementations --can connect and access the exposed database in KeePassXC. -- --[secrets]: (https://www.freedesktop.org/wiki/Specifications/secret-storage-spec/) -- --## Configurable settings -- --* The user can specify if a database is exposed on DBus, and which group is exposed. --* Whether to show desktop notification is shown when an entry is retrieved. --* Whether to skip confirmation for entries deleted from DBus -- --## Implemented Attributes on Item Object -- --The following attributes are exposed: -- --|Key|Value| --|:---:|:---:| --|Title|The entry title| --|UserName|The entry user name| --|URL|The entry URL| --|Notes|The entry notes| -- --In addition, all non-protected custom attributes are also exposed. -- --## Architecture -- --* `FdoSecrets::Service` is the top level DBus service --* There is one and only one `FdoSecrets::Collection` per opened database tab --* Each entry under the exposed database group has a corresponding `FdoSecrets::Item` DBus object. -- --### Signal connections -- --- Collections are created when a corresponding database tab opened --- If the database is locked, a collection is created --- When the database is unlocked, collection populates its children --- If the unlocked database's exposed group is none, collection deletes itself --- If the database's exposed group changes, collection repopulates --- If the database's exposed group changes to none, collection deletes itself --- If the database's exposed group changes from none, the service recreates a collection -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,177 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetFdoSecrets.h" --#include "ui_DatabaseSettingsWidgetFdoSecrets.h" -- --#include "fdosecrets/FdoSecretsSettings.h" -- --#include "core/Database.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "gui/group/GroupModel.h" -- --#include -- --namespace --{ -- enum class ExposedGroup -- { -- None, -- Expose -- }; --} // namespace -- --class DatabaseSettingsWidgetFdoSecrets::GroupModelNoRecycle : public QSortFilterProxyModel --{ -- Q_OBJECT -- -- Database* m_db; -- --public: -- explicit GroupModelNoRecycle(Database* db) -- : m_db(db) -- { -- Q_ASSERT(db); -- setSourceModel(new GroupModel(m_db, this)); -- } -- -- Group* groupFromIndex(const QModelIndex& index) const -- { -- return groupFromSourceIndex(mapToSource(index)); -- } -- -- Group* groupFromSourceIndex(const QModelIndex& index) const -- { -- auto groupModel = qobject_cast(sourceModel()); -- Q_ASSERT(groupModel); -- return groupModel->groupFromIndex(index); -- } -- -- QModelIndex indexFromGroup(Group* group) const -- { -- auto groupModel = qobject_cast(sourceModel()); -- Q_ASSERT(groupModel); -- return mapFromSource(groupModel->index(group)); -- } -- --protected: -- bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override -- { -- auto source_idx = sourceModel()->index(source_row, 0, source_parent); -- if (!source_idx.isValid()) { -- return false; -- } -- -- auto recycleBin = m_db->metadata()->recycleBin(); -- if (!recycleBin) { -- return true; -- } -- -- // can not call mapFromSource, which internally calls filterAcceptsRow -- auto group = groupFromSourceIndex(source_idx); -- -- return group && !group->isRecycled() && group->uuid() != recycleBin->uuid(); -- } --}; -- --DatabaseSettingsWidgetFdoSecrets::DatabaseSettingsWidgetFdoSecrets(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::DatabaseSettingsWidgetFdoSecrets) --{ -- m_ui->setupUi(this); -- m_ui->buttonGroup->setId(m_ui->radioDonotExpose, static_cast(ExposedGroup::None)); -- m_ui->buttonGroup->setId(m_ui->radioExpose, static_cast(ExposedGroup::Expose)); -- -- // make sure there is at least a selection -- connect(m_ui->radioExpose, &QRadioButton::toggled, this, [this](bool checked) { -- if (checked && !m_ui->selectGroup->selectionModel()->hasSelection()) { -- auto model = m_ui->selectGroup->model(); -- if (model) { -- auto idx = model->index(0, 0); -- m_ui->selectGroup->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent); -- } -- } -- }); --} -- --DatabaseSettingsWidgetFdoSecrets::~DatabaseSettingsWidgetFdoSecrets() = default; -- --void DatabaseSettingsWidgetFdoSecrets::loadSettings(QSharedPointer db) --{ -- m_db = std::move(db); -- -- m_model.reset(new GroupModelNoRecycle(m_db.data())); -- m_ui->selectGroup->setModel(m_model.data()); -- -- Group* recycleBin = nullptr; -- if (m_db->metadata() && m_db->metadata()->recycleBin()) { -- recycleBin = m_db->metadata()->recycleBin(); -- } -- -- auto group = m_db->rootGroup()->findGroupByUuid(FdoSecrets::settings()->exposedGroup(m_db)); -- if (!group || group->isRecycled() || (recycleBin && group->uuid() == recycleBin->uuid())) { -- m_ui->radioDonotExpose->setChecked(true); -- } else { -- auto idx = m_model->indexFromGroup(group); -- m_ui->selectGroup->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent); -- // expand all its parents -- idx = idx.parent(); -- while (idx.isValid()) { -- m_ui->selectGroup->expand(idx); -- idx = idx.parent(); -- } -- m_ui->radioExpose->setChecked(true); -- } -- -- settingsWarning(); --} -- --void DatabaseSettingsWidgetFdoSecrets::saveSettings() --{ -- Q_ASSERT(m_db); -- Q_ASSERT(m_model); -- -- QUuid exposedGroup; -- switch (static_cast(m_ui->buttonGroup->checkedId())) { -- case ExposedGroup::None: -- break; -- case ExposedGroup::Expose: { -- auto idx = m_ui->selectGroup->selectionModel()->selectedIndexes().takeFirst(); -- Q_ASSERT(idx.isValid()); -- exposedGroup = m_model->groupFromIndex(idx)->uuid(); -- break; -- } -- } -- -- FdoSecrets::settings()->setExposedGroup(m_db, exposedGroup); --} -- --void DatabaseSettingsWidgetFdoSecrets::settingsWarning() --{ -- if (FdoSecrets::settings()->isEnabled()) { -- m_ui->groupBox->setEnabled(true); -- m_ui->warningWidget->hideMessage(); -- } else { -- m_ui->groupBox->setEnabled(false); -- m_ui->warningWidget->showMessage(tr("Enable Secret Service to access these settings."), MessageWidget::Warning); -- m_ui->warningWidget->setCloseButtonVisible(false); -- m_ui->warningWidget->setAutoHideTimeout(-1); -- } --} -- --#include "DatabaseSettingsWidgetFdoSecrets.moc" -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H --#define KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H -- --#include --#include --#include -- --namespace Ui --{ -- class DatabaseSettingsWidgetFdoSecrets; --} -- --class Database; --class DatabaseSettingsWidgetFdoSecrets : public QWidget --{ -- Q_OBJECT --public: -- explicit DatabaseSettingsWidgetFdoSecrets(QWidget* parent = nullptr); -- ~DatabaseSettingsWidgetFdoSecrets() override; -- -- void loadSettings(QSharedPointer db); -- void saveSettings(); -- --private: -- void settingsWarning(); -- --private: -- QScopedPointer m_ui; -- -- QSharedPointer m_db; -- -- class GroupModelNoRecycle; -- QScopedPointer m_model; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,122 +0,0 @@ -- -- -- DatabaseSettingsWidgetFdoSecrets -- -- -- -- 0 -- 0 -- 400 -- 300 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- -- -- Exposed Entries -- -- -- -- -- -- Don't expose this database -- -- -- true -- -- -- buttonGroup -- -- -- -- -- -- -- Expose entries under this group: -- -- -- buttonGroup -- -- -- -- -- -- -- false -- -- -- QAbstractItemView::NoEditTriggers -- -- -- true -- -- -- false -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
--
-- -- -- -- radioExpose -- toggled(bool) -- selectGroup -- setEnabled(bool) -- -- -- 199 -- 92 -- -- -- 199 -- 189 -- -- -- -- -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,393 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SettingsModels.h" -- --#include "fdosecrets/FdoSecretsPlugin.h" --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/Service.h" --#include "fdosecrets/objects/Session.h" -- --#include "core/Database.h" --#include "core/DatabaseIcons.h" --#include "core/Resources.h" --#include "gui/DatabaseTabWidget.h" --#include "gui/DatabaseWidget.h" -- --#include -- --namespace FdoSecrets --{ -- -- SettingsDatabaseModel::SettingsDatabaseModel(DatabaseTabWidget* dbTabs, QObject* parent) -- : QAbstractTableModel(parent) -- , m_dbTabs(nullptr) -- { -- setTabWidget(dbTabs); -- } -- -- void SettingsDatabaseModel::setTabWidget(DatabaseTabWidget* dbTabs) -- { -- auto old = m_dbTabs; -- m_dbTabs = dbTabs; -- if (old != m_dbTabs) { -- populateModel(); -- } -- } -- -- int SettingsDatabaseModel::rowCount(const QModelIndex& parent) const -- { -- if (parent.isValid()) { -- return 0; -- } -- return m_dbs.size(); -- } -- -- int SettingsDatabaseModel::columnCount(const QModelIndex& parent) const -- { -- if (parent.isValid()) { -- return 0; -- } -- return 3; -- } -- -- QVariant SettingsDatabaseModel::headerData(int section, Qt::Orientation orientation, int role) const -- { -- if (orientation != Qt::Horizontal) { -- return {}; -- } -- -- if (role != Qt::DisplayRole) { -- return {}; -- } -- -- switch (section) { -- case 0: -- return tr("File Name"); -- case 1: -- return tr("Group"); -- case 2: -- return tr("Manage"); -- default: -- return {}; -- } -- } -- -- QVariant SettingsDatabaseModel::data(const QModelIndex& index, int role) const -- { -- if (!index.isValid()) { -- return {}; -- } -- const auto& dbWidget = m_dbs[index.row()]; -- if (!dbWidget) { -- return {}; -- } -- -- switch (index.column()) { -- case 0: -- return dataForName(dbWidget, role); -- case 1: -- return dataForExposedGroup(dbWidget, role); -- case 2: -- return dataForManage(dbWidget, role); -- default: -- return {}; -- } -- } -- -- QVariant SettingsDatabaseModel::dataForName(DatabaseWidget* db, int role) const -- { -- switch (role) { -- case Qt::DisplayRole: { -- QFileInfo fi(db->database()->filePath()); -- return fi.fileName(); -- } -- case Qt::ToolTipRole: -- return db->database()->filePath(); -- default: -- return {}; -- } -- } -- -- QVariant SettingsDatabaseModel::dataForExposedGroup(DatabaseWidget* dbWidget, int role) -- { -- if (dbWidget->isLocked()) { -- switch (role) { -- case Qt::DisplayRole: -- return tr("Unlock to show"); -- case Qt::DecorationRole: -- return resources()->icon(QStringLiteral("object-locked")); -- case Qt::FontRole: { -- QFont font; -- font.setItalic(true); -- return font; -- } -- default: -- return {}; -- } -- } -- auto db = dbWidget->database(); -- auto group = db->rootGroup()->findGroupByUuid(FdoSecrets::settings()->exposedGroup(db)); -- if (group) { -- switch (role) { -- case Qt::DisplayRole: -- return group->name(); -- case Qt::DecorationRole: -- return group->iconPixmap(); -- case Qt::FontRole: -- if (group->isExpired()) { -- QFont font; -- font.setStrikeOut(true); -- return font; -- } else { -- return {}; -- } -- default: -- return {}; -- } -- } else { -- switch (role) { -- case Qt::DisplayRole: -- return tr("None"); -- case Qt::DecorationRole: -- return resources()->icon(QStringLiteral("paint-none")); -- default: -- return {}; -- } -- } -- } -- -- QVariant SettingsDatabaseModel::dataForManage(DatabaseWidget* db, int role) const -- { -- switch (role) { -- case Qt::EditRole: -- return QVariant::fromValue(db); -- default: -- return {}; -- } -- } -- -- void SettingsDatabaseModel::populateModel() -- { -- beginResetModel(); -- -- m_dbs.clear(); -- -- if (m_dbTabs) { -- // Add existing database tabs -- for (int idx = 0; idx != m_dbTabs->count(); ++idx) { -- auto dbWidget = m_dbTabs->databaseWidgetFromIndex(idx); -- databaseAdded(dbWidget, false); -- } -- // connect signals -- connect(m_dbTabs, &DatabaseTabWidget::databaseOpened, this, [this](DatabaseWidget* db) { -- databaseAdded(db, true); -- }); -- connect(m_dbTabs, &DatabaseTabWidget::databaseClosed, this, &SettingsDatabaseModel::databaseRemoved); -- } -- -- endResetModel(); -- } -- -- void SettingsDatabaseModel::databaseAdded(DatabaseWidget* db, bool emitSignals) -- { -- int row = m_dbs.size(); -- if (emitSignals) { -- beginInsertRows({}, row, row); -- } -- -- m_dbs.append(db); -- connect(db, &DatabaseWidget::databaseLocked, this, [row, this]() { -- emit dataChanged(index(row, 1), index(row, 2)); -- }); -- connect(db, &DatabaseWidget::databaseUnlocked, this, [row, this]() { -- emit dataChanged(index(row, 1), index(row, 2)); -- }); -- connect(db, &DatabaseWidget::databaseModified, this, [row, this]() { -- emit dataChanged(index(row, 0), index(row, 2)); -- }); -- connect(db, &DatabaseWidget::databaseFilePathChanged, this, [row, this]() { -- emit dataChanged(index(row, 0), index(row, 2)); -- }); -- -- if (emitSignals) { -- endInsertRows(); -- } -- } -- -- void SettingsDatabaseModel::databaseRemoved(const QString& filePath) -- { -- for (int i = 0; i != m_dbs.size(); i++) { -- if (m_dbs[i] && m_dbs[i]->database()->filePath() == filePath) { -- beginRemoveRows({}, i, i); -- -- m_dbs[i]->disconnect(this); -- m_dbs.removeAt(i); -- -- endRemoveRows(); -- break; -- } -- } -- } -- -- SettingsSessionModel::SettingsSessionModel(FdoSecretsPlugin* plugin, QObject* parent) -- : QAbstractTableModel(parent) -- , m_service(nullptr) -- { -- setService(plugin->serviceInstance()); -- connect(plugin, &FdoSecretsPlugin::secretServiceStarted, this, [plugin, this]() { -- setService(plugin->serviceInstance()); -- }); -- connect(plugin, &FdoSecretsPlugin::secretServiceStopped, this, [this]() { setService(nullptr); }); -- } -- -- void SettingsSessionModel::setService(Service* service) -- { -- auto old = m_service; -- m_service = service; -- if (old != m_service) { -- populateModel(); -- } -- } -- -- int SettingsSessionModel::rowCount(const QModelIndex& parent) const -- { -- if (parent.isValid()) { -- return 0; -- } -- return m_sessions.size(); -- } -- -- int SettingsSessionModel::columnCount(const QModelIndex& parent) const -- { -- if (parent.isValid()) { -- return 0; -- } -- return 2; -- } -- -- QVariant SettingsSessionModel::headerData(int section, Qt::Orientation orientation, int role) const -- { -- if (orientation != Qt::Horizontal) { -- return {}; -- } -- -- if (role != Qt::DisplayRole) { -- return {}; -- } -- -- switch (section) { -- case 0: -- return tr("Application"); -- case 1: -- return tr("Manage"); -- default: -- return {}; -- } -- } -- -- QVariant SettingsSessionModel::data(const QModelIndex& index, int role) const -- { -- if (!index.isValid()) { -- return {}; -- } -- const auto& sess = m_sessions[index.row()]; -- if (!sess) { -- return {}; -- } -- -- switch (index.column()) { -- case 0: -- return dataForApplication(sess, role); -- case 1: -- return dataForManage(sess, role); -- default: -- return {}; -- } -- } -- -- QVariant SettingsSessionModel::dataForApplication(Session* sess, int role) const -- { -- switch (role) { -- case Qt::DisplayRole: -- return sess->peer(); -- default: -- return {}; -- } -- } -- -- QVariant SettingsSessionModel::dataForManage(Session* sess, int role) const -- { -- switch (role) { -- case Qt::EditRole: { -- return QVariant::fromValue(sess); -- } -- default: -- return {}; -- } -- } -- -- void SettingsSessionModel::populateModel() -- { -- beginResetModel(); -- -- m_sessions.clear(); -- -- if (m_service) { -- // Add existing database tabs -- for (const auto& sess : m_service->sessions()) { -- sessionAdded(sess, false); -- } -- -- // connect signals -- connect(m_service, &Service::sessionOpened, this, [this](Session* sess) { sessionAdded(sess, true); }); -- connect(m_service, &Service::sessionClosed, this, &SettingsSessionModel::sessionRemoved); -- } -- -- endResetModel(); -- } -- -- void SettingsSessionModel::sessionAdded(Session* sess, bool emitSignals) -- { -- int row = m_sessions.size(); -- if (emitSignals) { -- beginInsertRows({}, row, row); -- } -- -- m_sessions.append(sess); -- -- if (emitSignals) { -- endInsertRows(); -- } -- } -- -- void SettingsSessionModel::sessionRemoved(Session* sess) -- { -- for (int i = 0; i != m_sessions.size(); i++) { -- if (m_sessions[i] == sess) { -- beginRemoveRows({}, i, i); -- -- m_sessions[i]->disconnect(this); -- m_sessions.removeAt(i); -- -- endRemoveRows(); -- break; -- } -- } -- } -- --} // namespace FdoSecrets -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.h ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ --/* -- * Copyright (C) 2019 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H --#define KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H -- --#include --#include -- --class DatabaseTabWidget; --class DatabaseWidget; --class FdoSecretsPlugin; -- --namespace FdoSecrets --{ -- class SettingsDatabaseModel : public QAbstractTableModel -- { -- Q_OBJECT -- public: -- explicit SettingsDatabaseModel(DatabaseTabWidget* dbTabs, QObject* parent = nullptr); -- -- void setTabWidget(DatabaseTabWidget* dbTabs); -- -- int rowCount(const QModelIndex& parent) const override; -- int columnCount(const QModelIndex& parent) const override; -- QVariant data(const QModelIndex& index, int role) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; -- -- private: -- QVariant dataForName(DatabaseWidget* db, int role) const; -- static QVariant dataForExposedGroup(DatabaseWidget* db, int role); -- QVariant dataForManage(DatabaseWidget* db, int role) const; -- -- private slots: -- void populateModel(); -- void databaseAdded(DatabaseWidget* db, bool emitSignals); -- void databaseRemoved(const QString& filePath); -- -- private: -- // source -- QPointer m_dbTabs; -- -- // internal store -- QList> m_dbs; -- }; -- -- class Service; -- class Session; -- -- class SettingsSessionModel : public QAbstractTableModel -- { -- Q_OBJECT -- public: -- explicit SettingsSessionModel(FdoSecretsPlugin* plugin, QObject* parent = nullptr); -- -- int rowCount(const QModelIndex& parent) const override; -- int columnCount(const QModelIndex& parent) const override; -- QVariant data(const QModelIndex& index, int role) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; -- -- private: -- void setService(Service* service); -- -- QVariant dataForApplication(Session* sess, int role) const; -- QVariant dataForManage(Session* sess, int role) const; -- -- private slots: -- void populateModel(); -- void sessionAdded(Session* sess, bool emitSignals); -- void sessionRemoved(Session* sess); -- -- private: -- // source -- QPointer m_service; -- -- // internal copy, so we can emit with changed index -- QList m_sessions; -- }; -- --} // namespace FdoSecrets -- --#endif // KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,366 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "SettingsWidgetFdoSecrets.h" --#include "ui_SettingsWidgetFdoSecrets.h" -- --#include "fdosecrets/FdoSecretsPlugin.h" --#include "fdosecrets/FdoSecretsSettings.h" --#include "fdosecrets/objects/Session.h" --#include "fdosecrets/widgets/SettingsModels.h" -- --#include "core/Resources.h" --#include "gui/DatabaseWidget.h" -- --#include --#include --#include --#include --#include --#include --#include --#include -- --using FdoSecrets::Session; --using FdoSecrets::SettingsDatabaseModel; --using FdoSecrets::SettingsSessionModel; -- --namespace --{ -- class ManageDatabase : public QToolBar -- { -- Q_OBJECT -- -- Q_PROPERTY(DatabaseWidget* dbWidget READ dbWidget WRITE setDbWidget USER true) -- -- public: -- explicit ManageDatabase(FdoSecretsPlugin* plugin, QWidget* parent = nullptr) -- : QToolBar(parent) -- , m_plugin(plugin) -- { -- setFloatable(false); -- setMovable(false); -- -- // use a dummy widget to center the buttons -- auto spacer = new QWidget(this); -- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -- spacer->setVisible(true); -- addWidget(spacer); -- -- // db settings -- m_dbSettingsAct = new QAction(tr("Database settings"), this); -- m_dbSettingsAct->setIcon(resources()->icon(QStringLiteral("document-edit"))); -- m_dbSettingsAct->setToolTip(tr("Edit database settings")); -- m_dbSettingsAct->setEnabled(false); -- connect(m_dbSettingsAct, &QAction::triggered, this, [this]() { -- if (!m_dbWidget) { -- return; -- } -- auto db = m_dbWidget; -- m_plugin->serviceInstance()->doSwitchToDatabaseSettings(m_dbWidget); -- }); -- addAction(m_dbSettingsAct); -- -- // unlock/lock -- m_lockAct = new QAction(tr("Unlock database"), this); -- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked"))); -- m_lockAct->setToolTip(tr("Unlock database to show more information")); -- connect(m_lockAct, &QAction::triggered, this, [this]() { -- if (!m_dbWidget) { -- return; -- } -- if (m_dbWidget->isLocked()) { -- m_plugin->serviceInstance()->doUnlockDatabaseInDialog(m_dbWidget); -- } else { -- m_dbWidget->lock(); -- } -- }); -- -- addAction(m_lockAct); -- -- // use a dummy widget to center the buttons -- spacer = new QWidget(this); -- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -- spacer->setVisible(true); -- addWidget(spacer); -- } -- -- DatabaseWidget* dbWidget() const -- { -- return m_dbWidget; -- } -- -- void setDbWidget(DatabaseWidget* dbWidget) -- { -- if (m_dbWidget == dbWidget) { -- return; -- } -- -- if (m_dbWidget) { -- disconnect(); -- } -- -- m_dbWidget = dbWidget; -- -- reconnect(); -- } -- -- private: -- void disconnect() -- { -- if (!m_dbWidget) { -- return; -- } -- m_dbWidget->disconnect(this); -- } -- -- void reconnect() -- { -- if (!m_dbWidget) { -- return; -- } -- connect(m_dbWidget, &DatabaseWidget::databaseLocked, this, [this]() { -- m_lockAct->setText(tr("Unlock database")); -- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked"))); -- m_lockAct->setToolTip(tr("Unlock database to show more information")); -- m_dbSettingsAct->setEnabled(false); -- }); -- connect(m_dbWidget, &DatabaseWidget::databaseUnlocked, this, [this]() { -- m_lockAct->setText(tr("Lock database")); -- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-unlocked"))); -- m_lockAct->setToolTip(tr("Lock database")); -- m_dbSettingsAct->setEnabled(true); -- }); -- } -- -- private: -- FdoSecretsPlugin* m_plugin = nullptr; -- QPointer m_dbWidget = nullptr; -- QAction* m_dbSettingsAct = nullptr; -- QAction* m_lockAct = nullptr; -- }; -- -- class ManageSession : public QToolBar -- { -- Q_OBJECT -- -- Q_PROPERTY(Session* session READ session WRITE setSession USER true) -- -- public: -- explicit ManageSession(FdoSecretsPlugin*, QWidget* parent = nullptr) -- : QToolBar(parent) -- { -- setFloatable(false); -- setMovable(false); -- -- // use a dummy widget to center the buttons -- auto spacer = new QWidget(this); -- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -- spacer->setVisible(true); -- addWidget(spacer); -- -- m_disconnectAct = new QAction(tr("Disconnect"), this); -- m_disconnectAct->setIcon(resources()->icon(QStringLiteral("dialog-close"))); -- m_disconnectAct->setToolTip(tr("Disconnect this application")); -- connect(m_disconnectAct, &QAction::triggered, this, [this]() { -- if (m_session) { -- m_session->close(); -- } -- }); -- addAction(m_disconnectAct); -- -- // use a dummy widget to center the buttons -- spacer = new QWidget(this); -- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -- spacer->setVisible(true); -- addWidget(spacer); -- } -- -- Session* session() -- { -- return m_session; -- } -- -- void setSession(Session* sess) -- { -- m_session = sess; -- } -- -- private: -- Session* m_session = nullptr; -- QAction* m_disconnectAct = nullptr; -- }; -- -- template class Creator : public QItemEditorCreatorBase -- { -- public: -- inline explicit Creator(FdoSecretsPlugin* plugin) -- : QItemEditorCreatorBase() -- , m_plugin(plugin) -- , m_propertyName(T::staticMetaObject.userProperty().name()) -- { -- } -- -- inline QWidget* createWidget(QWidget* parent) const override -- { -- return new T(m_plugin, parent); -- } -- -- inline QByteArray valuePropertyName() const override -- { -- return m_propertyName; -- } -- -- private: -- FdoSecretsPlugin* m_plugin; -- QByteArray m_propertyName; -- }; --} // namespace -- --SettingsWidgetFdoSecrets::SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::SettingsWidgetFdoSecrets()) -- , m_factory(new QItemEditorFactory) -- , m_plugin(plugin) --{ -- m_ui->setupUi(this); -- m_ui->warningMsg->setHidden(true); -- m_ui->warningMsg->setCloseButtonVisible(false); -- -- auto sessModel = new SettingsSessionModel(plugin, this); -- m_ui->tableSessions->setModel(sessModel); -- setupView(m_ui->tableSessions, 1, qMetaTypeId(), new Creator(m_plugin)); -- -- // config header after setting model, otherwise the header doesn't have enough sections -- auto sessViewHeader = m_ui->tableSessions->horizontalHeader(); -- sessViewHeader->setSelectionMode(QAbstractItemView::NoSelection); -- sessViewHeader->setSectionsClickable(false); -- sessViewHeader->setSectionResizeMode(0, QHeaderView::Stretch); // application -- sessViewHeader->setSectionResizeMode(1, QHeaderView::ResizeToContents); // disconnect button -- -- auto dbModel = new SettingsDatabaseModel(plugin->dbTabs(), this); -- m_ui->tableDatabases->setModel(dbModel); -- setupView(m_ui->tableDatabases, 2, qMetaTypeId(), new Creator(m_plugin)); -- -- // config header after setting model, otherwise the header doesn't have enough sections -- auto dbViewHeader = m_ui->tableDatabases->horizontalHeader(); -- dbViewHeader->setSelectionMode(QAbstractItemView::NoSelection); -- dbViewHeader->setSectionsClickable(false); -- dbViewHeader->setSectionResizeMode(0, QHeaderView::Stretch); // file name -- dbViewHeader->setSectionResizeMode(1, QHeaderView::Stretch); // group -- dbViewHeader->setSectionResizeMode(2, QHeaderView::ResizeToContents); // manage button -- -- // prompt the user to save settings before the sections are enabled -- connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, this, &SettingsWidgetFdoSecrets::updateServiceState); -- connect(m_plugin, &FdoSecretsPlugin::secretServiceStopped, this, &SettingsWidgetFdoSecrets::updateServiceState); -- connect(m_ui->enableFdoSecretService, &QCheckBox::toggled, this, &SettingsWidgetFdoSecrets::updateServiceState); -- updateServiceState(); -- -- // background checking -- m_checkTimer.setInterval(2000); -- connect(&m_checkTimer, &QTimer::timeout, this, &SettingsWidgetFdoSecrets::checkDBusName); -- connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, &m_checkTimer, &QTimer::stop); -- connect(m_plugin, SIGNAL(secretServiceStopped()), &m_checkTimer, SLOT(start())); --} -- --void SettingsWidgetFdoSecrets::setupView(QAbstractItemView* view, -- int manageColumn, -- int editorTypeId, -- QItemEditorCreatorBase* creator) --{ -- auto manageButtonDelegate = new QStyledItemDelegate(this); -- m_factory->registerEditor(editorTypeId, creator); -- manageButtonDelegate->setItemEditorFactory(m_factory.data()); -- view->setItemDelegateForColumn(manageColumn, manageButtonDelegate); -- connect(view->model(), -- &QAbstractItemModel::rowsInserted, -- this, -- [view, manageColumn](const QModelIndex&, int first, int last) { -- for (int i = first; i <= last; ++i) { -- auto idx = view->model()->index(i, manageColumn); -- view->openPersistentEditor(idx); -- } -- }); --} -- --SettingsWidgetFdoSecrets::~SettingsWidgetFdoSecrets() = default; -- --void SettingsWidgetFdoSecrets::loadSettings() --{ -- m_ui->enableFdoSecretService->setChecked(FdoSecrets::settings()->isEnabled()); -- m_ui->showNotification->setChecked(FdoSecrets::settings()->showNotification()); -- m_ui->noConfirmDeleteItem->setChecked(FdoSecrets::settings()->noConfirmDeleteItem()); --} -- --void SettingsWidgetFdoSecrets::saveSettings() --{ -- FdoSecrets::settings()->setEnabled(m_ui->enableFdoSecretService->isChecked()); -- FdoSecrets::settings()->setShowNotification(m_ui->showNotification->isChecked()); -- FdoSecrets::settings()->setNoConfirmDeleteItem(m_ui->noConfirmDeleteItem->isChecked()); --} -- --void SettingsWidgetFdoSecrets::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); -- QTimer::singleShot(0, this, &SettingsWidgetFdoSecrets::checkDBusName); -- m_checkTimer.start(); --} -- --void SettingsWidgetFdoSecrets::hideEvent(QHideEvent* event) --{ -- QWidget::hideEvent(event); -- m_checkTimer.stop(); --} -- --void SettingsWidgetFdoSecrets::checkDBusName() --{ -- if (m_plugin->serviceInstance()) { -- // only need checking if the service is not started or failed to start. -- return; -- } -- -- auto reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral(DBUS_SERVICE_SECRET)); -- if (!reply.isValid()) { -- m_ui->warningMsg->showMessage( -- tr("Error: Failed to connect to DBus. Please check your DBus setup."), MessageWidget::Error, -1); -- m_ui->enableFdoSecretService->setChecked(false); -- m_ui->enableFdoSecretService->setEnabled(false); -- return; -- } -- if (reply.value()) { -- m_ui->warningMsg->showMessage( -- tr("Warning: ") + m_plugin->reportExistingService(), MessageWidget::Warning, -1); -- m_ui->enableFdoSecretService->setChecked(false); -- m_ui->enableFdoSecretService->setEnabled(false); -- return; -- } -- m_ui->warningMsg->hideMessage(); -- m_ui->enableFdoSecretService->setEnabled(true); --} -- --void SettingsWidgetFdoSecrets::updateServiceState() --{ -- m_ui->tabWidget->setEnabled(m_plugin->serviceInstance() != nullptr); -- if (m_ui->enableFdoSecretService->isChecked() && !m_plugin->serviceInstance()) { -- m_ui->tabWidget->setToolTip( -- tr("Save current changes to activate the plugin and enable editing of this section.")); -- } else { -- m_ui->tabWidget->setToolTip(""); -- } --} -- --#include "SettingsWidgetFdoSecrets.moc" -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,74 +0,0 @@ --/* -- * Copyright (C) 2018 Aetf -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H --#define KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H -- --#include "gui/MessageWidget.h" -- --#include --#include --#include -- --class QAbstractItemView; --class QItemEditorCreatorBase; --class QItemEditorFactory; -- --namespace FdoSecrets --{ -- -- class Session; -- class Collection; -- --} // namespace FdoSecrets -- --class FdoSecretsPlugin; -- --namespace Ui --{ -- class SettingsWidgetFdoSecrets; --} --class SettingsWidgetFdoSecrets : public QWidget --{ -- Q_OBJECT --public: -- explicit SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWidget* parent = nullptr); -- ~SettingsWidgetFdoSecrets() override; -- --public slots: -- void loadSettings(); -- void saveSettings(); -- --private slots: -- void checkDBusName(); -- void updateServiceState(); -- --protected: -- void showEvent(QShowEvent* event) override; -- void hideEvent(QHideEvent* event) override; -- --private: -- void setupView(QAbstractItemView* view, int manageColumn, int editorTypeId, QItemEditorCreatorBase* creator); -- --private: -- QScopedPointer m_ui; -- QScopedPointer m_factory; -- FdoSecretsPlugin* m_plugin; -- QTimer m_checkTimer; --}; -- --#endif // KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H -diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui ---- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,157 +0,0 @@ -- -- -- SettingsWidgetFdoSecrets -- -- -- -- 0 -- 0 -- 525 -- 457 -- -- -- -- Options -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- -- -- Enable KeepassXC Freedesktop.org Secret Service integration -- -- -- -- -- -- -- 0 -- -- -- -- General -- -- -- -- -- -- Show notification when credentials are requested -- -- -- -- -- -- -- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> -- -- -- Don't confirm when entries are deleted by clients -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Preferred -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- Exposed database groups: -- -- -- -- -- -- -- Qt::NoFocus -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::SelectRows -- -- -- false -- -- -- -- -- -- -- -- Authorization -- -- -- -- -- -- These applications are currently connected: -- -- -- -- -- -- -- Qt::NoFocus -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::SelectRows -- -- -- false -- -- -- -- -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
--
-- -- --
-diff -urNr keepassxc-2.6.4-orig/src/format/CsvExporter.cpp keepassxc-2.6.4-patched/src/format/CsvExporter.cpp ---- keepassxc-2.6.4-orig/src/format/CsvExporter.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/CsvExporter.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,121 +0,0 @@ --/* -- * Copyright (C) 2015 Florian Geyer -- * Copyright (C) 2015 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CsvExporter.h" -- --#include -- --#include "core/Database.h" --#include "core/Group.h" -- --bool CsvExporter::exportDatabase(const QString& filename, const QSharedPointer& db) --{ -- QFile file(filename); -- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { -- m_error = file.errorString(); -- return false; -- } -- return exportDatabase(&file, db); --} -- --bool CsvExporter::exportDatabase(QIODevice* device, const QSharedPointer& db) --{ -- if (device->write(exportHeader().toUtf8()) == -1) { -- m_error = device->errorString(); -- return false; -- } -- -- if (device->write(exportGroup(db->rootGroup()).toUtf8()) == -1) { -- m_error = device->errorString(); -- return false; -- } -- -- return true; --} -- --QString CsvExporter::exportDatabase(const QSharedPointer& db) --{ -- return exportHeader() + exportGroup(db->rootGroup()); --} -- --QString CsvExporter::errorString() const --{ -- return m_error; --} -- --QString CsvExporter::exportHeader() --{ -- QString header; -- addColumn(header, "Group"); -- addColumn(header, "Title"); -- addColumn(header, "Username"); -- addColumn(header, "Password"); -- addColumn(header, "URL"); -- addColumn(header, "Notes"); -- addColumn(header, "TOTP"); -- addColumn(header, "Icon"); -- addColumn(header, "Last Modified"); -- addColumn(header, "Created"); -- return header + QString("\n"); --} -- --QString CsvExporter::exportGroup(const Group* group, QString groupPath) --{ -- QString response; -- if (!groupPath.isEmpty()) { -- groupPath.append("/"); -- } -- groupPath.append(group->name()); -- -- const QList& entryList = group->entries(); -- for (const Entry* entry : entryList) { -- QString line; -- -- addColumn(line, groupPath); -- addColumn(line, entry->title()); -- addColumn(line, entry->username()); -- addColumn(line, entry->password()); -- addColumn(line, entry->url()); -- addColumn(line, entry->notes()); -- addColumn(line, entry->totpSettingsString()); -- addColumn(line, QString::number(entry->iconNumber())); -- addColumn(line, entry->timeInfo().lastModificationTime().toString(Qt::ISODate)); -- addColumn(line, entry->timeInfo().creationTime().toString(Qt::ISODate)); -- -- line.append("\n"); -- response.append(line); -- } -- -- const QList& children = group->children(); -- for (const Group* child : children) { -- response.append(exportGroup(child, groupPath)); -- } -- -- return response; --} -- --void CsvExporter::addColumn(QString& str, const QString& column) --{ -- if (!str.isEmpty()) { -- str.append(","); -- } -- -- str.append("\""); -- str.append(QString(column).replace("\"", "\"\"")); -- str.append("\""); --} -diff -urNr keepassxc-2.6.4-orig/src/format/CsvExporter.h keepassxc-2.6.4-patched/src/format/CsvExporter.h ---- keepassxc-2.6.4-orig/src/format/CsvExporter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/CsvExporter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --/* -- * Copyright (C) 2015 Florian Geyer -- * Copyright (C) 2015 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CSVEXPORTER_H --#define KEEPASSX_CSVEXPORTER_H -- --#include --#include -- --class Database; --class Group; --class QIODevice; -- --class CsvExporter --{ --public: -- bool exportDatabase(const QString& filename, const QSharedPointer& db); -- bool exportDatabase(QIODevice* device, const QSharedPointer& db); -- QString exportDatabase(const QSharedPointer& db); -- QString errorString() const; -- --private: -- QString exportGroup(const Group* group, QString groupPath = QString()); -- QString exportHeader(); -- void addColumn(QString& str, const QString& column); -- -- QString m_error; --}; -- --#endif // KEEPASSX_CSVEXPORTER_H -diff -urNr keepassxc-2.6.4-orig/src/format/HtmlExporter.cpp keepassxc-2.6.4-patched/src/format/HtmlExporter.cpp ---- keepassxc-2.6.4-orig/src/format/HtmlExporter.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/HtmlExporter.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,255 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "HtmlExporter.h" -- --#include --#include -- --#include "core/Database.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/Metadata.h" -- --namespace --{ -- QString PixmapToHTML(const QPixmap& pixmap) -- { -- if (pixmap.isNull()) { -- return ""; -- } -- -- // Based on https://stackoverflow.com/a/6621278 -- QByteArray a; -- QBuffer buffer(&a); -- pixmap.save(&buffer, "PNG"); -- return QString(""; -- } --} // namespace -- --bool HtmlExporter::exportDatabase(const QString& filename, const QSharedPointer& db) --{ -- QFile file(filename); -- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { -- m_error = file.errorString(); -- return false; -- } -- return exportDatabase(&file, db); --} -- --QString HtmlExporter::errorString() const --{ -- return m_error; --} -- --bool HtmlExporter::exportDatabase(QIODevice* device, const QSharedPointer& db) --{ -- const auto meta = db->metadata(); -- if (!meta) { -- m_error = "Internal error: metadata is NULL"; -- return false; -- } -- -- const auto header = QString("" -- "" -- "" -- "" -- + meta->name().toHtmlEscaped() -- + "" -- "" -- "\n" -- "" -- "

" -- + meta->name().toHtmlEscaped() -- + "

" -- "

" -- + meta->description().toHtmlEscaped().replace("\n", "
") -- + "

" -- "

" -- + db->filePath().toHtmlEscaped() + "

"); -- const auto footer = QString("" -- ""); -- -- if (device->write(header.toUtf8()) == -1) { -- m_error = device->errorString(); -- return false; -- } -- -- if (db->rootGroup()) { -- if (!writeGroup(*device, *db->rootGroup())) { -- return false; -- } -- } -- -- if (device->write(footer.toUtf8()) == -1) { -- m_error = device->errorString(); -- return false; -- } -- -- return true; --} -- --bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString path) --{ -- // Don't output the recycle bin -- if (&group == group.database()->metadata()->recycleBin()) { -- return true; -- } -- -- if (!path.isEmpty()) { -- path.append(" → "); -- } -- path.append(group.name().toHtmlEscaped()); -- -- // Output the header for this group (but only if there are -- // any notes or entries in this group, otherwise we'd get -- // a header with nothing after it, which looks stupid) -- const auto& entries = group.entries(); -- const auto notes = group.notes(); -- if (!entries.empty() || !notes.isEmpty()) { -- -- // Header line -- auto header = QString("

"); -- header.append(PixmapToHTML(group.iconPixmap(IconSize::Medium))); -- header.append(" "); -- header.append(path); -- header.append("

\n"); -- -- // Group notes -- if (!notes.isEmpty()) { -- header.append("

"); -- header.append(notes.toHtmlEscaped().replace("\n", "
")); -- header.append("

"); -- } -- -- // Output it -- if (device.write(header.toUtf8()) == -1) { -- m_error = device.errorString(); -- return false; -- } -- } -- -- // Output the entries in this group -- for (const auto entry : entries) { -- auto item = QString("

"); -- -- // Begin formatting this item into HTML -- item.append(PixmapToHTML(entry->iconPixmap(IconSize::Medium))); -- item.append(" "); -- item.append(entry->title().toHtmlEscaped()); -- item.append("

\n" -- ""); -- -- // Output the fixed fields -- const auto& u = entry->username(); -- if (!u.isEmpty()) { -- item.append(""); -- } -- -- const auto& p = entry->password(); -- if (!p.isEmpty()) { -- item.append(""); -- } -- -- const auto& r = entry->url(); -- if (!r.isEmpty()) { -- item.append(""); -- } -- -- const auto& n = entry->notes(); -- if (!n.isEmpty()) { -- item.append(""); -- } -- -- // Now add the attributes (if there are any) -- const auto* const attr = entry->attributes(); -- if (attr && !attr->customKeys().isEmpty()) { -- for (const auto& key : attr->customKeys()) { -- item.append(""); -- } -- } -- -- // Done with this entry -- item.append("
"); -- item.append(QObject::tr("User name")); -- item.append(""); -- item.append(entry->username().toHtmlEscaped()); -- item.append("
"); -- item.append(QObject::tr("Password")); -- item.append(""); -- item.append(entry->password().toHtmlEscaped()); -- item.append("
"); -- item.append(QObject::tr("URL")); -- item.append(""); -- -- // Restrict the length of what we display of the URL - -- // even from a paper backup, nobody will every type in -- // more than 100 characters of a URL -- constexpr auto maxlen = 100; -- if (r.size() <= maxlen) { -- item.append(r.toHtmlEscaped()); -- } else { -- item.append(r.mid(0, maxlen).toHtmlEscaped()); -- item.append("…"); -- } -- -- item.append("
"); -- item.append(QObject::tr("Notes")); -- item.append(""); -- item.append(entry->notes().toHtmlEscaped().replace("\n", "
")); -- item.append("
"); -- item.append(key.toHtmlEscaped()); -- item.append(""); -- item.append(attr->value(key).toHtmlEscaped().replace("\n", "
")); -- item.append("
\n"); -- if (device.write(item.toUtf8()) == -1) { -- m_error = device.errorString(); -- return false; -- } -- } -- -- // Recursively output the child groups -- const auto& children = group.children(); -- for (const auto child : children) { -- if (child && !writeGroup(device, *child, path)) { -- return false; -- } -- } -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/format/HtmlExporter.h keepassxc-2.6.4-patched/src/format/HtmlExporter.h ---- keepassxc-2.6.4-orig/src/format/HtmlExporter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/HtmlExporter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_HTMLEXPORTER_H --#define KEEPASSX_HTMLEXPORTER_H -- --#include --#include -- --class Database; --class Group; --class QIODevice; -- --class HtmlExporter --{ --public: -- bool exportDatabase(const QString& filename, const QSharedPointer& db); -- QString errorString() const; -- --private: -- bool exportDatabase(QIODevice* device, const QSharedPointer& db); -- bool writeGroup(QIODevice& device, const Group& group, QString path = QString()); -- -- QString m_error; --}; -- --#endif // KEEPASSX_HTMLEXPORTER_H -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Reader.cpp keepassxc-2.6.4-patched/src/format/Kdbx3Reader.cpp ---- keepassxc-2.6.4-orig/src/format/Kdbx3Reader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx3Reader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,213 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdbx3Reader.h" -- --#include "core/AsyncTask.h" --#include "core/Endian.h" --#include "core/Group.h" --#include "crypto/CryptoHash.h" --#include "format/KdbxXmlReader.h" --#include "format/KeePass2RandomStream.h" --#include "streams/HashedBlockStream.h" --#include "streams/QtIOCompressor" --#include "streams/SymmetricCipherStream.h" -- --#include -- --bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, -- const QByteArray& headerData, -- QSharedPointer key, -- Database* db) --{ -- Q_ASSERT(m_kdbxVersion <= KeePass2::FILE_VERSION_3_1); -- -- if (hasError()) { -- return false; -- } -- -- // check if all required headers were present -- if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || m_streamStartBytes.isEmpty() -- || m_protectedStreamKey.isEmpty() || db->cipher().isNull()) { -- raiseError(tr("missing database headers")); -- return false; -- } -- -- bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false); }); -- if (!ok) { -- raiseError(tr("Unable to calculate database key")); -- return false; -- } -- -- if (!db->challengeMasterSeed(m_masterSeed)) { -- raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError())); -- return false; -- } -- -- CryptoHash hash(CryptoHash::Sha256); -- hash.addData(m_masterSeed); -- hash.addData(db->challengeResponseKey()); -- hash.addData(db->transformedDatabaseKey()); -- QByteArray finalKey = hash.result(); -- -- SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); -- SymmetricCipherStream cipherStream( -- device, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); -- if (!cipherStream.init(finalKey, m_encryptionIV)) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- if (!cipherStream.open(QIODevice::ReadOnly)) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- -- QByteArray realStart = cipherStream.read(32); -- -- if (realStart != m_streamStartBytes) { -- raiseError(tr("Invalid credentials were provided, please try again.\n" -- "If this reoccurs, then your database file may be corrupt.")); -- return false; -- } -- -- HashedBlockStream hashedStream(&cipherStream); -- if (!hashedStream.open(QIODevice::ReadOnly)) { -- raiseError(hashedStream.errorString()); -- return false; -- } -- -- QIODevice* xmlDevice = nullptr; -- QScopedPointer ioCompressor; -- -- if (db->compressionAlgorithm() == Database::CompressionNone) { -- xmlDevice = &hashedStream; -- } else { -- ioCompressor.reset(new QtIOCompressor(&hashedStream)); -- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); -- if (!ioCompressor->open(QIODevice::ReadOnly)) { -- raiseError(ioCompressor->errorString()); -- return false; -- } -- xmlDevice = ioCompressor.data(); -- } -- -- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::Salsa20); -- if (!randomStream.init(m_protectedStreamKey)) { -- raiseError(randomStream.errorString()); -- return false; -- } -- -- Q_ASSERT(xmlDevice); -- -- KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_3_1); -- xmlReader.readDatabase(xmlDevice, db, &randomStream); -- -- if (xmlReader.hasError()) { -- raiseError(xmlReader.errorString()); -- return false; -- } -- -- Q_ASSERT(!xmlReader.headerHash().isEmpty() || m_kdbxVersion < KeePass2::FILE_VERSION_3_1); -- -- if (!xmlReader.headerHash().isEmpty()) { -- QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); -- if (headerHash != xmlReader.headerHash()) { -- raiseError(tr("Header doesn't match hash")); -- return false; -- } -- } -- -- return true; --} -- --bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream, Database* db) --{ -- Q_UNUSED(db); -- -- QByteArray fieldIDArray = headerStream.read(1); -- if (fieldIDArray.size() != 1) { -- raiseError(tr("Invalid header id size")); -- return false; -- } -- char fieldID = fieldIDArray.at(0); -- -- bool ok; -- auto fieldLen = Endian::readSizedInt(&headerStream, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid header field length")); -- return false; -- } -- -- QByteArray fieldData; -- if (fieldLen != 0) { -- fieldData = headerStream.read(fieldLen); -- if (fieldData.size() != fieldLen) { -- raiseError(tr("Invalid header data length")); -- return false; -- } -- } -- -- bool headerEnd = false; -- switch (static_cast(fieldID)) { -- case KeePass2::HeaderFieldID::EndOfHeader: -- headerEnd = true; -- break; -- -- case KeePass2::HeaderFieldID::CipherID: -- setCipher(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::CompressionFlags: -- setCompressionFlags(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::MasterSeed: -- setMasterSeed(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::TransformSeed: -- setTransformSeed(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::TransformRounds: -- setTransformRounds(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::EncryptionIV: -- setEncryptionIV(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::ProtectedStreamKey: -- setProtectedStreamKey(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::StreamStartBytes: -- setStreamStartBytes(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::InnerRandomStreamID: -- setInnerRandomStreamID(fieldData); -- break; -- -- default: -- qWarning("Unknown header field read: id=%d", fieldID); -- break; -- } -- -- return !headerEnd; --} -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Reader.h keepassxc-2.6.4-patched/src/format/Kdbx3Reader.h ---- keepassxc-2.6.4-orig/src/format/Kdbx3Reader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx3Reader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,41 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDBX3READER_H --#define KEEPASSX_KDBX3READER_H -- --#include "format/KdbxReader.h" -- --/** -- * KDBX 2/3 reader implementation. -- */ --class Kdbx3Reader : public KdbxReader --{ -- Q_DECLARE_TR_FUNCTIONS(Kdbx3Reader) -- --public: -- bool readDatabaseImpl(QIODevice* device, -- const QByteArray& headerData, -- QSharedPointer key, -- Database* db) override; -- --protected: -- bool readHeaderField(StoreDataStream& headerStream, Database* db) override; --}; -- --#endif // KEEPASSX_KDBX3READER_H -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Writer.cpp keepassxc-2.6.4-patched/src/format/Kdbx3Writer.cpp ---- keepassxc-2.6.4-orig/src/format/Kdbx3Writer.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx3Writer.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,164 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdbx3Writer.h" -- --#include -- --#include "core/Database.h" --#include "crypto/CryptoHash.h" --#include "crypto/Random.h" --#include "format/KdbxXmlWriter.h" --#include "format/KeePass2.h" --#include "format/KeePass2RandomStream.h" --#include "streams/HashedBlockStream.h" --#include "streams/QtIOCompressor" --#include "streams/SymmetricCipherStream.h" -- --bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) --{ -- m_error = false; -- m_errorStr.clear(); -- -- QByteArray masterSeed = randomGen()->randomArray(32); -- QByteArray encryptionIV = randomGen()->randomArray(16); -- QByteArray protectedStreamKey = randomGen()->randomArray(32); -- QByteArray startBytes = randomGen()->randomArray(32); -- QByteArray endOfHeader = "\r\n\r\n"; -- -- if (!db->challengeMasterSeed(masterSeed)) { -- raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError())); -- return false; -- } -- -- if (!db->setKey(db->key(), false, true)) { -- raiseError(tr("Unable to calculate database key")); -- return false; -- } -- -- // generate transformed database key -- CryptoHash hash(CryptoHash::Sha256); -- hash.addData(masterSeed); -- hash.addData(db->challengeResponseKey()); -- Q_ASSERT(!db->transformedDatabaseKey().isEmpty()); -- hash.addData(db->transformedDatabaseKey()); -- QByteArray finalKey = hash.result(); -- -- // write header -- QBuffer header; -- header.open(QIODevice::WriteOnly); -- -- writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); -- -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); -- CHECK_RETURN_FALSE( -- writeHeaderField(&header, -- KeePass2::HeaderFieldID::CompressionFlags, -- Endian::sizedIntToBytes(db->compressionAlgorithm(), KeePass2::BYTEORDER))); -- auto kdf = db->kdf(); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::TransformSeed, kdf->seed())); -- CHECK_RETURN_FALSE(writeHeaderField(&header, -- KeePass2::HeaderFieldID::TransformRounds, -- Endian::sizedIntToBytes(kdf->rounds(), KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); -- CHECK_RETURN_FALSE( -- writeHeaderField(&header, KeePass2::HeaderFieldID::ProtectedStreamKey, protectedStreamKey)); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::StreamStartBytes, startBytes)); -- CHECK_RETURN_FALSE(writeHeaderField( -- &header, -- KeePass2::HeaderFieldID::InnerRandomStreamID, -- Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::Salsa20), -- KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); -- header.close(); -- -- // write header data -- CHECK_RETURN_FALSE(writeData(device, header.data())); -- -- // hash header -- const QByteArray headerHash = CryptoHash::hash(header.data(), CryptoHash::Sha256); -- -- // write cipher stream -- SymmetricCipher::Algorithm algo = SymmetricCipher::cipherToAlgorithm(db->cipher()); -- SymmetricCipherStream cipherStream(device, algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt); -- cipherStream.init(finalKey, encryptionIV); -- if (!cipherStream.open(QIODevice::WriteOnly)) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- CHECK_RETURN_FALSE(writeData(&cipherStream, startBytes)); -- -- HashedBlockStream hashedStream(&cipherStream); -- if (!hashedStream.open(QIODevice::WriteOnly)) { -- raiseError(hashedStream.errorString()); -- return false; -- } -- -- QIODevice* outputDevice = nullptr; -- QScopedPointer ioCompressor; -- -- if (db->compressionAlgorithm() == Database::CompressionNone) { -- outputDevice = &hashedStream; -- } else { -- ioCompressor.reset(new QtIOCompressor(&hashedStream)); -- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); -- if (!ioCompressor->open(QIODevice::WriteOnly)) { -- raiseError(ioCompressor->errorString()); -- return false; -- } -- outputDevice = ioCompressor.data(); -- } -- -- Q_ASSERT(outputDevice); -- -- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::Salsa20); -- if (!randomStream.init(protectedStreamKey)) { -- raiseError(randomStream.errorString()); -- return false; -- } -- -- KdbxXmlWriter xmlWriter(formatVersion()); -- xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); -- -- // Explicitly close/reset streams so they are flushed and we can detect -- // errors. QIODevice::close() resets errorString() etc. -- if (ioCompressor) { -- ioCompressor->close(); -- } -- if (!hashedStream.reset()) { -- raiseError(hashedStream.errorString()); -- return false; -- } -- if (!cipherStream.reset()) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- -- if (xmlWriter.hasError()) { -- raiseError(xmlWriter.errorString()); -- return false; -- } -- -- return true; --} -- --quint32 Kdbx3Writer::formatVersion() --{ -- return KeePass2::FILE_VERSION_3_1; --} -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Writer.h keepassxc-2.6.4-patched/src/format/Kdbx3Writer.h ---- keepassxc-2.6.4-orig/src/format/Kdbx3Writer.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx3Writer.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDBX3WRITER_H --#define KEEPASSX_KDBX3WRITER_H -- --#include "KdbxWriter.h" -- --/** -- * KDBX2/3 writer implementation. -- */ --class Kdbx3Writer : public KdbxWriter --{ -- Q_DECLARE_TR_FUNCTIONS(Kdbx3Writer) -- --public: -- bool writeDatabase(QIODevice* device, Database* db) override; -- quint32 formatVersion() override; --}; -- --#endif // KEEPASSX_KDBX3WRITER_H -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Reader.cpp keepassxc-2.6.4-patched/src/format/Kdbx4Reader.cpp ---- keepassxc-2.6.4-orig/src/format/Kdbx4Reader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx4Reader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,424 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdbx4Reader.h" -- --#include -- --#include "core/AsyncTask.h" --#include "core/Endian.h" --#include "core/Group.h" --#include "crypto/CryptoHash.h" --#include "format/KdbxXmlReader.h" --#include "format/KeePass2RandomStream.h" --#include "streams/HmacBlockStream.h" --#include "streams/QtIOCompressor" --#include "streams/SymmetricCipherStream.h" -- --bool Kdbx4Reader::readDatabaseImpl(QIODevice* device, -- const QByteArray& headerData, -- QSharedPointer key, -- Database* db) --{ -- Q_ASSERT(m_kdbxVersion == KeePass2::FILE_VERSION_4); -- -- m_binaryPool.clear(); -- -- if (hasError()) { -- return false; -- } -- -- // check if all required headers were present -- if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || db->cipher().isNull()) { -- raiseError(tr("missing database headers")); -- return false; -- } -- -- bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false, false); }); -- if (!ok) { -- raiseError(tr("Unable to calculate database key: %1").arg(db->keyError())); -- return false; -- } -- -- CryptoHash hash(CryptoHash::Sha256); -- hash.addData(m_masterSeed); -- hash.addData(db->transformedDatabaseKey()); -- QByteArray finalKey = hash.result(); -- -- QByteArray headerSha256 = device->read(32); -- QByteArray headerHmac = device->read(32); -- if (headerSha256.size() != 32 || headerHmac.size() != 32) { -- raiseError(tr("Invalid header checksum size")); -- return false; -- } -- if (headerSha256 != CryptoHash::hash(headerData, CryptoHash::Sha256)) { -- raiseError(tr("Header SHA256 mismatch")); -- return false; -- } -- -- // clang-format off -- QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedDatabaseKey()); -- if (headerHmac != CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) { -- raiseError(tr("Invalid credentials were provided, please try again.\n" -- "If this reoccurs, then your database file may be corrupt.") + " " + tr("(HMAC mismatch)")); -- return false; -- } -- HmacBlockStream hmacStream(device, hmacKey); -- if (!hmacStream.open(QIODevice::ReadOnly)) { -- raiseError(hmacStream.errorString()); -- return false; -- } -- -- SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); -- if (cipher == SymmetricCipher::InvalidAlgorithm) { -- raiseError(tr("Unknown cipher")); -- return false; -- } -- SymmetricCipherStream cipherStream(&hmacStream, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); -- if (!cipherStream.init(finalKey, m_encryptionIV)) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- if (!cipherStream.open(QIODevice::ReadOnly)) { -- raiseError(cipherStream.errorString()); -- return false; -- } -- // clang-format on -- -- QIODevice* xmlDevice = nullptr; -- QScopedPointer ioCompressor; -- -- if (db->compressionAlgorithm() == Database::CompressionNone) { -- xmlDevice = &cipherStream; -- } else { -- ioCompressor.reset(new QtIOCompressor(&cipherStream)); -- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); -- if (!ioCompressor->open(QIODevice::ReadOnly)) { -- raiseError(ioCompressor->errorString()); -- return false; -- } -- xmlDevice = ioCompressor.data(); -- } -- -- while (readInnerHeaderField(xmlDevice) && !hasError()) { -- } -- -- if (hasError()) { -- return false; -- } -- -- KeePass2RandomStream randomStream(m_irsAlgo); -- if (!randomStream.init(m_protectedStreamKey)) { -- raiseError(randomStream.errorString()); -- return false; -- } -- -- Q_ASSERT(xmlDevice); -- -- KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_4, binaryPool()); -- xmlReader.readDatabase(xmlDevice, db, &randomStream); -- -- if (xmlReader.hasError()) { -- raiseError(xmlReader.errorString()); -- return false; -- } -- -- return true; --} -- --bool Kdbx4Reader::readHeaderField(StoreDataStream& device, Database* db) --{ -- QByteArray fieldIDArray = device.read(1); -- if (fieldIDArray.size() != 1) { -- raiseError(tr("Invalid header id size")); -- return false; -- } -- char fieldID = fieldIDArray.at(0); -- -- bool ok; -- auto fieldLen = Endian::readSizedInt(&device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid header field length")); -- return false; -- } -- -- QByteArray fieldData; -- if (fieldLen != 0) { -- fieldData = device.read(fieldLen); -- if (static_cast(fieldData.size()) != fieldLen) { -- raiseError(tr("Invalid header data length")); -- return false; -- } -- } -- -- switch (static_cast(fieldID)) { -- case KeePass2::HeaderFieldID::EndOfHeader: -- return false; -- -- case KeePass2::HeaderFieldID::CipherID: -- setCipher(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::CompressionFlags: -- setCompressionFlags(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::MasterSeed: -- setMasterSeed(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::EncryptionIV: -- setEncryptionIV(fieldData); -- break; -- -- case KeePass2::HeaderFieldID::KdfParameters: { -- QBuffer bufIoDevice(&fieldData); -- if (!bufIoDevice.open(QIODevice::ReadOnly)) { -- raiseError(tr("Failed to open buffer for KDF parameters in header")); -- return false; -- } -- QVariantMap kdfParams = readVariantMap(&bufIoDevice); -- QSharedPointer kdf = KeePass2::kdfFromParameters(kdfParams); -- if (!kdf) { -- raiseError(tr("Unsupported key derivation function (KDF) or invalid parameters")); -- return false; -- } -- db->setKdf(kdf); -- break; -- } -- -- case KeePass2::HeaderFieldID::PublicCustomData: { -- QBuffer variantBuffer; -- variantBuffer.setBuffer(&fieldData); -- variantBuffer.open(QBuffer::ReadOnly); -- QVariantMap data = readVariantMap(&variantBuffer); -- db->setPublicCustomData(data); -- break; -- } -- -- case KeePass2::HeaderFieldID::ProtectedStreamKey: -- case KeePass2::HeaderFieldID::TransformRounds: -- case KeePass2::HeaderFieldID::TransformSeed: -- case KeePass2::HeaderFieldID::StreamStartBytes: -- case KeePass2::HeaderFieldID::InnerRandomStreamID: -- raiseError(tr("Legacy header fields found in KDBX4 file.")); -- return false; -- -- default: -- qWarning("Unknown header field read: id=%d", fieldID); -- break; -- } -- -- return true; --} -- --/** -- * Helper method for reading KDBX4 inner header fields. -- * -- * @param device input device -- * @return true if there are more inner header fields -- */ --bool Kdbx4Reader::readInnerHeaderField(QIODevice* device) --{ -- QByteArray fieldIDArray = device->read(1); -- if (fieldIDArray.size() != 1) { -- raiseError(tr("Invalid inner header id size")); -- return false; -- } -- auto fieldID = static_cast(fieldIDArray.at(0)); -- -- bool ok; -- auto fieldLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid inner header field length")); -- return false; -- } -- -- QByteArray fieldData; -- if (fieldLen != 0) { -- fieldData = device->read(fieldLen); -- if (static_cast(fieldData.size()) != fieldLen) { -- raiseError(tr("Invalid header data length")); -- return false; -- } -- } -- -- switch (fieldID) { -- case KeePass2::InnerHeaderFieldID::End: -- return false; -- -- case KeePass2::InnerHeaderFieldID::InnerRandomStreamID: -- setInnerRandomStreamID(fieldData); -- break; -- -- case KeePass2::InnerHeaderFieldID::InnerRandomStreamKey: -- setProtectedStreamKey(fieldData); -- break; -- -- case KeePass2::InnerHeaderFieldID::Binary: { -- if (fieldLen < 1) { -- raiseError(tr("Invalid inner header binary size")); -- return false; -- } -- auto data = fieldData.mid(1); -- m_binaryPool.insert(QString::number(m_binaryPool.size()), data); -- break; -- } -- } -- -- return true; --} -- --/** -- * Helper method for reading a serialized variant map. -- * -- * @param device input device -- * @return de-serialized variant map -- */ --QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device) --{ -- bool ok; -- quint16 version = -- Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok) & KeePass2::VARIANTMAP_CRITICAL_MASK; -- quint16 maxVersion = KeePass2::VARIANTMAP_VERSION & KeePass2::VARIANTMAP_CRITICAL_MASK; -- if (!ok || (version > maxVersion)) { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Unsupported KeePass variant map version.")); -- return {}; -- } -- -- QVariantMap vm; -- QByteArray fieldTypeArray; -- KeePass2::VariantMapFieldType fieldType = KeePass2::VariantMapFieldType::End; -- while (((fieldTypeArray = device->read(1)).size() == 1) -- && ((fieldType = static_cast(fieldTypeArray.at(0))) -- != KeePass2::VariantMapFieldType::End)) { -- auto nameLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map entry name length")); -- return {}; -- } -- QByteArray nameBytes; -- if (nameLen != 0) { -- nameBytes = device->read(nameLen); -- if (static_cast(nameBytes.size()) != nameLen) { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map entry name data")); -- return {}; -- } -- } -- QString name = QString::fromUtf8(nameBytes); -- -- auto valueLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map entry value length")); -- return {}; -- } -- QByteArray valueBytes; -- if (valueLen != 0) { -- valueBytes = device->read(valueLen); -- if (static_cast(valueBytes.size()) != valueLen) { -- //: Translation comment: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map entry value data")); -- return {}; -- } -- } -- -- switch (fieldType) { -- case KeePass2::VariantMapFieldType::Bool: -- if (valueLen == 1) { -- vm.insert(name, QVariant(valueBytes.at(0) != 0)); -- } else { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map Bool entry value length")); -- return {}; -- } -- break; -- -- case KeePass2::VariantMapFieldType::Int32: -- if (valueLen == 4) { -- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); -- } else { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map Int32 entry value length")); -- return {}; -- } -- break; -- -- case KeePass2::VariantMapFieldType::UInt32: -- if (valueLen == 4) { -- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); -- } else { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map UInt32 entry value length")); -- return {}; -- } -- break; -- -- case KeePass2::VariantMapFieldType::Int64: -- if (valueLen == 8) { -- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); -- } else { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map Int64 entry value length")); -- return {}; -- } -- break; -- -- case KeePass2::VariantMapFieldType::UInt64: -- if (valueLen == 8) { -- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); -- } else { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map UInt64 entry value length")); -- return {}; -- } -- break; -- -- case KeePass2::VariantMapFieldType::String: -- vm.insert(name, QVariant(QString::fromUtf8(valueBytes))); -- break; -- -- case KeePass2::VariantMapFieldType::ByteArray: -- vm.insert(name, QVariant(valueBytes)); -- break; -- -- default: -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map entry type")); -- return {}; -- } -- } -- -- if (fieldTypeArray.size() != 1) { -- //: Translation: variant map = data structure for storing meta data -- raiseError(tr("Invalid variant map field type size")); -- return {}; -- } -- -- return vm; --} -- --/** -- * @return mapping from attachment keys to binary data -- */ --QHash Kdbx4Reader::binaryPool() const --{ -- return m_binaryPool; --} -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Reader.h keepassxc-2.6.4-patched/src/format/Kdbx4Reader.h ---- keepassxc-2.6.4-orig/src/format/Kdbx4Reader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx4Reader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,49 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDBX4READER_H --#define KEEPASSX_KDBX4READER_H -- --#include "format/KdbxReader.h" -- --#include -- --/** -- * KDBX4 reader implementation. -- */ --class Kdbx4Reader : public KdbxReader --{ -- Q_DECLARE_TR_FUNCTIONS(Kdbx4Reader) -- --public: -- bool readDatabaseImpl(QIODevice* device, -- const QByteArray& headerData, -- QSharedPointer key, -- Database* db) override; -- QHash binaryPool() const; -- --protected: -- bool readHeaderField(StoreDataStream& headerStream, Database* db) override; -- --private: -- bool readInnerHeaderField(QIODevice* device); -- QVariantMap readVariantMap(QIODevice* device); -- -- QHash m_binaryPool; --}; -- --#endif // KEEPASSX_KDBX4READER_H -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Writer.cpp keepassxc-2.6.4-patched/src/format/Kdbx4Writer.cpp ---- keepassxc-2.6.4-orig/src/format/Kdbx4Writer.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx4Writer.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,318 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Kdbx4Writer.h" -- --#include --#include -- --#include "core/CustomData.h" --#include "core/Database.h" --#include "core/Metadata.h" --#include "crypto/CryptoHash.h" --#include "crypto/Random.h" --#include "format/KdbxXmlWriter.h" --#include "format/KeePass2RandomStream.h" --#include "streams/HmacBlockStream.h" --#include "streams/QtIOCompressor" --#include "streams/SymmetricCipherStream.h" -- --bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) --{ -- m_error = false; -- m_errorStr.clear(); -- -- SymmetricCipher::Algorithm algo = SymmetricCipher::cipherToAlgorithm(db->cipher()); -- if (algo == SymmetricCipher::InvalidAlgorithm) { -- raiseError(tr("Invalid symmetric cipher algorithm.")); -- return false; -- } -- int ivSize = SymmetricCipher::algorithmIvSize(algo); -- if (ivSize < 0) { -- raiseError(tr("Invalid symmetric cipher IV size.", "IV = Initialization Vector for symmetric cipher")); -- return false; -- } -- -- QByteArray masterSeed = randomGen()->randomArray(32); -- QByteArray encryptionIV = randomGen()->randomArray(ivSize); -- QByteArray protectedStreamKey = randomGen()->randomArray(64); -- QByteArray endOfHeader = "\r\n\r\n"; -- -- if (!db->setKey(db->key(), false, true)) { -- raiseError(tr("Unable to calculate database key: %1").arg(db->keyError())); -- return false; -- } -- -- // generate transformed database key -- CryptoHash hash(CryptoHash::Sha256); -- hash.addData(masterSeed); -- Q_ASSERT(!db->transformedDatabaseKey().isEmpty()); -- hash.addData(db->transformedDatabaseKey()); -- QByteArray finalKey = hash.result(); -- -- // write header -- QByteArray headerData; -- { -- QBuffer header; -- header.open(QIODevice::WriteOnly); -- -- writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); -- -- CHECK_RETURN_FALSE( -- writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); -- CHECK_RETURN_FALSE(writeHeaderField( -- &header, -- KeePass2::HeaderFieldID::CompressionFlags, -- Endian::sizedIntToBytes(static_cast(db->compressionAlgorithm()), KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); -- -- // convert current Kdf to basic parameters -- QVariantMap kdfParams = KeePass2::kdfToParameters(db->kdf()); -- QByteArray kdfParamBytes; -- if (!serializeVariantMap(kdfParams, kdfParamBytes)) { -- //: Translation comment: variant map = data structure for storing meta data -- raiseError(tr("Failed to serialize KDF parameters variant map")); -- return false; -- } -- -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::KdfParameters, kdfParamBytes)); -- QVariantMap publicCustomData = db->publicCustomData(); -- if (!publicCustomData.isEmpty()) { -- QByteArray serialized; -- serializeVariantMap(publicCustomData, serialized); -- CHECK_RETURN_FALSE( -- writeHeaderField(&header, KeePass2::HeaderFieldID::PublicCustomData, serialized)); -- } -- -- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); -- header.close(); -- headerData = header.data(); -- } -- CHECK_RETURN_FALSE(writeData(device, headerData)); -- -- // hash header -- QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); -- -- // write HMAC-authenticated cipher stream -- QByteArray hmacKey = KeePass2::hmacKey(masterSeed, db->transformedDatabaseKey()); -- QByteArray headerHmac = -- CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256); -- CHECK_RETURN_FALSE(writeData(device, headerHash)); -- CHECK_RETURN_FALSE(writeData(device, headerHmac)); -- -- QScopedPointer hmacBlockStream; -- QScopedPointer cipherStream; -- -- hmacBlockStream.reset(new HmacBlockStream(device, hmacKey)); -- if (!hmacBlockStream->open(QIODevice::WriteOnly)) { -- raiseError(hmacBlockStream->errorString()); -- return false; -- } -- -- cipherStream.reset(new SymmetricCipherStream( -- hmacBlockStream.data(), algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt)); -- -- if (!cipherStream->init(finalKey, encryptionIV)) { -- raiseError(cipherStream->errorString()); -- return false; -- } -- if (!cipherStream->open(QIODevice::WriteOnly)) { -- raiseError(cipherStream->errorString()); -- return false; -- } -- -- QIODevice* outputDevice = nullptr; -- QScopedPointer ioCompressor; -- -- if (db->compressionAlgorithm() == Database::CompressionNone) { -- outputDevice = cipherStream.data(); -- } else { -- ioCompressor.reset(new QtIOCompressor(cipherStream.data())); -- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); -- if (!ioCompressor->open(QIODevice::WriteOnly)) { -- raiseError(ioCompressor->errorString()); -- return false; -- } -- outputDevice = ioCompressor.data(); -- } -- -- Q_ASSERT(outputDevice); -- -- CHECK_RETURN_FALSE(writeInnerHeaderField( -- outputDevice, -- KeePass2::InnerHeaderFieldID::InnerRandomStreamID, -- Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20), KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE( -- writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamKey, protectedStreamKey)); -- -- // Write attachments to the inner header -- writeAttachments(outputDevice, db); -- -- CHECK_RETURN_FALSE(writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::End, QByteArray())); -- -- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::ChaCha20); -- if (!randomStream.init(protectedStreamKey)) { -- raiseError(randomStream.errorString()); -- return false; -- } -- -- KdbxXmlWriter xmlWriter(formatVersion()); -- xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); -- -- // Explicitly close/reset streams so they are flushed and we can detect -- // errors. QIODevice::close() resets errorString() etc. -- if (ioCompressor) { -- ioCompressor->close(); -- } -- if (!cipherStream->reset()) { -- raiseError(cipherStream->errorString()); -- return false; -- } -- if (!hmacBlockStream->reset()) { -- raiseError(hmacBlockStream->errorString()); -- return false; -- } -- -- if (xmlWriter.hasError()) { -- raiseError(xmlWriter.errorString()); -- return false; -- } -- -- return true; --} -- --/** -- * Write KDBX4 inner header field. -- * -- * @param device output device -- * @param fieldId field identifier -- * @param data header payload -- * @return true on success -- */ --bool Kdbx4Writer::writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data) --{ -- QByteArray fieldIdArr; -- fieldIdArr[0] = static_cast(fieldId); -- CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); -- CHECK_RETURN_FALSE( -- writeData(device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeData(device, data)); -- -- return true; --} -- --void Kdbx4Writer::writeAttachments(QIODevice* device, Database* db) --{ -- const QList allEntries = db->rootGroup()->entriesRecursive(true); -- QSet writtenAttachments; -- -- for (Entry* entry : allEntries) { -- const QList attachmentKeys = entry->attachments()->keys(); -- for (const QString& key : attachmentKeys) { -- QByteArray data("\x01"); -- data.append(entry->attachments()->value(key)); -- -- if (writtenAttachments.contains(data)) { -- continue; -- } -- -- writeInnerHeaderField(device, KeePass2::InnerHeaderFieldID::Binary, data); -- writtenAttachments.insert(data); -- } -- } --} -- --/** -- * Serialize variant map to byte array. -- * -- * @param map input variant map -- * @param outputBytes output byte array -- * @return true on success -- */ --bool Kdbx4Writer::serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes) --{ -- QBuffer buf(&outputBytes); -- buf.open(QIODevice::WriteOnly); -- CHECK_RETURN_FALSE(buf.write(Endian::sizedIntToBytes(KeePass2::VARIANTMAP_VERSION, KeePass2::BYTEORDER)) == 2); -- -- bool ok; -- QList keys = map.keys(); -- for (const auto& k : keys) { -- KeePass2::VariantMapFieldType fieldType; -- QByteArray data; -- QVariant v = map.value(k); -- switch (static_cast(v.type())) { -- case QMetaType::Type::Int: -- fieldType = KeePass2::VariantMapFieldType::Int32; -- data = Endian::sizedIntToBytes(v.toInt(&ok), KeePass2::BYTEORDER); -- CHECK_RETURN_FALSE(ok); -- break; -- case QMetaType::Type::UInt: -- fieldType = KeePass2::VariantMapFieldType::UInt32; -- data = Endian::sizedIntToBytes(v.toUInt(&ok), KeePass2::BYTEORDER); -- CHECK_RETURN_FALSE(ok); -- break; -- case QMetaType::Type::LongLong: -- fieldType = KeePass2::VariantMapFieldType::Int64; -- data = Endian::sizedIntToBytes(v.toLongLong(&ok), KeePass2::BYTEORDER); -- CHECK_RETURN_FALSE(ok); -- break; -- case QMetaType::Type::ULongLong: -- fieldType = KeePass2::VariantMapFieldType::UInt64; -- data = Endian::sizedIntToBytes(v.toULongLong(&ok), KeePass2::BYTEORDER); -- CHECK_RETURN_FALSE(ok); -- break; -- case QMetaType::Type::QString: -- fieldType = KeePass2::VariantMapFieldType::String; -- data = v.toString().toUtf8(); -- break; -- case QMetaType::Type::Bool: -- fieldType = KeePass2::VariantMapFieldType::Bool; -- data = QByteArray(1, static_cast(v.toBool() ? '\1' : '\0')); -- break; -- case QMetaType::Type::QByteArray: -- fieldType = KeePass2::VariantMapFieldType::ByteArray; -- data = v.toByteArray(); -- break; -- default: -- qWarning("Unknown object type %d in QVariantMap", v.type()); -- return false; -- } -- QByteArray typeBytes; -- typeBytes[0] = static_cast(fieldType); -- QByteArray nameBytes = k.toUtf8(); -- QByteArray nameLenBytes = Endian::sizedIntToBytes(nameBytes.size(), KeePass2::BYTEORDER); -- QByteArray dataLenBytes = Endian::sizedIntToBytes(data.size(), KeePass2::BYTEORDER); -- -- CHECK_RETURN_FALSE(buf.write(typeBytes) == 1); -- CHECK_RETURN_FALSE(buf.write(nameLenBytes) == 4); -- CHECK_RETURN_FALSE(buf.write(nameBytes) == nameBytes.size()); -- CHECK_RETURN_FALSE(buf.write(dataLenBytes) == 4); -- CHECK_RETURN_FALSE(buf.write(data) == data.size()); -- } -- -- QByteArray endBytes; -- endBytes[0] = static_cast(KeePass2::VariantMapFieldType::End); -- CHECK_RETURN_FALSE(buf.write(endBytes) == 1); -- return true; --} -- --quint32 Kdbx4Writer::formatVersion() --{ -- return KeePass2::FILE_VERSION_4; --} -diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Writer.h keepassxc-2.6.4-patched/src/format/Kdbx4Writer.h ---- keepassxc-2.6.4-orig/src/format/Kdbx4Writer.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/Kdbx4Writer.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,40 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDBX4WRITER_H --#define KEEPASSX_KDBX4WRITER_H -- --#include "KdbxWriter.h" -- --/** -- * KDBX4 writer implementation. -- */ --class Kdbx4Writer : public KdbxWriter --{ -- Q_DECLARE_TR_FUNCTIONS(Kdbx4Writer) -- --public: -- bool writeDatabase(QIODevice* device, Database* db) override; -- quint32 formatVersion() override; -- --private: -- bool writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data); -- void writeAttachments(QIODevice* device, Database* db); -- static bool serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes); --}; -- --#endif // KEEPASSX_KDBX4WRITER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxReader.cpp keepassxc-2.6.4-patched/src/format/KdbxReader.cpp ---- keepassxc-2.6.4-orig/src/format/KdbxReader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxReader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,258 +0,0 @@ --#include -- --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KdbxReader.h" --#include "core/Database.h" --#include "core/Endian.h" -- --#include -- --#define UUID_LENGTH 16 -- --/** -- * Read KDBX magic header numbers from a device. -- * -- * @param device input device -- * @param sig1 KDBX signature 1 -- * @param sig2 KDBX signature 2 -- * @param version KDBX version -- * @return true if magic numbers were read successfully -- */ --bool KdbxReader::readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig2, quint32& version) --{ -- bool ok; -- sig1 = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- return false; -- } -- -- sig2 = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- if (!ok) { -- return false; -- } -- -- version = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); -- -- return ok; --} -- --/** -- * Read KDBX stream from device. -- * The device will automatically be reset to 0 before reading. -- * -- * @param device input device -- * @param key database encryption composite key -- * @param db database to read into -- * @return true on success -- */ --bool KdbxReader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) --{ -- device->seek(0); -- -- m_db = db; -- m_masterSeed.clear(); -- m_encryptionIV.clear(); -- m_streamStartBytes.clear(); -- m_protectedStreamKey.clear(); -- -- StoreDataStream headerStream(device); -- headerStream.open(QIODevice::ReadOnly); -- -- // read KDBX magic numbers -- quint32 sig1, sig2; -- if (!readMagicNumbers(&headerStream, sig1, sig2, m_kdbxVersion)) { -- return false; -- } -- m_kdbxSignature = qMakePair(sig1, sig2); -- -- // mask out minor version -- m_kdbxVersion &= KeePass2::FILE_VERSION_CRITICAL_MASK; -- -- // read header fields -- while (readHeaderField(headerStream, m_db) && !hasError()) { -- } -- -- headerStream.close(); -- -- if (hasError()) { -- return false; -- } -- -- // read payload -- return readDatabaseImpl(device, headerStream.storedData(), std::move(key), db); --} -- --bool KdbxReader::hasError() const --{ -- return m_error; --} -- --QString KdbxReader::errorString() const --{ -- return m_errorStr; --} -- --KeePass2::ProtectedStreamAlgo KdbxReader::protectedStreamAlgo() const --{ -- return m_irsAlgo; --} -- --/** -- * @param data stream cipher UUID as bytes -- */ --void KdbxReader::setCipher(const QByteArray& data) --{ -- if (data.size() != UUID_LENGTH) { -- raiseError(tr("Invalid cipher uuid length: %1 (length=%2)").arg(QString(data)).arg(data.size())); -- return; -- } -- -- QUuid uuid = QUuid::fromRfc4122(data); -- if (uuid.isNull()) { -- raiseError(tr("Unable to parse UUID: %1").arg(QString(data))); -- return; -- } -- -- if (SymmetricCipher::cipherToAlgorithm(uuid) == SymmetricCipher::InvalidAlgorithm) { -- raiseError(tr("Unsupported cipher")); -- return; -- } -- m_db->setCipher(uuid); --} -- --/** -- * @param data compression flags as bytes -- */ --void KdbxReader::setCompressionFlags(const QByteArray& data) --{ -- if (data.size() != 4) { -- raiseError(tr("Invalid compression flags length")); -- return; -- } -- auto id = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); -- -- if (id > Database::CompressionAlgorithmMax) { -- raiseError(tr("Unsupported compression algorithm")); -- return; -- } -- m_db->setCompressionAlgorithm(static_cast(id)); --} -- --/** -- * @param data master seed as bytes -- */ --void KdbxReader::setMasterSeed(const QByteArray& data) --{ -- if (data.size() != 32) { -- raiseError(tr("Invalid master seed size")); -- return; -- } -- m_masterSeed = data; --} -- --/** -- * @param data KDF seed as bytes -- */ --void KdbxReader::setTransformSeed(const QByteArray& data) --{ -- if (data.size() != 32) { -- raiseError(tr("Invalid transform seed size")); -- return; -- } -- -- auto kdf = m_db->kdf(); -- if (!kdf.isNull()) { -- kdf->setSeed(data); -- } --} -- --/** -- * @param data KDF transform rounds as bytes -- */ --void KdbxReader::setTransformRounds(const QByteArray& data) --{ -- if (data.size() != 8) { -- raiseError(tr("Invalid transform rounds size")); -- return; -- } -- -- auto rounds = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); -- auto kdf = m_db->kdf(); -- if (!kdf.isNull()) { -- kdf->setRounds(static_cast(rounds)); -- } --} -- --/** -- * @param data cipher stream IV as bytes -- */ --void KdbxReader::setEncryptionIV(const QByteArray& data) --{ -- m_encryptionIV = data; --} -- --/** -- * @param data key for random (inner) stream as bytes -- */ --void KdbxReader::setProtectedStreamKey(const QByteArray& data) --{ -- m_protectedStreamKey = data; --} -- --/** -- * @param data start bytes for cipher stream -- */ --void KdbxReader::setStreamStartBytes(const QByteArray& data) --{ -- if (data.size() != 32) { -- raiseError(tr("Invalid start bytes size")); -- return; -- } -- m_streamStartBytes = data; --} -- --/** -- * @param data id of inner cipher stream algorithm -- */ --void KdbxReader::setInnerRandomStreamID(const QByteArray& data) --{ -- if (data.size() != 4) { -- raiseError(tr("Invalid random stream id size")); -- return; -- } -- auto id = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); -- KeePass2::ProtectedStreamAlgo irsAlgo = KeePass2::idToProtectedStreamAlgo(id); -- if (irsAlgo == KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo -- || irsAlgo == KeePass2::ProtectedStreamAlgo::ArcFourVariant) { -- raiseError(tr("Invalid inner random stream cipher")); -- return; -- } -- m_irsAlgo = irsAlgo; --} -- --/** -- * Raise an error. Use in case of an unexpected read error. -- * -- * @param errorMessage error message -- */ --void KdbxReader::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxReader.h keepassxc-2.6.4-patched/src/format/KdbxReader.h ---- keepassxc-2.6.4-orig/src/format/KdbxReader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxReader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,102 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_KDBXREADER_H --#define KEEPASSXC_KDBXREADER_H -- --#include "KeePass2.h" --#include "keys/CompositeKey.h" --#include "streams/StoreDataStream.h" -- --#include --#include -- --class Database; --class QIODevice; -- --/** -- * Abstract KDBX reader base class. -- */ --class KdbxReader --{ -- Q_DECLARE_TR_FUNCTIONS(KdbxReader) -- --public: -- KdbxReader() = default; -- virtual ~KdbxReader() = default; -- -- static bool readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig2, quint32& version); -- bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); -- -- bool hasError() const; -- QString errorString() const; -- -- KeePass2::ProtectedStreamAlgo protectedStreamAlgo() const; -- --protected: -- /** -- * Concrete reader implementation for reading database from device. -- * -- * @param device input device at the payload starting position -- * @param KDBX header data as bytes -- * @param key database encryption composite key -- * @param db database to read into -- * @return true on success -- */ -- virtual bool readDatabaseImpl(QIODevice* device, -- const QByteArray& headerData, -- QSharedPointer key, -- Database* db) = 0; -- -- /** -- * Read next header field from stream. -- * -- * @param headerStream input header stream -- * @param database to read header field for -- * @return true if there are more header fields -- */ -- virtual bool readHeaderField(StoreDataStream& headerStream, Database* db) = 0; -- -- virtual void setCipher(const QByteArray& data); -- virtual void setCompressionFlags(const QByteArray& data); -- virtual void setMasterSeed(const QByteArray& data); -- virtual void setTransformSeed(const QByteArray& data); -- virtual void setTransformRounds(const QByteArray& data); -- virtual void setEncryptionIV(const QByteArray& data); -- virtual void setProtectedStreamKey(const QByteArray& data); -- virtual void setStreamStartBytes(const QByteArray& data); -- virtual void setInnerRandomStreamID(const QByteArray& data); -- -- void raiseError(const QString& errorMessage); -- -- quint32 m_kdbxVersion = 0; -- -- QByteArray m_masterSeed; -- QByteArray m_encryptionIV; -- QByteArray m_streamStartBytes; -- QByteArray m_protectedStreamKey; -- KeePass2::ProtectedStreamAlgo m_irsAlgo = KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo; -- --private: -- QPair m_kdbxSignature; -- QPointer m_db; -- -- bool m_error = false; -- QString m_errorStr = ""; --}; -- --#endif // KEEPASSXC_KDBXREADER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxWriter.cpp keepassxc-2.6.4-patched/src/format/KdbxWriter.cpp ---- keepassxc-2.6.4-orig/src/format/KdbxWriter.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxWriter.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KdbxWriter.h" -- --#include -- --#include "format/KdbxXmlWriter.h" -- --bool KdbxWriter::hasError() const --{ -- return m_error; --} -- --QString KdbxWriter::errorString() const --{ -- return m_errorStr; --} -- --/** -- * Write KDBX magic header numbers to a device. -- * -- * @param device output device -- * @param sig1 KDBX signature 1 -- * @param sig2 KDBX signature 2 -- * @param version KDBX version -- * @return true if magic numbers were written successfully -- */ --bool KdbxWriter::writeMagicNumbers(QIODevice* device, quint32 sig1, quint32 sig2, quint32 version) --{ -- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(sig1, KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(sig2, KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(version, KeePass2::BYTEORDER))); -- -- return true; --} -- --/** -- * Helper method for writing bytes to the device and raising an error -- * in case of write failure. -- * -- * @param device output device -- * @param data byte contents -- * @return true on success -- */ --bool KdbxWriter::writeData(QIODevice* device, const QByteArray& data) --{ -- if (device->write(data) != data.size()) { -- raiseError(device->errorString()); -- return false; -- } -- return true; --} -- --void KdbxWriter::extractDatabase(QByteArray& xmlOutput, Database* db) --{ -- QBuffer buffer; -- buffer.setBuffer(&xmlOutput); -- buffer.open(QIODevice::WriteOnly); -- KdbxXmlWriter writer(formatVersion()); -- writer.disableInnerStreamProtection(true); -- writer.writeDatabase(&buffer, db); --} -- --/** -- * Raise an error. Use in case of an unexpected write error. -- * -- * @param errorMessage error message -- */ --void KdbxWriter::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxWriter.h keepassxc-2.6.4-patched/src/format/KdbxWriter.h ---- keepassxc-2.6.4-orig/src/format/KdbxWriter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxWriter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_KDBXWRITER_H --#define KEEPASSXC_KDBXWRITER_H -- --#include "KeePass2.h" --#include "core/Endian.h" -- --#include -- --// clang-format off --#define CHECK_RETURN_FALSE(x) if (!(x)) return false; --// clang-format on -- --class QIODevice; --class Database; -- --/** -- * Abstract KDBX writer base class. -- */ --class KdbxWriter --{ -- Q_DECLARE_TR_FUNCTIONS(KdbxWriter) -- --public: -- KdbxWriter() = default; -- virtual ~KdbxWriter() = default; -- -- bool writeMagicNumbers(QIODevice* device, quint32 sig1, quint32 sig2, quint32 version); -- -- /** -- * Write a database to a device in KDBX format. -- * -- * @param device output device -- * @param db source database -- * @return true on success -- */ -- virtual bool writeDatabase(QIODevice* device, Database* db) = 0; -- -- /** -- * Get the database format version for the writer. -- */ -- virtual quint32 formatVersion() = 0; -- -- void extractDatabase(QByteArray& xmlOutput, Database* db); -- -- bool hasError() const; -- QString errorString() const; -- --protected: -- /** -- * Helper method for writing a KDBX header field to a device. -- * -- * @tparam SizedQInt field width -- * @param device output device -- * @param fieldId field identifier -- * @param data field contents -- * @return true on success -- */ -- template -- bool writeHeaderField(QIODevice* device, KeePass2::HeaderFieldID fieldId, const QByteArray& data) -- { -- Q_ASSERT(static_cast(data.size()) < (1ull << (sizeof(SizedQInt) * 8))); -- -- QByteArray fieldIdArr(1, static_cast(fieldId)); -- CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); -- CHECK_RETURN_FALSE(writeData( -- device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); -- CHECK_RETURN_FALSE(writeData(device, data)); -- -- return true; -- } -- -- bool writeData(QIODevice* device, const QByteArray& data); -- void raiseError(const QString& errorMessage); -- -- bool m_error = false; -- QString m_errorStr = ""; --}; -- --#endif // KEEPASSXC_KDBXWRITER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlReader.cpp keepassxc-2.6.4-patched/src/format/KdbxXmlReader.cpp ---- keepassxc-2.6.4-orig/src/format/KdbxXmlReader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxXmlReader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1188 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KdbxXmlReader.h" --#include "KeePass2RandomStream.h" --#include "core/Clock.h" --#include "core/DatabaseIcons.h" --#include "core/Endian.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/Tools.h" --#include "streams/QtIOCompressor" -- --#include --#include --#include -- --#define UUID_LENGTH 16 -- --/** -- * @param version KDBX version -- */ --KdbxXmlReader::KdbxXmlReader(quint32 version) -- : m_kdbxVersion(version) --{ --} -- --/** -- * @param version KDBX version -- * @param binaryPool binary pool -- */ --KdbxXmlReader::KdbxXmlReader(quint32 version, QHash binaryPool) -- : m_kdbxVersion(version) -- , m_binaryPool(std::move(binaryPool)) --{ --} -- --/** -- * Read XML contents from a file into a new database. -- * -- * @param device input file -- * @return pointer to the new database -- */ --QSharedPointer KdbxXmlReader::readDatabase(const QString& filename) --{ -- QFile file(filename); -- file.open(QIODevice::ReadOnly); -- return readDatabase(&file); --} -- --/** -- * Read XML stream from a device into a new database. -- * -- * @param device input device -- * @return pointer to the new database -- */ --QSharedPointer KdbxXmlReader::readDatabase(QIODevice* device) --{ -- auto db = QSharedPointer::create(); -- readDatabase(device, db.data()); -- return db; --} -- --/** -- * Read XML contents from a device into a given database using a \link KeePass2RandomStream. -- * -- * @param device input device -- * @param db database to read into -- * @param randomStream random stream to use for decryption -- */ --void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream) --{ -- m_error = false; -- m_errorStr.clear(); -- -- m_xml.clear(); -- m_xml.setDevice(device); -- -- m_db = db; -- m_meta = m_db->metadata(); -- m_meta->setUpdateDatetime(false); -- -- m_randomStream = randomStream; -- m_headerHash.clear(); -- -- m_tmpParent.reset(new Group()); -- -- bool rootGroupParsed = false; -- -- if (m_xml.hasError()) { -- raiseError(tr("XML parsing failure: %1").arg(m_xml.error())); -- return; -- } -- -- if (m_xml.readNextStartElement() && m_xml.name() == "KeePassFile") { -- rootGroupParsed = parseKeePassFile(); -- } -- -- if (!rootGroupParsed) { -- raiseError(tr("No root group")); -- return; -- } -- -- if (!m_tmpParent->children().isEmpty()) { -- qWarning("KdbxXmlReader::readDatabase: found %d invalid group reference(s)", m_tmpParent->children().size()); -- } -- -- if (!m_tmpParent->entries().isEmpty()) { -- qWarning("KdbxXmlReader::readDatabase: found %d invalid entry reference(s)", m_tmpParent->children().size()); -- } -- -- const QSet poolKeys = asConst(m_binaryPool).keys().toSet(); -- const QSet entryKeys = asConst(m_binaryMap).keys().toSet(); -- const QSet unmappedKeys = entryKeys - poolKeys; -- const QSet unusedKeys = poolKeys - entryKeys; -- -- if (!unmappedKeys.isEmpty()) { -- qWarning("Unmapped keys left."); -- } -- -- for (const QString& key : unusedKeys) { -- qWarning("KdbxXmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); -- } -- -- QHash>::const_iterator i; -- for (i = m_binaryMap.constBegin(); i != m_binaryMap.constEnd(); ++i) { -- const QPair& target = i.value(); -- target.first->attachments()->set(target.second, m_binaryPool[i.key()]); -- } -- -- m_meta->setUpdateDatetime(true); -- -- QHash::const_iterator iGroup; -- for (iGroup = m_groups.constBegin(); iGroup != m_groups.constEnd(); ++iGroup) { -- iGroup.value()->setUpdateTimeinfo(true); -- } -- -- QHash::const_iterator iEntry; -- for (iEntry = m_entries.constBegin(); iEntry != m_entries.constEnd(); ++iEntry) { -- iEntry.value()->setUpdateTimeinfo(true); -- -- const QList historyItems = iEntry.value()->historyItems(); -- for (Entry* histEntry : historyItems) { -- histEntry->setUpdateTimeinfo(true); -- } -- } --} -- --bool KdbxXmlReader::strictMode() const --{ -- return m_strictMode; --} -- --void KdbxXmlReader::setStrictMode(bool strictMode) --{ -- m_strictMode = strictMode; --} -- --bool KdbxXmlReader::hasError() const --{ -- return m_error || m_xml.hasError(); --} -- --QString KdbxXmlReader::errorString() const --{ -- if (m_error) { -- return m_errorStr; -- } -- if (m_xml.hasError()) { -- return tr("XML error:\n%1\nLine %2, column %3") -- .arg(m_xml.errorString()) -- .arg(m_xml.lineNumber()) -- .arg(m_xml.columnNumber()); -- } -- return QString(); --} -- --bool KdbxXmlReader::isTrueValue(const QStringRef& value) --{ -- return value.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0 || value == "1"; --} -- --void KdbxXmlReader::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -- --QByteArray KdbxXmlReader::headerHash() const --{ -- return m_headerHash; --} -- --bool KdbxXmlReader::parseKeePassFile() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "KeePassFile"); -- -- bool rootElementFound = false; -- bool rootParsedSuccessfully = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Meta") { -- parseMeta(); -- continue; -- } -- -- if (m_xml.name() == "Root") { -- if (rootElementFound) { -- rootParsedSuccessfully = false; -- qWarning("Multiple root elements"); -- } else { -- rootParsedSuccessfully = parseRoot(); -- rootElementFound = true; -- } -- continue; -- } -- -- skipCurrentElement(); -- } -- -- return rootParsedSuccessfully; --} -- --void KdbxXmlReader::parseMeta() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Meta"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Generator") { -- m_meta->setGenerator(readString()); -- } else if (m_xml.name() == "HeaderHash") { -- m_headerHash = readBinary(); -- } else if (m_xml.name() == "DatabaseName") { -- m_meta->setName(readString()); -- } else if (m_xml.name() == "DatabaseNameChanged") { -- m_meta->setNameChanged(readDateTime()); -- } else if (m_xml.name() == "DatabaseDescription") { -- m_meta->setDescription(readString()); -- } else if (m_xml.name() == "DatabaseDescriptionChanged") { -- m_meta->setDescriptionChanged(readDateTime()); -- } else if (m_xml.name() == "DefaultUserName") { -- m_meta->setDefaultUserName(readString()); -- } else if (m_xml.name() == "DefaultUserNameChanged") { -- m_meta->setDefaultUserNameChanged(readDateTime()); -- } else if (m_xml.name() == "MaintenanceHistoryDays") { -- m_meta->setMaintenanceHistoryDays(readNumber()); -- } else if (m_xml.name() == "Color") { -- m_meta->setColor(readColor()); -- } else if (m_xml.name() == "MasterKeyChanged") { -- m_meta->setDatabaseKeyChanged(readDateTime()); -- } else if (m_xml.name() == "MasterKeyChangeRec") { -- m_meta->setMasterKeyChangeRec(readNumber()); -- } else if (m_xml.name() == "MasterKeyChangeForce") { -- m_meta->setMasterKeyChangeForce(readNumber()); -- } else if (m_xml.name() == "MemoryProtection") { -- parseMemoryProtection(); -- } else if (m_xml.name() == "CustomIcons") { -- parseCustomIcons(); -- } else if (m_xml.name() == "RecycleBinEnabled") { -- m_meta->setRecycleBinEnabled(readBool()); -- } else if (m_xml.name() == "RecycleBinUUID") { -- m_meta->setRecycleBin(getGroup(readUuid())); -- } else if (m_xml.name() == "RecycleBinChanged") { -- m_meta->setRecycleBinChanged(readDateTime()); -- } else if (m_xml.name() == "EntryTemplatesGroup") { -- m_meta->setEntryTemplatesGroup(getGroup(readUuid())); -- } else if (m_xml.name() == "EntryTemplatesGroupChanged") { -- m_meta->setEntryTemplatesGroupChanged(readDateTime()); -- } else if (m_xml.name() == "LastSelectedGroup") { -- m_meta->setLastSelectedGroup(getGroup(readUuid())); -- } else if (m_xml.name() == "LastTopVisibleGroup") { -- m_meta->setLastTopVisibleGroup(getGroup(readUuid())); -- } else if (m_xml.name() == "HistoryMaxItems") { -- int value = readNumber(); -- if (value >= -1) { -- m_meta->setHistoryMaxItems(value); -- } else { -- qWarning("HistoryMaxItems invalid number"); -- } -- } else if (m_xml.name() == "HistoryMaxSize") { -- int value = readNumber(); -- if (value >= -1) { -- m_meta->setHistoryMaxSize(value); -- } else { -- qWarning("HistoryMaxSize invalid number"); -- } -- } else if (m_xml.name() == "Binaries") { -- parseBinaries(); -- } else if (m_xml.name() == "CustomData") { -- parseCustomData(m_meta->customData()); -- } else if (m_xml.name() == "SettingsChanged") { -- m_meta->setSettingsChanged(readDateTime()); -- } else { -- skipCurrentElement(); -- } -- } --} -- --void KdbxXmlReader::parseMemoryProtection() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "MemoryProtection"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "ProtectTitle") { -- m_meta->setProtectTitle(readBool()); -- } else if (m_xml.name() == "ProtectUserName") { -- m_meta->setProtectUsername(readBool()); -- } else if (m_xml.name() == "ProtectPassword") { -- m_meta->setProtectPassword(readBool()); -- } else if (m_xml.name() == "ProtectURL") { -- m_meta->setProtectUrl(readBool()); -- } else if (m_xml.name() == "ProtectNotes") { -- m_meta->setProtectNotes(readBool()); -- } else { -- skipCurrentElement(); -- } -- } --} -- --void KdbxXmlReader::parseCustomIcons() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomIcons"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Icon") { -- parseIcon(); -- } else { -- skipCurrentElement(); -- } -- } --} -- --void KdbxXmlReader::parseIcon() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Icon"); -- -- QUuid uuid; -- QImage icon; -- bool uuidSet = false; -- bool iconSet = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "UUID") { -- uuid = readUuid(); -- uuidSet = !uuid.isNull(); -- } else if (m_xml.name() == "Data") { -- icon.loadFromData(readBinary()); -- iconSet = true; -- } else { -- skipCurrentElement(); -- } -- } -- -- if (uuidSet && iconSet) { -- // Check for duplicate UUID (corruption) -- if (m_meta->hasCustomIcon(uuid)) { -- uuid = QUuid::createUuid(); -- } -- m_meta->addCustomIcon(uuid, icon); -- return; -- } -- -- raiseError(tr("Missing icon uuid or data")); --} -- --void KdbxXmlReader::parseBinaries() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binaries"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() != "Binary") { -- skipCurrentElement(); -- continue; -- } -- -- QXmlStreamAttributes attr = m_xml.attributes(); -- QString id = attr.value("ID").toString(); -- QByteArray data = isTrueValue(attr.value("Compressed")) ? readCompressedBinary() : readBinary(); -- -- if (m_binaryPool.contains(id)) { -- qWarning("KdbxXmlReader::parseBinaries: overwriting binary item \"%s\"", qPrintable(id)); -- } -- -- m_binaryPool.insert(id, data); -- } --} -- --void KdbxXmlReader::parseCustomData(CustomData* customData) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomData"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Item") { -- parseCustomDataItem(customData); -- continue; -- } -- skipCurrentElement(); -- } --} -- --void KdbxXmlReader::parseCustomDataItem(CustomData* customData) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Item"); -- -- QString key; -- QString value; -- bool keySet = false; -- bool valueSet = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Key") { -- key = readString(); -- keySet = true; -- } else if (m_xml.name() == "Value") { -- value = readString(); -- valueSet = true; -- } else { -- skipCurrentElement(); -- } -- } -- -- if (keySet && valueSet) { -- customData->set(key, value); -- return; -- } -- -- raiseError(tr("Missing custom data key or value")); --} -- --bool KdbxXmlReader::parseRoot() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Root"); -- -- bool groupElementFound = false; -- bool groupParsedSuccessfully = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Group") { -- if (groupElementFound) { -- groupParsedSuccessfully = false; -- raiseError(tr("Multiple group elements")); -- continue; -- } -- -- Group* rootGroup = parseGroup(); -- if (rootGroup) { -- Group* oldRoot = m_db->rootGroup(); -- m_db->setRootGroup(rootGroup); -- delete oldRoot; -- groupParsedSuccessfully = true; -- } -- -- groupElementFound = true; -- } else if (m_xml.name() == "DeletedObjects") { -- parseDeletedObjects(); -- } else { -- skipCurrentElement(); -- } -- } -- -- return groupParsedSuccessfully; --} -- --Group* KdbxXmlReader::parseGroup() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Group"); -- -- auto group = new Group(); -- group->setUpdateTimeinfo(false); -- QList children; -- QList entries; -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "UUID") { -- QUuid uuid = readUuid(); -- if (uuid.isNull()) { -- if (m_strictMode) { -- raiseError(tr("Null group uuid")); -- } else { -- group->setUuid(QUuid::createUuid()); -- } -- } else { -- group->setUuid(uuid); -- } -- continue; -- } -- if (m_xml.name() == "Name") { -- group->setName(readString()); -- continue; -- } -- if (m_xml.name() == "Notes") { -- group->setNotes(readString()); -- continue; -- } -- if (m_xml.name() == "IconID") { -- int iconId = readNumber(); -- if (iconId < 0) { -- if (m_strictMode) { -- raiseError(tr("Invalid group icon number")); -- } -- iconId = 0; -- } else if (iconId >= databaseIcons()->count()) { -- qWarning("KdbxXmlReader::parseGroup: icon id \"%d\" not supported", iconId); -- iconId = databaseIcons()->count() - 1; -- } -- -- group->setIcon(iconId); -- continue; -- } -- if (m_xml.name() == "CustomIconUUID") { -- QUuid uuid = readUuid(); -- if (!uuid.isNull()) { -- group->setIcon(uuid); -- } -- continue; -- } -- if (m_xml.name() == "Times") { -- group->setTimeInfo(parseTimes()); -- continue; -- } -- if (m_xml.name() == "IsExpanded") { -- group->setExpanded(readBool()); -- continue; -- } -- if (m_xml.name() == "DefaultAutoTypeSequence") { -- group->setDefaultAutoTypeSequence(readString()); -- continue; -- } -- if (m_xml.name() == "EnableAutoType") { -- QString str = readString(); -- -- if (str.compare("null", Qt::CaseInsensitive) == 0) { -- group->setAutoTypeEnabled(Group::Inherit); -- } else if (str.compare("true", Qt::CaseInsensitive) == 0) { -- group->setAutoTypeEnabled(Group::Enable); -- } else if (str.compare("false", Qt::CaseInsensitive) == 0) { -- group->setAutoTypeEnabled(Group::Disable); -- } else { -- raiseError(tr("Invalid EnableAutoType value")); -- } -- continue; -- } -- if (m_xml.name() == "EnableSearching") { -- QString str = readString(); -- -- if (str.compare("null", Qt::CaseInsensitive) == 0) { -- group->setSearchingEnabled(Group::Inherit); -- } else if (str.compare("true", Qt::CaseInsensitive) == 0) { -- group->setSearchingEnabled(Group::Enable); -- } else if (str.compare("false", Qt::CaseInsensitive) == 0) { -- group->setSearchingEnabled(Group::Disable); -- } else { -- raiseError(tr("Invalid EnableSearching value")); -- } -- continue; -- } -- if (m_xml.name() == "LastTopVisibleEntry") { -- group->setLastTopVisibleEntry(getEntry(readUuid())); -- continue; -- } -- if (m_xml.name() == "Group") { -- Group* newGroup = parseGroup(); -- if (newGroup) { -- children.append(newGroup); -- } -- continue; -- } -- if (m_xml.name() == "Entry") { -- Entry* newEntry = parseEntry(false); -- if (newEntry) { -- entries.append(newEntry); -- } -- continue; -- } -- if (m_xml.name() == "CustomData") { -- parseCustomData(group->customData()); -- continue; -- } -- -- skipCurrentElement(); -- } -- -- if (group->uuid().isNull() && !m_strictMode) { -- group->setUuid(QUuid::createUuid()); -- } -- -- if (!group->uuid().isNull()) { -- Group* tmpGroup = group; -- group = getGroup(tmpGroup->uuid()); -- group->copyDataFrom(tmpGroup); -- group->setUpdateTimeinfo(false); -- delete tmpGroup; -- } else if (!hasError()) { -- raiseError(tr("No group uuid found")); -- } -- -- for (Group* child : asConst(children)) { -- child->setParent(group); -- } -- -- for (Entry* entry : asConst(entries)) { -- entry->setGroup(group); -- } -- -- return group; --} -- --void KdbxXmlReader::parseDeletedObjects() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObjects"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "DeletedObject") { -- parseDeletedObject(); -- } else { -- skipCurrentElement(); -- } -- } --} -- --void KdbxXmlReader::parseDeletedObject() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObject"); -- -- DeletedObject delObj{{}, {}}; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "UUID") { -- QUuid uuid = readUuid(); -- if (uuid.isNull()) { -- if (m_strictMode) { -- raiseError(tr("Null DeleteObject uuid")); -- return; -- } -- continue; -- } -- delObj.uuid = uuid; -- continue; -- } -- if (m_xml.name() == "DeletionTime") { -- delObj.deletionTime = readDateTime(); -- continue; -- } -- skipCurrentElement(); -- } -- -- if (!delObj.uuid.isNull() && !delObj.deletionTime.isNull()) { -- m_db->addDeletedObject(delObj); -- return; -- } -- -- if (m_strictMode) { -- raiseError(tr("Missing DeletedObject uuid or time")); -- } --} -- --Entry* KdbxXmlReader::parseEntry(bool history) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Entry"); -- -- auto entry = new Entry(); -- entry->setUpdateTimeinfo(false); -- QList historyItems; -- QList binaryRefs; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "UUID") { -- QUuid uuid = readUuid(); -- if (uuid.isNull()) { -- if (m_strictMode) { -- raiseError(tr("Null entry uuid")); -- } else { -- entry->setUuid(QUuid::createUuid()); -- } -- } else { -- entry->setUuid(uuid); -- } -- continue; -- } -- if (m_xml.name() == "IconID") { -- int iconId = readNumber(); -- if (iconId < 0) { -- if (m_strictMode) { -- raiseError(tr("Invalid entry icon number")); -- } -- iconId = 0; -- } -- entry->setIcon(iconId); -- continue; -- } -- if (m_xml.name() == "CustomIconUUID") { -- QUuid uuid = readUuid(); -- if (!uuid.isNull()) { -- entry->setIcon(uuid); -- } -- continue; -- } -- if (m_xml.name() == "ForegroundColor") { -- entry->setForegroundColor(readColor()); -- continue; -- } -- if (m_xml.name() == "BackgroundColor") { -- entry->setBackgroundColor(readColor()); -- continue; -- } -- if (m_xml.name() == "OverrideURL") { -- entry->setOverrideUrl(readString()); -- continue; -- } -- if (m_xml.name() == "Tags") { -- entry->setTags(readString()); -- continue; -- } -- if (m_xml.name() == "Times") { -- entry->setTimeInfo(parseTimes()); -- continue; -- } -- if (m_xml.name() == "String") { -- parseEntryString(entry); -- continue; -- } -- if (m_xml.name() == "Binary") { -- QPair ref = parseEntryBinary(entry); -- if (!ref.first.isEmpty() && !ref.second.isEmpty()) { -- binaryRefs.append(ref); -- } -- continue; -- } -- if (m_xml.name() == "AutoType") { -- parseAutoType(entry); -- continue; -- } -- if (m_xml.name() == "History") { -- if (history) { -- raiseError(tr("History element in history entry")); -- } else { -- historyItems = parseEntryHistory(); -- } -- continue; -- } -- if (m_xml.name() == "CustomData") { -- parseCustomData(entry->customData()); -- continue; -- } -- skipCurrentElement(); -- } -- -- if (entry->uuid().isNull() && !m_strictMode) { -- entry->setUuid(QUuid::createUuid()); -- } -- -- if (!entry->uuid().isNull()) { -- if (history) { -- entry->setUpdateTimeinfo(false); -- } else { -- Entry* tmpEntry = entry; -- -- entry = getEntry(tmpEntry->uuid()); -- entry->copyDataFrom(tmpEntry); -- entry->setUpdateTimeinfo(false); -- -- delete tmpEntry; -- } -- } else if (!hasError()) { -- raiseError(tr("No entry uuid found")); -- } -- -- for (Entry* historyItem : asConst(historyItems)) { -- if (historyItem->uuid() != entry->uuid()) { -- if (m_strictMode) { -- raiseError(tr("History element with different uuid")); -- } else { -- historyItem->setUuid(entry->uuid()); -- } -- } -- entry->addHistoryItem(historyItem); -- } -- -- for (const StringPair& ref : asConst(binaryRefs)) { -- m_binaryMap.insertMulti(ref.first, qMakePair(entry, ref.second)); -- } -- -- return entry; --} -- --void KdbxXmlReader::parseEntryString(Entry* entry) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "String"); -- -- QString key; -- QString value; -- bool protect = false; -- bool keySet = false; -- bool valueSet = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Key") { -- key = readString(); -- keySet = true; -- continue; -- } -- -- if (m_xml.name() == "Value") { -- QXmlStreamAttributes attr = m_xml.attributes(); -- bool isProtected; -- bool protectInMemory; -- value = readString(isProtected, protectInMemory); -- protect = isProtected || protectInMemory; -- valueSet = true; -- continue; -- } -- -- skipCurrentElement(); -- } -- -- if (keySet && valueSet) { -- // the default attributes are always there so additionally check if it's empty -- if (entry->attributes()->hasKey(key) && !entry->attributes()->value(key).isEmpty()) { -- raiseError(tr("Duplicate custom attribute found")); -- return; -- } -- entry->attributes()->set(key, value, protect); -- return; -- } -- -- raiseError(tr("Entry string key or value missing")); --} -- --QPair KdbxXmlReader::parseEntryBinary(Entry* entry) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binary"); -- -- QPair poolRef; -- -- QString key; -- QByteArray value; -- bool keySet = false; -- bool valueSet = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Key") { -- key = readString(); -- keySet = true; -- continue; -- } -- if (m_xml.name() == "Value") { -- QXmlStreamAttributes attr = m_xml.attributes(); -- -- if (attr.hasAttribute("Ref")) { -- poolRef = qMakePair(attr.value("Ref").toString(), key); -- m_xml.skipCurrentElement(); -- } else { -- // format compatibility -- value = readBinary(); -- } -- -- valueSet = true; -- continue; -- } -- skipCurrentElement(); -- } -- -- if (keySet && valueSet) { -- if (entry->attachments()->hasKey(key) && entry->attachments()->value(key) != value) { -- // NOTE: This only impacts KDBX 3.x databases -- // Prepend a random string to the key to make it unique and prevent data loss -- key = key.prepend(QUuid::createUuid().toString().mid(1, 8) + "_"); -- qWarning("Duplicate attachment name found, renamed to: %s", qPrintable(key)); -- } -- entry->attachments()->set(key, value); -- } else { -- raiseError(tr("Entry binary key or value missing")); -- } -- -- return poolRef; --} -- --void KdbxXmlReader::parseAutoType(Entry* entry) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "AutoType"); -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Enabled") { -- entry->setAutoTypeEnabled(readBool()); -- } else if (m_xml.name() == "DataTransferObfuscation") { -- entry->setAutoTypeObfuscation(readNumber()); -- } else if (m_xml.name() == "DefaultSequence") { -- entry->setDefaultAutoTypeSequence(readString()); -- } else if (m_xml.name() == "Association") { -- parseAutoTypeAssoc(entry); -- } else { -- skipCurrentElement(); -- } -- } --} -- --void KdbxXmlReader::parseAutoTypeAssoc(Entry* entry) --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Association"); -- -- AutoTypeAssociations::Association assoc; -- bool windowSet = false; -- bool sequenceSet = false; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Window") { -- assoc.window = readString(); -- windowSet = true; -- } else if (m_xml.name() == "KeystrokeSequence") { -- assoc.sequence = readString(); -- sequenceSet = true; -- } else { -- skipCurrentElement(); -- } -- } -- -- if (windowSet && sequenceSet) { -- entry->autoTypeAssociations()->add(assoc); -- return; -- } -- raiseError(tr("Auto-type association window or sequence missing")); --} -- --QList KdbxXmlReader::parseEntryHistory() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "History"); -- -- QList historyItems; -- -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "Entry") { -- historyItems.append(parseEntry(true)); -- } else { -- skipCurrentElement(); -- } -- } -- -- return historyItems; --} -- --TimeInfo KdbxXmlReader::parseTimes() --{ -- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Times"); -- -- TimeInfo timeInfo; -- while (!m_xml.hasError() && m_xml.readNextStartElement()) { -- if (m_xml.name() == "LastModificationTime") { -- timeInfo.setLastModificationTime(readDateTime()); -- } else if (m_xml.name() == "CreationTime") { -- timeInfo.setCreationTime(readDateTime()); -- } else if (m_xml.name() == "LastAccessTime") { -- timeInfo.setLastAccessTime(readDateTime()); -- } else if (m_xml.name() == "ExpiryTime") { -- timeInfo.setExpiryTime(readDateTime()); -- } else if (m_xml.name() == "Expires") { -- timeInfo.setExpires(readBool()); -- } else if (m_xml.name() == "UsageCount") { -- timeInfo.setUsageCount(readNumber()); -- } else if (m_xml.name() == "LocationChanged") { -- timeInfo.setLocationChanged(readDateTime()); -- } else { -- skipCurrentElement(); -- } -- } -- -- return timeInfo; --} -- --QString KdbxXmlReader::readString() --{ -- bool isProtected; -- bool protectInMemory; -- -- return readString(isProtected, protectInMemory); --} -- --QString KdbxXmlReader::readString(bool& isProtected, bool& protectInMemory) --{ -- QXmlStreamAttributes attr = m_xml.attributes(); -- isProtected = isTrueValue(attr.value("Protected")); -- protectInMemory = isTrueValue(attr.value("ProtectInMemory")); -- QString value = m_xml.readElementText(); -- -- if (isProtected && !value.isEmpty()) { -- QByteArray ciphertext = QByteArray::fromBase64(value.toLatin1()); -- bool ok; -- QByteArray plaintext = m_randomStream->process(ciphertext, &ok); -- if (!ok) { -- value.clear(); -- raiseError(m_randomStream->errorString()); -- return value; -- } -- -- value = QString::fromUtf8(plaintext); -- } -- -- return value; --} -- --bool KdbxXmlReader::readBool() --{ -- QString str = readString(); -- -- if (str.compare("true", Qt::CaseInsensitive) == 0) { -- return true; -- } -- if (str.compare("false", Qt::CaseInsensitive) == 0) { -- return false; -- } -- if (str.length() == 0) { -- return false; -- } -- raiseError(tr("Invalid bool value")); -- return false; --} -- --QDateTime KdbxXmlReader::readDateTime() --{ -- QString str = readString(); -- if (Tools::isBase64(str.toLatin1())) { -- QByteArray secsBytes = QByteArray::fromBase64(str.toUtf8()).leftJustified(8, '\0', true).left(8); -- qint64 secs = Endian::bytesToSizedInt(secsBytes, KeePass2::BYTEORDER); -- return QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).addSecs(secs); -- } -- -- QDateTime dt = Clock::parse(str, Qt::ISODate); -- if (dt.isValid()) { -- return dt; -- } -- -- if (m_strictMode) { -- raiseError(tr("Invalid date time value")); -- } -- -- return Clock::currentDateTimeUtc(); --} -- --QString KdbxXmlReader::readColor() --{ -- QString colorStr = readString(); -- -- if (colorStr.isEmpty()) { -- return colorStr; -- } -- -- if (colorStr.length() != 7 || colorStr[0] != '#') { -- if (m_strictMode) { -- raiseError(tr("Invalid color value")); -- } -- return colorStr; -- } -- -- for (int i = 0; i <= 2; ++i) { -- QString rgbPartStr = colorStr.mid(1 + 2 * i, 2); -- bool ok; -- int rgbPart = rgbPartStr.toInt(&ok, 16); -- if (!ok || rgbPart > 255) { -- if (m_strictMode) { -- raiseError(tr("Invalid color rgb part")); -- } -- return colorStr; -- } -- } -- -- return colorStr; --} -- --int KdbxXmlReader::readNumber() --{ -- bool ok; -- int result = readString().toInt(&ok); -- if (!ok) { -- raiseError(tr("Invalid number value")); -- } -- return result; --} -- --QUuid KdbxXmlReader::readUuid() --{ -- QByteArray uuidBin = readBinary(); -- if (uuidBin.isEmpty()) { -- return QUuid(); -- } -- if (uuidBin.length() != UUID_LENGTH) { -- if (m_strictMode) { -- raiseError(tr("Invalid uuid value")); -- } -- return QUuid(); -- } -- return QUuid::fromRfc4122(uuidBin); --} -- --QByteArray KdbxXmlReader::readBinary() --{ -- QXmlStreamAttributes attr = m_xml.attributes(); -- bool isProtected = isTrueValue(attr.value("Protected")); -- QString value = m_xml.readElementText(); -- QByteArray data = QByteArray::fromBase64(value.toLatin1()); -- -- if (isProtected && !data.isEmpty()) { -- bool ok; -- QByteArray plaintext = m_randomStream->process(data, &ok); -- if (!ok) { -- data.clear(); -- raiseError(m_randomStream->errorString()); -- return data; -- } -- -- data = plaintext; -- } -- -- return data; --} -- --QByteArray KdbxXmlReader::readCompressedBinary() --{ -- QByteArray rawData = readBinary(); -- -- QBuffer buffer(&rawData); -- buffer.open(QIODevice::ReadOnly); -- -- QtIOCompressor compressor(&buffer); -- compressor.setStreamFormat(QtIOCompressor::GzipFormat); -- compressor.open(QIODevice::ReadOnly); -- -- QByteArray result; -- if (!Tools::readAllFromDevice(&compressor, result)) { -- //: Translator meant is a binary data inside an entry -- raiseError(tr("Unable to decompress binary")); -- } -- return result; --} -- --Group* KdbxXmlReader::getGroup(const QUuid& uuid) --{ -- if (uuid.isNull()) { -- return nullptr; -- } -- -- if (m_groups.contains(uuid)) { -- return m_groups.value(uuid); -- } -- -- auto group = new Group(); -- group->setUpdateTimeinfo(false); -- group->setUuid(uuid); -- group->setParent(m_tmpParent.data()); -- m_groups.insert(uuid, group); -- return group; --} -- --Entry* KdbxXmlReader::getEntry(const QUuid& uuid) --{ -- if (uuid.isNull()) { -- return nullptr; -- } -- -- if (m_entries.contains(uuid)) { -- return m_entries.value(uuid); -- } -- -- auto entry = new Entry(); -- entry->setUpdateTimeinfo(false); -- entry->setUuid(uuid); -- entry->setGroup(m_tmpParent.data()); -- m_entries.insert(uuid, entry); -- return entry; --} -- --void KdbxXmlReader::skipCurrentElement() --{ -- qWarning("KdbxXmlReader::skipCurrentElement: skip element \"%s\"", qPrintable(m_xml.name().toString())); -- m_xml.skipCurrentElement(); --} -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlReader.h keepassxc-2.6.4-patched/src/format/KdbxXmlReader.h ---- keepassxc-2.6.4-orig/src/format/KdbxXmlReader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxXmlReader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,121 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_KDBXXMLREADER_H --#define KEEPASSXC_KDBXXMLREADER_H -- --#include "core/Database.h" --#include "core/Metadata.h" --#include "core/TimeInfo.h" -- --#include --#include --#include --#include -- --class QIODevice; --class Group; --class Entry; --class KeePass2RandomStream; -- --/** -- * KDBX XML payload reader. -- */ --class KdbxXmlReader --{ -- Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) -- --public: -- explicit KdbxXmlReader(quint32 version); -- explicit KdbxXmlReader(quint32 version, QHash binaryPool); -- virtual ~KdbxXmlReader() = default; -- -- virtual QSharedPointer readDatabase(const QString& filename); -- virtual QSharedPointer readDatabase(QIODevice* device); -- virtual void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr); -- -- bool hasError() const; -- QString errorString() const; -- -- QByteArray headerHash() const; -- -- bool strictMode() const; -- void setStrictMode(bool strictMode); -- --protected: -- typedef QPair StringPair; -- -- virtual bool parseKeePassFile(); -- virtual void parseMeta(); -- virtual void parseMemoryProtection(); -- virtual void parseCustomIcons(); -- virtual void parseIcon(); -- virtual void parseBinaries(); -- virtual void parseCustomData(CustomData* customData); -- virtual void parseCustomDataItem(CustomData* customData); -- virtual bool parseRoot(); -- virtual Group* parseGroup(); -- virtual void parseDeletedObjects(); -- virtual void parseDeletedObject(); -- virtual Entry* parseEntry(bool history); -- virtual void parseEntryString(Entry* entry); -- virtual QPair parseEntryBinary(Entry* entry); -- virtual void parseAutoType(Entry* entry); -- virtual void parseAutoTypeAssoc(Entry* entry); -- virtual QList parseEntryHistory(); -- virtual TimeInfo parseTimes(); -- -- virtual QString readString(); -- virtual QString readString(bool& isProtected, bool& protectInMemory); -- virtual bool readBool(); -- virtual QDateTime readDateTime(); -- virtual QString readColor(); -- virtual int readNumber(); -- virtual QUuid readUuid(); -- virtual QByteArray readBinary(); -- virtual QByteArray readCompressedBinary(); -- -- virtual void skipCurrentElement(); -- -- virtual Group* getGroup(const QUuid& uuid); -- virtual Entry* getEntry(const QUuid& uuid); -- -- virtual bool isTrueValue(const QStringRef& value); -- virtual void raiseError(const QString& errorMessage); -- -- const quint32 m_kdbxVersion; -- -- bool m_strictMode = false; -- -- QPointer m_db; -- QPointer m_meta; -- KeePass2RandomStream* m_randomStream = nullptr; -- QXmlStreamReader m_xml; -- -- QScopedPointer m_tmpParent; -- QHash m_groups; -- QHash m_entries; -- -- QHash m_binaryPool; -- QHash> m_binaryMap; -- QByteArray m_headerHash; -- -- bool m_error = false; -- QString m_errorStr = ""; --}; -- --#endif // KEEPASSXC_KDBXXMLREADER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.cpp keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.cpp ---- keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,609 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KdbxXmlWriter.h" -- --#include --#include -- --#include "core/Endian.h" --#include "core/Metadata.h" --#include "format/KeePass2RandomStream.h" --#include "streams/QtIOCompressor" -- --/** -- * @param version KDBX version -- */ --KdbxXmlWriter::KdbxXmlWriter(quint32 version) -- : m_kdbxVersion(version) --{ --} -- --void KdbxXmlWriter::writeDatabase(QIODevice* device, -- const Database* db, -- KeePass2RandomStream* randomStream, -- const QByteArray& headerHash) --{ -- m_db = db; -- m_meta = db->metadata(); -- m_randomStream = randomStream; -- m_headerHash = headerHash; -- -- m_xml.setAutoFormatting(true); -- m_xml.setAutoFormattingIndent(-1); // 1 tab -- m_xml.setCodec("UTF-8"); -- -- generateIdMap(); -- -- m_xml.setDevice(device); -- m_xml.writeStartDocument("1.0", true); -- m_xml.writeStartElement("KeePassFile"); -- -- writeMetadata(); -- writeRoot(); -- -- m_xml.writeEndElement(); -- m_xml.writeEndDocument(); -- -- if (m_xml.hasError()) { -- raiseError(device->errorString()); -- } --} -- --void KdbxXmlWriter::writeDatabase(const QString& filename, Database* db) --{ -- QFile file(filename); -- file.open(QIODevice::WriteOnly | QIODevice::Truncate); -- writeDatabase(&file, db); --} -- --bool KdbxXmlWriter::hasError() --{ -- return m_error; --} -- --QString KdbxXmlWriter::errorString() --{ -- return m_errorStr; --} -- --void KdbxXmlWriter::generateIdMap() --{ -- const QList allEntries = m_db->rootGroup()->entriesRecursive(true); -- int nextId = 0; -- -- for (Entry* entry : allEntries) { -- const QList attachmentKeys = entry->attachments()->keys(); -- for (const QString& key : attachmentKeys) { -- QByteArray data = entry->attachments()->value(key); -- if (!m_idMap.contains(data)) { -- m_idMap.insert(data, nextId++); -- } -- } -- } --} -- --void KdbxXmlWriter::writeMetadata() --{ -- m_xml.writeStartElement("Meta"); -- writeString("Generator", m_meta->generator()); -- if (m_kdbxVersion < KeePass2::FILE_VERSION_4 && !m_headerHash.isEmpty()) { -- writeBinary("HeaderHash", m_headerHash); -- } -- writeString("DatabaseName", m_meta->name()); -- writeDateTime("DatabaseNameChanged", m_meta->nameChanged()); -- writeString("DatabaseDescription", m_meta->description()); -- writeDateTime("DatabaseDescriptionChanged", m_meta->descriptionChanged()); -- writeString("DefaultUserName", m_meta->defaultUserName()); -- writeDateTime("DefaultUserNameChanged", m_meta->defaultUserNameChanged()); -- writeNumber("MaintenanceHistoryDays", m_meta->maintenanceHistoryDays()); -- writeString("Color", m_meta->color()); -- writeDateTime("MasterKeyChanged", m_meta->databaseKeyChanged()); -- writeNumber("MasterKeyChangeRec", m_meta->databaseKeyChangeRec()); -- writeNumber("MasterKeyChangeForce", m_meta->databaseKeyChangeForce()); -- writeMemoryProtection(); -- writeCustomIcons(); -- writeBool("RecycleBinEnabled", m_meta->recycleBinEnabled()); -- writeUuid("RecycleBinUUID", m_meta->recycleBin()); -- writeDateTime("RecycleBinChanged", m_meta->recycleBinChanged()); -- writeUuid("EntryTemplatesGroup", m_meta->entryTemplatesGroup()); -- writeDateTime("EntryTemplatesGroupChanged", m_meta->entryTemplatesGroupChanged()); -- writeUuid("LastSelectedGroup", m_meta->lastSelectedGroup()); -- writeUuid("LastTopVisibleGroup", m_meta->lastTopVisibleGroup()); -- writeNumber("HistoryMaxItems", m_meta->historyMaxItems()); -- writeNumber("HistoryMaxSize", m_meta->historyMaxSize()); -- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { -- writeDateTime("SettingsChanged", m_meta->settingsChanged()); -- } -- if (m_kdbxVersion < KeePass2::FILE_VERSION_4) { -- writeBinaries(); -- } -- writeCustomData(m_meta->customData()); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeMemoryProtection() --{ -- m_xml.writeStartElement("MemoryProtection"); -- -- writeBool("ProtectTitle", m_meta->protectTitle()); -- writeBool("ProtectUserName", m_meta->protectUsername()); -- writeBool("ProtectPassword", m_meta->protectPassword()); -- writeBool("ProtectURL", m_meta->protectUrl()); -- writeBool("ProtectNotes", m_meta->protectNotes()); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeCustomIcons() --{ -- m_xml.writeStartElement("CustomIcons"); -- -- const QList customIconsOrder = m_meta->customIconsOrder(); -- for (const QUuid& uuid : customIconsOrder) { -- writeIcon(uuid, m_meta->customIcon(uuid)); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeIcon(const QUuid& uuid, const QImage& icon) --{ -- m_xml.writeStartElement("Icon"); -- -- writeUuid("UUID", uuid); -- -- QByteArray ba; -- QBuffer buffer(&ba); -- buffer.open(QIODevice::WriteOnly); -- // TODO: check !icon.save() -- icon.save(&buffer, "PNG"); -- buffer.close(); -- writeBinary("Data", ba); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeBinaries() --{ -- m_xml.writeStartElement("Binaries"); -- -- QHash::const_iterator i; -- for (i = m_idMap.constBegin(); i != m_idMap.constEnd(); ++i) { -- m_xml.writeStartElement("Binary"); -- -- m_xml.writeAttribute("ID", QString::number(i.value())); -- -- QByteArray data; -- if (m_db->compressionAlgorithm() == Database::CompressionGZip) { -- m_xml.writeAttribute("Compressed", "True"); -- -- QBuffer buffer; -- buffer.open(QIODevice::ReadWrite); -- -- QtIOCompressor compressor(&buffer); -- compressor.setStreamFormat(QtIOCompressor::GzipFormat); -- compressor.open(QIODevice::WriteOnly); -- -- qint64 bytesWritten = compressor.write(i.key()); -- Q_ASSERT(bytesWritten == i.key().size()); -- Q_UNUSED(bytesWritten); -- compressor.close(); -- -- buffer.seek(0); -- data = buffer.readAll(); -- } else { -- data = i.key(); -- } -- -- if (!data.isEmpty()) { -- m_xml.writeCharacters(QString::fromLatin1(data.toBase64())); -- } -- m_xml.writeEndElement(); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeCustomData(const CustomData* customData) --{ -- if (customData->isEmpty()) { -- return; -- } -- m_xml.writeStartElement("CustomData"); -- -- const QList keyList = customData->keys(); -- for (const QString& key : keyList) { -- writeCustomDataItem(key, customData->value(key)); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeCustomDataItem(const QString& key, const QString& value) --{ -- m_xml.writeStartElement("Item"); -- -- writeString("Key", key); -- writeString("Value", value); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeRoot() --{ -- Q_ASSERT(m_db->rootGroup()); -- -- m_xml.writeStartElement("Root"); -- -- writeGroup(m_db->rootGroup()); -- writeDeletedObjects(); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeGroup(const Group* group) --{ -- Q_ASSERT(!group->uuid().isNull()); -- -- m_xml.writeStartElement("Group"); -- -- writeUuid("UUID", group->uuid()); -- writeString("Name", group->name()); -- writeString("Notes", group->notes()); -- writeNumber("IconID", group->iconNumber()); -- -- if (!group->iconUuid().isNull()) { -- writeUuid("CustomIconUUID", group->iconUuid()); -- } -- writeTimes(group->timeInfo()); -- writeBool("IsExpanded", group->isExpanded()); -- writeString("DefaultAutoTypeSequence", group->defaultAutoTypeSequence()); -- -- writeTriState("EnableAutoType", group->autoTypeEnabled()); -- -- writeTriState("EnableSearching", group->searchingEnabled()); -- -- writeUuid("LastTopVisibleEntry", group->lastTopVisibleEntry()); -- -- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { -- writeCustomData(group->customData()); -- } -- -- const QList& entryList = group->entries(); -- for (const Entry* entry : entryList) { -- writeEntry(entry); -- } -- -- const QList& children = group->children(); -- for (const Group* child : children) { -- writeGroup(child); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeTimes(const TimeInfo& ti) --{ -- m_xml.writeStartElement("Times"); -- -- writeDateTime("LastModificationTime", ti.lastModificationTime()); -- writeDateTime("CreationTime", ti.creationTime()); -- writeDateTime("LastAccessTime", ti.lastAccessTime()); -- writeDateTime("ExpiryTime", ti.expiryTime()); -- writeBool("Expires", ti.expires()); -- writeNumber("UsageCount", ti.usageCount()); -- writeDateTime("LocationChanged", ti.locationChanged()); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeDeletedObjects() --{ -- m_xml.writeStartElement("DeletedObjects"); -- -- const QList delObjList = m_db->deletedObjects(); -- for (const DeletedObject& delObj : delObjList) { -- writeDeletedObject(delObj); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeDeletedObject(const DeletedObject& delObj) --{ -- m_xml.writeStartElement("DeletedObject"); -- -- writeUuid("UUID", delObj.uuid); -- writeDateTime("DeletionTime", delObj.deletionTime); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeEntry(const Entry* entry) --{ -- Q_ASSERT(!entry->uuid().isNull()); -- -- m_xml.writeStartElement("Entry"); -- -- writeUuid("UUID", entry->uuid()); -- writeNumber("IconID", entry->iconNumber()); -- if (!entry->iconUuid().isNull()) { -- writeUuid("CustomIconUUID", entry->iconUuid()); -- } -- writeString("ForegroundColor", entry->foregroundColor()); -- writeString("BackgroundColor", entry->backgroundColor()); -- writeString("OverrideURL", entry->overrideUrl()); -- writeString("Tags", entry->tags()); -- writeTimes(entry->timeInfo()); -- -- const QList attributesKeyList = entry->attributes()->keys(); -- for (const QString& key : attributesKeyList) { -- m_xml.writeStartElement("String"); -- -- // clang-format off -- bool protect = -- (((key == "Title") && m_meta->protectTitle()) || ((key == "UserName") && m_meta->protectUsername()) -- || ((key == "Password") && m_meta->protectPassword()) -- || ((key == "URL") && m_meta->protectUrl()) -- || ((key == "Notes") && m_meta->protectNotes()) -- || entry->attributes()->isProtected(key)); -- // clang-format on -- -- writeString("Key", key); -- -- m_xml.writeStartElement("Value"); -- QString value; -- -- if (protect) { -- if (!m_innerStreamProtectionDisabled && m_randomStream) { -- m_xml.writeAttribute("Protected", "True"); -- bool ok; -- QByteArray rawData = m_randomStream->process(entry->attributes()->value(key).toUtf8(), &ok); -- if (!ok) { -- raiseError(m_randomStream->errorString()); -- } -- value = QString::fromLatin1(rawData.toBase64()); -- } else { -- m_xml.writeAttribute("ProtectInMemory", "True"); -- value = entry->attributes()->value(key); -- } -- } else { -- value = entry->attributes()->value(key); -- } -- -- if (!value.isEmpty()) { -- m_xml.writeCharacters(stripInvalidXml10Chars(value)); -- } -- m_xml.writeEndElement(); -- -- m_xml.writeEndElement(); -- } -- -- const QList attachmentsKeyList = entry->attachments()->keys(); -- for (const QString& key : attachmentsKeyList) { -- m_xml.writeStartElement("Binary"); -- -- writeString("Key", key); -- -- m_xml.writeStartElement("Value"); -- m_xml.writeAttribute("Ref", QString::number(m_idMap[entry->attachments()->value(key)])); -- m_xml.writeEndElement(); -- -- m_xml.writeEndElement(); -- } -- -- writeAutoType(entry); -- -- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { -- writeCustomData(entry->customData()); -- } -- -- // write history only for entries that are not history items -- if (entry->parent()) { -- writeEntryHistory(entry); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeAutoType(const Entry* entry) --{ -- m_xml.writeStartElement("AutoType"); -- -- writeBool("Enabled", entry->autoTypeEnabled()); -- writeNumber("DataTransferObfuscation", entry->autoTypeObfuscation()); -- writeString("DefaultSequence", entry->defaultAutoTypeSequence()); -- -- const QList autoTypeAssociations = entry->autoTypeAssociations()->getAll(); -- for (const AutoTypeAssociations::Association& assoc : autoTypeAssociations) { -- writeAutoTypeAssoc(assoc); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc) --{ -- m_xml.writeStartElement("Association"); -- -- writeString("Window", assoc.window); -- writeString("KeystrokeSequence", assoc.sequence); -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeEntryHistory(const Entry* entry) --{ -- m_xml.writeStartElement("History"); -- -- const QList& historyItems = entry->historyItems(); -- for (const Entry* item : historyItems) { -- writeEntry(item); -- } -- -- m_xml.writeEndElement(); --} -- --void KdbxXmlWriter::writeString(const QString& qualifiedName, const QString& string) --{ -- if (string.isEmpty()) { -- m_xml.writeEmptyElement(qualifiedName); -- } else { -- m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string)); -- } --} -- --void KdbxXmlWriter::writeNumber(const QString& qualifiedName, int number) --{ -- writeString(qualifiedName, QString::number(number)); --} -- --void KdbxXmlWriter::writeBool(const QString& qualifiedName, bool b) --{ -- if (b) { -- writeString(qualifiedName, "True"); -- } else { -- writeString(qualifiedName, "False"); -- } --} -- --void KdbxXmlWriter::writeDateTime(const QString& qualifiedName, const QDateTime& dateTime) --{ -- Q_ASSERT(dateTime.isValid()); -- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); -- -- QString dateTimeStr; -- if (m_kdbxVersion < KeePass2::FILE_VERSION_4) { -- dateTimeStr = dateTime.toString(Qt::ISODate); -- -- // Qt < 4.8 doesn't append a 'Z' at the end -- if (!dateTimeStr.isEmpty() && dateTimeStr[dateTimeStr.size() - 1] != 'Z') { -- dateTimeStr.append('Z'); -- } -- } else { -- qint64 secs = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).secsTo(dateTime); -- QByteArray secsBytes = Endian::sizedIntToBytes(secs, KeePass2::BYTEORDER); -- dateTimeStr = QString::fromLatin1(secsBytes.toBase64()); -- } -- writeString(qualifiedName, dateTimeStr); --} -- --void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const QUuid& uuid) --{ -- writeString(qualifiedName, uuid.toRfc4122().toBase64()); --} -- --void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Group* group) --{ -- if (group) { -- writeUuid(qualifiedName, group->uuid()); -- } else { -- writeUuid(qualifiedName, QUuid()); -- } --} -- --void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Entry* entry) --{ -- if (entry) { -- writeUuid(qualifiedName, entry->uuid()); -- } else { -- writeUuid(qualifiedName, QUuid()); -- } --} -- --void KdbxXmlWriter::writeBinary(const QString& qualifiedName, const QByteArray& ba) --{ -- writeString(qualifiedName, QString::fromLatin1(ba.toBase64())); --} -- --void KdbxXmlWriter::writeTriState(const QString& qualifiedName, Group::TriState triState) --{ -- QString value; -- -- if (triState == Group::Inherit) { -- value = "null"; -- } else if (triState == Group::Enable) { -- value = "true"; -- } else { -- value = "false"; -- } -- -- writeString(qualifiedName, value); --} -- --QString KdbxXmlWriter::colorPartToString(int value) --{ -- QString str = QString::number(value, 16).toUpper(); -- if (str.length() == 1) { -- str.prepend("0"); -- } -- -- return str; --} -- --QString KdbxXmlWriter::stripInvalidXml10Chars(QString str) --{ -- for (int i = str.size() - 1; i >= 0; i--) { -- const QChar ch = str.at(i); -- const ushort uc = ch.unicode(); -- -- if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) { -- // keep valid surrogate pair -- i--; -- } else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control characters -- || (uc >= 0x7F && uc <= 0x84) // control characters, valid but discouraged by XML -- || (uc >= 0x86 && uc <= 0x9F) // control characters, valid but discouraged by XML -- || (uc > 0xFFFD) // noncharacter -- || ch.isLowSurrogate() // single low surrogate -- || ch.isHighSurrogate()) // single high surrogate -- { -- qWarning("Stripping invalid XML 1.0 codepoint %x", uc); -- str.remove(i, 1); -- } -- } -- -- return str; --} -- --void KdbxXmlWriter::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -- --/** -- * Disable inner stream protection and write protected fields -- * in plaintext instead. This is useful for plaintext XML exports -- * where the inner stream key is not available. -- * -- * @param disable true to disable protection -- */ --void KdbxXmlWriter::disableInnerStreamProtection(bool disable) --{ -- m_innerStreamProtectionDisabled = disable; --} -- --/** -- * @return true if inner stream protection is disabled and protected -- * fields will be saved in plaintext -- */ --bool KdbxXmlWriter::innerStreamProtectionDisabled() const --{ -- return m_innerStreamProtectionDisabled; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.h keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.h ---- keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,98 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KDBXXMLWRITER_H --#define KEEPASSX_KDBXXMLWRITER_H -- --#include --#include --#include -- --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/TimeInfo.h" -- --class KeePass2RandomStream; --class Metadata; -- --class KdbxXmlWriter --{ --public: -- explicit KdbxXmlWriter(quint32 version); -- -- void writeDatabase(QIODevice* device, -- const Database* db, -- KeePass2RandomStream* randomStream = nullptr, -- const QByteArray& headerHash = QByteArray()); -- void writeDatabase(const QString& filename, Database* db); -- void disableInnerStreamProtection(bool disable); -- bool innerStreamProtectionDisabled() const; -- bool hasError(); -- QString errorString(); -- --private: -- void generateIdMap(); -- -- void writeMetadata(); -- void writeMemoryProtection(); -- void writeCustomIcons(); -- void writeIcon(const QUuid& uuid, const QImage& icon); -- void writeBinaries(); -- void writeCustomData(const CustomData* customData); -- void writeCustomDataItem(const QString& key, const QString& value); -- void writeRoot(); -- void writeGroup(const Group* group); -- void writeTimes(const TimeInfo& ti); -- void writeDeletedObjects(); -- void writeDeletedObject(const DeletedObject& delObj); -- void writeEntry(const Entry* entry); -- void writeAutoType(const Entry* entry); -- void writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc); -- void writeEntryHistory(const Entry* entry); -- -- void writeString(const QString& qualifiedName, const QString& string); -- void writeNumber(const QString& qualifiedName, int number); -- void writeBool(const QString& qualifiedName, bool b); -- void writeDateTime(const QString& qualifiedName, const QDateTime& dateTime); -- void writeUuid(const QString& qualifiedName, const QUuid& uuid); -- void writeUuid(const QString& qualifiedName, const Group* group); -- void writeUuid(const QString& qualifiedName, const Entry* entry); -- void writeBinary(const QString& qualifiedName, const QByteArray& ba); -- void writeTriState(const QString& qualifiedName, Group::TriState triState); -- QString colorPartToString(int value); -- QString stripInvalidXml10Chars(QString str); -- -- void raiseError(const QString& errorMessage); -- -- const quint32 m_kdbxVersion; -- -- bool m_innerStreamProtectionDisabled = false; -- -- QXmlStreamWriter m_xml; -- QPointer m_db; -- QPointer m_meta; -- KeePass2RandomStream* m_randomStream = nullptr; -- QHash m_idMap; -- QByteArray m_headerHash; -- -- bool m_error = false; -- -- QString m_errorStr = ""; --}; -- --#endif // KEEPASSX_KDBXXMLWRITER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1.h keepassxc-2.6.4-patched/src/format/KeePass1.h ---- keepassxc-2.6.4-orig/src/format/KeePass1.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass1.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,40 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS1_H --#define KEEPASSX_KEEPASS1_H -- --#include -- --namespace KeePass1 --{ -- const quint32 SIGNATURE_1 = 0x9AA2D903; -- const quint32 SIGNATURE_2 = 0xB54BFB65; -- const quint32 PWM_DBVER_DW = 0x00030002; -- const quint32 FILE_VERSION = 0x00030002; -- const quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFFFF00; -- -- const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; -- -- enum EncryptionFlags -- { -- Rijndael = 2, -- Twofish = 8 -- }; --} // namespace KeePass1 -- --#endif // KEEPASSX_KEEPASS1_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1Reader.cpp keepassxc-2.6.4-patched/src/format/KeePass1Reader.cpp ---- keepassxc-2.6.4-orig/src/format/KeePass1Reader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass1Reader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1021 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeePass1Reader.h" -- --#include --#include --#include -- --#include "core/Database.h" --#include "core/Endian.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "crypto/CryptoHash.h" --#include "crypto/kdf/AesKdf.h" --#include "format/KeePass1.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" --#include "streams/SymmetricCipherStream.h" -- --class KeePass1Key : public CompositeKey --{ --public: -- QByteArray rawKey() const override; -- virtual void clear(); -- void setPassword(const QByteArray& password); -- void setKeyfileData(const QByteArray& keyfileData); -- --private: -- QByteArray m_password; -- QByteArray m_keyfileData; --}; -- --KeePass1Reader::KeePass1Reader() -- : m_tmpParent(nullptr) -- , m_device(nullptr) -- , m_encryptionFlags(0) -- , m_transformRounds(0) -- , m_error(false) --{ --} -- --QSharedPointer --KeePass1Reader::readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice) --{ -- m_error = false; -- m_errorStr.clear(); -- -- QByteArray keyfileData; -- auto newFileKey = QSharedPointer::create(); -- -- if (keyfileDevice) { -- keyfileData = readKeyfile(keyfileDevice); -- -- if (keyfileData.isEmpty()) { -- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); -- return {}; -- } -- if (!keyfileDevice->seek(0)) { -- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); -- return {}; -- } -- -- if (!newFileKey->load(keyfileDevice)) { -- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); -- return {}; -- } -- } -- -- auto db = QSharedPointer::create(); -- QScopedPointer tmpParent(new Group()); -- m_db = db; -- m_tmpParent = tmpParent.data(); -- m_device = device; -- -- bool ok; -- -- auto signature1 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok || signature1 != KeePass1::SIGNATURE_1) { -- raiseError(tr("Not a KeePass database.")); -- return {}; -- } -- -- auto signature2 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok || signature2 != KeePass1::SIGNATURE_2) { -- raiseError(tr("Not a KeePass database.")); -- return {}; -- } -- -- m_encryptionFlags = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok || !(m_encryptionFlags & KeePass1::Rijndael || m_encryptionFlags & KeePass1::Twofish)) { -- raiseError(tr("Unsupported encryption algorithm.")); -- return {}; -- } -- -- auto version = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok -- || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) -- != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { -- raiseError(tr("Unsupported KeePass database version.")); -- return {}; -- } -- -- m_masterSeed = m_device->read(16); -- if (m_masterSeed.size() != 16) { -- raiseError("Unable to read master seed"); -- return {}; -- } -- -- m_encryptionIV = m_device->read(16); -- if (m_encryptionIV.size() != 16) { -- raiseError(tr("Unable to read encryption IV", "IV = Initialization Vector for symmetric cipher")); -- return {}; -- } -- -- auto numGroups = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid number of groups")); -- return {}; -- } -- -- auto numEntries = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid number of entries")); -- return {}; -- } -- -- m_contentHashHeader = m_device->read(32); -- if (m_contentHashHeader.size() != 32) { -- raiseError(tr("Invalid content hash size")); -- return {}; -- } -- -- m_transformSeed = m_device->read(32); -- if (m_transformSeed.size() != 32) { -- raiseError(tr("Invalid transform seed size")); -- return {}; -- } -- -- m_transformRounds = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid number of transform rounds")); -- return {}; -- } -- auto kdf = QSharedPointer::create(true); -- kdf->setRounds(m_transformRounds); -- kdf->setSeed(m_transformSeed); -- db->setKdf(kdf); -- -- qint64 contentPos = m_device->pos(); -- -- QScopedPointer cipherStream(testKeys(password, keyfileData, contentPos)); -- -- if (!cipherStream) { -- return {}; -- } -- -- QList groups; -- for (quint32 i = 0; i < numGroups; i++) { -- Group* group = readGroup(cipherStream.data()); -- if (!group) { -- return {}; -- } -- groups.append(group); -- } -- -- QList entries; -- for (quint32 i = 0; i < numEntries; i++) { -- Entry* entry = readEntry(cipherStream.data()); -- if (!entry) { -- return {}; -- } -- entries.append(entry); -- } -- -- if (!constructGroupTree(groups)) { -- raiseError(tr("Unable to construct group tree")); -- return {}; -- } -- -- for (Entry* entry : asConst(entries)) { -- if (isMetaStream(entry)) { -- parseMetaStream(entry); -- -- delete entry; -- } else { -- quint32 groupId = m_entryGroupIds.value(entry); -- if (!m_groupIds.contains(groupId)) { -- qWarning("Orphaned entry found, assigning to root group."); -- entry->setGroup(m_db->rootGroup()); -- } else { -- entry->setGroup(m_groupIds.value(groupId)); -- } -- entry->setUuid(QUuid::createUuid()); -- } -- } -- -- db->rootGroup()->setName(tr("Root")); -- -- const QList children = db->rootGroup()->children(); -- for (Group* group : children) { -- if (group->name() == "Backup") { -- group->setSearchingEnabled(Group::Disable); -- group->setAutoTypeEnabled(Group::Disable); -- } -- } -- -- Q_ASSERT(m_tmpParent->children().isEmpty()); -- Q_ASSERT(m_tmpParent->entries().isEmpty()); -- -- for (Group* group : asConst(groups)) { -- group->setUpdateTimeinfo(true); -- } -- -- const QList dbEntries = m_db->rootGroup()->entriesRecursive(); -- for (Entry* entry : dbEntries) { -- entry->setUpdateTimeinfo(true); -- } -- -- auto key = QSharedPointer::create(); -- if (!password.isEmpty()) { -- key->addKey(QSharedPointer::create(password)); -- } -- if (keyfileDevice) { -- key->addKey(newFileKey); -- } -- -- if (!db->setKey(key)) { -- raiseError(tr("Unable to calculate database key")); -- return {}; -- } -- -- return db; --} -- --QSharedPointer --KeePass1Reader::readDatabase(QIODevice* device, const QString& password, const QString& keyfileName) --{ -- QScopedPointer keyFile; -- if (!keyfileName.isEmpty()) { -- keyFile.reset(new QFile(keyfileName)); -- if (!keyFile->open(QFile::ReadOnly)) { -- raiseError(keyFile->errorString()); -- return {}; -- } -- } -- -- return QSharedPointer(readDatabase(device, password, keyFile.data())); --} -- --QSharedPointer --KeePass1Reader::readDatabase(const QString& filename, const QString& password, const QString& keyfileName) --{ -- QFile dbFile(filename); -- if (!dbFile.open(QFile::ReadOnly)) { -- raiseError(dbFile.errorString()); -- return {}; -- } -- -- auto db = readDatabase(&dbFile, password, keyfileName); -- -- if (dbFile.error() != QFile::NoError) { -- raiseError(dbFile.errorString()); -- return {}; -- } -- -- return db; --} -- --bool KeePass1Reader::hasError() --{ -- return m_error; --} -- --QString KeePass1Reader::errorString() --{ -- return m_errorStr; --} -- --SymmetricCipherStream* --KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos) --{ -- const QList encodings = {Windows1252, Latin1, UTF8}; -- -- QScopedPointer cipherStream; -- QByteArray passwordData; -- QTextCodec* codec = QTextCodec::codecForName("Windows-1252"); -- QByteArray passwordDataCorrect = codec->fromUnicode(password); -- -- for (PasswordEncoding encoding : encodings) { -- if (encoding == Windows1252) { -- passwordData = passwordDataCorrect; -- } else if (encoding == Latin1) { -- // KeePassX used Latin-1 encoding for passwords until version 0.3.1 -- // but KeePass/Win32 uses Windows Codepage 1252. -- passwordData = password.toLatin1(); -- -- if (passwordData == passwordDataCorrect) { -- continue; -- } else { -- qWarning("Testing password encoded as Latin-1."); -- } -- } else if (encoding == UTF8) { -- // KeePassX used UTF-8 encoding for passwords until version 0.2.2 -- // but KeePass/Win32 uses Windows Codepage 1252. -- passwordData = password.toUtf8(); -- -- if (passwordData == passwordDataCorrect) { -- continue; -- } else { -- qWarning("Testing password encoded as UTF-8."); -- } -- } -- -- QByteArray finalKey = key(passwordData, keyfileData); -- if (finalKey.isEmpty()) { -- return nullptr; -- } -- if (m_encryptionFlags & KeePass1::Rijndael) { -- cipherStream.reset(new SymmetricCipherStream( -- m_device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); -- } else { -- cipherStream.reset(new SymmetricCipherStream( -- m_device, SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); -- } -- -- if (!cipherStream->init(finalKey, m_encryptionIV)) { -- raiseError(cipherStream->errorString()); -- return nullptr; -- } -- if (!cipherStream->open(QIODevice::ReadOnly)) { -- raiseError(cipherStream->errorString()); -- return nullptr; -- } -- -- bool success = verifyKey(cipherStream.data()); -- -- cipherStream->reset(); -- cipherStream->close(); -- if (!m_device->seek(contentPos)) { -- QString msg = tr("unable to seek to content position"); -- if (!m_device->errorString().isEmpty()) { -- msg.append("\n").append(m_device->errorString()); -- } -- raiseError(msg); -- -- return nullptr; -- } -- cipherStream->open(QIODevice::ReadOnly); -- -- if (success) { -- break; -- } else { -- cipherStream.reset(); -- } -- } -- -- if (!cipherStream) { -- raiseError(tr("Invalid credentials were provided, please try again.\n" -- "If this reoccurs, then your database file may be corrupt.")); -- } -- -- return cipherStream.take(); --} -- --QByteArray KeePass1Reader::key(const QByteArray& password, const QByteArray& keyfileData) --{ -- Q_ASSERT(!m_masterSeed.isEmpty()); -- Q_ASSERT(!m_transformSeed.isEmpty()); -- -- KeePass1Key key; -- key.setPassword(password); -- key.setKeyfileData(keyfileData); -- -- QByteArray transformedKey; -- bool result = key.transform(*m_db->kdf(), transformedKey); -- -- if (!result) { -- raiseError(tr("Key transformation failed")); -- return QByteArray(); -- } -- -- CryptoHash hash(CryptoHash::Sha256); -- hash.addData(m_masterSeed); -- hash.addData(transformedKey); -- return hash.result(); --} -- --bool KeePass1Reader::verifyKey(SymmetricCipherStream* cipherStream) --{ -- CryptoHash contentHash(CryptoHash::Sha256); -- QByteArray buffer; -- -- do { -- if (!Tools::readFromDevice(cipherStream, buffer)) { -- return false; -- } -- contentHash.addData(buffer); -- } while (!buffer.isEmpty()); -- -- return contentHash.result() == m_contentHashHeader; --} -- --Group* KeePass1Reader::readGroup(QIODevice* cipherStream) --{ -- QScopedPointer group(new Group()); -- group->setUpdateTimeinfo(false); -- group->setParent(m_tmpParent); -- -- TimeInfo timeInfo; -- -- quint32 groupId = 0; -- quint32 groupLevel = 0; -- bool groupIdSet = false; -- bool groupLevelSet = false; -- -- bool ok; -- bool reachedEnd = false; -- -- do { -- quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Invalid group field type number")); -- return nullptr; -- } -- -- int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); -- if (!ok) { -- raiseError(tr("Invalid group field size")); -- return nullptr; -- } -- -- QByteArray fieldData = cipherStream->read(fieldSize); -- if (fieldData.size() != fieldSize) { -- raiseError(tr("Read group field data doesn't match size")); -- return nullptr; -- } -- -- switch (fieldType) { -- case 0x0000: -- // ignore field -- break; -- case 0x0001: -- if (fieldSize != 4) { -- raiseError(tr("Incorrect group id field size")); -- return nullptr; -- } -- groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); -- groupIdSet = true; -- break; -- case 0x0002: -- group->setName(QString::fromUtf8(fieldData.constData())); -- break; -- case 0x0003: { -- if (fieldSize != 5) { -- raiseError(tr("Incorrect group creation time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setCreationTime(dateTime); -- } -- break; -- } -- case 0x0004: { -- if (fieldSize != 5) { -- raiseError(tr("Incorrect group modification time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setLastModificationTime(dateTime); -- } -- break; -- } -- case 0x0005: { -- if (fieldSize != 5) { -- raiseError(tr("Incorrect group access time field size")); -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setLastAccessTime(dateTime); -- } -- break; -- } -- case 0x0006: { -- if (fieldSize != 5) { -- raiseError(tr("Incorrect group expiry time field size")); -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setExpires(true); -- timeInfo.setExpiryTime(dateTime); -- } -- break; -- } -- case 0x0007: { -- if (fieldSize != 4) { -- raiseError(tr("Incorrect group icon field size")); -- return nullptr; -- } -- quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); -- group->setIcon(iconNumber); -- break; -- } -- case 0x0008: { -- if (fieldSize != 2) { -- raiseError(tr("Incorrect group level field size")); -- return nullptr; -- } -- groupLevel = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); -- groupLevelSet = true; -- break; -- } -- case 0x0009: -- // flags, ignore field -- break; -- case 0xFFFF: -- reachedEnd = true; -- break; -- default: -- // invalid field -- raiseError(tr("Invalid group field type")); -- return nullptr; -- } -- } while (!reachedEnd); -- -- if (!groupIdSet || !groupLevelSet) { -- raiseError(tr("Missing group id or level")); -- return nullptr; -- } -- -- group->setUuid(QUuid::createUuid()); -- group->setTimeInfo(timeInfo); -- m_groupIds.insert(groupId, group.data()); -- m_groupLevels.insert(group.data(), groupLevel); -- -- return group.take(); --} -- --Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) --{ -- QScopedPointer entry(new Entry()); -- entry->setUpdateTimeinfo(false); -- entry->setGroup(m_tmpParent); -- -- TimeInfo timeInfo; -- QString binaryName; -- bool ok; -- bool reachedEnd = false; -- -- do { -- quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); -- if (!ok) { -- raiseError(tr("Missing entry field type number")); -- return nullptr; -- } -- -- int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); -- if (!ok) { -- raiseError(tr("Invalid entry field size")); -- return nullptr; -- } -- -- QByteArray fieldData = cipherStream->read(fieldSize); -- if (fieldData.size() != fieldSize) { -- raiseError(tr("Read entry field data doesn't match size")); -- return nullptr; -- } -- -- switch (fieldType) { -- case 0x0000: -- // ignore field -- break; -- case 0x0001: -- if (fieldSize != 16) { -- raiseError(tr("Invalid entry uuid field size")); -- return nullptr; -- } -- m_entryUuids.insert(fieldData, entry.data()); -- break; -- case 0x0002: { -- if (fieldSize != 4) { -- raiseError(tr("Invalid entry group id field size")); -- return nullptr; -- } -- quint32 groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); -- m_entryGroupIds.insert(entry.data(), groupId); -- break; -- } -- case 0x0003: { -- if (fieldSize != 4) { -- raiseError(tr("Invalid entry icon field size")); -- return nullptr; -- } -- quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); -- entry->setIcon(iconNumber); -- break; -- } -- case 0x0004: -- entry->setTitle(QString::fromUtf8(fieldData.constData())); -- break; -- case 0x0005: -- entry->setUrl(QString::fromUtf8(fieldData.constData())); -- break; -- case 0x0006: -- entry->setUsername(QString::fromUtf8(fieldData.constData())); -- break; -- case 0x0007: -- entry->setPassword(QString::fromUtf8(fieldData.constData())); -- break; -- case 0x0008: -- parseNotes(QString::fromUtf8(fieldData.constData()), entry.data()); -- break; -- case 0x0009: { -- if (fieldSize != 5) { -- raiseError(tr("Invalid entry creation time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setCreationTime(dateTime); -- } -- break; -- } -- case 0x000A: { -- if (fieldSize != 5) { -- raiseError(tr("Invalid entry modification time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setLastModificationTime(dateTime); -- } -- break; -- } -- case 0x000B: { -- if (fieldSize != 5) { -- raiseError(tr("Invalid entry creation time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setLastAccessTime(dateTime); -- } -- break; -- } -- case 0x000C: { -- if (fieldSize != 5) { -- raiseError(tr("Invalid entry expiry time field size")); -- return nullptr; -- } -- QDateTime dateTime = dateFromPackedStruct(fieldData); -- if (dateTime.isValid()) { -- timeInfo.setExpires(true); -- timeInfo.setExpiryTime(dateTime); -- } -- break; -- } -- case 0x000D: -- binaryName = QString::fromUtf8(fieldData.constData()); -- break; -- case 0x000E: -- if (fieldSize != 0) { -- entry->attachments()->set(binaryName, fieldData); -- } -- break; -- case 0xFFFF: -- reachedEnd = true; -- break; -- default: -- // invalid field -- raiseError(tr("Invalid entry field type")); -- return nullptr; -- } -- } while (!reachedEnd); -- -- entry->setTimeInfo(timeInfo); -- -- return entry.take(); --} -- --void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) --{ -- QRegExp sequenceRegexp("Auto-Type(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); -- QRegExp windowRegexp("Auto-Type-Window(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); -- QHash sequences; -- QMap windows; -- -- QStringList notes; -- -- bool lastLineAutoType = false; -- const QStringList rawNotesLines = rawNotes.split("\n"); -- for (QString line : rawNotesLines) { -- line.remove("\r"); -- -- if (sequenceRegexp.exactMatch(line)) { -- if (sequenceRegexp.cap(1).isEmpty()) { -- entry->setDefaultAutoTypeSequence(sequenceRegexp.cap(2)); -- } else { -- sequences[sequenceRegexp.cap(1).toInt()] = sequenceRegexp.cap(2); -- } -- -- lastLineAutoType = true; -- } else if (windowRegexp.exactMatch(line)) { -- int nr; -- if (windowRegexp.cap(1).isEmpty()) { -- nr = -1; // special number that matches no other sequence -- } else { -- nr = windowRegexp.cap(1).toInt(); -- } -- -- windows[nr].append(windowRegexp.cap(2)); -- -- lastLineAutoType = true; -- } else { -- // don't add empty lines following a removed auto-type line -- if (!lastLineAutoType || !line.isEmpty()) { -- notes.append(line); -- } -- lastLineAutoType = false; -- } -- } -- -- entry->setNotes(notes.join("\n")); -- -- QMapIterator i(windows); -- while (i.hasNext()) { -- i.next(); -- -- QString sequence = sequences.value(i.key()); -- const QStringList windowList = i.value(); -- -- for (const QString& window : windowList) { -- AutoTypeAssociations::Association assoc; -- assoc.window = window; -- assoc.sequence = sequence; -- entry->autoTypeAssociations()->add(assoc); -- } -- } --} -- --bool KeePass1Reader::constructGroupTree(const QList& groups) --{ -- for (int i = 0; i < groups.size(); i++) { -- quint32 level = m_groupLevels.value(groups[i]); -- -- if (level == 0) { -- groups[i]->setParent(m_db->rootGroup()); -- } else { -- for (int j = (i - 1); j >= 0; j--) { -- if (m_groupLevels.value(groups[j]) < level) { -- if ((level - m_groupLevels.value(groups[j])) != 1) { -- return false; -- } -- -- groups[i]->setParent(groups[j]); -- break; -- } -- } -- } -- -- if (groups[i]->parentGroup() == m_tmpParent) { -- return false; -- } -- } -- -- return true; --} -- --void KeePass1Reader::parseMetaStream(const Entry* entry) --{ -- QByteArray data = entry->attachments()->value("bin-stream"); -- -- if (entry->notes() == "KPX_GROUP_TREE_STATE") { -- if (!parseGroupTreeState(data)) { -- qWarning("Unable to parse group tree state metastream."); -- } -- } else if (entry->notes() == "KPX_CUSTOM_ICONS_4") { -- if (!parseCustomIcons4(data)) { -- qWarning("Unable to parse custom icons metastream."); -- } -- } else { -- qWarning("Ignoring unknown metastream \"%s\".", entry->notes().toLocal8Bit().constData()); -- } --} -- --bool KeePass1Reader::parseGroupTreeState(const QByteArray& data) --{ -- if (data.size() < 4) { -- return false; -- } -- -- int pos = 0; -- quint32 num = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- if (static_cast(data.size() - 4) != (num * 5)) { -- return false; -- } -- -- for (quint32 i = 0; i < num; i++) { -- quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- bool expanded = data.at(pos); -- pos += 1; -- -- if (m_groupIds.contains(groupId)) { -- m_groupIds[groupId]->setExpanded(expanded); -- } -- } -- -- return true; --} -- --bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) --{ -- if (data.size() < 12) { -- return false; -- } -- -- int pos = 0; -- -- quint32 numIcons = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- quint32 numEntries = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- quint32 numGroups = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- QList iconUuids; -- -- for (quint32 i = 0; i < numIcons; i++) { -- if (data.size() < (pos + 4)) { -- return false; -- } -- quint32 iconSize = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- if (static_cast(data.size()) < (pos + iconSize)) { -- return false; -- } -- QImage icon = QImage::fromData(data.mid(pos, iconSize)); -- pos += iconSize; -- -- if (icon.width() != 16 || icon.height() != 16) { -- icon = icon.scaled(16, 16); -- } -- -- QUuid uuid = QUuid::createUuid(); -- iconUuids.append(uuid); -- m_db->metadata()->addCustomIcon(uuid, icon); -- } -- -- if (static_cast(data.size()) < (pos + numEntries * 20)) { -- return false; -- } -- -- for (quint32 i = 0; i < numEntries; i++) { -- QByteArray entryUuid = data.mid(pos, 16); -- pos += 16; -- -- quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- if (m_entryUuids.contains(entryUuid) && (iconId < static_cast(iconUuids.size()))) { -- m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]); -- } -- } -- -- if (static_cast(data.size()) < (pos + numGroups * 8)) { -- return false; -- } -- -- for (quint32 i = 0; i < numGroups; i++) { -- quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); -- pos += 4; -- -- if (m_groupIds.contains(groupId) && (iconId < static_cast(iconUuids.size()))) { -- m_groupIds[groupId]->setIcon(iconUuids[iconId]); -- } -- } -- -- return true; --} -- --void KeePass1Reader::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -- --QDateTime KeePass1Reader::dateFromPackedStruct(const QByteArray& data) --{ -- Q_ASSERT(data.size() == 5); -- -- quint32 dw1 = static_cast(data.at(0)); -- quint32 dw2 = static_cast(data.at(1)); -- quint32 dw3 = static_cast(data.at(2)); -- quint32 dw4 = static_cast(data.at(3)); -- quint32 dw5 = static_cast(data.at(4)); -- -- int y = (dw1 << 6) | (dw2 >> 2); -- int mon = ((dw2 & 0x00000003) << 2) | (dw3 >> 6); -- int d = (dw3 >> 1) & 0x0000001F; -- int h = ((dw3 & 0x00000001) << 4) | (dw4 >> 4); -- int min = ((dw4 & 0x0000000F) << 2) | (dw5 >> 6); -- int s = dw5 & 0x0000003F; -- -- QDateTime dateTime = QDateTime(QDate(y, mon, d), QTime(h, min, s), Qt::UTC); -- -- // check for the special "never" datetime -- if (dateTime == QDateTime(QDate(2999, 12, 28), QTime(23, 59, 59), Qt::UTC)) { -- return QDateTime(); -- } else { -- return dateTime; -- } --} -- --bool KeePass1Reader::isMetaStream(const Entry* entry) --{ -- return entry->attachments()->keys().contains("bin-stream") && !entry->notes().isEmpty() -- && entry->title() == "Meta-Info" && entry->username() == "SYSTEM" && entry->url() == "$" -- && entry->iconNumber() == 0; --} -- --QByteArray KeePass1Reader::readKeyfile(QIODevice* device) --{ -- if (device->size() == 0) { -- return QByteArray(); -- } -- -- if (device->size() == 32) { -- QByteArray data = device->read(32); -- if (data.size() != 32) { -- return QByteArray(); -- } -- -- return data; -- } -- -- if (device->size() == 64) { -- QByteArray data = device->read(64); -- -- if (data.size() != 64) { -- return QByteArray(); -- } -- -- if (Tools::isHex(data)) { -- return QByteArray::fromHex(data); -- } else { -- device->seek(0); -- } -- } -- -- CryptoHash cryptoHash(CryptoHash::Sha256); -- QByteArray buffer; -- -- do { -- if (!Tools::readFromDevice(device, buffer)) { -- return QByteArray(); -- } -- cryptoHash.addData(buffer); -- } while (!buffer.isEmpty()); -- -- return cryptoHash.result(); --} -- --QByteArray KeePass1Key::rawKey() const --{ -- if (m_keyfileData.isEmpty()) { -- return CryptoHash::hash(m_password, CryptoHash::Sha256); -- } else if (m_password.isEmpty()) { -- return m_keyfileData; -- } else { -- CryptoHash keyHash(CryptoHash::Sha256); -- keyHash.addData(CryptoHash::hash(m_password, CryptoHash::Sha256)); -- keyHash.addData(m_keyfileData); -- return keyHash.result(); -- } --} -- --void KeePass1Key::clear() --{ -- CompositeKey::clear(); -- -- m_password.clear(); -- m_keyfileData.clear(); --} -- --void KeePass1Key::setPassword(const QByteArray& password) --{ -- m_password = password; --} -- --void KeePass1Key::setKeyfileData(const QByteArray& keyfileData) --{ -- m_keyfileData = keyfileData; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1Reader.h keepassxc-2.6.4-patched/src/format/KeePass1Reader.h ---- keepassxc-2.6.4-orig/src/format/KeePass1Reader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass1Reader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS1READER_H --#define KEEPASSX_KEEPASS1READER_H -- --#include --#include --#include --#include -- --class Database; --class Entry; --class Group; --class SymmetricCipherStream; --class QIODevice; -- --class KeePass1Reader --{ -- Q_DECLARE_TR_FUNCTIONS(KeePass1Reader) -- --public: -- KeePass1Reader(); -- QSharedPointer readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice); -- QSharedPointer readDatabase(QIODevice* device, const QString& password, const QString& keyfileName); -- QSharedPointer readDatabase(const QString& filename, const QString& password, const QString& keyfileName); -- bool hasError(); -- QString errorString(); -- --private: -- enum PasswordEncoding -- { -- Windows1252, -- Latin1, -- UTF8 -- }; -- -- SymmetricCipherStream* testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos); -- QByteArray key(const QByteArray& password, const QByteArray& keyfileData); -- bool verifyKey(SymmetricCipherStream* cipherStream); -- Group* readGroup(QIODevice* cipherStream); -- Entry* readEntry(QIODevice* cipherStream); -- void parseNotes(const QString& rawNotes, Entry* entry); -- bool constructGroupTree(const QList& groups); -- void parseMetaStream(const Entry* entry); -- bool parseGroupTreeState(const QByteArray& data); -- bool parseCustomIcons4(const QByteArray& data); -- void raiseError(const QString& errorMessage); -- static QByteArray readKeyfile(QIODevice* device); -- static QDateTime dateFromPackedStruct(const QByteArray& data); -- static bool isMetaStream(const Entry* entry); -- -- QSharedPointer m_db; -- Group* m_tmpParent; -- QIODevice* m_device; -- quint32 m_encryptionFlags; -- QByteArray m_masterSeed; -- QByteArray m_encryptionIV; -- QByteArray m_contentHashHeader; -- QByteArray m_transformSeed; -- quint32 m_transformRounds; -- QHash m_groupIds; -- QHash m_groupLevels; -- QHash m_entryUuids; -- QHash m_entryGroupIds; -- -- bool m_error; -- QString m_errorStr; --}; -- --#endif // KEEPASSX_KEEPASS1READER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2.cpp keepassxc-2.6.4-patched/src/format/KeePass2.cpp ---- keepassxc-2.6.4-orig/src/format/KeePass2.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,136 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeePass2.h" --#include "crypto/CryptoHash.h" --#include "crypto/kdf/AesKdf.h" --#include "crypto/kdf/Argon2Kdf.h" --#include -- --#define UUID_LENGTH 16 -- --const QUuid KeePass2::CIPHER_AES128 = QUuid("61ab05a1-9464-41c3-8d74-3a563df8dd35"); --const QUuid KeePass2::CIPHER_AES256 = QUuid("31c1f2e6-bf71-4350-be58-05216afc5aff"); --const QUuid KeePass2::CIPHER_TWOFISH = QUuid("ad68f29f-576f-4bb9-a36a-d47af965346c"); --const QUuid KeePass2::CIPHER_CHACHA20 = QUuid("d6038a2b-8b6f-4cb5-a524-339a31dbb59a"); -- --const QUuid KeePass2::KDF_AES_KDBX3 = QUuid("c9d9f39a-628a-4460-bf74-0d08c18a4fea"); --const QUuid KeePass2::KDF_AES_KDBX4 = QUuid("7c02bb82-79a7-4ac0-927d-114a00648238"); --const QUuid KeePass2::KDF_ARGON2D = QUuid("ef636ddf-8c29-444b-91f7-a9a403e30a0c"); --const QUuid KeePass2::KDF_ARGON2ID = QUuid("9e298b19-56db-4773-b23d-fc3ec6f0a1e6"); -- --const QByteArray KeePass2::INNER_STREAM_SALSA20_IV("\xe8\x30\x09\x4b\x97\x20\x5d\x2a"); -- --const QString KeePass2::KDFPARAM_UUID("$UUID"); --// AES parameters --const QString KeePass2::KDFPARAM_AES_ROUNDS("R"); --const QString KeePass2::KDFPARAM_AES_SEED("S"); --// Argon2 parameters --const QString KeePass2::KDFPARAM_ARGON2_SALT("S"); --const QString KeePass2::KDFPARAM_ARGON2_PARALLELISM("P"); --const QString KeePass2::KDFPARAM_ARGON2_MEMORY("M"); --const QString KeePass2::KDFPARAM_ARGON2_ITERATIONS("I"); --const QString KeePass2::KDFPARAM_ARGON2_VERSION("V"); --const QString KeePass2::KDFPARAM_ARGON2_SECRET("K"); --const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A"); -- --const QList> KeePass2::CIPHERS{ -- qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES 256-bit")), -- qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish 256-bit")), -- qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20 256-bit"))}; -- --const QList> KeePass2::KDFS{ -- qMakePair(KeePass2::KDF_ARGON2D, QObject::tr("Argon2d (KDBX 4 – recommended)")), -- qMakePair(KeePass2::KDF_ARGON2ID, QObject::tr("Argon2id (KDBX 4)")), -- qMakePair(KeePass2::KDF_AES_KDBX4, QObject::tr("AES-KDF (KDBX 4)")), -- qMakePair(KeePass2::KDF_AES_KDBX3, QObject::tr("AES-KDF (KDBX 3.1)"))}; -- --QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) --{ -- CryptoHash hmacKeyHash(CryptoHash::Sha512); -- hmacKeyHash.addData(masterSeed); -- hmacKeyHash.addData(transformedMasterKey); -- hmacKeyHash.addData(QByteArray(1, '\x01')); -- return hmacKeyHash.result(); --} -- --/** -- * Create KDF object from KDBX4+ KDF parameters. -- * -- * @param p variant map containing parameters -- * @return initialized KDF -- */ --QSharedPointer KeePass2::kdfFromParameters(const QVariantMap& p) --{ -- QByteArray uuidBytes = p.value(KDFPARAM_UUID).toByteArray(); -- if (uuidBytes.size() != UUID_LENGTH) { -- return {}; -- } -- -- QUuid kdfUuid = QUuid::fromRfc4122(uuidBytes); -- if (kdfUuid == KDF_AES_KDBX3) { -- // upgrade to non-legacy AES-KDF, since KDBX3 doesn't have any KDF parameters -- kdfUuid = KDF_AES_KDBX4; -- } -- QSharedPointer kdf = uuidToKdf(kdfUuid); -- if (kdf.isNull()) { -- return {}; -- } -- -- if (!kdf->processParameters(p)) { -- return {}; -- } -- -- return kdf; --} -- --QVariantMap KeePass2::kdfToParameters(const QSharedPointer& kdf) --{ -- return kdf->writeParameters(); --} -- --QSharedPointer KeePass2::uuidToKdf(const QUuid& uuid) --{ -- if (uuid == KDF_AES_KDBX3) { -- return QSharedPointer::create(true); -- } -- if (uuid == KDF_AES_KDBX4) { -- return QSharedPointer::create(); -- } -- if (uuid == KDF_ARGON2D) { -- return QSharedPointer::create(Argon2Kdf::Type::Argon2d); -- } -- if (uuid == KDF_ARGON2ID) { -- return QSharedPointer::create(Argon2Kdf::Type::Argon2id); -- } -- -- return {}; --} -- --KeePass2::ProtectedStreamAlgo KeePass2::idToProtectedStreamAlgo(quint32 id) --{ -- switch (id) { -- case static_cast(KeePass2::ProtectedStreamAlgo::ArcFourVariant): -- return KeePass2::ProtectedStreamAlgo::ArcFourVariant; -- case static_cast(KeePass2::ProtectedStreamAlgo::Salsa20): -- return KeePass2::ProtectedStreamAlgo::Salsa20; -- case static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20): -- return KeePass2::ProtectedStreamAlgo::ChaCha20; -- default: -- return KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo; -- } --} -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2.h keepassxc-2.6.4-patched/src/format/KeePass2.h ---- keepassxc-2.6.4-orig/src/format/KeePass2.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,138 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS2_H --#define KEEPASSX_KEEPASS2_H -- --#include --#include --#include --#include --#include --#include -- --#include "crypto/SymmetricCipher.h" --#include "crypto/kdf/Kdf.h" -- --namespace KeePass2 --{ -- -- constexpr quint32 SIGNATURE_1 = 0x9AA2D903; -- constexpr quint32 SIGNATURE_2 = 0xB54BFB67; -- -- constexpr quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; -- constexpr quint32 FILE_VERSION_4 = 0x00040000; -- constexpr quint32 FILE_VERSION_3_1 = 0x00030001; -- constexpr quint32 FILE_VERSION_3 = 0x00030000; -- constexpr quint32 FILE_VERSION_2 = 0x00020000; -- constexpr quint32 FILE_VERSION_MIN = FILE_VERSION_2; -- -- constexpr quint16 VARIANTMAP_VERSION = 0x0100; -- constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; -- -- const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; -- -- extern const QUuid CIPHER_AES128; -- extern const QUuid CIPHER_AES256; -- extern const QUuid CIPHER_TWOFISH; -- extern const QUuid CIPHER_CHACHA20; -- -- extern const QUuid KDF_AES_KDBX3; -- extern const QUuid KDF_AES_KDBX4; -- extern const QUuid KDF_ARGON2D; -- extern const QUuid KDF_ARGON2ID; -- -- extern const QByteArray INNER_STREAM_SALSA20_IV; -- -- extern const QString KDFPARAM_UUID; -- extern const QString KDFPARAM_AES_ROUNDS; -- extern const QString KDFPARAM_AES_SEED; -- extern const QString KDFPARAM_ARGON2_SALT; -- extern const QString KDFPARAM_ARGON2_PARALLELISM; -- extern const QString KDFPARAM_ARGON2_MEMORY; -- extern const QString KDFPARAM_ARGON2_ITERATIONS; -- extern const QString KDFPARAM_ARGON2_VERSION; -- extern const QString KDFPARAM_ARGON2_SECRET; -- extern const QString KDFPARAM_ARGON2_ASSOCDATA; -- -- extern const QList> CIPHERS; -- extern const QList> KDFS; -- -- enum class HeaderFieldID -- { -- EndOfHeader = 0, -- Comment = 1, -- CipherID = 2, -- CompressionFlags = 3, -- MasterSeed = 4, -- TransformSeed = 5, -- TransformRounds = 6, -- EncryptionIV = 7, -- ProtectedStreamKey = 8, -- StreamStartBytes = 9, -- InnerRandomStreamID = 10, -- KdfParameters = 11, -- PublicCustomData = 12 -- }; -- -- enum class InnerHeaderFieldID : quint8 -- { -- End = 0, -- InnerRandomStreamID = 1, -- InnerRandomStreamKey = 2, -- Binary = 3 -- }; -- -- enum class ProtectedStreamAlgo -- { -- ArcFourVariant = 1, -- Salsa20 = 2, -- ChaCha20 = 3, -- InvalidProtectedStreamAlgo = -1 -- }; -- -- enum class VariantMapFieldType : quint8 -- { -- End = 0, -- // Byte = 0x02, -- // UInt16 = 0x03, -- UInt32 = 0x04, -- UInt64 = 0x05, -- // Signed mask: 0x08 -- Bool = 0x08, -- // SByte = 0x0A, -- // Int16 = 0x0B, -- Int32 = 0x0C, -- Int64 = 0x0D, -- // Float = 0x10, -- // Double = 0x11, -- // Decimal = 0x12, -- // Char = 0x17, // 16-bit Unicode character -- String = 0x18, -- // Array mask: 0x40 -- ByteArray = 0x42 -- }; -- -- QByteArray hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey); -- QSharedPointer kdfFromParameters(const QVariantMap& p); -- QVariantMap kdfToParameters(const QSharedPointer& kdf); -- QSharedPointer uuidToKdf(const QUuid& uuid); -- ProtectedStreamAlgo idToProtectedStreamAlgo(quint32 id); -- --} // namespace KeePass2 -- --#endif // KEEPASSX_KEEPASS2_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.cpp keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.cpp ---- keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,133 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeePass2RandomStream.h" -- --#include "crypto/CryptoHash.h" --#include "format/KeePass2.h" -- --KeePass2RandomStream::KeePass2RandomStream(KeePass2::ProtectedStreamAlgo algo) -- : m_cipher(mapAlgo(algo), SymmetricCipher::Stream, SymmetricCipher::Encrypt) -- , m_offset(0) --{ --} -- --bool KeePass2RandomStream::init(const QByteArray& key) --{ -- switch (m_cipher.algorithm()) { -- case SymmetricCipher::Salsa20: -- return m_cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV); -- case SymmetricCipher::ChaCha20: { -- QByteArray keyIv = CryptoHash::hash(key, CryptoHash::Sha512); -- return m_cipher.init(keyIv.left(32), keyIv.mid(32, 12)); -- } -- default: -- qWarning("Invalid stream algorithm (%d)", m_cipher.algorithm()); -- break; -- } -- return false; --} -- --QByteArray KeePass2RandomStream::randomBytes(int size, bool* ok) --{ -- QByteArray result; -- -- int bytesRemaining = size; -- -- while (bytesRemaining > 0) { -- if (m_buffer.size() == m_offset) { -- if (!loadBlock()) { -- *ok = false; -- return QByteArray(); -- } -- } -- -- int bytesToCopy = qMin(bytesRemaining, m_buffer.size() - m_offset); -- result.append(m_buffer.mid(m_offset, bytesToCopy)); -- m_offset += bytesToCopy; -- bytesRemaining -= bytesToCopy; -- } -- -- *ok = true; -- return result; --} -- --QByteArray KeePass2RandomStream::process(const QByteArray& data, bool* ok) --{ -- bool randomBytesOk; -- -- QByteArray randomData = randomBytes(data.size(), &randomBytesOk); -- if (!randomBytesOk) { -- *ok = false; -- return QByteArray(); -- } -- -- QByteArray result; -- result.resize(data.size()); -- -- for (int i = 0; i < data.size(); i++) { -- result[i] = data[i] ^ randomData[i]; -- } -- -- *ok = true; -- return result; --} -- --bool KeePass2RandomStream::processInPlace(QByteArray& data) --{ -- bool ok; -- QByteArray randomData = randomBytes(data.size(), &ok); -- if (!ok) { -- return false; -- } -- -- for (int i = 0; i < data.size(); i++) { -- data[i] = data[i] ^ randomData[i]; -- } -- -- return true; --} -- --QString KeePass2RandomStream::errorString() const --{ -- return m_cipher.errorString(); --} -- --bool KeePass2RandomStream::loadBlock() --{ -- Q_ASSERT(m_offset == m_buffer.size()); -- -- m_buffer.fill('\0', m_cipher.blockSize()); -- if (!m_cipher.processInPlace(m_buffer)) { -- return false; -- } -- m_offset = 0; -- -- return true; --} -- --SymmetricCipher::Algorithm KeePass2RandomStream::mapAlgo(KeePass2::ProtectedStreamAlgo algo) --{ -- switch (algo) { -- case KeePass2::ProtectedStreamAlgo::ChaCha20: -- return SymmetricCipher::ChaCha20; -- case KeePass2::ProtectedStreamAlgo::Salsa20: -- return SymmetricCipher::Salsa20; -- default: -- return SymmetricCipher::InvalidAlgorithm; -- } --} -\ Manca newline alla fine del file -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.h keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.h ---- keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS2RANDOMSTREAM_H --#define KEEPASSX_KEEPASS2RANDOMSTREAM_H -- --#include -- --#include "KeePass2.h" --#include "crypto/SymmetricCipher.h" -- --class KeePass2RandomStream --{ --public: -- KeePass2RandomStream(KeePass2::ProtectedStreamAlgo algo); -- -- bool init(const QByteArray& key); -- QByteArray randomBytes(int size, bool* ok); -- QByteArray process(const QByteArray& data, bool* ok); -- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); -- QString errorString() const; -- --private: -- bool loadBlock(); -- -- SymmetricCipher m_cipher; -- QByteArray m_buffer; -- int m_offset; -- -- static SymmetricCipher::Algorithm mapAlgo(KeePass2::ProtectedStreamAlgo algo); --}; -- --#endif // KEEPASSX_KEEPASS2RANDOMSTREAM_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Reader.cpp keepassxc-2.6.4-patched/src/format/KeePass2Reader.cpp ---- keepassxc-2.6.4-orig/src/format/KeePass2Reader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2Reader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,137 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "format/KeePass2Reader.h" --#include "format/Kdbx3Reader.h" --#include "format/Kdbx4Reader.h" --#include "format/KeePass1.h" -- --#include -- --/** -- * Read database from file and detect correct file format. -- * -- * @param filename input file -- * @param key database encryption composite key -- * @param db Database to read into -- * @return true on success -- */ --bool KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) --{ -- QFile file(filename); -- if (!file.open(QFile::ReadOnly)) { -- raiseError(file.errorString()); -- return false; -- } -- -- bool ok = readDatabase(&file, std::move(key), db); -- -- if (file.error() != QFile::NoError) { -- raiseError(file.errorString()); -- return false; -- } -- -- return ok; --} -- --/** -- * Read database from device and detect correct file format. -- * -- * @param device input device -- * @param key database encryption composite key -- * @param db Database to read into -- * @return true on success -- */ --bool KeePass2Reader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) --{ -- m_error = false; -- m_errorStr.clear(); -- -- quint32 signature1, signature2; -- bool ok = KdbxReader::readMagicNumbers(device, signature1, signature2, m_version); -- -- if (!ok) { -- raiseError(tr("Failed to read database file.")); -- return false; -- } -- -- if (signature1 == KeePass1::SIGNATURE_1 && signature2 == KeePass1::SIGNATURE_2) { -- raiseError(tr("The selected file is an old KeePass 1 database (.kdb).\n\n" -- "You can import it by clicking on Database > 'Import KeePass 1 database...'.\n" -- "This is a one-way migration. You won't be able to open the imported " -- "database with the old KeePassX 0.4 version.")); -- return false; -- } else if (!(signature1 == KeePass2::SIGNATURE_1 && signature2 == KeePass2::SIGNATURE_2)) { -- raiseError(tr("Not a KeePass database.")); -- return false; -- } -- -- // mask out minor version -- m_version &= KeePass2::FILE_VERSION_CRITICAL_MASK; -- -- quint32 maxVersion = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK; -- if (m_version < KeePass2::FILE_VERSION_MIN || m_version > maxVersion) { -- raiseError(tr("Unsupported KeePass 2 database version.")); -- return false; -- } -- -- // determine file format (KDBX 2/3 or 4) -- if (m_version < KeePass2::FILE_VERSION_4) { -- m_reader.reset(new Kdbx3Reader()); -- } else { -- m_reader.reset(new Kdbx4Reader()); -- } -- -- return m_reader->readDatabase(device, std::move(key), db); --} -- --bool KeePass2Reader::hasError() const --{ -- return m_error || (!m_reader.isNull() && m_reader->hasError()); --} -- --QString KeePass2Reader::errorString() const --{ -- return !m_reader.isNull() ? m_reader->errorString() : m_errorStr; --} -- --/** -- * @return detected KDBX version -- */ --quint32 KeePass2Reader::version() const --{ -- return m_version; --} -- --/** -- * @return KDBX reader used for reading the input file -- */ --QSharedPointer KeePass2Reader::reader() const --{ -- return m_reader; --} -- --/** -- * Raise an error. Use in case of an unexpected read error. -- * -- * @param errorMessage error message -- */ --void KeePass2Reader::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Reader.h keepassxc-2.6.4-patched/src/format/KeePass2Reader.h ---- keepassxc-2.6.4-orig/src/format/KeePass2Reader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2Reader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS2READER_H --#define KEEPASSX_KEEPASS2READER_H -- --#include "KdbxReader.h" --#include "core/Database.h" --#include "format/KeePass2.h" --#include "keys/CompositeKey.h" -- --#include --#include --#include --#include --#include --#include -- --class KeePass2Reader --{ -- Q_DECLARE_TR_FUNCTIONS(KdbxReader) -- --public: -- bool readDatabase(const QString& filename, QSharedPointer key, Database* db); -- bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); -- -- bool hasError() const; -- QString errorString() const; -- -- QSharedPointer reader() const; -- quint32 version() const; -- --private: -- void raiseError(const QString& errorMessage); -- -- bool m_error = false; -- QString m_errorStr = ""; -- -- QSharedPointer m_reader; -- quint32 m_version = 0; --}; -- --#endif // KEEPASSX_KEEPASS2READER_H -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Writer.cpp keepassxc-2.6.4-patched/src/format/KeePass2Writer.cpp ---- keepassxc-2.6.4-orig/src/format/KeePass2Writer.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2Writer.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,162 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include --#include -- --#include "core/Database.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "crypto/kdf/AesKdf.h" --#include "format/Kdbx3Writer.h" --#include "format/Kdbx4Writer.h" --#include "format/KeePass2Writer.h" -- --/** -- * Write a database to a KDBX file. -- * -- * @param filename output filename -- * @param db source database -- * @return true on success -- */ --bool KeePass2Writer::writeDatabase(const QString& filename, Database* db) --{ -- QFile file(filename); -- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { -- raiseError(file.errorString()); -- return false; -- } -- return writeDatabase(&file, db); --} -- --/** -- * @return true if the database should upgrade to KDBX4. -- */ --bool KeePass2Writer::implicitUpgradeNeeded(Database const* db) const --{ -- if (db->kdf()->uuid() != KeePass2::KDF_AES_KDBX3) { -- return false; -- } -- -- if (!db->publicCustomData().isEmpty()) { -- return true; -- } -- -- for (const auto& group : db->rootGroup()->groupsRecursive(true)) { -- if (group->customData() && !group->customData()->isEmpty()) { -- return true; -- } -- -- for (const auto& entry : group->entries()) { -- if (entry->customData() && !entry->customData()->isEmpty()) { -- return true; -- } -- -- for (const auto& historyItem : entry->historyItems()) { -- if (historyItem->customData() && !historyItem->customData()->isEmpty()) { -- return true; -- } -- } -- } -- } -- -- return false; --} -- --/** -- * Write a database to a device in KDBX format. -- * -- * @param device output device -- * @param db source database -- * @return true on success -- */ --bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) --{ -- m_error = false; -- m_errorStr.clear(); -- -- bool upgradeNeeded = implicitUpgradeNeeded(db); -- if (upgradeNeeded) { -- // We MUST re-transform the key, because challenge-response hashing has changed in KDBX 4. -- // If we forget to re-transform, the database will be saved WITHOUT a challenge-response key component! -- db->changeKdf(KeePass2::uuidToKdf(KeePass2::KDF_AES_KDBX4)); -- } -- -- if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { -- Q_ASSERT(!upgradeNeeded); -- m_version = KeePass2::FILE_VERSION_3_1; -- m_writer.reset(new Kdbx3Writer()); -- } else { -- m_version = KeePass2::FILE_VERSION_4; -- m_writer.reset(new Kdbx4Writer()); -- } -- -- return m_writer->writeDatabase(device, db); --} -- --void KeePass2Writer::extractDatabase(Database* db, QByteArray& xmlOutput) --{ -- m_error = false; -- m_errorStr.clear(); -- -- if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { -- m_version = KeePass2::FILE_VERSION_3_1; -- m_writer.reset(new Kdbx3Writer()); -- } else { -- m_version = KeePass2::FILE_VERSION_4; -- m_writer.reset(new Kdbx4Writer()); -- } -- -- m_writer->extractDatabase(xmlOutput, db); --} -- --bool KeePass2Writer::hasError() const --{ -- return m_error || (m_writer && m_writer->hasError()); --} -- --QString KeePass2Writer::errorString() const --{ -- return m_writer ? m_writer->errorString() : m_errorStr; --} -- --/** -- * Raise an error. Use in case of an unexpected write error. -- * -- * @param errorMessage error message -- */ --void KeePass2Writer::raiseError(const QString& errorMessage) --{ -- m_error = true; -- m_errorStr = errorMessage; --} -- --/** -- * @return KDBX writer used for writing the output file -- */ --QSharedPointer KeePass2Writer::writer() const --{ -- return QSharedPointer(); --} -- --/** -- * @return KDBX version used for writing the output file -- */ --quint32 KeePass2Writer::version() const --{ -- return m_version; --} -diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Writer.h keepassxc-2.6.4-patched/src/format/KeePass2Writer.h ---- keepassxc-2.6.4-orig/src/format/KeePass2Writer.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/KeePass2Writer.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,55 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS2WRITER_H --#define KEEPASSX_KEEPASS2WRITER_H -- --#include "KdbxWriter.h" -- --#include --#include -- --class QIODevice; --class Database; -- --class KeePass2Writer --{ -- Q_DECLARE_TR_FUNCTIONS(KeePass2Writer) -- --public: -- bool writeDatabase(const QString& filename, Database* db); -- bool writeDatabase(QIODevice* device, Database* db); -- void extractDatabase(Database* db, QByteArray& xmlOutput); -- -- QSharedPointer writer() const; -- quint32 version() const; -- -- bool hasError() const; -- QString errorString() const; -- --private: -- void raiseError(const QString& errorMessage); -- bool implicitUpgradeNeeded(Database const* db) const; -- -- bool m_error = false; -- QString m_errorStr = ""; -- -- QScopedPointer m_writer; -- quint32 m_version = 0; --}; -- --#endif // KEEPASSX_KEEPASS2READER_H -diff -urNr keepassxc-2.6.4-orig/src/format/OpData01.cpp keepassxc-2.6.4-patched/src/format/OpData01.cpp ---- keepassxc-2.6.4-orig/src/format/OpData01.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpData01.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,137 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpData01.h" -- --#include "crypto/CryptoHash.h" --#include "crypto/SymmetricCipher.h" -- --#include --#include -- --OpData01::OpData01(QObject* parent) -- : QObject(parent) --{ --} -- --OpData01::~OpData01() --{ --} -- --bool OpData01::decodeBase64(QString const& b64String, const QByteArray& key, const QByteArray& hmacKey) --{ -- const QByteArray b64Bytes = QByteArray::fromBase64(b64String.toUtf8()); -- return decode(b64Bytes, key, hmacKey); --} -- --bool OpData01::decode(const QByteArray& data, const QByteArray& key, const QByteArray& hmacKey) --{ -- /*! -- * The first 8 bytes of the data are the string “opdata01”. -- */ -- const QByteArray header("opdata01"); -- if (!data.startsWith(header)) { -- m_errorStr = tr("Invalid OpData01, does not contain header"); -- return false; -- } -- -- QDataStream in(data); -- in.setByteOrder(QDataStream::LittleEndian); -- in.skipRawData(header.size()); -- -- /*! -- * The next 8 bytes contain the length in bytes of the plaintext as a little endian unsigned 64 bit integer. -- */ -- qlonglong len; -- in >> len; -- -- /*! -- * The next 16 bytes are the randomly chosen initialization vector. -- */ -- QByteArray iv(16, '\0'); -- int read = in.readRawData(iv.data(), 16); -- if (read != 16) { -- m_errorStr = tr("Unable to read all IV bytes, wanted 16 but got %1").arg(iv.size()); -- return false; -- } -- -- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); -- if (!cipher.init(key, iv)) { -- m_errorStr = tr("Unable to init cipher for opdata01: %1").arg(cipher.errorString()); -- return false; -- } -- -- /*! -- * The plaintext is padded using the following scheme. -- * -- * If the size of the plaintext is an even multiple of the block size then 1 block of random data is prepended -- * to the plaintext. Otherwise, between 1 and 15 (inclusive) bytes of random data are prepended to the plaintext -- * to achieve an even multiple of blocks. -- */ -- const int blockSize = cipher.blockSize(); -- int randomBytes = blockSize - (len % blockSize); -- if (randomBytes == 0) { -- // add random block -- randomBytes = blockSize; -- } -- qlonglong clear_len = len + randomBytes; -- QByteArray qbaCT(clear_len, '\0'); -- in.readRawData(qbaCT.data(), clear_len); -- -- /*! -- * The HMAC-SHA256 is computed over the entirety of the opdata including header, length, IV and ciphertext -- * using a 256-bit MAC key. The 256-bit MAC is not truncated. It is appended to the ciphertext. -- */ -- const int hmacLen = 256 / 8; -- QByteArray hmacSig(hmacLen, '\0'); // 256 / 8, '\0'); -- in.readRawData(hmacSig.data(), hmacLen); -- if (hmacSig.size() != hmacLen) { -- m_errorStr = tr("Unable to read all HMAC signature bytes"); -- return false; -- } -- -- const QByteArray hmacData = data.mid(0, data.size() - hmacSig.size()); -- const QByteArray actualHmac = CryptoHash::hmac(hmacData, hmacKey, CryptoHash::Algorithm::Sha256); -- if (actualHmac != hmacSig) { -- m_errorStr = tr("Malformed OpData01 due to a failed HMAC"); -- return false; -- } -- -- if (!cipher.processInPlace(qbaCT)) { -- m_errorStr = tr("Unable to process clearText in place"); -- return false; -- } -- -- // Remove random bytes -- const QByteArray& clearText = qbaCT.mid(randomBytes); -- if (clearText.size() != len) { -- m_errorStr = tr("Expected %1 bytes of clear-text, found %2").arg(len, clearText.size()); -- return false; -- } -- m_clearText = clearText; -- return true; --} -- --QByteArray OpData01::getClearText() --{ -- return m_clearText; --} -- --QString OpData01::errorString() --{ -- return m_errorStr; --} -diff -urNr keepassxc-2.6.4-orig/src/format/OpData01.h keepassxc-2.6.4-patched/src/format/OpData01.h ---- keepassxc-2.6.4-orig/src/format/OpData01.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpData01.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_OPDATA01_H --#define KEEPASSXC_OPDATA01_H -- --#include -- --/*! -- * Packages and transports the AgileBits data structure called \c OpData01 -- * used to encypt and provide HMAC for encrypted data. -- * \sa https://support.1password.com/opvault-design/#opdata01 -- */ --class OpData01 : public QObject --{ -- Q_OBJECT -- --public: -- explicit OpData01(QObject* parent = nullptr); -- ~OpData01() override; -- -- /*! -- * The convenience equivalent of decode01(OpData01,const QByteArray,const QByteArray,const QByteArray) that simply -- * decodes the provided base64 string into its underlying \c QByteArray. -- */ -- bool decodeBase64(QString const& b64String, const QByteArray& key, const QByteArray& hmacKey); -- -- /*! -- * Populates the given \code OpData01 structure by decoding the provided blob of data, -- * using the given key and then verifies using the given HMAC key. -- * \returns true if things went well and \code m_clearText is usable, false and \code m_errorStr will contain -- * details. -- */ -- bool decode(const QByteArray& data, const QByteArray& key, const QByteArray& hmacKey); -- -- QByteArray getClearText(); -- -- QString errorString(); -- --private: -- QByteArray m_clearText; -- QString m_errorStr; --}; -- --#endif // KEEPASSXC_OPDATA01_H -diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderAttachments.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderAttachments.cpp ---- keepassxc-2.6.4-orig/src/format/OpVaultReaderAttachments.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpVaultReaderAttachments.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,236 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpData01.h" --#include "OpVaultReader.h" -- --#include "core/Group.h" --#include "core/Tools.h" -- --#include --#include --#include --#include -- --/*! -- * This will \c qCritical() if unable to open the file for reading. -- * @param file the \c .attachment file to decode -- * @return \c nullptr if unable to take action, else a pair of metadata and the actual attachment bits -- * \sa https://support.1password.com/opvault-design/#attachments -- */ --bool OpVaultReader::readAttachment(const QString& filePath, -- const QByteArray& itemKey, -- const QByteArray& itemHmacKey, -- QJsonObject& metadata, -- QByteArray& payload) --{ -- QFile file(filePath); -- if (!file.open(QIODevice::ReadOnly)) { -- qCritical() << QString("Unable to open \"%s\" for reading").arg(file.fileName()); -- return false; -- } -- -- QString magic("OPCLDAT"); -- QByteArray magicBytes = file.read(7); -- if (magicBytes != magic.toUtf8()) { -- qCritical() << "Expected OPCLDAT but found <<" << magicBytes.toHex() << ">>"; -- return false; -- } -- -- QByteArray version = file.read(1); -- if (version[0] != '\001' && version[0] != '\002') { -- qCritical() << "Unexpected version number; wanted 1 or 2, got <<" << version << ">>"; -- return false; -- } -- const QByteArray& metadataLenBytes = file.read(2); -- if (metadataLenBytes.size() != 2) { -- qCritical() << "Unable to read all metadata length bytes; wanted 2 bytes, got " << metadataLenBytes.size() -- << ": <<" << metadataLenBytes.toHex() << ">>"; -- return false; -- } -- const auto b0 = static_cast(metadataLenBytes[0]); -- const auto b1 = static_cast(metadataLenBytes[1]); -- int metadataLen = ((0xFF & b1) << 8) | (0xFF & b0); -- -- // no really: it's labeled "Junk" in the spec -- int junkBytesRead = file.read(2).size(); -- if (junkBytesRead != 2) { -- qCritical() << "Unable to read all \"junk\" bytes; wanted 2 bytes, got " << junkBytesRead; -- return false; -- } -- -- const QByteArray& iconLenBytes = file.read(4); -- if (iconLenBytes.size() != 4) { -- qCritical() << "Unable to read all \"iconLen\" bytes; wanted 4 bytes, got " << iconLenBytes.size(); -- return false; -- } -- -- int iconLen = 0; -- for (int i = 0, len = iconLenBytes.size(); i < len; ++i) { -- char ch = iconLenBytes[i]; -- auto b = static_cast(ch & 0xFF); -- iconLen = (b << (i * 8)) | iconLen; -- } -- -- QByteArray metadataJsonBytes = file.read(metadataLen); -- if (metadataJsonBytes.size() != metadataLen) { -- qCritical() << "Unable to read all bytes of metadata JSON; wanted " << metadataLen << "but read " -- << metadataJsonBytes.size(); -- return false; -- } -- QByteArray iconBytes = file.read(iconLen); -- if (iconBytes.size() != iconLen) { -- qCritical() << "Unable to read all icon bytes; wanted " << iconLen << "but read " << iconBytes.size(); -- // apologies for the icon being fatal, but it would take some gear-turning -- // to re-sync where in the attach header we are -- return false; -- } -- -- // we don't actually _care_ what the icon bytes are, -- // but they damn well better be valid opdata01 and pass its HMAC -- OpData01 icon01; -- if (!icon01.decode(iconBytes, itemKey, itemHmacKey)) { -- qCritical() << "Unable to decipher attachment icon in " << filePath << ": " << icon01.errorString(); -- return false; -- } -- -- QJsonParseError jsError; -- QJsonDocument jDoc = QJsonDocument::fromJson(metadataJsonBytes, &jsError); -- if (jsError.error != QJsonParseError::ParseError::NoError) { -- qCritical() << "Found invalid attachment metadata JSON at offset " << jsError.offset << ": error(" -- << jsError.error << "): " << jsError.errorString() << "\n<<" << metadataJsonBytes << ">>"; -- return false; -- } -- if (!jDoc.isObject()) { -- qCritical() << "Expected " << metadataJsonBytes << "to be a JSON Object"; -- return false; -- } -- -- metadata = jDoc.object(); -- if (metadata.contains("trashed") && metadata["trashed"].toBool()) { -- return false; -- } -- -- OpData01 att01; -- const QByteArray encData = file.readAll(); -- if (!att01.decode(encData, itemKey, itemHmacKey)) { -- qCritical() << "Unable to decipher attachment payload: " << att01.errorString(); -- return false; -- } -- -- payload = att01.getClearText(); -- return true; --} -- --/*! -- * \sa https://support.1password.com/opvault-design/#attachments -- */ --void OpVaultReader::fillAttachments(Entry* entry, -- const QDir& attachmentDir, -- const QByteArray& entryKey, -- const QByteArray& entryHmacKey) --{ -- /*! -- * Attachment files are named with the UUID of the item that they are attached to followed by an underscore -- * and then followed by the UUID of the attachment itself. The file is then given the extension .attachment. -- */ -- auto fileFilter = QString("%1_*.attachment").arg(entry->uuidToHex().toUpper()); -- const auto& attachInfoList = attachmentDir.entryInfoList(QStringList() << fileFilter, QDir::Files); -- int attachmentCount = attachInfoList.size(); -- if (attachmentCount == 0) { -- return; -- } -- -- for (const auto& info : attachInfoList) { -- if (!info.isReadable()) { -- qCritical() << QString("Attachment file \"%1\" is not readable").arg(info.absoluteFilePath()); -- continue; -- } -- fillAttachment(entry, info, entryKey, entryHmacKey); -- } --} -- --void OpVaultReader::fillAttachment(Entry* entry, -- const QFileInfo& info, -- const QByteArray& entryKey, -- const QByteArray& entryHmacKey) --{ -- QJsonObject attachMetadata; -- QByteArray attachPayload; -- if (!readAttachment(info.absoluteFilePath(), entryKey, entryHmacKey, attachMetadata, attachPayload)) { -- return; -- } -- -- if (!attachMetadata.contains("overview")) { -- qWarning() << "Expected \"overview\" in attachment metadata"; -- return; -- } -- -- const QString& overB64 = attachMetadata["overview"].toString(); -- OpData01 over01; -- -- if (over01.decodeBase64(overB64, m_overviewKey, m_overviewHmacKey)) { -- QByteArray overviewJson = over01.getClearText(); -- QJsonDocument overDoc = QJsonDocument::fromJson(overviewJson); -- if (overDoc.isObject()) { -- QJsonObject overObj = overDoc.object(); -- attachMetadata.remove("overview"); -- for (QString& key : overObj.keys()) { -- const QJsonValueRef& value = overObj[key]; -- QString insertAs = key; -- for (int aa = 0; attachMetadata.contains(insertAs) && aa < 5; ++aa) { -- insertAs = QString("%1_%2").arg(key, aa); -- } -- attachMetadata[insertAs] = value; -- } -- } else { -- qWarning() << "Expected JSON Object in \"overview\" but nope: " << overDoc; -- } -- } else { -- qCritical() -- << QString("Unable to decode attach.overview for \"%1\": %2").arg(info.fileName(), over01.errorString()); -- } -- -- QByteArray payload; -- payload.append(QString("attachment file is actually %1 bytes\n").arg(info.size()).toUtf8()); -- for (QString& key : attachMetadata.keys()) { -- const QJsonValueRef& value = attachMetadata[key]; -- QByteArray valueBytes; -- if (value.isString()) { -- valueBytes = value.toString().toUtf8(); -- } else if (value.isDouble()) { -- valueBytes = QString("%1").arg(value.toInt()).toUtf8(); -- } else if (value.isBool()) { -- valueBytes = value.toBool() ? "true" : "false"; -- } else { -- valueBytes = QString("Unexpected metadata type in attachment: %1").arg(value.type()).toUtf8(); -- } -- payload.append(key.toUtf8()).append(":=").append(valueBytes).append("\n"); -- } -- -- QString attachKey = info.baseName(); -- if (attachMetadata.contains("filename")) { -- QJsonValueRef attFilename = attachMetadata["filename"]; -- if (attFilename.isString()) { -- attachKey = attFilename.toString(); -- } else { -- qWarning() << QString("Unexpected type of attachment \"filename\": %1").arg(attFilename.type()); -- } -- } -- -- entry->attachments()->set(attachKey, attachPayload); --} -diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderBandEntry.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderBandEntry.cpp ---- keepassxc-2.6.4-orig/src/format/OpVaultReaderBandEntry.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpVaultReaderBandEntry.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,263 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpData01.h" --#include "OpVaultReader.h" -- --#include "core/Group.h" --#include "core/Tools.h" --#include "crypto/CryptoHash.h" --#include "crypto/SymmetricCipher.h" -- --#include --#include --#include --#include --#include --#include -- --bool OpVaultReader::decryptBandEntry(const QJsonObject& bandEntry, -- QJsonObject& data, -- QByteArray& key, -- QByteArray& hmacKey) --{ -- if (!bandEntry.contains("d")) { -- qWarning() << "Band entries must contain a \"d\" key: " << bandEntry.keys(); -- return false; -- } -- if (!bandEntry.contains("k")) { -- qWarning() << "Band entries must contain a \"k\" key: " << bandEntry.keys(); -- return false; -- } -- -- const QString uuid = bandEntry.value("uuid").toString(); -- -- /*! -- * This is the encrypted item and MAC keys. -- * It is encrypted with the master encryption key and authenticated with the master MAC key. -- * -- * The last 32 bytes comprise the HMAC-SHA256 of the IV and the encrypted data. -- * The MAC is computed with the master MAC key. -- * The data before the MAC is the AES-CBC encrypted item keys using unique random 16-byte IV. -- * \code -- * uint8_t crypto_key[32]; -- * uint8_t mac_key[32]; -- * \endcode -- * \sa https://support.1password.com/opvault-design/#k -- */ -- const QString& entKStr = bandEntry["k"].toString(); -- QByteArray kBA = QByteArray::fromBase64(entKStr.toUtf8()); -- const int wantKsize = 16 + 32 + 32 + 32; -- if (kBA.size() != wantKsize) { -- qCritical("Malformed \"k\" size; expected %d got %d\n", wantKsize, kBA.size()); -- return false; -- } -- -- QByteArray hmacSig = kBA.mid(kBA.size() - 32, 32); -- const QByteArray& realHmacSig = -- CryptoHash::hmac(kBA.mid(0, kBA.size() - hmacSig.size()), m_masterHmacKey, CryptoHash::Sha256); -- if (realHmacSig != hmacSig) { -- qCritical() << QString(R"(Entry "k" failed its HMAC in UUID "%1", wanted "%2" got "%3")") -- .arg(uuid) -- .arg(QString::fromUtf8(hmacSig.toHex())) -- .arg(QString::fromUtf8(realHmacSig)); -- return false; -- } -- -- QByteArray iv = kBA.mid(0, 16); -- QByteArray keyAndMacKey = kBA.mid(iv.size(), 64); -- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); -- if (!cipher.init(m_masterKey, iv)) { -- qCritical() << "Unable to init cipher using masterKey in UUID " << uuid; -- return false; -- } -- if (!cipher.processInPlace(keyAndMacKey)) { -- qCritical() << "Unable to decipher \"k\"(key+hmac) in UUID " << uuid; -- return false; -- } -- -- key = keyAndMacKey.mid(0, 32); -- hmacKey = keyAndMacKey.mid(32); -- -- QString dKeyB64 = bandEntry.value("d").toString(); -- OpData01 entD01; -- if (!entD01.decodeBase64(dKeyB64, key, hmacKey)) { -- qCritical() << R"(Unable to decipher "d" in UUID ")" << uuid << "\": " << entD01.errorString(); -- return false; -- } -- -- auto clearText = entD01.getClearText(); -- data = QJsonDocument::fromJson(clearText).object(); -- return true; --} -- --Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir& attachmentDir, Group* rootGroup) --{ -- const QString uuid = bandEntry.value("uuid").toString(); -- if (!(uuid.size() == 32 || uuid.size() == 36)) { -- qWarning() << QString("Skipping suspicious band UUID <<%1>> with length %2").arg(uuid).arg(uuid.size()); -- return nullptr; -- } -- -- QScopedPointer entry(new Entry()); -- -- if (bandEntry.contains("trashed") && bandEntry["trashed"].toBool()) { -- // Send this entry to the recycle bin -- rootGroup->database()->recycleEntry(entry.data()); -- } else if (bandEntry.contains("category")) { -- const QJsonValue& categoryValue = bandEntry["category"]; -- if (categoryValue.isString()) { -- bool found = false; -- const QString category = categoryValue.toString(); -- for (Group* group : rootGroup->children()) { -- const QVariant& groupCode = group->property("code"); -- if (category == groupCode.toString()) { -- entry->setGroup(group); -- found = true; -- break; -- } -- } -- if (!found) { -- qWarning() << QString("Unable to place Entry.Category \"%1\" so using the Root instead").arg(category); -- entry->setGroup(rootGroup); -- } -- } else { -- qWarning() << QString(R"(Skipping non-String Category type "%1" in UUID "%2")") -- .arg(categoryValue.type()) -- .arg(uuid); -- entry->setGroup(rootGroup); -- } -- } else { -- qWarning() << "Using the root group because the entry is category-less: <<\n" -- << bandEntry << "\n>> in UUID " << uuid; -- entry->setGroup(rootGroup); -- } -- -- entry->setUpdateTimeinfo(false); -- TimeInfo ti; -- bool timeInfoOk = false; -- if (bandEntry.contains("created")) { -- auto createdTime = static_cast(bandEntry["created"].toInt()); -- ti.setCreationTime(QDateTime::fromTime_t(createdTime, Qt::UTC)); -- timeInfoOk = true; -- } -- if (bandEntry.contains("updated")) { -- auto updateTime = static_cast(bandEntry["updated"].toInt()); -- ti.setLastModificationTime(QDateTime::fromTime_t(updateTime, Qt::UTC)); -- timeInfoOk = true; -- } -- // "tx" is modified by sync, not by user; maybe a custom attribute? -- if (timeInfoOk) { -- entry->setTimeInfo(ti); -- } -- entry->setUuid(Tools::hexToUuid(uuid)); -- -- if (!fillAttributes(entry.data(), bandEntry)) { -- return nullptr; -- } -- -- QJsonObject data; -- QByteArray entryKey; -- QByteArray entryHmacKey; -- -- if (!decryptBandEntry(bandEntry, data, entryKey, entryHmacKey)) { -- return nullptr; -- } -- -- if (data.contains("notesPlain")) { -- entry->setNotes(data.value("notesPlain").toString()); -- } -- -- // it seems sometimes the password is a top-level field, and not in "fields" themselves -- if (data.contains("password")) { -- entry->setPassword(data.value("password").toString()); -- } -- -- for (const auto fieldValue : data.value("fields").toArray()) { -- if (!fieldValue.isObject()) { -- continue; -- } -- -- auto field = fieldValue.toObject(); -- auto designation = field["designation"].toString(); -- auto value = field["value"].toString(); -- if (designation == "password") { -- entry->setPassword(value); -- } else if (designation == "username") { -- entry->setUsername(value); -- } -- } -- -- const QJsonArray& sectionsArray = data["sections"].toArray(); -- for (const QJsonValue& sectionValue : sectionsArray) { -- if (!sectionValue.isObject()) { -- qWarning() << R"(Skipping non-Object in "sections" for UUID ")" << uuid << "\" << " << sectionsArray -- << ">>"; -- continue; -- } -- const QJsonObject& section = sectionValue.toObject(); -- -- fillFromSection(entry.data(), section); -- } -- -- fillAttachments(entry.data(), attachmentDir, entryKey, entryHmacKey); -- return entry.take(); --} -- --bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry) --{ -- const QString overviewStr = bandEntry.value("o").toString(); -- OpData01 entOver01; -- if (!entOver01.decodeBase64(overviewStr, m_overviewKey, m_overviewHmacKey)) { -- qCritical() << "Unable to decipher 'o' in UUID \"" << entry->uuid() << "\"\n" -- << ": " << entOver01.errorString(); -- return false; -- } -- -- auto overviewJsonBytes = entOver01.getClearText(); -- auto overviewDoc = QJsonDocument::fromJson(overviewJsonBytes); -- auto overviewJson = overviewDoc.object(); -- -- QString title = overviewJson.value("title").toString(); -- entry->setTitle(title); -- -- QString url = overviewJson["url"].toString(); -- entry->setUrl(url); -- -- int i = 1; -- for (const auto urlV : overviewJson["URLs"].toArray()) { -- const auto& urlObj = urlV.toObject(); -- if (urlObj.contains("u")) { -- auto newUrl = urlObj["u"].toString(); -- if (newUrl != url) { -- // Add this url if it isn't the base one -- entry->attributes()->set(QString("KP2A_URL_%1").arg(i), newUrl); -- ++i; -- } -- } -- } -- -- QStringList tagsList; -- for (const auto tagV : overviewJson["tags"].toArray()) { -- if (tagV.isString()) { -- tagsList << tagV.toString(); -- } -- } -- entry->setTags(tagsList.join(',')); -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReader.cpp keepassxc-2.6.4-patched/src/format/OpVaultReader.cpp ---- keepassxc-2.6.4-orig/src/format/OpVaultReader.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpVaultReader.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,488 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpVaultReader.h" --#include "OpData01.h" -- --#include "core/Group.h" --#include "core/Tools.h" --#include "crypto/CryptoHash.h" --#include "crypto/SymmetricCipher.h" --#include "keys/PasswordKey.h" -- --#include --#include --#include --#include --#include -- --OpVaultReader::OpVaultReader(QObject* parent) -- : QObject(parent) -- , m_error(false) --{ --} -- --OpVaultReader::~OpVaultReader() --{ --} -- --Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password) --{ -- if (!opdataDir.exists()) { -- m_error = true; -- m_errorStr = tr("Directory .opvault must exist"); -- return nullptr; -- } -- if (!opdataDir.isReadable()) { -- m_error = true; -- m_errorStr = tr("Directory .opvault must be readable"); -- return nullptr; -- } -- -- // https://support.1password.com/opvault-design/#directory-layout -- QDir defaultDir = QDir(opdataDir); -- if (!defaultDir.cd("default")) { -- m_error = true; -- m_errorStr = tr("Directory .opvault/default must exist"); -- return nullptr; -- } -- if (!defaultDir.isReadable()) { -- m_error = true; -- m_errorStr = tr("Directory .opvault/default must be readable"); -- return nullptr; -- } -- -- auto vaultName = opdataDir.dirName(); -- -- auto key = QSharedPointer::create(); -- key->addKey(QSharedPointer::create(password)); -- -- QScopedPointer db(new Database()); -- db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); -- db->setCipher(KeePass2::CIPHER_AES256); -- db->setKey(key, true, false); -- db->metadata()->setName(vaultName); -- -- auto rootGroup = db->rootGroup(); -- rootGroup->setTimeInfo({}); -- rootGroup->setUpdateTimeinfo(false); -- rootGroup->setName(vaultName.remove(".opvault")); -- rootGroup->setUuid(QUuid::createUuid()); -- -- populateCategoryGroups(rootGroup); -- -- QFile profileJsFile(defaultDir.absoluteFilePath("profile.js")); -- QJsonObject profileJson = readAndAssertJsonFile(profileJsFile, "var profile=", ";"); -- if (profileJson.isEmpty()) { -- return nullptr; -- } -- if (!processProfileJson(profileJson, password, rootGroup)) { -- zeroKeys(); -- return nullptr; -- } -- if (profileJson.contains("uuid") and profileJson["uuid"].isString()) { -- rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); -- } -- -- QFile foldersJsFile(defaultDir.filePath("folders.js")); -- if (foldersJsFile.exists()) { -- QJsonObject foldersJs = readAndAssertJsonFile(foldersJsFile, "loadFolders(", ");"); -- if (!processFolderJson(foldersJs, rootGroup)) { -- zeroKeys(); -- return nullptr; -- } -- } -- -- const QString bandChars("0123456789ABCDEF"); -- QString bandPattern("band_%1.js"); -- for (QChar ch : bandChars) { -- QFile bandFile(defaultDir.filePath(bandPattern.arg(ch))); -- if (!bandFile.exists()) { -- continue; -- } -- // https://support.1password.com/opvault-design/#band-files -- QJsonObject bandJs = readAndAssertJsonFile(bandFile, "ld(", ");"); -- const QStringList keys = bandJs.keys(); -- for (const QString& entryKey : keys) { -- const QJsonObject bandEnt = bandJs[entryKey].toObject(); -- const QString uuid = bandEnt["uuid"].toString(); -- if (entryKey != uuid) { -- qWarning() << QString("Mismatched Entry UUID, its JSON key <<%1>> and its UUID <<%2>>") -- .arg(entryKey) -- .arg(uuid); -- } -- QStringList requiredKeys({"d", "k", "hmac"}); -- bool ok = true; -- for (const QString& requiredKey : asConst(requiredKeys)) { -- if (!bandEnt.contains(requiredKey)) { -- qCritical() << "Skipping malformed Entry UUID " << uuid << " without key " << requiredKey; -- ok = false; -- break; -- } -- } -- if (!ok) { -- continue; -- } -- // https://support.1password.com/opvault-design/#items -- auto entry = processBandEntry(bandEnt, defaultDir, rootGroup); -- if (!entry) { -- qWarning() << "Unable to process Band Entry " << uuid; -- } -- } -- } -- -- // Remove empty categories (groups) -- for (auto group : rootGroup->children()) { -- if (group->isEmpty()) { -- delete group; -- } -- } -- -- zeroKeys(); -- return db.take(); --} -- --bool OpVaultReader::hasError() --{ -- return m_error; --} -- --QString OpVaultReader::errorString() --{ -- return m_errorStr; --} -- --bool OpVaultReader::processProfileJson(QJsonObject& profileJson, const QString& password, Group* rootGroup) --{ -- unsigned long iterations = profileJson["iterations"].toInt(); -- // QString lastUpdatedBy = profileJson["lastUpdatedBy"].toString(); -- QString masterKeyB64 = profileJson["masterKey"].toString(); -- QString overviewKeyB64 = profileJson["overviewKey"].toString(); -- // QString profileName = profileJs["profileName"].toString(); -- QByteArray salt; -- { -- QString saltB64 = profileJson["salt"].toString(); -- salt = QByteArray::fromBase64(saltB64.toUtf8()); -- } -- auto rootGroupTime = rootGroup->timeInfo(); -- auto createdAt = static_cast(profileJson["createdAt"].toInt()); -- rootGroupTime.setCreationTime(QDateTime::fromTime_t(createdAt, Qt::UTC)); -- auto updatedAt = static_cast(profileJson["updatedAt"].toInt()); -- rootGroupTime.setLastModificationTime(QDateTime::fromTime_t(updatedAt, Qt::UTC)); -- rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); -- -- const auto derivedKeys = deriveKeysFromPassPhrase(salt, password, iterations); -- if (derivedKeys->error) { -- m_error = true; -- m_errorStr = derivedKeys->errorStr; -- delete derivedKeys; -- return false; -- } -- -- QByteArray encKey = derivedKeys->encrypt; -- QByteArray hmacKey = derivedKeys->hmac; -- delete derivedKeys; -- -- auto masterKeys = decodeB64CompositeKeys(masterKeyB64, encKey, hmacKey); -- if (masterKeys->error) { -- m_error = true; -- m_errorStr = masterKeys->errorStr; -- delete masterKeys; -- return false; -- } -- m_masterKey = masterKeys->encrypt; -- m_masterHmacKey = masterKeys->hmac; -- delete masterKeys; -- auto overviewKeys = decodeB64CompositeKeys(overviewKeyB64, encKey, hmacKey); -- if (overviewKeys->error) { -- m_error = true; -- m_errorStr = overviewKeys->errorStr; -- delete overviewKeys; -- return false; -- } -- m_overviewKey = overviewKeys->encrypt; -- m_overviewHmacKey = overviewKeys->hmac; -- delete overviewKeys; -- -- return true; --} -- --bool OpVaultReader::processFolderJson(QJsonObject& foldersJson, Group* rootGroup) --{ -- const QStringList keys = foldersJson.keys(); -- -- bool result = true; -- for (const QString& key : keys) { -- const QJsonValueRef& folderValue = foldersJson[key]; -- if (!folderValue.isObject()) { -- qWarning() << "Found non-Object folder with key \"" << key << "\""; -- continue; -- } -- const QJsonObject folder = folderValue.toObject(); -- QJsonObject overviewJs; -- const QString overviewStr = folder.value("overview").toString(); -- OpData01 foldOverview01; -- if (!foldOverview01.decodeBase64(overviewStr, m_overviewKey, m_overviewHmacKey)) { -- qCritical() << "Unable to decipher folder UUID \"" << key << "\": " << foldOverview01.errorString(); -- result = false; -- continue; -- } -- auto foldOverview = foldOverview01.getClearText(); -- QJsonDocument fOverJSON = QJsonDocument::fromJson(foldOverview); -- overviewJs = fOverJSON.object(); -- -- const QString& folderTitle = overviewJs["title"].toString(); -- auto myGroup = new Group(); -- myGroup->setParent(rootGroup); -- myGroup->setName(folderTitle); -- if (folder.contains("uuid")) { -- myGroup->setUuid(Tools::hexToUuid(folder["uuid"].toString())); -- } -- -- if (overviewJs.contains("smart") && overviewJs["smart"].toBool()) { -- if (!overviewJs.contains("predicate_b64")) { -- const QString& errMsg = -- QString(R"(Expected a predicate in smart folder[uuid="%1"; title="%2"]))").arg(key, folderTitle); -- qWarning() << errMsg; -- myGroup->setNotes(errMsg); -- } else { -- QByteArray pB64 = QByteArray::fromBase64(overviewJs["predicate_b64"].toString().toUtf8()); -- myGroup->setNotes(pB64.toHex()); -- } -- } -- -- TimeInfo ti; -- bool timeInfoOk = false; -- if (folder.contains("created")) { -- auto createdTime = static_cast(folder["created"].toInt()); -- ti.setCreationTime(QDateTime::fromTime_t(createdTime, Qt::UTC)); -- timeInfoOk = true; -- } -- if (folder.contains("updated")) { -- auto updateTime = static_cast(folder["updated"].toInt()); -- ti.setLastModificationTime(QDateTime::fromTime_t(updateTime, Qt::UTC)); -- timeInfoOk = true; -- } -- // "tx" is modified by sync, not by user; maybe a custom attribute? -- if (timeInfoOk) { -- myGroup->setTimeInfo(ti); -- } -- } -- return result; --} -- --/* -- * Asserts that the given file is an existing file, able to be read, contains JSON, and that -- * the payload is a JSON object. Currently it just returns an empty QJsonObject as a means of -- * indicating the error, although it will qCritical() if unable to actually open the file for reading. -- * -- * @param file the path containing the JSON file -- * @param stripLeading any leading characters that might be present in file which should be removed -- * @param stripTrailing the trailing characters that might be present in file which should be removed -- * @return -- */ --QJsonObject OpVaultReader::readAndAssertJsonFile(QFile& file, const QString& stripLeading, const QString& stripTrailing) --{ -- QByteArray filePayload; -- const QFileInfo& fileInfo = QFileInfo(file); -- auto absFilePath = fileInfo.absoluteFilePath(); -- if (!fileInfo.exists()) { -- qCritical() << QString("File \"%1\" must exist").arg(absFilePath); -- return QJsonObject(); -- } -- if (!fileInfo.isReadable()) { -- qCritical() << QString("File \"%1\" must be readable").arg(absFilePath); -- return QJsonObject(); -- } -- -- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { -- qCritical() << QString("Unable to open \"%1\" readonly+text").arg(absFilePath); -- } -- filePayload = file.readAll(); -- file.close(); -- if (!stripLeading.isEmpty()) { -- QByteArray prefix = stripLeading.toUtf8(); -- if (filePayload.startsWith(prefix)) { -- filePayload = filePayload.remove(0, prefix.size()); -- } -- } -- if (!stripTrailing.isEmpty()) { -- QByteArray suffix = stripTrailing.toUtf8(); -- if (filePayload.endsWith(suffix)) { -- const int delBytes = suffix.size(); -- filePayload = filePayload.remove(filePayload.length() - delBytes, delBytes); -- } -- } -- -- QJsonParseError* error = Q_NULLPTR; -- QJsonDocument jDoc = QJsonDocument::fromJson(filePayload, error); -- if (!jDoc.isObject()) { -- qCritical() << "Expected " << filePayload << "to be a JSON Object"; -- return QJsonObject(); -- } -- return jDoc.object(); --} -- --/* Convenience method for calling decodeCompositeKeys when you have a base64 encrypted composite key. */ --OpVaultReader::DerivedKeyHMAC* --OpVaultReader::decodeB64CompositeKeys(const QString& b64, const QByteArray& encKey, const QByteArray& hmacKey) --{ -- auto result = new DerivedKeyHMAC(); -- -- OpData01 keyKey01; -- if (!keyKey01.decodeBase64(b64, encKey, hmacKey)) { -- result->error = true; -- result->errorStr = tr("Unable to decode masterKey: %1").arg(keyKey01.errorString()); -- return result; -- } -- delete result; -- -- const QByteArray keyKey = keyKey01.getClearText(); -- -- return decodeCompositeKeys(keyKey); --} -- --/* -- * Given a string of bytes, decompose it into its constituent parts, an encryption key and a HMAC key. -- * The plaintext of the masterKey is 256 bytes of data selected randomly when the keychain was first created. -- * -- * The 256 byte (2048 bit) plaintext content of the masterKey is then hashed with SHA-512. -- * The first 32 bytes (256-bits) of the resulting hash are the master encryption key, -- * and the second 32 bytes are the master hmac key. -- */ --OpVaultReader::DerivedKeyHMAC* OpVaultReader::decodeCompositeKeys(const QByteArray& keyKey) --{ -- const int encKeySize = 256 / 8; -- const int hmacKeySize = 256 / 8; -- const int digestSize = encKeySize + hmacKeySize; -- -- auto result = new DerivedKeyHMAC; -- result->error = false; -- -- result->encrypt = QByteArray(encKeySize, '\0'); -- result->hmac = QByteArray(hmacKeySize, '\0'); -- -- const char* buffer_vp = keyKey.data(); -- auto buf_len = size_t(keyKey.size()); -- -- const int algo = GCRY_MD_SHA512; -- unsigned char digest[digestSize]; -- gcry_md_hash_buffer(algo, digest, buffer_vp, buf_len); -- -- unsigned char* cp = digest; -- for (int i = 0, len = encKeySize; i < len; ++i) { -- result->encrypt[i] = *(cp++); -- } -- for (int i = 0, len = hmacKeySize; i < len; ++i) { -- result->hmac[i] = *(cp++); -- } -- -- return result; --} -- --/* -- * Translates the provided salt and passphrase into a derived set of keys, one for encryption -- * and one for use as a HMAC key. See https://support.1password.com/opvault-design/#key-derivation -- * @param iterations the number of rounds to apply the derivation formula -- * @return a non-null structure containing either the error or the two password-derived keys -- */ --OpVaultReader::DerivedKeyHMAC* --OpVaultReader::deriveKeysFromPassPhrase(QByteArray& salt, const QString& password, unsigned long iterations) --{ -- const int derivedEncKeySize = 256 / 8; -- const int derivedMACSize = 256 / 8; -- const int keysize = derivedEncKeySize + derivedMACSize; -- -- auto result = new DerivedKeyHMAC; -- result->error = false; -- -- QByteArray keybuffer(keysize, '\0'); -- auto err = gcry_kdf_derive(password.toUtf8().constData(), -- password.size(), -- GCRY_KDF_PBKDF2, -- GCRY_MD_SHA512, -- salt.constData(), -- salt.size(), -- iterations, -- keysize, -- keybuffer.data()); -- if (err != 0) { -- result->error = true; -- result->errorStr = tr("Unable to derive master key: %1").arg(gcry_strerror(err)); -- return result; -- } -- if (keysize != keybuffer.size()) { -- qWarning() << "Calling PBKDF2(keysize=" << keysize << "yielded" << keybuffer.size() << "bytes"; -- } -- -- QByteArray::const_iterator it = keybuffer.cbegin(); -- -- result->encrypt = QByteArray(derivedEncKeySize, '\0'); -- for (int i = 0, len = derivedEncKeySize; i < len && it != keybuffer.cend(); ++i, ++it) { -- result->encrypt[i] = *it; -- } -- -- result->hmac = QByteArray(derivedMACSize, '\0'); -- for (int i = 0; i < derivedMACSize && it != keybuffer.cend(); ++i, ++it) { -- result->hmac[i] = *it; -- } -- return result; --} -- --/*! -- * \sa https://support.1password.com/opvault-design/#category -- */ --void OpVaultReader::populateCategoryGroups(Group* rootGroup) --{ -- QMap categoryMap; -- categoryMap.insert("001", "Login"); -- categoryMap.insert("002", "Credit Card"); -- categoryMap.insert("003", "Secure Note"); -- categoryMap.insert("004", "Identity"); -- categoryMap.insert("005", "Password"); -- categoryMap.insert("099", "Tombstone"); -- categoryMap.insert("100", "Software License"); -- categoryMap.insert("101", "Bank Account"); -- categoryMap.insert("102", "Database"); -- categoryMap.insert("103", "Driver License"); -- categoryMap.insert("104", "Outdoor License"); -- categoryMap.insert("105", "Membership"); -- categoryMap.insert("106", "Passport"); -- categoryMap.insert("107", "Rewards"); -- categoryMap.insert("108", "SSN"); -- categoryMap.insert("109", "Router"); -- categoryMap.insert("110", "Server"); -- categoryMap.insert("111", "Email"); -- for (const QString& catNum : categoryMap.keys()) { -- const QString& category = categoryMap[catNum]; -- auto g = new Group(); -- g->setName(category); -- g->setProperty("code", catNum); -- g->setUpdateTimeinfo(false); -- // maybe make these stable, so folks can depend on them? -- g->setUuid(QUuid::createUuid()); -- g->setParent(rootGroup); -- } --} -- --void OpVaultReader::zeroKeys() --{ -- m_masterKey.fill('\0'); -- m_masterHmacKey.fill('\0'); -- m_overviewKey.fill('\0'); -- m_overviewHmacKey.fill('\0'); --} -diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReader.h keepassxc-2.6.4-patched/src/format/OpVaultReader.h ---- keepassxc-2.6.4-orig/src/format/OpVaultReader.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpVaultReader.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,119 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef OPVAULT_READER_H_ --#define OPVAULT_READER_H_ -- --#include -- --#include "core/Database.h" --#include "core/Metadata.h" -- --/*! -- * Imports a directory in the 1Password \c opvault format into a \c Database. -- * \sa https://support.1password.com/opvault-overview/ -- * \sa https://support.1password.com/opvault-design/ -- * \sa https://cache.agilebits.com/security-kb/freddy-2013-12-04.tar.gz is the sample data used to test this class, -- * and its password is \c freddy -- */ --class OpVaultReader : public QObject --{ -- Q_OBJECT -- --public: -- explicit OpVaultReader(QObject* parent = nullptr); -- ~OpVaultReader() override; -- -- Database* readDatabase(QDir& opdataDir, const QString& password); -- -- bool hasError(); -- QString errorString(); -- --private: -- struct DerivedKeyHMAC -- { -- QByteArray encrypt; -- QByteArray hmac; -- bool error; -- QString errorStr; -- }; -- -- QJsonObject readAndAssertJsonFile(QFile& file, const QString& stripLeading, const QString& stripTrailing); -- -- DerivedKeyHMAC* deriveKeysFromPassPhrase(QByteArray& salt, const QString& password, unsigned long iterations); -- DerivedKeyHMAC* decodeB64CompositeKeys(const QString& b64, const QByteArray& encKey, const QByteArray& hmacKey); -- DerivedKeyHMAC* decodeCompositeKeys(const QByteArray& keyKey); -- -- /*! -- * \sa https://support.1password.com/opvault-design/#profile-js -- * @param profileJson the contents of \c profile.js -- * @return \c true if the profile data was decrypted successfully, \c false otherwise -- */ -- bool processProfileJson(QJsonObject& profileJson, const QString& password, Group* rootGroup); -- -- /*! -- * \sa https://support.1password.com/opvault-design/#folders-js -- * @param foldersJson the map from a folder UUID to its data (name and any smart query) -- * @return \c true if the folder data was decrypted successfully, \c false otherwise -- */ -- bool processFolderJson(QJsonObject& foldersJson, Group* rootGroup); -- -- /*! -- * Decrypts the provided band object into its interior structure, -- * as well as the encryption key and HMAC key declared therein, -- * which are used to decrypt the attachments, also. -- * @returns \c nullptr if unable to do the decryption, otherwise the interior object and its keys -- */ -- bool decryptBandEntry(const QJsonObject& bandEntry, QJsonObject& data, QByteArray& key, QByteArray& hmacKey); -- Entry* processBandEntry(const QJsonObject& bandEntry, const QDir& attachmentDir, Group* rootGroup); -- -- bool readAttachment(const QString& filePath, -- const QByteArray& itemKey, -- const QByteArray& itemHmacKey, -- QJsonObject& metadata, -- QByteArray& payload); -- void fillAttachment(Entry* entry, -- const QFileInfo& attachmentFileInfo, -- const QByteArray& entryKey, -- const QByteArray& entryHmacKey); -- void fillAttachments(Entry* entry, -- const QDir& attachmentDir, -- const QByteArray& entryKey, -- const QByteArray& entryHmacKey); -- -- bool fillAttributes(Entry* entry, const QJsonObject& bandEntry); -- -- void fillFromSection(Entry* entry, const QJsonObject& section); -- void fillFromSectionField(Entry* entry, const QString& sectionName, QJsonObject& field); -- QString resolveAttributeName(const QString& section, const QString& name, const QString& text); -- -- void populateCategoryGroups(Group* rootGroup); -- /*! Used to blank the memory after the keys have been used. */ -- void zeroKeys(); -- -- bool m_error; -- QString m_errorStr; -- QByteArray m_masterKey; -- QByteArray m_masterHmacKey; -- /*! Used to decrypt overview text, such as folder names. */ -- QByteArray m_overviewKey; -- QByteArray m_overviewHmacKey; -- -- friend class TestOpVaultReader; --}; -- --#endif /* OPVAULT_READER_H_ */ -diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderSections.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderSections.cpp ---- keepassxc-2.6.4-orig/src/format/OpVaultReaderSections.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/format/OpVaultReaderSections.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,168 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "OpData01.h" --#include "OpVaultReader.h" -- --#include "core/Group.h" --#include "core/Tools.h" --#include "crypto/CryptoHash.h" --#include "crypto/SymmetricCipher.h" --#include "totp/totp.h" -- --#include --#include --#include --#include --#include --#include -- --namespace --{ -- QDateTime resolveDate(const QString& kind, const QJsonValue& value) -- { -- QDateTime date; -- if (kind == "monthYear") { -- // 1Password programmers are sadistic... -- auto dateValue = QString::number(value.toInt()); -- date = QDateTime::fromString(dateValue, "yyyyMM"); -- date.setTimeSpec(Qt::UTC); -- } else if (value.isString()) { -- date = QDateTime::fromTime_t(value.toString().toUInt(), Qt::UTC); -- } else { -- date = QDateTime::fromTime_t(value.toInt(), Qt::UTC); -- } -- return date; -- } --} // namespace -- --void OpVaultReader::fillFromSection(Entry* entry, const QJsonObject& section) --{ -- const auto uuid = entry->uuid(); -- QString sectionName = section["name"].toString(); -- -- if (!section.contains("fields")) { -- auto sectionNameLC = sectionName.toLower(); -- auto sectionTitleLC = section["title"].toString("").toLower(); -- if (!(sectionNameLC == "linked items" && sectionTitleLC == "related items")) { -- qWarning() << R"(Skipping "fields"-less Section in UUID ")" << uuid << "\": <<" << section << ">>"; -- } -- return; -- } else if (!section["fields"].isArray()) { -- qWarning() << R"(Skipping non-Array "fields" in UUID ")" << uuid << "\"\n"; -- return; -- } -- -- // If we have a default section name then replace with the section title if not empty -- if (sectionName.startsWith("Section_") && !section["title"].toString().isEmpty()) { -- sectionName = section["title"].toString(); -- } -- -- QJsonArray sectionFields = section["fields"].toArray(); -- for (const QJsonValue sectionField : sectionFields) { -- if (!sectionField.isObject()) { -- qWarning() << R"(Skipping non-Object "fields" in UUID ")" << uuid << "\": << " << sectionField << ">>"; -- continue; -- } -- QJsonObject field = sectionField.toObject(); -- fillFromSectionField(entry, sectionName, field); -- } --} -- --void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionName, QJsonObject& field) --{ -- if (!field.contains("v")) { -- // for our purposes, we don't care if there isn't a value in the field -- return; -- } -- -- // Ignore "a" and "inputTraits" fields, they don't apply to KPXC -- -- auto attrName = resolveAttributeName(sectionName, field["n"].toString(), field["t"].toString()); -- auto attrValue = field.value("v").toString(); -- auto kind = field["k"].toString(); -- -- if (attrName.startsWith("TOTP_")) { -- if (attrValue.startsWith("otpauth://")) { -- QUrlQuery query(attrValue); -- // at least as of 1Password 7, they don't append the digits= and period= which totp.cpp requires -- if (!query.hasQueryItem("digits")) { -- query.addQueryItem("digits", QString("%1").arg(Totp::DEFAULT_DIGITS)); -- } -- if (!query.hasQueryItem("period")) { -- query.addQueryItem("period", QString("%1").arg(Totp::DEFAULT_STEP)); -- } -- attrValue = query.toString(QUrl::FullyEncoded); -- entry->setTotp(Totp::parseSettings(attrValue)); -- } else { -- entry->setTotp(Totp::parseSettings({}, attrValue)); -- } -- -- } else if (attrName.startsWith("expir", Qt::CaseInsensitive)) { -- QDateTime expiry = resolveDate(kind, field.value("v")); -- if (expiry.isValid()) { -- entry->setExpiryTime(expiry); -- entry->setExpires(true); -- } else { -- qWarning() << QString("[%1] Invalid expiration date found: %2").arg(entry->title(), attrValue); -- } -- } else { -- if (kind == "date" || kind == "monthYear") { -- QDateTime date = resolveDate(kind, field.value("v")); -- if (date.isValid()) { -- entry->attributes()->set(attrName, date.toString(Qt::SystemLocaleShortDate)); -- } else { -- qWarning() -- << QString("[%1] Invalid date attribute found: %2 = %3").arg(entry->title(), attrName, attrValue); -- } -- } else if (kind == "address") { -- // Expand address into multiple attributes -- auto addrFields = field.value("v").toObject().toVariantMap(); -- for (auto part : addrFields.keys()) { -- entry->attributes()->set(attrName + QString("_%1").arg(part), addrFields.value(part).toString()); -- } -- } else { -- entry->attributes()->set(attrName, attrValue, (kind == "password" || kind == "concealed")); -- } -- } --} -- --QString OpVaultReader::resolveAttributeName(const QString& section, const QString& name, const QString& text) --{ -- // Special case for TOTP -- if (name.startsWith("TOTP_")) { -- return name; -- } -- -- auto lowName = name.toLower(); -- auto lowText = text.toLower(); -- if (section.isEmpty() || name.startsWith("address")) { -- // Empty section implies these are core attributes -- // try to find username, password, url -- if (lowName == "password" || lowText == "password") { -- return EntryAttributes::PasswordKey; -- } else if (lowName == "username" || lowText == "username") { -- return EntryAttributes::UserNameKey; -- } else if (lowName == "url" || lowText == "url" || lowName == "hostname" || lowText == "server" -- || lowName == "website") { -- return EntryAttributes::URLKey; -- } -- return name; -- } -- -- return QString("%1_%2").arg(section, name); --} -diff -urNr keepassxc-2.6.4-orig/src/git-info.h.cmake keepassxc-2.6.4-patched/src/git-info.h.cmake ---- keepassxc-2.6.4-orig/src/git-info.h.cmake 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/git-info.h.cmake 1970-01-01 01:00:00.000000000 +0100 -@@ -1,8 +0,0 @@ --/* git-info.h. Generated by cmake from git-info.h.cmake */ -- --#ifndef KEEPASSXC_GIT_INFO_H --#define KEEPASSXC_GIT_INFO_H -- --#define GIT_HEAD "@GIT_HEAD@" -- --#endif // KEEPASSXC_GIT_INFO_H -diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.cpp keepassxc-2.6.4-patched/src/gui/AboutDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/AboutDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/AboutDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,236 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AboutDialog.h" --#include "ui_AboutDialog.h" -- --#include "config-keepassx.h" --#include "core/Resources.h" --#include "core/Tools.h" --#include "crypto/Crypto.h" -- --#include -- --static const QString aboutMaintainers = R"( --

--)"; -- --static const QString aboutContributors = R"( --

VIP Patreon Supporters:

--
    --
  • John Cook
  • --
  • Max Anderson
  • --
  • l0b0
  • --
  • NarwhalOfAges
  • --
  • Caleb Currie
  • --
  • Igor Zinovik
  • --
  • Morgan Courbet
  • --
  • Sergiu Coroi
  • --
  • Chris Sohns
  • --
  • Kyle Kneitinger
  • --
  • Sergey Vilgelm
  • --
  • Roman Vaughan (NZSmartie)
  • --
  • Shmavon Gazanchyan
  • --
  • Riley Moses
  • --
  • Korbinian Schildmann
  • --
  • Andreas (nitrohorse)
  • --
  • Kernellinux
  • --
  • Micha Ober
  • --
  • PublicByte
  • --
  • Clayton Casciato
  • --
--

Notable Code Contributions:

--
    --
  • droidmonkey
  • --
  • phoerious
  • --
  • louib (CLI)
  • --
  • varjolintu (Browser Integration)
  • --
  • hifi (SSH Agent)
  • --
  • ckieschnick (KeeShare)
  • --
  • seatedscribe (CSV Import)
  • --
  • Aetf (FdoSecrets Storage Server)
  • --
  • weslly (macOS improvements)
  • --
  • brainplot (many improvements)
  • --
  • kneitinger (many improvements)
  • --
  • frostasm (many improvements)
  • --
  • fonic (Entry Table View)
  • --
  • kylemanna (YubiKey)
  • --
  • c4rlo (Offline HIBP Checker)
  • --
  • wolframroesler (HTML Export, Statistics, Password Health, HIBP integration)
  • --
  • mdaniel (OpVault Importer)
  • --
  • angelsl (KDBX 4)
  • --
  • TheZ3ro (retired lead)
  • --
  • debfx (KeePassX)
  • --
  • BlueIce (KeePassX)
  • --
--

Patreon Supporters:

--
    --
  • Alexanderjb
  • --
  • Richard Ames
  • --
  • SLmanDR
  • --
  • Christian Rasmussen
  • --
  • Tyler Gass
  • --
  • Nuutti Toivola
  • --
  • Gregory Werbin
  • --
  • Lionel Laské
  • --
  • Ivar
  • --
  • Darren
  • --
  • Brad
  • --
  • Mathieu Peltier
  • --
  • gonczor
  • --
  • Oleksii Aleksieiev
  • --
  • Gernot Premper
  • --
  • Julian Stier
  • --
  • Daniel Epp
  • --
  • Ruben Schade
  • --
  • Esteban Martinez
  • --
  • Niels Ganser
  • --
  • turin231
  • --
  • judd
  • --
  • Tarek Sherif
  • --
  • Bernhard
  • --
  • William Komanetsky
  • --
  • Clark Henry
  • --
  • Justin Carroll
  • --
  • Shintaro Matsushima
  • --
  • Larry Siden
  • --
  • Thammachart Chinvarapon
  • --
  • Patrick Evans
  • --
--

Translations:

--
    --
  • العربية (Arabic): AboShanab, kmutahar, muha_abdulaziz, Night1, omar.nsy
  • --
  • euskara (Basque): azken_tximinoa, Galaipa, Hey_neken
  • --
  • বাংলা (Bengali): codesmite
  • --
  • ဗမာစာ (Burmese): Snooooowwwwwman
  • --
  • català (Catalan): antoniopolonio, capitantrueno, dsoms, MarcRiera, mcus, raulua, ZJaume
  • --
  • 中文 (Chinese (Simplified)): Biggulu, Brandon_c, carp0129, Dy64, ef6, Felix2yu, hoilc, ivlioioilvi, -- kikyous, kofzhanganguo, ligyxy, lxx4380, remonli, ShuiHuo, slgray, Small_Ku, snhun, umi_neko, vc5, Wylmer_Wang, Z4HD
  • --
  • 中文 (台灣) (Chinese (Traditional)): BestSteve, flachesis, gojpdchx, ligyxy, MiauLightouch, plesry, -- priv, raymondtau, Small_Ku, th3lusive, yan12125, ymhuang0808
  • --
  • hrvatski jezik (Croatian): Halberd, mladenuzelac
  • --
  • čeština (Czech): awesomevojta, DanielMilde, JosefVitu, pavelb, stps, tpavelek
  • --
  • dansk (Danish): alfabetacain, ebbe, GimliDk, JakobPP, KalleDK, MannVera, nlkl, thniels
  • --
  • Nederlands (Dutch): apie, bartlibert, Bubbel, bython, Dr.Default, e2jk, evanoosten, fourwood, -- fvw, glotzbach, JCKalman, KnooL, ovisicnarf, pietermj, rigrig, srgvg, Stephan_P, stijndubrul, theniels17, -- ThomasChurchman, Vistaus, wanderingidea, Zombaya1
  • --
  • English (UK): CisBetter, rookwood101, spacemanspiff, throne3d, YCMHARHZ
  • --
  • English (USA): alexandercrice, caralu74, cl0ne, DarkHolme, nguyenlekhtn, thedoctorsoad, throne3d
  • --
  • Esperanto (Esperanto): batisteo
  • --
  • eesti (Estonian): Hermanio
  • --
  • suomi (Finnish): artnay, hif1, MawKKe, petri, tomisalmi, varjolintu
  • --
  • français (French): A1RO, aghilas.messara, Albynton, alexisju, b_mortgat, Beatussum, benoitbalon, -- bertranoel, bisaloo, Cabirto, Code2Mirabeau, e2jk, ebrious, frgnca, Fumble, ggtr1138, gilbsgilbs, gohuros, gtalbot, -- Gui13, houdini, houdini69, iannick, jlutran, John.Mickael, kyodev, lacnic, laetilodie, logut, MartialBis, Maxime_J, -- mlpo, Morgan, MrHeadwar, narzb, nekopep, Nesousx, pBouillon, Raphi111, Scrat15, TheFrenchGhosty, theodex, tl_pierre, -- webafrancois, wilfriedroset, yahoe.001, zedentox
  • --
  • Galego (Galician): enfeitizador
  • --
  • Deutsch (German): andreas.maier, antsas, Atalanttore, BasicBaer, bwolkchen, Calyrx, codejunky, -- DavidHamburg, derhagen, eth0, fahstat, for1real, Gyges, Hativ, hjonas, HoferJulian, janis91, jensrutschmann, -- joe776, kflesch, man_at_home, marcbone, MarcEdinger, markusd112, Maxime_J, mbetz, mcliquid, mfernau77, mircsicz, -- mithrial, montilo, MuehlburgPhoenix, muellerma, nautilusx, Nerzahd, Nightwriter, NotAName, nursoda, omnisome4, -- origin_de, pcrcoding, PFischbeck, rgloor, rugk, ScholliYT, Silas_229, spacemanspiff, testarossa47, TheForcer, -- transi_222, traschke, vlenzer, vpav, waster, wolfram.roesler, Wyrrrd
  • --
  • ελληνικά (Greek): anvo, magkopian, nplatis, tassos.b, xinomilo
  • --
  • עברית (Hebrew): shmag18
  • --
  • magyar (Hungarian): andras_tim, bubu, meskobalazs, urbalazs
  • --
  • Íslenska (Icelandic): MannVera
  • --
  • Bahasa (Indonesian): achmad, bora_ach, zk
  • --
  • Italiano (Italian): amaxis, bovirus, duncanmid, FranzMari, Gringoarg, lucaim, NITAL, Peo, -- salvatorecordiano, seatedscribe, Stemby, the.sailor, tosky, VosaxAlo
  • --
  • 日本語 (Japanese): gojpdchx, masoo, metalic_cat, p2635, saita, Shinichirou_Yamada, take100yen, -- Umoxfo, vargas.peniel, vmemjp, WatanabeShint, yukinakato
  • --
  • қазақ тілі (Kazakh): sotrud_nik
  • --
  • 한국어 (Korean): cancantun, peremen
  • --
  • latine (Latin): alexandercrice
  • --
  • lietuvių kalba (Lithuanian): Moo, pauliusbaulius, rookwood101
  • --
  • Norsk Bokmål (Norwegian Bokmål): eothred, haarek, JardarBolin, jumpingmushroom, sattor, torgeirf, -- ysteinalver
  • --
  • język polski (Polish): AreYouLoco, dedal123, hoek, keypress, konradmb, mrerexx, pabli, psobczak, -- SebJez
  • --
  • Português (Portuguese): weslly, xendez
  • --
  • Português (Portuguese (Brazil)): andersoniop, danielbibit, fabiom, flaviobn, guilherme__sr, -- Havokdan, lucasjsoliveira, mauri.andres, newmanisaac, rafaelnp, RockyTV, vitor895, weslly, xendez
  • --
  • Português (Portuguese (Portugal)): a.santos, American_Jesus, arainho, hds, lmagomes, mihai.ile, -- pfialho, smarquespt, smiguel, xendez, xnenjm
  • --
  • Română (Romanian): alexminza, drazvan, polearnik
  • --
  • русский (Russian): _nomoretears_, agag11507, alexminza, anm, artemkonenko, cl0ne, denoos, DG, -- JayDi85, KekcuHa, Mogost, Mr.GreyWolf, MustangDSG, NcNZllQnHVU, netforhack, NetWormKido, Rakleed, RKuchma, -- ruslan.denisenko, ShareDVI, Shevchuk, solodyagin, talvind, VictorR2007, vsvyatski, wkill95
  • --
  • српски језик (Serbian): ArtBIT, oros
  • --
  • Slovenčina (Slovak): Asprotes, crazko, l.martinicky, pecer, Slavko
  • --
  • Español (Spanish): adolfogc, AdrianClv, AndreachongB, AndresQ, antifaz, Bendhet, capitantrueno, -- caralu74, DarkHolme, e2jk, EdwardNavarro, eliluminado, erinm, gonrial, iglpdc, jojobrambs, LeoBeltran, lupa18, -- masanchez5000, mauri.andres, NicolasCGN, Pablohn, pdinoto, picodotdev, piegope, pquin, puchrojo, rcalpha, -- rodolfo.guagnini, systurbed, vargas.peniel, ventolinmono, vsvyatski, Xlate1984, zmzpa, Zranz
  • --
  • Svenska (Swedish): 0x9fff00, Anders_Bergqvist, ArmanB, baxtex, eson, henziger, jpyllman, krklns, -- LIINdd, malkus, peron, Thelin, theschitz, victorhggqvst, zeroxfourc
  • --
  • ไทย (Thai): arthit, ben_cm, chumaporn.t, darika, digitalthailandproject, GitJirasamatakij, -- muhammadmumean, nipattra, ordinaryjane, rayg, sirawat, Socialister, Wipanee
  • --
  • Türkçe (Turkish): cagries, etc, ethem578, mcveri, N3pp, SeLeNLeR, TeknoMobil, Ven_Zallow
  • --
  • Українська (Ukrainian): brisk022, chulivska, cl0ne, exlevan, m0stik, netforhack, paul_sm, ShareDVI, -- zoresvit
  • --
--)"; -- --AboutDialog::AboutDialog(QWidget* parent) -- : QDialog(parent) -- , m_ui(new Ui::AboutDialog()) --{ -- m_ui->setupUi(this); -- -- resize(minimumSize()); -- setWindowFlags(Qt::Sheet); -- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); -- -- m_ui->nameLabel->setText(m_ui->nameLabel->text().replace("${VERSION}", KEEPASSXC_VERSION)); -- QFont nameLabelFont = m_ui->nameLabel->font(); -- nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4); -- m_ui->nameLabel->setFont(nameLabelFont); -- -- m_ui->iconLabel->setPixmap(resources()->applicationIcon().pixmap(48)); -- -- QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); -- m_ui->debugInfo->setPlainText(debugInfo); -- -- m_ui->maintainers->setText(aboutMaintainers); -- m_ui->contributors->setText(aboutContributors); -- -- setAttribute(Qt::WA_DeleteOnClose); -- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); -- connect(m_ui->copyToClipboard, SIGNAL(clicked()), SLOT(copyToClipboard())); -- -- m_ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true); --} -- --AboutDialog::~AboutDialog() --{ --} -- --void AboutDialog::copyToClipboard() --{ -- QClipboard* clipboard = QApplication::clipboard(); -- clipboard->setText(m_ui->debugInfo->toPlainText()); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.h keepassxc-2.6.4-patched/src/gui/AboutDialog.h ---- keepassxc-2.6.4-orig/src/gui/AboutDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/AboutDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ABOUTDIALOG_H --#define KEEPASSX_ABOUTDIALOG_H -- --#include --#include -- --namespace Ui --{ -- class AboutDialog; --} -- --class AboutDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit AboutDialog(QWidget* parent = nullptr); -- ~AboutDialog(); -- --protected slots: -- void copyToClipboard(); -- --private: -- QScopedPointer m_ui; --}; -- --#endif // KEEPASSX_ABOUTDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.ui keepassxc-2.6.4-patched/src/gui/AboutDialog.ui ---- keepassxc-2.6.4-orig/src/gui/AboutDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/AboutDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,347 +0,0 @@ -- -- -- AboutDialog -- -- -- -- 0 -- 0 -- 510 -- 443 -- -- -- -- About KeePassXC -- -- -- -- -- -- 15 -- -- -- 20 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 48 -- 48 -- -- -- -- -- 48 -- 48 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- <span style="font-size: 20pt"> KeePassXC ${VERSION}</span> -- -- -- 0 -- -- -- 11 -- -- -- -- -- -- -- -- -- 0 -- -- -- -- About -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Website: <a href="https://keepassxc.org/" style="text-decoration: underline">https://keepassxc.org</a> -- -- -- true -- -- -- -- -- -- -- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> -- -- -- true -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 5 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. -- -- -- true -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 0 -- 5 -- -- -- -- -- -- -- -- Project Maintainers: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- true -- -- -- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. -- -- -- true -- -- -- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- Contributors -- -- -- -- -- -- true -- -- -- -- -- 0 -- 0 -- 466 -- 242 -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- IBeamCursor -- -- -- -- -- -- Qt::AutoText -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- true -- -- -- 5 -- -- -- Qt::TextBrowserInteraction -- -- -- -- -- -- -- -- -- -- -- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> -- -- -- Qt::AlignCenter -- -- -- true -- -- -- -- -- -- -- -- Debug Info -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Include the following information whenever you report a bug: -- -- -- -- -- -- -- true -- -- -- -- -- -- Qt::TextBrowserInteraction -- -- -- -- -- -- -- Copy to clipboard -- -- -- -- -- -- -- -- -- -- -- QDialogButtonBox::Close -- -- -- -- -- -- -- tabWidget -- scrollArea -- debugInfo -- copyToClipboard -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/Application.cpp keepassxc-2.6.4-patched/src/gui/Application.cpp ---- keepassxc-2.6.4-orig/src/gui/Application.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Application.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,346 +0,0 @@ --/* -- * Copyright (C) 2012 Tobias Tangemann -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Application.h" -- --#include "autotype/AutoType.h" --#include "core/Config.h" --#include "core/Global.h" --#include "core/Resources.h" --#include "gui/MainWindow.h" --#include "gui/osutils/OSUtils.h" --#include "gui/styles/dark/DarkStyle.h" --#include "gui/styles/light/LightStyle.h" -- --#include --#include --#include --#include --#include --#include -- --#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) --#include "core/OSEventFilter.h" --#endif -- --#if defined(Q_OS_UNIX) --#include --#include --#include --#endif -- --namespace --{ -- constexpr int WaitTimeoutMSec = 150; -- const char BlockSizeProperty[] = "blockSize"; --} // namespace -- --Application::Application(int& argc, char** argv) -- : QApplication(argc, argv) --#ifdef Q_OS_UNIX -- , m_unixSignalNotifier(nullptr) --#endif -- , m_alreadyRunning(false) -- , m_lockFile(nullptr) --#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) -- , m_osEventFilter(new OSEventFilter()) --{ -- installNativeEventFilter(m_osEventFilter.data()); --#else --{ --#endif --#if defined(Q_OS_UNIX) -- registerUnixSignals(); --#endif -- -- QString userName = qgetenv("USER"); -- if (userName.isEmpty()) { -- userName = qgetenv("USERNAME"); -- } -- QString identifier = "keepassxc"; -- if (!userName.isEmpty()) { -- identifier += "-" + userName; -- } --#ifdef QT_DEBUG -- // In DEBUG mode don't interfere with Release instances -- identifier += "-DEBUG"; --#endif -- QString lockName = identifier + ".lock"; -- m_socketName = identifier + ".socket"; -- -- // According to documentation we should use RuntimeLocation on *nixes, but even Qt doesn't respect -- // this and creates sockets in TempLocation, so let's be consistent. -- m_lockFile = new QLockFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/" + lockName); -- m_lockFile->setStaleLockTime(0); -- m_lockFile->tryLock(); -- -- m_lockServer.setSocketOptions(QLocalServer::UserAccessOption); -- connect(&m_lockServer, SIGNAL(newConnection()), this, SIGNAL(anotherInstanceStarted())); -- connect(&m_lockServer, SIGNAL(newConnection()), this, SLOT(processIncomingConnection())); -- -- switch (m_lockFile->error()) { -- case QLockFile::NoError: -- // No existing lock was found, start listener -- m_lockServer.listen(m_socketName); -- break; -- case QLockFile::LockFailedError: { -- if (config()->get(Config::SingleInstance).toBool()) { -- // Attempt to connect to the existing instance -- QLocalSocket client; -- for (int i = 0; i < 3; ++i) { -- client.connectToServer(m_socketName); -- if (client.waitForConnected(WaitTimeoutMSec)) { -- // Connection succeeded, this will raise the existing window if minimized -- client.abort(); -- m_alreadyRunning = true; -- break; -- } -- } -- -- if (!m_alreadyRunning) { -- // If we get here then the original instance is likely dead -- qWarning() << QObject::tr("Existing single-instance lock file is invalid. Launching new instance.") -- .toUtf8() -- .constData(); -- -- // forceably reset the lock file -- m_lockFile->removeStaleLockFile(); -- m_lockFile->tryLock(); -- // start the listen server -- m_lockServer.listen(m_socketName); -- } -- } -- break; -- } -- default: -- qWarning() -- << QObject::tr("The lock file could not be created. Single-instance mode disabled.").toUtf8().constData(); -- } -- -- connect(osUtils, &OSUtilsBase::interfaceThemeChanged, this, [this]() { -- if (config()->get(Config::GUI_ApplicationTheme).toString() != "classic") { -- applyTheme(); -- } -- }); --} -- --Application::~Application() --{ -- m_lockServer.close(); -- if (m_lockFile) { -- m_lockFile->unlock(); -- delete m_lockFile; -- } --} -- --void Application::applyTheme() --{ -- auto appTheme = config()->get(Config::GUI_ApplicationTheme).toString(); -- if (appTheme == "auto") { -- appTheme = osUtils->isDarkMode() ? "dark" : "light"; --#ifdef Q_OS_WIN -- if (winUtils()->isHighContrastMode()) { -- appTheme = "classic"; -- } --#endif -- } -- QPixmapCache::clear(); -- if (appTheme == "light") { -- auto* s = new LightStyle; -- setPalette(s->standardPalette()); -- setStyle(s); -- } else if (appTheme == "dark") { -- auto* s = new DarkStyle; -- setPalette(s->standardPalette()); -- setStyle(s); -- m_darkTheme = true; -- } else { -- // Classic mode, don't check for dark theme on Windows -- // because Qt 5.x does not support it --#ifndef Q_OS_WIN -- m_darkTheme = osUtils->isDarkMode(); --#endif -- QFile stylesheetFile(":/styles/base/classicstyle.qss"); -- if (stylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) { -- setStyleSheet(stylesheetFile.readAll()); -- stylesheetFile.close(); -- } -- } --} -- --bool Application::event(QEvent* event) --{ -- // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) -- if (event->type() == QEvent::FileOpen) { -- emit openFile(static_cast(event)->file()); -- return true; -- } --#ifdef Q_OS_MACOS -- // restore main window when clicking on the docker icon -- else if (event->type() == QEvent::ApplicationActivate) { -- emit applicationActivated(); -- } --#endif -- -- return QApplication::event(event); --} -- --#if defined(Q_OS_UNIX) --int Application::unixSignalSocket[2]; -- --void Application::registerUnixSignals() --{ -- int result = ::socketpair(AF_UNIX, SOCK_STREAM, 0, unixSignalSocket); -- Q_ASSERT(0 == result); -- if (0 != result) { -- // do not register handles when socket creation failed, otherwise -- // application will be unresponsive to signals such as SIGINT or SIGTERM -- return; -- } -- -- QVector const handledSignals = {SIGQUIT, SIGINT, SIGTERM, SIGHUP}; -- for (auto s : handledSignals) { -- struct sigaction sigAction; -- -- sigAction.sa_handler = handleUnixSignal; -- sigemptyset(&sigAction.sa_mask); -- sigAction.sa_flags = 0 | SA_RESTART; -- sigaction(s, &sigAction, nullptr); -- } -- -- m_unixSignalNotifier = new QSocketNotifier(unixSignalSocket[1], QSocketNotifier::Read, this); -- connect(m_unixSignalNotifier, SIGNAL(activated(int)), this, SLOT(quitBySignal())); --} -- --void Application::handleUnixSignal(int sig) --{ -- switch (sig) { -- case SIGQUIT: -- case SIGINT: -- case SIGTERM: { -- char buf = 0; -- Q_UNUSED(::write(unixSignalSocket[0], &buf, sizeof(buf))); -- return; -- } -- case SIGHUP: -- return; -- } --} -- --void Application::quitBySignal() --{ -- m_unixSignalNotifier->setEnabled(false); -- char buf; -- Q_UNUSED(::read(unixSignalSocket[1], &buf, sizeof(buf))); -- emit quitSignalReceived(); --} --#endif -- --void Application::processIncomingConnection() --{ -- if (m_lockServer.hasPendingConnections()) { -- QLocalSocket* socket = m_lockServer.nextPendingConnection(); -- socket->setProperty(BlockSizeProperty, 0); -- connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead())); -- } --} -- --void Application::socketReadyRead() --{ -- QLocalSocket* socket = qobject_cast(sender()); -- if (!socket) { -- return; -- } -- -- QDataStream in(socket); -- in.setVersion(QDataStream::Qt_5_0); -- -- int blockSize = socket->property(BlockSizeProperty).toInt(); -- if (blockSize == 0) { -- // Relies on the fact that QDataStream format streams a quint32 into sizeof(quint32) bytes -- if (socket->bytesAvailable() < qint64(sizeof(quint32))) { -- return; -- } -- in >> blockSize; -- } -- -- if (socket->bytesAvailable() < blockSize || in.atEnd()) { -- socket->setProperty(BlockSizeProperty, blockSize); -- return; -- } -- -- QStringList fileNames; -- in >> fileNames; -- for (const QString& fileName : asConst(fileNames)) { -- const QFileInfo fInfo(fileName); -- if (fInfo.isFile() && fInfo.suffix().toLower() == "kdbx") { -- emit openFile(fileName); -- } -- } -- socket->deleteLater(); --} -- --bool Application::isAlreadyRunning() const --{ --#ifdef QT_DEBUG -- // In DEBUG mode we can run unlimited instances -- return false; --#endif -- return config()->get(Config::SingleInstance).toBool() && m_alreadyRunning; --} -- --bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) --{ -- QLocalSocket client; -- client.connectToServer(m_socketName); -- const bool connected = client.waitForConnected(WaitTimeoutMSec); -- if (!connected) { -- return false; -- } -- -- QByteArray data; -- QDataStream out(&data, QIODevice::WriteOnly); -- out.setVersion(QDataStream::Qt_5_0); -- out << quint32(0) << fileNames; -- out.device()->seek(0); -- out << quint32(data.size() - sizeof(quint32)); -- -- const bool writeOk = client.write(data) != -1 && client.waitForBytesWritten(WaitTimeoutMSec); -- client.disconnectFromServer(); -- const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec); -- return writeOk && disconnected; --} -- --bool Application::isDarkTheme() const --{ -- return m_darkTheme; --} -- --void Application::restart() --{ -- // Disable single instance -- m_lockServer.close(); -- if (m_lockFile) { -- m_lockFile->unlock(); -- delete m_lockFile; -- m_lockFile = nullptr; -- } -- -- exit(RESTART_EXITCODE); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/Application.h keepassxc-2.6.4-patched/src/gui/Application.h ---- keepassxc-2.6.4-orig/src/gui/Application.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Application.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,89 +0,0 @@ --/* -- * Copyright (C) 2012 Tobias Tangemann -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_APPLICATION_H --#define KEEPASSX_APPLICATION_H -- --#include --#include -- --#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) --#include -- --class OSEventFilter; --#endif --class QLockFile; --class QSocketNotifier; -- --constexpr int RESTART_EXITCODE = -1; -- --class Application : public QApplication --{ -- Q_OBJECT -- --public: -- Application(int& argc, char** argv); -- ~Application() override; -- -- void applyTheme(); -- -- bool event(QEvent* event) override; -- bool isAlreadyRunning() const; -- bool isDarkTheme() const; -- -- bool sendFileNamesToRunningInstance(const QStringList& fileNames); -- -- void restart(); -- --signals: -- void openFile(const QString& filename); -- void anotherInstanceStarted(); -- void applicationActivated(); -- void quitSignalReceived(); -- --private slots: --#if defined(Q_OS_UNIX) -- void quitBySignal(); --#endif -- void processIncomingConnection(); -- void socketReadyRead(); -- --private: --#if defined(Q_OS_UNIX) -- /** -- * Register Unix signals such as SIGINT and SIGTERM for clean shutdown. -- */ -- void registerUnixSignals(); -- QSocketNotifier* m_unixSignalNotifier; -- static void handleUnixSignal(int sig); -- static int unixSignalSocket[2]; --#endif -- bool m_alreadyRunning; -- bool m_darkTheme = false; -- QLockFile* m_lockFile; -- QLocalServer m_lockServer; -- QString m_socketName; --#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) -- QScopedPointer m_osEventFilter; --#endif --}; -- --#define kpxcApp qobject_cast(Application::instance()) -- --#endif // KEEPASSX_APPLICATION_H -diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.cpp keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,494 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "ApplicationSettingsWidget.h" --#include "ui_ApplicationSettingsWidgetGeneral.h" --#include "ui_ApplicationSettingsWidgetSecurity.h" -- --#include "config-keepassx.h" -- --#include "autotype/AutoType.h" --#include "core/Config.h" --#include "core/Global.h" --#include "core/Resources.h" --#include "core/Translator.h" --#include "gui/MainWindow.h" --#include "gui/osutils/OSUtils.h" -- --#include "MessageBox.h" --#include "touchid/TouchID.h" -- --class ApplicationSettingsWidget::ExtraPage --{ --public: -- ExtraPage(ISettingsPage* page, QWidget* widget) -- : settingsPage(page) -- , widget(widget) -- { -- } -- -- void loadSettings() const -- { -- settingsPage->loadSettings(widget); -- } -- -- void saveSettings() const -- { -- settingsPage->saveSettings(widget); -- } -- --private: -- QSharedPointer settingsPage; -- QWidget* widget; --}; -- --/** -- * Helper class to ignore mouse wheel events on non-focused widgets -- * NOTE: The widget must NOT have a focus policy of "WHEEL" -- */ --class MouseWheelEventFilter : public QObject --{ --public: -- explicit MouseWheelEventFilter(QObject* parent) -- : QObject(parent){}; -- --protected: -- bool eventFilter(QObject* obj, QEvent* event) override -- { -- const auto* widget = qobject_cast(obj); -- if (event->type() == QEvent::Wheel && widget && !widget->hasFocus()) { -- event->ignore(); -- return true; -- } -- return QObject::eventFilter(obj, event); -- } --}; -- --ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) -- : EditWidget(parent) -- , m_secWidget(new QWidget()) -- , m_generalWidget(new QWidget()) -- , m_secUi(new Ui::ApplicationSettingsWidgetSecurity()) -- , m_generalUi(new Ui::ApplicationSettingsWidgetGeneral()) -- , m_globalAutoTypeKey(static_cast(0)) -- , m_globalAutoTypeModifiers(Qt::NoModifier) --{ -- setHeadline(tr("Application Settings")); -- showApplyButton(false); -- -- m_secUi->setupUi(m_secWidget); -- m_generalUi->setupUi(m_generalWidget); -- addPage(tr("General"), Resources::instance()->icon("preferences-other"), m_generalWidget); -- addPage(tr("Security"), Resources::instance()->icon("security-high"), m_secWidget); -- -- if (!autoType()->isAvailable()) { -- m_generalUi->generalSettingsTabWidget->removeTab(1); -- } -- -- connect(this, SIGNAL(accepted()), SLOT(saveSettings())); -- connect(this, SIGNAL(rejected()), SLOT(reject())); -- -- // clang-format off -- connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool))); -- connect(m_generalUi->hideWindowOnCopyCheckBox, SIGNAL(toggled(bool)), SLOT(hideWindowOnCopyCheckBoxToggled(bool))); -- connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); -- connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool))); -- connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings())); -- -- connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)), -- m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool))); -- connect(m_secUi->clearSearchCheckBox, SIGNAL(toggled(bool)), -- m_secUi->clearSearchSpinBox, SLOT(setEnabled(bool))); -- connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)), -- m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool))); -- connect(m_secUi->touchIDResetCheckBox, SIGNAL(toggled(bool)), -- m_secUi->touchIDResetSpinBox, SLOT(setEnabled(bool))); -- // clang-format on -- -- // Disable mouse wheel grab when scrolling -- // This prevents combo box and spinner values from changing without explicit focus -- auto mouseWheelFilter = new MouseWheelEventFilter(this); -- m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter); -- m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter); -- m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter); -- m_generalUi->trayIconAppearance->installEventFilter(mouseWheelFilter); -- --#ifdef WITH_XC_UPDATECHECK -- connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool))); --#else -- m_generalUi->checkForUpdatesOnStartupCheckBox->setVisible(false); -- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setVisible(false); -- m_generalUi->checkUpdatesSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); --#endif -- --#ifndef WITH_XC_NETWORKING -- m_secUi->privacy->setVisible(false); -- m_generalUi->faviconTimeoutLabel->setVisible(false); -- m_generalUi->faviconTimeoutSpinBox->setVisible(false); --#endif -- --#ifndef WITH_XC_TOUCHID -- bool hideTouchID = true; --#else -- bool hideTouchID = !TouchID::getInstance().isAvailable(); --#endif -- if (hideTouchID) { -- m_secUi->touchIDResetCheckBox->setVisible(false); -- m_secUi->touchIDResetSpinBox->setVisible(false); -- m_secUi->touchIDResetOnScreenLockCheckBox->setVisible(false); -- } --} -- --ApplicationSettingsWidget::~ApplicationSettingsWidget() --{ --} -- --void ApplicationSettingsWidget::addSettingsPage(ISettingsPage* page) --{ -- QWidget* widget = page->createWidget(); -- widget->setParent(this); -- m_extraPages.append(ExtraPage(page, widget)); -- addPage(page->name(), page->icon(), widget); --} -- --void ApplicationSettingsWidget::loadSettings() --{ -- if (config()->hasAccessError()) { -- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); -- } -- --#ifdef QT_DEBUG -- m_generalUi->singleInstanceCheckBox->setEnabled(false); -- m_generalUi->launchAtStartup->setEnabled(false); --#endif -- m_generalUi->singleInstanceCheckBox->setChecked(config()->get(Config::SingleInstance).toBool()); -- m_generalUi->launchAtStartup->setChecked(osUtils->isLaunchAtStartupEnabled()); -- m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get(Config::RememberLastDatabases).toBool()); -- m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get(Config::RememberLastKeyFiles).toBool()); -- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked( -- config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()); -- m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get(Config::AutoSaveAfterEveryChange).toBool()); -- m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get(Config::AutoSaveOnExit).toBool()); -- m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(config()->get(Config::AutoSaveNonDataChanges).toBool()); -- m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get(Config::BackupBeforeSave).toBool()); -- m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get(Config::UseAtomicSaves).toBool()); -- m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool()); -- m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get(Config::MinimizeAfterUnlock).toBool()); -- m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get(Config::MinimizeOnOpenUrl).toBool()); -- m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get(Config::HideWindowOnCopy).toBool()); -- hideWindowOnCopyCheckBoxToggled(m_generalUi->hideWindowOnCopyCheckBox->isChecked()); -- m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get(Config::MinimizeOnCopy).toBool()); -- m_generalUi->dropToBackgroundOnCopyRadioButton->setChecked(config()->get(Config::DropToBackgroundOnCopy).toBool()); -- m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked( -- config()->get(Config::UseGroupIconOnEntryCreation).toBool()); -- m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryTitleMatch).toBool()); -- m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool()); -- m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt()); -- -- m_generalUi->languageComboBox->clear(); -- QList> languages = Translator::availableLanguages(); -- for (const auto& language : languages) { -- m_generalUi->languageComboBox->addItem(language.second, language.first); -- } -- int defaultIndex = m_generalUi->languageComboBox->findData(config()->get(Config::GUI_Language)); -- if (defaultIndex > 0) { -- m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); -- } -- -- m_generalUi->toolbarMovableCheckBox->setChecked(config()->get(Config::GUI_MovableToolbar).toBool()); -- m_generalUi->monospaceNotesCheckBox->setChecked(config()->get(Config::GUI_MonospaceNotes).toBool()); -- -- m_generalUi->toolButtonStyleComboBox->clear(); -- m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly); -- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text only"), Qt::ToolButtonTextOnly); -- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon); -- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon); -- m_generalUi->toolButtonStyleComboBox->addItem(tr("Follow style"), Qt::ToolButtonFollowStyle); -- int toolButtonStyleIndex = -- m_generalUi->toolButtonStyleComboBox->findData(config()->get(Config::GUI_ToolButtonStyle)); -- if (toolButtonStyleIndex > 0) { -- m_generalUi->toolButtonStyleComboBox->setCurrentIndex(toolButtonStyleIndex); -- } -- -- m_generalUi->systrayShowCheckBox->setChecked(config()->get(Config::GUI_ShowTrayIcon).toBool()); -- systrayToggled(m_generalUi->systrayShowCheckBox->isChecked()); -- m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get(Config::GUI_MinimizeToTray).toBool()); -- m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get(Config::GUI_MinimizeOnClose).toBool()); -- m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get(Config::GUI_MinimizeOnStartup).toBool()); -- m_generalUi->checkForUpdatesOnStartupCheckBox->setChecked(config()->get(Config::GUI_CheckForUpdates).toBool()); -- checkUpdatesToggled(m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked()); -- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setChecked( -- config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool()); -- -- m_generalUi->autoTypeAskCheckBox->setChecked(config()->get(Config::Security_AutoTypeAsk).toBool()); -- -- if (autoType()->isAvailable()) { -- m_globalAutoTypeKey = static_cast(config()->get(Config::GlobalAutoTypeKey).toInt()); -- m_globalAutoTypeModifiers = -- static_cast(config()->get(Config::GlobalAutoTypeModifiers).toInt()); -- if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { -- m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); -- } -- m_generalUi->autoTypeShortcutWidget->setAttribute(Qt::WA_MacShowFocusRect, true); -- m_generalUi->autoTypeDelaySpinBox->setValue(config()->get(Config::AutoTypeDelay).toInt()); -- m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get(Config::AutoTypeStartDelay).toInt()); -- } -- -- m_generalUi->trayIconAppearance->clear(); --#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) -- m_generalUi->trayIconAppearance->addItem(tr("Monochrome"), "monochrome"); --#else -- m_generalUi->trayIconAppearance->addItem(tr("Monochrome (light)"), "monochrome-light"); -- m_generalUi->trayIconAppearance->addItem(tr("Monochrome (dark)"), "monochrome-dark"); --#endif -- m_generalUi->trayIconAppearance->addItem(tr("Colorful"), "colorful"); -- int trayIconIndex = m_generalUi->trayIconAppearance->findData(resources()->trayIconAppearance()); -- if (trayIconIndex > 0) { -- m_generalUi->trayIconAppearance->setCurrentIndex(trayIconIndex); -- } -- -- m_secUi->clearClipboardCheckBox->setChecked(config()->get(Config::Security_ClearClipboard).toBool()); -- m_secUi->clearClipboardSpinBox->setValue(config()->get(Config::Security_ClearClipboardTimeout).toInt()); -- -- m_secUi->clearSearchCheckBox->setChecked(config()->get(Config::Security_ClearSearch).toBool()); -- m_secUi->clearSearchSpinBox->setValue(config()->get(Config::Security_ClearSearchTimeout).toInt()); -- -- m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get(Config::Security_LockDatabaseIdle).toBool()); -- m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get(Config::Security_LockDatabaseIdleSeconds).toInt()); -- m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get(Config::Security_LockDatabaseMinimize).toBool()); -- m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked( -- config()->get(Config::Security_LockDatabaseScreenLock).toBool()); -- m_secUi->relockDatabaseAutoTypeCheckBox->setChecked(config()->get(Config::Security_RelockAutoType).toBool()); -- m_secUi->fallbackToSearch->setChecked(config()->get(Config::Security_IconDownloadFallback).toBool()); -- -- m_secUi->passwordsHiddenCheckBox->setChecked(config()->get(Config::Security_PasswordsHidden).toBool()); -- m_secUi->passwordShowDotsCheckBox->setChecked(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()); -- m_secUi->passwordPreviewCleartextCheckBox->setChecked( -- config()->get(Config::Security_HidePasswordPreviewPanel).toBool()); -- m_secUi->passwordsRepeatVisibleCheckBox->setChecked( -- config()->get(Config::Security_PasswordsRepeatVisible).toBool()); -- m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); -- -- m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool()); -- m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt()); -- m_secUi->touchIDResetOnScreenLockCheckBox->setChecked( -- config()->get(Config::Security_ResetTouchIdScreenlock).toBool()); -- -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.loadSettings(); -- } -- -- setCurrentPage(0); --} -- --void ApplicationSettingsWidget::saveSettings() --{ -- if (config()->hasAccessError()) { -- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); -- // We prevent closing the settings page if we could not write to -- // the config file. -- return; -- } -- --#ifndef QT_DEBUG -- osUtils->setLaunchAtStartup(m_generalUi->launchAtStartup->isChecked()); --#endif -- -- config()->set(Config::SingleInstance, m_generalUi->singleInstanceCheckBox->isChecked()); -- config()->set(Config::RememberLastDatabases, m_generalUi->rememberLastDatabasesCheckBox->isChecked()); -- config()->set(Config::RememberLastKeyFiles, m_generalUi->rememberLastKeyFilesCheckBox->isChecked()); -- config()->set(Config::OpenPreviousDatabasesOnStartup, -- m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked()); -- config()->set(Config::AutoSaveAfterEveryChange, m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); -- config()->set(Config::AutoSaveOnExit, m_generalUi->autoSaveOnExitCheckBox->isChecked()); -- config()->set(Config::AutoSaveNonDataChanges, m_generalUi->autoSaveNonDataChangesCheckBox->isChecked()); -- config()->set(Config::BackupBeforeSave, m_generalUi->backupBeforeSaveCheckBox->isChecked()); -- config()->set(Config::UseAtomicSaves, m_generalUi->useAtomicSavesCheckBox->isChecked()); -- config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked()); -- config()->set(Config::MinimizeAfterUnlock, m_generalUi->minimizeAfterUnlockCheckBox->isChecked()); -- config()->set(Config::MinimizeOnOpenUrl, m_generalUi->minimizeOnOpenUrlCheckBox->isChecked()); -- config()->set(Config::HideWindowOnCopy, m_generalUi->hideWindowOnCopyCheckBox->isChecked()); -- config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked()); -- config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked()); -- config()->set(Config::UseGroupIconOnEntryCreation, m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); -- config()->set(Config::AutoTypeEntryTitleMatch, m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); -- config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked()); -- config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value()); -- -- auto language = m_generalUi->languageComboBox->currentData().toString(); -- if (config()->get(Config::GUI_Language) != language) { -- QTimer::singleShot(200, [] { -- getMainWindow()->restartApp( -- tr("You must restart the application to set the new language. Would you like to restart now?")); -- }); -- } -- config()->set(Config::GUI_Language, language); -- -- config()->set(Config::GUI_MovableToolbar, m_generalUi->toolbarMovableCheckBox->isChecked()); -- config()->set(Config::GUI_MonospaceNotes, m_generalUi->monospaceNotesCheckBox->isChecked()); -- -- config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString()); -- -- config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked()); -- config()->set(Config::GUI_TrayIconAppearance, m_generalUi->trayIconAppearance->currentData().toString()); -- config()->set(Config::GUI_MinimizeToTray, m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); -- config()->set(Config::GUI_MinimizeOnClose, m_generalUi->minimizeOnCloseCheckBox->isChecked()); -- config()->set(Config::GUI_MinimizeOnStartup, m_generalUi->systrayMinimizeOnStartup->isChecked()); -- config()->set(Config::GUI_CheckForUpdates, m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked()); -- config()->set(Config::GUI_CheckForUpdatesIncludeBetas, -- m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked()); -- -- config()->set(Config::Security_AutoTypeAsk, m_generalUi->autoTypeAskCheckBox->isChecked()); -- -- if (autoType()->isAvailable()) { -- config()->set(Config::GlobalAutoTypeKey, m_generalUi->autoTypeShortcutWidget->key()); -- config()->set(Config::GlobalAutoTypeModifiers, -- static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); -- config()->set(Config::AutoTypeDelay, m_generalUi->autoTypeDelaySpinBox->value()); -- config()->set(Config::AutoTypeStartDelay, m_generalUi->autoTypeStartDelaySpinBox->value()); -- } -- config()->set(Config::Security_ClearClipboard, m_secUi->clearClipboardCheckBox->isChecked()); -- config()->set(Config::Security_ClearClipboardTimeout, m_secUi->clearClipboardSpinBox->value()); -- -- config()->set(Config::Security_ClearSearch, m_secUi->clearSearchCheckBox->isChecked()); -- config()->set(Config::Security_ClearSearchTimeout, m_secUi->clearSearchSpinBox->value()); -- -- config()->set(Config::Security_LockDatabaseIdle, m_secUi->lockDatabaseIdleCheckBox->isChecked()); -- config()->set(Config::Security_LockDatabaseIdleSeconds, m_secUi->lockDatabaseIdleSpinBox->value()); -- config()->set(Config::Security_LockDatabaseMinimize, m_secUi->lockDatabaseMinimizeCheckBox->isChecked()); -- config()->set(Config::Security_LockDatabaseScreenLock, m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked()); -- config()->set(Config::Security_RelockAutoType, m_secUi->relockDatabaseAutoTypeCheckBox->isChecked()); -- config()->set(Config::Security_IconDownloadFallback, m_secUi->fallbackToSearch->isChecked()); -- -- config()->set(Config::Security_PasswordsHidden, m_secUi->passwordsHiddenCheckBox->isChecked()); -- config()->set(Config::Security_PasswordEmptyPlaceholder, m_secUi->passwordShowDotsCheckBox->isChecked()); -- -- config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked()); -- config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked()); -- config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); -- -- config()->set(Config::Security_ResetTouchId, m_secUi->touchIDResetCheckBox->isChecked()); -- config()->set(Config::Security_ResetTouchIdTimeout, m_secUi->touchIDResetSpinBox->value()); -- config()->set(Config::Security_ResetTouchIdScreenlock, m_secUi->touchIDResetOnScreenLockCheckBox->isChecked()); -- -- // Security: clear storage if related settings are disabled -- if (!config()->get(Config::RememberLastDatabases).toBool()) { -- config()->remove(Config::LastDatabases); -- config()->remove(Config::LastActiveDatabase); -- config()->remove(Config::LastAttachmentDir); -- } -- -- if (!config()->get(Config::RememberLastKeyFiles).toBool()) { -- config()->remove(Config::LastKeyFiles); -- config()->remove(Config::LastChallengeResponse); -- config()->remove(Config::LastDir); -- } -- -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.saveSettings(); -- } --} -- --void ApplicationSettingsWidget::resetSettings() --{ -- // Confirm reset -- auto ans = MessageBox::question(this, -- tr("Reset Settings?"), -- tr("Are you sure you want to reset all general and security settings to default?"), -- MessageBox::Reset | MessageBox::Cancel, -- MessageBox::Cancel); -- if (ans == MessageBox::Cancel) { -- return; -- } -- -- if (config()->hasAccessError()) { -- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); -- // We prevent closing the settings page if we could not write to -- // the config file. -- return; -- } -- -- // Reset general and security settings to default -- config()->resetToDefaults(); -- -- // Clear recently used data -- config()->remove(Config::LastDatabases); -- config()->remove(Config::LastActiveDatabase); -- config()->remove(Config::LastAttachmentDir); -- config()->remove(Config::LastKeyFiles); -- config()->remove(Config::LastDir); -- -- // Save the Extra Pages (these are NOT reset) -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.saveSettings(); -- } -- -- config()->sync(); -- -- // Refresh the settings widget and notify listeners -- loadSettings(); -- emit settingsReset(); --} -- --void ApplicationSettingsWidget::reject() --{ -- // register the old key again as it might have changed -- if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { -- autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); -- } --} -- --void ApplicationSettingsWidget::autoSaveToggled(bool checked) --{ -- // Explicitly enable other auto-save options -- if (checked) { -- m_generalUi->autoSaveOnExitCheckBox->setChecked(true); -- m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(true); -- } -- m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked); -- m_generalUi->autoSaveNonDataChangesCheckBox->setEnabled(!checked); --} -- --void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked) --{ -- m_generalUi->minimizeOnCopyRadioButton->setEnabled(checked); -- m_generalUi->dropToBackgroundOnCopyRadioButton->setEnabled(checked); --} -- --void ApplicationSettingsWidget::systrayToggled(bool checked) --{ -- m_generalUi->trayIconAppearance->setEnabled(checked); -- m_generalUi->trayIconAppearanceLabel->setEnabled(checked); -- m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); --} -- --void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked) --{ -- if (!checked) { -- m_generalUi->rememberLastKeyFilesCheckBox->setChecked(false); -- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(false); -- } -- -- m_generalUi->rememberLastKeyFilesCheckBox->setEnabled(checked); -- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setEnabled(checked); --} -- --void ApplicationSettingsWidget::checkUpdatesToggled(bool checked) --{ -- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setEnabled(checked); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetGeneral.ui keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetGeneral.ui ---- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetGeneral.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetGeneral.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1068 +0,0 @@ -- -- -- ApplicationSettingsWidgetGeneral -- -- -- -- 0 -- 0 -- 605 -- 1279 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- 0 -- -- -- -- Basic Settings -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- Qt::ScrollBarAlwaysOff -- -- -- true -- -- -- -- -- 0 -- 0 -- 581 -- 1235 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Startup -- -- -- -- -- -- Start only a single instance of KeePassXC -- -- -- true -- -- -- -- -- -- -- Automatically launch KeePassXC at system startup -- -- -- -- -- -- -- Minimize window at application startup -- -- -- -- -- -- -- Minimize window after unlocking database -- -- -- -- -- -- -- Remember previously used databases -- -- -- true -- -- -- -- -- -- -- 0 -- -- -- QLayout::SetMaximumSize -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- Load previously open databases on startup -- -- -- true -- -- -- -- -- -- -- -- -- 0 -- -- -- QLayout::SetMaximumSize -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- Remember database key files and security dongles -- -- -- true -- -- -- -- -- -- -- -- -- Check for updates at application startup once per week -- -- -- -- -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- false -- -- -- Include beta releases when checking for updates -- -- -- -- -- -- -- -- -- -- -- -- File Management -- -- -- -- -- -- Automatically save after every change -- -- -- -- -- -- -- Automatically save when locking database -- -- -- -- -- -- -- Automatically save non-data changes when locking database -- -- -- -- -- -- -- Backup database file before saving -- -- -- -- -- -- -- Automatically reload the database when modified externally -- -- -- -- -- -- -- Safely save database files (disable if experiencing problems with Dropbox, etc.) -- -- -- true -- -- -- -- -- -- -- -- -- -- Entry Management -- -- -- -- -- -- Use group icon on entry creation -- -- -- true -- -- -- -- -- -- -- Minimize when opening a URL -- -- -- -- -- -- -- Hide window when copying to clipboard -- -- -- -- -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- false -- -- -- Minimize -- -- -- -- -- -- -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- false -- -- -- Drop to background -- -- -- -- -- -- -- -- -- -- -- Favicon download timeout: -- -- -- faviconTimeoutSpinBox -- -- -- -- -- -- -- true -- -- -- Qt::StrongFocus -- -- -- Website icon download timeout in seconds -- -- -- sec -- -- -- 1 -- -- -- 60 -- -- -- 10 -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- -- User Interface -- -- -- -- -- -- 10 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::StrongFocus -- -- -- Toolbar button style -- -- -- QComboBox::AdjustToContents -- -- -- -- -- -- -- true -- -- -- -- 0 -- 0 -- -- -- -- Movable toolbar -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::StrongFocus -- -- -- Language selection -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Language: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- languageComboBox -- -- -- -- -- -- -- (restart program to activate) -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- true -- -- -- -- 0 -- 0 -- -- -- -- margin-right: 5px -- -- -- Toolbar button style: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- toolButtonStyleComboBox -- -- -- -- -- -- -- -- -- Use monospaced font for notes -- -- -- -- -- -- -- Minimize instead of app exit -- -- -- -- -- -- -- Show a system tray icon -- -- -- -- -- -- -- QLayout::SetMaximumSize -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Qt::StrongFocus -- -- -- Tray icon type -- -- -- -- -- -- -- false -- -- -- Tray icon type: -- -- -- trayIconAppearance -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 6 -- 0 -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- 0 -- -- -- QLayout::SetMaximumSize -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Hide window to system tray when minimized -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- 0 -- -- -- QLayout::SetMaximumSize -- -- -- -- -- Reset settings to default… -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Expanding -- -- -- -- 50 -- 20 -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 0 -- -- -- -- -- -- -- -- -- -- -- -- -- Auto-Type -- -- -- -- 10 -- -- -- 10 -- -- -- 10 -- -- -- 10 -- -- -- -- -- Use entry title to match windows for global Auto-Type -- -- -- -- -- -- -- Use entry URL to match windows for global Auto-Type -- -- -- -- -- -- -- Always ask before performing Auto-Type -- -- -- true -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- 10 -- -- -- 8 -- -- -- -- -- Auto-Type typing delay: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- autoTypeDelaySpinBox -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Global auto-type shortcut -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Auto-type character typing delay milliseconds -- -- -- ms -- -- -- -- -- -- 1000 -- -- -- 25 -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Auto-type start delay milliseconds -- -- -- ms -- -- -- -- -- -- 100 -- -- -- 10000 -- -- -- 100 -- -- -- 500 -- -- -- -- -- -- -- Global Auto-Type shortcut: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- autoTypeShortcutWidget -- -- -- -- -- -- -- Auto-Type start delay: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- autoTypeStartDelaySpinBox -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 0 -- 20 -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 0 -- -- -- -- -- -- -- -- -- -- -- -- -- ShortcutWidget -- QLineEdit --
autotype/ShortcutWidget.h
--
--
-- -- generalSettingsTabWidget -- scrollArea -- singleInstanceCheckBox -- launchAtStartup -- systrayMinimizeOnStartup -- minimizeAfterUnlockCheckBox -- rememberLastDatabasesCheckBox -- openPreviousDatabasesOnStartupCheckBox -- rememberLastKeyFilesCheckBox -- checkForUpdatesOnStartupCheckBox -- checkForUpdatesIncludeBetasCheckBox -- autoSaveAfterEveryChangeCheckBox -- autoSaveOnExitCheckBox -- autoSaveNonDataChangesCheckBox -- backupBeforeSaveCheckBox -- autoReloadOnChangeCheckBox -- useAtomicSavesCheckBox -- useGroupIconOnEntryCreationCheckBox -- minimizeOnOpenUrlCheckBox -- hideWindowOnCopyCheckBox -- minimizeOnCopyRadioButton -- dropToBackgroundOnCopyRadioButton -- faviconTimeoutSpinBox -- languageComboBox -- toolButtonStyleComboBox -- monospaceNotesCheckBox -- toolbarMovableCheckBox -- minimizeOnCloseCheckBox -- systrayShowCheckBox -- trayIconAppearance -- systrayMinimizeToTrayCheckBox -- resetSettingsButton -- autoTypeEntryTitleMatchCheckBox -- autoTypeEntryURLMatchCheckBox -- autoTypeAskCheckBox -- autoTypeShortcutWidget -- autoTypeStartDelaySpinBox -- autoTypeDelaySpinBox -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.h keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.h ---- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,77 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_SETTINGSWIDGET_H --#define KEEPASSX_SETTINGSWIDGET_H -- --#include "gui/EditWidget.h" -- --namespace Ui --{ -- class ApplicationSettingsWidgetGeneral; -- class ApplicationSettingsWidgetSecurity; --} // namespace Ui -- --class ISettingsPage --{ --public: -- virtual ~ISettingsPage() -- { -- } -- virtual QString name() = 0; -- virtual QIcon icon() = 0; -- virtual QWidget* createWidget() = 0; -- virtual void loadSettings(QWidget* widget) = 0; -- virtual void saveSettings(QWidget* widget) = 0; --}; -- --class ApplicationSettingsWidget : public EditWidget --{ -- Q_OBJECT -- --public: -- explicit ApplicationSettingsWidget(QWidget* parent = nullptr); -- ~ApplicationSettingsWidget(); -- void addSettingsPage(ISettingsPage* page); -- void loadSettings(); -- --signals: -- void settingsReset(); -- --private slots: -- void saveSettings(); -- void resetSettings(); -- void reject(); -- void autoSaveToggled(bool checked); -- void hideWindowOnCopyCheckBoxToggled(bool checked); -- void systrayToggled(bool checked); -- void rememberDatabasesToggled(bool checked); -- void checkUpdatesToggled(bool checked); -- --private: -- QWidget* const m_secWidget; -- QWidget* const m_generalWidget; -- const QScopedPointer m_secUi; -- const QScopedPointer m_generalUi; -- Qt::Key m_globalAutoTypeKey; -- Qt::KeyboardModifiers m_globalAutoTypeModifiers; -- class ExtraPage; -- QList m_extraPages; --}; -- --#endif // KEEPASSX_SETTINGSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetSecurity.ui keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetSecurity.ui ---- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetSecurity.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetSecurity.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,319 +0,0 @@ -- -- -- ApplicationSettingsWidgetSecurity -- -- -- -- 0 -- 0 -- 595 -- 567 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Timeouts -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Clipboard clear seconds -- -- -- sec -- -- -- 1 -- -- -- 999 -- -- -- 10 -- -- -- -- -- -- -- Forget TouchID after inactivity of -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Touch ID inactivity reset -- -- -- min -- -- -- 1440 -- -- -- 30 -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Lock databases after inactivity of -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Database lock timeout seconds -- -- -- sec -- -- -- 10 -- -- -- 43200 -- -- -- 240 -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- min -- -- -- 1 -- -- -- 1440 -- -- -- 5 -- -- -- 10 -- -- -- -- -- -- -- Clear clipboard after -- -- -- -- -- -- -- Clear search query after -- -- -- -- -- -- -- -- -- -- Convenience -- -- -- -- -- -- Lock databases when session is locked or lid is closed -- -- -- -- -- -- -- Forget TouchID when session is locked or lid is closed -- -- -- -- -- -- -- Lock databases after minimizing the window -- -- -- -- -- -- -- Re-lock previously locked database after performing Auto-Type -- -- -- -- -- -- -- Require password repeat when it is visible -- -- -- -- -- -- -- Hide passwords when editing them -- -- -- -- -- -- -- Use placeholder for empty password fields -- -- -- -- -- -- -- Hide passwords in the entry preview panel -- -- -- -- -- -- -- Hide entry notes by default -- -- -- -- -- -- -- -- -- -- Privacy -- -- -- -- -- -- Use DuckDuckGo service to download website icons -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Expanding -- -- -- -- 20 -- 30 -- -- -- -- -- -- -- -- clearClipboardCheckBox -- clearClipboardSpinBox -- lockDatabaseIdleCheckBox -- lockDatabaseIdleSpinBox -- clearSearchCheckBox -- clearSearchSpinBox -- touchIDResetCheckBox -- touchIDResetSpinBox -- lockDatabaseOnScreenLockCheckBox -- touchIDResetOnScreenLockCheckBox -- lockDatabaseMinimizeCheckBox -- relockDatabaseAutoTypeCheckBox -- passwordsRepeatVisibleCheckBox -- passwordsHiddenCheckBox -- passwordShowDotsCheckBox -- passwordPreviewCleartextCheckBox -- hideNotesCheckBox -- fallbackToSearch -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.cpp keepassxc-2.6.4-patched/src/gui/CategoryListWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,279 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CategoryListWidget.h" --#include "ui_CategoryListWidget.h" -- --#include --#include --#include --#include --#include --#include -- --CategoryListWidget::CategoryListWidget(QWidget* parent) -- : QWidget(parent) -- , m_itemDelegate(nullptr) -- , m_ui(new Ui::CategoryListWidget()) --{ -- m_ui->setupUi(this); -- m_itemDelegate = new CategoryListWidgetDelegate(m_ui->categoryList); -- m_ui->categoryList->setItemDelegate(m_itemDelegate); -- -- connect(m_ui->categoryList, SIGNAL(currentRowChanged(int)), SLOT(emitCategoryChanged(int))); -- -- connect(m_ui->scrollUp, SIGNAL(clicked()), SLOT(scrollCategoriesUp())); -- connect(m_ui->scrollDown, SIGNAL(clicked()), SLOT(scrollCategoriesDown())); -- connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateCategoryScrollButtons())); -- // clang-format off -- connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(rangeChanged(int,int)), SLOT(updateCategoryScrollButtons())); -- // clang-format on --} -- --CategoryListWidget::~CategoryListWidget() --{ --} -- --QSize CategoryListWidget::sizeHint() const --{ -- QSize sizeHint = QWidget::sizeHint(); -- -- int width = m_ui->categoryList->width(); -- -- int min = minimumSizeHint().width(); -- if (width < min) { -- width = min; -- } -- sizeHint.setWidth(width); -- -- return sizeHint; --} -- --QSize CategoryListWidget::minimumSizeHint() const --{ -- return QSize(m_itemDelegate->minWidth() + m_ui->categoryList->frameWidth() * 2, -- m_ui->categoryList->sizeHintForRow(0) * 2); --} -- --int CategoryListWidget::addCategory(const QString& labelText, const QIcon& icon) --{ -- QListWidgetItem* item = new QListWidgetItem(m_ui->categoryList); -- item->setText(labelText); -- item->setIcon(icon); -- m_ui->categoryList->addItem(item); -- return m_ui->categoryList->count() - 1; --} -- --void CategoryListWidget::removeCategory(int index) --{ -- m_ui->categoryList->removeItemWidget(m_ui->categoryList->item(index)); --} -- --int CategoryListWidget::currentCategory() --{ -- return m_ui->categoryList->currentRow(); --} -- --void CategoryListWidget::setCurrentCategory(int index) --{ -- m_ui->categoryList->setCurrentRow(index); --} -- --void CategoryListWidget::setCategoryHidden(int index, bool hidden) --{ -- m_ui->categoryList->item(index)->setHidden(hidden); --} -- --bool CategoryListWidget::isCategoryHidden(int index) --{ -- return m_ui->categoryList->item(index)->isHidden(); --} -- --void CategoryListWidget::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); -- updateCategoryScrollButtons(); --} -- --void CategoryListWidget::resizeEvent(QResizeEvent* event) --{ -- auto newDelegate = new CategoryListWidgetDelegate(m_ui->categoryList); -- m_ui->categoryList->setItemDelegate(newDelegate); -- m_itemDelegate->deleteLater(); -- m_itemDelegate = newDelegate; -- -- QWidget::resizeEvent(event); --} -- --void CategoryListWidget::updateCategoryScrollButtons() --{ -- m_ui->scrollUp->setEnabled(m_ui->categoryList->verticalScrollBar()->value() != 0); -- m_ui->scrollDown->setEnabled(m_ui->categoryList->verticalScrollBar()->value() -- != m_ui->categoryList->verticalScrollBar()->maximum()); -- -- m_ui->scrollUp->setVisible(m_ui->categoryList->verticalScrollBar()->maximum() > 0); -- m_ui->scrollDown->setVisible(m_ui->scrollUp->isVisible()); --} -- --void CategoryListWidget::scrollCategoriesUp() --{ -- m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() -- - m_ui->categoryList->verticalScrollBar()->pageStep()); --} -- --void CategoryListWidget::scrollCategoriesDown() --{ -- m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() -- + m_ui->categoryList->verticalScrollBar()->pageStep()); --} -- --void CategoryListWidget::emitCategoryChanged(int index) --{ -- emit categoryChanged(index); --} -- --/* =============================================================================================== */ -- --CategoryListWidgetDelegate::CategoryListWidgetDelegate(QListWidget* parent) -- : QStyledItemDelegate(parent) -- , m_listWidget(parent) -- , m_size(96, 96) --{ -- m_size.setWidth(minWidth()); -- if (m_listWidget && m_listWidget->width() > m_size.width()) { -- m_size.setWidth(m_listWidget->width()); -- } --} -- --class IconSelectionCorrectedStyle : public QProxyStyle --{ --public: -- void drawPrimitive(PrimitiveElement element, -- const QStyleOption* option, -- QPainter* painter, -- const QWidget* widget) const override -- { -- painter->save(); -- if (widget && PE_PanelItemViewItem == element) { -- // Qt on Windows and the Fusion/Phantom base styles draw selection backgrounds only for -- // the actual text/icon bounding box, not over the full width of a list item. -- // State_On is relevant only for the Windows hack below. -- if (option->state & State_HasFocus || option->state & State_On) { -- painter->fillRect(option->rect, widget->palette().color(QPalette::Active, QPalette::Highlight)); -- } else if (option->state & State_Selected) { -- painter->fillRect(option->rect, widget->palette().color(QPalette::Inactive, QPalette::Highlight)); -- } -- } else if (PE_FrameFocusRect == element) { -- // don't draw the native focus rect -- } else { -- QProxyStyle::drawPrimitive(element, option, painter, widget); -- } -- -- painter->restore(); -- } -- --#ifdef Q_OS_WIN -- void drawControl(ControlElement element, -- const QStyleOption* option, -- QPainter* painter, -- const QWidget* widget) const override -- { -- // Qt on Windows swallows State_HasFocus somewhere in its intestines, -- // so we abuse State_On here to indicate the selection focus and -- // hack into the text colour palette. Forgive me. -- if (QStyle::CE_ItemViewItem == element && option->state & State_HasFocus) { -- QStyleOptionViewItem newOpt(*qstyleoption_cast(option)); -- newOpt.state |= State_On; -- newOpt.palette.setColor(QPalette::All, QPalette::Text, widget->palette().color(QPalette::HighlightedText)); -- QProxyStyle::drawControl(element, &newOpt, painter, widget); -- return; -- } -- QProxyStyle::drawControl(element, option, painter, widget); -- } --#endif --}; -- --void CategoryListWidgetDelegate::paint(QPainter* painter, -- const QStyleOptionViewItem& option, -- const QModelIndex& index) const --{ -- QStyleOptionViewItem opt = option; -- initStyleOption(&opt, index); -- -- painter->save(); -- -- QIcon icon = opt.icon; -- QSize iconSize = opt.icon.actualSize(QSize(ICON_SIZE, ICON_SIZE)); -- opt.icon = QIcon(); -- opt.decorationAlignment = Qt::AlignHCenter | Qt::AlignVCenter; -- opt.decorationPosition = QStyleOptionViewItem::Top; -- opt.decorationSize = iconSize; -- -- QScopedPointer style(new IconSelectionCorrectedStyle()); -- style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget); -- -- QRect fontRect = painter->fontMetrics().boundingRect( -- QRect(0, 0, minWidth(), m_size.height()), Qt::AlignHCenter | Qt::AlignBottom | Qt::TextWordWrap, opt.text); -- -- int paddingTop = fontRect.height() < 30 ? 15 : 10; -- int left = opt.rect.left() + opt.rect.width() / 2 - iconSize.width() / 2; -- -- auto mode = QIcon::Normal; -- if ((opt.state & QStyle::State_Enabled) == 0) { -- mode = QIcon::Disabled; -- } else if (opt.state & QStyle::State_HasFocus) { -- mode = QIcon::Selected; -- } else if (opt.state & QStyle::State_Active) { -- mode = QIcon::Active; -- } -- painter->drawPixmap(left, opt.rect.top() + paddingTop, icon.pixmap(iconSize, mode)); -- -- painter->restore(); --} -- --int CategoryListWidgetDelegate::minWidth() const --{ -- int c = m_listWidget->count(); -- int maxWidth = 0; -- -- for (int i = 0; i < c; ++i) { -- QFontMetrics fm(m_listWidget->font()); -- QRect fontRect = -- fm.boundingRect(QRect(0, 0, 0, 0), Qt::TextWordWrap | Qt::ElideNone, m_listWidget->item(i)->text()); -- -- if (fontRect.width() > maxWidth) { -- maxWidth = fontRect.width(); -- } -- } -- -- // add some padding -- maxWidth += 10; -- return maxWidth < m_size.height() ? m_size.height() : maxWidth; --} -- --QSize CategoryListWidgetDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const --{ -- Q_UNUSED(option); -- Q_UNUSED(index); -- -- int w = minWidth(); -- if (m_listWidget->width() > w) { -- w = m_listWidget->width(); -- } -- -- return {w, m_size.height()}; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.h keepassxc-2.6.4-patched/src/gui/CategoryListWidget.h ---- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,93 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_GUI_CATEGORYLISTWIDGET_H --#define KEEPASSXC_GUI_CATEGORYLISTWIDGET_H -- --#include --#include --#include -- --class CategoryListWidgetDelegate; --class QListWidget; -- --namespace Ui --{ -- class CategoryListWidget; --} -- --class CategoryListWidget : public QWidget --{ -- Q_OBJECT -- --public: -- CategoryListWidget(QWidget* parent = nullptr); -- ~CategoryListWidget(); -- -- int currentCategory(); -- void setCurrentCategory(int index); -- int addCategory(const QString& labelText, const QIcon& icon); -- void setCategoryHidden(int index, bool hidden); -- bool isCategoryHidden(int index); -- void removeCategory(int index); -- --signals: -- void categoryChanged(int index); -- --protected: -- void showEvent(QShowEvent* event) override; -- void resizeEvent(QResizeEvent* event) override; -- QSize sizeHint() const override; -- QSize minimumSizeHint() const override; -- --protected slots: -- void updateCategoryScrollButtons(); -- void scrollCategoriesDown(); -- void scrollCategoriesUp(); -- void emitCategoryChanged(int index); -- --private: -- QPointer m_itemDelegate; -- const QScopedPointer m_ui; -- -- Q_DISABLE_COPY(CategoryListWidget) --}; -- --/* =============================================================================================== */ -- --class CategoryListWidgetDelegate : public QStyledItemDelegate --{ -- Q_OBJECT -- --public: -- explicit CategoryListWidgetDelegate(QListWidget* parent = nullptr); -- int minWidth() const; -- --protected: -- void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; -- QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; -- --private: -- const int ICON_SIZE = 32; -- -- QPointer m_listWidget; -- QSize m_size; -- -- Q_DISABLE_COPY(CategoryListWidgetDelegate) --}; -- --#endif -diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.ui keepassxc-2.6.4-patched/src/gui/CategoryListWidget.ui ---- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,122 +0,0 @@ -- -- -- CategoryListWidget -- -- -- -- 0 -- 0 -- 256 -- 418 -- -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 16777215 -- 15 -- -- -- -- -- -- -- Qt::UpArrow -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::ScrollBarAlwaysOff -- -- -- Qt::ScrollBarAlwaysOff -- -- -- QListView::Static -- -- -- QListView::TopToBottom -- -- -- false -- -- -- QListView::IconMode -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 16777215 -- 15 -- -- -- -- -- -- -- Qt::DownArrow -- -- -- -- -- -- -- scrollUp -- categoryList -- scrollDown -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/Clipboard.cpp keepassxc-2.6.4-patched/src/gui/Clipboard.cpp ---- keepassxc-2.6.4-orig/src/gui/Clipboard.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Clipboard.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,118 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Clipboard.h" -- --#include --#include --#include --#include -- --#include "core/Config.h" -- --Clipboard* Clipboard::m_instance(nullptr); --#ifdef Q_OS_MACOS --QPointer Clipboard::m_pasteboard(nullptr); --#endif -- --Clipboard::Clipboard(QObject* parent) -- : QObject(parent) -- , m_timer(new QTimer(this)) --{ --#ifdef Q_OS_MACOS -- if (!m_pasteboard) { -- m_pasteboard = new MacPasteboard(); -- } --#endif -- m_timer->setSingleShot(true); -- connect(m_timer, SIGNAL(timeout()), SLOT(clearClipboard())); -- connect(qApp, SIGNAL(aboutToQuit()), SLOT(clearCopiedText())); --} -- --void Clipboard::setText(const QString& text, bool clear) --{ -- auto* clipboard = QApplication::clipboard(); -- if (!clipboard) { -- qWarning("Unable to access the clipboard."); -- return; -- } -- -- auto* mime = new QMimeData; --#ifdef Q_OS_MACOS -- mime->setText(text); -- mime->setData("application/x-nspasteboard-concealed-type", text.toUtf8()); -- clipboard->setMimeData(mime, QClipboard::Clipboard); --#else -- mime->setText(text); --#ifdef Q_OS_LINUX -- mime->setData("x-kde-passwordManagerHint", QByteArrayLiteral("secret")); --#endif --#ifdef Q_OS_WIN -- mime->setData("ExcludeClipboardContentFromMonitorProcessing", QByteArrayLiteral("1")); --#endif -- clipboard->setMimeData(mime, QClipboard::Clipboard); -- -- if (clipboard->supportsSelection()) { -- clipboard->setMimeData(mime, QClipboard::Selection); -- } --#endif -- -- if (clear) { -- m_lastCopied = text; -- if (config()->get(Config::Security_ClearClipboard).toBool()) { -- int timeout = config()->get(Config::Security_ClearClipboardTimeout).toInt(); -- if (timeout > 0) { -- m_timer->start(timeout * 1000); -- } -- } -- } --} -- --void Clipboard::clearCopiedText() --{ -- if (m_timer->isActive()) { -- m_timer->stop(); -- } -- -- clearClipboard(); --} -- --void Clipboard::clearClipboard() --{ -- auto* clipboard = QApplication::clipboard(); -- if (!clipboard) { -- qWarning("Unable to access the clipboard."); -- return; -- } -- -- if (m_lastCopied == clipboard->text(QClipboard::Clipboard) -- || m_lastCopied == clipboard->text(QClipboard::Selection)) { -- setText("", false); -- } -- -- m_lastCopied.clear(); --} -- --Clipboard* Clipboard::instance() --{ -- if (!m_instance) { -- m_instance = new Clipboard(qApp); -- } -- -- return m_instance; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/Clipboard.h keepassxc-2.6.4-patched/src/gui/Clipboard.h ---- keepassxc-2.6.4-orig/src/gui/Clipboard.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Clipboard.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CLIPBOARD_H --#define KEEPASSX_CLIPBOARD_H -- --#include --#ifdef Q_OS_MACOS --#include "core/MacPasteboard.h" --#include --#endif -- --class QTimer; -- --class Clipboard : public QObject --{ -- Q_OBJECT -- --public: -- void setText(const QString& text, bool clear = true); -- -- static Clipboard* instance(); -- --public slots: -- void clearCopiedText(); -- --private slots: -- void clearClipboard(); -- --private: -- explicit Clipboard(QObject* parent = nullptr); -- -- static Clipboard* m_instance; -- -- QTimer* m_timer; --#ifdef Q_OS_MACOS -- // This object lives for the whole program lifetime and we cannot delete it on exit, -- // so ignore leak warnings. See https://bugreports.qt.io/browse/QTBUG-54832 -- static QPointer m_pasteboard; --#endif -- QString m_lastCopied; --}; -- --inline Clipboard* clipboard() --{ -- return Clipboard::instance(); --} -- --#endif // KEEPASSX_CLIPBOARD_H -diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.cpp keepassxc-2.6.4-patched/src/gui/CloneDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/CloneDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CloneDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,71 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CloneDialog.h" --#include "ui_CloneDialog.h" -- --#include "config-keepassx.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Resources.h" --#include "crypto/Crypto.h" --#include "gui/DatabaseWidget.h" -- --CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry) -- : QDialog(parent) -- , m_ui(new Ui::CloneDialog()) --{ -- m_db = db; -- m_entry = entry; -- m_parent = parent; -- -- m_ui->setupUi(this); -- this->setFixedSize(this->sizeHint()); -- -- setAttribute(Qt::WA_DeleteOnClose); -- -- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); -- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(cloneEntry())); --} -- --void CloneDialog::cloneEntry() --{ -- Entry::CloneFlags flags = Entry::CloneNewUuid | Entry::CloneResetTimeInfo; -- -- if (m_ui->titleClone->isChecked()) { -- flags |= Entry::CloneRenameTitle; -- } -- -- if (m_ui->referencesClone->isChecked()) { -- flags |= Entry::CloneUserAsRef; -- flags |= Entry::ClonePassAsRef; -- } -- -- if (m_ui->historyClone->isChecked()) { -- flags |= Entry::CloneIncludeHistory; -- } -- -- Entry* entry = m_entry->clone(flags); -- entry->setGroup(m_entry->group()); -- -- m_parent->refreshSearch(); -- close(); --} -- --CloneDialog::~CloneDialog() --{ --} -diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.h keepassxc-2.6.4-patched/src/gui/CloneDialog.h ---- keepassxc-2.6.4-orig/src/gui/CloneDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CloneDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,52 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CLONEDIALOG_H --#define KEEPASSX_CLONEDIALOG_H -- --#include "core/Database.h" --#include "core/Entry.h" --#include "gui/DatabaseWidget.h" --#include --#include -- --namespace Ui --{ -- class CloneDialog; --} -- --class CloneDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit CloneDialog(DatabaseWidget* parent = nullptr, Database* db = nullptr, Entry* entry = nullptr); -- ~CloneDialog(); -- --private: -- QScopedPointer m_ui; -- --private slots: -- void cloneEntry(); -- --protected: -- Database* m_db; -- Entry* m_entry; -- DatabaseWidget* m_parent; --}; -- --#endif // KEEPASSX_CLONEDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.ui keepassxc-2.6.4-patched/src/gui/CloneDialog.ui ---- keepassxc-2.6.4-orig/src/gui/CloneDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/CloneDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,72 +0,0 @@ -- -- -- CloneDialog -- -- -- -- 0 -- 0 -- 347 -- 136 -- -- -- -- Clone Options -- -- -- -- -- -- -- -- Append ' - Clone' to title -- -- -- true -- -- -- -- -- -- -- Replace username and password with references -- -- -- -- -- -- -- Copy history -- -- -- true -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- QDialogButtonBox::Cancel|QDialogButtonBox::Ok -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,342 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CsvImportWidget.h" --#include "ui_CsvImportWidget.h" -- --#include --#include --#include -- --#include "core/Clock.h" --#include "format/KeePass2Writer.h" --#include "gui/MessageBox.h" --#include "gui/MessageWidget.h" --#include "totp/totp.h" -- --// I wanted to make the CSV import GUI future-proof, so if one day you need a new field, --// all you have to do is add a field to m_columnHeader, and the GUI will follow: --// dynamic generation of comboBoxes, labels, placement and so on. Try it for immense fun! -- --CsvImportWidget::CsvImportWidget(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::CsvImportWidget()) -- , m_parserModel(new CsvParserModel(this)) -- , m_comboModel(new QStringListModel(this)) -- , m_columnHeader(QStringList() << QObject::tr("Group") << QObject::tr("Title") << QObject::tr("Username") -- << QObject::tr("Password") << QObject::tr("URL") << QObject::tr("Notes") -- << QObject::tr("TOTP") << QObject::tr("Icon") << QObject::tr("Last Modified") -- << QObject::tr("Created")) -- , m_fieldSeparatorList(QStringList() << "," -- << ";" -- << "-" -- << ":" -- << "." -- << "\t") --{ -- m_ui->setupUi(this); -- -- m_ui->tableViewFields->setSelectionMode(QAbstractItemView::NoSelection); -- m_ui->tableViewFields->setFocusPolicy(Qt::NoFocus); -- m_ui->messageWidget->setHidden(true); -- -- m_combos << m_ui->groupCombo << m_ui->titleCombo << m_ui->usernameCombo << m_ui->passwordCombo << m_ui->urlCombo -- << m_ui->notesCombo << m_ui->totpCombo << m_ui->iconCombo << m_ui->lastModifiedCombo << m_ui->createdCombo; -- -- for (auto combo : m_combos) { -- combo->setModel(m_comboModel); -- connect(combo, SIGNAL(currentIndexChanged(int)), SLOT(comboChanged(int))); -- } -- -- m_parserModel->setHeaderLabels(m_columnHeader); -- m_ui->tableViewFields->setModel(m_parserModel); -- -- connect(m_ui->spinBoxSkip, SIGNAL(valueChanged(int)), SLOT(skippedChanged(int))); -- connect(m_ui->comboBoxCodec, SIGNAL(currentIndexChanged(int)), SLOT(parse())); -- connect(m_ui->comboBoxTextQualifier, SIGNAL(currentIndexChanged(int)), SLOT(parse())); -- connect(m_ui->comboBoxComment, SIGNAL(currentIndexChanged(int)), SLOT(parse())); -- connect(m_ui->comboBoxFieldSeparator, SIGNAL(currentIndexChanged(int)), SLOT(parse())); -- connect(m_ui->checkBoxBackslash, SIGNAL(toggled(bool)), SLOT(parse())); -- connect(m_ui->checkBoxFieldNames, SIGNAL(toggled(bool)), SLOT(updatePreview())); -- -- connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(writeDatabase())); -- connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); --} -- --void CsvImportWidget::comboChanged(int index) --{ -- // this line is the one that actually updates GUI table -- m_parserModel->mapColumns(index, m_combos.indexOf(qobject_cast(sender()))); -- updateTableview(); --} -- --void CsvImportWidget::skippedChanged(int rows) --{ -- m_parserModel->setSkippedRows(rows); -- updateTableview(); --} -- --CsvImportWidget::~CsvImportWidget() --{ --} -- --void CsvImportWidget::configParser() --{ -- m_parserModel->setBackslashSyntax(m_ui->checkBoxBackslash->isChecked()); -- m_parserModel->setComment(m_ui->comboBoxComment->currentText().at(0)); -- m_parserModel->setTextQualifier(m_ui->comboBoxTextQualifier->currentText().at(0)); -- m_parserModel->setCodec(m_ui->comboBoxCodec->currentText()); -- m_parserModel->setFieldSeparator(m_fieldSeparatorList.at(m_ui->comboBoxFieldSeparator->currentIndex()).at(0)); --} -- --void CsvImportWidget::updateTableview() --{ -- m_ui->tableViewFields->resizeRowsToContents(); -- m_ui->tableViewFields->resizeColumnsToContents(); -- -- for (int c = 0; c < m_ui->tableViewFields->horizontalHeader()->count(); ++c) { -- m_ui->tableViewFields->horizontalHeader()->setSectionResizeMode(c, QHeaderView::Stretch); -- } --} -- --void CsvImportWidget::updatePreview() --{ -- int minSkip = 0; -- if (m_ui->checkBoxFieldNames->isChecked()) { -- minSkip = 1; -- } -- m_ui->labelSizeRowsCols->setText(m_parserModel->getFileInfo()); -- m_ui->spinBoxSkip->setRange(minSkip, qMax(minSkip, m_parserModel->rowCount() - 1)); -- m_ui->spinBoxSkip->setValue(minSkip); -- -- QStringList list(tr("Not Present")); -- for (int i = 1; i < m_parserModel->getCsvCols(); ++i) { -- if (m_ui->checkBoxFieldNames->isChecked()) { -- auto columnName = m_parserModel->getCsvTable().at(0).at(i); -- if (columnName.isEmpty()) { -- list << QString(tr("Column %1").arg(i)); -- } else { -- list << columnName; -- } -- } else { -- list << QString(tr("Column %1").arg(i)); -- } -- } -- m_comboModel->setStringList(list); -- -- int j = 1; -- for (QComboBox* b : m_combos) { -- if (j < m_parserModel->getCsvCols()) { -- b->setCurrentIndex(j); -- } else { -- b->setCurrentIndex(0); -- } -- ++j; -- } --} -- --void CsvImportWidget::load(const QString& filename, Database* const db) --{ -- // QApplication::processEvents(); -- m_db = db; -- m_parserModel->setFilename(filename); -- m_ui->labelFilename->setText(filename); -- Group* group = m_db->rootGroup(); -- group->setUuid(QUuid::createUuid()); -- group->setNotes(tr("Imported from CSV file").append("\n").append(tr("Original data: ")) + filename); -- parse(); --} -- --void CsvImportWidget::parse() --{ -- configParser(); -- QApplication::setOverrideCursor(Qt::WaitCursor); -- // QApplication::processEvents(); -- bool good = m_parserModel->parse(); -- updatePreview(); -- QApplication::restoreOverrideCursor(); -- if (!good) { -- m_ui->messageWidget->showMessage(tr("Error(s) detected in CSV file!").append("\n").append(formatStatusText()), -- MessageWidget::Warning); -- } else { -- m_ui->messageWidget->setHidden(true); -- } --} -- --QString CsvImportWidget::formatStatusText() const --{ -- QString text = m_parserModel->getStatus(); -- int items = text.count('\n'); -- if (items > 2) { -- return text.section('\n', 0, 1).append("\n").append(tr("[%n more message(s) skipped]", "", items - 2)); -- } -- if (items == 1) { -- text.append(QString("\n")); -- } -- return text; --} -- --void CsvImportWidget::writeDatabase() --{ -- setRootGroup(); -- for (int r = 0; r < m_parserModel->rowCount(); ++r) { -- // use validity of second column as a GO/NOGO for all others fields -- if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { -- continue; -- } -- Entry* entry = new Entry(); -- entry->setUuid(QUuid::createUuid()); -- entry->setGroup(splitGroups(m_parserModel->data(m_parserModel->index(r, 0)).toString())); -- entry->setTitle(m_parserModel->data(m_parserModel->index(r, 1)).toString()); -- entry->setUsername(m_parserModel->data(m_parserModel->index(r, 2)).toString()); -- entry->setPassword(m_parserModel->data(m_parserModel->index(r, 3)).toString()); -- entry->setUrl(m_parserModel->data(m_parserModel->index(r, 4)).toString()); -- entry->setNotes(m_parserModel->data(m_parserModel->index(r, 5)).toString()); -- -- if (m_parserModel->data(m_parserModel->index(r, 6)).isValid()) { -- auto totp = Totp::parseSettings(m_parserModel->data(m_parserModel->index(r, 6)).toString()); -- entry->setTotp(totp); -- } -- -- bool ok; -- int icon = m_parserModel->data(m_parserModel->index(r, 7)).toInt(&ok); -- if (ok) { -- entry->setIcon(icon); -- } -- -- TimeInfo timeInfo; -- if (m_parserModel->data(m_parserModel->index(r, 8)).isValid()) { -- auto datetime = m_parserModel->data(m_parserModel->index(r, 8)).toString(); -- if (datetime.contains(QRegularExpression("^\\d+$"))) { -- timeInfo.setLastModificationTime(Clock::datetimeUtc(datetime.toLongLong() * 1000)); -- } else { -- auto lastModified = QDateTime::fromString(datetime, Qt::ISODate); -- if (lastModified.isValid()) { -- timeInfo.setLastModificationTime(lastModified); -- } -- } -- } -- if (m_parserModel->data(m_parserModel->index(r, 9)).isValid()) { -- auto datetime = m_parserModel->data(m_parserModel->index(r, 9)).toString(); -- if (datetime.contains(QRegularExpression("^\\d+$"))) { -- timeInfo.setCreationTime(Clock::datetimeUtc(datetime.toLongLong() * 1000)); -- } else { -- auto created = QDateTime::fromString(datetime, Qt::ISODate); -- if (created.isValid()) { -- timeInfo.setCreationTime(created); -- } -- } -- } -- entry->setTimeInfo(timeInfo); -- } -- QBuffer buffer; -- buffer.open(QBuffer::ReadWrite); -- -- KeePass2Writer writer; -- writer.writeDatabase(&buffer, m_db); -- if (writer.hasError()) { -- MessageBox::warning(this, -- tr("Error"), -- tr("CSV import: writer has errors:\n%1").arg(writer.errorString()), -- MessageBox::Ok, -- MessageBox::Ok); -- } -- emit editFinished(true); --} -- --void CsvImportWidget::setRootGroup() --{ -- QString groupLabel; -- QStringList groupList; -- bool is_root = false; -- bool is_empty = false; -- bool is_label = false; -- -- for (int r = 0; r < m_parserModel->rowCount(); ++r) { -- // use validity of second column as a GO/NOGO for all others fields -- if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { -- continue; -- } -- groupLabel = m_parserModel->data(m_parserModel->index(r, 0)).toString(); -- // check if group name is either "root", "" (empty) or some other label -- groupList = groupLabel.split("/", QString::SkipEmptyParts); -- if (groupList.isEmpty()) { -- is_empty = true; -- } else if (not groupList.first().compare("Root", Qt::CaseSensitive)) { -- is_root = true; -- } else if (not groupLabel.compare("")) { -- is_empty = true; -- } else { -- is_label = true; -- } -- -- groupList.clear(); -- } -- -- if ((is_empty and is_root) or (is_label and not is_empty and is_root)) { -- m_db->rootGroup()->setName("CSV IMPORTED"); -- } else { -- m_db->rootGroup()->setName("Root"); -- } --} -- --Group* CsvImportWidget::splitGroups(const QString& label) --{ -- // extract group names from nested path provided in "label" -- Group* current = m_db->rootGroup(); -- if (label.isEmpty()) { -- return current; -- } -- -- QStringList groupList = label.split("/", QString::SkipEmptyParts); -- // avoid the creation of a subgroup with the same name as Root -- if (m_db->rootGroup()->name() == "Root" && groupList.first() == "Root") { -- groupList.removeFirst(); -- } -- -- for (const QString& groupName : groupList) { -- Group* children = hasChildren(current, groupName); -- if (children == nullptr) { -- Group* brandNew = new Group(); -- brandNew->setParent(current); -- brandNew->setName(groupName); -- brandNew->setUuid(QUuid::createUuid()); -- current = brandNew; -- } else { -- Q_ASSERT(children != nullptr); -- current = children; -- } -- } -- return current; --} -- --Group* CsvImportWidget::hasChildren(Group* current, const QString& groupName) --{ -- // returns the group whose name is "groupName" and is child of "current" group -- for (Group* group : current->children()) { -- if (group->name() == groupName) { -- return group; -- } -- } -- return nullptr; --} -- --void CsvImportWidget::reject() --{ -- emit editFinished(false); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.h ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,76 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CSVIMPORTWIDGET_H --#define KEEPASSX_CSVIMPORTWIDGET_H -- --#include --#include --#include --#include --#include --#include -- --#include "core/Metadata.h" --#include "gui/csvImport/CsvParserModel.h" --#include "keys/PasswordKey.h" -- --namespace Ui --{ -- class CsvImportWidget; --} -- --class CsvImportWidget : public QWidget --{ -- Q_OBJECT -- --public: -- explicit CsvImportWidget(QWidget* parent = nullptr); -- ~CsvImportWidget(); -- void load(const QString& filename, Database* const db); -- --signals: -- void editFinished(bool accepted); -- --private slots: -- void parse(); -- void comboChanged(int index); -- void skippedChanged(int rows); -- void writeDatabase(); -- void updatePreview(); -- void setRootGroup(); -- void reject(); -- --private: -- Q_DISABLE_COPY(CsvImportWidget) -- const QScopedPointer m_ui; -- CsvParserModel* const m_parserModel; -- QStringListModel* const m_comboModel; -- QList m_combos; -- Database* m_db; -- -- const QStringList m_columnHeader; -- QStringList m_fieldSeparatorList; -- void configParser(); -- void updateTableview(); -- Group* splitGroups(const QString& label); -- Group* hasChildren(Group* current, const QString& groupName); -- QString formatStatusText() const; --}; -- --#endif // KEEPASSX_CSVIMPORTWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.ui keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.ui ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,764 +0,0 @@ -- -- -- CsvImportWidget -- -- -- -- 0 -- 0 -- 788 -- 530 -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::ScrollBarAlwaysOff -- -- -- true -- -- -- -- -- 0 -- 0 -- 753 -- 615 -- -- -- -- -- -- -- -- 11 -- 75 -- true -- -- -- -- Import CSV fields -- -- -- -- -- -- -- -- -- filename -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- size, rows, columns -- -- -- -- -- -- -- -- -- -- -- -- 75 -- true -- -- -- -- Column Association -- -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Password -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Username -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Title -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Group -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- URL -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Notes -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- TOTP -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Created -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Last Modified -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Icon -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- 75 -- true -- -- -- -- Encoding -- -- -- -- -- -- -- 50 -- false -- -- -- -- Codec -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Codec -- -- -- false -- -- -- UTF-8 -- -- -- -- UTF-8 -- -- -- -- -- Windows-1252 -- -- -- -- -- UTF-16 -- -- -- -- -- UTF-16LE -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Text is qualified by -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Text qualification -- -- -- false -- -- -- " -- -- -- -- " -- -- -- -- -- ' -- -- -- -- -- : -- -- -- -- -- . -- -- -- -- -- | -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Fields are separated by -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Field separation -- -- -- false -- -- -- , -- -- -- -- , -- -- -- -- -- ; -- -- -- -- -- - -- -- -- -- -- : -- -- -- -- -- . -- -- -- -- -- TAB (\t) -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Comments start with -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Comments start with -- -- -- false -- -- -- # -- -- -- -- # -- -- -- -- -- ; -- -- -- -- -- : -- -- -- -- -- @ -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Header lines skipped -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Number of header lines to discard -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 122 -- 20 -- -- -- -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- First line has field names -- -- -- -- -- -- -- -- 50 -- false -- -- -- -- Consider '\' an escape character -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- 75 -- true -- -- -- -- Preview -- -- -- false -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 300 -- -- -- -- -- 50 -- false -- -- -- -- CSV import preview -- -- -- false -- -- -- true -- -- -- -- -- -- -- -- -- -- -- -- -- -- QDialogButtonBox::Cancel|QDialogButtonBox::Ok -- -- -- false -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
--
-- -- scrollArea -- groupCombo -- titleCombo -- usernameCombo -- passwordCombo -- comboBoxCodec -- comboBoxTextQualifier -- comboBoxFieldSeparator -- comboBoxComment -- spinBoxSkip -- checkBoxFieldNames -- checkBoxBackslash -- tableViewFields -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.cpp ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,48 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CsvImportWizard.h" -- --#include --#include -- --#include "gui/MessageBox.h" -- --CsvImportWizard::CsvImportWizard(QWidget* parent) -- : DialogyWidget(parent) --{ -- m_layout = new QGridLayout(this); -- m_layout->addWidget(m_parse = new CsvImportWidget(this), 0, 0); -- -- connect(m_parse, SIGNAL(editFinished(bool)), this, SLOT(parseFinished(bool))); --} -- --CsvImportWizard::~CsvImportWizard() --{ --} -- --void CsvImportWizard::load(const QString& filename, Database* database) --{ -- m_db = database; -- m_parse->load(filename, database); --} -- --void CsvImportWizard::parseFinished(bool accepted) --{ -- emit importFinished(accepted); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.h ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CSVIMPORTWIZARD_H --#define KEEPASSX_CSVIMPORTWIZARD_H -- --#include "CsvImportWidget.h" -- --#include --#include -- --#include "core/Database.h" --#include "gui/DialogyWidget.h" -- --class CsvImportWidget; -- --class CsvImportWizard : public DialogyWidget --{ -- Q_OBJECT -- --public: -- explicit CsvImportWizard(QWidget* parent = nullptr); -- ~CsvImportWizard() override; -- void load(const QString& filename, Database* database); -- --signals: -- void importFinished(bool accepted); -- --private slots: -- void parseFinished(bool accepted); -- --private: -- QPointer m_db; -- CsvImportWidget* m_parse; -- QGridLayout* m_layout; --}; -- --#endif // KEEPASSX_CSVIMPORTWIZARD_H -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.cpp ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,146 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "CsvParserModel.h" -- --#include -- --CsvParserModel::CsvParserModel(QObject* parent) -- : QAbstractTableModel(parent) -- , m_skipped(0) --{ --} -- --CsvParserModel::~CsvParserModel() --{ --} -- --void CsvParserModel::setFilename(const QString& filename) --{ -- m_filename = filename; --} -- --QString CsvParserModel::getFileInfo() --{ -- QString a(tr("%1, %2, %3", "file info: bytes, rows, columns") -- .arg(tr("%n byte(s)", nullptr, getFileSize()), -- tr("%n row(s)", nullptr, getCsvRows()), -- tr("%n column(s)", nullptr, qMax(0, getCsvCols() - 1)))); -- return a; --} -- --bool CsvParserModel::parse() --{ -- bool r; -- beginResetModel(); -- m_columnMap.clear(); -- if (CsvParser::isFileLoaded()) { -- r = CsvParser::reparse(); -- } else { -- QFile csv(m_filename); -- r = CsvParser::parse(&csv); -- } -- for (int i = 0; i < columnCount(); ++i) { -- m_columnMap.insert(i, 0); -- } -- addEmptyColumn(); -- endResetModel(); -- return r; --} -- --void CsvParserModel::addEmptyColumn() --{ -- for (int i = 0; i < m_table.size(); ++i) { -- CsvRow r = m_table.at(i); -- r.prepend(QString("")); -- m_table.replace(i, r); -- } --} -- --void CsvParserModel::mapColumns(int csvColumn, int dbColumn) --{ -- if ((csvColumn < 0) || (dbColumn < 0)) { -- return; -- } -- beginResetModel(); -- if (csvColumn >= getCsvCols()) { -- m_columnMap[dbColumn] = 0; // map to the empty column -- } else { -- m_columnMap[dbColumn] = csvColumn; -- } -- endResetModel(); --} -- --void CsvParserModel::setSkippedRows(int skipped) --{ -- m_skipped = skipped; -- QModelIndex topLeft = createIndex(skipped, 0); -- QModelIndex bottomRight = createIndex(m_skipped + rowCount(), columnCount()); -- emit dataChanged(topLeft, bottomRight); -- emit layoutChanged(); --} -- --void CsvParserModel::setHeaderLabels(const QStringList& labels) --{ -- m_columnHeader = labels; --} -- --int CsvParserModel::rowCount(const QModelIndex& parent) const --{ -- if (parent.isValid()) { -- return 0; -- } -- return getCsvRows(); --} -- --int CsvParserModel::columnCount(const QModelIndex& parent) const --{ -- if (parent.isValid()) { -- return 0; -- } -- return m_columnHeader.size(); --} -- --QVariant CsvParserModel::data(const QModelIndex& index, int role) const --{ -- if ((index.column() >= m_columnHeader.size()) || (index.row() + m_skipped >= rowCount()) || !index.isValid()) { -- return QVariant(); -- } -- if (role == Qt::DisplayRole) { -- return m_table.at(index.row() + m_skipped).at(m_columnMap[index.column()]); -- } -- return QVariant(); --} -- --QVariant CsvParserModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if (role == Qt::DisplayRole) { -- if (orientation == Qt::Horizontal) { -- if ((section < 0) || (section >= m_columnHeader.size())) { -- return QVariant(); -- } -- return m_columnHeader.at(section); -- } else if (orientation == Qt::Vertical) { -- if (section + m_skipped >= rowCount()) { -- return QVariant(); -- } -- return QString::number(section + 1); -- } -- } -- return QVariant(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.h ---- keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2016 Enrico Mariotti -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_CSVPARSERMODEL_H --#define KEEPASSX_CSVPARSERMODEL_H -- --#include --#include -- --#include "core/CsvParser.h" --#include "core/Group.h" -- --class CsvParserModel : public QAbstractTableModel, public CsvParser --{ -- Q_OBJECT -- --public: -- explicit CsvParserModel(QObject* parent = nullptr); -- ~CsvParserModel(); -- void setFilename(const QString& filename); -- QString getFileInfo(); -- bool parse(); -- -- void setHeaderLabels(const QStringList& labels); -- void mapColumns(int csvColumn, int dbColumn); -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; -- --public slots: -- void setSkippedRows(int skipped); -- --private: -- int m_skipped; -- QString m_filename; -- QStringList m_columnHeader; -- // first column of model must be empty (aka combobox row "Not present in CSV file") -- void addEmptyColumn(); -- // mapping CSV columns to keepassx columns -- QMap m_columnMap; --}; -- --#endif // KEEPASSX_CSVPARSERMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,201 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeyComponentWidget.h" --#include "ui_KeyComponentWidget.h" -- --#include --#include -- --KeyComponentWidget::KeyComponentWidget(QWidget* parent) -- : KeyComponentWidget({}, parent) --{ --} -- --KeyComponentWidget::KeyComponentWidget(const QString& name, QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::KeyComponentWidget()) --{ -- m_ui->setupUi(this); -- -- connect(m_ui->addButton, SIGNAL(clicked(bool)), SIGNAL(componentAddRequested())); -- connect(m_ui->changeButton, SIGNAL(clicked(bool)), SIGNAL(componentEditRequested())); -- connect(m_ui->removeButton, SIGNAL(clicked(bool)), SIGNAL(componentRemovalRequested())); -- connect(m_ui->cancelButton, SIGNAL(clicked(bool)), SLOT(cancelEdit())); -- -- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(resetComponentEditWidget())); -- -- connect(this, SIGNAL(nameChanged(QString)), SLOT(updateComponentName(QString))); -- connect(this, SIGNAL(descriptionChanged(QString)), SLOT(updateComponentDescription(QString))); -- connect(this, SIGNAL(componentAddRequested()), SLOT(doAdd())); -- connect(this, SIGNAL(componentEditRequested()), SLOT(doEdit())); -- connect(this, SIGNAL(componentRemovalRequested()), SLOT(doRemove())); -- connect(this, SIGNAL(componentAddChanged(bool)), SLOT(updateAddStatus(bool))); -- -- bool prev = blockSignals(true); -- setComponentName(name); -- blockSignals(prev); -- -- prev = m_ui->stackedWidget->blockSignals(true); -- m_ui->stackedWidget->setCurrentIndex(Page::AddNew); -- m_ui->stackedWidget->blockSignals(prev); --} -- --KeyComponentWidget::~KeyComponentWidget() --{ --} -- --/** -- * @param name display name for the key component -- */ --void KeyComponentWidget::setComponentName(const QString& name) --{ -- if (name == m_componentName) { -- return; -- } -- -- m_componentName = name; -- emit nameChanged(name); --} -- --/** -- * @return The key component's display name -- */ --QString KeyComponentWidget::componentName() const --{ -- return m_componentName; --} -- --void KeyComponentWidget::setComponentDescription(const QString& description) --{ -- if (description == m_componentDescription) { -- return; -- } -- -- m_componentDescription = description; -- emit descriptionChanged(description); --} -- --QString KeyComponentWidget::componentDescription() const --{ -- return m_componentDescription; --} -- --void KeyComponentWidget::setComponentAdded(bool added) --{ -- if (m_isComponentAdded == added) { -- return; -- } -- -- m_isComponentAdded = added; -- emit componentAddChanged(added); --} -- --bool KeyComponentWidget::componentAdded() const --{ -- return m_isComponentAdded; --} -- --void KeyComponentWidget::changeVisiblePage(KeyComponentWidget::Page page) --{ -- m_previousPage = static_cast(m_ui->stackedWidget->currentIndex()); -- m_ui->stackedWidget->setCurrentIndex(page); --} -- --KeyComponentWidget::Page KeyComponentWidget::visiblePage() const --{ -- return static_cast(m_ui->stackedWidget->currentIndex()); --} -- --void KeyComponentWidget::updateComponentName(const QString& name) --{ -- m_ui->groupBox->setTitle(name); -- m_ui->addButton->setText(tr("Add %1", "Add a key component").arg(name)); -- m_ui->changeButton->setText(tr("Change %1", "Change a key component").arg(name)); -- m_ui->removeButton->setText(tr("Remove %1", "Remove a key component").arg(name)); -- m_ui->changeOrRemoveLabel->setText( -- tr("%1 set, click to change or remove", "Change or remove a key component").arg(name)); --} -- --void KeyComponentWidget::updateComponentDescription(const QString& description) --{ -- m_ui->componentDescription->setText(description); --} -- --void KeyComponentWidget::updateAddStatus(bool added) --{ -- if (added) { -- m_ui->stackedWidget->setCurrentIndex(Page::LeaveOrRemove); -- } else { -- m_ui->stackedWidget->setCurrentIndex(Page::AddNew); -- } --} -- --void KeyComponentWidget::doAdd() --{ -- changeVisiblePage(Page::Edit); --} -- --void KeyComponentWidget::doEdit() --{ -- changeVisiblePage(Page::Edit); --} -- --void KeyComponentWidget::doRemove() --{ -- changeVisiblePage(Page::AddNew); --} -- --void KeyComponentWidget::cancelEdit() --{ -- m_ui->stackedWidget->setCurrentIndex(m_previousPage); -- emit editCanceled(); --} -- --void KeyComponentWidget::showEvent(QShowEvent* event) --{ -- resetComponentEditWidget(); -- QWidget::showEvent(event); --} -- --void KeyComponentWidget::resetComponentEditWidget() --{ -- if (!m_componentWidget || static_cast(m_ui->stackedWidget->currentIndex()) == Page::Edit) { -- if (m_componentWidget) { -- delete m_componentWidget; -- } -- -- m_componentWidget = componentEditWidget(); -- m_ui->componentWidgetLayout->addWidget(m_componentWidget); -- initComponentEditWidget(m_componentWidget); -- } -- -- QTimer::singleShot(0, this, SLOT(updateSize())); --} -- --void KeyComponentWidget::updateSize() --{ -- for (int i = 0; i < m_ui->stackedWidget->count(); ++i) { -- if (m_ui->stackedWidget->currentIndex() == i) { -- m_ui->stackedWidget->widget(i)->setSizePolicy( -- m_ui->stackedWidget->widget(i)->sizePolicy().horizontalPolicy(), QSizePolicy::Preferred); -- } else { -- m_ui->stackedWidget->widget(i)->setSizePolicy( -- m_ui->stackedWidget->widget(i)->sizePolicy().horizontalPolicy(), QSizePolicy::Ignored); -- } -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.h ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,137 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_KEYCOMPONENTWIDGET_H --#define KEEPASSXC_KEYCOMPONENTWIDGET_H -- --#include --#include --#include -- --namespace Ui --{ -- class KeyComponentWidget; --} --class CompositeKey; --class QStackedWidget; -- --class KeyComponentWidget : public QWidget --{ -- Q_OBJECT -- // clang-format off -- Q_PROPERTY(QString componentName READ m_componentName READ componentName -- WRITE setComponentName NOTIFY nameChanged) -- Q_PROPERTY(QString componentDescription READ m_componentDescription READ componentDescription -- WRITE setComponentDescription NOTIFY descriptionChanged) -- Q_PROPERTY(bool componentAdded READ m_isComponentAdded READ componentAdded -- WRITE setComponentAdded NOTIFY componentAddChanged) -- // clang-format on -- --public: -- enum Page -- { -- AddNew = 0, -- Edit = 1, -- LeaveOrRemove = 2 -- }; -- -- explicit KeyComponentWidget(QWidget* parent = nullptr); -- explicit KeyComponentWidget(const QString& name, QWidget* parent = nullptr); -- Q_DISABLE_COPY(KeyComponentWidget); -- ~KeyComponentWidget() override; -- -- /** -- * Add the new key component to the given \link CompositeKey. -- * A caller should always check first with \link validate() if -- * the new key data is actually valid before adding it to a CompositeKey. -- * -- * @param key CompositeKey to add new key to -- * @return true if added successfully -- */ -- virtual bool addToCompositeKey(QSharedPointer key) = 0; -- -- /** -- * Validate key component data to check if key component -- * may be added to a CompositeKey. -- * -- * @param errorMessage error message in case data is not valid -- * @return true if data is valid -- */ -- virtual bool validate(QString& errorMessage) const = 0; -- -- void setComponentName(const QString& name); -- QString componentName() const; -- void setComponentDescription(const QString& name); -- QString componentDescription() const; -- void setComponentAdded(bool added); -- bool componentAdded() const; -- void changeVisiblePage(Page page); -- Page visiblePage() const; -- --protected: -- /** -- * Construct and return an instance of the key component edit widget -- * which is to be inserted into the component management UI. -- * Since previous widgets will be destroyed, every successive call to -- * this function must return a new widget. -- * -- * @return edit widget instance -- */ -- virtual QWidget* componentEditWidget() = 0; -- -- /** -- * Initialize the key component widget created by \link componentEditWidget(). -- * This method is called every time the component edit widget is shown. -- * -- * @param widget pointer to the widget -- */ -- virtual void initComponentEditWidget(QWidget* widget) = 0; -- --signals: -- void nameChanged(const QString& newName); -- void descriptionChanged(const QString& newDescription); -- void componentAddChanged(bool added); -- void componentAddRequested(); -- void componentEditRequested(); -- void editCanceled(); -- void componentRemovalRequested(); -- --protected: -- void showEvent(QShowEvent* event) override; -- --private slots: -- void updateComponentName(const QString& name); -- void updateComponentDescription(const QString& decription); -- void updateAddStatus(bool added); -- void doAdd(); -- void doEdit(); -- void doRemove(); -- void cancelEdit(); -- void resetComponentEditWidget(); -- void updateSize(); -- --private: -- bool m_isComponentAdded = false; -- Page m_previousPage = Page::AddNew; -- QString m_componentName; -- QString m_componentDescription; -- QPointer m_componentWidget; -- -- const QScopedPointer m_ui; --}; -- --#endif // KEEPASSXC_KEYCOMPONENTWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.ui ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,226 +0,0 @@ -- -- -- KeyComponentWidget -- -- -- -- 0 -- 0 -- 354 -- 106 -- -- -- -- -- QLayout::SetMinimumSize -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- QGroupBox { font-weight: bold; } -- -- -- Key Component -- -- -- -- 15 -- -- -- -- -- 1 -- -- -- -- -- 0 -- 0 -- -- -- -- -- 10 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Key Component Description -- -- -- Qt::RichText -- -- -- true -- -- -- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse -- -- -- -- -- -- -- Add Key Component -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- QLayout::SetMinimumSize -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- Cancel -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 10 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Key Component set, click to change or remove -- -- -- -- -- -- -- -- -- Change Key Component -- -- -- -- -- -- -- Remove Key Component -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,148 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeyFileEditWidget.h" --#include "ui_KeyFileEditWidget.h" --#include -- --#include "gui/FileDialog.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" --#include "keys/CompositeKey.h" --#include "keys/FileKey.h" -- --KeyFileEditWidget::KeyFileEditWidget(DatabaseSettingsWidget* parent) -- : KeyComponentWidget(parent) -- , m_compUi(new Ui::KeyFileEditWidget()) -- , m_parent(parent) --{ -- setComponentName(tr("Key File")); -- setComponentDescription(tr("

You can add a key file containing random bytes for additional security.

" -- "

You must keep it secret and never lose it or you will be locked out!

")); --} -- --KeyFileEditWidget::~KeyFileEditWidget() --{ --} -- --bool KeyFileEditWidget::addToCompositeKey(QSharedPointer key) --{ -- auto fileKey = QSharedPointer::create(); -- QString fileKeyName = m_compUi->keyFileCombo->currentText(); -- if (!fileKey->load(fileKeyName, nullptr)) { -- return false; -- } -- -- if (fileKey->type() != FileKey::KeePass2XMLv2 && fileKey->type() != FileKey::Hashed) { -- QMessageBox::warning(getMainWindow(), -- tr("Old key file format"), -- tr("You selected a key file in an old format which KeePassXC
" -- "may stop supporting in the future.

" -- "Please consider generating a new key file instead."), -- QMessageBox::Ok); -- } -- -- key->addKey(fileKey); -- return true; --} -- --bool KeyFileEditWidget::validate(QString& errorMessage) const --{ -- FileKey fileKey; -- QString fileKeyError; -- QString fileKeyName = m_compUi->keyFileCombo->currentText(); -- if (!fileKey.load(fileKeyName, &fileKeyError)) { -- errorMessage = tr("Error loading the key file '%1'\nMessage: %2").arg(fileKeyName, fileKeyError); -- return false; -- } -- return true; --} -- --QWidget* KeyFileEditWidget::componentEditWidget() --{ -- m_compEditWidget = new QWidget(); -- m_compUi->setupUi(m_compEditWidget); -- -- connect(m_compUi->createKeyFileButton, SIGNAL(clicked()), SLOT(createKeyFile())); -- connect(m_compUi->browseKeyFileButton, SIGNAL(clicked()), SLOT(browseKeyFile())); -- -- return m_compEditWidget; --} -- --void KeyFileEditWidget::initComponentEditWidget(QWidget* widget) --{ -- Q_UNUSED(widget); -- Q_ASSERT(m_compEditWidget); -- m_compUi->keyFileCombo->setFocus(); --} -- --void KeyFileEditWidget::createKeyFile() --{ -- Q_ASSERT(m_compEditWidget); -- if (!m_compEditWidget) { -- return; -- } -- QString filters = QString("%1 (*.keyx; *.key);;%2 (*)").arg(tr("Key files"), tr("All files")); -- QString fileName = fileDialog()->getSaveFileName(this, tr("Create Key File..."), QString(), filters); -- -- if (!fileName.isEmpty()) { -- QString errorMsg; -- bool created = FileKey::create(fileName, &errorMsg); -- if (!created) { -- MessageBox::critical(getMainWindow(), -- tr("Error creating key file"), -- tr("Unable to create key file: %1").arg(errorMsg), -- QMessageBox::Button::Ok); -- } else { -- m_compUi->keyFileCombo->setEditText(fileName); -- } -- } --} -- --void KeyFileEditWidget::browseKeyFile() --{ -- Q_ASSERT(m_compEditWidget); -- if (!m_compEditWidget) { -- return; -- } -- QString filters = QString("%1 (*.keyx; *.key);;%2 (*)").arg(tr("Key files"), tr("All files")); -- QString fileName = fileDialog()->getOpenFileName(this, tr("Select a key file"), QString(), filters); -- -- if (QFileInfo(fileName).canonicalFilePath() == m_parent->getDatabase()->canonicalFilePath()) { -- MessageBox::critical(getMainWindow(), -- tr("Invalid Key File"), -- tr("You cannot use the current database as its own keyfile. Please choose a different " -- "file or generate a new key file.")); -- return; -- } else if (fileName.endsWith(".kdbx", Qt::CaseInsensitive)) { -- auto response = -- MessageBox::warning(getMainWindow(), -- tr("Suspicious Key File"), -- tr("The chosen key file looks like a password database file. A key file must be a " -- "static file that never changes or you will lose access to your database " -- "forever.\nAre you sure you want to continue with this file?"), -- MessageBox::Continue | MessageBox::Cancel, -- MessageBox::Cancel); -- if (response != MessageBox::Continue) { -- return; -- } -- } -- -- if (!fileName.isEmpty()) { -- m_compUi->keyFileCombo->setEditText(fileName); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.h ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_KEYFILEEDITWIDGET_H --#define KEEPASSXC_KEYFILEEDITWIDGET_H -- --#include "KeyComponentWidget.h" --#include -- --namespace Ui --{ -- class KeyFileEditWidget; --} -- --class DatabaseSettingsWidget; -- --class KeyFileEditWidget : public KeyComponentWidget --{ -- Q_OBJECT -- --public: -- explicit KeyFileEditWidget(DatabaseSettingsWidget* parent); -- Q_DISABLE_COPY(KeyFileEditWidget); -- ~KeyFileEditWidget() override; -- -- bool addToCompositeKey(QSharedPointer key) override; -- bool validate(QString& errorMessage) const override; -- --protected: -- QWidget* componentEditWidget() override; -- void initComponentEditWidget(QWidget* widget) override; -- --private slots: -- void createKeyFile(); -- void browseKeyFile(); -- --private: -- const QScopedPointer m_compUi; -- QPointer m_compEditWidget; -- const QPointer m_parent; --}; -- --#endif // KEEPASSXC_KEYFILEEDITWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.ui ---- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,94 +0,0 @@ -- -- -- KeyFileEditWidget -- -- -- -- 0 -- 0 -- 370 -- 76 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Key file selection -- -- -- true -- -- -- -- -- -- -- Browse for key file -- -- -- Browse... -- -- -- -- -- -- -- Generate a new key file -- -- -- Generate -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 0 -- -- -- -- -- -- -- -- -- true -- -- -- -- Note: Do not use a file that may change as that will prevent you from unlocking your database! -- -- -- true -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,114 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "PasswordEditWidget.h" --#include "ui_PasswordEditWidget.h" -- --#include "core/Resources.h" --#include "gui/PasswordGeneratorWidget.h" --#include "keys/CompositeKey.h" --#include "keys/PasswordKey.h" -- --#include -- --PasswordEditWidget::PasswordEditWidget(QWidget* parent) -- : KeyComponentWidget(parent) -- , m_compUi(new Ui::PasswordEditWidget()) --{ -- setComponentName(tr("Password")); -- setComponentDescription(tr("

A password is the primary method for securing your database.

" -- "

Good passwords are long and unique. KeePassXC can generate one for you.

")); --} -- --PasswordEditWidget::~PasswordEditWidget() --{ --} -- --bool PasswordEditWidget::addToCompositeKey(QSharedPointer key) --{ -- QString pw = m_compUi->enterPasswordEdit->text(); -- if (!pw.isEmpty()) { -- key->addKey(QSharedPointer::create(pw)); -- return true; -- } -- return false; --} -- --/** -- * @param visible changed password visibility state -- */ --void PasswordEditWidget::setPasswordVisible(bool visible) --{ -- m_compUi->enterPasswordEdit->setShowPassword(visible); --} -- --/** -- * @return password visibility state -- */ --bool PasswordEditWidget::isPasswordVisible() const --{ -- return m_compUi->enterPasswordEdit->isPasswordVisible(); --} -- --bool PasswordEditWidget::isEmpty() const --{ -- return (visiblePage() == Page::Edit) && m_compUi->enterPasswordEdit->text().isEmpty(); --} -- --QWidget* PasswordEditWidget::componentEditWidget() --{ -- m_compEditWidget = new QWidget(); -- m_compUi->setupUi(m_compEditWidget); -- m_compUi->enterPasswordEdit->enablePasswordGenerator(); -- m_compUi->enterPasswordEdit->setRepeatPartner(m_compUi->repeatPasswordEdit); -- return m_compEditWidget; --} -- --void PasswordEditWidget::initComponentEditWidget(QWidget* widget) --{ -- Q_UNUSED(widget); -- Q_ASSERT(m_compEditWidget); -- m_compUi->enterPasswordEdit->setFocus(); --} -- --void PasswordEditWidget::hideEvent(QHideEvent* event) --{ -- if (!isVisible() && m_compUi->enterPasswordEdit) { -- m_compUi->enterPasswordEdit->setText(""); -- m_compUi->repeatPasswordEdit->setText(""); -- } -- -- QWidget::hideEvent(event); --} -- --bool PasswordEditWidget::validate(QString& errorMessage) const --{ -- if (m_compUi->enterPasswordEdit->text() != m_compUi->repeatPasswordEdit->text()) { -- errorMessage = tr("Passwords do not match."); -- return false; -- } -- -- return true; --} -- --void PasswordEditWidget::setPassword(const QString& password) --{ -- Q_ASSERT(m_compEditWidget); -- -- m_compUi->enterPasswordEdit->setText(password); -- m_compUi->repeatPasswordEdit->setText(password); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.h ---- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_PASSWORDEDITWIDGET_H --#define KEEPASSXC_PASSWORDEDITWIDGET_H -- --#include "KeyComponentWidget.h" --#include -- --namespace Ui --{ -- class PasswordEditWidget; --} -- --class PasswordEditWidget : public KeyComponentWidget --{ -- Q_OBJECT -- --public: -- explicit PasswordEditWidget(QWidget* parent = nullptr); -- Q_DISABLE_COPY(PasswordEditWidget); -- ~PasswordEditWidget() override; -- -- bool addToCompositeKey(QSharedPointer key) override; -- void setPasswordVisible(bool visible); -- bool isPasswordVisible() const; -- bool isEmpty() const; -- bool validate(QString& errorMessage) const override; -- --protected: -- QWidget* componentEditWidget() override; -- void initComponentEditWidget(QWidget* widget) override; -- void hideEvent(QHideEvent* event) override; -- --private slots: -- void setPassword(const QString& password); -- --private: -- const QScopedPointer m_compUi; -- QPointer m_compEditWidget; --}; -- --#endif // KEEPASSXC_PASSWORDEDITWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.ui ---- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,100 +0,0 @@ -- -- -- PasswordEditWidget -- -- -- -- 0 -- 0 -- 571 -- 78 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Enter password: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 300 -- 0 -- -- -- -- Password field -- -- -- QLineEdit::Password -- -- -- -- -- -- -- Confirm password: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 300 -- 0 -- -- -- -- Repeat password field -- -- -- QLineEdit::Password -- -- -- -- -- -- -- -- PasswordEdit -- QLineEdit --
gui/PasswordEdit.h
-- 1 --
--
-- -- enterPasswordEdit -- repeatPasswordEdit -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,141 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "YubiKeyEditWidget.h" --#include "ui_YubiKeyEditWidget.h" -- --#include "config-keepassx.h" --#include "core/AsyncTask.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" --#include "keys/CompositeKey.h" --#include "keys/YkChallengeResponseKey.h" -- --YubiKeyEditWidget::YubiKeyEditWidget(QWidget* parent) -- : KeyComponentWidget(parent) -- , m_compUi(new Ui::YubiKeyEditWidget()) --{ -- setComponentName(tr("YubiKey Challenge-Response")); -- setComponentDescription( -- tr("

If you own a YubiKey, you can use it " -- "for additional security.

The YubiKey requires one of its slots to be programmed as " -- "" -- "HMAC-SHA1 Challenge-Response.

")); -- -- connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); --} -- --YubiKeyEditWidget::~YubiKeyEditWidget() --{ --} -- --bool YubiKeyEditWidget::addToCompositeKey(QSharedPointer key) --{ -- if (!m_isDetected || !m_compEditWidget) { -- return false; -- } -- -- int selectionIndex = m_compUi->comboChallengeResponse->currentIndex(); -- auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value(); -- key->addChallengeResponseKey(QSharedPointer::create(slot)); -- return true; --} -- --bool YubiKeyEditWidget::validate(QString& errorMessage) const --{ -- if (!m_isDetected) { -- errorMessage = tr("Could not find any hardware keys!"); -- return false; -- } -- -- // Perform a test challenge response -- int selectionIndex = m_compUi->comboChallengeResponse->currentIndex(); -- auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value(); -- bool valid = AsyncTask::runAndWaitForFuture([&slot] { return YubiKey::instance()->testChallenge(slot); }); -- if (!valid) { -- errorMessage = tr("Selected hardware key slot does not support challenge-response!"); -- } -- return valid; --} -- --QWidget* YubiKeyEditWidget::componentEditWidget() --{ -- m_compEditWidget = new QWidget(); -- m_compUi->setupUi(m_compEditWidget); -- -- QSizePolicy sp = m_compUi->yubikeyProgress->sizePolicy(); -- sp.setRetainSizeWhenHidden(true); -- m_compUi->yubikeyProgress->setSizePolicy(sp); -- m_compUi->yubikeyProgress->setVisible(false); -- --#ifdef WITH_XC_YUBIKEY -- connect(m_compUi->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey())); -- pollYubikey(); --#endif -- -- return m_compEditWidget; --} -- --void YubiKeyEditWidget::initComponentEditWidget(QWidget* widget) --{ -- Q_UNUSED(widget); -- Q_ASSERT(m_compEditWidget); -- m_compUi->comboChallengeResponse->setFocus(); --} -- --void YubiKeyEditWidget::pollYubikey() --{ --#ifdef WITH_XC_YUBIKEY -- if (!m_compEditWidget) { -- return; -- } -- -- m_isDetected = false; -- m_compUi->comboChallengeResponse->clear(); -- m_compUi->comboChallengeResponse->addItem(tr("Detecting hardware keys…")); -- m_compUi->buttonRedetectYubikey->setEnabled(false); -- m_compUi->comboChallengeResponse->setEnabled(false); -- m_compUi->yubikeyProgress->setVisible(true); -- -- YubiKey::instance()->findValidKeys(); --#endif --} -- --void YubiKeyEditWidget::hardwareKeyResponse(bool found) --{ -- if (!m_compEditWidget) { -- return; -- } -- -- m_compUi->comboChallengeResponse->clear(); -- m_compUi->buttonRedetectYubikey->setEnabled(true); -- m_compUi->yubikeyProgress->setVisible(false); -- -- if (!found) { -- m_compUi->comboChallengeResponse->addItem(tr("No hardware keys detected")); -- m_isDetected = false; -- return; -- } -- -- for (auto& slot : YubiKey::instance()->foundKeys()) { -- // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB -- m_compUi->comboChallengeResponse->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); -- } -- -- m_isDetected = true; -- m_compUi->comboChallengeResponse->setEnabled(true); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.h ---- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_YUBIKEYEDITWIDGET_H --#define KEEPASSXC_YUBIKEYEDITWIDGET_H -- --#include "KeyComponentWidget.h" --#include -- --namespace Ui --{ -- class YubiKeyEditWidget; --} -- --class YkChallengeResponseKey; -- --class YubiKeyEditWidget : public KeyComponentWidget --{ -- Q_OBJECT -- --public: -- explicit YubiKeyEditWidget(QWidget* parent = nullptr); -- Q_DISABLE_COPY(YubiKeyEditWidget); -- ~YubiKeyEditWidget() override; -- -- bool addToCompositeKey(QSharedPointer key) override; -- bool validate(QString& errorMessage) const override; -- --protected: -- QWidget* componentEditWidget() override; -- void initComponentEditWidget(QWidget* widget) override; -- --private slots: -- void hardwareKeyResponse(bool found); -- void pollYubikey(); -- --private: -- const QScopedPointer m_compUi; -- QPointer m_compEditWidget; -- bool m_isDetected = false; --}; -- --#endif // KEEPASSXC_YUBIKEYEDITWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.ui ---- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ -- -- -- YubiKeyEditWidget -- -- -- -- 0 -- 0 -- 381 -- 64 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- 0 -- -- -- -- -- Refresh hardware tokens -- -- -- Refresh -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Hardware key slot selection -- -- -- -- -- -- -- -- 16777215 -- 2 -- -- -- -- 0 -- -- -- -1 -- -- -- false -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 0 -- -- -- -- -- -- -- -- comboChallengeResponse -- buttonRedetectYubikey -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.cpp keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,101 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseOpenDialog.h" --#include "DatabaseOpenWidget.h" --#include "DatabaseWidget.h" --#include "core/Database.h" -- --#ifdef Q_OS_WIN --#include --#endif -- --DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent) -- : QDialog(parent) -- , m_view(new DatabaseOpenWidget(this)) --{ -- setWindowTitle(tr("Unlock Database - KeePassXC")); -- setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint); --#ifdef Q_OS_WIN -- QWindowsWindowFunctions::setWindowActivationBehavior(QWindowsWindowFunctions::AlwaysActivateWindow); --#endif -- connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool))); -- auto* layout = new QVBoxLayout(); -- layout->setMargin(0); -- setLayout(layout); -- layout->addWidget(m_view); -- setMinimumWidth(700); --} -- --void DatabaseOpenDialog::setFilePath(const QString& filePath) --{ -- m_view->load(filePath); --} -- --/** -- * Set target DatabaseWidget to which signals are connected. -- * -- * @param dbWidget database widget -- */ --void DatabaseOpenDialog::setTargetDatabaseWidget(DatabaseWidget* dbWidget) --{ -- if (m_dbWidget) { -- disconnect(this, nullptr, m_dbWidget, nullptr); -- } -- m_dbWidget = dbWidget; -- connect(this, &DatabaseOpenDialog::dialogFinished, dbWidget, &DatabaseWidget::unlockDatabase); --} -- --void DatabaseOpenDialog::setIntent(DatabaseOpenDialog::Intent intent) --{ -- m_intent = intent; --} -- --DatabaseOpenDialog::Intent DatabaseOpenDialog::intent() const --{ -- return m_intent; --} -- --void DatabaseOpenDialog::clearForms() --{ -- m_view->clearForms(); -- m_db.reset(); -- m_intent = Intent::None; -- if (m_dbWidget) { -- disconnect(this, nullptr, m_dbWidget, nullptr); -- m_dbWidget = nullptr; -- } --} -- --QSharedPointer DatabaseOpenDialog::database() --{ -- return m_db; --} -- --void DatabaseOpenDialog::complete(bool accepted) --{ -- // save DB, since DatabaseOpenWidget will reset its data after accept() is called -- m_db = m_view->database(); -- -- if (accepted) { -- accept(); -- } else { -- reject(); -- } -- emit dialogFinished(accepted, m_dbWidget); -- clearForms(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.h keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.h ---- keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,65 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_UNLOCKDATABASEDIALOG_H --#define KEEPASSX_UNLOCKDATABASEDIALOG_H -- --#include "core/Global.h" -- --#include --#include --#include -- --class Database; --class DatabaseWidget; --class DatabaseOpenWidget; -- --class DatabaseOpenDialog : public QDialog --{ -- Q_OBJECT -- --public: -- enum class Intent -- { -- None, -- AutoType, -- Merge, -- Browser -- }; -- -- explicit DatabaseOpenDialog(QWidget* parent = nullptr); -- void setFilePath(const QString& filePath); -- void setTargetDatabaseWidget(DatabaseWidget* dbWidget); -- void setIntent(Intent intent); -- Intent intent() const; -- QSharedPointer database(); -- void clearForms(); -- --signals: -- void dialogFinished(bool accepted, DatabaseWidget* dbWidget); -- --public slots: -- void complete(bool accepted); -- --private: -- QPointer m_view; -- QSharedPointer m_db; -- QPointer m_dbWidget; -- Intent m_intent = Intent::None; --}; -- --#endif // KEEPASSX_UNLOCKDATABASEDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,453 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseOpenWidget.h" --#include "ui_DatabaseOpenWidget.h" -- --#include "core/Config.h" --#include "core/Database.h" --#include "core/Resources.h" --#include "crypto/Random.h" --#include "format/KeePass2Reader.h" --#include "gui/FileDialog.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" --#include "keys/YkChallengeResponseKey.h" --#include "touchid/TouchID.h" -- --#include "config-keepassx.h" -- --#include --#include --#include -- --namespace --{ -- constexpr int clearFormsDelay = 30000; --} -- --DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) -- : DialogyWidget(parent) -- , m_ui(new Ui::DatabaseOpenWidget()) -- , m_db(nullptr) --{ -- m_ui->setupUi(this); -- -- m_ui->messageWidget->setHidden(true); -- -- m_hideTimer.setInterval(clearFormsDelay); -- m_hideTimer.setSingleShot(true); -- connect(&m_hideTimer, &QTimer::timeout, this, [this] { -- // Reset the password field after being hidden for a set time -- m_ui->editPassword->setText(""); -- m_ui->editPassword->setShowPassword(false); -- }); -- -- QFont font; -- font.setPointSize(font.pointSize() + 4); -- font.setBold(true); -- m_ui->labelHeadline->setFont(font); -- m_ui->labelHeadline->setText(tr("Unlock KeePassXC Database")); -- -- connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile())); -- -- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase())); -- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); -- -- m_ui->hardwareKeyLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12))); -- connect(m_ui->hardwareKeyLabelHelp, SIGNAL(clicked(bool)), SLOT(openHardwareKeyHelp())); -- m_ui->keyFileLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12))); -- connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp())); -- --#ifdef WITH_XC_YUBIKEY -- m_ui->hardwareKeyProgress->setVisible(false); -- QSizePolicy sp = m_ui->hardwareKeyProgress->sizePolicy(); -- sp.setRetainSizeWhenHidden(true); -- m_ui->hardwareKeyProgress->setSizePolicy(sp); -- -- connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollHardwareKey())); -- connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); -- -- connect(YubiKey::instance(), &YubiKey::userInteractionRequest, this, [this] { -- // Show the press notification if we are in an independent window (e.g., DatabaseOpenDialog) -- if (window() != getMainWindow()) { -- m_ui->messageWidget->showMessage(tr("Please touch the button on your YubiKey!"), -- MessageWidget::Information, -- MessageWidget::DisableAutoHide); -- } -- }); -- connect(YubiKey::instance(), &YubiKey::challengeCompleted, this, [this] { m_ui->messageWidget->hide(); }); --#else -- m_ui->hardwareKeyLabel->setVisible(false); -- m_ui->hardwareKeyLabelHelp->setVisible(false); -- m_ui->buttonRedetectYubikey->setVisible(false); -- m_ui->challengeResponseCombo->setVisible(false); -- m_ui->hardwareKeyProgress->setVisible(false); --#endif -- --#ifndef WITH_XC_TOUCHID -- m_ui->touchIDContainer->setVisible(false); --#else -- if (!TouchID::getInstance().isAvailable()) { -- m_ui->checkTouchID->setVisible(false); -- } --#endif --} -- --DatabaseOpenWidget::~DatabaseOpenWidget() --{ --} -- --void DatabaseOpenWidget::showEvent(QShowEvent* event) --{ -- DialogyWidget::showEvent(event); -- m_ui->editPassword->setFocus(); -- m_hideTimer.stop(); --} -- --void DatabaseOpenWidget::hideEvent(QHideEvent* event) --{ -- DialogyWidget::hideEvent(event); -- -- // Schedule form clearing if we are hidden -- if (!isVisible()) { -- m_hideTimer.start(); -- } --} -- --void DatabaseOpenWidget::load(const QString& filename) --{ -- clearForms(); -- -- m_filename = filename; -- m_ui->fileNameLabel->setRawText(m_filename); -- -- if (config()->get(Config::RememberLastKeyFiles).toBool()) { -- auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash(); -- if (lastKeyFiles.contains(m_filename)) { -- m_ui->keyFileLineEdit->setText(lastKeyFiles[m_filename].toString()); -- } -- } -- -- QHash useTouchID = config()->get(Config::UseTouchID).toHash(); -- m_ui->checkTouchID->setChecked(useTouchID.value(m_filename, false).toBool()); -- --#ifdef WITH_XC_YUBIKEY -- // Only auto-poll for hardware keys if we previously used one with this database file -- if (config()->get(Config::RememberLastKeyFiles).toBool()) { -- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); -- if (lastChallengeResponse.contains(m_filename)) { -- pollHardwareKey(); -- } -- } --#endif --} -- --void DatabaseOpenWidget::clearForms() --{ -- m_ui->editPassword->setText(""); -- m_ui->editPassword->setShowPassword(false); -- m_ui->keyFileLineEdit->clear(); -- m_ui->keyFileLineEdit->setShowPassword(false); -- m_ui->checkTouchID->setChecked(false); -- m_ui->challengeResponseCombo->clear(); -- m_db.reset(); --} -- --QSharedPointer DatabaseOpenWidget::database() --{ -- return m_db; --} -- --QString DatabaseOpenWidget::filename() --{ -- return m_filename; --} -- --void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) --{ -- m_ui->editPassword->setText(pw); -- m_ui->keyFileLineEdit->setText(keyFile); -- openDatabase(); --} -- --void DatabaseOpenWidget::openDatabase() --{ -- m_ui->messageWidget->hide(); -- -- QSharedPointer databaseKey = buildDatabaseKey(); -- if (!databaseKey) { -- return; -- } -- -- m_ui->editPassword->setShowPassword(false); -- QCoreApplication::processEvents(); -- -- m_db.reset(new Database()); -- QString error; -- -- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); -- m_ui->passwordFormFrame->setEnabled(false); -- QCoreApplication::processEvents(); -- bool ok = m_db->open(m_filename, databaseKey, &error, false); -- QApplication::restoreOverrideCursor(); -- m_ui->passwordFormFrame->setEnabled(true); -- -- if (ok) { --#ifdef WITH_XC_TOUCHID -- QHash useTouchID = config()->get(Config::UseTouchID).toHash(); -- -- // check if TouchID can & should be used to unlock the database next time -- if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()) { -- // encrypt and store key blob -- if (TouchID::getInstance().storeKey(m_filename, PasswordKey(m_ui->editPassword->text()).rawKey())) { -- useTouchID.insert(m_filename, true); -- } -- } else { -- // when TouchID not available or unchecked, reset for the current database -- TouchID::getInstance().reset(m_filename); -- useTouchID.insert(m_filename, false); -- } -- -- config()->set(Config::UseTouchID, useTouchID); --#endif -- emit dialogFinished(true); -- clearForms(); -- } else { -- if (m_ui->editPassword->text().isEmpty() && !m_retryUnlockWithEmptyPassword) { -- QScopedPointer msgBox(new QMessageBox(this)); -- msgBox->setIcon(QMessageBox::Critical); -- msgBox->setWindowTitle(tr("Unlock failed and no password given")); -- msgBox->setText(tr("Unlocking the database failed and you did not enter a password.\n" -- "Do you want to retry with an \"empty\" password instead?\n\n" -- "To prevent this error from appearing, you must go to " -- "\"Database Settings / Security\" and reset your password.")); -- auto btn = msgBox->addButton(tr("Retry with empty password"), QMessageBox::ButtonRole::AcceptRole); -- msgBox->setDefaultButton(btn); -- msgBox->addButton(QMessageBox::Cancel); -- msgBox->exec(); -- -- if (msgBox->clickedButton() == btn) { -- m_retryUnlockWithEmptyPassword = true; -- openDatabase(); -- return; -- } -- } -- -- m_retryUnlockWithEmptyPassword = false; -- m_ui->messageWidget->showMessage(error, MessageWidget::MessageType::Error); -- // Focus on the password field and select the input for easy retry -- m_ui->editPassword->selectAll(); -- m_ui->editPassword->setFocus(); -- --#ifdef WITH_XC_TOUCHID -- // unable to unlock database, reset TouchID for the current database -- TouchID::getInstance().reset(m_filename); --#endif -- } --} -- --QSharedPointer DatabaseOpenWidget::buildDatabaseKey() --{ -- auto databaseKey = QSharedPointer::create(); -- -- if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) { -- databaseKey->addKey(QSharedPointer::create(m_ui->editPassword->text())); -- } -- --#ifdef WITH_XC_TOUCHID -- // check if TouchID is available and enabled for unlocking the database -- if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable() -- && m_ui->editPassword->text().isEmpty()) { -- // clear empty password from composite key -- databaseKey->clear(); -- -- // try to get, decrypt and use PasswordKey -- QSharedPointer passwordKey = TouchID::getInstance().getKey(m_filename); -- if (passwordKey != NULL) { -- // check if the user cancelled the operation -- if (passwordKey.isNull()) -- return QSharedPointer(); -- -- databaseKey->addKey(PasswordKey::fromRawKey(*passwordKey)); -- } -- } --#endif -- -- auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash(); -- lastKeyFiles.remove(m_filename); -- -- auto key = QSharedPointer::create(); -- QString keyFilename = m_ui->keyFileLineEdit->text(); -- if (!keyFilename.isEmpty()) { -- QString errorMsg; -- if (!key->load(keyFilename, &errorMsg)) { -- m_ui->messageWidget->showMessage(tr("Failed to open key file: %1").arg(errorMsg), MessageWidget::Error); -- return {}; -- } -- if (key->type() != FileKey::KeePass2XMLv2 && key->type() != FileKey::Hashed -- && !config()->get(Config::Messages_NoLegacyKeyFileWarning).toBool()) { -- QMessageBox legacyWarning; -- legacyWarning.setWindowTitle(tr("Old key file format")); -- legacyWarning.setText(tr("You are using an old key file format which KeePassXC may
" -- "stop supporting in the future.

" -- "Please consider generating a new key file by going to:
" -- "Database / Database Security / Change Key File.
")); -- legacyWarning.setIcon(QMessageBox::Icon::Warning); -- legacyWarning.addButton(QMessageBox::Ok); -- legacyWarning.setDefaultButton(QMessageBox::Ok); -- legacyWarning.setCheckBox(new QCheckBox(tr("Don't show this warning again"))); -- -- connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, this, [](int state) { -- config()->set(Config::Messages_NoLegacyKeyFileWarning, state == Qt::CheckState::Checked); -- }); -- -- legacyWarning.exec(); -- } -- databaseKey->addKey(key); -- lastKeyFiles.insert(m_filename, keyFilename); -- } -- -- if (config()->get(Config::RememberLastKeyFiles).toBool()) { -- config()->set(Config::LastKeyFiles, lastKeyFiles); -- } -- --#ifdef WITH_XC_YUBIKEY -- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); -- lastChallengeResponse.remove(m_filename); -- -- int selectionIndex = m_ui->challengeResponseCombo->currentIndex(); -- if (selectionIndex > 0) { -- auto slot = m_ui->challengeResponseCombo->itemData(selectionIndex).value(); -- auto crKey = QSharedPointer(new YkChallengeResponseKey(slot)); -- databaseKey->addChallengeResponseKey(crKey); -- -- // Qt doesn't read custom types in settings so stuff into a QString -- lastChallengeResponse.insert(m_filename, QStringLiteral("%1:%2").arg(slot.first).arg(slot.second)); -- } -- -- if (config()->get(Config::RememberLastKeyFiles).toBool()) { -- config()->set(Config::LastChallengeResponse, lastChallengeResponse); -- } --#endif -- -- return databaseKey; --} -- --void DatabaseOpenWidget::reject() --{ -- emit dialogFinished(false); --} -- --void DatabaseOpenWidget::browseKeyFile() --{ -- QString filters = QString("%1 (*);;%2 (*.keyx; *.key)").arg(tr("All files"), tr("Key files")); -- if (!config()->get(Config::RememberLastKeyFiles).toBool()) { -- fileDialog()->setNextForgetDialog(); -- } -- QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters); -- -- if (QFileInfo(filename).canonicalFilePath() == QFileInfo(m_filename).canonicalFilePath()) { -- MessageBox::warning(this, -- tr("Cannot use database file as key file"), -- tr("You cannot use your database file as a key file.\nIf you do not have a key file, " -- "please leave the field empty."), -- MessageBox::Button::Ok); -- filename = ""; -- } -- -- if (!filename.isEmpty()) { -- m_ui->keyFileLineEdit->setText(filename); -- } --} -- --void DatabaseOpenWidget::clearKeyFileText() --{ -- m_ui->keyFileLineEdit->clear(); -- m_ui->keyFileLineEdit->setShowPassword(false); --} -- --void DatabaseOpenWidget::pollHardwareKey() --{ -- if (m_pollingHardwareKey) { -- return; -- } -- -- m_ui->challengeResponseCombo->clear(); -- m_ui->challengeResponseCombo->addItem(tr("Detecting hardware keys…")); -- -- m_ui->buttonRedetectYubikey->setEnabled(false); -- m_ui->challengeResponseCombo->setEnabled(false); -- m_ui->hardwareKeyProgress->setVisible(true); -- m_pollingHardwareKey = true; -- -- YubiKey::instance()->findValidKeys(); --} -- --void DatabaseOpenWidget::hardwareKeyResponse(bool found) --{ -- m_ui->challengeResponseCombo->clear(); -- m_ui->buttonRedetectYubikey->setEnabled(true); -- m_ui->hardwareKeyProgress->setVisible(false); -- m_pollingHardwareKey = false; -- -- if (!found) { -- m_ui->challengeResponseCombo->addItem(tr("No hardware keys detected")); -- m_ui->challengeResponseCombo->setEnabled(false); -- return; -- } else { -- m_ui->challengeResponseCombo->addItem(tr("Select hardware key…")); -- } -- -- YubiKeySlot lastUsedSlot; -- if (config()->get(Config::RememberLastKeyFiles).toBool()) { -- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); -- if (lastChallengeResponse.contains(m_filename)) { -- // Qt doesn't read custom types in settings so extract from QString -- auto split = lastChallengeResponse.value(m_filename).toString().split(":"); -- if (split.size() > 1) { -- lastUsedSlot = YubiKeySlot(split[0].toUInt(), split[1].toInt()); -- } -- } -- } -- -- int selectedIndex = 0; -- for (auto& slot : YubiKey::instance()->foundKeys()) { -- // add detected YubiKey to combo box -- m_ui->challengeResponseCombo->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); -- // Select this YubiKey + Slot if we used it in the past -- if (lastUsedSlot == slot) { -- selectedIndex = m_ui->challengeResponseCombo->count() - 1; -- } -- } -- -- m_ui->challengeResponseCombo->setCurrentIndex(selectedIndex); -- m_ui->challengeResponseCombo->setEnabled(true); --} -- --void DatabaseOpenWidget::openHardwareKeyHelp() --{ -- QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-yubikey")); --} -- --void DatabaseOpenWidget::openKeyFileHelp() --{ -- QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-keyfile")); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.h ---- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,81 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASEOPENWIDGET_H --#define KEEPASSX_DATABASEOPENWIDGET_H -- --#include --#include -- --#include "gui/DialogyWidget.h" --#include "keys/CompositeKey.h" -- --class Database; --class QFile; -- --namespace Ui --{ -- class DatabaseOpenWidget; --} -- --class DatabaseOpenWidget : public DialogyWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseOpenWidget(QWidget* parent = nullptr); -- ~DatabaseOpenWidget(); -- void load(const QString& filename); -- QString filename(); -- void clearForms(); -- void enterKey(const QString& pw, const QString& keyFile); -- QSharedPointer database(); -- --signals: -- void dialogFinished(bool accepted); -- --protected: -- void showEvent(QShowEvent* event) override; -- void hideEvent(QHideEvent* event) override; -- QSharedPointer buildDatabaseKey(); -- -- const QScopedPointer m_ui; -- QSharedPointer m_db; -- QString m_filename; -- bool m_retryUnlockWithEmptyPassword = false; -- --protected slots: -- virtual void openDatabase(); -- void reject(); -- --private slots: -- void browseKeyFile(); -- void clearKeyFileText(); -- void pollHardwareKey(); -- void hardwareKeyResponse(bool found); -- void openHardwareKeyHelp(); -- void openKeyFileHelp(); -- --private: -- bool m_pollingHardwareKey = false; -- QTimer m_hideTimer; -- -- Q_DISABLE_COPY(DatabaseOpenWidget) --}; -- --#endif // KEEPASSX_DATABASEOPENWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.ui keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.ui ---- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,614 +0,0 @@ -- -- -- DatabaseOpenWidget -- -- -- -- 0 -- 0 -- 588 -- 448 -- -- -- -- Unlock KeePassXC Database -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 20 -- 5 -- -- -- -- -- -- -- -- 0 -- -- -- QLayout::SetDefaultConstraint -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- 700 -- 16777215 -- -- -- -- -- QLayout::SetMinimumSize -- -- -- -- -- -- 12 -- 75 -- true -- -- -- -- Unlock KeePassXC Database -- -- -- -- -- -- -- filename.kdbx -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 439 -- 13 -- -- -- -- -- -- -- -- -- 550 -- 0 -- -- -- -- QFrame::StyledPanel -- -- -- QFrame::Plain -- -- -- 2 -- -- -- -- QLayout::SetMinimumSize -- -- -- 20 -- -- -- 15 -- -- -- 20 -- -- -- 15 -- -- -- -- -- -- 400 -- 0 -- -- -- -- -- 700 -- 16777215 -- -- -- -- -- -- -- Enter Password: -- -- -- editPassword -- -- -- -- -- -- -- Password field -- -- -- QLineEdit::Password -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 5 -- -- -- -- -- -- -- -- Enter Additional Credentials (if any): -- -- -- -- -- -- -- QLayout::SetMinimumSize -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 15 -- 20 -- -- -- -- -- -- -- -- QLayout::SetMinimumSize -- -- -- 3 -- -- -- -- -- 5 -- -- -- -- -- Key File: -- -- -- keyFileLineEdit -- -- -- -- -- -- -- PointingHandCursor -- -- -- Qt::ClickFocus -- -- -- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> -- -- -- Key file help -- -- -- QToolButton { -- border: none; -- background: none; --} -- -- -- ? -- -- -- -- 12 -- 12 -- -- -- -- QToolButton::InstantPopup -- -- -- -- -- -- -- -- -- 0 -- -- -- -- -- -- 16777215 -- 2 -- -- -- -- 0 -- -- -- 0 -- -- -- -1 -- -- -- false -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Hardware key slot selection -- -- -- false -- -- -- -- -- -- -- -- -- 2 -- -- -- -- -- 5 -- -- -- -- -- Hardware Key: -- -- -- challengeResponseCombo -- -- -- -- -- -- -- PointingHandCursor -- -- -- Qt::ClickFocus -- -- -- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> --<p>Click for more information...</p> -- -- -- Hardware key help -- -- -- QToolButton { -- border: none; -- background: none; --} -- -- -- ? -- -- -- -- 12 -- 12 -- -- -- -- QToolButton::InstantPopup -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 0 -- 2 -- -- -- -- -- -- -- -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Key file to unlock the database -- -- -- QLineEdit::Password -- -- -- true -- -- -- -- -- -- -- -- -- Browse for key file -- -- -- Browse for key file -- -- -- Browse... -- -- -- -- -- -- -- 0 -- -- -- -- -- true -- -- -- Refresh hardware tokens -- -- -- Refresh hardware tokens -- -- -- Refresh -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 0 -- 2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 0 -- -- -- -- -- -- -- -- TouchID for Quick Unlock -- -- -- -- -- -- -- -- -- -- 15 -- -- -- -- -- QDialogButtonBox::Cancel|QDialogButtonBox::Ok -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 20 -- 55 -- -- -- -- -- -- -- -- -- PasswordEdit -- QLineEdit --
gui/PasswordEdit.h
-- 1 --
-- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
-- -- ElidedLabel -- QLabel --
gui/widgets/ElidedLabel.h
--
--
-- -- editPassword -- keyFileLineEdit -- buttonBrowseFile -- challengeResponseCombo -- buttonRedetectYubikey -- checkTouchID -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,766 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseTabWidget.h" -- --#include --#include --#include -- --#include "autotype/AutoType.h" --#include "core/AsyncTask.h" --#include "core/Config.h" --#include "core/Database.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "format/CsvExporter.h" --#include "format/HtmlExporter.h" --#include "gui/Clipboard.h" --#include "gui/DatabaseOpenDialog.h" --#include "gui/DatabaseWidget.h" --#include "gui/DatabaseWidgetStateSync.h" --#include "gui/DragTabBar.h" --#include "gui/FileDialog.h" --#include "gui/MessageBox.h" --#include "gui/entry/EntryView.h" --#include "gui/group/GroupView.h" --#ifdef Q_OS_MACOS --#include "gui/osutils/macutils/MacUtils.h" --#endif --#include "gui/wizard/NewDatabaseWizard.h" -- --DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) -- : QTabWidget(parent) -- , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this)) -- , m_dbWidgetPendingLock(nullptr) -- , m_databaseOpenDialog(new DatabaseOpenDialog(this)) --{ -- auto* tabBar = new DragTabBar(this); -- setTabBar(tabBar); -- setDocumentMode(true); -- -- // clang-format off -- connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabaseTab(int))); -- connect(this, SIGNAL(currentChanged(int)), SLOT(emitActivateDatabaseChanged())); -- connect(this, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), -- m_dbWidgetStateSync, SLOT(setActive(DatabaseWidget*))); -- connect(autoType(), SIGNAL(globalAutoTypeTriggered()), SLOT(performGlobalAutoType())); -- connect(autoType(), SIGNAL(autotypePerformed()), SLOT(relockPendingDatabase())); -- connect(autoType(), SIGNAL(autotypeRejected()), SLOT(relockPendingDatabase())); -- connect(m_databaseOpenDialog.data(), &DatabaseOpenDialog::dialogFinished, -- this, &DatabaseTabWidget::databaseUnlockDialogFinished); -- // clang-format on -- --#ifdef Q_OS_MACOS -- connect(macUtils(), SIGNAL(lockDatabases()), SLOT(lockDatabases())); --#endif --} -- --DatabaseTabWidget::~DatabaseTabWidget() --{ --} -- --void DatabaseTabWidget::toggleTabbar() --{ -- if (count() > 1) { -- tabBar()->show(); -- emit tabVisibilityChanged(true); -- } else { -- tabBar()->hide(); -- emit tabVisibilityChanged(false); -- } --} -- --/** -- * Helper method for invoking the new database wizard. -- * The user of this method MUST take ownership of the returned pointer. -- * -- * @return pointer to the configured new database, nullptr on failure -- */ --QSharedPointer DatabaseTabWidget::execNewDatabaseWizard() --{ -- // use QScopedPointer to ensure deletion after scope ends, but still parent -- // it to this to make it modal and allow easier access in unit tests -- QScopedPointer wizard(new NewDatabaseWizard(this)); -- if (!wizard->exec()) { -- return {}; -- } -- -- auto db = wizard->takeDatabase(); -- if (!db) { -- return {}; -- } -- Q_ASSERT(db->key()); -- Q_ASSERT(db->kdf()); -- if (!db->key() || !db->kdf()) { -- MessageBox::critical(this, -- tr("Database creation error"), -- tr("The created database has no key or KDF, refusing to save it.\n" -- "This is definitely a bug, please report it to the developers."), -- MessageBox::Ok, -- MessageBox::Ok); -- return {}; -- } -- -- return db; --} -- --DatabaseWidget* DatabaseTabWidget::newDatabase() --{ -- auto db = execNewDatabaseWizard(); -- if (!db) { -- return nullptr; -- } -- -- auto dbWidget = new DatabaseWidget(db, this); -- addDatabaseTab(dbWidget); -- db->markAsModified(); -- return dbWidget; --} -- --void DatabaseTabWidget::openDatabase() --{ -- QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); -- QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), "", filter); -- if (!fileName.isEmpty()) { -- addDatabaseTab(fileName); -- } --} -- --/** -- * Add a new database tab or switch to an existing one if the -- * database has been opened already. -- * -- * @param filePath database file path -- * @param inBackground optional, don't focus tab after opening -- * @param password optional, password to unlock database -- * @param keyfile optional, path to keyfile to unlock database -- * -- */ --void DatabaseTabWidget::addDatabaseTab(const QString& filePath, -- bool inBackground, -- const QString& password, -- const QString& keyfile) --{ -- QFileInfo fileInfo(filePath); -- QString canonicalFilePath = fileInfo.canonicalFilePath(); -- -- if (canonicalFilePath.isEmpty()) { -- emit messageGlobal(tr("Failed to open %1. It either does not exist or is not accessible.").arg(filePath), -- MessageWidget::Error); -- return; -- } -- -- for (int i = 0, c = count(); i < c; ++i) { -- auto* dbWidget = databaseWidgetFromIndex(i); -- Q_ASSERT(dbWidget); -- if (dbWidget -- && dbWidget->database()->canonicalFilePath().compare(canonicalFilePath, FILE_CASE_SENSITIVE) == 0) { -- dbWidget->performUnlockDatabase(password, keyfile); -- if (!inBackground) { -- // switch to existing tab if file is already open -- setCurrentIndex(indexOf(dbWidget)); -- } -- return; -- } -- } -- -- auto* dbWidget = new DatabaseWidget(QSharedPointer::create(filePath), this); -- addDatabaseTab(dbWidget, inBackground); -- dbWidget->performUnlockDatabase(password, keyfile); -- updateLastDatabases(filePath); --} -- --/** -- * Add a new database tab containing the given DatabaseWidget -- * @param filePath -- * @param inBackground optional, don't focus tab after opening -- */ --void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground) --{ -- Q_ASSERT(dbWidget->database()); -- -- // emit before index change -- emit databaseOpened(dbWidget); -- -- int index = addTab(dbWidget, ""); -- updateTabName(index); -- toggleTabbar(); -- if (!inBackground) { -- setCurrentIndex(index); -- } -- -- connect(dbWidget, -- SIGNAL(requestOpenDatabase(QString, bool, QString, QString)), -- SLOT(addDatabaseTab(QString, bool, QString, QString))); -- connect(dbWidget, SIGNAL(databaseFilePathChanged(QString, QString)), SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseTabFromSender())); -- connect(dbWidget, -- SIGNAL(databaseReplaced(const QSharedPointer&, const QSharedPointer&)), -- SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(databaseModified()), SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(databaseSaved()), SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(emitDatabaseLockChanged())); -- connect(dbWidget, SIGNAL(databaseLocked()), SLOT(updateTabName())); -- connect(dbWidget, SIGNAL(databaseLocked()), SLOT(emitDatabaseLockChanged())); --} -- --void DatabaseTabWidget::importCsv() --{ -- QString filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); -- QString fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), "", filter); -- -- if (fileName.isEmpty()) { -- return; -- } -- -- auto db = execNewDatabaseWizard(); -- if (!db) { -- return; -- } -- -- auto* dbWidget = new DatabaseWidget(db, this); -- addDatabaseTab(dbWidget); -- dbWidget->switchToCsvImport(fileName); --} -- --void DatabaseTabWidget::mergeDatabase() --{ -- auto dbWidget = currentDatabaseWidget(); -- if (dbWidget && !dbWidget->isLocked()) { -- QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); -- const QString fileName = fileDialog()->getOpenFileName(this, tr("Merge database"), QString(), filter); -- if (!fileName.isEmpty()) { -- mergeDatabase(fileName); -- } -- } --} -- --void DatabaseTabWidget::mergeDatabase(const QString& filePath) --{ -- unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::Merge, filePath); --} -- --void DatabaseTabWidget::importKeePass1Database() --{ -- QString filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); -- QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), filter); -- -- if (fileName.isEmpty()) { -- return; -- } -- -- auto db = QSharedPointer::create(); -- auto* dbWidget = new DatabaseWidget(db, this); -- addDatabaseTab(dbWidget); -- dbWidget->switchToImportKeepass1(fileName); --} -- --void DatabaseTabWidget::importOpVaultDatabase() --{ --#ifdef Q_OS_MACOS -- QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), {}, "OPVault (*.opvault)"); --#else -- QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault")); --#endif -- -- if (fileName.isEmpty()) { -- return; -- } -- -- auto db = QSharedPointer::create(); -- auto* dbWidget = new DatabaseWidget(db, this); -- addDatabaseTab(dbWidget); -- dbWidget->switchToImportOpVault(fileName); --} -- --/** -- * Attempt to close the current database and remove its tab afterwards. -- * -- * @param index index of the database tab to close -- * @return true if database was closed successully -- */ --bool DatabaseTabWidget::closeCurrentDatabaseTab() --{ -- return closeDatabaseTab(currentIndex()); --} -- --/** -- * Attempt to close the database tab that sent the close request. -- * -- * @param index index of the database tab to close -- * @return true if database was closed successully -- */ --bool DatabaseTabWidget::closeDatabaseTabFromSender() --{ -- return closeDatabaseTab(qobject_cast(sender())); --} -- --/** -- * Attempt to close a database and remove its tab afterwards. -- * -- * @param index index of the database tab to close -- * @return true if database was closed successully -- */ --bool DatabaseTabWidget::closeDatabaseTab(int index) --{ -- return closeDatabaseTab(qobject_cast(widget(index))); --} -- --/** -- * Attempt to close a database and remove its tab afterwards. -- * -- * @param dbWidget \link DatabaseWidget to close -- * @return true if database was closed successully -- */ --bool DatabaseTabWidget::closeDatabaseTab(DatabaseWidget* dbWidget) --{ -- int tabIndex = indexOf(dbWidget); -- if (!dbWidget || tabIndex < 0) { -- return false; -- } -- -- QString filePath = dbWidget->database()->filePath(); -- if (!dbWidget->close()) { -- return false; -- } -- -- removeTab(tabIndex); -- dbWidget->deleteLater(); -- toggleTabbar(); -- emit databaseClosed(filePath); -- return true; --} -- --/** -- * Attempt to close all opened databases. -- * The attempt will be aborted with the first database that cannot be closed. -- * -- * @return true if all databases could be closed. -- */ --bool DatabaseTabWidget::closeAllDatabaseTabs() --{ -- // Attempt to lock all databases first to prevent closing only a portion of tabs -- if (lockDatabases()) { -- while (count() > 0) { -- if (!closeDatabaseTab(0)) { -- return false; -- } -- } -- return true; -- } -- -- return false; --} -- --bool DatabaseTabWidget::saveDatabase(int index) --{ -- if (index == -1) { -- index = currentIndex(); -- } -- -- return databaseWidgetFromIndex(index)->save(); --} -- --bool DatabaseTabWidget::saveDatabaseAs(int index) --{ -- if (index == -1) { -- index = currentIndex(); -- } -- -- auto* dbWidget = databaseWidgetFromIndex(index); -- bool ok = dbWidget->saveAs(); -- if (ok) { -- updateLastDatabases(dbWidget->database()->filePath()); -- } -- return ok; --} -- --bool DatabaseTabWidget::saveDatabaseBackup(int index) --{ -- if (index == -1) { -- index = currentIndex(); -- } -- -- auto* dbWidget = databaseWidgetFromIndex(index); -- bool ok = dbWidget->saveBackup(); -- if (ok) { -- updateLastDatabases(dbWidget->database()->filePath()); -- } -- return ok; --} -- --void DatabaseTabWidget::closeDatabaseFromSender() --{ -- auto* dbWidget = qobject_cast(sender()); -- Q_ASSERT(dbWidget); -- closeDatabaseTab(dbWidget); --} -- --void DatabaseTabWidget::exportToCsv() --{ -- auto db = databaseWidgetFromIndex(currentIndex())->database(); -- if (!db) { -- Q_ASSERT(false); -- return; -- } -- -- if (!warnOnExport()) { -- return; -- } -- -- const QString fileName = fileDialog()->getSaveFileName( -- this, tr("Export database to CSV file"), QString(), tr("CSV file").append(" (*.csv)"), nullptr, nullptr); -- if (fileName.isEmpty()) { -- return; -- } -- -- CsvExporter csvExporter; -- if (!csvExporter.exportDatabase(fileName, db)) { -- emit messageGlobal(tr("Writing the CSV file failed.").append("\n").append(csvExporter.errorString()), -- MessageWidget::Error); -- } --} -- --void DatabaseTabWidget::exportToHtml() --{ -- auto db = databaseWidgetFromIndex(currentIndex())->database(); -- if (!db) { -- Q_ASSERT(false); -- return; -- } -- -- if (!warnOnExport()) { -- return; -- } -- -- const QString fileName = fileDialog()->getSaveFileName( -- this, tr("Export database to HTML file"), QString(), tr("HTML file").append(" (*.html)"), nullptr, nullptr); -- if (fileName.isEmpty()) { -- return; -- } -- -- HtmlExporter htmlExporter; -- if (!htmlExporter.exportDatabase(fileName, db)) { -- emit messageGlobal(tr("Writing the HTML file failed.").append("\n").append(htmlExporter.errorString()), -- MessageWidget::Error); -- } --} -- --bool DatabaseTabWidget::warnOnExport() --{ -- auto ans = -- MessageBox::question(this, -- tr("Export Confirmation"), -- tr("You are about to export your database to an unencrypted file. This will leave your " -- "passwords and sensitive information vulnerable! Are you sure you want to continue?"), -- MessageBox::Yes | MessageBox::No, -- MessageBox::No); -- return ans == MessageBox::Yes; --} -- --void DatabaseTabWidget::showDatabaseSecurity() --{ -- currentDatabaseWidget()->switchToDatabaseSecurity(); --} -- --void DatabaseTabWidget::showDatabaseReports() --{ -- currentDatabaseWidget()->switchToDatabaseReports(); --} -- --void DatabaseTabWidget::showDatabaseSettings() --{ -- currentDatabaseWidget()->switchToDatabaseSettings(); --} -- --bool DatabaseTabWidget::isReadOnly(int index) const --{ -- if (count() == 0) { -- return false; -- } -- -- if (index == -1) { -- index = currentIndex(); -- } -- -- auto db = databaseWidgetFromIndex(index)->database(); -- return db && db->isReadOnly(); --} -- --bool DatabaseTabWidget::isModified(int index) const --{ -- if (count() == 0) { -- return false; -- } -- -- if (index == -1) { -- index = currentIndex(); -- } -- -- auto db = databaseWidgetFromIndex(index)->database(); -- return db && db->isModified(); --} -- --bool DatabaseTabWidget::canSave(int index) const --{ -- return !isReadOnly(index) && isModified(index); --} -- --bool DatabaseTabWidget::hasLockableDatabases() const --{ -- for (int i = 0, c = count(); i < c; ++i) { -- if (!databaseWidgetFromIndex(i)->isLocked()) { -- return true; -- } -- } -- return false; --} -- --/** -- * Get the tab's (original) display name without platform-specific -- * mangling that may occur when reading back the actual widget's \link tabText() -- * -- * @param index tab index -- * @return tab name -- */ --QString DatabaseTabWidget::tabName(int index) --{ -- if (index == -1 || index > count()) { -- return ""; -- } -- -- auto* dbWidget = databaseWidgetFromIndex(index); -- -- auto db = dbWidget->database(); -- Q_ASSERT(db); -- if (!db) { -- return ""; -- } -- -- QString tabName; -- -- if (!db->filePath().isEmpty()) { -- QFileInfo fileInfo(db->filePath()); -- -- if (db->metadata()->name().isEmpty()) { -- tabName = fileInfo.fileName(); -- } else { -- tabName = db->metadata()->name(); -- } -- -- setTabToolTip(index, fileInfo.absoluteFilePath()); -- } else { -- if (db->metadata()->name().isEmpty()) { -- tabName = tr("New Database"); -- } else { -- tabName = tr("%1 [New Database]", "Database tab name modifier").arg(db->metadata()->name()); -- } -- } -- -- if (dbWidget->isLocked()) { -- tabName = tr("%1 [Locked]", "Database tab name modifier").arg(tabName); -- } -- -- if (db->isReadOnly()) { -- tabName = tr("%1 [Read-only]", "Database tab name modifier").arg(tabName); -- } -- -- if (db->isModified()) { -- tabName.append("*"); -- } -- -- return tabName; --} -- --/** -- * Update of the given tab index or of the sending -- * DatabaseWidget if `index` == -1. -- */ --void DatabaseTabWidget::updateTabName(int index) --{ -- auto* dbWidget = databaseWidgetFromIndex(index); -- if (!dbWidget) { -- dbWidget = qobject_cast(sender()); -- } -- Q_ASSERT(dbWidget); -- if (!dbWidget) { -- return; -- } -- index = indexOf(dbWidget); -- setTabText(index, tabName(index)); -- emit tabNameChanged(); --} -- --DatabaseWidget* DatabaseTabWidget::databaseWidgetFromIndex(int index) const --{ -- return qobject_cast(widget(index)); --} -- --DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() --{ -- return qobject_cast(currentWidget()); --} -- --/** -- * Attempt to lock all open databases -- * -- * @return return true if all databases are locked -- */ --bool DatabaseTabWidget::lockDatabases() --{ -- int numLocked = 0; -- int c = count(); -- for (int i = 0; i < c; ++i) { -- auto dbWidget = databaseWidgetFromIndex(i); -- if (dbWidget->lock()) { -- ++numLocked; -- if (dbWidget->database()->filePath().isEmpty()) { -- // If we locked a database without a file close the tab -- closeDatabaseTab(dbWidget); -- } -- } -- } -- -- return numLocked == c; --} -- --/** -- * Unlock a database with an unlock popup dialog. -- * -- * @param dbWidget DatabaseWidget which to connect signals to -- * @param intent intent for unlocking -- */ --void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent) --{ -- unlockDatabaseInDialog(dbWidget, intent, dbWidget->database()->filePath()); --} -- --/** -- * Unlock a database with an unlock popup dialog. -- * -- * @param dbWidget DatabaseWidget which to connect signals to -- * @param intent intent for unlocking -- * @param file path of the database to be unlocked -- */ --void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, -- DatabaseOpenDialog::Intent intent, -- const QString& filePath) --{ -- m_databaseOpenDialog->setTargetDatabaseWidget(dbWidget); -- m_databaseOpenDialog->setIntent(intent); -- m_databaseOpenDialog->setFilePath(filePath); -- --#ifdef Q_OS_MACOS -- if (intent == DatabaseOpenDialog::Intent::AutoType || intent == DatabaseOpenDialog::Intent::Browser) { -- macUtils()->raiseOwnWindow(); -- Tools::wait(200); -- } --#endif -- -- m_databaseOpenDialog->show(); -- m_databaseOpenDialog->raise(); -- m_databaseOpenDialog->activateWindow(); --} -- --/** -- * This function relock the pending database when autotype has been performed successfully -- * A database is marked as pending when it's unlocked after a global Auto-Type invocation -- */ --void DatabaseTabWidget::relockPendingDatabase() --{ -- if (!m_dbWidgetPendingLock || !config()->get(Config::Security_RelockAutoType).toBool()) { -- return; -- } -- -- if (m_dbWidgetPendingLock->isLocked() || !m_dbWidgetPendingLock->database()->isInitialized()) { -- m_dbWidgetPendingLock = nullptr; -- return; -- } -- -- m_dbWidgetPendingLock->lock(); -- m_dbWidgetPendingLock = nullptr; --} -- --void DatabaseTabWidget::updateLastDatabases(const QString& filename) --{ -- if (!config()->get(Config::RememberLastDatabases).toBool()) { -- config()->remove(Config::LastDatabases); -- } else { -- QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList(); -- lastDatabases.prepend(filename); -- lastDatabases.removeDuplicates(); -- -- while (lastDatabases.count() > config()->get(Config::NumberOfRememberedLastDatabases).toInt()) { -- lastDatabases.removeLast(); -- } -- config()->set(Config::LastDatabases, lastDatabases); -- } --} -- --void DatabaseTabWidget::emitActivateDatabaseChanged() --{ -- emit activateDatabaseChanged(currentDatabaseWidget()); --} -- --void DatabaseTabWidget::emitDatabaseLockChanged() --{ -- auto* dbWidget = qobject_cast(sender()); -- Q_ASSERT(dbWidget); -- if (!dbWidget) { -- return; -- } -- -- if (dbWidget->isLocked()) { -- emit databaseLocked(dbWidget); -- } else { -- emit databaseUnlocked(dbWidget); -- } --} -- --void DatabaseTabWidget::performGlobalAutoType() --{ -- QList> unlockedDatabases; -- -- for (int i = 0, c = count(); i < c; ++i) { -- auto* dbWidget = databaseWidgetFromIndex(i); -- if (!dbWidget->isLocked()) { -- unlockedDatabases.append(dbWidget->database()); -- } -- } -- -- // TODO: allow for database selection during Auto-Type instead of using the current tab -- if (!unlockedDatabases.isEmpty()) { -- autoType()->performGlobalAutoType(unlockedDatabases); -- } else if (count() > 0) { -- if (config()->get(Config::Security_RelockAutoType).toBool()) { -- m_dbWidgetPendingLock = currentDatabaseWidget(); -- } -- unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::AutoType); -- } --} -- --void DatabaseTabWidget::performBrowserUnlock() --{ -- auto dbWidget = currentDatabaseWidget(); -- if (dbWidget && dbWidget->isLocked()) { -- unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::Browser); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.h ---- keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,114 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASETABWIDGET_H --#define KEEPASSX_DATABASETABWIDGET_H -- --#include "DatabaseOpenDialog.h" --#include "gui/MessageWidget.h" -- --#include --#include -- --class Database; --class DatabaseWidget; --class DatabaseWidgetStateSync; --class DatabaseOpenWidget; -- --class DatabaseTabWidget : public QTabWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseTabWidget(QWidget* parent = nullptr); -- ~DatabaseTabWidget() override; -- void mergeDatabase(const QString& filePath); -- -- QString tabName(int index); -- DatabaseWidget* currentDatabaseWidget(); -- DatabaseWidget* databaseWidgetFromIndex(int index) const; -- -- bool isReadOnly(int index = -1) const; -- bool canSave(int index = -1) const; -- bool isModified(int index = -1) const; -- bool hasLockableDatabases() const; -- --public slots: -- void addDatabaseTab(const QString& filePath, -- bool inBackground = false, -- const QString& password = {}, -- const QString& keyfile = {}); -- void addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground = false); -- bool closeDatabaseTab(int index); -- bool closeDatabaseTab(DatabaseWidget* dbWidget); -- bool closeAllDatabaseTabs(); -- bool closeCurrentDatabaseTab(); -- bool closeDatabaseTabFromSender(); -- void updateTabName(int index = -1); -- -- DatabaseWidget* newDatabase(); -- void openDatabase(); -- void mergeDatabase(); -- void importCsv(); -- void importKeePass1Database(); -- void importOpVaultDatabase(); -- bool saveDatabase(int index = -1); -- bool saveDatabaseAs(int index = -1); -- bool saveDatabaseBackup(int index = -1); -- void exportToCsv(); -- void exportToHtml(); -- -- bool lockDatabases(); -- void closeDatabaseFromSender(); -- void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent); -- void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent, const QString& filePath); -- void relockPendingDatabase(); -- -- void showDatabaseSecurity(); -- void showDatabaseReports(); -- void showDatabaseSettings(); -- void performGlobalAutoType(); -- void performBrowserUnlock(); -- --signals: -- void databaseOpened(DatabaseWidget* dbWidget); -- void databaseClosed(const QString& filePath); -- void databaseUnlocked(DatabaseWidget* dbWidget); -- void databaseLocked(DatabaseWidget* dbWidget); -- void activateDatabaseChanged(DatabaseWidget* dbWidget); -- void tabNameChanged(); -- void tabVisibilityChanged(bool tabsVisible); -- void messageGlobal(const QString&, MessageWidget::MessageType type); -- void messageDismissGlobal(); -- void databaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget); -- --private slots: -- void toggleTabbar(); -- void emitActivateDatabaseChanged(); -- void emitDatabaseLockChanged(); -- --private: -- QSharedPointer execNewDatabaseWizard(); -- void updateLastDatabases(const QString& filename); -- bool warnOnExport(); -- -- QPointer m_dbWidgetStateSync; -- QPointer m_dbWidgetPendingLock; -- QPointer m_databaseOpenDialog; --}; -- --#endif // KEEPASSX_DATABASETABWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/DatabaseWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,2119 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseWidget.h" -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "autotype/AutoType.h" --#include "core/Config.h" --#include "core/Database.h" --#include "core/EntrySearcher.h" --#include "core/FileWatcher.h" --#include "core/Group.h" --#include "core/Merger.h" --#include "core/Metadata.h" --#include "core/Resources.h" --#include "core/Tools.h" --#include "format/KeePass2Reader.h" --#include "gui/Clipboard.h" --#include "gui/CloneDialog.h" --#include "gui/DatabaseOpenDialog.h" --#include "gui/DatabaseOpenWidget.h" --#include "gui/EntryPreviewWidget.h" --#include "gui/FileDialog.h" --#include "gui/KeePass1OpenWidget.h" --#include "gui/MainWindow.h" --#include "gui/MessageBox.h" --#include "gui/OpVaultOpenWidget.h" --#include "gui/TotpDialog.h" --#include "gui/TotpExportSettingsDialog.h" --#include "gui/TotpSetupDialog.h" --#include "gui/dbsettings/DatabaseSettingsDialog.h" --#include "gui/entry/EditEntryWidget.h" --#include "gui/entry/EntryView.h" --#include "gui/group/EditGroupWidget.h" --#include "gui/group/GroupView.h" --#include "gui/reports/ReportsDialog.h" --#include "keeshare/KeeShare.h" --#include "touchid/TouchID.h" -- --#ifdef WITH_XC_NETWORKING --#include "gui/IconDownloaderDialog.h" --#endif -- --#ifdef Q_OS_LINUX --#include --#endif -- --#ifdef WITH_XC_SSHAGENT --#include "sshagent/SSHAgent.h" --#endif -- --DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) -- : QStackedWidget(parent) -- , m_db(std::move(db)) -- , m_mainWidget(new QWidget(this)) -- , m_mainSplitter(new QSplitter(m_mainWidget)) -- , m_messageWidget(new MessageWidget(this)) -- , m_previewView(new EntryPreviewWidget(this)) -- , m_previewSplitter(new QSplitter(m_mainWidget)) -- , m_searchingLabel(new QLabel(this)) -- , m_shareLabel(new QLabel(this)) -- , m_csvImportWizard(new CsvImportWizard(this)) -- , m_editEntryWidget(new EditEntryWidget(this)) -- , m_editGroupWidget(new EditGroupWidget(this)) -- , m_historyEditEntryWidget(new EditEntryWidget(this)) -- , m_reportsDialog(new ReportsDialog(this)) -- , m_databaseSettingDialog(new DatabaseSettingsDialog(this)) -- , m_databaseOpenWidget(new DatabaseOpenWidget(this)) -- , m_keepass1OpenWidget(new KeePass1OpenWidget(this)) -- , m_opVaultOpenWidget(new OpVaultOpenWidget(this)) -- , m_groupView(new GroupView(m_db.data(), m_mainSplitter)) -- , m_saveAttempts(0) --{ -- Q_ASSERT(m_db); -- -- m_messageWidget->setHidden(true); -- -- auto* mainLayout = new QVBoxLayout(); -- mainLayout->addWidget(m_messageWidget); -- auto* hbox = new QHBoxLayout(); -- mainLayout->addLayout(hbox); -- hbox->addWidget(m_mainSplitter); -- m_mainWidget->setLayout(mainLayout); -- -- auto* rightHandSideWidget = new QWidget(m_mainSplitter); -- auto* vbox = new QVBoxLayout(); -- vbox->setMargin(0); -- vbox->addWidget(m_searchingLabel); --#ifdef WITH_XC_KEESHARE -- vbox->addWidget(m_shareLabel); --#endif -- vbox->addWidget(m_previewSplitter); -- rightHandSideWidget->setLayout(vbox); -- m_entryView = new EntryView(rightHandSideWidget); -- -- m_mainSplitter->setChildrenCollapsible(false); -- m_mainSplitter->addWidget(m_groupView); -- m_mainSplitter->addWidget(rightHandSideWidget); -- m_mainSplitter->setStretchFactor(0, 30); -- m_mainSplitter->setStretchFactor(1, 70); -- -- m_previewSplitter->setOrientation(Qt::Vertical); -- m_previewSplitter->setChildrenCollapsible(true); -- -- m_groupView->setObjectName("groupView"); -- m_groupView->setContextMenuPolicy(Qt::CustomContextMenu); -- connect(m_groupView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitGroupContextMenuRequested(QPoint))); -- -- m_entryView->setObjectName("entryView"); -- m_entryView->setContextMenuPolicy(Qt::CustomContextMenu); -- m_entryView->displayGroup(m_db->rootGroup()); -- connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint))); -- -- // Add a notification for when we are searching -- m_searchingLabel->setObjectName("SearchBanner"); -- m_searchingLabel->setText(tr("Searching...")); -- m_searchingLabel->setAlignment(Qt::AlignCenter); -- m_searchingLabel->setVisible(false); -- --#ifdef WITH_XC_KEESHARE -- m_shareLabel->setObjectName("KeeShareBanner"); -- m_shareLabel->setText(tr("Shared group...")); -- m_shareLabel->setAlignment(Qt::AlignCenter); -- m_shareLabel->setVisible(false); --#endif -- -- m_previewView->setObjectName("previewWidget"); -- m_previewView->hide(); -- m_previewSplitter->addWidget(m_entryView); -- m_previewSplitter->addWidget(m_previewView); -- m_previewSplitter->setStretchFactor(0, 100); -- m_previewSplitter->setStretchFactor(1, 0); -- m_previewSplitter->setSizes({1, 1}); -- -- m_editEntryWidget->setObjectName("editEntryWidget"); -- m_editGroupWidget->setObjectName("editGroupWidget"); -- m_csvImportWizard->setObjectName("csvImportWizard"); -- m_reportsDialog->setObjectName("reportsDialog"); -- m_databaseSettingDialog->setObjectName("databaseSettingsDialog"); -- m_databaseOpenWidget->setObjectName("databaseOpenWidget"); -- m_keepass1OpenWidget->setObjectName("keepass1OpenWidget"); -- m_opVaultOpenWidget->setObjectName("opVaultOpenWidget"); -- -- addChildWidget(m_mainWidget); -- addChildWidget(m_editEntryWidget); -- addChildWidget(m_editGroupWidget); -- addChildWidget(m_reportsDialog); -- addChildWidget(m_databaseSettingDialog); -- addChildWidget(m_historyEditEntryWidget); -- addChildWidget(m_databaseOpenWidget); -- addChildWidget(m_csvImportWizard); -- addChildWidget(m_keepass1OpenWidget); -- addChildWidget(m_opVaultOpenWidget); -- -- // clang-format off -- connect(m_mainSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(mainSplitterSizesChanged())); -- connect(m_previewSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(previewSplitterSizesChanged())); -- connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), m_previewView, SLOT(setDatabaseMode(DatabaseWidget::Mode))); -- connect(m_previewView, SIGNAL(errorOccurred(QString)), SLOT(showErrorMessage(QString))); -- connect(m_previewView, SIGNAL(entryUrlActivated(Entry*)), SLOT(openUrlForEntry(Entry*))); -- connect(m_entryView, SIGNAL(viewStateChanged()), SIGNAL(entryViewStateChanged())); -- connect(m_groupView, SIGNAL(groupSelectionChanged()), SLOT(onGroupChanged())); -- connect(m_groupView, SIGNAL(groupSelectionChanged()), SIGNAL(groupChanged())); -- connect(m_groupView, &GroupView::groupFocused, this, [this] { m_previewView->setGroup(currentGroup()); }); -- connect(m_entryView, SIGNAL(entryActivated(Entry*,EntryModel::ModelColumn)), -- SLOT(entryActivationSignalReceived(Entry*,EntryModel::ModelColumn))); -- connect(m_entryView, SIGNAL(entrySelectionChanged(Entry*)), SLOT(onEntryChanged(Entry*))); -- connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); -- connect(m_editEntryWidget, SIGNAL(historyEntryActivated(Entry*)), SLOT(switchToHistoryView(Entry*))); -- connect(m_historyEditEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchBackToEntryEdit())); -- connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); -- connect(m_reportsDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); -- connect(m_databaseSettingDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); -- connect(m_databaseOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); -- connect(m_keepass1OpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); -- connect(m_opVaultOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); -- connect(m_csvImportWizard, SIGNAL(importFinished(bool)), SLOT(csvImportFinished(bool))); -- connect(this, SIGNAL(currentChanged(int)), SLOT(emitCurrentModeChanged())); -- // clang-format on -- -- connectDatabaseSignals(); -- -- m_blockAutoSave = false; -- -- m_EntrySearcher = new EntrySearcher(false); -- m_searchLimitGroup = config()->get(Config::SearchLimitGroup).toBool(); -- --#ifdef WITH_XC_KEESHARE -- // We need to reregister the database to allow exports -- // from a newly created database -- KeeShare::instance()->connectDatabase(m_db, {}); --#endif -- -- if (m_db->isInitialized()) { -- switchToMainView(); -- } else { -- switchToOpenDatabase(); -- } --} -- --DatabaseWidget::DatabaseWidget(const QString& filePath, QWidget* parent) -- : DatabaseWidget(QSharedPointer::create(filePath), parent) --{ --} -- --DatabaseWidget::~DatabaseWidget() --{ -- delete m_EntrySearcher; --} -- --QSharedPointer DatabaseWidget::database() const --{ -- return m_db; --} -- --DatabaseWidget::Mode DatabaseWidget::currentMode() const --{ -- if (currentWidget() == nullptr) { -- return Mode::None; -- } else if (currentWidget() == m_mainWidget) { -- return Mode::ViewMode; -- } else if (currentWidget() == m_databaseOpenWidget || currentWidget() == m_keepass1OpenWidget) { -- return Mode::LockedMode; -- } else if (currentWidget() == m_csvImportWizard) { -- return Mode::ImportMode; -- } else { -- return Mode::EditMode; -- } --} -- --bool DatabaseWidget::isLocked() const --{ -- return currentMode() == Mode::LockedMode; --} -- --bool DatabaseWidget::isSaving() const --{ -- return m_db->isSaving(); --} -- --bool DatabaseWidget::isSorted() const --{ -- return m_entryView->isSorted(); --} -- --bool DatabaseWidget::isSearchActive() const --{ -- return m_entryView->inSearchMode(); --} -- --bool DatabaseWidget::isEntryViewActive() const --{ -- return currentWidget() == m_mainWidget; --} -- --bool DatabaseWidget::isEntryEditActive() const --{ -- return currentWidget() == m_editEntryWidget; --} -- --bool DatabaseWidget::isGroupEditActive() const --{ -- return currentWidget() == m_editGroupWidget; --} -- --bool DatabaseWidget::isEditWidgetModified() const --{ -- if (currentWidget() == m_editEntryWidget) { -- return m_editEntryWidget->isModified(); -- } else if (currentWidget() == m_editGroupWidget) { -- return m_editGroupWidget->isModified(); -- } -- return false; --} -- --QList DatabaseWidget::mainSplitterSizes() const --{ -- return m_mainSplitter->sizes(); --} -- --void DatabaseWidget::setMainSplitterSizes(const QList& sizes) --{ -- m_mainSplitter->setSizes(sizes); --} -- --QList DatabaseWidget::previewSplitterSizes() const --{ -- return m_previewSplitter->sizes(); --} -- --void DatabaseWidget::setPreviewSplitterSizes(const QList& sizes) --{ -- m_previewSplitter->setSizes(sizes); --} -- --/** -- * Get current view state of entry view -- */ --QByteArray DatabaseWidget::entryViewState() const --{ -- return m_entryView->viewState(); --} -- --/** -- * Set view state of entry view -- */ --bool DatabaseWidget::setEntryViewState(const QByteArray& state) const --{ -- return m_entryView->setViewState(state); --} -- --void DatabaseWidget::clearAllWidgets() --{ -- m_editEntryWidget->clear(); -- m_historyEditEntryWidget->clear(); -- m_editGroupWidget->clear(); --} -- --void DatabaseWidget::emitCurrentModeChanged() --{ -- emit currentModeChanged(currentMode()); --} -- --void DatabaseWidget::createEntry() --{ -- Q_ASSERT(m_groupView->currentGroup()); -- if (!m_groupView->currentGroup()) { -- return; -- } -- -- m_newEntry.reset(new Entry()); -- -- if (isSearchActive()) { -- m_newEntry->setTitle(getCurrentSearch()); -- endSearch(); -- } -- m_newEntry->setUuid(QUuid::createUuid()); -- m_newEntry->setUsername(m_db->metadata()->defaultUserName()); -- m_newParent = m_groupView->currentGroup(); -- m_newParent->applyGroupIconOnCreateTo(m_newEntry.data()); -- switchToEntryEdit(m_newEntry.data(), true); --} -- --void DatabaseWidget::replaceDatabase(QSharedPointer db) --{ -- Q_ASSERT(!isEntryEditActive() && !isGroupEditActive()); -- -- // Save off new parent UUID which will be valid when creating a new entry -- QUuid newParentUuid; -- if (m_newParent) { -- newParentUuid = m_newParent->uuid(); -- } -- -- // TODO: instead of increasing the ref count temporarily, there should be a clean -- // break from the old database. Without this crashes occur due to the change -- // signals triggering dangling pointers. -- auto oldDb = m_db; -- m_db = std::move(db); -- connectDatabaseSignals(); -- m_groupView->changeDatabase(m_db); -- -- // Restore the new parent group pointer, if not found default to the root group -- // this prevents data loss when merging a database while creating a new entry -- if (!newParentUuid.isNull()) { -- m_newParent = m_db->rootGroup()->findGroupByUuid(newParentUuid); -- if (!m_newParent) { -- m_newParent = m_db->rootGroup(); -- } -- } -- -- emit databaseReplaced(oldDb, m_db); -- --#if defined(WITH_XC_KEESHARE) -- KeeShare::instance()->connectDatabase(m_db, oldDb); --#else -- // Keep the instance active till the end of this function -- Q_UNUSED(oldDb); --#endif -- -- oldDb->releaseData(); --} -- --void DatabaseWidget::cloneEntry() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- -- auto cloneDialog = new CloneDialog(this, m_db.data(), currentEntry); -- cloneDialog->show(); --} -- --void DatabaseWidget::showTotp() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- -- auto totpDialog = new TotpDialog(this, currentEntry); -- connect(this, &DatabaseWidget::databaseLockRequested, totpDialog, &TotpDialog::close); -- totpDialog->open(); --} -- --void DatabaseWidget::copyTotp() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- setClipboardTextAndMinimize(currentEntry->totp()); --} -- --void DatabaseWidget::setupTotp() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- -- auto setupTotpDialog = new TotpSetupDialog(this, currentEntry); -- connect(setupTotpDialog, SIGNAL(totpUpdated()), SIGNAL(entrySelectionChanged())); -- connect(this, &DatabaseWidget::databaseLockRequested, setupTotpDialog, &TotpSetupDialog::close); -- setupTotpDialog->open(); --} -- --void DatabaseWidget::deleteSelectedEntries() --{ -- const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); -- if (selected.isEmpty()) { -- return; -- } -- -- // Resolve entries from the selection model -- QList selectedEntries; -- for (const QModelIndex& index : selected) { -- selectedEntries.append(m_entryView->entryFromIndex(index)); -- } -- -- deleteEntries(std::move(selectedEntries)); --} -- --void DatabaseWidget::deleteEntries(QList selectedEntries) --{ -- // Confirm entry removal before moving forward -- auto* recycleBin = m_db->metadata()->recycleBin(); -- bool permanent = (recycleBin && recycleBin->findEntryByUuid(selectedEntries.first()->uuid())) -- || !m_db->metadata()->recycleBinEnabled(); -- -- if (!confirmDeleteEntries(selectedEntries, permanent)) { -- return; -- } -- -- // Find references to selected entries and prompt for direction if necessary -- auto it = selectedEntries.begin(); -- while (it != selectedEntries.end()) { -- auto references = m_db->rootGroup()->referencesRecursive(*it); -- if (!references.isEmpty()) { -- // Ignore references that are selected for deletion -- for (auto* entry : selectedEntries) { -- references.removeAll(entry); -- } -- -- if (!references.isEmpty()) { -- // Prompt for reference handling -- auto result = MessageBox::question( -- this, -- tr("Replace references to entry?"), -- tr("Entry \"%1\" has %2 reference(s). " -- "Do you want to overwrite references with values, skip this entry, or delete anyway?", -- "", -- references.size()) -- .arg((*it)->title().toHtmlEscaped()) -- .arg(references.size()), -- MessageBox::Overwrite | MessageBox::Skip | MessageBox::Delete, -- MessageBox::Overwrite); -- -- if (result == MessageBox::Overwrite) { -- for (auto* entry : references) { -- entry->replaceReferencesWithValues(*it); -- } -- } else if (result == MessageBox::Skip) { -- it = selectedEntries.erase(it); -- continue; -- } -- } -- } -- -- it++; -- } -- -- if (permanent) { -- for (auto* entry : asConst(selectedEntries)) { -- delete entry; -- } -- } else { -- for (auto* entry : asConst(selectedEntries)) { -- m_db->recycleEntry(entry); -- } -- } -- -- refreshSearch(); -- -- m_entryView->setFirstEntryActive(); -- auto* currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- m_previewView->setEntry(currentEntry); -- } else { -- m_previewView->setGroup(groupView()->currentGroup()); -- } --} -- --bool DatabaseWidget::confirmDeleteEntries(QList entries, bool permanent) --{ -- if (entries.isEmpty()) { -- return false; -- } -- -- if (permanent) { -- QString prompt; -- if (entries.size() == 1) { -- prompt = tr("Do you really want to delete the entry \"%1\" for good?") -- .arg(entries.first()->title().toHtmlEscaped()); -- } else { -- prompt = tr("Do you really want to delete %n entry(s) for good?", "", entries.size()); -- } -- -- auto answer = MessageBox::question(this, -- tr("Delete entry(s)?", "", entries.size()), -- prompt, -- MessageBox::Delete | MessageBox::Cancel, -- MessageBox::Cancel); -- -- return answer == MessageBox::Delete; -- } else { -- QString prompt; -- if (entries.size() == 1) { -- prompt = tr("Do you really want to move entry \"%1\" to the recycle bin?") -- .arg(entries.first()->title().toHtmlEscaped()); -- } else { -- prompt = tr("Do you really want to move %n entry(s) to the recycle bin?", "", entries.size()); -- } -- -- auto answer = MessageBox::question(this, -- tr("Move entry(s) to recycle bin?", "", entries.size()), -- prompt, -- MessageBox::Move | MessageBox::Cancel, -- MessageBox::Cancel); -- -- return answer == MessageBox::Move; -- } --} -- --void DatabaseWidget::setFocus(Qt::FocusReason reason) --{ -- if (reason == Qt::BacktabFocusReason) { -- m_previewView->setFocus(); -- } else { -- m_groupView->setFocus(); -- } --} -- --void DatabaseWidget::focusOnEntries(bool editIfFocused) --{ -- if (isEntryViewActive()) { -- if (editIfFocused && m_entryView->hasFocus()) { -- switchToEntryEdit(); -- } else { -- m_entryView->setFocus(); -- } -- } --} -- --void DatabaseWidget::focusOnGroups(bool editIfFocused) --{ -- if (isEntryViewActive()) { -- if (editIfFocused && m_groupView->hasFocus()) { -- switchToGroupEdit(); -- } else { -- m_groupView->setFocus(); -- } -- } --} -- --void DatabaseWidget::moveEntryUp() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- currentEntry->moveUp(); -- m_entryView->setCurrentEntry(currentEntry); -- } --} -- --void DatabaseWidget::moveEntryDown() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- currentEntry->moveDown(); -- m_entryView->setCurrentEntry(currentEntry); -- } --} -- --void DatabaseWidget::copyTitle() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->title())); -- } --} -- --void DatabaseWidget::copyUsername() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->username())); -- } --} -- --void DatabaseWidget::copyPassword() --{ -- // QTextEdit does not properly trap Ctrl+C copy shortcut -- // if a text edit has focus pass the copy operation to it -- auto textEdit = qobject_cast(focusWidget()); -- if (textEdit) { -- textEdit->copy(); -- return; -- } -- -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password())); -- } --} -- --void DatabaseWidget::copyURL() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->url())); -- } --} -- --void DatabaseWidget::copyNotes() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->notes())); -- } --} -- --void DatabaseWidget::copyAttribute(QAction* action) --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- setClipboardTextAndMinimize( -- currentEntry->resolveMultiplePlaceholders(currentEntry->attributes()->value(action->data().toString()))); -- } --} -- --void DatabaseWidget::showTotpKeyQrCode() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- auto totpDisplayDialog = new TotpExportSettingsDialog(this, currentEntry); -- connect(this, &DatabaseWidget::databaseLockRequested, totpDisplayDialog, &TotpExportSettingsDialog::close); -- totpDisplayDialog->open(); -- } --} -- --void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) --{ -- clipboard()->setText(text); -- if (config()->get(Config::HideWindowOnCopy).toBool()) { -- if (config()->get(Config::MinimizeOnCopy).toBool()) { -- getMainWindow()->minimizeOrHide(); -- } else if (config()->get(Config::DropToBackgroundOnCopy).toBool()) { -- window()->lower(); -- } -- } --} -- --#ifdef WITH_XC_SSHAGENT --void DatabaseWidget::addToAgent() --{ -- Entry* currentEntry = m_entryView->currentEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- -- KeeAgentSettings settings; -- if (!settings.fromEntry(currentEntry)) { -- return; -- } -- -- OpenSSHKey key; -- if (settings.toOpenSSHKey(currentEntry, key, true)) { -- SSHAgent::instance()->addIdentity(key, settings, database()->uuid()); -- } else { -- m_messageWidget->showMessage(key.errorString(), MessageWidget::Error); -- } --} -- --void DatabaseWidget::removeFromAgent() --{ -- Entry* currentEntry = m_entryView->currentEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return; -- } -- -- KeeAgentSettings settings; -- if (!settings.fromEntry(currentEntry)) { -- return; -- } -- -- OpenSSHKey key; -- if (settings.toOpenSSHKey(currentEntry, key, false)) { -- SSHAgent::instance()->removeIdentity(key); -- } else { -- m_messageWidget->showMessage(key.errorString(), MessageWidget::Error); -- } --} --#endif -- --void DatabaseWidget::performAutoType() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- autoType()->performAutoType(currentEntry, window()); -- } --} -- --void DatabaseWidget::performAutoTypeUsername() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{USERNAME}"), window()); -- } --} -- --void DatabaseWidget::performAutoTypeUsernameEnter() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{USERNAME}{ENTER}"), window()); -- } --} -- --void DatabaseWidget::performAutoTypePassword() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{PASSWORD}"), window()); -- } --} -- --void DatabaseWidget::performAutoTypePasswordEnter() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{PASSWORD}{ENTER}"), window()); -- } --} -- --void DatabaseWidget::openUrl() --{ -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- openUrlForEntry(currentEntry); -- } --} -- --void DatabaseWidget::downloadSelectedFavicons() --{ --#ifdef WITH_XC_NETWORKING -- QList selectedEntries; -- for (const auto& index : m_entryView->selectionModel()->selectedRows()) { -- selectedEntries.append(m_entryView->entryFromIndex(index)); -- } -- -- // Force download even if icon already exists -- performIconDownloads(selectedEntries, true); --#endif --} -- --void DatabaseWidget::downloadAllFavicons() --{ --#ifdef WITH_XC_NETWORKING -- auto currentGroup = m_groupView->currentGroup(); -- if (currentGroup) { -- performIconDownloads(currentGroup->entries()); -- } --#endif --} -- --void DatabaseWidget::performIconDownloads(const QList& entries, bool force) --{ --#ifdef WITH_XC_NETWORKING -- auto* iconDownloaderDialog = new IconDownloaderDialog(this); -- connect(this, SIGNAL(databaseLockRequested()), iconDownloaderDialog, SLOT(close())); -- iconDownloaderDialog->downloadFavicons(m_db, entries, force); --#else -- Q_UNUSED(entries); -- Q_UNUSED(force); --#endif --} -- --void DatabaseWidget::openUrlForEntry(Entry* entry) --{ -- Q_ASSERT(entry); -- if (!entry) { -- return; -- } -- -- QString cmdString = entry->resolveMultiplePlaceholders(entry->url()); -- if (cmdString.startsWith("cmd://")) { -- // check if decision to execute command was stored -- bool launch = (entry->attributes()->value(EntryAttributes::RememberCmdExecAttr) == "1"); -- -- // otherwise ask user -- if (!launch && cmdString.length() > 6) { -- QString cmdTruncated = entry->resolveMultiplePlaceholders(entry->maskPasswordPlaceholders(entry->url())); -- cmdTruncated = cmdTruncated.mid(6); -- if (cmdTruncated.length() > 400) { -- cmdTruncated = cmdTruncated.left(400) + " […]"; -- } -- QMessageBox msgbox(QMessageBox::Icon::Question, -- tr("Execute command?"), -- tr("Do you really want to execute the following command?

%1
") -- .arg(cmdTruncated.toHtmlEscaped()), -- QMessageBox::Yes | QMessageBox::No, -- this); -- msgbox.setDefaultButton(QMessageBox::No); -- -- QCheckBox* checkbox = new QCheckBox(tr("Remember my choice"), &msgbox); -- msgbox.setCheckBox(checkbox); -- bool remember = false; -- QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { -- if (static_cast(state) == Qt::CheckState::Checked) { -- remember = true; -- } -- }); -- -- int result = msgbox.exec(); -- launch = (result == QMessageBox::Yes); -- -- if (remember) { -- entry->attributes()->set(EntryAttributes::RememberCmdExecAttr, result == QMessageBox::Yes ? "1" : "0"); -- } -- } -- -- if (launch) { -- QProcess::startDetached(cmdString.mid(6)); -- -- if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { -- getMainWindow()->minimizeOrHide(); -- } -- } -- } else if (cmdString.startsWith("kdbx://")) { -- openDatabaseFromEntry(entry, false); -- } else { -- QUrl url = QUrl::fromUserInput(entry->resolveMultiplePlaceholders(entry->url())); -- if (!url.isEmpty()) { -- QDesktopServices::openUrl(url); -- -- if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { -- getMainWindow()->minimizeOrHide(); -- } -- } -- } --} -- --Entry* DatabaseWidget::currentSelectedEntry() --{ -- if (currentWidget() == m_editEntryWidget) { -- return m_editEntryWidget->currentEntry(); -- } -- -- return m_entryView->currentEntry(); --} -- --void DatabaseWidget::createGroup() --{ -- Q_ASSERT(m_groupView->currentGroup()); -- if (!m_groupView->currentGroup()) { -- return; -- } -- -- m_newGroup.reset(new Group()); -- m_newGroup->setUuid(QUuid::createUuid()); -- m_newParent = m_groupView->currentGroup(); -- switchToGroupEdit(m_newGroup.data(), true); --} -- --void DatabaseWidget::deleteGroup() --{ -- Group* currentGroup = m_groupView->currentGroup(); -- Q_ASSERT(currentGroup && canDeleteCurrentGroup()); -- if (!currentGroup || !canDeleteCurrentGroup()) { -- return; -- } -- -- auto* recycleBin = m_db->metadata()->recycleBin(); -- bool inRecycleBin = recycleBin && recycleBin->findGroupByUuid(currentGroup->uuid()); -- bool isRecycleBin = recycleBin && (currentGroup == recycleBin); -- bool isRecycleBinSubgroup = recycleBin && currentGroup->findGroupByUuid(recycleBin->uuid()); -- if (inRecycleBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) { -- auto result = MessageBox::question( -- this, -- tr("Delete group"), -- tr("Do you really want to delete the group \"%1\" for good?").arg(currentGroup->name().toHtmlEscaped()), -- MessageBox::Delete | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Delete) { -- delete currentGroup; -- } -- } else { -- auto result = MessageBox::question(this, -- tr("Move group to recycle bin?"), -- tr("Do you really want to move the group " -- "\"%1\" to the recycle bin?") -- .arg(currentGroup->name().toHtmlEscaped()), -- MessageBox::Move | MessageBox::Cancel, -- MessageBox::Cancel); -- if (result == MessageBox::Move) { -- m_db->recycleGroup(currentGroup); -- } -- } --} -- --int DatabaseWidget::addChildWidget(QWidget* w) --{ -- w->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); -- int index = QStackedWidget::addWidget(w); -- adjustSize(); -- return index; --} -- --void DatabaseWidget::switchToMainView(bool previousDialogAccepted) --{ -- setCurrentWidget(m_mainWidget); -- -- if (m_newGroup) { -- if (previousDialogAccepted) { -- m_newGroup->setParent(m_newParent); -- m_groupView->setCurrentGroup(m_newGroup.take()); -- m_groupView->expandGroup(m_newParent); -- } else { -- m_newGroup.reset(); -- } -- -- m_newParent = nullptr; -- } else if (m_newEntry) { -- if (previousDialogAccepted) { -- m_newEntry->setGroup(m_newParent); -- m_entryView->setFocus(); -- m_entryView->setCurrentEntry(m_newEntry.take()); -- } else { -- m_newEntry.reset(); -- } -- -- m_newParent = nullptr; -- } else { -- // Workaround: ensure entries are focused so search doesn't reset -- m_entryView->setFocus(); -- } -- -- if (sender() == m_entryView || sender() == m_editEntryWidget) { -- onEntryChanged(m_entryView->currentEntry()); -- } else if (sender() == m_groupView || sender() == m_editGroupWidget) { -- onGroupChanged(); -- } --} -- --void DatabaseWidget::switchToHistoryView(Entry* entry) --{ -- auto entryTitle = m_editEntryWidget->currentEntry() ? m_editEntryWidget->currentEntry()->title() : ""; -- m_historyEditEntryWidget->loadEntry(entry, false, true, entryTitle, m_db); -- setCurrentWidget(m_historyEditEntryWidget); --} -- --void DatabaseWidget::switchBackToEntryEdit() --{ -- setCurrentWidget(m_editEntryWidget); --} -- --void DatabaseWidget::switchToEntryEdit(Entry* entry) --{ -- switchToEntryEdit(entry, false); --} -- --void DatabaseWidget::switchToEntryEdit(Entry* entry, bool create) --{ -- // If creating an entry, it will be in `currentGroup()` so it's -- // okay to use but when editing, the entry may not be in -- // `currentGroup()` so we get the entry's group. -- Group* group; -- if (create) { -- group = currentGroup(); -- } else { -- group = entry->group(); -- // Ensure we have only this entry selected -- m_entryView->setCurrentEntry(entry); -- } -- -- Q_ASSERT(group); -- -- // Setup the entry edit widget and display -- m_editEntryWidget->loadEntry(entry, create, false, group->name(), m_db); -- setCurrentWidget(m_editEntryWidget); --} -- --void DatabaseWidget::switchToGroupEdit(Group* group, bool create) --{ -- m_editGroupWidget->loadGroup(group, create, m_db); -- setCurrentWidget(m_editGroupWidget); --} -- --void DatabaseWidget::connectDatabaseSignals() --{ -- // relayed Database events -- connect(m_db.data(), -- SIGNAL(filePathChanged(QString, QString)), -- -- SIGNAL(databaseFilePathChanged(QString, QString))); -- connect(m_db.data(), SIGNAL(databaseModified()), SIGNAL(databaseModified())); -- connect(m_db.data(), SIGNAL(databaseModified()), SLOT(onDatabaseModified())); -- connect(m_db.data(), SIGNAL(databaseSaved()), SIGNAL(databaseSaved())); -- connect(m_db.data(), SIGNAL(databaseFileChanged()), this, SLOT(reloadDatabaseFile())); --} -- --void DatabaseWidget::loadDatabase(bool accepted) --{ -- auto* openWidget = qobject_cast(sender()); -- Q_ASSERT(openWidget); -- if (!openWidget) { -- return; -- } -- -- if (accepted) { -- replaceDatabase(openWidget->database()); -- switchToMainView(); -- processAutoOpen(); -- restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); -- m_groupBeforeLock = QUuid(); -- m_entryBeforeLock = QUuid(); -- m_saveAttempts = 0; -- emit databaseUnlocked(); --#ifdef WITH_XC_SSHAGENT -- sshAgent()->databaseUnlocked(m_db); --#endif -- if (config()->get(Config::MinimizeAfterUnlock).toBool()) { -- getMainWindow()->minimizeOrHide(); -- } -- } else { -- if (m_databaseOpenWidget->database()) { -- m_databaseOpenWidget->database().reset(); -- } -- emit closeRequest(); -- } --} -- --void DatabaseWidget::mergeDatabase(bool accepted) --{ -- if (accepted) { -- if (!m_db) { -- showMessage(tr("No current database."), MessageWidget::Error); -- return; -- } -- -- auto* senderDialog = qobject_cast(sender()); -- -- Q_ASSERT(senderDialog); -- if (!senderDialog) { -- return; -- } -- auto srcDb = senderDialog->database(); -- -- if (!srcDb) { -- showMessage(tr("No source database, nothing to do."), MessageWidget::Error); -- return; -- } -- -- Merger merger(srcDb.data(), m_db.data()); -- QStringList changeList = merger.merge(); -- -- if (!changeList.isEmpty()) { -- showMessage(tr("Successfully merged the database files."), MessageWidget::Information); -- } else { -- showMessage(tr("Database was not modified by merge operation."), MessageWidget::Information); -- } -- } -- -- switchToMainView(); -- emit databaseMerged(m_db); --} -- --/** -- * Unlock the database. -- * -- * @param accepted true if the unlock dialog or widget was confirmed with OK -- */ --void DatabaseWidget::unlockDatabase(bool accepted) --{ -- auto* senderDialog = qobject_cast(sender()); -- -- if (!accepted) { -- if (!senderDialog && (!m_db || !m_db->isInitialized())) { -- emit closeRequest(); -- } -- return; -- } -- -- if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::Merge) { -- mergeDatabase(accepted); -- return; -- } -- -- QSharedPointer db; -- if (senderDialog) { -- db = senderDialog->database(); -- } else { -- db = m_databaseOpenWidget->database(); -- } -- replaceDatabase(db); -- if (db->isReadOnly()) { -- showMessage( -- tr("This database is opened in read-only mode. Autosave is disabled."), MessageWidget::Warning, false, -1); -- } -- -- restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); -- m_groupBeforeLock = QUuid(); -- m_entryBeforeLock = QUuid(); -- -- switchToMainView(); -- processAutoOpen(); -- emit databaseUnlocked(); -- --#ifdef WITH_XC_SSHAGENT -- sshAgent()->databaseUnlocked(m_db); --#endif -- -- if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::AutoType) { -- QList> dbList; -- dbList.append(m_db); -- autoType()->performGlobalAutoType(dbList); -- } --} -- --void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column) --{ -- Q_ASSERT(entry); -- if (!entry) { -- return; -- } -- -- // Implement 'copy-on-doubleclick' functionality for certain columns -- switch (column) { -- case EntryModel::Username: -- setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->username())); -- break; -- case EntryModel::Password: -- setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->password())); -- break; -- case EntryModel::Url: -- if (!entry->url().isEmpty()) { -- openUrlForEntry(entry); -- } -- break; -- case EntryModel::Totp: -- if (entry->hasTotp()) { -- setClipboardTextAndMinimize(entry->totp()); -- } else { -- setupTotp(); -- } -- break; -- case EntryModel::ParentGroup: -- // Call this first to clear out of search mode, otherwise -- // the desired entry is not properly selected -- endSearch(); -- m_groupView->setCurrentGroup(entry->group()); -- m_entryView->setCurrentEntry(entry); -- break; -- // TODO: switch to 'Notes' tab in details view/pane -- // case EntryModel::Notes: -- // break; -- // TODO: switch to 'Attachments' tab in details view/pane -- // case EntryModel::Attachments: -- // break; -- default: -- switchToEntryEdit(entry); -- } --} -- --void DatabaseWidget::switchToDatabaseReports() --{ -- m_reportsDialog->load(m_db); -- setCurrentWidget(m_reportsDialog); --} -- --void DatabaseWidget::switchToDatabaseSettings() --{ -- m_databaseSettingDialog->load(m_db); -- setCurrentWidget(m_databaseSettingDialog); --} -- --void DatabaseWidget::switchToOpenDatabase() --{ -- if (currentWidget() != m_databaseOpenWidget || m_databaseOpenWidget->filename() != m_db->filePath()) { -- switchToOpenDatabase(m_db->filePath()); -- } --} -- --void DatabaseWidget::switchToOpenDatabase(const QString& filePath) --{ -- m_databaseOpenWidget->load(filePath); -- setCurrentWidget(m_databaseOpenWidget); --} -- --void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile) --{ -- switchToOpenDatabase(filePath); -- m_databaseOpenWidget->enterKey(password, keyFile); --} -- --void DatabaseWidget::switchToCsvImport(const QString& filePath) --{ -- setCurrentWidget(m_csvImportWizard); -- m_csvImportWizard->load(filePath, m_db.data()); --} -- --void DatabaseWidget::csvImportFinished(bool accepted) --{ -- if (!accepted) { -- emit closeRequest(); -- } else { -- switchToMainView(); -- } --} -- --void DatabaseWidget::switchToImportKeepass1(const QString& filePath) --{ -- m_keepass1OpenWidget->load(filePath); -- setCurrentWidget(m_keepass1OpenWidget); --} -- --void DatabaseWidget::switchToImportOpVault(const QString& fileName) --{ -- m_opVaultOpenWidget->load(fileName); -- setCurrentWidget(m_opVaultOpenWidget); --} -- --void DatabaseWidget::switchToEntryEdit() --{ -- auto entry = m_entryView->currentEntry(); -- if (!entry) { -- return; -- } -- -- switchToEntryEdit(entry, false); --} -- --void DatabaseWidget::switchToGroupEdit() --{ -- auto group = m_groupView->currentGroup(); -- if (!group) { -- return; -- } -- -- switchToGroupEdit(group, false); --} -- --void DatabaseWidget::sortGroupsAsc() --{ -- m_groupView->sortGroups(); --} -- --void DatabaseWidget::sortGroupsDesc() --{ -- m_groupView->sortGroups(true); --} -- --void DatabaseWidget::switchToDatabaseSecurity() --{ -- switchToDatabaseSettings(); -- m_databaseSettingDialog->showDatabaseKeySettings(); --} -- --void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile) --{ -- if (password.isEmpty() && keyfile.isEmpty()) { -- return; -- } -- -- if (!m_db->isInitialized() || isLocked()) { -- switchToOpenDatabase(); -- m_databaseOpenWidget->enterKey(password, keyfile); -- } --} -- --void DatabaseWidget::refreshSearch() --{ -- if (isSearchActive()) { -- search(m_lastSearchText); -- } --} -- --void DatabaseWidget::search(const QString& searchtext) --{ -- if (searchtext.isEmpty()) { -- endSearch(); -- return; -- } -- -- emit searchModeAboutToActivate(); -- -- Group* searchGroup = m_searchLimitGroup ? currentGroup() : m_db->rootGroup(); -- -- QList searchResult = m_EntrySearcher->search(searchtext, searchGroup); -- -- m_entryView->displaySearch(searchResult); -- m_lastSearchText = searchtext; -- -- // Display a label detailing our search results -- if (!searchResult.isEmpty()) { -- m_searchingLabel->setText(tr("Search Results (%1)").arg(searchResult.size())); -- } else { -- m_searchingLabel->setText(tr("No Results")); -- } -- -- m_searchingLabel->setVisible(true); --#ifdef WITH_XC_KEESHARE -- m_shareLabel->setVisible(false); --#endif -- -- emit searchModeActivated(); --} -- --void DatabaseWidget::setSearchCaseSensitive(bool state) --{ -- m_EntrySearcher->setCaseSensitive(state); -- refreshSearch(); --} -- --void DatabaseWidget::setSearchLimitGroup(bool state) --{ -- m_searchLimitGroup = state; -- refreshSearch(); --} -- --void DatabaseWidget::onGroupChanged() --{ -- auto group = m_groupView->currentGroup(); -- -- // Intercept group changes if in search mode -- if (isSearchActive() && m_searchLimitGroup) { -- search(m_lastSearchText); -- } else if (isSearchActive()) { -- endSearch(); -- } else { -- m_entryView->displayGroup(group); -- } -- -- m_previewView->setGroup(group); -- --#ifdef WITH_XC_KEESHARE -- auto shareLabel = KeeShare::sharingLabel(group); -- if (!shareLabel.isEmpty()) { -- m_shareLabel->setText(shareLabel); -- m_shareLabel->setVisible(true); -- } else { -- m_shareLabel->setVisible(false); -- } --#endif --} -- --void DatabaseWidget::onDatabaseModified() --{ -- if (!m_blockAutoSave && config()->get(Config::AutoSaveAfterEveryChange).toBool() && !m_db->isReadOnly()) { -- save(); -- } else { -- // Only block once, then reset -- m_blockAutoSave = false; -- } --} -- --QString DatabaseWidget::getCurrentSearch() --{ -- return m_lastSearchText; --} -- --void DatabaseWidget::endSearch() --{ -- if (isSearchActive()) { -- // Show the normal entry view of the current group -- emit listModeAboutToActivate(); -- m_entryView->displayGroup(currentGroup()); -- emit listModeActivated(); -- m_entryView->setFirstEntryActive(); -- // Enforce preview view update (prevents stale information if focus group is empty) -- m_previewView->setEntry(currentSelectedEntry()); -- } -- -- m_searchingLabel->setVisible(false); -- m_searchingLabel->setText(tr("Searching...")); -- -- m_lastSearchText.clear(); -- -- // Tell the search widget to clear -- emit clearSearch(); --} -- --void DatabaseWidget::emitGroupContextMenuRequested(const QPoint& pos) --{ -- emit groupContextMenuRequested(m_groupView->viewport()->mapToGlobal(pos)); --} -- --void DatabaseWidget::emitEntryContextMenuRequested(const QPoint& pos) --{ -- emit entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos)); --} -- --void DatabaseWidget::onEntryChanged(Entry* entry) --{ -- if (entry) { -- m_previewView->setEntry(entry); -- } -- -- emit entrySelectionChanged(); --} -- --bool DatabaseWidget::canDeleteCurrentGroup() const --{ -- bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); -- return !isRootGroup; --} -- --Group* DatabaseWidget::currentGroup() const --{ -- return m_groupView->currentGroup(); --} -- --void DatabaseWidget::closeEvent(QCloseEvent* event) --{ -- if (!isLocked() && !lock()) { -- event->ignore(); -- return; -- } -- -- event->accept(); --} -- --void DatabaseWidget::showEvent(QShowEvent* event) --{ -- if (!m_db->isInitialized() || isLocked()) { -- switchToOpenDatabase(); -- } -- -- event->accept(); --} -- --bool DatabaseWidget::focusNextPrevChild(bool next) --{ -- // [parent] <-> GroupView <-> EntryView <-> EntryPreview <-> [parent] -- if (next) { -- if (m_groupView->hasFocus()) { -- m_entryView->setFocus(); -- return true; -- } else if (m_entryView->hasFocus()) { -- m_previewView->setFocus(); -- return true; -- } -- } else { -- if (m_previewView->hasFocus()) { -- m_entryView->setFocus(); -- return true; -- } else if (m_entryView->hasFocus()) { -- m_groupView->setFocus(); -- return true; -- } -- } -- -- // Defer to the parent widget to make a decision -- return QStackedWidget::focusNextPrevChild(next); --} -- --bool DatabaseWidget::lock() --{ -- if (isLocked()) { -- return true; -- } -- -- // Don't try to lock the database while saving, this will cause a deadlock -- if (m_db->isSaving()) { -- QTimer::singleShot(200, this, SLOT(lock())); -- return false; -- } -- -- emit databaseLockRequested(); -- -- // ignore event if we are active and a modal dialog is still open (such as a message box or file dialog) -- if (isVisible() && QApplication::activeModalWidget()) { -- return false; -- } -- -- clipboard()->clearCopiedText(); -- -- if (isEditWidgetModified()) { -- auto result = MessageBox::question(this, -- tr("Lock Database?"), -- tr("You are editing an entry. Discard changes and lock anyway?"), -- MessageBox::Discard | MessageBox::Cancel, -- MessageBox::Cancel); -- if (result == MessageBox::Cancel) { -- return false; -- } -- } -- -- if (m_db->isModified()) { -- bool saved = false; -- // Attempt to save on exit, but don't block locking if it fails -- if (config()->get(Config::AutoSaveOnExit).toBool() -- || config()->get(Config::AutoSaveAfterEveryChange).toBool()) { -- saved = save(); -- } -- -- if (!saved) { -- QString msg; -- if (!m_db->metadata()->name().toHtmlEscaped().isEmpty()) { -- msg = tr("\"%1\" was modified.\nSave changes?").arg(m_db->metadata()->name().toHtmlEscaped()); -- } else { -- msg = tr("Database was modified.\nSave changes?"); -- } -- auto result = MessageBox::question(this, -- tr("Save changes?"), -- msg, -- MessageBox::Save | MessageBox::Discard | MessageBox::Cancel, -- MessageBox::Save); -- if (result == MessageBox::Save) { -- if (!save()) { -- return false; -- } -- } else if (result == MessageBox::Cancel) { -- return false; -- } -- } -- } else if (m_db->hasNonDataChanges() && config()->get(Config::AutoSaveNonDataChanges).toBool()) { -- // Silently auto-save non-data changes, ignore errors -- QString errorMessage; -- performSave(errorMessage); -- } -- -- if (m_groupView->currentGroup()) { -- m_groupBeforeLock = m_groupView->currentGroup()->uuid(); -- } else { -- m_groupBeforeLock = m_db->rootGroup()->uuid(); -- } -- -- auto currentEntry = currentSelectedEntry(); -- if (currentEntry) { -- m_entryBeforeLock = currentEntry->uuid(); -- } -- --#ifdef WITH_XC_SSHAGENT -- sshAgent()->databaseLocked(m_db); --#endif -- -- endSearch(); -- clearAllWidgets(); -- switchToOpenDatabase(m_db->filePath()); -- -- auto newDb = QSharedPointer::create(m_db->filePath()); -- replaceDatabase(newDb); -- -- emit databaseLocked(); -- -- return true; --} -- --void DatabaseWidget::reloadDatabaseFile() --{ -- // Ignore reload if we are locked or currently editing an entry or group -- if (!m_db || isLocked() || isEntryEditActive() || isGroupEditActive()) { -- return; -- } -- -- m_blockAutoSave = true; -- -- if (!config()->get(Config::AutoReloadOnChange).toBool()) { -- // Ask if we want to reload the db -- auto result = MessageBox::question(this, -- tr("File has changed"), -- tr("The database file has changed. Do you want to load the changes?"), -- MessageBox::Yes | MessageBox::No); -- -- if (result == MessageBox::No) { -- // Notify everyone the database does not match the file -- m_db->markAsModified(); -- return; -- } -- } -- -- // Lock out interactions -- m_entryView->setDisabled(true); -- m_groupView->setDisabled(true); -- QApplication::processEvents(); -- -- QString error; -- auto db = QSharedPointer::create(m_db->filePath()); -- if (db->open(database()->key(), &error)) { -- if (m_db->isModified() || db->hasNonDataChanges()) { -- // Ask if we want to merge changes into new database -- auto result = MessageBox::question( -- this, -- tr("Merge Request"), -- tr("The database file has changed and you have unsaved changes.\nDo you want to merge your changes?"), -- MessageBox::Merge | MessageBox::Discard, -- MessageBox::Merge); -- -- if (result == MessageBox::Merge) { -- // Merge the old database into the new one -- Merger merger(m_db.data(), db.data()); -- merger.merge(); -- } -- } -- -- QUuid groupBeforeReload = m_db->rootGroup()->uuid(); -- if (m_groupView && m_groupView->currentGroup()) { -- groupBeforeReload = m_groupView->currentGroup()->uuid(); -- } -- -- QUuid entryBeforeReload; -- if (m_entryView && m_entryView->currentEntry()) { -- entryBeforeReload = m_entryView->currentEntry()->uuid(); -- } -- -- replaceDatabase(db); -- processAutoOpen(); -- restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload); -- m_blockAutoSave = false; -- } else { -- showMessage(tr("Could not open the new database file while attempting to autoreload.\nError: %1").arg(error), -- MessageWidget::Error); -- // Mark db as modified since existing data may differ from file or file was deleted -- m_db->markAsModified(); -- } -- -- // Return control -- m_entryView->setDisabled(false); -- m_groupView->setDisabled(false); --} -- --int DatabaseWidget::numberOfSelectedEntries() const --{ -- return m_entryView->numberOfSelectedEntries(); --} -- --int DatabaseWidget::currentEntryIndex() const --{ -- return m_entryView->currentEntryIndex(); --} -- --QStringList DatabaseWidget::customEntryAttributes() const --{ -- Entry* entry = m_entryView->currentEntry(); -- if (!entry) { -- return QStringList(); -- } -- -- return entry->attributes()->customKeys(); --} -- --/* -- * Restores the focus on the group and entry provided -- */ --void DatabaseWidget::restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& entryUuid) --{ -- auto group = m_db->rootGroup()->findGroupByUuid(groupUuid); -- if (group) { -- m_groupView->setCurrentGroup(group); -- auto entry = group->findEntryByUuid(entryUuid, false); -- if (entry) { -- m_entryView->setCurrentEntry(entry); -- } -- } --} -- --bool DatabaseWidget::isGroupSelected() const --{ -- return m_groupView->currentGroup(); --} -- --bool DatabaseWidget::currentEntryHasTitle() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return !currentEntry->title().isEmpty(); --} -- --bool DatabaseWidget::currentEntryHasUsername() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return !currentEntry->resolveMultiplePlaceholders(currentEntry->username()).isEmpty(); --} -- --bool DatabaseWidget::currentEntryHasPassword() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return !currentEntry->resolveMultiplePlaceholders(currentEntry->password()).isEmpty(); --} -- --bool DatabaseWidget::currentEntryHasUrl() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return !currentEntry->resolveMultiplePlaceholders(currentEntry->url()).isEmpty(); --} -- --bool DatabaseWidget::currentEntryHasTotp() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return currentEntry->hasTotp(); --} -- --#ifdef WITH_XC_SSHAGENT --bool DatabaseWidget::currentEntryHasSshKey() --{ -- Entry* currentEntry = m_entryView->currentEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- -- return KeeAgentSettings::inEntryAttachments(currentEntry->attachments()); --} --#endif -- --bool DatabaseWidget::currentEntryHasNotes() --{ -- auto currentEntry = currentSelectedEntry(); -- Q_ASSERT(currentEntry); -- if (!currentEntry) { -- return false; -- } -- return !currentEntry->resolveMultiplePlaceholders(currentEntry->notes()).isEmpty(); --} -- --GroupView* DatabaseWidget::groupView() --{ -- return m_groupView; --} -- --EntryView* DatabaseWidget::entryView() --{ -- return m_entryView; --} -- --/** -- * Save the database to disk. -- * -- * This method will try to save several times in case of failure and -- * ask to disable safe saves if it is unable to save after the third attempt. -- * Set `attempt` to -1 to disable this behavior. -- * -- * @return true on success -- */ --bool DatabaseWidget::save() --{ -- // Never allow saving a locked database; it causes corruption -- Q_ASSERT(!isLocked()); -- // Release build interlock -- if (isLocked()) { -- // We return true since a save is not required -- return true; -- } -- -- // Read-only and new databases ask for filename -- if (m_db->isReadOnly() || m_db->filePath().isEmpty()) { -- return saveAs(); -- } -- -- // Prevent recursions and infinite save loops -- m_blockAutoSave = true; -- ++m_saveAttempts; -- -- QString errorMessage; -- if (performSave(errorMessage)) { -- m_saveAttempts = 0; -- m_blockAutoSave = false; -- return true; -- } -- -- if (m_saveAttempts > 2 && config()->get(Config::UseAtomicSaves).toBool()) { -- // Saving failed 3 times, issue a warning and attempt to resolve -- auto result = MessageBox::question(this, -- tr("Disable safe saves?"), -- tr("KeePassXC has failed to save the database multiple times. " -- "This is likely caused by file sync services holding a lock on " -- "the save file.\nDisable safe saves and try again?"), -- MessageBox::Disable | MessageBox::Cancel, -- MessageBox::Disable); -- if (result == MessageBox::Disable) { -- config()->set(Config::UseAtomicSaves, false); -- return save(); -- } -- } -- -- showMessage(tr("Writing the database failed: %1").arg(errorMessage), -- MessageWidget::Error, -- true, -- MessageWidget::LongAutoHideTimeout); -- -- return false; --} -- --/** -- * Save database under a new user-selected filename. -- * -- * @return true on success -- */ --bool DatabaseWidget::saveAs() --{ -- // Never allow saving a locked database; it causes corruption -- Q_ASSERT(!isLocked()); -- // Release build interlock -- if (isLocked()) { -- // We return true since a save is not required -- return true; -- } -- -- QString oldFilePath = m_db->filePath(); -- if (!QFileInfo::exists(oldFilePath)) { -- oldFilePath = -- QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" + tr("Passwords").append(".kdbx")); -- } -- const QString newFilePath = fileDialog()->getSaveFileName( -- this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr); -- -- bool ok = false; -- if (!newFilePath.isEmpty()) { -- QString errorMessage; -- if (!performSave(errorMessage, newFilePath)) { -- showMessage(tr("Writing the database failed: %1").arg(errorMessage), -- MessageWidget::Error, -- true, -- MessageWidget::LongAutoHideTimeout); -- } -- } -- -- return ok; --} -- --bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName) --{ -- QPointer focusWidget(qApp->focusWidget()); -- -- // Lock out interactions -- m_entryView->setDisabled(true); -- m_groupView->setDisabled(true); -- QApplication::processEvents(); -- -- bool ok; -- if (fileName.isEmpty()) { -- ok = m_db->save(&errorMessage, -- config()->get(Config::UseAtomicSaves).toBool(), -- config()->get(Config::BackupBeforeSave).toBool()); -- } else { -- ok = m_db->saveAs(fileName, -- &errorMessage, -- config()->get(Config::UseAtomicSaves).toBool(), -- config()->get(Config::BackupBeforeSave).toBool()); -- } -- -- // Return control -- m_entryView->setDisabled(false); -- m_groupView->setDisabled(false); -- -- if (focusWidget) { -- focusWidget->setFocus(); -- } -- -- return ok; --} -- --/** -- * Save copy of database under a new user-selected filename. -- * -- * @return true on success -- */ --bool DatabaseWidget::saveBackup() --{ -- while (true) { -- QString oldFilePath = m_db->filePath(); -- if (!QFileInfo::exists(oldFilePath)) { -- oldFilePath = QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" -- + tr("Passwords").append(".kdbx")); -- } -- const QString newFilePath = fileDialog()->getSaveFileName(this, -- tr("Save database backup"), -- oldFilePath, -- tr("KeePass 2 Database").append(" (*.kdbx)"), -- nullptr, -- nullptr); -- -- if (!newFilePath.isEmpty()) { -- // Ensure we don't recurse back into this function -- m_db->setReadOnly(false); -- m_db->setFilePath(newFilePath); -- m_saveAttempts = 0; -- -- bool modified = m_db->isModified(); -- -- if (!save()) { -- // Failed to save, try again -- m_db->setFilePath(oldFilePath); -- continue; -- } -- -- m_db->setFilePath(oldFilePath); -- if (modified) { -- // Source database is marked as clean when copy is saved, even if source has unsaved changes -- m_db->markAsModified(); -- } -- return true; -- } -- -- // Canceled file selection -- return false; -- } --} -- --void DatabaseWidget::showMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton, -- int autoHideTimeout) --{ -- m_messageWidget->setCloseButtonVisible(showClosebutton); -- m_messageWidget->showMessage(text, type, autoHideTimeout); --} -- --void DatabaseWidget::showErrorMessage(const QString& errorMessage) --{ -- showMessage(errorMessage, MessageWidget::MessageType::Error); --} -- --void DatabaseWidget::hideMessage() --{ -- if (m_messageWidget->isVisible()) { -- m_messageWidget->animatedHide(); -- } --} -- --bool DatabaseWidget::isRecycleBinSelected() const --{ -- return m_groupView->currentGroup() && m_groupView->currentGroup() == m_db->metadata()->recycleBin(); --} -- --void DatabaseWidget::emptyRecycleBin() --{ -- if (!isRecycleBinSelected()) { -- return; -- } -- -- auto result = -- MessageBox::question(this, -- tr("Empty recycle bin?"), -- tr("Are you sure you want to permanently delete everything from your recycle bin?"), -- MessageBox::Empty | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Empty) { -- m_db->emptyRecycleBin(); -- refreshSearch(); -- } --} -- --void DatabaseWidget::processAutoOpen() --{ -- Q_ASSERT(m_db); -- -- auto* autoopenGroup = m_db->rootGroup()->findGroupByPath("/AutoOpen"); -- if (!autoopenGroup) { -- return; -- } -- -- for (const auto* entry : autoopenGroup->entries()) { -- if (entry->url().isEmpty() || (entry->password().isEmpty() && entry->username().isEmpty())) { -- continue; -- } -- -- // Support ifDevice advanced entry, a comma separated list of computer names -- // that control whether to perform AutoOpen on this entry or not. Can be -- // negated using '!' -- auto ifDevice = entry->attribute("IfDevice"); -- if (!ifDevice.isEmpty()) { -- bool loadDb = false; -- auto hostName = QHostInfo::localHostName(); -- for (auto& device : ifDevice.split(",")) { -- device = device.trimmed(); -- if (device.startsWith("!")) { -- if (device.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) { -- // Machine name matched an exclusion, don't load this database -- loadDb = false; -- break; -- } else { -- // Not matching an exclusion allows loading on all machines -- loadDb = true; -- } -- } else if (device.compare(hostName, Qt::CaseInsensitive) == 0) { -- // Explicitly named for loading -- loadDb = true; -- } -- } -- if (!loadDb) { -- continue; -- } -- } -- -- openDatabaseFromEntry(entry); -- } --} -- --void DatabaseWidget::openDatabaseFromEntry(const Entry* entry, bool inBackground) --{ -- auto keyFile = entry->resolveMultiplePlaceholders(entry->username()); -- auto password = entry->resolveMultiplePlaceholders(entry->password()); -- auto databaseUrl = entry->resolveMultiplePlaceholders(entry->url()); -- if (databaseUrl.startsWith("kdbx://")) { -- databaseUrl = databaseUrl.mid(7); -- } -- -- QFileInfo dbFileInfo; -- if (databaseUrl.startsWith("file://")) { -- QUrl url(databaseUrl); -- dbFileInfo.setFile(url.toLocalFile()); -- } else { -- dbFileInfo.setFile(databaseUrl); -- if (dbFileInfo.isRelative()) { -- QFileInfo currentpath(m_db->filePath()); -- dbFileInfo.setFile(currentpath.absoluteDir(), databaseUrl); -- } -- } -- -- if (!dbFileInfo.isFile()) { -- showErrorMessage(tr("Could not find database file: %1").arg(databaseUrl)); -- return; -- } -- -- QFileInfo keyFileInfo; -- if (!keyFile.isEmpty()) { -- if (keyFile.startsWith("file://")) { -- QUrl keyfileUrl(keyFile); -- keyFileInfo.setFile(keyfileUrl.toLocalFile()); -- } else { -- keyFileInfo.setFile(keyFile); -- if (keyFileInfo.isRelative()) { -- QFileInfo currentpath(m_db->filePath()); -- keyFileInfo.setFile(currentpath.absoluteDir(), keyFile); -- } -- } -- } -- -- // Request to open the database file in the background with a password and keyfile -- emit requestOpenDatabase(dbFileInfo.canonicalFilePath(), inBackground, password, keyFileInfo.canonicalFilePath()); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseWidget.h ---- keepassxc-2.6.4-orig/src/gui/DatabaseWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,301 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASEWIDGET_H --#define KEEPASSX_DATABASEWIDGET_H -- --#include --#include --#include --#include -- --#include "DatabaseOpenDialog.h" --#include "config-keepassx.h" --#include "gui/MessageWidget.h" --#include "gui/csvImport/CsvImportWizard.h" --#include "gui/entry/EntryModel.h" -- --class DatabaseOpenWidget; --class KeePass1OpenWidget; --class OpVaultOpenWidget; --class DatabaseSettingsDialog; --class ReportsDialog; --class Database; --class FileWatcher; --class EditEntryWidget; --class EditGroupWidget; --class Entry; --class EntryView; --class EntrySearcher; --class Group; --class GroupView; --class QFile; --class QMenu; --class QSplitter; --class QLabel; --class MessageWidget; --class EntryPreviewWidget; -- --namespace Ui --{ -- class SearchWidget; --} -- --class DatabaseWidget : public QStackedWidget --{ -- Q_OBJECT -- --public: -- friend class DatabaseOpenDialog; -- -- enum class Mode -- { -- None, -- ImportMode, -- ViewMode, -- EditMode, -- LockedMode -- }; -- -- explicit DatabaseWidget(QSharedPointer db, QWidget* parent = nullptr); -- explicit DatabaseWidget(const QString& filePath, QWidget* parent = nullptr); -- ~DatabaseWidget(); -- -- void setFocus(Qt::FocusReason reason); -- -- QSharedPointer database() const; -- -- DatabaseWidget::Mode currentMode() const; -- bool isLocked() const; -- bool isSaving() const; -- bool isSorted() const; -- bool isSearchActive() const; -- bool isEntryViewActive() const; -- bool isEntryEditActive() const; -- bool isGroupEditActive() const; -- -- QString getCurrentSearch(); -- void refreshSearch(); -- -- GroupView* groupView(); -- EntryView* entryView(); -- -- Group* currentGroup() const; -- bool canDeleteCurrentGroup() const; -- bool isGroupSelected() const; -- bool isRecycleBinSelected() const; -- int numberOfSelectedEntries() const; -- int currentEntryIndex() const; -- -- QStringList customEntryAttributes() const; -- bool isEditWidgetModified() const; -- void clearAllWidgets(); -- bool currentEntryHasTitle(); -- bool currentEntryHasUsername(); -- bool currentEntryHasPassword(); -- bool currentEntryHasUrl(); -- bool currentEntryHasNotes(); -- bool currentEntryHasTotp(); --#ifdef WITH_XC_SSHAGENT -- bool currentEntryHasSshKey(); --#endif -- -- QByteArray entryViewState() const; -- bool setEntryViewState(const QByteArray& state) const; -- QList mainSplitterSizes() const; -- void setMainSplitterSizes(const QList& sizes); -- QList previewSplitterSizes() const; -- void setPreviewSplitterSizes(const QList& sizes); -- --signals: -- // relayed Database signals -- void databaseFilePathChanged(const QString& oldPath, const QString& newPath); -- void databaseModified(); -- void databaseSaved(); -- void databaseUnlocked(); -- void databaseLockRequested(); -- void databaseLocked(); -- -- // Emitted in replaceDatabase, may be caused by lock, reload, unlock, load. -- void databaseReplaced(const QSharedPointer& oldDb, const QSharedPointer& newDb); -- -- void closeRequest(); -- void currentModeChanged(DatabaseWidget::Mode mode); -- void groupChanged(); -- void entrySelectionChanged(); -- void -- requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password, const QString& keyFile); -- void databaseMerged(QSharedPointer mergedDb); -- void groupContextMenuRequested(const QPoint& globalPos); -- void entryContextMenuRequested(const QPoint& globalPos); -- void listModeAboutToActivate(); -- void listModeActivated(); -- void searchModeAboutToActivate(); -- void searchModeActivated(); -- void mainSplitterSizesChanged(); -- void previewSplitterSizesChanged(); -- void entryViewStateChanged(); -- void clearSearch(); -- --public slots: -- bool lock(); -- bool save(); -- bool saveAs(); -- bool saveBackup(); -- -- void replaceDatabase(QSharedPointer db); -- void createEntry(); -- void cloneEntry(); -- void deleteSelectedEntries(); -- void deleteEntries(QList entries); -- void focusOnEntries(bool editIfFocused = false); -- void focusOnGroups(bool editIfFocused = false); -- void moveEntryUp(); -- void moveEntryDown(); -- void copyTitle(); -- void copyUsername(); -- void copyPassword(); -- void copyURL(); -- void copyNotes(); -- void copyAttribute(QAction* action); -- void showTotp(); -- void showTotpKeyQrCode(); -- void copyTotp(); -- void setupTotp(); --#ifdef WITH_XC_SSHAGENT -- void addToAgent(); -- void removeFromAgent(); --#endif -- void performAutoType(); -- void performAutoTypeUsername(); -- void performAutoTypeUsernameEnter(); -- void performAutoTypePassword(); -- void performAutoTypePasswordEnter(); -- void openUrl(); -- void downloadSelectedFavicons(); -- void downloadAllFavicons(); -- void openUrlForEntry(Entry* entry); -- void createGroup(); -- void deleteGroup(); -- void switchToMainView(bool previousDialogAccepted = false); -- void switchToEntryEdit(); -- void switchToGroupEdit(); -- void sortGroupsAsc(); -- void sortGroupsDesc(); -- void switchToDatabaseSecurity(); -- void switchToDatabaseReports(); -- void switchToDatabaseSettings(); -- void switchToOpenDatabase(); -- void switchToOpenDatabase(const QString& filePath); -- void switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile); -- void switchToCsvImport(const QString& filePath); -- void performUnlockDatabase(const QString& password, const QString& keyfile = {}); -- void csvImportFinished(bool accepted); -- void switchToImportKeepass1(const QString& filePath); -- void switchToImportOpVault(const QString& fileName); -- void emptyRecycleBin(); -- -- // Search related slots -- void search(const QString& searchtext); -- void setSearchCaseSensitive(bool state); -- void setSearchLimitGroup(bool state); -- void endSearch(); -- -- void showMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton = true, -- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); -- void showErrorMessage(const QString& errorMessage); -- void hideMessage(); -- --protected: -- void closeEvent(QCloseEvent* event) override; -- void showEvent(QShowEvent* event) override; -- bool focusNextPrevChild(bool next) override; -- --private slots: -- void entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column); -- void switchBackToEntryEdit(); -- void switchToHistoryView(Entry* entry); -- void switchToEntryEdit(Entry*); -- void switchToEntryEdit(Entry* entry, bool create); -- void switchToGroupEdit(Group* entry, bool create); -- void emitGroupContextMenuRequested(const QPoint& pos); -- void emitEntryContextMenuRequested(const QPoint& pos); -- void onEntryChanged(Entry* entry); -- void onGroupChanged(); -- void onDatabaseModified(); -- void connectDatabaseSignals(); -- void loadDatabase(bool accepted); -- void unlockDatabase(bool accepted); -- void mergeDatabase(bool accepted); -- void emitCurrentModeChanged(); -- // Database autoreload slots -- void reloadDatabaseFile(); -- void restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& EntryUuid); -- --private: -- int addChildWidget(QWidget* w); -- void setClipboardTextAndMinimize(const QString& text); -- void processAutoOpen(); -- void openDatabaseFromEntry(const Entry* entry, bool inBackground = true); -- bool confirmDeleteEntries(QList entries, bool permanent); -- void performIconDownloads(const QList& entries, bool force = false); -- bool performSave(QString& errorMessage, const QString& fileName = {}); -- Entry* currentSelectedEntry(); -- -- QSharedPointer m_db; -- -- QPointer m_mainWidget; -- QPointer m_mainSplitter; -- QPointer m_messageWidget; -- QPointer m_previewView; -- QPointer m_previewSplitter; -- QPointer m_searchingLabel; -- QPointer m_shareLabel; -- QPointer m_csvImportWizard; -- QPointer m_editEntryWidget; -- QPointer m_editGroupWidget; -- QPointer m_historyEditEntryWidget; -- QPointer m_reportsDialog; -- QPointer m_databaseSettingDialog; -- QPointer m_databaseOpenWidget; -- QPointer m_keepass1OpenWidget; -- QPointer m_opVaultOpenWidget; -- QPointer m_groupView; -- QPointer m_entryView; -- -- QScopedPointer m_newGroup; -- QScopedPointer m_newEntry; -- QPointer m_newParent; -- -- QUuid m_groupBeforeLock; -- QUuid m_entryBeforeLock; -- -- int m_saveAttempts; -- -- // Search state -- EntrySearcher* m_EntrySearcher; -- QString m_lastSearchText; -- bool m_searchLimitGroup; -- -- // Autoreload -- bool m_blockAutoSave; --}; -- --#endif // KEEPASSX_DATABASEWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.cpp keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.cpp ---- keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,198 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2014 Felix Geyer -- * Copyright (C) 2014 Florian Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseWidgetStateSync.h" -- --#include "core/Config.h" --#include -- --DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) -- : QObject(parent) -- , m_activeDbWidget(nullptr) -- , m_blockUpdates(false) --{ -- m_mainSplitterSizes = variantToIntList(config()->get(Config::GUI_SplitterState)); -- m_previewSplitterSizes = variantToIntList(config()->get(Config::GUI_PreviewSplitterState)); -- m_listViewState = config()->get(Config::GUI_ListViewState).toByteArray(); -- m_searchViewState = config()->get(Config::GUI_SearchViewState).toByteArray(); -- -- connect(qApp, &QCoreApplication::aboutToQuit, this, &DatabaseWidgetStateSync::sync); --} -- --DatabaseWidgetStateSync::~DatabaseWidgetStateSync() --{ --} -- --/** -- * Sync state with persistent storage. -- */ --void DatabaseWidgetStateSync::sync() --{ -- config()->set(Config::GUI_SplitterState, intListToVariant(m_mainSplitterSizes)); -- config()->set(Config::GUI_PreviewSplitterState, intListToVariant(m_previewSplitterSizes)); -- config()->set(Config::GUI_ListViewState, m_listViewState); -- config()->set(Config::GUI_SearchViewState, m_searchViewState); -- config()->sync(); --} -- --void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) --{ -- if (m_activeDbWidget) { -- disconnect(m_activeDbWidget, nullptr, this, nullptr); -- } -- -- m_activeDbWidget = dbWidget; -- -- if (m_activeDbWidget) { -- m_blockUpdates = true; -- -- if (!m_mainSplitterSizes.isEmpty()) { -- m_activeDbWidget->setMainSplitterSizes(m_mainSplitterSizes); -- } -- -- if (!m_previewSplitterSizes.isEmpty()) { -- m_activeDbWidget->setPreviewSplitterSizes(m_previewSplitterSizes); -- } -- -- if (m_activeDbWidget->isSearchActive()) { -- restoreSearchView(); -- } else { -- restoreListView(); -- } -- -- m_blockUpdates = false; -- -- connect(m_activeDbWidget, SIGNAL(mainSplitterSizesChanged()), SLOT(updateSplitterSizes())); -- connect(m_activeDbWidget, SIGNAL(previewSplitterSizesChanged()), SLOT(updateSplitterSizes())); -- connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), SLOT(updateViewState())); -- connect(m_activeDbWidget, SIGNAL(listModeActivated()), SLOT(restoreListView())); -- connect(m_activeDbWidget, SIGNAL(searchModeActivated()), SLOT(restoreSearchView())); -- connect(m_activeDbWidget, SIGNAL(listModeAboutToActivate()), SLOT(blockUpdates())); -- connect(m_activeDbWidget, SIGNAL(searchModeAboutToActivate()), SLOT(blockUpdates())); -- } --} -- --/** -- * Restore entry view list view state -- * -- * NOTE: -- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, -- * i.e. they are the same for both list and search mode -- * -- * NOTE: -- * If m_listViewState is empty, the list view has been activated for the first -- * time after starting with a clean (or invalid) config. -- */ --void DatabaseWidgetStateSync::restoreListView() --{ -- if (!m_listViewState.isEmpty()) { -- m_activeDbWidget->setEntryViewState(m_listViewState); -- } -- -- m_blockUpdates = false; --} -- --/** -- * Restore entry view search view state -- * -- * NOTE: -- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, -- * i.e. they are the same for both list and search mode -- * -- * NOTE: -- * If m_searchViewState is empty, the search view has been activated for the -- * first time after starting with a clean (or invalid) config. Thus, save the -- * current state. Without this, m_searchViewState would remain empty until -- * there is an actual view state change (e.g. column is resized) -- */ --void DatabaseWidgetStateSync::restoreSearchView() --{ -- if (!m_searchViewState.isEmpty()) { -- m_activeDbWidget->setEntryViewState(m_searchViewState); -- } else { -- m_searchViewState = m_activeDbWidget->entryViewState(); -- } -- -- m_blockUpdates = false; --} -- --void DatabaseWidgetStateSync::blockUpdates() --{ -- m_blockUpdates = true; --} -- --void DatabaseWidgetStateSync::updateSplitterSizes() --{ -- if (m_blockUpdates) { -- return; -- } -- -- m_mainSplitterSizes = m_activeDbWidget->mainSplitterSizes(); -- m_previewSplitterSizes = m_activeDbWidget->previewSplitterSizes(); --} -- --/** -- * Update entry view list/search view state -- * -- * NOTE: -- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, -- * i.e. they are the same for both list and search mode -- */ --void DatabaseWidgetStateSync::updateViewState() --{ -- if (m_blockUpdates) { -- return; -- } -- -- if (m_activeDbWidget->isSearchActive()) { -- m_searchViewState = m_activeDbWidget->entryViewState(); -- } else { -- m_listViewState = m_activeDbWidget->entryViewState(); -- } --} -- --QList DatabaseWidgetStateSync::variantToIntList(const QVariant& variant) --{ -- const QVariantList list = variant.toList(); -- QList result; -- -- for (const QVariant& var : list) { -- bool ok; -- int size = var.toInt(&ok); -- if (ok) { -- result.append(size); -- } else { -- result.clear(); -- break; -- } -- } -- -- return result; --} -- --QVariant DatabaseWidgetStateSync::intListToVariant(const QList& list) --{ -- QVariantList result; -- -- for (int value : list) { -- result.append(value); -- } -- -- return result; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.h keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.h ---- keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,58 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2014 Felix Geyer -- * Copyright (C) 2014 Florian Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASEWIDGETSTATESYNC_H --#define KEEPASSX_DATABASEWIDGETSTATESYNC_H -- --#include "gui/DatabaseWidget.h" -- --class DatabaseWidgetStateSync : public QObject --{ -- Q_OBJECT -- --public: -- explicit DatabaseWidgetStateSync(QObject* parent = nullptr); -- ~DatabaseWidgetStateSync() override; -- --public slots: -- void setActive(DatabaseWidget* dbWidget); -- void restoreListView(); -- void restoreSearchView(); -- --private slots: -- void blockUpdates(); -- void updateSplitterSizes(); -- void updateViewState(); -- void sync(); -- --private: -- static QList variantToIntList(const QVariant& variant); -- static QVariant intListToVariant(const QList& list); -- -- QPointer m_activeDbWidget; -- -- bool m_blockUpdates; -- QList m_mainSplitterSizes; -- QList m_previewSplitterSizes; -- -- QByteArray m_listViewState; -- QByteArray m_searchViewState; --}; -- --#endif // KEEPASSX_DATABASEWIDGETSTATESYNC_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,221 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsDialog.h" --#include "ui_DatabaseSettingsDialog.h" -- --#include "DatabaseSettingsWidgetDatabaseKey.h" --#include "DatabaseSettingsWidgetEncryption.h" --#include "DatabaseSettingsWidgetGeneral.h" --#ifdef WITH_XC_BROWSER --#include "DatabaseSettingsWidgetBrowser.h" --#endif --#if defined(WITH_XC_KEESHARE) --#include "keeshare/DatabaseSettingsPageKeeShare.h" --#endif --#if defined(WITH_XC_FDOSECRETS) --#include "fdosecrets/DatabaseSettingsPageFdoSecrets.h" --#endif -- --#include "core/Config.h" --#include "core/Database.h" --#include "core/Global.h" --#include "core/Resources.h" --#include "touchid/TouchID.h" -- --#include -- --class DatabaseSettingsDialog::ExtraPage --{ --public: -- ExtraPage(IDatabaseSettingsPage* page, QWidget* widget) -- : settingsPage(page) -- , widget(widget) -- { -- } -- void loadSettings(QSharedPointer db) const -- { -- settingsPage->loadSettings(widget, db); -- } -- void saveSettings() const -- { -- settingsPage->saveSettings(widget); -- } -- --private: -- QSharedPointer settingsPage; -- QWidget* widget; --}; -- --DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent) -- : DialogyWidget(parent) -- , m_ui(new Ui::DatabaseSettingsDialog()) -- , m_generalWidget(new DatabaseSettingsWidgetGeneral(this)) -- , m_securityTabWidget(new QTabWidget(this)) -- , m_databaseKeyWidget(new DatabaseSettingsWidgetDatabaseKey(this)) -- , m_encryptionWidget(new DatabaseSettingsWidgetEncryption(this)) --#ifdef WITH_XC_BROWSER -- , m_browserWidget(new DatabaseSettingsWidgetBrowser(this)) --#endif --{ -- m_ui->setupUi(this); -- -- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save())); -- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); -- -- m_ui->categoryList->addCategory(tr("General"), Resources::instance()->icon("preferences-other")); -- m_ui->categoryList->addCategory(tr("Security"), Resources::instance()->icon("security-high")); -- m_ui->stackedWidget->addWidget(m_generalWidget); -- -- m_ui->stackedWidget->addWidget(m_securityTabWidget); -- -- auto* scrollArea = new QScrollArea(parent); -- scrollArea->setFrameShape(QFrame::NoFrame); -- scrollArea->setFrameShadow(QFrame::Plain); -- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); -- scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents); -- scrollArea->setWidgetResizable(true); -- scrollArea->setWidget(m_databaseKeyWidget); -- m_securityTabWidget->addTab(scrollArea, tr("Database Credentials")); -- -- m_securityTabWidget->addTab(m_encryptionWidget, tr("Encryption Settings")); -- --#if defined(WITH_XC_KEESHARE) -- addSettingsPage(new DatabaseSettingsPageKeeShare()); --#endif -- --#if defined(WITH_XC_FDOSECRETS) -- addSettingsPage(new DatabaseSettingsPageFdoSecrets()); --#endif -- -- m_ui->stackedWidget->setCurrentIndex(0); -- m_securityTabWidget->setCurrentIndex(0); -- -- connect(m_securityTabWidget, SIGNAL(currentChanged(int)), SLOT(pageChanged())); -- connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); -- connect(m_ui->advancedSettingsToggle, SIGNAL(toggled(bool)), SLOT(toggleAdvancedMode(bool))); -- --#ifdef WITH_XC_BROWSER -- m_ui->categoryList->addCategory(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser")); -- m_ui->stackedWidget->addWidget(m_browserWidget); --#endif -- -- pageChanged(); --} -- --DatabaseSettingsDialog::~DatabaseSettingsDialog() --{ --} -- --void DatabaseSettingsDialog::load(const QSharedPointer& db) --{ -- m_ui->categoryList->setCurrentCategory(0); -- m_generalWidget->load(db); -- m_databaseKeyWidget->load(db); -- m_encryptionWidget->load(db); --#ifdef WITH_XC_BROWSER -- m_browserWidget->load(db); --#endif -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.loadSettings(db); -- } -- m_ui->advancedSettingsToggle->setChecked(config()->get(Config::GUI_AdvancedSettings).toBool()); -- m_db = db; --} -- --void DatabaseSettingsDialog::addSettingsPage(IDatabaseSettingsPage* page) --{ -- const int category = m_ui->categoryList->currentCategory(); -- QWidget* widget = page->createWidget(); -- widget->setParent(this); -- m_extraPages.append(ExtraPage(page, widget)); -- m_ui->stackedWidget->addWidget(widget); -- m_ui->categoryList->addCategory(page->name(), page->icon()); -- m_ui->categoryList->setCurrentCategory(category); --} -- --/** -- * Show page and tab with database database key settings. -- */ --void DatabaseSettingsDialog::showDatabaseKeySettings() --{ -- m_ui->categoryList->setCurrentCategory(1); -- m_securityTabWidget->setCurrentIndex(0); --} -- --void DatabaseSettingsDialog::save() --{ -- if (!m_generalWidget->save()) { -- return; -- } -- -- if (!m_databaseKeyWidget->save()) { -- return; -- } -- -- if (!m_encryptionWidget->save()) { -- return; -- } -- -- for (const ExtraPage& extraPage : asConst(m_extraPages)) { -- extraPage.saveSettings(); -- } -- --#ifdef WITH_XC_TOUCHID -- TouchID::getInstance().reset(m_db ? m_db->filePath() : ""); --#endif -- -- emit editFinished(true); --} -- --void DatabaseSettingsDialog::reject() --{ -- emit editFinished(false); --} -- --void DatabaseSettingsDialog::pageChanged() --{ -- int pageIndex = m_ui->stackedWidget->currentIndex(); -- -- bool enabled = (pageIndex == Page::General && m_generalWidget->hasAdvancedMode()); -- -- if (Page::Security == pageIndex) { -- int tabIndex = m_securityTabWidget->currentIndex(); -- enabled = (tabIndex == 0 && m_databaseKeyWidget->hasAdvancedMode()); -- enabled |= (tabIndex == 1 && m_encryptionWidget->hasAdvancedMode()); -- } -- -- m_ui->advancedSettingsToggle->setEnabled(enabled); --} -- --void DatabaseSettingsDialog::toggleAdvancedMode(bool advanced) --{ -- if (m_generalWidget->hasAdvancedMode()) { -- m_generalWidget->setAdvancedMode(advanced); -- } -- -- if (m_databaseKeyWidget->hasAdvancedMode()) { -- m_databaseKeyWidget->setAdvancedMode(advanced); -- } -- -- if (m_encryptionWidget->hasAdvancedMode()) { -- m_encryptionWidget->setAdvancedMode(advanced); -- } -- -- config()->set(Config::GUI_AdvancedSettings, advanced); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,98 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DATABASESETTINGSWIDGET_H --#define KEEPASSX_DATABASESETTINGSWIDGET_H -- --#include "config-keepassx.h" --#include "gui/DialogyWidget.h" -- --#include --#include --#include -- --class Database; --class DatabaseSettingsWidgetGeneral; --class DatabaseSettingsWidgetEncryption; --class DatabaseSettingsWidgetDatabaseKey; --#ifdef WITH_XC_BROWSER --class DatabaseSettingsWidgetBrowser; --#endif --class QTabWidget; -- --namespace Ui --{ -- class DatabaseSettingsDialog; --} -- --class IDatabaseSettingsPage --{ --public: -- virtual ~IDatabaseSettingsPage() -- { -- } -- virtual QString name() = 0; -- virtual QIcon icon() = 0; -- virtual QWidget* createWidget() = 0; -- virtual void loadSettings(QWidget* widget, QSharedPointer db) = 0; -- virtual void saveSettings(QWidget* widget) = 0; --}; -- --class DatabaseSettingsDialog : public DialogyWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsDialog(QWidget* parent = nullptr); -- ~DatabaseSettingsDialog() override; -- Q_DISABLE_COPY(DatabaseSettingsDialog); -- -- void load(const QSharedPointer& db); -- void addSettingsPage(IDatabaseSettingsPage* page); -- void showDatabaseKeySettings(); -- --signals: -- void editFinished(bool accepted); -- --private slots: -- void save(); -- void reject(); -- void pageChanged(); -- void toggleAdvancedMode(bool advanced); -- --private: -- enum Page -- { -- General = 0, -- Security = 1 -- }; -- -- QSharedPointer m_db; -- const QScopedPointer m_ui; -- QPointer m_generalWidget; -- QPointer m_securityTabWidget; -- QPointer m_databaseKeyWidget; -- QPointer m_encryptionWidget; --#ifdef WITH_XC_BROWSER -- QPointer m_browserWidget; --#endif -- -- class ExtraPage; -- QList m_extraPages; --}; -- --#endif // KEEPASSX_DATABASESETTINGSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.ui ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ -- -- -- DatabaseSettingsDialog -- -- -- -- -- -- -- -- -- -- -- -1 -- -- -- -- -- -- -- -- -- -- -- Advanced Settings -- -- -- -- -- -- -- QDialogButtonBox::Cancel|QDialogButtonBox::Ok -- -- -- -- -- -- -- -- -- -- CategoryListWidget -- QWidget --
gui/CategoryListWidget.h
-- 1 --
--
-- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,329 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2018 Sami Vänttinen -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetBrowser.h" --#include "ui_DatabaseSettingsWidgetBrowser.h" -- --#include -- --#include "browser/BrowserSettings.h" --#include "core/Clock.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "gui/MessageBox.h" -- --DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent) -- : DatabaseSettingsWidget(parent) -- , m_ui(new Ui::DatabaseSettingsWidgetBrowser()) -- , m_customData(new CustomData(this)) -- , m_customDataModel(new QStandardItemModel(this)) --{ -- m_ui->setupUi(this); -- m_ui->removeCustomDataButton->setEnabled(false); -- m_ui->customDataTable->setModel(m_customDataModel); -- -- settingsWarning(); -- -- // clang-format off -- connect(m_ui->customDataTable->selectionModel(), -- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- SLOT(toggleRemoveButton(QItemSelection))); -- connect(m_ui->customDataTable, SIGNAL(doubleClicked(QModelIndex)), SLOT(editIndex(QModelIndex))); -- connect(m_customDataModel, SIGNAL(itemChanged(QStandardItem*)), SLOT(editFinished(QStandardItem*))); -- // clang-format on -- -- connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey())); -- connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(convertAttributesToCustomData())); -- connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); -- connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(removeSharedEncryptionKeys())); -- connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); -- connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SLOT(removeStoredPermissions())); -- connect(m_ui->refreshDatabaseID, SIGNAL(clicked()), this, SLOT(refreshDatabaseID())); --} -- --DatabaseSettingsWidgetBrowser::~DatabaseSettingsWidgetBrowser() --{ --} -- --CustomData* DatabaseSettingsWidgetBrowser::customData() const --{ -- // Returns the current database customData from metadata. Otherwise return an empty customData member. -- if (m_db) { -- return m_db->metadata()->customData(); -- } -- return m_customData; --} -- --void DatabaseSettingsWidgetBrowser::initialize() --{ -- updateModel(); -- settingsWarning(); --} -- --void DatabaseSettingsWidgetBrowser::uninitialize() --{ --} -- --void DatabaseSettingsWidgetBrowser::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); --} -- --bool DatabaseSettingsWidgetBrowser::save() --{ -- return true; --} -- --void DatabaseSettingsWidgetBrowser::removeSelectedKey() --{ -- if (MessageBox::Yes -- != MessageBox::question(this, -- tr("Delete the selected key?"), -- tr("Do you really want to delete the selected key?\n" -- "This may prevent connection to the browser plugin."), -- MessageBox::Yes | MessageBox::Cancel, -- MessageBox::Cancel)) { -- return; -- } -- -- const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); -- if (itemSelectionModel) { -- for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) { -- QString key = index.data().toString(); -- key.insert(0, CustomData::BrowserKeyPrefix); -- customData()->remove(key); -- } -- updateModel(); -- } --} -- --void DatabaseSettingsWidgetBrowser::toggleRemoveButton(const QItemSelection& selected) --{ -- m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty()); --} -- --void DatabaseSettingsWidgetBrowser::updateModel() --{ -- m_customDataModel->clear(); -- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value"), tr("Created")}); -- -- for (const QString& key : customData()->keys()) { -- if (key.startsWith(CustomData::BrowserKeyPrefix)) { -- QString strippedKey = key; -- strippedKey.remove(CustomData::BrowserKeyPrefix); -- auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey)); -- auto createdItem = new QStandardItem(created); -- createdItem->setEditable(false); -- m_customDataModel->appendRow(QList() -- << new QStandardItem(strippedKey) -- << new QStandardItem(customData()->value(key)) << createdItem); -- } -- } -- -- m_ui->removeCustomDataButton->setEnabled(false); --} -- --void DatabaseSettingsWidgetBrowser::settingsWarning() --{ -- if (!browserSettings()->isEnabled()) { -- m_ui->convertToCustomData->setEnabled(false); -- m_ui->removeSharedEncryptionKeys->setEnabled(false); -- m_ui->removeStoredPermissions->setEnabled(false); -- m_ui->customDataTable->setEnabled(false); -- m_ui->warningWidget->showMessage(tr("Enable Browser Integration to access these settings."), -- MessageWidget::Warning); -- m_ui->warningWidget->setCloseButtonVisible(false); -- m_ui->warningWidget->setAutoHideTimeout(-1); -- } else { -- m_ui->convertToCustomData->setEnabled(true); -- m_ui->removeSharedEncryptionKeys->setEnabled(true); -- m_ui->removeStoredPermissions->setEnabled(true); -- m_ui->customDataTable->setEnabled(true); -- m_ui->warningWidget->hideMessage(); -- } --} -- --void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys() --{ -- if (MessageBox::Yes -- != MessageBox::question(this, -- tr("Disconnect all browsers"), -- tr("Do you really want to disconnect all browsers?\n" -- "This may prevent connection to the browser plugin."), -- MessageBox::Yes | MessageBox::Cancel, -- MessageBox::Cancel)) { -- return; -- } -- -- QStringList keysToRemove; -- for (const QString& key : m_db->metadata()->customData()->keys()) { -- if (key.startsWith(CustomData::BrowserKeyPrefix)) { -- keysToRemove << key; -- } -- } -- -- if (keysToRemove.isEmpty()) { -- MessageBox::information(this, -- tr("KeePassXC: No keys found"), -- tr("No shared encryption keys found in KeePassXC settings."), -- MessageBox::Ok); -- return; -- } -- -- for (const QString& key : keysToRemove) { -- m_db->metadata()->customData()->remove(key); -- } -- -- const int count = keysToRemove.count(); -- MessageBox::information(this, -- tr("KeePassXC: Removed keys from database"), -- tr("Successfully removed %n encryption key(s) from KeePassXC settings.", "", count), -- MessageBox::Ok); --} -- --void DatabaseSettingsWidgetBrowser::removeStoredPermissions() --{ -- if (MessageBox::Yes -- != MessageBox::question(this, -- tr("Forget all site-specific settings on entries"), -- tr("Do you really want forget all site-specific settings on every entry?\n" -- "Permissions to access entries will be revoked."), -- MessageBox::Yes | MessageBox::Cancel, -- MessageBox::Cancel)) { -- return; -- } -- -- QList entries = m_db->rootGroup()->entriesRecursive(); -- -- QProgressDialog progress(tr("Removing stored permissions…"), tr("Abort"), 0, entries.count()); -- progress.setWindowModality(Qt::WindowModal); -- -- uint counter = 0; -- for (Entry* entry : entries) { -- if (progress.wasCanceled()) { -- return; -- } -- -- if (entry->customData()->contains(BrowserService::KEEPASSXCBROWSER_NAME)) { -- entry->beginUpdate(); -- entry->customData()->remove(BrowserService::KEEPASSXCBROWSER_NAME); -- entry->endUpdate(); -- ++counter; -- } -- progress.setValue(progress.value() + 1); -- } -- progress.reset(); -- -- if (counter > 0) { -- MessageBox::information(this, -- tr("KeePassXC: Removed permissions"), -- tr("Successfully removed permissions from %n entry(s).", "", counter), -- MessageBox::Ok); -- } else { -- MessageBox::information(this, -- tr("KeePassXC: No entry with permissions found!"), -- tr("The active database does not contain an entry with permissions."), -- MessageBox::Ok); -- } --} -- --void DatabaseSettingsWidgetBrowser::convertAttributesToCustomData() --{ -- if (MessageBox::Yes -- != MessageBox::question( -- this, -- tr("Move KeePassHTTP attributes to custom data"), -- tr("Do you really want to move all legacy browser integration data to the latest standard?\n" -- "This is necessary to maintain compatibility with the browser plugin."), -- MessageBox::Yes | MessageBox::Cancel, -- MessageBox::Cancel)) { -- return; -- } -- -- BrowserService::convertAttributesToCustomData(m_db); --} -- --void DatabaseSettingsWidgetBrowser::refreshDatabaseID() --{ -- if (MessageBox::Yes -- != MessageBox::question(this, -- tr("Refresh database ID"), -- tr("Do you really want refresh the database ID?\n" -- "This is only necessary if your database is a copy of another and the " -- "browser extension cannot connect."), -- MessageBox::Yes | MessageBox::Cancel, -- MessageBox::Cancel)) { -- return; -- } -- -- m_db->rootGroup()->setUuid(QUuid::createUuid()); --} -- --void DatabaseSettingsWidgetBrowser::editIndex(const QModelIndex& index) --{ -- Q_ASSERT(index.isValid()); -- if (!index.isValid()) { -- return; -- } -- -- m_valueInEdit = index.data().toString(); -- m_ui->customDataTable->edit(index); --} -- --void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item) --{ -- const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); -- -- if (itemSelectionModel) { -- auto indexList = itemSelectionModel->selectedRows(item->column()); -- if (indexList.length() > 0) { -- QString newValue = item->index().data().toString(); -- -- // The key is edited -- if (item->column() == 0) { -- // Get the old key/value pair, remove it and replace it -- m_valueInEdit.insert(0, CustomData::BrowserKeyPrefix); -- auto tempValue = customData()->value(m_valueInEdit); -- newValue.insert(0, CustomData::BrowserKeyPrefix); -- -- m_db->metadata()->customData()->remove(m_valueInEdit); -- m_db->metadata()->customData()->set(newValue, tempValue); -- } else { -- // Replace just the value -- for (const QString& key : m_db->metadata()->customData()->keys()) { -- if (key.startsWith(CustomData::BrowserKeyPrefix)) { -- if (m_valueInEdit == m_db->metadata()->customData()->value(key)) { -- m_db->metadata()->customData()->set(key, newValue); -- break; -- } -- } -- } -- } -- -- updateModel(); -- } -- } --} -- --// Updates the shared key list after the list is cleared --void DatabaseSettingsWidgetBrowser::updateSharedKeyList() --{ -- updateModel(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2018 Sami Vänttinen -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H --#define KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H -- --#include "DatabaseSettingsWidget.h" -- --#include "browser/BrowserService.h" --#include "core/CustomData.h" --#include "gui/DatabaseTabWidget.h" -- --#include --#include --#include --#include -- --class Database; --namespace Ui --{ -- class DatabaseSettingsWidgetBrowser; --} -- --class DatabaseSettingsWidgetBrowser : public DatabaseSettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsWidgetBrowser(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingsWidgetBrowser); -- ~DatabaseSettingsWidgetBrowser() override; -- -- CustomData* customData() const; -- inline bool hasAdvancedMode() const override -- { -- return false; -- } -- --public slots: -- void initialize() override; -- void uninitialize() override; -- bool save() override; -- --private slots: -- void removeSelectedKey(); -- void toggleRemoveButton(const QItemSelection& selected); -- void updateSharedKeyList(); -- void removeSharedEncryptionKeys(); -- void removeStoredPermissions(); -- void convertAttributesToCustomData(); -- void refreshDatabaseID(); -- void editIndex(const QModelIndex& index); -- void editFinished(QStandardItem* item); -- --private: -- void updateModel(); -- void settingsWarning(); -- --protected: -- void showEvent(QShowEvent* event) override; -- -- const QScopedPointer m_ui; -- --private: -- QPointer m_customData; -- QPointer m_customDataModel; -- QString m_valueInEdit; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,193 +0,0 @@ -- -- -- DatabaseSettingsWidgetBrowser -- -- -- -- 0 -- 0 -- 669 -- 395 -- -- -- -- -- 0 -- 0 -- -- -- -- -- 450 -- 0 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- KeePassXC-Browser settings -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Move KeePassHTTP attributes to KeePassXC-Browser custom data -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Refresh database root group ID -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Disconnect all browsers -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Forget all site-specific settings on entries -- -- -- -- -- -- -- -- -- -- Stored keys -- -- -- -- -- -- -- -- -- Stored browser keys -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QAbstractItemView::SelectRows -- -- -- 200 -- -- -- true -- -- -- false -- -- -- -- -- -- -- -- -- Remove selected key -- -- -- Remove -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
--
-- -- removeSharedEncryptionKeys -- removeStoredPermissions -- convertToCustomData -- refreshDatabaseID -- customDataTable -- removeCustomDataButton -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidget.h" --#include "core/Database.h" -- --#include -- --#include --#include -- --DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) -- : SettingsWidget(parent) --{ --} -- --DatabaseSettingsWidget::~DatabaseSettingsWidget() --{ --} -- --/** -- * Load the database to be configured by this page and initialize the page. -- * The page will NOT take ownership of the database. -- * -- * @param db database object to be configured -- */ --void DatabaseSettingsWidget::load(QSharedPointer db) --{ -- m_db = std::move(db); -- initialize(); --} -- --const QSharedPointer DatabaseSettingsWidget::getDatabase() const --{ -- return m_db; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,258 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetDatabaseKey.h" -- --#include "core/Database.h" --#include "gui/MessageBox.h" --#include "gui/databasekey/KeyFileEditWidget.h" --#include "gui/databasekey/PasswordEditWidget.h" --#include "gui/databasekey/YubiKeyEditWidget.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" --#include "keys/YkChallengeResponseKey.h" -- --#include --#include --#include -- --DatabaseSettingsWidgetDatabaseKey::DatabaseSettingsWidgetDatabaseKey(QWidget* parent) -- : DatabaseSettingsWidget(parent) -- , m_additionalKeyOptionsToggle(new QPushButton(tr("Add additional protection..."), this)) -- , m_additionalKeyOptions(new QWidget(this)) -- , m_passwordEditWidget(new PasswordEditWidget(this)) -- , m_keyFileEditWidget(new KeyFileEditWidget(this)) --#ifdef WITH_XC_YUBIKEY -- , m_yubiKeyEditWidget(new YubiKeyEditWidget(this)) --#endif --{ -- auto* vbox = new QVBoxLayout(this); -- vbox->setSizeConstraint(QLayout::SetMinimumSize); -- -- // primary password option -- vbox->addWidget(m_passwordEditWidget); -- -- // additional key options -- m_additionalKeyOptionsToggle->setObjectName("additionalKeyOptionsToggle"); -- vbox->addWidget(m_additionalKeyOptionsToggle); -- vbox->addWidget(m_additionalKeyOptions); -- vbox->setSizeConstraint(QLayout::SetMinimumSize); -- m_additionalKeyOptions->setLayout(new QVBoxLayout()); -- m_additionalKeyOptions->layout()->setMargin(0); -- m_additionalKeyOptions->layout()->addWidget(m_keyFileEditWidget); --#ifdef WITH_XC_YUBIKEY -- m_additionalKeyOptions->layout()->addWidget(m_yubiKeyEditWidget); --#endif -- m_additionalKeyOptions->setVisible(false); -- -- connect(m_additionalKeyOptionsToggle, SIGNAL(clicked()), SLOT(showAdditionalKeyOptions())); -- -- vbox->addStretch(); -- setLayout(vbox); --} -- --DatabaseSettingsWidgetDatabaseKey::~DatabaseSettingsWidgetDatabaseKey() --{ --} -- --void DatabaseSettingsWidgetDatabaseKey::load(QSharedPointer db) --{ -- DatabaseSettingsWidget::load(db); -- -- if (!m_db->key() || m_db->key()->keys().isEmpty()) { -- // database has no key, we are about to add a new one -- m_passwordEditWidget->changeVisiblePage(KeyComponentWidget::Page::Edit); -- m_passwordEditWidget->setPasswordVisible(true); -- } -- -- bool hasAdditionalKeys = false; -- for (const auto& key : m_db->key()->keys()) { -- if (key->uuid() == PasswordKey::UUID) { -- m_passwordEditWidget->setComponentAdded(true); -- } else if (key->uuid() == FileKey::UUID) { -- m_keyFileEditWidget->setComponentAdded(true); -- hasAdditionalKeys = true; -- } -- } -- --#ifdef WITH_XC_YUBIKEY -- for (const auto& key : m_db->key()->challengeResponseKeys()) { -- if (key->uuid() == YkChallengeResponseKey::UUID) { -- m_yubiKeyEditWidget->setComponentAdded(true); -- hasAdditionalKeys = true; -- } -- } --#endif -- -- setAdditionalKeyOptionsVisible(hasAdditionalKeys); -- -- connect(m_passwordEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); -- connect(m_keyFileEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); --#ifdef WITH_XC_YUBIKEY -- connect(m_yubiKeyEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); --#endif --} -- --void DatabaseSettingsWidgetDatabaseKey::initialize() --{ -- bool blocked = blockSignals(true); -- m_passwordEditWidget->setComponentAdded(false); -- m_keyFileEditWidget->setComponentAdded(false); --#ifdef WITH_XC_YUBIKEY -- m_yubiKeyEditWidget->setComponentAdded(false); --#endif -- blockSignals(blocked); --} -- --void DatabaseSettingsWidgetDatabaseKey::uninitialize() --{ --} -- --bool DatabaseSettingsWidgetDatabaseKey::save() --{ -- m_isDirty |= (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); -- m_isDirty |= (m_keyFileEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); --#ifdef WITH_XC_YUBIKEY -- m_isDirty |= (m_yubiKeyEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); --#endif -- -- if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { -- // key unchanged -- return true; -- } -- -- auto newKey = QSharedPointer::create(); -- -- QSharedPointer oldPasswordKey; -- QSharedPointer oldFileKey; -- QSharedPointer oldChallengeResponse; -- -- for (const auto& key : m_db->key()->keys()) { -- if (key->uuid() == PasswordKey::UUID) { -- oldPasswordKey = key; -- } else if (key->uuid() == FileKey::UUID) { -- oldFileKey = key; -- } -- } -- -- for (const auto& key : m_db->key()->challengeResponseKeys()) { -- if (key->uuid() == YkChallengeResponseKey::UUID) { -- oldChallengeResponse = key; -- } -- } -- -- if (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::AddNew || m_passwordEditWidget->isEmpty()) { -- QScopedPointer msgBox(new QMessageBox(this)); -- msgBox->setIcon(QMessageBox::Warning); -- msgBox->setWindowTitle(tr("No password set")); -- msgBox->setText(tr("WARNING! You have not set a password. Using a database without " -- "a password is strongly discouraged!\n\n" -- "Are you sure you want to continue without a password?")); -- auto btn = msgBox->addButton(tr("Continue without password"), QMessageBox::ButtonRole::AcceptRole); -- msgBox->addButton(QMessageBox::Cancel); -- msgBox->setDefaultButton(QMessageBox::Cancel); -- msgBox->exec(); -- if (msgBox->clickedButton() != btn) { -- return false; -- } -- } else if (!addToCompositeKey(m_passwordEditWidget, newKey, oldPasswordKey)) { -- return false; -- } -- -- if (!addToCompositeKey(m_keyFileEditWidget, newKey, oldFileKey)) { -- return false; -- } -- --#ifdef WITH_XC_YUBIKEY -- if (!addToCompositeKey(m_yubiKeyEditWidget, newKey, oldChallengeResponse)) { -- return false; -- } --#endif -- -- if (newKey->keys().isEmpty() && newKey->challengeResponseKeys().isEmpty()) { -- MessageBox::critical(this, -- tr("No encryption key added"), -- tr("You must add at least one encryption key to secure your database!"), -- MessageBox::Ok, -- MessageBox::Ok); -- return false; -- } -- -- m_db->setKey(newKey, true, false, false); -- -- emit editFinished(true); -- if (m_isDirty) { -- m_db->markAsModified(); -- } -- -- return true; --} -- --void DatabaseSettingsWidgetDatabaseKey::discard() --{ -- emit editFinished(false); --} -- --void DatabaseSettingsWidgetDatabaseKey::showAdditionalKeyOptions() --{ -- setAdditionalKeyOptionsVisible(true); --} -- --void DatabaseSettingsWidgetDatabaseKey::setAdditionalKeyOptionsVisible(bool show) --{ -- m_additionalKeyOptionsToggle->setVisible(!show); -- m_additionalKeyOptions->setVisible(show); --} -- --bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget, -- QSharedPointer& newKey, -- QSharedPointer& oldKey) --{ -- if (widget->visiblePage() == KeyComponentWidget::Edit) { -- QString error = tr("Unknown error"); -- if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) { -- MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok); -- return false; -- } -- } else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) { -- Q_ASSERT(oldKey); -- newKey->addKey(oldKey); -- } -- return true; --} -- --bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget, -- QSharedPointer& newKey, -- QSharedPointer& oldKey) --{ -- if (widget->visiblePage() == KeyComponentWidget::Edit) { -- QString error = tr("Unknown error"); -- if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) { -- MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok); -- return false; -- } -- } else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) { -- Q_ASSERT(oldKey); -- newKey->addChallengeResponseKey(oldKey); -- } -- return true; --} -- --void DatabaseSettingsWidgetDatabaseKey::markDirty() --{ -- m_isDirty = true; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H --#define KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H -- --#include "DatabaseSettingsWidget.h" --#include "config-keepassx.h" -- --#include -- --class Database; --class Key; --class CompositeKey; --class ChallengeResponseKey; --class KeyComponentWidget; --class PasswordEditWidget; --class KeyFileEditWidget; --class YubiKeyEditWidget; --class QPushButton; -- --class DatabaseSettingsWidgetDatabaseKey : public DatabaseSettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsWidgetDatabaseKey(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingsWidgetDatabaseKey); -- ~DatabaseSettingsWidgetDatabaseKey() override; -- -- void load(QSharedPointer db) override; -- -- inline bool hasAdvancedMode() const override -- { -- return false; -- } -- --public slots: -- void initialize() override; -- void uninitialize() override; -- bool save() override; -- void discard() override; -- --private slots: -- void showAdditionalKeyOptions(); -- void markDirty(); -- --private: -- void setAdditionalKeyOptionsVisible(bool show); -- -- // clang-format off -- bool addToCompositeKey(KeyComponentWidget* widget, -- QSharedPointer& newKey, -- QSharedPointer& oldKey); -- // clang-format on -- -- bool addToCompositeKey(KeyComponentWidget* widget, -- QSharedPointer& newKey, -- QSharedPointer& oldKey); -- -- bool m_isDirty = false; -- const QPointer m_additionalKeyOptionsToggle; -- const QPointer m_additionalKeyOptions; -- const QPointer m_passwordEditWidget; -- const QPointer m_keyFileEditWidget; --#ifdef WITH_XC_YUBIKEY -- const QPointer m_yubiKeyEditWidget; --#endif --}; -- --#endif // KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,423 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetEncryption.h" --#include "ui_DatabaseSettingsWidgetEncryption.h" -- --#include "core/AsyncTask.h" --#include "core/Database.h" --#include "core/Global.h" --#include "core/Metadata.h" --#include "crypto/kdf/Argon2Kdf.h" --#include "format/KeePass2.h" --#include "gui/MessageBox.h" -- --#include --#include -- --const char* DatabaseSettingsWidgetEncryption::CD_DECRYPTION_TIME_PREFERENCE_KEY = "KPXC_DECRYPTION_TIME_PREFERENCE"; -- --DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* parent) -- : DatabaseSettingsWidget(parent) -- , m_ui(new Ui::DatabaseSettingsWidgetEncryption()) --{ -- m_ui->setupUi(this); -- -- connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(benchmarkTransformRounds())); -- connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeKdf(int))); -- -- connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), this, SLOT(memoryChanged(int))); -- connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), this, SLOT(parallelismChanged(int))); -- -- m_ui->compatibilitySelection->addItem(tr("KDBX 4.0 (recommended)"), KeePass2::KDF_ARGON2D.toByteArray()); -- m_ui->compatibilitySelection->addItem(tr("KDBX 3.1"), KeePass2::KDF_AES_KDBX3.toByteArray()); -- m_ui->decryptionTimeSlider->setMinimum(Kdf::MIN_ENCRYPTION_TIME / 100); -- m_ui->decryptionTimeSlider->setMaximum(Kdf::MAX_ENCRYPTION_TIME / 100); -- m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100); -- updateDecryptionTime(m_ui->decryptionTimeSlider->value()); -- -- m_ui->transformBenchmarkButton->setText( -- QObject::tr("Benchmark %1 delay") -- .arg(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::DEFAULT_ENCRYPTION_TIME))); -- m_ui->minTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MIN_ENCRYPTION_TIME)); -- m_ui->maxTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MAX_ENCRYPTION_TIME)); -- -- connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(activateChangeDecryptionTime())); -- connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(updateDecryptionTime(int))); -- connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(updateFormatCompatibility(int))); -- -- // conditions under which a key re-transformation is needed -- connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(markDirty())); -- connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); -- connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(markDirty())); -- connect(m_ui->algorithmComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); -- connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); -- connect(m_ui->transformRoundsSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); -- connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); -- connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); --} -- --DatabaseSettingsWidgetEncryption::~DatabaseSettingsWidgetEncryption() --{ --} -- --#define IS_ARGON2(uuid) (uuid == KeePass2::KDF_ARGON2D || uuid == KeePass2::KDF_ARGON2ID) --#define IS_AES_KDF(uuid) (uuid == KeePass2::KDF_AES_KDBX3 || uuid == KeePass2::KDF_AES_KDBX4) -- --void DatabaseSettingsWidgetEncryption::initialize() --{ -- Q_ASSERT(m_db); -- if (!m_db) { -- return; -- } -- -- bool isDirty = false; -- -- if (!m_db->kdf()) { -- m_db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); -- isDirty = true; -- } -- if (!m_db->key()) { -- m_db->setKey(QSharedPointer::create(), true, false, false); -- m_db->setCipher(KeePass2::CIPHER_AES256); -- isDirty = true; -- } -- -- // check if the DB's custom data has a decryption time setting stored -- // and set the slider to it, otherwise just state that the time is unchanged -- // (we cannot infer the time from the raw KDF settings) -- auto* cd = m_db->metadata()->customData(); -- if (cd->hasKey(CD_DECRYPTION_TIME_PREFERENCE_KEY)) { -- int decryptionTime = qMax(100, cd->value(CD_DECRYPTION_TIME_PREFERENCE_KEY).toInt()); -- bool block = m_ui->decryptionTimeSlider->blockSignals(true); -- m_ui->decryptionTimeSlider->setValue(decryptionTime / 100); -- updateDecryptionTime(decryptionTime / 100); -- m_ui->decryptionTimeSlider->blockSignals(block); -- m_ui->activateChangeDecryptionTimeButton->setVisible(false); -- } else { -- m_ui->decryptionTimeSettings->setVisible(isDirty); -- m_ui->activateChangeDecryptionTimeButton->setVisible(!isDirty); -- if (!isDirty) { -- m_ui->decryptionTimeValueLabel->setText(tr("unchanged", "Database decryption time is unchanged")); -- } -- } -- -- updateFormatCompatibility(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4, isDirty); -- setupAlgorithmComboBox(); -- setupKdfComboBox(); -- loadKdfParameters(); -- -- m_isDirty = isDirty; --} -- --void DatabaseSettingsWidgetEncryption::uninitialize() --{ --} -- --void DatabaseSettingsWidgetEncryption::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); -- m_ui->decryptionTimeSlider->setFocus(); --} -- --void DatabaseSettingsWidgetEncryption::setupAlgorithmComboBox() --{ -- m_ui->algorithmComboBox->clear(); -- for (auto& cipher : asConst(KeePass2::CIPHERS)) { -- m_ui->algorithmComboBox->addItem(cipher.second.toUtf8(), cipher.first.toByteArray()); -- } -- int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher().toByteArray()); -- if (cipherIndex > -1) { -- m_ui->algorithmComboBox->setCurrentIndex(cipherIndex); -- } --} -- --void DatabaseSettingsWidgetEncryption::setupKdfComboBox() --{ -- // Setup kdf combo box -- bool block = m_ui->kdfComboBox->blockSignals(true); -- m_ui->kdfComboBox->clear(); -- for (auto& kdf : asConst(KeePass2::KDFS)) { -- m_ui->kdfComboBox->addItem(kdf.second.toUtf8(), kdf.first.toByteArray()); -- } -- m_ui->kdfComboBox->blockSignals(block); --} -- --void DatabaseSettingsWidgetEncryption::loadKdfParameters() --{ -- Q_ASSERT(m_db); -- if (!m_db) { -- return; -- } -- -- auto kdf = m_db->kdf(); -- Q_ASSERT(kdf); -- if (!kdf) { -- return; -- } -- -- int kdfIndex = m_ui->kdfComboBox->findData(m_db->kdf()->uuid().toByteArray()); -- if (kdfIndex > -1) { -- bool block = m_ui->kdfComboBox->blockSignals(true); -- m_ui->kdfComboBox->setCurrentIndex(kdfIndex); -- m_ui->kdfComboBox->blockSignals(block); -- } -- -- m_ui->transformRoundsSpinBox->setValue(kdf->rounds()); -- if (IS_ARGON2(m_db->kdf()->uuid())) { -- auto argon2Kdf = kdf.staticCast(); -- m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory()) / (1 << 10)); -- m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); -- } -- -- updateKdfFields(); --} -- --void DatabaseSettingsWidgetEncryption::updateKdfFields() --{ -- QUuid id = m_db->kdf()->uuid(); -- -- m_ui->memoryUsageLabel->setVisible(IS_ARGON2(id)); -- m_ui->memorySpinBox->setVisible(IS_ARGON2(id)); -- m_ui->parallelismLabel->setVisible(IS_ARGON2(id)); -- m_ui->parallelismSpinBox->setVisible(IS_ARGON2(id)); --} -- --void DatabaseSettingsWidgetEncryption::activateChangeDecryptionTime() --{ -- m_ui->decryptionTimeSettings->setVisible(true); -- m_ui->activateChangeDecryptionTimeButton->setVisible(false); -- updateDecryptionTime(m_ui->decryptionTimeSlider->value()); --} -- --void DatabaseSettingsWidgetEncryption::markDirty() --{ -- m_isDirty = true; --} -- --bool DatabaseSettingsWidgetEncryption::save() --{ -- Q_ASSERT(m_db); -- if (!m_db) { -- return false; -- } -- -- if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { -- // nothing has changed, don't re-transform -- return true; -- } -- -- auto kdf = m_db->kdf(); -- Q_ASSERT(kdf); -- -- if (!advancedMode()) { -- if (kdf && !m_isDirty && !m_ui->decryptionTimeSettings->isVisible()) { -- return true; -- } -- -- int time = m_ui->decryptionTimeSlider->value() * 100; -- updateFormatCompatibility(m_ui->compatibilitySelection->currentIndex(), false); -- -- QApplication::setOverrideCursor(Qt::BusyCursor); -- -- int rounds = AsyncTask::runAndWaitForFuture([&kdf, time]() { return kdf->benchmark(time); }); -- kdf->setRounds(rounds); -- -- // TODO: we should probably use AsyncTask::runAndWaitForFuture() here, -- // but not without making Database thread-safe -- bool ok = m_db->changeKdf(kdf); -- -- QApplication::restoreOverrideCursor(); -- -- m_db->metadata()->customData()->set(CD_DECRYPTION_TIME_PREFERENCE_KEY, QString("%1").arg(time)); -- -- return ok; -- } -- -- // remove a stored decryption time from custom data when advanced settings are used -- // we don't know it until we actually run the KDF -- m_db->metadata()->customData()->remove(CD_DECRYPTION_TIME_PREFERENCE_KEY); -- -- // first perform safety check for KDF rounds -- if (IS_ARGON2(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() > 10000) { -- QMessageBox warning; -- warning.setIcon(QMessageBox::Warning); -- warning.setWindowTitle(tr("Number of rounds too high", "Key transformation rounds")); -- warning.setText(tr("You are using a very high number of key transform rounds with Argon2.\n\n" -- "If you keep this number, your database may take hours or days (or even longer) to open!")); -- auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); -- auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); -- warning.setDefaultButton(cancel); -- warning.exec(); -- if (warning.clickedButton() != ok) { -- return false; -- } -- } else if (IS_AES_KDF(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() < 100000) { -- QMessageBox warning; -- warning.setIcon(QMessageBox::Warning); -- warning.setWindowTitle(tr("Number of rounds too low", "Key transformation rounds")); -- warning.setText(tr("You are using a very low number of key transform rounds with AES-KDF.\n\n" -- "If you keep this number, your database may be too easy to crack!")); -- auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); -- auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); -- warning.setDefaultButton(cancel); -- warning.exec(); -- if (warning.clickedButton() != ok) { -- return false; -- } -- } -- -- m_db->setCipher(QUuid(m_ui->algorithmComboBox->currentData().toByteArray())); -- -- // Save kdf parameters -- kdf->setRounds(m_ui->transformRoundsSpinBox->value()); -- if (IS_ARGON2(kdf->uuid())) { -- auto argon2Kdf = kdf.staticCast(); -- argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10)); -- argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value())); -- } -- -- QApplication::setOverrideCursor(Qt::WaitCursor); -- // TODO: we should probably use AsyncTask::runAndWaitForFuture() here, -- // but not without making Database thread-safe -- bool ok = m_db->changeKdf(kdf); -- QApplication::restoreOverrideCursor(); -- -- if (!ok) { -- MessageBox::warning(this, -- tr("KDF unchanged"), -- tr("Failed to transform key with new KDF parameters; KDF unchanged."), -- QMessageBox::Ok); -- } -- -- return ok; --} -- --void DatabaseSettingsWidgetEncryption::benchmarkTransformRounds(int millisecs) --{ -- QApplication::setOverrideCursor(Qt::BusyCursor); -- m_ui->transformBenchmarkButton->setEnabled(false); -- m_ui->transformRoundsSpinBox->setFocus(); -- -- // Create a new kdf with the current parameters -- auto kdf = KeePass2::uuidToKdf(QUuid(m_ui->kdfComboBox->currentData().toByteArray())); -- kdf->setRounds(m_ui->transformRoundsSpinBox->value()); -- if (IS_ARGON2(kdf->uuid())) { -- auto argon2Kdf = kdf.staticCast(); -- if (!argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10))) { -- m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory() / (1 << 10))); -- } -- if (!argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value()))) { -- m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); -- } -- } -- -- // Determine the number of rounds required to meet 1 second delay -- int rounds = AsyncTask::runAndWaitForFuture([&kdf, millisecs]() { return kdf->benchmark(millisecs); }); -- -- m_ui->transformRoundsSpinBox->setValue(rounds); -- m_ui->transformBenchmarkButton->setEnabled(true); -- m_ui->decryptionTimeSlider->setValue(millisecs / 100); -- QApplication::restoreOverrideCursor(); --} -- --void DatabaseSettingsWidgetEncryption::changeKdf(int index) --{ -- Q_ASSERT(m_db); -- if (!m_db) { -- return; -- } -- -- QUuid id(m_ui->kdfComboBox->itemData(index).toByteArray()); -- m_db->setKdf(KeePass2::uuidToKdf(id)); -- updateKdfFields(); -- activateChangeDecryptionTime(); -- benchmarkTransformRounds(); --} -- --/** -- * Update memory spin box suffix on value change. -- */ --void DatabaseSettingsWidgetEncryption::memoryChanged(int value) --{ -- m_ui->memorySpinBox->setSuffix(tr(" MiB", "Abbreviation for Mebibytes (KDF settings)", value)); --} -- --/** -- * Update parallelism spin box suffix on value change. -- */ --void DatabaseSettingsWidgetEncryption::parallelismChanged(int value) --{ -- m_ui->parallelismSpinBox->setSuffix(tr(" thread(s)", "Threads for parallel execution (KDF settings)", value)); --} -- --void DatabaseSettingsWidgetEncryption::setAdvancedMode(bool advanced) --{ -- DatabaseSettingsWidget::setAdvancedMode(advanced); -- -- if (advanced) { -- loadKdfParameters(); -- m_ui->stackedWidget->setCurrentIndex(1); -- } else { -- m_ui->compatibilitySelection->setCurrentIndex(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4); -- m_ui->stackedWidget->setCurrentIndex(0); -- } --} -- --void DatabaseSettingsWidgetEncryption::updateDecryptionTime(int value) --{ -- m_ui->decryptionTimeValueLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(value * 100)); --} -- --void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool retransform) --{ -- Q_ASSERT(m_db); -- if (!m_db) { -- return; -- } -- -- if (m_ui->compatibilitySelection->currentIndex() != index) { -- bool block = m_ui->compatibilitySelection->blockSignals(true); -- m_ui->compatibilitySelection->setCurrentIndex(index); -- m_ui->compatibilitySelection->blockSignals(block); -- } -- -- if (retransform) { -- QUuid kdfUuid(m_ui->compatibilitySelection->itemData(index).toByteArray()); -- auto kdf = KeePass2::uuidToKdf(kdfUuid); -- m_db->setKdf(kdf); -- -- if (IS_ARGON2(kdf->uuid())) { -- auto argon2Kdf = kdf.staticCast(); -- // Default to 64 MiB of memory and 2 threads -- // these settings are safe for desktop and mobile devices -- argon2Kdf->setMemory(1 << 16); -- argon2Kdf->setParallelism(2); -- } -- -- activateChangeDecryptionTime(); -- } --} -- --QString DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(int millisecs) --{ -- if (millisecs < 1000) { -- return QObject::tr("%1 ms", "milliseconds", millisecs).arg(millisecs); -- } else { -- return QObject::tr("%1 s", "seconds", millisecs / 1000).arg(millisecs / 1000.0, 0, 'f', 1); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,86 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H --#define KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H -- --#include "DatabaseSettingsWidget.h" -- --#include "crypto/kdf/Kdf.h" -- --#include --#include -- --class Database; --namespace Ui --{ -- class DatabaseSettingsWidgetEncryption; --} -- --class DatabaseSettingsWidgetEncryption : public DatabaseSettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsWidgetEncryption(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingsWidgetEncryption); -- ~DatabaseSettingsWidgetEncryption() override; -- -- inline bool hasAdvancedMode() const override -- { -- return true; -- } -- void setAdvancedMode(bool advanced) override; -- --public slots: -- void initialize() override; -- void uninitialize() override; -- bool save() override; -- -- static QString getTextualEncryptionTime(int millisecs); -- --protected: -- void showEvent(QShowEvent* event) override; -- --private slots: -- void benchmarkTransformRounds(int millisecs = Kdf::DEFAULT_ENCRYPTION_TIME); -- void changeKdf(int index); -- void memoryChanged(int value); -- void parallelismChanged(int value); -- void updateDecryptionTime(int value); -- void updateFormatCompatibility(int index, bool retransform = true); -- void setupAlgorithmComboBox(); -- void setupKdfComboBox(); -- void loadKdfParameters(); -- void updateKdfFields(); -- void activateChangeDecryptionTime(); -- void markDirty(); -- --private: -- enum FormatSelection -- { -- KDBX4, -- KDBX3 -- }; -- static const char* CD_DECRYPTION_TIME_PREFERENCE_KEY; -- -- bool m_isDirty = false; -- bool m_formatCompatibilityDirty = false; -- const QScopedPointer m_ui; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,436 +0,0 @@ -- -- -- DatabaseSettingsWidgetEncryption -- -- -- -- 0 -- 0 -- 585 -- 339 -- -- -- -- -- -- -- 0 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- -- -- Decryption Time: -- -- -- -- -- -- -- ?? s -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- Change existing decryption time -- -- -- Change -- -- -- -- -- -- -- -- -- -- -- -- Decryption time in seconds -- -- -- 1 -- -- -- 10 -- -- -- 10 -- -- -- Qt::Horizontal -- -- -- QSlider::TicksBelow -- -- -- 5 -- -- -- -- -- -- -- -- -- ?? ms -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- ? s -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Higher values offer more protection, but opening the database will take longer. -- -- -- true -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- -- Database format: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Database format -- -- -- -- -- -- -- -- -- This is only important if you need to use your database with other programs. -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Encryption Algorithm: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Encryption algorithm -- -- -- -- AES: 256 Bit (default) -- -- -- -- -- Twofish: 256 Bit -- -- -- -- -- -- -- -- Key Derivation Function: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Key derivation function -- -- -- -- -- -- -- Transform rounds: -- -- -- -- -- -- -- -- -- -- 150 -- 0 -- -- -- -- -- 150 -- 16777215 -- -- -- -- Transform rounds -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -- -- 1 -- -- -- 1000000000 -- -- -- -- -- -- -- Qt::WheelFocus -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- Memory Usage: -- -- -- -- -- -- -- -- 150 -- 0 -- -- -- -- -- 150 -- 16777215 -- -- -- -- Memory usage -- -- -- 1 -- -- -- 1048576 -- -- -- -- -- -- -- Parallelism: -- -- -- -- -- -- -- -- 150 -- 0 -- -- -- -- -- 150 -- 16777215 -- -- -- -- Parallelism -- -- -- 1 -- -- -- 128 -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- activateChangeDecryptionTimeButton -- decryptionTimeSlider -- compatibilitySelection -- algorithmComboBox -- kdfComboBox -- transformRoundsSpinBox -- transformBenchmarkButton -- memorySpinBox -- parallelismSpinBox -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,145 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetGeneral.h" --#include "ui_DatabaseSettingsWidgetGeneral.h" -- --#include "core/Clock.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "gui/MessageBox.h" -- --DatabaseSettingsWidgetGeneral::DatabaseSettingsWidgetGeneral(QWidget* parent) -- : DatabaseSettingsWidget(parent) -- , m_ui(new Ui::DatabaseSettingsWidgetGeneral()) --{ -- m_ui->setupUi(this); -- -- connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); -- connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); --} -- --DatabaseSettingsWidgetGeneral::~DatabaseSettingsWidgetGeneral() --{ --} -- --void DatabaseSettingsWidgetGeneral::initialize() --{ -- Metadata* meta = m_db->metadata(); -- -- m_ui->dbNameEdit->setText(meta->name()); -- m_ui->dbDescriptionEdit->setText(meta->description()); -- m_ui->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled()); -- m_ui->defaultUsernameEdit->setText(meta->defaultUserName()); -- m_ui->compressionCheckbox->setChecked(m_db->compressionAlgorithm() != Database::CompressionNone); -- -- if (meta->historyMaxItems() > -1) { -- m_ui->historyMaxItemsSpinBox->setValue(meta->historyMaxItems()); -- m_ui->historyMaxItemsCheckBox->setChecked(true); -- } else { -- m_ui->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems); -- m_ui->historyMaxItemsCheckBox->setChecked(false); -- } -- int historyMaxSizeMiB = qRound(meta->historyMaxSize() / qreal(1048576)); -- if (historyMaxSizeMiB > 0) { -- m_ui->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB); -- m_ui->historyMaxSizeCheckBox->setChecked(true); -- } else { -- m_ui->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize); -- m_ui->historyMaxSizeCheckBox->setChecked(false); -- } --} -- --void DatabaseSettingsWidgetGeneral::uninitialize() --{ --} -- --void DatabaseSettingsWidgetGeneral::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); -- m_ui->dbNameEdit->setFocus(); --} -- --bool DatabaseSettingsWidgetGeneral::save() --{ -- auto* meta = m_db->metadata(); -- -- if (!m_ui->recycleBinEnabledCheckBox->isChecked() && meta->recycleBinEnabled()) { -- auto recycleBin = meta->recycleBin(); -- if (recycleBin && !recycleBin->isEmpty()) { -- auto result = MessageBox::question(this, -- tr("Delete Recycle Bin"), -- tr("Do you want to delete the current recycle bin and all its " -- "contents?\nThis action is not reversible."), -- MessageBox::Delete | MessageBox::No, -- MessageBox::No); -- -- if (result == MessageBox::Delete) { -- recycleBin->deleteLater(); -- } else { -- recycleBin->setName(recycleBin->name().append(tr(" (old)"))); -- recycleBin->setIcon(Group::DefaultIconNumber); -- } -- } -- -- meta->setRecycleBin(nullptr); -- } -- -- m_db->setCompressionAlgorithm(m_ui->compressionCheckbox->isChecked() ? Database::CompressionGZip -- : Database::CompressionNone); -- -- meta->setName(m_ui->dbNameEdit->text()); -- meta->setDescription(m_ui->dbDescriptionEdit->text()); -- meta->setDefaultUserName(m_ui->defaultUsernameEdit->text()); -- meta->setRecycleBinEnabled(m_ui->recycleBinEnabledCheckBox->isChecked()); -- meta->setSettingsChanged(Clock::currentDateTimeUtc()); -- -- bool truncate = false; -- -- int historyMaxItems; -- if (m_ui->historyMaxItemsCheckBox->isChecked()) { -- historyMaxItems = m_ui->historyMaxItemsSpinBox->value(); -- } else { -- historyMaxItems = -1; -- } -- if (historyMaxItems != meta->historyMaxItems()) { -- meta->setHistoryMaxItems(historyMaxItems); -- truncate = true; -- } -- -- int historyMaxSize; -- if (m_ui->historyMaxSizeCheckBox->isChecked()) { -- historyMaxSize = m_ui->historyMaxSizeSpinBox->value() * 1048576; -- } else { -- historyMaxSize = -1; -- } -- if (historyMaxSize != meta->historyMaxSize()) { -- meta->setHistoryMaxSize(historyMaxSize); -- truncate = true; -- } -- -- if (truncate) { -- const QList allEntries = m_db->rootGroup()->entriesRecursive(false); -- for (Entry* entry : allEntries) { -- entry->truncateHistory(); -- } -- } -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H --#define KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H -- --#include "DatabaseSettingsWidget.h" -- --#include --#include -- --class Database; --namespace Ui --{ -- class DatabaseSettingsWidgetGeneral; --} -- --class DatabaseSettingsWidgetGeneral : public DatabaseSettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsWidgetGeneral(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingsWidgetGeneral); -- ~DatabaseSettingsWidgetGeneral() override; -- -- inline bool hasAdvancedMode() const override -- { -- return false; -- } -- --public slots: -- void initialize() override; -- void uninitialize() override; -- bool save() override; -- --protected: -- void showEvent(QShowEvent* event) override; -- -- const QScopedPointer m_ui; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,213 +0,0 @@ -- -- -- DatabaseSettingsWidgetGeneral -- -- -- -- 0 -- 0 -- 453 -- 374 -- -- -- -- -- 0 -- 0 -- -- -- -- -- 450 -- 0 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Database Meta Data -- -- -- -- -- -- Database name: -- -- -- -- -- -- -- Database name field -- -- -- -- -- -- -- Database description: -- -- -- -- -- -- -- Database description field -- -- -- -- -- -- -- Default username: -- -- -- -- -- -- -- true -- -- -- Default username field -- -- -- -- -- -- -- -- -- -- History Settings -- -- -- -- -- -- -- -- Maximum number of history items per entry -- -- -- Max. history items: -- -- -- -- -- -- -- Maximum size of history per entry -- -- -- Max. history size: -- -- -- -- -- -- -- Maximum size of history per entry -- -- -- Maximum size of history per entry -- -- -- MiB -- -- -- 1 -- -- -- 2000000000 -- -- -- -- -- -- -- Maximum number of history items per entry -- -- -- Maximum number of history items per entry -- -- -- 2000000000 -- -- -- -- -- -- -- Use recycle bin -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- Additional Database Settings -- -- -- -- -- -- Enable compression (recommended) -- -- -- true -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGET_H --#define KEEPASSXC_DATABASESETTINGSWIDGET_H -- --#include "gui/settings/SettingsWidget.h" -- --#include -- --class Database; -- --/** -- * Pure-virtual base class for KeePassXC database settings widgets. -- */ --class DatabaseSettingsWidget : public SettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingsWidget(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingsWidget); -- ~DatabaseSettingsWidget() override; -- -- virtual void load(QSharedPointer db); -- -- const QSharedPointer getDatabase() const; -- --signals: -- /** -- * Can be emitted to indicate size changes and allow parents widgets to adjust properly. -- */ -- void sizeChanged(); -- --protected: -- QSharedPointer m_db; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,63 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DatabaseSettingsWidgetMetaDataSimple.h" --#include "ui_DatabaseSettingsWidgetMetaDataSimple.h" -- --#include "core/Database.h" --#include "core/Metadata.h" -- --DatabaseSettingWidgetMetaData::DatabaseSettingWidgetMetaData(QWidget* parent) -- : DatabaseSettingsWidget(parent) -- , m_ui(new Ui::DatabaseSettingsWidgetMetaDataSimple()) --{ -- m_ui->setupUi(this); --} -- --DatabaseSettingWidgetMetaData::~DatabaseSettingWidgetMetaData() --{ --} -- --void DatabaseSettingWidgetMetaData::initialize() --{ -- Metadata* meta = m_db->metadata(); -- auto name = meta->name(); -- m_ui->databaseName->setText(name.isEmpty() ? tr("Passwords") : name); -- m_ui->databaseDescription->setText(meta->description()); -- -- m_ui->databaseName->setFocus(); -- m_ui->databaseName->selectAll(); --} -- --void DatabaseSettingWidgetMetaData::showEvent(QShowEvent* event) --{ -- QWidget::showEvent(event); -- m_ui->databaseName->setFocus(); --} -- --void DatabaseSettingWidgetMetaData::uninitialize() --{ --} -- --bool DatabaseSettingWidgetMetaData::save() --{ -- Metadata* meta = m_db->metadata(); -- meta->setName(m_ui->databaseName->text()); -- meta->setDescription(m_ui->databaseDescription->text()); -- -- return true; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,58 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H --#define KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H -- --#include "DatabaseSettingsWidget.h" -- --#include --#include -- --class Database; --namespace Ui --{ -- class DatabaseSettingsWidgetMetaDataSimple; --} -- --class DatabaseSettingWidgetMetaData : public DatabaseSettingsWidget --{ -- Q_OBJECT -- --public: -- explicit DatabaseSettingWidgetMetaData(QWidget* parent = nullptr); -- Q_DISABLE_COPY(DatabaseSettingWidgetMetaData); -- ~DatabaseSettingWidgetMetaData() override; -- -- inline bool hasAdvancedMode() const override -- { -- return false; -- } -- --public slots: -- void initialize() override; -- void uninitialize() override; -- bool save() override; -- --protected: -- void showEvent(QShowEvent* event) override; -- --private: -- const QScopedPointer m_ui; --}; -- --#endif // KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H -diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui ---- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,58 +0,0 @@ -- -- -- DatabaseSettingsWidgetMetaDataSimple -- -- -- -- 0 -- 0 -- 450 -- 86 -- -- -- -- -- 0 -- 0 -- -- -- -- -- 450 -- 0 -- -- -- -- -- -- -- Database Name: -- -- -- -- -- -- -- Database name field -- -- -- -- -- -- -- Description: -- -- -- -- -- -- -- Database description field -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/DialogyWidget.cpp keepassxc-2.6.4-patched/src/gui/DialogyWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/DialogyWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DialogyWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DialogyWidget.h" -- --#include --#include --#include -- --DialogyWidget::DialogyWidget(QWidget* parent) -- : QWidget(parent) --{ -- setAutoFillBackground(true); --} -- --void DialogyWidget::keyPressEvent(QKeyEvent* e) --{ --#ifdef Q_OS_MACOS -- if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) { -- if (!clickButton(QDialogButtonBox::Cancel)) { -- e->ignore(); -- } -- } else --#endif -- if (!e->modifiers() || e->modifiers() == Qt::ControlModifier -- || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { -- switch (e->key()) { -- case Qt::Key_Enter: -- case Qt::Key_Return: -- if (!clickButton(QDialogButtonBox::Ok)) { -- e->ignore(); -- } -- break; -- case Qt::Key_Escape: -- if (!clickButton(QDialogButtonBox::Cancel)) { -- if (!clickButton(QDialogButtonBox::Close)) { -- e->ignore(); -- } -- } -- break; -- default: -- e->ignore(); -- } -- } else { -- e->ignore(); -- } --} -- --bool DialogyWidget::clickButton(QDialogButtonBox::StandardButton standardButton) --{ -- QPushButton* pb; -- -- if (standardButton == QDialogButtonBox::Ok) { -- pb = qobject_cast(focusWidget()); -- if (pb && pb->isVisible() && pb->isEnabled() && pb->hasFocus()) { -- pb->click(); -- return true; -- } -- } -- -- QList buttonBoxes = findChildren(); -- for (auto buttonBox : buttonBoxes) { -- pb = buttonBox->button(standardButton); -- if (pb && pb->isVisible() && pb->isEnabled()) { -- pb->click(); -- return true; -- } -- } -- -- return false; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DialogyWidget.h keepassxc-2.6.4-patched/src/gui/DialogyWidget.h ---- keepassxc-2.6.4-orig/src/gui/DialogyWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DialogyWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,38 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DIALOGYWIDGET_H --#define KEEPASSX_DIALOGYWIDGET_H -- --#include --#include -- --class DialogyWidget : public QWidget --{ -- Q_OBJECT -- --public: -- explicit DialogyWidget(QWidget* parent = nullptr); -- --protected: -- void keyPressEvent(QKeyEvent* e) override; -- --private: -- bool clickButton(QDialogButtonBox::StandardButton standardButton); --}; -- --#endif // KEEPASSX_DIALOGYWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/DragTabBar.cpp keepassxc-2.6.4-patched/src/gui/DragTabBar.cpp ---- keepassxc-2.6.4-orig/src/gui/DragTabBar.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DragTabBar.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,98 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "DragTabBar.h" -- --#include --#include --#include -- --DragTabBar::DragTabBar(QWidget* parent) -- : QTabBar(parent) -- , m_tabSwitchTimer(new QTimer(this)) -- , m_tabSwitchIndex(-1) --{ -- m_tabSwitchTimer->setSingleShot(true); -- connect(m_tabSwitchTimer, SIGNAL(timeout()), SLOT(dragSwitchTab())); -- -- setAcceptDrops(true); --} -- --void DragTabBar::dragEnterEvent(QDragEnterEvent* event) --{ -- int tab = tabAt(event->pos()); -- -- if (tab != -1) { -- if (tab != currentIndex()) { -- m_tabSwitchIndex = tab; -- m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); -- } -- event->setAccepted(true); -- } else { -- QTabBar::dragEnterEvent(event); -- } --} -- --void DragTabBar::dragMoveEvent(QDragMoveEvent* event) --{ -- int tab = tabAt(event->pos()); -- -- if (tab != -1) { -- if (tab == currentIndex()) { -- m_tabSwitchTimer->stop(); -- } else if (tab != m_tabSwitchIndex) { -- m_tabSwitchIndex = tab; -- m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); -- } -- event->setAccepted(true); -- } else { -- m_tabSwitchIndex = -1; -- m_tabSwitchTimer->stop(); -- QTabBar::dragMoveEvent(event); -- } --} -- --void DragTabBar::dragLeaveEvent(QDragLeaveEvent* event) --{ -- m_tabSwitchIndex = -1; -- m_tabSwitchTimer->stop(); -- QTabBar::dragLeaveEvent(event); --} -- --void DragTabBar::dropEvent(QDropEvent* event) --{ -- m_tabSwitchIndex = -1; -- m_tabSwitchTimer->stop(); -- QTabBar::dropEvent(event); --} -- --void DragTabBar::tabLayoutChange() --{ -- m_tabSwitchIndex = -1; -- m_tabSwitchTimer->stop(); -- QTabBar::tabLayoutChange(); --} -- --void DragTabBar::dragSwitchTab() --{ -- int tab = tabAt(mapFromGlobal(QCursor::pos())); -- -- if (tab != -1 && tab == m_tabSwitchIndex) { -- m_tabSwitchIndex = -1; -- setCurrentIndex(tab); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/DragTabBar.h keepassxc-2.6.4-patched/src/gui/DragTabBar.h ---- keepassxc-2.6.4-orig/src/gui/DragTabBar.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/DragTabBar.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,45 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DRAGTABBAR_H --#define KEEPASSX_DRAGTABBAR_H -- --#include -- --class DragTabBar : public QTabBar --{ -- Q_OBJECT -- --public: -- explicit DragTabBar(QWidget* parent = nullptr); -- --protected: -- void dragEnterEvent(QDragEnterEvent* event) override; -- void dragMoveEvent(QDragMoveEvent* event) override; -- void dragLeaveEvent(QDragLeaveEvent* event) override; -- void dropEvent(QDropEvent* event) override; -- void tabLayoutChange() override; -- --private slots: -- void dragSwitchTab(); -- --private: -- QTimer* const m_tabSwitchTimer; -- int m_tabSwitchIndex; --}; -- --#endif // KEEPASSX_DRAGTABBAR_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.cpp keepassxc-2.6.4-patched/src/gui/EditWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/EditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,203 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EditWidget.h" --#include "ui_EditWidget.h" -- --#include --#include -- --#include "core/Resources.h" -- --EditWidget::EditWidget(QWidget* parent) -- : DialogyWidget(parent) -- , m_ui(new Ui::EditWidget()) --{ -- m_ui->setupUi(this); -- setReadOnly(false); -- setModified(false); -- -- m_ui->messageWidget->setHidden(true); -- -- QFont headerLabelFont = m_ui->headerLabel->font(); -- headerLabelFont.setBold(true); -- headerLabelFont.setPointSize(headerLabelFont.pointSize() + 2); -- headlineLabel()->setFont(headerLabelFont); -- headlineLabel()->setTextFormat(Qt::PlainText); -- -- connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); -- -- connect(m_ui->buttonBox, SIGNAL(accepted()), SIGNAL(accepted())); -- connect(m_ui->buttonBox, SIGNAL(rejected()), SIGNAL(rejected())); -- connect(m_ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(buttonClicked(QAbstractButton*))); --} -- --EditWidget::~EditWidget() --{ --} -- --void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* widget) --{ -- /* -- * Instead of just adding a widget we're going to wrap it into a scroll area. It will automatically show -- * scrollbars when the widget cannot fit into the page. This approach prevents the main window of the application -- * from automatic resizing and it now should be able to fit into a user's monitor even if the monitor is only 768 -- * pixels high. -- */ -- if (widget->inherits("QScrollArea")) { -- m_ui->stackedWidget->addWidget(widget); -- } else { -- auto* scrollArea = new QScrollArea(m_ui->stackedWidget); -- scrollArea->setFrameShape(QFrame::NoFrame); -- scrollArea->setFrameShadow(QFrame::Plain); -- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); -- scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents); -- scrollArea->setWidgetResizable(true); -- scrollArea->setWidget(widget); -- m_ui->stackedWidget->addWidget(scrollArea); -- } -- m_ui->categoryList->addCategory(labelText, icon); --} -- --bool EditWidget::hasPage(QWidget* widget) --{ -- for (int i = 0; i < m_ui->stackedWidget->count(); i++) { -- auto* scrollArea = qobject_cast(m_ui->stackedWidget->widget(i)); -- if (scrollArea && scrollArea->widget() == widget) { -- return true; -- } -- } -- -- return false; --} -- --void EditWidget::setPageHidden(QWidget* widget, bool hidden) --{ -- int index = -1; -- -- for (int i = 0; i < m_ui->stackedWidget->count(); i++) { -- auto* scrollArea = qobject_cast(m_ui->stackedWidget->widget(i)); -- if (scrollArea && scrollArea->widget() == widget) { -- index = i; -- break; -- } -- } -- -- if (index != -1) { -- m_ui->categoryList->setCategoryHidden(index, hidden); -- } -- -- if (index == m_ui->stackedWidget->currentIndex()) { -- int newIndex = m_ui->stackedWidget->currentIndex() - 1; -- if (newIndex < 0) { -- newIndex = m_ui->stackedWidget->count() - 1; -- } -- m_ui->stackedWidget->setCurrentIndex(newIndex); -- } --} -- --void EditWidget::setCurrentPage(int index) --{ -- m_ui->categoryList->setCurrentCategory(index); -- m_ui->stackedWidget->setCurrentIndex(index); --} -- --void EditWidget::setHeadline(const QString& text) --{ -- m_ui->headerLabel->setText(text); --} -- --QLabel* EditWidget::headlineLabel() --{ -- return m_ui->headerLabel; --} -- --void EditWidget::setReadOnly(bool readOnly) --{ -- m_readOnly = readOnly; -- -- if (readOnly) { -- m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close); -- } else { -- m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); -- } --} -- --bool EditWidget::readOnly() const --{ -- return m_readOnly; --} -- --void EditWidget::setModified(bool state) --{ -- m_modified = state; -- enableApplyButton(state); --} -- --bool EditWidget::isModified() const --{ -- return m_modified; --} -- --void EditWidget::enableApplyButton(bool enabled) --{ -- QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); -- if (applyButton) { -- applyButton->setEnabled(enabled); -- } --} -- --void EditWidget::showApplyButton(bool state) --{ -- if (!m_readOnly) { -- auto buttons = m_ui->buttonBox->standardButtons(); -- if (state) { -- buttons |= QDialogButtonBox::Apply; -- } else { -- buttons &= ~QDialogButtonBox::Apply; -- } -- m_ui->buttonBox->setStandardButtons(buttons); -- } --} -- --void EditWidget::buttonClicked(QAbstractButton* button) --{ -- auto stdButton = m_ui->buttonBox->standardButton(button); -- if (stdButton == QDialogButtonBox::Apply) { -- emit apply(); -- } --} -- --void EditWidget::showMessage(const QString& text, MessageWidget::MessageType type) --{ -- // Show error messages for a longer time to make sure the user can read them -- if (type == MessageWidget::Error) { -- m_ui->messageWidget->setCloseButtonVisible(true); -- m_ui->messageWidget->showMessage(text, type, 15000); -- } else { -- m_ui->messageWidget->setCloseButtonVisible(false); -- m_ui->messageWidget->showMessage(text, type, 2000); -- } --} -- --void EditWidget::hideMessage() --{ -- if (m_ui->messageWidget->isVisible()) { -- m_ui->messageWidget->animatedHide(); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.h keepassxc-2.6.4-patched/src/gui/EditWidget.h ---- keepassxc-2.6.4-orig/src/gui/EditWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,75 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITWIDGET_H --#define KEEPASSX_EDITWIDGET_H -- --#include --#include --#include -- --#include "gui/DialogyWidget.h" --#include "gui/MessageWidget.h" -- --class QLabel; -- --namespace Ui --{ -- class EditWidget; --} -- --class EditWidget : public DialogyWidget --{ -- Q_OBJECT -- --public: -- explicit EditWidget(QWidget* parent = nullptr); -- ~EditWidget(); -- -- void addPage(const QString& labelText, const QIcon& icon, QWidget* widget); -- bool hasPage(QWidget* widget); -- void setPageHidden(QWidget* widget, bool hidden); -- void setCurrentPage(int index); -- void setHeadline(const QString& text); -- QLabel* headlineLabel(); -- void setReadOnly(bool readOnly); -- bool readOnly() const; -- void enableApplyButton(bool enabled); -- void showApplyButton(bool state); -- virtual bool isModified() const; -- --signals: -- void apply(); -- void accepted(); -- void rejected(); -- --protected slots: -- void showMessage(const QString& text, MessageWidget::MessageType type); -- void hideMessage(); -- void setModified(bool state = true); -- void buttonClicked(QAbstractButton* button); -- --private: -- const QScopedPointer m_ui; -- bool m_readOnly; -- bool m_modified; -- -- Q_DISABLE_COPY(EditWidget) --}; -- --#endif // KEEPASSX_EDITWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.cpp keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.cpp ---- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,440 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EditWidgetIcons.h" --#include "ui_EditWidgetIcons.h" -- --#include --#include -- --#include "core/Config.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "gui/IconModels.h" --#include "gui/MessageBox.h" --#ifdef WITH_XC_NETWORKING --#include "core/IconDownloader.h" --#endif -- --IconStruct::IconStruct() -- : uuid(QUuid()) -- , number(0) -- , applyTo(ApplyIconToOptions::THIS_ONLY) --{ --} -- --EditWidgetIcons::EditWidgetIcons(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::EditWidgetIcons()) -- , m_db(nullptr) -- , m_applyIconTo(ApplyIconToOptions::THIS_ONLY) -- , m_defaultIconModel(new DefaultIconModel(this)) -- , m_customIconModel(new CustomIconModel(this)) --#ifdef WITH_XC_NETWORKING -- , m_downloader(new IconDownloader()) --#endif --{ -- m_ui->setupUi(this); -- -- m_ui->defaultIconsView->setModel(m_defaultIconModel); -- m_ui->customIconsView->setModel(m_customIconModel); -- -- m_ui->applyIconToPushButton->setMenu(createApplyIconToMenu()); -- -- // clang-format off -- connect(m_ui->defaultIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonDefaultIcons())); -- connect(m_ui->customIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonCustomIcons())); -- connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsDefaultIcons(bool))); -- connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsCustomIcons(bool))); -- connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIconFromFile())); -- connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(removeCustomIcon())); -- connect(m_ui->faviconButton, SIGNAL(clicked()), SLOT(downloadFavicon())); -- connect(m_ui->applyIconToPushButton->menu(), SIGNAL(triggered(QAction*)), SLOT(confirmApplyIconTo(QAction*))); -- -- connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SIGNAL(widgetUpdated())); -- connect(m_ui->defaultIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- this, SIGNAL(widgetUpdated())); -- connect(m_ui->customIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- this, SIGNAL(widgetUpdated())); --#ifdef WITH_XC_NETWORKING -- connect(m_downloader.data(), -- SIGNAL(finished(const QString&, const QImage&)), -- SLOT(iconReceived(const QString&, const QImage&))); --#endif -- // clang-format on -- -- m_ui->faviconButton->setVisible(false); -- m_ui->addButton->setEnabled(true); --} -- --EditWidgetIcons::~EditWidgetIcons() --{ --} -- --IconStruct EditWidgetIcons::state() --{ -- Q_ASSERT(m_db); -- Q_ASSERT(!m_currentUuid.isNull()); -- -- IconStruct iconStruct; -- if (m_ui->defaultIconsRadio->isChecked()) { -- QModelIndex index = m_ui->defaultIconsView->currentIndex(); -- if (index.isValid()) { -- iconStruct.number = index.row(); -- } else { -- Q_ASSERT(false); -- } -- } else { -- QModelIndex index = m_ui->customIconsView->currentIndex(); -- if (index.isValid()) { -- iconStruct.uuid = m_customIconModel->uuidFromIndex(m_ui->customIconsView->currentIndex()); -- } else { -- iconStruct.number = -1; -- } -- } -- -- iconStruct.applyTo = m_applyIconTo; -- -- return iconStruct; --} -- --void EditWidgetIcons::reset() --{ -- m_db.reset(); -- m_currentUuid = QUuid(); --} -- --void EditWidgetIcons::load(const QUuid& currentUuid, -- const QSharedPointer& database, -- const IconStruct& iconStruct, -- const QString& url) --{ -- Q_ASSERT(database); -- Q_ASSERT(!currentUuid.isNull()); -- -- m_db = database; -- m_currentUuid = currentUuid; -- setUrl(url); -- -- m_customIconModel->setIcons(database->metadata()->customIconsPixmaps(IconSize::Default), -- database->metadata()->customIconsOrder()); -- -- QUuid iconUuid = iconStruct.uuid; -- if (iconUuid.isNull()) { -- int iconNumber = iconStruct.number; -- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(iconNumber, 0)); -- m_ui->defaultIconsRadio->setChecked(true); -- } else { -- QModelIndex index = m_customIconModel->indexFromUuid(iconUuid); -- if (index.isValid()) { -- m_ui->customIconsView->setCurrentIndex(index); -- m_ui->customIconsRadio->setChecked(true); -- } else { -- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); -- m_ui->defaultIconsRadio->setChecked(true); -- } -- } -- -- m_applyIconTo = ApplyIconToOptions::THIS_ONLY; -- m_ui->applyIconToPushButton->menu()->defaultAction()->activate(QAction::Trigger); --} -- --void EditWidgetIcons::setShowApplyIconToButton(bool state) --{ -- m_ui->applyIconToPushButton->setVisible(state); --} -- --QMenu* EditWidgetIcons::createApplyIconToMenu() --{ -- auto* applyIconToMenu = new QMenu(this); -- QAction* defaultAction = applyIconToMenu->addAction(tr("Apply to this group only")); -- defaultAction->setData(QVariant::fromValue(ApplyIconToOptions::THIS_ONLY)); -- applyIconToMenu->setDefaultAction(defaultAction); -- applyIconToMenu->addSeparator(); -- applyIconToMenu->addAction(tr("Also apply to child groups")) -- ->setData(QVariant::fromValue(ApplyIconToOptions::CHILD_GROUPS)); -- applyIconToMenu->addAction(tr("Also apply to child entries")) -- ->setData(QVariant::fromValue(ApplyIconToOptions::CHILD_ENTRIES)); -- applyIconToMenu->addAction(tr("Also apply to all children")) -- ->setData(QVariant::fromValue(ApplyIconToOptions::ALL_CHILDREN)); -- return applyIconToMenu; --} -- --void EditWidgetIcons::setUrl(const QString& url) --{ --#ifdef WITH_XC_NETWORKING -- m_url = url; -- m_ui->faviconButton->setVisible(!url.isEmpty()); --#else -- Q_UNUSED(url); -- m_ui->faviconButton->setVisible(false); --#endif --} -- --void EditWidgetIcons::downloadFavicon() --{ --#ifdef WITH_XC_NETWORKING -- if (!m_url.isEmpty()) { -- m_downloader->setUrl(m_url); -- m_downloader->download(); -- } --#endif --} -- --void EditWidgetIcons::iconReceived(const QString& url, const QImage& icon) --{ --#ifdef WITH_XC_NETWORKING -- Q_UNUSED(url); -- if (icon.isNull()) { -- QString message(tr("Unable to fetch favicon.")); -- if (!config()->get(Config::Security_IconDownloadFallback).toBool()) { -- message.append("\n").append( -- tr("You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security")); -- } -- emit messageEditEntry(message, MessageWidget::Error); -- return; -- } -- -- if (!addCustomIcon(icon)) { -- emit messageEditEntry(tr("Existing icon selected."), MessageWidget::Information); -- } --#else -- Q_UNUSED(url); -- Q_UNUSED(icon); --#endif --} -- --void EditWidgetIcons::abortRequests() --{ --#ifdef WITH_XC_NETWORKING -- if (m_downloader) { -- m_downloader->abortDownload(); -- } --#endif --} -- --void EditWidgetIcons::addCustomIconFromFile() --{ -- if (!m_db) { -- return; -- } -- -- QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); -- -- auto filenames = QFileDialog::getOpenFileNames(this, tr("Select Image(s)"), "", filter); -- if (!filenames.empty()) { -- QStringList errornames; -- int numexisting = 0; -- for (const auto& filename : filenames) { -- if (!filename.isEmpty()) { -- auto icon = QImage(filename); -- if (icon.isNull()) { -- errornames << filename; -- } else if (!addCustomIcon(icon)) { -- // Icon already exists in database -- ++numexisting; -- } -- } -- } -- -- int numloaded = filenames.size() - errornames.size() - numexisting; -- QString msg; -- -- if (numloaded > 0) { -- msg = tr("Successfully loaded %1 of %n icon(s)", "", filenames.size()).arg(numloaded); -- } else { -- msg = tr("No icons were loaded"); -- } -- -- if (numexisting > 0) { -- msg += "\n" + tr("%n icon(s) already exist in the database", "", numexisting); -- } -- -- if (!errornames.empty()) { -- // Show the first 8 icons that failed to load -- errornames = errornames.mid(0, 8); -- emit messageEditEntry(msg + "\n" + tr("The following icon(s) failed:", "", errornames.size()) + "\n" -- + errornames.join("\n"), -- MessageWidget::Error); -- } else if (numloaded > 0) { -- emit messageEditEntry(msg, MessageWidget::Positive); -- } else { -- emit messageEditEntry(msg, MessageWidget::Information); -- } -- } --} -- --bool EditWidgetIcons::addCustomIcon(const QImage& icon) --{ -- bool added = false; -- if (m_db) { -- // Don't add an icon larger than 128x128, but retain original size if smaller -- auto scaledicon = icon; -- if (icon.width() > 128 || icon.height() > 128) { -- scaledicon = icon.scaled(128, 128); -- } -- -- QUuid uuid = m_db->metadata()->findCustomIcon(scaledicon); -- if (uuid.isNull()) { -- uuid = QUuid::createUuid(); -- m_db->metadata()->addCustomIcon(uuid, scaledicon); -- m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), -- m_db->metadata()->customIconsOrder()); -- added = true; -- } -- -- // Select the new or existing icon -- updateRadioButtonCustomIcons(); -- QModelIndex index = m_customIconModel->indexFromUuid(uuid); -- m_ui->customIconsView->setCurrentIndex(index); -- -- emit widgetUpdated(); -- } -- -- return added; --} -- --void EditWidgetIcons::removeCustomIcon() --{ -- if (m_db) { -- QModelIndex index = m_ui->customIconsView->currentIndex(); -- if (index.isValid()) { -- QUuid iconUuid = m_customIconModel->uuidFromIndex(index); -- -- const QList allEntries = m_db->rootGroup()->entriesRecursive(true); -- QList entriesWithSameIcon; -- QList historyEntriesWithSameIcon; -- -- for (Entry* entry : allEntries) { -- if (iconUuid == entry->iconUuid()) { -- // Check if this is a history entry (no assigned group) -- if (!entry->group()) { -- historyEntriesWithSameIcon << entry; -- } else if (m_currentUuid != entry->uuid()) { -- entriesWithSameIcon << entry; -- } -- } -- } -- -- const QList allGroups = m_db->rootGroup()->groupsRecursive(true); -- QList groupsWithSameIcon; -- -- for (Group* group : allGroups) { -- if (iconUuid == group->iconUuid() && m_currentUuid != group->uuid()) { -- groupsWithSameIcon << group; -- } -- } -- -- int iconUseCount = entriesWithSameIcon.size() + groupsWithSameIcon.size(); -- if (iconUseCount > 0) { -- -- auto result = MessageBox::question(this, -- tr("Confirm Delete"), -- tr("This icon is used by %n entry(s), and will be replaced " -- "by the default icon. Are you sure you want to delete it?", -- "", -- iconUseCount), -- MessageBox::Delete | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Cancel) { -- // Early out, nothing is changed -- return; -- } else { -- // Revert matched entries to the default entry icon -- for (Entry* entry : asConst(entriesWithSameIcon)) { -- entry->setIcon(Entry::DefaultIconNumber); -- } -- -- // Revert matched groups to the default group icon -- for (Group* group : asConst(groupsWithSameIcon)) { -- group->setIcon(Group::DefaultIconNumber); -- } -- } -- } -- -- // Remove the icon from history entries -- for (Entry* entry : asConst(historyEntriesWithSameIcon)) { -- entry->setUpdateTimeinfo(false); -- entry->setIcon(0); -- entry->setUpdateTimeinfo(true); -- } -- -- // Remove the icon from the database -- m_db->metadata()->removeCustomIcon(iconUuid); -- m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), -- m_db->metadata()->customIconsOrder()); -- -- // Reset the current icon view -- updateRadioButtonDefaultIcons(); -- -- if (m_db->rootGroup()->findEntryByUuid(m_currentUuid) != nullptr) { -- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Entry::DefaultIconNumber)); -- } else { -- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Group::DefaultIconNumber)); -- } -- -- emit widgetUpdated(); -- } -- } --} -- --void EditWidgetIcons::updateWidgetsDefaultIcons(bool check) --{ -- if (check) { -- QModelIndex index = m_ui->defaultIconsView->currentIndex(); -- if (!index.isValid()) { -- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); -- } else { -- m_ui->defaultIconsView->setCurrentIndex(index); -- } -- m_ui->customIconsView->selectionModel()->clearSelection(); -- m_ui->deleteButton->setEnabled(false); -- } --} -- --void EditWidgetIcons::updateWidgetsCustomIcons(bool check) --{ -- if (check) { -- QModelIndex index = m_ui->customIconsView->currentIndex(); -- if (!index.isValid()) { -- m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0)); -- } else { -- m_ui->customIconsView->setCurrentIndex(index); -- } -- m_ui->defaultIconsView->selectionModel()->clearSelection(); -- m_ui->deleteButton->setEnabled(true); -- } --} -- --void EditWidgetIcons::updateRadioButtonDefaultIcons() --{ -- m_ui->defaultIconsRadio->setChecked(true); --} -- --void EditWidgetIcons::updateRadioButtonCustomIcons() --{ -- m_ui->customIconsRadio->setChecked(true); --} -- --void EditWidgetIcons::confirmApplyIconTo(QAction* action) --{ -- m_applyIconTo = action->data().value(); -- m_ui->applyIconToPushButton->setText(action->text()); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.h keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.h ---- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,117 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITWIDGETICONS_H --#define KEEPASSX_EDITWIDGETICONS_H -- --#include --#include --#include --#include -- --#include "config-keepassx.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "gui/MessageWidget.h" -- --class Database; --class DefaultIconModel; --class CustomIconModel; --#ifdef WITH_XC_NETWORKING --class IconDownloader; --#endif -- --namespace Ui --{ -- class EditWidgetIcons; --} -- --enum ApplyIconToOptions --{ -- THIS_ONLY = 0b00, -- CHILD_GROUPS = 0b10, -- CHILD_ENTRIES = 0b01, -- ALL_CHILDREN = 0b11 --}; -- --Q_DECLARE_METATYPE(ApplyIconToOptions) -- --struct IconStruct --{ -- IconStruct(); -- -- QUuid uuid; -- int number; -- ApplyIconToOptions applyTo; --}; -- --class EditWidgetIcons : public QWidget --{ -- Q_OBJECT -- --public: -- explicit EditWidgetIcons(QWidget* parent = nullptr); -- ~EditWidgetIcons(); -- -- IconStruct state(); -- void reset(); -- void load(const QUuid& currentUuid, -- const QSharedPointer& database, -- const IconStruct& iconStruct, -- const QString& url = ""); -- void setShowApplyIconToButton(bool state); -- --public slots: -- void setUrl(const QString& url); -- void abortRequests(); -- --signals: -- void messageEditEntry(QString, MessageWidget::MessageType); -- void messageEditEntryDismiss(); -- void widgetUpdated(); -- --private slots: -- void downloadFavicon(); -- void iconReceived(const QString& url, const QImage& icon); -- void addCustomIconFromFile(); -- bool addCustomIcon(const QImage& icon); -- void removeCustomIcon(); -- void updateWidgetsDefaultIcons(bool checked); -- void updateWidgetsCustomIcons(bool checked); -- void updateRadioButtonDefaultIcons(); -- void updateRadioButtonCustomIcons(); -- void confirmApplyIconTo(QAction* action); -- --private: -- QMenu* createApplyIconToMenu(); -- -- const QScopedPointer m_ui; -- QSharedPointer m_db; -- QUuid m_currentUuid; -- ApplyIconToOptions m_applyIconTo; -- DefaultIconModel* const m_defaultIconModel; -- CustomIconModel* const m_customIconModel; --#ifdef WITH_XC_NETWORKING -- QScopedPointer m_downloader; -- QString m_url; --#endif -- -- Q_DISABLE_COPY(EditWidgetIcons) --}; -- --#endif // KEEPASSX_EDITWIDGETICONS_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.ui keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.ui ---- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,190 +0,0 @@ -- -- -- EditWidgetIcons -- -- -- -- 0 -- 0 -- 437 -- 316 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Use default icon -- -- -- -- -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QListView::Static -- -- -- QListView::LeftToRight -- -- -- true -- -- -- QListView::Adjust -- -- -- 4 -- -- -- QListView::ListMode -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- Use custom icon -- -- -- -- -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QListView::Static -- -- -- QListView::LeftToRight -- -- -- true -- -- -- QListView::Adjust -- -- -- 4 -- -- -- QListView::ListMode -- -- -- -- -- -- -- -- -- Add custom icon -- -- -- -- -- -- -- Delete custom icon -- -- -- -- -- -- -- Download favicon for URL -- -- -- Download favicon for URL -- -- -- Download favicon -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Apply selected icon to subgroups and entries -- -- -- Apply selected icon to subgroups and entries -- -- -- padding: 4px 10px -- -- -- Apply icon to... -- -- -- -- -- -- -- -- -- defaultIconsRadio -- defaultIconsView -- customIconsRadio -- customIconsView -- addButton -- deleteButton -- faviconButton -- applyIconToPushButton -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.cpp keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.cpp ---- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,122 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EditWidgetProperties.h" --#include "ui_EditWidgetProperties.h" -- --#include "MessageBox.h" --#include "core/CustomData.h" --#include "core/TimeInfo.h" -- --#include -- --EditWidgetProperties::EditWidgetProperties(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::EditWidgetProperties()) -- , m_customDataModel(new QStandardItemModel(this)) --{ -- m_ui->setupUi(this); -- m_ui->removeCustomDataButton->setEnabled(false); -- m_ui->customDataTable->setModel(m_customDataModel); -- -- // clang-format off -- connect(m_ui->customDataTable->selectionModel(), -- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- SLOT(toggleRemoveButton(QItemSelection))); -- // clang-format on -- connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedPluginData())); --} -- --EditWidgetProperties::~EditWidgetProperties() --{ --} -- --void EditWidgetProperties::setFields(const TimeInfo& timeInfo, const QUuid& uuid) --{ -- static const QString timeFormat("d MMM yyyy HH:mm:ss"); -- m_ui->modifiedEdit->setText(timeInfo.lastModificationTime().toLocalTime().toString(timeFormat)); -- m_ui->createdEdit->setText(timeInfo.creationTime().toLocalTime().toString(timeFormat)); -- m_ui->accessedEdit->setText(timeInfo.lastAccessTime().toLocalTime().toString(timeFormat)); -- m_ui->uuidEdit->setText(uuid.toRfc4122().toHex()); --} -- --void EditWidgetProperties::setCustomData(CustomData* customData) --{ -- if (m_customData) { -- m_customData->disconnect(this); -- } -- -- m_customData = customData; -- -- if (m_customData) { -- connect(m_customData, SIGNAL(customDataModified()), SLOT(update())); -- } -- -- update(); --} -- --void EditWidgetProperties::removeSelectedPluginData() --{ -- QModelIndexList indexes = m_ui->customDataTable->selectionModel()->selectedRows(0); -- if (indexes.isEmpty()) { -- return; -- } -- -- auto result = MessageBox::question(this, -- tr("Delete plugin data?"), -- tr("Do you really want to delete the selected plugin data?\n" -- "This may cause the affected plugins to malfunction."), -- MessageBox::Delete | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Cancel) { -- return; -- } -- -- QStringList selectedData; -- for (const auto& index : indexes) { -- const QString key = index.data().toString(); -- selectedData.append(key); -- } -- -- std::sort(selectedData.begin(), selectedData.end()); -- for (const auto& key : selectedData) { -- m_customData->remove(key); -- } -- -- update(); --} -- --void EditWidgetProperties::toggleRemoveButton(const QItemSelection& selected) --{ -- m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty()); --} -- --void EditWidgetProperties::update() --{ -- m_customDataModel->clear(); -- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")}); -- if (!m_customData) { -- m_ui->removeCustomDataButton->setEnabled(false); -- } else { -- for (const QString& key : m_customData->keys()) { -- m_customDataModel->appendRow(QList() -- << new QStandardItem(key) << new QStandardItem(m_customData->value(key))); -- } -- m_ui->removeCustomDataButton->setEnabled(!m_customData->isEmpty()); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.h keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.h ---- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITWIDGETPROPERTIES_H --#define KEEPASSX_EDITWIDGETPROPERTIES_H -- --#include --#include --#include --#include -- --class CustomData; --class TimeInfo; --class QUuid; -- --namespace Ui --{ -- class EditWidgetProperties; --} -- --class EditWidgetProperties : public QWidget --{ -- Q_OBJECT -- --public: -- explicit EditWidgetProperties(QWidget* parent = nullptr); -- ~EditWidgetProperties(); -- -- void setFields(const TimeInfo& timeInfo, const QUuid& uuid); -- void setCustomData(CustomData* customData); -- --private slots: -- void update(); -- void removeSelectedPluginData(); -- void toggleRemoveButton(const QItemSelection& selected); -- --private: -- const QScopedPointer m_ui; -- -- QPointer m_customData; -- QPointer m_customDataModel; -- -- Q_DISABLE_COPY(EditWidgetProperties) --}; -- --#endif // KEEPASSX_EDITWIDGETPROPERTIES_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.ui keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.ui ---- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,212 +0,0 @@ -- -- -- EditWidgetProperties -- -- -- -- 0 -- 0 -- 364 -- 408 -- -- -- -- -- 5 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- 8 -- -- -- -- -- Created: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Datetime created -- -- -- true -- -- -- -- -- -- -- Modified: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Datetime modified -- -- -- true -- -- -- -- -- -- -- Accessed: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Datetime accessed -- -- -- true -- -- -- -- -- -- -- Uuid: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Unique ID -- -- -- true -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- Plugin Data -- -- -- -- -- -- Plugin data -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QAbstractItemView::SelectRows -- -- -- 200 -- -- -- true -- -- -- false -- -- -- -- -- -- -- -- -- Remove selected plugin data -- -- -- Remove -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- createdEdit -- modifiedEdit -- accessedEdit -- uuidEdit -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.ui keepassxc-2.6.4-patched/src/gui/EditWidget.ui ---- keepassxc-2.6.4-orig/src/gui/EditWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EditWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,112 +0,0 @@ -- -- -- EditWidget -- -- -- -- 0 -- 0 -- 527 -- 391 -- -- -- -- -- -- -- -- -- -- 2 -- -- -- 2 -- -- -- 2 -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 1 -- 3 -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -1 -- -- -- -- -- -- -- -- -- 5 -- -- -- -- -- QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok -- -- -- -- -- -- -- -- -- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
-- -- CategoryListWidget -- QWidget --
gui/CategoryListWidget.h
-- 1 --
--
-- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,145 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeAssociationsModel.h" -- --#include "core/Entry.h" -- --AutoTypeAssociationsModel::AutoTypeAssociationsModel(QObject* parent) -- : QAbstractListModel(parent) -- , m_autoTypeAssociations(nullptr) -- , m_entry(nullptr) --{ --} -- --void AutoTypeAssociationsModel::setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations) --{ -- beginResetModel(); -- -- if (m_autoTypeAssociations) { -- m_autoTypeAssociations->disconnect(this); -- } -- -- m_autoTypeAssociations = autoTypeAssociations; -- -- if (m_autoTypeAssociations) { -- connect(m_autoTypeAssociations, SIGNAL(dataChanged(int)), SLOT(associationChange(int))); -- connect(m_autoTypeAssociations, SIGNAL(aboutToAdd(int)), SLOT(associationAboutToAdd(int))); -- connect(m_autoTypeAssociations, SIGNAL(added(int)), SLOT(associationAdd())); -- connect(m_autoTypeAssociations, SIGNAL(aboutToRemove(int)), SLOT(associationAboutToRemove(int))); -- connect(m_autoTypeAssociations, SIGNAL(removed(int)), SLOT(associationRemove())); -- connect(m_autoTypeAssociations, SIGNAL(aboutToReset()), SLOT(aboutToReset())); -- connect(m_autoTypeAssociations, SIGNAL(reset()), SLOT(reset())); -- } -- -- endResetModel(); --} -- --void AutoTypeAssociationsModel::setEntry(Entry* entry) --{ -- m_entry = entry; --} -- --int AutoTypeAssociationsModel::rowCount(const QModelIndex& parent) const --{ -- if (!m_autoTypeAssociations || parent.isValid()) { -- return 0; -- } else { -- return m_autoTypeAssociations->size(); -- } --} -- --int AutoTypeAssociationsModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- -- return 2; --} -- --QVariant AutoTypeAssociationsModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)) { -- if (section == 0) { -- return tr("Window"); -- } else { -- return tr("Sequence"); -- } -- } else { -- return QVariant(); -- } --} -- --QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- if (role == Qt::DisplayRole) { -- if (index.column() == 0) { -- QString window = m_autoTypeAssociations->get(index.row()).window; -- if (m_entry) { -- window = m_entry->maskPasswordPlaceholders(window); -- window = m_entry->resolveMultiplePlaceholders(window); -- } -- return window; -- } else { -- QString sequence = m_autoTypeAssociations->get(index.row()).sequence; -- if (sequence.isEmpty()) { -- sequence = tr("Default sequence"); -- } -- return sequence; -- } -- } else { -- return QVariant(); -- } --} -- --void AutoTypeAssociationsModel::associationChange(int i) --{ -- emit dataChanged(index(i, 0), index(i, columnCount() - 1)); --} -- --void AutoTypeAssociationsModel::associationAboutToAdd(int i) --{ -- beginInsertRows(QModelIndex(), i, i); --} -- --void AutoTypeAssociationsModel::associationAdd() --{ -- endInsertRows(); --} -- --void AutoTypeAssociationsModel::associationAboutToRemove(int i) --{ -- beginRemoveRows(QModelIndex(), i, i); --} -- --void AutoTypeAssociationsModel::associationRemove() --{ -- endRemoveRows(); --} -- --void AutoTypeAssociationsModel::aboutToReset() --{ -- beginResetModel(); --} -- --void AutoTypeAssociationsModel::reset() --{ -- endResetModel(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,55 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H --#define KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H -- --#include --#include -- --#include "core/AutoTypeAssociations.h" -- --class Entry; -- --class AutoTypeAssociationsModel : public QAbstractListModel --{ -- Q_OBJECT -- --public: -- explicit AutoTypeAssociationsModel(QObject* parent = nullptr); -- void setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations); -- void setEntry(Entry* entry); -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- --public slots: -- void associationChange(int i); -- void associationAboutToAdd(int i); -- void associationAdd(); -- void associationAboutToRemove(int i); -- void associationRemove(); -- void aboutToReset(); -- void reset(); -- --private: -- AutoTypeAssociations* m_autoTypeAssociations; -- QPointer m_entry; --}; -- --#endif // KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,195 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeMatchModel.h" -- --#include -- --#include "core/DatabaseIcons.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/Metadata.h" -- --AutoTypeMatchModel::AutoTypeMatchModel(QObject* parent) -- : QAbstractTableModel(parent) --{ --} -- --AutoTypeMatch AutoTypeMatchModel::matchFromIndex(const QModelIndex& index) const --{ -- Q_ASSERT(index.isValid() && index.row() < m_matches.size()); -- return m_matches.at(index.row()); --} -- --QModelIndex AutoTypeMatchModel::indexFromMatch(const AutoTypeMatch& match) const --{ -- int row = m_matches.indexOf(match); -- Q_ASSERT(row != -1); -- return index(row, 1); --} -- --void AutoTypeMatchModel::setMatchList(const QList& matches) --{ -- beginResetModel(); -- -- severConnections(); -- -- m_allGroups.clear(); -- m_matches = matches; -- -- QSet databases; -- -- for (AutoTypeMatch& match : m_matches) { -- databases.insert(match.entry->group()->database()); -- } -- -- for (Database* db : asConst(databases)) { -- Q_ASSERT(db); -- for (const Group* group : db->rootGroup()->groupsRecursive(true)) { -- m_allGroups.append(group); -- } -- -- if (db->metadata()->recycleBin()) { -- m_allGroups.removeOne(db->metadata()->recycleBin()); -- } -- } -- -- for (const Group* group : asConst(m_allGroups)) { -- makeConnections(group); -- } -- -- endResetModel(); --} -- --int AutoTypeMatchModel::rowCount(const QModelIndex& parent) const --{ -- if (parent.isValid()) { -- return 0; -- } -- return m_matches.size(); --} -- --int AutoTypeMatchModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- -- return 4; --} -- --QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return {}; -- } -- -- AutoTypeMatch match = matchFromIndex(index); -- -- if (role == Qt::DisplayRole) { -- switch (index.column()) { -- case ParentGroup: -- if (match.entry->group()) { -- return match.entry->group()->name(); -- } -- break; -- case Title: -- return match.entry->resolveMultiplePlaceholders(match.entry->title()); -- case Username: -- return match.entry->resolveMultiplePlaceholders(match.entry->username()); -- case Sequence: -- return match.sequence; -- } -- } else if (role == Qt::DecorationRole) { -- switch (index.column()) { -- case ParentGroup: -- if (match.entry->group()) { -- return match.entry->group()->iconPixmap(); -- } -- break; -- case Title: -- return match.entry->iconPixmap(); -- } -- } else if (role == Qt::FontRole) { -- QFont font; -- if (match.entry->isExpired()) { -- font.setStrikeOut(true); -- } -- return font; -- } -- -- return {}; --} -- --QVariant AutoTypeMatchModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { -- switch (section) { -- case ParentGroup: -- return tr("Group"); -- case Title: -- return tr("Title"); -- case Username: -- return tr("Username"); -- case Sequence: -- return tr("Sequence"); -- } -- } -- -- return {}; --} -- --void AutoTypeMatchModel::entryDataChanged(Entry* entry) --{ -- for (int row = 0; row < m_matches.size(); ++row) { -- AutoTypeMatch match = m_matches[row]; -- if (match.entry == entry) { -- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); -- } -- } --} -- --void AutoTypeMatchModel::entryAboutToRemove(Entry* entry) --{ -- for (int row = 0; row < m_matches.size(); ++row) { -- AutoTypeMatch match = m_matches[row]; -- if (match.entry == entry) { -- beginRemoveRows(QModelIndex(), row, row); -- m_matches.removeAt(row); -- endRemoveRows(); -- --row; -- } -- } --} -- --void AutoTypeMatchModel::entryRemoved() --{ --} -- --void AutoTypeMatchModel::severConnections() --{ -- for (const Group* group : asConst(m_allGroups)) { -- disconnect(group, nullptr, this, nullptr); -- } --} -- --void AutoTypeMatchModel::makeConnections(const Group* group) --{ -- connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*))); -- connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved())); -- connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,66 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEMATCHMODEL_H --#define KEEPASSX_AUTOTYPEMATCHMODEL_H -- --#include -- --#include "core/AutoTypeMatch.h" -- --class Entry; --class Group; -- --class AutoTypeMatchModel : public QAbstractTableModel --{ -- Q_OBJECT -- --public: -- enum ModelColumn -- { -- ParentGroup = 0, -- Title = 1, -- Username = 2, -- Sequence = 3 -- }; -- -- explicit AutoTypeMatchModel(QObject* parent = nullptr); -- AutoTypeMatch matchFromIndex(const QModelIndex& index) const; -- QModelIndex indexFromMatch(const AutoTypeMatch& match) const; -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- -- void setMatchList(const QList& matches); -- --private slots: -- void entryAboutToRemove(Entry* entry); -- void entryRemoved(); -- void entryDataChanged(Entry* entry); -- --private: -- void severConnections(); -- void makeConnections(const Group* group); -- -- QList m_matches; -- QList m_allGroups; --}; -- --#endif // KEEPASSX_AUTOTYPEMATCHMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,154 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "AutoTypeMatchView.h" -- --#include "core/Entry.h" --#include "gui/Clipboard.h" --#include "gui/SortFilterHideProxyModel.h" -- --#include --#include --#include -- --AutoTypeMatchView::AutoTypeMatchView(QWidget* parent) -- : QTreeView(parent) -- , m_model(new AutoTypeMatchModel(this)) -- , m_sortModel(new SortFilterHideProxyModel(this)) --{ -- m_sortModel->setSourceModel(m_model); -- m_sortModel->setDynamicSortFilter(true); -- m_sortModel->setSortLocaleAware(true); -- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); -- setModel(m_sortModel); -- -- setUniformRowHeights(true); -- setRootIsDecorated(false); -- setAlternatingRowColors(true); -- setDragEnabled(false); -- setSortingEnabled(true); -- setSelectionMode(QAbstractItemView::SingleSelection); -- header()->setDefaultSectionSize(150); -- -- setContextMenuPolicy(Qt::ActionsContextMenu); -- auto* copyUserNameAction = new QAction(tr("Copy &username"), this); -- auto* copyPasswordAction = new QAction(tr("Copy &password"), this); -- addAction(copyUserNameAction); -- addAction(copyPasswordAction); -- -- connect(copyUserNameAction, SIGNAL(triggered()), this, SLOT(userNameCopied())); -- connect(copyPasswordAction, SIGNAL(triggered()), this, SLOT(passwordCopied())); -- -- connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); -- // clang-format off -- connect(selectionModel(), -- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- SIGNAL(matchSelectionChanged())); -- // clang-format on --} -- --void AutoTypeMatchView::userNameCopied() --{ -- clipboard()->setText(currentMatch().entry->username()); -- emit matchTextCopied(); --} -- --void AutoTypeMatchView::passwordCopied() --{ -- clipboard()->setText(currentMatch().entry->password()); -- emit matchTextCopied(); --} -- --void AutoTypeMatchView::keyPressEvent(QKeyEvent* event) --{ -- if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { -- emitMatchActivated(currentIndex()); --#ifdef Q_OS_MACOS -- // Pressing return does not emit the QTreeView::activated signal on mac os -- emit activated(currentIndex()); --#endif -- } -- -- QTreeView::keyPressEvent(event); --} -- --void AutoTypeMatchView::setMatchList(const QList& matches) --{ -- m_model->setMatchList(matches); -- -- bool sameSequences = true; -- if (matches.count() > 1) { -- QString sequenceTest = matches[0].sequence; -- for (const auto& match : matches) { -- if (match.sequence != sequenceTest) { -- sameSequences = false; -- break; -- } -- } -- } -- setColumnHidden(AutoTypeMatchModel::Sequence, sameSequences); -- -- for (int i = 0; i < m_model->columnCount(); ++i) { -- resizeColumnToContents(i); -- if (columnWidth(i) > 250) { -- setColumnWidth(i, 250); -- } -- } -- -- setFirstMatchActive(); --} -- --void AutoTypeMatchView::setFirstMatchActive() --{ -- if (m_model->rowCount() > 0) { -- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); -- setCurrentMatch(m_model->matchFromIndex(index)); -- } else { -- emit matchSelectionChanged(); -- } --} -- --void AutoTypeMatchView::emitMatchActivated(const QModelIndex& index) --{ -- AutoTypeMatch match = matchFromIndex(index); -- -- emit matchActivated(match); --} -- --AutoTypeMatch AutoTypeMatchView::currentMatch() --{ -- QModelIndexList list = selectionModel()->selectedRows(); -- if (list.size() == 1) { -- return m_model->matchFromIndex(m_sortModel->mapToSource(list.first())); -- } -- return AutoTypeMatch(); --} -- --void AutoTypeMatchView::setCurrentMatch(const AutoTypeMatch& match) --{ -- selectionModel()->setCurrentIndex(m_sortModel->mapFromSource(m_model->indexFromMatch(match)), -- QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); --} -- --AutoTypeMatch AutoTypeMatchView::matchFromIndex(const QModelIndex& index) --{ -- if (index.isValid()) { -- return m_model->matchFromIndex(m_sortModel->mapToSource(index)); -- } -- return AutoTypeMatch(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.h ---- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2015 David Wu -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_AUTOTYPEMATCHVIEW_H --#define KEEPASSX_AUTOTYPEMATCHVIEW_H -- --#include -- --#include "core/AutoTypeMatch.h" -- --#include "gui/entry/AutoTypeMatchModel.h" -- --class SortFilterHideProxyModel; -- --class AutoTypeMatchView : public QTreeView --{ -- Q_OBJECT -- --public: -- explicit AutoTypeMatchView(QWidget* parent = nullptr); -- AutoTypeMatch currentMatch(); -- void setCurrentMatch(const AutoTypeMatch& match); -- AutoTypeMatch matchFromIndex(const QModelIndex& index); -- void setMatchList(const QList& matches); -- void setFirstMatchActive(); -- --signals: -- void matchActivated(AutoTypeMatch match); -- void matchSelectionChanged(); -- void matchTextCopied(); -- --protected: -- void keyPressEvent(QKeyEvent* event) override; -- --private slots: -- void emitMatchActivated(const QModelIndex& index); -- void userNameCopied(); -- void passwordCopied(); -- --private: -- AutoTypeMatchModel* const m_model; -- SortFilterHideProxyModel* const m_sortModel; --}; -- --#endif // KEEPASSX_AUTOTYPEMATCHVIEW_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAdvanced.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAdvanced.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAdvanced.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAdvanced.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,338 +0,0 @@ -- -- -- EditEntryWidgetAdvanced -- -- -- -- 0 -- 0 -- 532 -- 469 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Additional attributes -- -- -- -- -- -- Qt::Horizontal -- -- -- false -- -- -- -- -- 0 -- 0 -- -- -- -- Attribute selection -- -- -- QAbstractScrollArea::AdjustToContents -- -- -- QListView::Adjust -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- -- 170 -- 0 -- -- -- -- Attribute value -- -- -- -- -- -- -- -- -- -- Add a new attribute -- -- -- Add -- -- -- -- -- -- -- false -- -- -- Remove selected attribute -- -- -- Remove -- -- -- -- -- -- -- false -- -- -- Edit attribute name -- -- -- Edit Name -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- true -- -- -- Toggle attribute protection -- -- -- margin-left:50%;margin-right:50% -- -- -- Protect -- -- -- true -- -- -- -- -- -- -- false -- -- -- Show a protected attribute -- -- -- Reveal -- -- -- false -- -- -- -- -- -- -- -- -- -- -- -- Attachments -- -- -- -- -- -- -- 100 -- 100 -- -- -- -- -- -- -- -- -- -- -- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> -- -- -- Exclude from database reports -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Foreground Color: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 25 -- 25 -- -- -- -- Foreground color selection -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Maximum -- -- -- -- 30 -- 20 -- -- -- -- -- -- -- -- Background Color: -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 25 -- 25 -- -- -- -- Background color selection -- -- -- -- -- -- false -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- EntryAttachmentsWidget -- QWidget --
gui/entry/EntryAttachmentsWidget.h
-- 1 --
-- -- AttributesListView -- QListView --
gui/entry/EditEntryWidget_p.h
--
--
-- -- attributesView -- attributesEdit -- addAttributeButton -- removeAttributeButton -- editAttributeButton -- protectAttributeButton -- revealAttributeButton -- knownBadCheckBox -- fgColorCheckBox -- fgColorButton -- bgColorCheckBox -- bgColorButton -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAutoType.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAutoType.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAutoType.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAutoType.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,344 +0,0 @@ -- -- -- EditEntryWidgetAutoType -- -- -- -- 0 -- 0 -- 577 -- 434 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Enable Auto-Type for this entry -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 1 -- 10 -- -- -- -- -- -- -- -- Inherit default Auto-Type sequence from the group -- -- -- -- -- -- -- Use custom Auto-Type sequence: -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 1 -- -- -- -- -- -- -- -- false -- -- -- Custom Auto-Type sequence -- -- -- -- -- -- -- false -- -- -- Open Auto-Type help webpage -- -- -- Open Auto-Type help webpage -- -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- Window Associations -- -- -- -- -- -- -- -- Existing window associations -- -- -- false -- -- -- true -- -- -- false -- -- -- false -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 25 -- -- -- -- Add new window association -- -- -- Add new window association -- -- -- + -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 25 -- -- -- -- Remove selected window association -- -- -- Remove selected window association -- -- -- - -- -- -- -- -- -- -- -- -- -- -- -- -- Window title: -- -- -- -- -- -- -- You can use an asterisk (*) to match everything -- -- -- Set the window association title -- -- -- You can use an asterisk to match everything -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 1 -- 10 -- -- -- -- -- -- -- -- Use a specific sequence for this association: -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 1 -- -- -- -- -- -- -- -- false -- -- -- Custom Auto-Type sequence for this window -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- WindowSelectComboBox -- QComboBox --
autotype/WindowSelectComboBox.h
--
--
-- -- enableButton -- inheritSequenceButton -- customSequenceButton -- sequenceEdit -- openHelpButton -- assocView -- windowTitleCombo -- customWindowSequenceButton -- windowSequenceEdit -- assocAddButton -- assocRemoveButton -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetBrowser.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetBrowser.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetBrowser.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetBrowser.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,151 +0,0 @@ -- -- -- EditEntryWidgetBrowser -- -- -- -- 0 -- 0 -- 400 -- 348 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- These settings affect to the entry's behaviour with the browser extension. -- -- -- -- -- -- -- General -- -- -- -- -- -- Skip Auto-Submit for this entry -- -- -- -- -- -- -- Hide this entry from the browser extension -- -- -- -- -- -- -- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. -- -- -- Use this entry only with HTTP Basic Auth -- -- -- -- -- -- -- -- -- -- Additional URL's -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- QAbstractScrollArea::AdjustToContents -- -- -- QListView::Adjust -- -- -- -- -- -- -- -- -- Add -- -- -- -- -- -- -- false -- -- -- Remove -- -- -- -- -- -- -- false -- -- -- Edit -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Expanding -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- skipAutoSubmitCheckbox -- hideEntryCheckbox -- onlyHttpAuthCheckbox -- additionalURLsView -- addURLButton -- removeURLButton -- editURLButton -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.cpp keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1522 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EditEntryWidget.h" --#include "ui_EditEntryWidgetAdvanced.h" --#include "ui_EditEntryWidgetAutoType.h" --#include "ui_EditEntryWidgetBrowser.h" --#include "ui_EditEntryWidgetHistory.h" --#include "ui_EditEntryWidgetMain.h" --#include "ui_EditEntryWidgetSSHAgent.h" -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "autotype/AutoType.h" --#include "core/Clock.h" --#include "core/Config.h" --#include "core/Database.h" --#include "core/Entry.h" --#include "core/Metadata.h" --#include "core/PasswordHealth.h" --#include "core/Resources.h" --#include "core/TimeDelta.h" --#include "core/Tools.h" --#ifdef WITH_XC_SSHAGENT --#include "crypto/ssh/OpenSSHKey.h" --#include "sshagent/KeeAgentSettings.h" --#include "sshagent/SSHAgent.h" --#endif --#ifdef WITH_XC_BROWSER --#include "EntryURLModel.h" --#include "browser/BrowserService.h" --#endif --#include "gui/Clipboard.h" --#include "gui/EditWidgetIcons.h" --#include "gui/EditWidgetProperties.h" --#include "gui/FileDialog.h" --#include "gui/Font.h" --#include "gui/MessageBox.h" --#include "gui/entry/AutoTypeAssociationsModel.h" --#include "gui/entry/EntryAttachmentsModel.h" --#include "gui/entry/EntryAttributesModel.h" --#include "gui/entry/EntryHistoryModel.h" -- --EditEntryWidget::EditEntryWidget(QWidget* parent) -- : EditWidget(parent) -- , m_entry(nullptr) -- , m_mainUi(new Ui::EditEntryWidgetMain()) -- , m_advancedUi(new Ui::EditEntryWidgetAdvanced()) -- , m_autoTypeUi(new Ui::EditEntryWidgetAutoType()) -- , m_sshAgentUi(new Ui::EditEntryWidgetSSHAgent()) -- , m_historyUi(new Ui::EditEntryWidgetHistory()) -- , m_browserUi(new Ui::EditEntryWidgetBrowser()) -- , m_customData(new CustomData()) -- , m_mainWidget(new QScrollArea()) -- , m_advancedWidget(new QWidget()) -- , m_iconsWidget(new EditWidgetIcons()) -- , m_autoTypeWidget(new QWidget()) --#ifdef WITH_XC_SSHAGENT -- , m_sshAgentWidget(new QWidget()) --#endif --#ifdef WITH_XC_BROWSER -- , m_browserSettingsChanged(false) -- , m_browserWidget(new QWidget()) -- , m_additionalURLsDataModel(new EntryURLModel(this)) --#endif -- , m_editWidgetProperties(new EditWidgetProperties()) -- , m_historyWidget(new QWidget()) -- , m_entryAttributes(new EntryAttributes(this)) -- , m_attributesModel(new EntryAttributesModel(m_advancedWidget)) -- , m_historyModel(new EntryHistoryModel(this)) -- , m_sortModel(new QSortFilterProxyModel(this)) -- , m_autoTypeAssoc(new AutoTypeAssociations(this)) -- , m_autoTypeAssocModel(new AutoTypeAssociationsModel(this)) -- , m_autoTypeDefaultSequenceGroup(new QButtonGroup(this)) -- , m_autoTypeWindowSequenceGroup(new QButtonGroup(this)) -- , m_usernameCompleter(new QCompleter(this)) -- , m_usernameCompleterModel(new QStringListModel(this)) --{ -- setupMain(); -- setupAdvanced(); -- setupIcon(); -- setupAutoType(); -- --#ifdef WITH_XC_SSHAGENT -- setupSSHAgent(); --#endif -- --#ifdef WITH_XC_BROWSER -- setupBrowser(); --#endif -- -- setupProperties(); -- setupHistory(); -- setupEntryUpdate(); -- -- m_entryModifiedTimer.setSingleShot(true); -- m_entryModifiedTimer.setInterval(0); -- connect(&m_entryModifiedTimer, &QTimer::timeout, this, [this] { -- if (isVisible() && m_entry) { -- setForms(m_entry); -- } -- }); -- -- connect(this, SIGNAL(accepted()), SLOT(acceptEntry())); -- connect(this, SIGNAL(rejected()), SLOT(cancel())); -- connect(this, SIGNAL(apply()), SLOT(commitEntry())); -- // clang-format off -- connect(m_iconsWidget, -- SIGNAL(messageEditEntry(QString,MessageWidget::MessageType)), -- SLOT(showMessage(QString,MessageWidget::MessageType))); -- // clang-format on -- -- connect(m_iconsWidget, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage())); -- -- m_editWidgetProperties->setCustomData(m_customData.data()); --} -- --EditEntryWidget::~EditEntryWidget() --{ --} -- --void EditEntryWidget::setupMain() --{ -- m_mainUi->setupUi(m_mainWidget); -- addPage(tr("Entry"), Resources::instance()->icon("document-edit"), m_mainWidget); -- -- m_mainUi->usernameComboBox->setEditable(true); -- m_usernameCompleter->setCompletionMode(QCompleter::InlineCompletion); -- m_usernameCompleter->setCaseSensitivity(Qt::CaseSensitive); -- m_usernameCompleter->setModel(m_usernameCompleterModel); -- m_mainUi->usernameComboBox->setCompleter(m_usernameCompleter); -- --#ifdef WITH_XC_NETWORKING -- m_mainUi->fetchFaviconButton->setIcon(resources()->icon("favicon-download")); -- m_mainUi->fetchFaviconButton->setDisabled(true); --#else -- m_mainUi->fetchFaviconButton->setVisible(false); --#endif -- --#ifdef WITH_XC_NETWORKING -- connect(m_mainUi->fetchFaviconButton, SIGNAL(clicked()), m_iconsWidget, SLOT(downloadFavicon())); -- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), m_iconsWidget, SLOT(setUrl(QString))); -- m_mainUi->urlEdit->enableVerifyMode(); --#endif -- connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) { -- m_mainUi->expireDatePicker->setEnabled(enabled); -- if (enabled) { -- m_mainUi->expireDatePicker->setDateTime(Clock::currentDateTime()); -- } -- }); -- -- connect(m_mainUi->notesEnabled, SIGNAL(toggled(bool)), this, SLOT(toggleHideNotes(bool))); -- -- m_mainUi->expirePresets->setMenu(createPresetsMenu()); -- connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*))); --} -- --void EditEntryWidget::setupAdvanced() --{ -- m_advancedUi->setupUi(m_advancedWidget); -- addPage(tr("Advanced"), Resources::instance()->icon("preferences-other"), m_advancedWidget); -- -- m_advancedUi->attachmentsWidget->setReadOnly(false); -- m_advancedUi->attachmentsWidget->setButtonsVisible(true); -- -- connect(m_advancedUi->attachmentsWidget, -- &EntryAttachmentsWidget::errorOccurred, -- this, -- [this](const QString& error) { showMessage(error, MessageWidget::Error); }); -- -- m_attributesModel->setEntryAttributes(m_entryAttributes); -- m_advancedUi->attributesView->setModel(m_attributesModel); -- -- // clang-format off -- connect(m_advancedUi->addAttributeButton, SIGNAL(clicked()), SLOT(insertAttribute())); -- connect(m_advancedUi->editAttributeButton, SIGNAL(clicked()), SLOT(editCurrentAttribute())); -- connect(m_advancedUi->removeAttributeButton, SIGNAL(clicked()), SLOT(removeCurrentAttribute())); -- connect(m_advancedUi->protectAttributeButton, SIGNAL(toggled(bool)), SLOT(protectCurrentAttribute(bool))); -- connect(m_advancedUi->revealAttributeButton, SIGNAL(clicked(bool)), SLOT(toggleCurrentAttributeVisibility())); -- connect(m_advancedUi->attributesView->selectionModel(), -- SIGNAL(currentChanged(QModelIndex,QModelIndex)), -- SLOT(updateCurrentAttribute())); -- connect(m_advancedUi->fgColorButton, SIGNAL(clicked()), SLOT(pickColor())); -- connect(m_advancedUi->bgColorButton, SIGNAL(clicked()), SLOT(pickColor())); -- // clang-format on --} -- --void EditEntryWidget::setupIcon() --{ -- m_iconsWidget->setShowApplyIconToButton(false); -- addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_iconsWidget); -- connect(this, SIGNAL(accepted()), m_iconsWidget, SLOT(abortRequests())); -- connect(this, SIGNAL(rejected()), m_iconsWidget, SLOT(abortRequests())); --} -- --void EditEntryWidget::openAutotypeHelp() --{ -- QDesktopServices::openUrl( -- QUrl("https://keepassxc.org/docs/KeePassXC_UserGuide.html#_configure_auto_type_sequences")); --} -- --void EditEntryWidget::setupAutoType() --{ -- m_autoTypeUi->setupUi(m_autoTypeWidget); -- addPage(tr("Auto-Type"), Resources::instance()->icon("key-enter"), m_autoTypeWidget); -- -- m_autoTypeUi->openHelpButton->setIcon(resources()->icon("system-help")); -- -- m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton); -- m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton); -- m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc); -- m_autoTypeUi->assocView->setModel(m_autoTypeAssocModel); -- m_autoTypeUi->assocView->setColumnHidden(1, true); -- -- // clang-format off -- connect(m_autoTypeUi->enableButton, SIGNAL(toggled(bool)), SLOT(updateAutoTypeEnabled())); -- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), -- m_autoTypeUi->sequenceEdit, SLOT(setEnabled(bool))); -- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), -- m_autoTypeUi->openHelpButton, SLOT(setEnabled(bool))); -- connect(m_autoTypeUi->openHelpButton, SIGNAL(clicked()), SLOT(openAutotypeHelp())); -- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)), -- m_autoTypeUi->windowSequenceEdit, SLOT(setEnabled(bool))); -- connect(m_autoTypeUi->assocAddButton, SIGNAL(clicked()), SLOT(insertAutoTypeAssoc())); -- connect(m_autoTypeUi->assocRemoveButton, SIGNAL(clicked()), SLOT(removeAutoTypeAssoc())); -- connect(m_autoTypeUi->assocView->selectionModel(), -- SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), -- SLOT(updateAutoTypeEnabled())); -- connect(m_autoTypeUi->assocView->selectionModel(), -- SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), -- SLOT(loadCurrentAssoc(QModelIndex))); -- connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(updateAutoTypeEnabled())); -- connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(clearCurrentAssoc())); -- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), SLOT(applyCurrentAssoc())); -- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)), SLOT(applyCurrentAssoc())); -- connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), SLOT(applyCurrentAssoc())); -- // clang-format on --} -- --#ifdef WITH_XC_BROWSER --void EditEntryWidget::setupBrowser() --{ -- if (config()->get(Config::Browser_Enabled).toBool()) { -- m_browserUi->setupUi(m_browserWidget); -- addPage(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser"), m_browserWidget); -- m_additionalURLsDataModel->setEntryAttributes(m_entryAttributes); -- m_browserUi->additionalURLsView->setModel(m_additionalURLsDataModel); -- -- // Use a custom item delegate to align the icon to the right side -- auto iconDelegate = new URLModelIconDelegate(m_browserUi->additionalURLsView); -- m_browserUi->additionalURLsView->setItemDelegate(iconDelegate); -- -- // clang-format off -- connect(m_browserUi->skipAutoSubmitCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); -- connect(m_browserUi->hideEntryCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); -- connect(m_browserUi->onlyHttpAuthCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); -- connect(m_browserUi->addURLButton, SIGNAL(clicked()), SLOT(insertURL())); -- connect(m_browserUi->removeURLButton, SIGNAL(clicked()), SLOT(removeCurrentURL())); -- connect(m_browserUi->editURLButton, SIGNAL(clicked()), SLOT(editCurrentURL())); -- connect(m_browserUi->additionalURLsView->selectionModel(), -- SIGNAL(currentChanged(QModelIndex,QModelIndex)), -- SLOT(updateCurrentURL())); -- connect(m_additionalURLsDataModel, -- SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector&)), -- SLOT(updateCurrentAttribute())); -- // clang-format on -- } --} -- --void EditEntryWidget::updateBrowserModified() --{ -- m_browserSettingsChanged = true; --} -- --void EditEntryWidget::updateBrowser() --{ -- if (!m_browserSettingsChanged) { -- return; -- } -- -- auto skip = m_browserUi->skipAutoSubmitCheckbox->isChecked(); -- auto hide = m_browserUi->hideEntryCheckbox->isChecked(); -- auto onlyHttpAuth = m_browserUi->onlyHttpAuthCheckbox->isChecked(); -- m_customData->set(BrowserService::OPTION_SKIP_AUTO_SUBMIT, (skip ? TRUE_STR : FALSE_STR)); -- m_customData->set(BrowserService::OPTION_HIDE_ENTRY, (hide ? TRUE_STR : FALSE_STR)); -- m_customData->set(BrowserService::OPTION_ONLY_HTTP_AUTH, (onlyHttpAuth ? TRUE_STR : FALSE_STR)); --} -- --void EditEntryWidget::insertURL() --{ -- Q_ASSERT(!m_history); -- -- QString name("KP2A_URL"); -- int i = 1; -- -- while (m_entryAttributes->keys().contains(name)) { -- name = QString("KP2A_URL_%1").arg(i); -- i++; -- } -- -- m_entryAttributes->set(name, tr("")); -- QModelIndex index = m_additionalURLsDataModel->indexByKey(name); -- -- m_browserUi->additionalURLsView->setCurrentIndex(index); -- m_browserUi->additionalURLsView->edit(index); -- -- setModified(true); --} -- --void EditEntryWidget::removeCurrentURL() --{ -- Q_ASSERT(!m_history); -- -- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); -- -- if (index.isValid()) { -- auto result = MessageBox::question(this, -- tr("Confirm Removal"), -- tr("Are you sure you want to remove this URL?"), -- MessageBox::Remove | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Remove) { -- m_entryAttributes->remove(m_additionalURLsDataModel->keyByIndex(index)); -- if (m_additionalURLsDataModel->rowCount() == 0) { -- m_browserUi->editURLButton->setEnabled(false); -- m_browserUi->removeURLButton->setEnabled(false); -- } -- setModified(true); -- } -- } --} -- --void EditEntryWidget::editCurrentURL() --{ -- Q_ASSERT(!m_history); -- -- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); -- -- if (index.isValid()) { -- m_browserUi->additionalURLsView->edit(index); -- setModified(true); -- } --} -- --void EditEntryWidget::updateCurrentURL() --{ -- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); -- -- if (index.isValid()) { -- // Don't allow editing in history view -- m_browserUi->editURLButton->setEnabled(!m_history); -- m_browserUi->removeURLButton->setEnabled(!m_history); -- } else { -- m_browserUi->editURLButton->setEnabled(false); -- m_browserUi->removeURLButton->setEnabled(false); -- } --} --#endif -- --void EditEntryWidget::setupProperties() --{ -- addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties); --} -- --void EditEntryWidget::setupHistory() --{ -- m_historyUi->setupUi(m_historyWidget); -- addPage(tr("History"), Resources::instance()->icon("view-history"), m_historyWidget); -- -- m_sortModel->setSourceModel(m_historyModel); -- m_sortModel->setDynamicSortFilter(true); -- m_sortModel->setSortLocaleAware(true); -- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); -- m_sortModel->setSortRole(Qt::UserRole); -- -- m_historyUi->historyView->setModel(m_sortModel); -- m_historyUi->historyView->setRootIsDecorated(false); -- -- // clang-format off -- connect(m_historyUi->historyView, SIGNAL(activated(QModelIndex)), SLOT(histEntryActivated(QModelIndex))); -- connect(m_historyUi->historyView->selectionModel(), -- SIGNAL(currentChanged(QModelIndex,QModelIndex)), -- SLOT(updateHistoryButtons(QModelIndex,QModelIndex))); -- -- connect(m_historyUi->showButton, SIGNAL(clicked()), SLOT(showHistoryEntry())); -- connect(m_historyUi->restoreButton, SIGNAL(clicked()), SLOT(restoreHistoryEntry())); -- connect(m_historyUi->deleteButton, SIGNAL(clicked()), SLOT(deleteHistoryEntry())); -- connect(m_historyUi->deleteAllButton, SIGNAL(clicked()), SLOT(deleteAllHistoryEntries())); -- // clang-format on --} -- --void EditEntryWidget::setupEntryUpdate() --{ -- // Entry tab -- connect(m_mainUi->titleEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_mainUi->usernameComboBox->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_mainUi->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); --#ifdef WITH_XC_NETWORKING -- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(updateFaviconButtonEnable(QString))); --#endif -- connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(setModified())); -- connect(m_mainUi->notesEdit, SIGNAL(textChanged()), this, SLOT(setModified())); -- -- // Advanced tab -- connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setModified())); -- connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_advancedUi->knownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified())); -- -- // Icon tab -- connect(m_iconsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified())); -- -- // Auto-Type tab -- connect(m_autoTypeUi->enableButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_autoTypeUi->inheritSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); -- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); -- connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_autoTypeUi->sequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified())); -- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), this, SLOT(setModified())); -- -- // Properties and History tabs don't need extra connections -- --#ifdef WITH_XC_SSHAGENT -- // SSH Agent tab -- if (sshAgent()->isEnabled()) { -- connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); -- connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); -- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified())); -- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(editTextChanged(QString)), this, SLOT(setModified())); -- connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); -- connect(m_sshAgentUi->addKeyToAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_sshAgentUi->removeKeyFromAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_sshAgentUi->requireUserConfirmationCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_sshAgentUi->lifetimeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); -- connect(m_sshAgentUi->lifetimeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setModified())); -- } --#endif -- --#ifdef WITH_XC_BROWSER -- if (config()->get(Config::Browser_Enabled).toBool()) { -- connect(m_browserUi->skipAutoSubmitCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_browserUi->hideEntryCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_browserUi->onlyHttpAuthCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_browserUi->addURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_browserUi->removeURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_browserUi->editURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); -- } --#endif --} -- --void EditEntryWidget::emitHistoryEntryActivated(const QModelIndex& index) --{ -- Q_ASSERT(!m_history); -- -- Entry* entry = m_historyModel->entryFromIndex(index); -- emit historyEntryActivated(entry); --} -- --void EditEntryWidget::histEntryActivated(const QModelIndex& index) --{ -- Q_ASSERT(!m_history); -- -- QModelIndex indexMapped = m_sortModel->mapToSource(index); -- if (indexMapped.isValid()) { -- emitHistoryEntryActivated(indexMapped); -- } --} -- --void EditEntryWidget::updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous) --{ -- Q_UNUSED(previous); -- -- if (current.isValid()) { -- m_historyUi->showButton->setEnabled(true); -- m_historyUi->restoreButton->setEnabled(true); -- m_historyUi->deleteButton->setEnabled(true); -- } else { -- m_historyUi->showButton->setEnabled(false); -- m_historyUi->restoreButton->setEnabled(false); -- m_historyUi->deleteButton->setEnabled(false); -- } --} -- --#ifdef WITH_XC_SSHAGENT --void EditEntryWidget::setupSSHAgent() --{ -- m_sshAgentUi->setupUi(m_sshAgentWidget); -- -- QFont fixedFont = Font::fixedFont(); -- m_sshAgentUi->fingerprintTextLabel->setFont(fixedFont); -- m_sshAgentUi->commentTextLabel->setFont(fixedFont); -- m_sshAgentUi->publicKeyEdit->setFont(fixedFont); -- -- connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo())); -- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateSSHAgentAttachment())); -- connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo())); -- connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), SLOT(updateSSHAgentKeyInfo())); -- connect(m_sshAgentUi->browseButton, SIGNAL(clicked()), SLOT(browsePrivateKey())); -- connect(m_sshAgentUi->addToAgentButton, SIGNAL(clicked()), SLOT(addKeyToAgent())); -- connect(m_sshAgentUi->removeFromAgentButton, SIGNAL(clicked()), SLOT(removeKeyFromAgent())); -- connect(m_sshAgentUi->decryptButton, SIGNAL(clicked()), SLOT(decryptPrivateKey())); -- connect(m_sshAgentUi->copyToClipboardButton, SIGNAL(clicked()), SLOT(copyPublicKey())); -- -- connect(m_advancedUi->attachmentsWidget->entryAttachments(), -- SIGNAL(entryAttachmentsModified()), -- SLOT(updateSSHAgentAttachments())); -- -- addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget); --} -- --void EditEntryWidget::setSSHAgentSettings() --{ -- m_sshAgentUi->addKeyToAgentCheckBox->setChecked(m_sshAgentSettings.addAtDatabaseOpen()); -- m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(m_sshAgentSettings.removeAtDatabaseClose()); -- m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(m_sshAgentSettings.useConfirmConstraintWhenAdding()); -- m_sshAgentUi->lifetimeCheckBox->setChecked(m_sshAgentSettings.useLifetimeConstraintWhenAdding()); -- m_sshAgentUi->lifetimeSpinBox->setValue(m_sshAgentSettings.lifetimeConstraintDuration()); -- m_sshAgentUi->attachmentComboBox->clear(); -- m_sshAgentUi->addToAgentButton->setEnabled(false); -- m_sshAgentUi->removeFromAgentButton->setEnabled(false); -- m_sshAgentUi->copyToClipboardButton->setEnabled(false); --} -- --void EditEntryWidget::updateSSHAgent() --{ -- m_sshAgentSettings.reset(); -- m_sshAgentSettings.fromEntry(m_entry); -- setSSHAgentSettings(); -- -- updateSSHAgentAttachments(); --} -- --void EditEntryWidget::updateSSHAgentAttachment() --{ -- m_sshAgentUi->attachmentRadioButton->setChecked(true); -- updateSSHAgentKeyInfo(); --} -- --void EditEntryWidget::updateSSHAgentAttachments() --{ -- // detect if KeeAgent.settings was removed by hand and reset settings -- if (m_entry && KeeAgentSettings::inEntryAttachments(m_entry->attachments()) -- && !KeeAgentSettings::inEntryAttachments(m_advancedUi->attachmentsWidget->entryAttachments())) { -- m_sshAgentSettings.reset(); -- setSSHAgentSettings(); -- } -- -- m_sshAgentUi->attachmentComboBox->clear(); -- m_sshAgentUi->attachmentComboBox->addItem(""); -- -- auto attachments = m_advancedUi->attachmentsWidget->entryAttachments(); -- for (const QString& fileName : attachments->keys()) { -- if (fileName == "KeeAgent.settings") { -- continue; -- } -- -- m_sshAgentUi->attachmentComboBox->addItem(fileName); -- } -- -- m_sshAgentUi->attachmentComboBox->setCurrentText(m_sshAgentSettings.attachmentName()); -- m_sshAgentUi->externalFileEdit->setText(m_sshAgentSettings.fileName()); -- -- if (m_sshAgentSettings.selectedType() == "attachment") { -- m_sshAgentUi->attachmentRadioButton->setChecked(true); -- } else { -- m_sshAgentUi->externalFileRadioButton->setChecked(true); -- } -- -- updateSSHAgentKeyInfo(); --} -- --void EditEntryWidget::updateSSHAgentKeyInfo() --{ -- m_sshAgentUi->addToAgentButton->setEnabled(false); -- m_sshAgentUi->removeFromAgentButton->setEnabled(false); -- m_sshAgentUi->copyToClipboardButton->setEnabled(false); -- m_sshAgentUi->fingerprintTextLabel->setText(tr("n/a")); -- m_sshAgentUi->commentTextLabel->setText(tr("n/a")); -- m_sshAgentUi->decryptButton->setEnabled(false); -- m_sshAgentUi->publicKeyEdit->document()->setPlainText(""); -- -- OpenSSHKey key; -- -- if (!getOpenSSHKey(key)) { -- return; -- } -- -- if (!key.fingerprint().isEmpty()) { -- m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint(QCryptographicHash::Md5) + "\n" -- + key.fingerprint(QCryptographicHash::Sha256)); -- } else { -- m_sshAgentUi->fingerprintTextLabel->setText(tr("(encrypted)")); -- } -- -- if (!key.comment().isEmpty() || !key.encrypted()) { -- m_sshAgentUi->commentTextLabel->setText(key.comment()); -- } else { -- m_sshAgentUi->commentTextLabel->setText(tr("(encrypted)")); -- m_sshAgentUi->decryptButton->setEnabled(true); -- } -- -- if (!key.publicKey().isEmpty()) { -- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); -- m_sshAgentUi->copyToClipboardButton->setEnabled(true); -- } else { -- m_sshAgentUi->publicKeyEdit->document()->setPlainText(tr("(encrypted)")); -- m_sshAgentUi->copyToClipboardButton->setDisabled(true); -- } -- -- // enable agent buttons only if we have an agent running -- if (sshAgent()->isAgentRunning()) { -- m_sshAgentUi->addToAgentButton->setEnabled(true); -- m_sshAgentUi->removeFromAgentButton->setEnabled(true); -- -- sshAgent()->setAutoRemoveOnLock(key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked()); -- } --} -- --void EditEntryWidget::toKeeAgentSettings(KeeAgentSettings& settings) const --{ -- settings.setAddAtDatabaseOpen(m_sshAgentUi->addKeyToAgentCheckBox->isChecked()); -- settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked()); -- settings.setUseConfirmConstraintWhenAdding(m_sshAgentUi->requireUserConfirmationCheckBox->isChecked()); -- settings.setUseLifetimeConstraintWhenAdding(m_sshAgentUi->lifetimeCheckBox->isChecked()); -- settings.setLifetimeConstraintDuration(m_sshAgentUi->lifetimeSpinBox->value()); -- -- if (m_sshAgentUi->attachmentRadioButton->isChecked()) { -- settings.setSelectedType("attachment"); -- } else { -- settings.setSelectedType("file"); -- } -- settings.setAttachmentName(m_sshAgentUi->attachmentComboBox->currentText()); -- settings.setFileName(m_sshAgentUi->externalFileEdit->text()); -- -- // we don't use this as we don't run an agent but for compatibility we set it if necessary -- settings.setAllowUseOfSshKey(settings.addAtDatabaseOpen() || settings.removeAtDatabaseClose()); -- -- // we don't use this either but we don't want it to dirty flag the config -- settings.setSaveAttachmentToTempFile(m_sshAgentSettings.saveAttachmentToTempFile()); --} -- --void EditEntryWidget::browsePrivateKey() --{ -- QString fileName = QFileDialog::getOpenFileName(this, tr("Select private key"), ""); -- if (!fileName.isEmpty()) { -- m_sshAgentUi->externalFileEdit->setText(fileName); -- m_sshAgentUi->externalFileRadioButton->setChecked(true); -- updateSSHAgentKeyInfo(); -- } --} -- --bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key, bool decrypt) --{ -- KeeAgentSettings settings; -- toKeeAgentSettings(settings); -- -- if (!m_entry || !settings.keyConfigured()) { -- return false; -- } -- -- if (!settings.toOpenSSHKey(m_mainUi->usernameComboBox->lineEdit()->text(), -- m_mainUi->passwordEdit->text(), -- m_advancedUi->attachmentsWidget->entryAttachments(), -- key, -- decrypt)) { -- showMessage(settings.errorString(), MessageWidget::Error); -- return false; -- } -- -- return true; --} -- --void EditEntryWidget::addKeyToAgent() --{ -- OpenSSHKey key; -- -- if (!getOpenSSHKey(key, true)) { -- return; -- } -- -- m_sshAgentUi->commentTextLabel->setText(key.comment()); -- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); -- -- KeeAgentSettings settings; -- toKeeAgentSettings(settings); -- -- if (!sshAgent()->addIdentity(key, settings, m_db->uuid())) { -- showMessage(sshAgent()->errorString(), MessageWidget::Error); -- return; -- } --} -- --void EditEntryWidget::removeKeyFromAgent() --{ -- OpenSSHKey key; -- -- if (!getOpenSSHKey(key)) { -- return; -- } -- -- if (!sshAgent()->removeIdentity(key)) { -- showMessage(sshAgent()->errorString(), MessageWidget::Error); -- return; -- } --} -- --void EditEntryWidget::decryptPrivateKey() --{ -- OpenSSHKey key; -- -- if (!getOpenSSHKey(key, true)) { -- return; -- } -- -- if (!key.comment().isEmpty()) { -- m_sshAgentUi->commentTextLabel->setText(key.comment()); -- } else { -- m_sshAgentUi->commentTextLabel->setText(tr("n/a")); -- } -- -- m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint(QCryptographicHash::Md5) + "\n" -- + key.fingerprint(QCryptographicHash::Sha256)); -- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); -- m_sshAgentUi->copyToClipboardButton->setEnabled(true); --} -- --void EditEntryWidget::copyPublicKey() --{ -- clipboard()->setText(m_sshAgentUi->publicKeyEdit->document()->toPlainText()); --} --#endif -- --void EditEntryWidget::useExpiryPreset(QAction* action) --{ -- m_mainUi->expireCheck->setChecked(true); -- TimeDelta delta = action->data().value(); -- QDateTime now = Clock::currentDateTime(); -- QDateTime expiryDateTime = now + delta; -- m_mainUi->expireDatePicker->setDateTime(expiryDateTime); --} -- --void EditEntryWidget::toggleHideNotes(bool visible) --{ -- m_mainUi->notesEdit->setVisible(visible); -- m_mainUi->notesHint->setVisible(!visible); --} -- --Entry* EditEntryWidget::currentEntry() const --{ -- return m_entry; --} -- --void EditEntryWidget::loadEntry(Entry* entry, -- bool create, -- bool history, -- const QString& parentName, -- QSharedPointer database) --{ -- m_entry = entry; -- m_db = std::move(database); -- m_create = create; -- m_history = history; -- -- connect(m_entry, &Entry::entryModified, this, [this] { m_entryModifiedTimer.start(); }); -- -- if (history) { -- setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Entry history"))); -- } else { -- if (create) { -- setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Add entry"))); -- } else { -- setHeadline(QString("%1 \u2022 %2 \u2022 %3").arg(parentName, entry->title(), tr("Edit entry"))); -- } -- } -- -- setForms(entry); -- setReadOnly(m_history); -- -- setCurrentPage(0); -- setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1); --#ifdef WITH_XC_SSHAGENT -- setPageHidden(m_sshAgentWidget, !sshAgent()->isEnabled()); --#endif -- -- // Force the user to Save/Discard new entries -- showApplyButton(!m_create); -- -- setModified(false); --} -- --void EditEntryWidget::setForms(Entry* entry, bool restore) --{ -- m_customData->copyDataFrom(entry->customData()); -- -- m_mainUi->titleEdit->setReadOnly(m_history); -- m_mainUi->usernameComboBox->lineEdit()->setReadOnly(m_history); -- m_mainUi->urlEdit->setReadOnly(m_history); -- m_mainUi->passwordEdit->setReadOnly(m_history); -- m_mainUi->expireCheck->setEnabled(!m_history); -- m_mainUi->expireDatePicker->setReadOnly(m_history); -- m_mainUi->notesEnabled->setChecked(!config()->get(Config::Security_HideNotes).toBool()); -- m_mainUi->notesEdit->setReadOnly(m_history); -- m_mainUi->notesEdit->setVisible(!config()->get(Config::Security_HideNotes).toBool()); -- m_mainUi->notesHint->setVisible(config()->get(Config::Security_HideNotes).toBool()); -- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { -- m_mainUi->notesEdit->setFont(Font::fixedFont()); -- } else { -- m_mainUi->notesEdit->setFont(Font::defaultFont()); -- } -- -- m_advancedUi->attachmentsWidget->setReadOnly(m_history); -- m_advancedUi->addAttributeButton->setEnabled(!m_history); -- m_advancedUi->editAttributeButton->setEnabled(false); -- m_advancedUi->removeAttributeButton->setEnabled(false); -- m_advancedUi->attributesEdit->setReadOnly(m_history); -- QAbstractItemView::EditTriggers editTriggers; -- if (m_history) { -- editTriggers = QAbstractItemView::NoEditTriggers; -- } else { -- editTriggers = QAbstractItemView::DoubleClicked; -- } -- m_advancedUi->attributesView->setEditTriggers(editTriggers); -- m_advancedUi->knownBadCheckBox->setChecked(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) -- && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) -- == TRUE_STR); -- setupColorButton(true, entry->foregroundColor()); -- setupColorButton(false, entry->backgroundColor()); -- m_iconsWidget->setEnabled(!m_history); -- m_autoTypeUi->sequenceEdit->setReadOnly(m_history); -- m_autoTypeUi->windowTitleCombo->lineEdit()->setReadOnly(m_history); -- m_autoTypeUi->windowSequenceEdit->setReadOnly(m_history); -- m_historyWidget->setEnabled(!m_history); -- -- m_mainUi->titleEdit->setText(entry->title()); -- m_mainUi->usernameComboBox->lineEdit()->setText(entry->username()); -- m_mainUi->urlEdit->setText(entry->url()); -- m_mainUi->passwordEdit->setText(entry->password()); -- m_mainUi->passwordEdit->setShowPassword(!config()->get(Config::Security_PasswordsHidden).toBool()); -- if (!m_history) { -- m_mainUi->passwordEdit->enablePasswordGenerator(); -- } -- m_mainUi->expireCheck->setChecked(entry->timeInfo().expires()); -- m_mainUi->expireDatePicker->setDateTime(entry->timeInfo().expiryTime().toLocalTime()); -- m_mainUi->expirePresets->setEnabled(!m_history); -- -- QList commonUsernames = m_db->commonUsernames(); -- m_usernameCompleterModel->setStringList(commonUsernames); -- QString usernameToRestore = m_mainUi->usernameComboBox->lineEdit()->text(); -- m_mainUi->usernameComboBox->clear(); -- m_mainUi->usernameComboBox->addItems(commonUsernames); -- m_mainUi->usernameComboBox->lineEdit()->setText(usernameToRestore); -- -- m_mainUi->notesEdit->setPlainText(entry->notes()); -- -- m_advancedUi->attachmentsWidget->setEntryAttachments(entry->attachments()); -- m_entryAttributes->copyCustomKeysFrom(entry->attributes()); -- -- if (m_attributesModel->rowCount() != 0) { -- m_advancedUi->attributesView->setCurrentIndex(m_attributesModel->index(0, 0)); -- } else { -- m_advancedUi->attributesEdit->setPlainText(""); -- m_advancedUi->attributesEdit->setEnabled(false); -- } -- -- QList sizes = m_advancedUi->attributesSplitter->sizes(); -- sizes.replace(0, m_advancedUi->attributesSplitter->width() * 0.3); -- sizes.replace(1, m_advancedUi->attributesSplitter->width() * 0.7); -- m_advancedUi->attributesSplitter->setSizes(sizes); -- -- IconStruct iconStruct; -- iconStruct.uuid = entry->iconUuid(); -- iconStruct.number = entry->iconNumber(); -- m_iconsWidget->load(entry->uuid(), m_db, iconStruct, entry->webUrl()); -- -- m_autoTypeUi->enableButton->setChecked(entry->autoTypeEnabled()); -- if (entry->defaultAutoTypeSequence().isEmpty()) { -- m_autoTypeUi->inheritSequenceButton->setChecked(true); -- } else { -- m_autoTypeUi->customSequenceButton->setChecked(true); -- } -- m_autoTypeUi->sequenceEdit->setText(entry->effectiveAutoTypeSequence()); -- m_autoTypeUi->windowTitleCombo->lineEdit()->clear(); -- m_autoTypeUi->customWindowSequenceButton->setChecked(false); -- m_autoTypeUi->windowSequenceEdit->setText(""); -- m_autoTypeAssoc->copyDataFrom(entry->autoTypeAssociations()); -- m_autoTypeAssocModel->setEntry(entry); -- if (m_autoTypeAssoc->size() != 0) { -- m_autoTypeUi->assocView->setCurrentIndex(m_autoTypeAssocModel->index(0, 0)); -- } -- if (!m_history) { -- m_autoTypeUi->windowTitleCombo->refreshWindowList(); -- } -- updateAutoTypeEnabled(); -- --#ifdef WITH_XC_SSHAGENT -- if (sshAgent()->isEnabled()) { -- updateSSHAgent(); -- } --#endif -- --#ifdef WITH_XC_BROWSER -- if (config()->get(Config::Browser_Enabled).toBool()) { -- if (!hasPage(m_browserWidget)) { -- setupBrowser(); -- } -- -- if (m_customData->contains(BrowserService::OPTION_SKIP_AUTO_SUBMIT)) { -- // clang-format off -- m_browserUi->skipAutoSubmitCheckbox->setChecked(m_customData->value(BrowserService::OPTION_SKIP_AUTO_SUBMIT) == TRUE_STR); -- // clang-format on -- } else { -- m_browserUi->skipAutoSubmitCheckbox->setChecked(false); -- } -- -- if (m_customData->contains(BrowserService::OPTION_HIDE_ENTRY)) { -- m_browserUi->hideEntryCheckbox->setChecked(m_customData->value(BrowserService::OPTION_HIDE_ENTRY) -- == TRUE_STR); -- } else { -- m_browserUi->hideEntryCheckbox->setChecked(false); -- } -- -- if (m_customData->contains(BrowserService::OPTION_ONLY_HTTP_AUTH)) { -- m_browserUi->onlyHttpAuthCheckbox->setChecked(m_customData->value(BrowserService::OPTION_ONLY_HTTP_AUTH) -- == TRUE_STR); -- } else { -- m_browserUi->onlyHttpAuthCheckbox->setChecked(false); -- } -- -- m_browserUi->addURLButton->setEnabled(!m_history); -- m_browserUi->removeURLButton->setEnabled(false); -- m_browserUi->editURLButton->setEnabled(false); -- m_browserUi->additionalURLsView->setEditTriggers(editTriggers); -- -- if (m_additionalURLsDataModel->rowCount() != 0) { -- m_browserUi->additionalURLsView->setCurrentIndex(m_additionalURLsDataModel->index(0, 0)); -- } -- } -- -- setPageHidden(m_browserWidget, !config()->get(Config::Browser_Enabled).toBool()); --#endif -- -- m_editWidgetProperties->setFields(entry->timeInfo(), entry->uuid()); -- -- if (!m_history && !restore) { -- m_historyModel->setEntries(entry->historyItems()); -- m_historyUi->historyView->sortByColumn(0, Qt::DescendingOrder); -- } -- if (m_historyModel->rowCount() > 0) { -- m_historyUi->deleteAllButton->setEnabled(true); -- } else { -- m_historyUi->deleteAllButton->setEnabled(false); -- } -- -- updateHistoryButtons(m_historyUi->historyView->currentIndex(), QModelIndex()); -- -- m_mainUi->titleEdit->setFocus(); --} -- --/** -- * Commit the form values to in-memory database representation -- * -- * @return true is commit successful, otherwise false -- */ --bool EditEntryWidget::commitEntry() --{ -- if (m_history) { -- clear(); -- hideMessage(); -- emit editFinished(false); -- return true; -- } -- -- // HACK: Check that entry pointer is still valid, see https://github.com/keepassxreboot/keepassxc/issues/5722 -- if (!m_entry) { -- QMessageBox::information(this, -- tr("Invalid Entry"), -- tr("An external merge operation has invalidated this entry.\n" -- "Unfortunately, any changes made have been lost.")); -- return true; -- } -- -- // Check Auto-Type validity early -- if (!AutoType::verifyAutoTypeSyntax(m_autoTypeUi->sequenceEdit->text())) { -- return false; -- } -- -- if (m_advancedUi->attributesView->currentIndex().isValid() && m_advancedUi->attributesEdit->isEnabled()) { -- QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex()); -- m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key)); -- } -- -- m_currentAttribute = QPersistentModelIndex(); -- -- // must stand before beginUpdate() -- // we don't want to create a new history item, if only the history has changed -- m_entry->removeHistoryItems(m_historyModel->deletedEntries()); -- m_historyModel->clearDeletedEntries(); -- -- m_autoTypeAssoc->removeEmpty(); -- --#ifdef WITH_XC_SSHAGENT -- toKeeAgentSettings(m_sshAgentSettings); --#endif -- --#ifdef WITH_XC_BROWSER -- if (config()->get(Config::Browser_Enabled).toBool()) { -- updateBrowser(); -- } --#endif -- -- if (!m_create) { -- m_entry->beginUpdate(); -- } -- -- updateEntryData(m_entry); -- -- if (!m_create) { -- m_entry->endUpdate(); -- } -- -- m_historyModel->setEntries(m_entry->historyItems()); -- m_advancedUi->attachmentsWidget->setEntryAttachments(m_entry->attachments()); -- -- showMessage(tr("Entry updated successfully."), MessageWidget::Positive); -- setModified(false); -- return true; --} -- --void EditEntryWidget::acceptEntry() --{ -- if (commitEntry()) { -- clear(); -- emit editFinished(true); -- } --} -- --void EditEntryWidget::updateEntryData(Entry* entry) const --{ -- QRegularExpression newLineRegex("(?:\r?\n|\r)"); -- -- entry->attributes()->copyCustomKeysFrom(m_entryAttributes); -- entry->attachments()->copyDataFrom(m_advancedUi->attachmentsWidget->entryAttachments()); -- entry->customData()->copyDataFrom(m_customData.data()); -- entry->setTitle(m_mainUi->titleEdit->text().replace(newLineRegex, " ")); -- entry->setUsername(m_mainUi->usernameComboBox->lineEdit()->text().replace(newLineRegex, " ")); -- entry->setUrl(m_mainUi->urlEdit->text().replace(newLineRegex, " ")); -- entry->setPassword(m_mainUi->passwordEdit->text()); -- entry->setExpires(m_mainUi->expireCheck->isChecked()); -- entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); -- -- entry->setNotes(m_mainUi->notesEdit->toPlainText()); -- -- const auto wasKnownBad = entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) -- && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR; -- const auto isKnownBad = m_advancedUi->knownBadCheckBox->isChecked(); -- if (isKnownBad != wasKnownBad) { -- entry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR); -- } -- -- if (m_advancedUi->fgColorCheckBox->isChecked() && m_advancedUi->fgColorButton->property("color").isValid()) { -- entry->setForegroundColor(m_advancedUi->fgColorButton->property("color").toString()); -- } else { -- entry->setForegroundColor(QString()); -- } -- -- if (m_advancedUi->bgColorCheckBox->isChecked() && m_advancedUi->bgColorButton->property("color").isValid()) { -- entry->setBackgroundColor(m_advancedUi->bgColorButton->property("color").toString()); -- } else { -- entry->setBackgroundColor(QString()); -- } -- -- IconStruct iconStruct = m_iconsWidget->state(); -- -- if (iconStruct.number < 0) { -- entry->setIcon(Entry::DefaultIconNumber); -- } else if (iconStruct.uuid.isNull()) { -- entry->setIcon(iconStruct.number); -- } else { -- entry->setIcon(iconStruct.uuid); -- } -- -- entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked()); -- if (m_autoTypeUi->inheritSequenceButton->isChecked()) { -- entry->setDefaultAutoTypeSequence(QString()); -- } else { -- entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text()); -- } -- -- entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc); -- --#ifdef WITH_XC_SSHAGENT -- if (sshAgent()->isEnabled()) { -- m_sshAgentSettings.toEntry(entry); -- } --#endif --} -- --void EditEntryWidget::cancel() --{ -- if (m_history) { -- clear(); -- hideMessage(); -- emit editFinished(false); -- return; -- } -- -- if (!m_entry->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_entry->iconUuid())) { -- m_entry->setIcon(Entry::DefaultIconNumber); -- } -- -- bool accepted = false; -- if (isModified()) { -- auto result = MessageBox::question(this, -- tr("Unsaved Changes"), -- tr("Would you like to save changes to this entry?"), -- MessageBox::Cancel | MessageBox::Save | MessageBox::Discard, -- MessageBox::Cancel); -- if (result == MessageBox::Cancel) { -- return; -- } else if (result == MessageBox::Save) { -- accepted = true; -- if (!commitEntry()) { -- return; -- } -- } -- } -- -- clear(); -- emit editFinished(accepted); --} -- --void EditEntryWidget::clear() --{ -- if (m_entry) { -- m_entry->disconnect(this); -- } -- -- m_entry = nullptr; -- m_db.reset(); -- -- m_mainUi->titleEdit->setText(""); -- m_mainUi->passwordEdit->setText(""); -- m_mainUi->urlEdit->setText(""); -- m_mainUi->notesEdit->clear(); -- -- m_entryAttributes->clear(); -- m_advancedUi->attachmentsWidget->clearAttachments(); -- m_autoTypeAssoc->clear(); -- m_historyModel->clear(); -- m_iconsWidget->reset(); -- hideMessage(); --} -- --#ifdef WITH_XC_NETWORKING --void EditEntryWidget::updateFaviconButtonEnable(const QString& url) --{ -- m_mainUi->fetchFaviconButton->setDisabled(url.isEmpty()); --} --#endif -- --void EditEntryWidget::insertAttribute() --{ -- Q_ASSERT(!m_history); -- -- QString name = tr("New attribute"); -- int i = 1; -- -- while (m_entryAttributes->keys().contains(name)) { -- name = tr("New attribute %1").arg(i); -- i++; -- } -- -- m_entryAttributes->set(name, ""); -- QModelIndex index = m_attributesModel->indexByKey(name); -- -- m_advancedUi->attributesView->setCurrentIndex(index); -- m_advancedUi->attributesView->edit(index); -- -- setModified(true); --} -- --void EditEntryWidget::editCurrentAttribute() --{ -- Q_ASSERT(!m_history); -- -- QModelIndex index = m_advancedUi->attributesView->currentIndex(); -- -- if (index.isValid()) { -- m_advancedUi->attributesView->edit(index); -- setModified(true); -- } --} -- --void EditEntryWidget::removeCurrentAttribute() --{ -- Q_ASSERT(!m_history); -- -- QModelIndex index = m_advancedUi->attributesView->currentIndex(); -- -- if (index.isValid()) { -- -- auto result = MessageBox::question(this, -- tr("Confirm Removal"), -- tr("Are you sure you want to remove this attribute?"), -- MessageBox::Remove | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Remove) { -- m_entryAttributes->remove(m_attributesModel->keyByIndex(index)); -- setModified(true); -- } -- } --} -- --void EditEntryWidget::updateCurrentAttribute() --{ -- QModelIndex newIndex = m_advancedUi->attributesView->currentIndex(); -- QString newKey = m_attributesModel->keyByIndex(newIndex); -- -- if (!m_history && m_currentAttribute != newIndex) { -- // Save changes to the currently selected attribute if editing is enabled -- if (m_currentAttribute.isValid() && m_advancedUi->attributesEdit->isEnabled()) { -- QString currKey = m_attributesModel->keyByIndex(m_currentAttribute); -- m_entryAttributes->set( -- currKey, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(currKey)); -- } -- } -- -- displayAttribute(newIndex, m_entryAttributes->isProtected(newKey)); -- -- m_currentAttribute = newIndex; --} -- --void EditEntryWidget::displayAttribute(QModelIndex index, bool showProtected) --{ -- // Block signals to prevent modified being set -- m_advancedUi->protectAttributeButton->blockSignals(true); -- m_advancedUi->attributesEdit->blockSignals(true); -- m_advancedUi->revealAttributeButton->setText(tr("Reveal")); -- -- if (index.isValid()) { -- QString key = m_attributesModel->keyByIndex(index); -- if (showProtected) { -- m_advancedUi->attributesEdit->setPlainText(tr("[PROTECTED] Press Reveal to view or edit")); -- m_advancedUi->attributesEdit->setEnabled(false); -- m_advancedUi->revealAttributeButton->setEnabled(true); -- m_advancedUi->protectAttributeButton->setChecked(true); -- } else { -- m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); -- m_advancedUi->attributesEdit->setEnabled(true); -- m_advancedUi->revealAttributeButton->setEnabled(false); -- m_advancedUi->protectAttributeButton->setChecked(false); -- } -- -- // Don't allow editing in history view -- m_advancedUi->protectAttributeButton->setEnabled(!m_history); -- m_advancedUi->editAttributeButton->setEnabled(!m_history); -- m_advancedUi->removeAttributeButton->setEnabled(!m_history); -- } else { -- m_advancedUi->attributesEdit->setPlainText(""); -- m_advancedUi->attributesEdit->setEnabled(false); -- m_advancedUi->revealAttributeButton->setEnabled(false); -- m_advancedUi->protectAttributeButton->setChecked(false); -- m_advancedUi->protectAttributeButton->setEnabled(false); -- m_advancedUi->editAttributeButton->setEnabled(false); -- m_advancedUi->removeAttributeButton->setEnabled(false); -- } -- -- m_advancedUi->protectAttributeButton->blockSignals(false); -- m_advancedUi->attributesEdit->blockSignals(false); --} -- --void EditEntryWidget::protectCurrentAttribute(bool state) --{ -- QModelIndex index = m_advancedUi->attributesView->currentIndex(); -- if (!m_history && index.isValid()) { -- QString key = m_attributesModel->keyByIndex(index); -- if (state) { -- // Save the current text and protect the attribute -- m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), true); -- } else { -- // Unprotect the current attribute value (don't save text as it is obscured) -- m_entryAttributes->set(key, m_entryAttributes->value(key), false); -- } -- -- // Display the attribute -- displayAttribute(index, state); -- } --} -- --void EditEntryWidget::toggleCurrentAttributeVisibility() --{ -- if (!m_advancedUi->attributesEdit->isEnabled()) { -- QModelIndex index = m_advancedUi->attributesView->currentIndex(); -- if (index.isValid()) { -- bool oldBlockSignals = m_advancedUi->attributesEdit->blockSignals(true); -- QString key = m_attributesModel->keyByIndex(index); -- m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); -- m_advancedUi->attributesEdit->setEnabled(true); -- m_advancedUi->attributesEdit->blockSignals(oldBlockSignals); -- } -- m_advancedUi->revealAttributeButton->setText(tr("Hide")); -- } else { -- protectCurrentAttribute(true); -- m_advancedUi->revealAttributeButton->setText(tr("Reveal")); -- } --} -- --void EditEntryWidget::updateAutoTypeEnabled() --{ -- bool autoTypeEnabled = m_autoTypeUi->enableButton->isChecked(); -- bool validIndex = m_autoTypeUi->assocView->currentIndex().isValid() && m_autoTypeAssoc->size() != 0; -- -- m_autoTypeUi->enableButton->setEnabled(!m_history); -- m_autoTypeUi->inheritSequenceButton->setEnabled(!m_history && autoTypeEnabled); -- m_autoTypeUi->customSequenceButton->setEnabled(!m_history && autoTypeEnabled); -- m_autoTypeUi->sequenceEdit->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked()); -- m_autoTypeUi->openHelpButton->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked()); -- -- m_autoTypeUi->assocView->setEnabled(autoTypeEnabled); -- m_autoTypeUi->assocAddButton->setEnabled(!m_history); -- m_autoTypeUi->assocRemoveButton->setEnabled(!m_history && validIndex); -- -- m_autoTypeUi->windowTitleLabel->setEnabled(autoTypeEnabled && validIndex); -- m_autoTypeUi->windowTitleCombo->setEnabled(autoTypeEnabled && validIndex); -- m_autoTypeUi->customWindowSequenceButton->setEnabled(!m_history && autoTypeEnabled && validIndex); -- m_autoTypeUi->windowSequenceEdit->setEnabled(autoTypeEnabled && validIndex -- && m_autoTypeUi->customWindowSequenceButton->isChecked()); --} -- --void EditEntryWidget::insertAutoTypeAssoc() --{ -- AutoTypeAssociations::Association assoc; -- m_autoTypeAssoc->add(assoc); -- QModelIndex newIndex = m_autoTypeAssocModel->index(m_autoTypeAssoc->size() - 1, 0); -- m_autoTypeUi->assocView->setCurrentIndex(newIndex); -- loadCurrentAssoc(newIndex); -- m_autoTypeUi->windowTitleCombo->setFocus(); -- setModified(true); --} -- --void EditEntryWidget::removeAutoTypeAssoc() --{ -- QModelIndex currentIndex = m_autoTypeUi->assocView->currentIndex(); -- -- if (currentIndex.isValid()) { -- m_autoTypeAssoc->remove(currentIndex.row()); -- setModified(true); -- } --} -- --void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current) --{ -- bool modified = isModified(); -- if (current.isValid() && current.row() < m_autoTypeAssoc->size()) { -- AutoTypeAssociations::Association assoc = m_autoTypeAssoc->get(current.row()); -- m_autoTypeUi->windowTitleCombo->setEditText(assoc.window); -- if (assoc.sequence.isEmpty()) { -- m_autoTypeUi->customWindowSequenceButton->setChecked(false); -- m_autoTypeUi->windowSequenceEdit->setText(m_entry->effectiveAutoTypeSequence()); -- } else { -- m_autoTypeUi->customWindowSequenceButton->setChecked(true); -- m_autoTypeUi->windowSequenceEdit->setText(assoc.sequence); -- } -- -- updateAutoTypeEnabled(); -- } else { -- clearCurrentAssoc(); -- } -- setModified(modified); --} -- --void EditEntryWidget::clearCurrentAssoc() --{ -- m_autoTypeUi->windowTitleCombo->setEditText(""); -- -- m_autoTypeUi->customWindowSequenceButton->setChecked(false); -- m_autoTypeUi->windowSequenceEdit->setText(""); -- -- updateAutoTypeEnabled(); --} -- --void EditEntryWidget::applyCurrentAssoc() --{ -- QModelIndex index = m_autoTypeUi->assocView->currentIndex(); -- -- if (!index.isValid() || m_autoTypeAssoc->size() == 0 || m_history) { -- return; -- } -- -- AutoTypeAssociations::Association assoc; -- assoc.window = m_autoTypeUi->windowTitleCombo->currentText(); -- if (m_autoTypeUi->customWindowSequenceButton->isChecked()) { -- assoc.sequence = m_autoTypeUi->windowSequenceEdit->text(); -- } -- -- m_autoTypeAssoc->update(index.row(), assoc); --} -- --void EditEntryWidget::showHistoryEntry() --{ -- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); -- if (index.isValid()) { -- emitHistoryEntryActivated(index); -- } --} -- --void EditEntryWidget::restoreHistoryEntry() --{ -- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); -- if (index.isValid()) { -- setForms(m_historyModel->entryFromIndex(index), true); -- setModified(true); -- } --} -- --void EditEntryWidget::deleteHistoryEntry() --{ -- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); -- if (index.isValid()) { -- m_historyModel->deleteIndex(index); -- if (m_historyModel->rowCount() > 0) { -- m_historyUi->deleteAllButton->setEnabled(true); -- } else { -- m_historyUi->deleteAllButton->setEnabled(false); -- } -- setModified(true); -- } --} -- --void EditEntryWidget::deleteAllHistoryEntries() --{ -- m_historyModel->deleteAll(); -- m_historyUi->deleteAllButton->setEnabled(m_historyModel->rowCount() > 0); -- setModified(true); --} -- --QMenu* EditEntryWidget::createPresetsMenu() --{ -- auto* expirePresetsMenu = new QMenu(this); -- expirePresetsMenu->addAction(tr("Tomorrow"))->setData(QVariant::fromValue(TimeDelta::fromDays(1))); -- expirePresetsMenu->addSeparator(); -- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromDays(7))); -- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 2))->setData(QVariant::fromValue(TimeDelta::fromDays(14))); -- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromDays(21))); -- expirePresetsMenu->addSeparator(); -- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromMonths(1))); -- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromMonths(3))); -- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 6))->setData(QVariant::fromValue(TimeDelta::fromMonths(6))); -- expirePresetsMenu->addSeparator(); -- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromYears(1))); -- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 2))->setData(QVariant::fromValue(TimeDelta::fromYears(2))); -- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromYears(3))); -- return expirePresetsMenu; --} -- --void EditEntryWidget::setupColorButton(bool foreground, const QColor& color) --{ -- QWidget* button = m_advancedUi->fgColorButton; -- QCheckBox* checkBox = m_advancedUi->fgColorCheckBox; -- if (!foreground) { -- button = m_advancedUi->bgColorButton; -- checkBox = m_advancedUi->bgColorCheckBox; -- } -- -- if (color.isValid()) { -- button->setStyleSheet(QString("background-color:%1").arg(color.name())); -- button->setProperty("color", color.name()); -- checkBox->setChecked(true); -- } else { -- button->setStyleSheet(""); -- button->setProperty("color", QVariant()); -- checkBox->setChecked(false); -- } --} -- --void EditEntryWidget::pickColor() --{ -- bool isForeground = (sender() == m_advancedUi->fgColorButton); -- QColor oldColor = QColor(m_advancedUi->fgColorButton->property("color").toString()); -- if (!isForeground) { -- oldColor = QColor(m_advancedUi->bgColorButton->property("color").toString()); -- } -- -- QColor newColor = QColorDialog::getColor(oldColor); -- if (newColor.isValid()) { -- setupColorButton(isForeground, newColor); -- setModified(true); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.h keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.h ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,208 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITENTRYWIDGET_H --#define KEEPASSX_EDITENTRYWIDGET_H -- --#include --#include --#include --#include --#include --#include --#include -- --#include "config-keepassx.h" --#include "gui/EditWidget.h" -- --class AutoTypeAssociations; --class AutoTypeAssociationsModel; --class CustomData; --class Database; --class EditWidgetIcons; --class EditWidgetProperties; --class Entry; --class EntryAttributes; --class EntryAttributesModel; --class EntryHistoryModel; --class QButtonGroup; --class QMenu; --class QSortFilterProxyModel; --class QStringListModel; --#ifdef WITH_XC_SSHAGENT --#include "sshagent/KeeAgentSettings.h" --class OpenSSHKey; --#endif --#ifdef WITH_XC_BROWSER --class EntryURLModel; --#endif -- --namespace Ui --{ -- class EditEntryWidgetAdvanced; -- class EditEntryWidgetAutoType; -- class EditEntryWidgetBrowser; -- class EditEntryWidgetSSHAgent; -- class EditEntryWidgetMain; -- class EditEntryWidgetHistory; -- class EditWidget; --} // namespace Ui -- --class EditEntryWidget : public EditWidget --{ -- Q_OBJECT -- --public: -- explicit EditEntryWidget(QWidget* parent = nullptr); -- ~EditEntryWidget() override; -- -- void -- loadEntry(Entry* entry, bool create, bool history, const QString& parentName, QSharedPointer database); -- -- Entry* currentEntry() const; -- void clear(); -- --signals: -- void editFinished(bool accepted); -- void historyEntryActivated(Entry* entry); -- --private slots: -- void acceptEntry(); -- bool commitEntry(); -- void cancel(); --#ifdef WITH_XC_NETWORKING -- void updateFaviconButtonEnable(const QString& url); --#endif -- void insertAttribute(); -- void editCurrentAttribute(); -- void removeCurrentAttribute(); -- void updateCurrentAttribute(); -- void protectCurrentAttribute(bool state); -- void toggleCurrentAttributeVisibility(); -- void updateAutoTypeEnabled(); -- void openAutotypeHelp(); -- void insertAutoTypeAssoc(); -- void removeAutoTypeAssoc(); -- void loadCurrentAssoc(const QModelIndex& current); -- void clearCurrentAssoc(); -- void applyCurrentAssoc(); -- void showHistoryEntry(); -- void restoreHistoryEntry(); -- void deleteHistoryEntry(); -- void deleteAllHistoryEntries(); -- void emitHistoryEntryActivated(const QModelIndex& index); -- void histEntryActivated(const QModelIndex& index); -- void updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous); -- void useExpiryPreset(QAction* action); -- void toggleHideNotes(bool visible); -- void pickColor(); --#ifdef WITH_XC_SSHAGENT -- void toKeeAgentSettings(KeeAgentSettings& settings) const; -- void setSSHAgentSettings(); -- void updateSSHAgent(); -- void updateSSHAgentAttachment(); -- void updateSSHAgentAttachments(); -- void updateSSHAgentKeyInfo(); -- void browsePrivateKey(); -- void addKeyToAgent(); -- void removeKeyFromAgent(); -- void decryptPrivateKey(); -- void copyPublicKey(); --#endif --#ifdef WITH_XC_BROWSER -- void updateBrowserModified(); -- void updateBrowser(); -- void insertURL(); -- void removeCurrentURL(); -- void editCurrentURL(); -- void updateCurrentURL(); --#endif -- --private: -- void setupMain(); -- void setupAdvanced(); -- void setupIcon(); -- void setupAutoType(); --#ifdef WITH_XC_BROWSER -- void setupBrowser(); --#endif --#ifdef WITH_XC_SSHAGENT -- void setupSSHAgent(); --#endif -- void setupProperties(); -- void setupHistory(); -- void setupEntryUpdate(); -- void setupColorButton(bool foreground, const QColor& color); -- -- bool passwordsEqual(); -- void setForms(Entry* entry, bool restore = false); -- QMenu* createPresetsMenu(); -- void updateEntryData(Entry* entry) const; --#ifdef WITH_XC_SSHAGENT -- bool getOpenSSHKey(OpenSSHKey& key, bool decrypt = false); --#endif -- -- void displayAttribute(QModelIndex index, bool showProtected); -- -- QPointer m_entry; -- QSharedPointer m_db; -- -- bool m_create; -- bool m_history; --#ifdef WITH_XC_SSHAGENT -- KeeAgentSettings m_sshAgentSettings; --#endif -- const QScopedPointer m_mainUi; -- const QScopedPointer m_advancedUi; -- const QScopedPointer m_autoTypeUi; -- const QScopedPointer m_sshAgentUi; -- const QScopedPointer m_historyUi; -- const QScopedPointer m_browserUi; -- const QScopedPointer m_customData; -- -- QScrollArea* const m_mainWidget; -- QWidget* const m_advancedWidget; -- EditWidgetIcons* const m_iconsWidget; -- QWidget* const m_autoTypeWidget; --#ifdef WITH_XC_SSHAGENT -- QWidget* const m_sshAgentWidget; --#endif --#ifdef WITH_XC_BROWSER -- bool m_browserSettingsChanged; -- QWidget* const m_browserWidget; -- EntryURLModel* const m_additionalURLsDataModel; --#endif -- EditWidgetProperties* const m_editWidgetProperties; -- QWidget* const m_historyWidget; -- EntryAttributes* const m_entryAttributes; -- EntryAttributesModel* const m_attributesModel; -- EntryHistoryModel* const m_historyModel; -- QSortFilterProxyModel* const m_sortModel; -- QPersistentModelIndex m_currentAttribute; -- AutoTypeAssociations* const m_autoTypeAssoc; -- AutoTypeAssociationsModel* const m_autoTypeAssocModel; -- QButtonGroup* const m_autoTypeDefaultSequenceGroup; -- QButtonGroup* const m_autoTypeWindowSequenceGroup; -- QCompleter* const m_usernameCompleter; -- QStringListModel* const m_usernameCompleterModel; -- QTimer m_entryModifiedTimer; -- -- Q_DISABLE_COPY(EditEntryWidget) --}; -- --#endif // KEEPASSX_EDITENTRYWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetHistory.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetHistory.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetHistory.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetHistory.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,121 +0,0 @@ -- -- -- EditEntryWidgetHistory -- -- -- -- 0 -- 0 -- 400 -- 300 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Entry history selection -- -- -- true -- -- -- true -- -- -- 160 -- -- -- -- -- -- -- -- -- false -- -- -- Show entry at selected history state -- -- -- Show entry at selected history state -- -- -- Show -- -- -- -- -- -- -- false -- -- -- Restore entry to selected history state -- -- -- Restore entry to selected history state -- -- -- Restore -- -- -- -- -- -- -- false -- -- -- Delete selected history state -- -- -- Delete selected history state -- -- -- Delete -- -- -- -- -- -- -- false -- -- -- Delete all history -- -- -- Delete all history -- -- -- Delete all -- -- -- -- -- -- -- -- -- historyView -- showButton -- restoreButton -- deleteButton -- deleteAllButton -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetMain.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetMain.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetMain.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetMain.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,306 +0,0 @@ -- -- -- EditEntryWidgetMain -- -- -- -- 0 -- 0 -- 539 -- 523 -- -- -- -- Edit Entry -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- Qt::ScrollBarAlwaysOff -- -- -- QAbstractScrollArea::AdjustToContents -- -- -- true -- -- -- -- -- 0 -- 0 -- 539 -- 523 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 10 -- -- -- 8 -- -- -- -- -- -- -- -- 0 -- 1 -- -- -- -- -- 0 -- 100 -- -- -- -- Notes field -- -- -- -- -- -- -- true -- -- -- Toggle the checkbox to reveal the notes section. -- -- -- Qt::AlignTop -- -- -- -- -- -- -- -- -- Username field -- -- -- -- -- -- -- -- -- Toggle notes visible -- -- -- Toggle notes visible -- -- -- Notes: -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- 8 -- -- -- -- -- false -- -- -- Expiration field -- -- -- true -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Expiration Presets -- -- -- Expiration presets -- -- -- Presets -- -- -- -- -- -- -- -- -- Password: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- URL: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- 8 -- -- -- -- -- Url field -- -- -- https://example.com -- -- -- -- -- -- -- Download favicon for URL -- -- -- Download favicon for URL -- -- -- -- -- -- -- -- -- Title: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Title field -- -- -- -- -- -- -- Username: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Password field -- -- -- QLineEdit::Password -- -- -- -- -- -- -- 0 -- -- -- -- -- Toggle expiration -- -- -- Toggle expiration -- -- -- Expires: -- -- -- -- -- -- -- -- -- -- -- PasswordEdit -- QLineEdit --
gui/PasswordEdit.h
-- 1 --
-- -- URLEdit -- QLineEdit --
gui/URLEdit.h
-- 1 --
--
-- -- titleEdit -- usernameComboBox -- passwordEdit -- urlEdit -- fetchFaviconButton -- expireCheck -- expireDatePicker -- expirePresets -- notesEnabled -- notesEdit -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget_p.h keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget_p.h ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget_p.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget_p.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITENTRYWIDGET_P_H --#define KEEPASSX_EDITENTRYWIDGET_P_H -- --#include --#include -- --class AttributesListView : public QListView --{ --public: -- explicit AttributesListView(QWidget* parent = nullptr) -- : QListView(parent) -- { -- setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); -- } -- -- QSize sizeHint() const override -- { -- QSize sizeHint = QListView::sizeHint(); -- -- int width = sizeHintForColumn(0) + frameWidth() * 2; -- if (verticalScrollBar()->isVisible()) { -- width += verticalScrollBar()->width(); -- } -- sizeHint.setWidth(width); -- -- return sizeHint; -- } --}; -- --#endif // KEEPASSX_EDITENTRYWIDGET_P_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetSSHAgent.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetSSHAgent.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetSSHAgent.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetSSHAgent.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,339 +0,0 @@ -- -- -- EditEntryWidgetSSHAgent -- -- -- -- 0 -- 0 -- 452 -- 618 -- -- -- -- Form -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Remove key from agent when database is closed/locked -- -- -- -- -- -- -- Comment -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Add key to agent when database is opened/unlocked -- -- -- -- -- -- -- -- Monospace -- -- -- -- true -- -- -- -- -- -- -- Decrypt -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- Fingerprint -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Copy to clipboard -- -- -- -- -- -- -- Public key -- -- -- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing -- -- -- -- -- -- -- Private key -- -- -- -- -- -- External file -- -- -- -- -- -- -- Browser for key file -- -- -- Browse... -- -- -- -- -- -- -- Attachment -- -- -- true -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- External key file -- -- -- -- -- -- -- -- -- Add to agent -- -- -- -- -- -- -- Remove from agent -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Select attachment file -- -- -- false -- -- -- -- -- -- -- -- -- -- Require user confirmation when this key is used -- -- -- -- -- -- -- -- -- -- Monospace -- -- -- -- n/a -- -- -- Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- Remove key from agent after -- -- -- -- -- -- -- Remove key from agent after specified seconds -- -- -- seconds -- -- -- 999999999 -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- -- Monospace -- -- -- -- n/a -- -- -- Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse -- -- -- -- -- -- -- Qt::Horizontal -- -- -- -- 40 -- 20 -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 10 -- -- -- -- -- -- -- -- addKeyToAgentCheckBox -- removeKeyFromAgentCheckBox -- requireUserConfirmationCheckBox -- lifetimeCheckBox -- lifetimeSpinBox -- attachmentRadioButton -- attachmentComboBox -- externalFileRadioButton -- browseButton -- addToAgentButton -- removeFromAgentButton -- decryptButton -- publicKeyEdit -- copyToClipboardButton -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,152 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryAttachmentsModel.h" -- --#include "core/Entry.h" --#include "core/Tools.h" -- --#include -- --EntryAttachmentsModel::EntryAttachmentsModel(QObject* parent) -- : QAbstractListModel(parent) -- , m_entryAttachments(nullptr) --{ -- m_headers << tr("Name") << tr("Size"); --} -- --void EntryAttachmentsModel::setEntryAttachments(EntryAttachments* entryAttachments) --{ -- beginResetModel(); -- -- if (m_entryAttachments) { -- m_entryAttachments->disconnect(this); -- } -- -- m_entryAttachments = entryAttachments; -- -- if (m_entryAttachments) { -- connect(m_entryAttachments, SIGNAL(keyModified(QString)), SLOT(attachmentChange(QString))); -- connect(m_entryAttachments, SIGNAL(aboutToBeAdded(QString)), SLOT(attachmentAboutToAdd(QString))); -- connect(m_entryAttachments, SIGNAL(added(QString)), SLOT(attachmentAdd())); -- connect(m_entryAttachments, SIGNAL(aboutToBeRemoved(QString)), SLOT(attachmentAboutToRemove(QString))); -- connect(m_entryAttachments, SIGNAL(removed(QString)), SLOT(attachmentRemove())); -- connect(m_entryAttachments, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); -- connect(m_entryAttachments, SIGNAL(reset()), SLOT(reset())); -- } -- -- endResetModel(); --} -- --int EntryAttachmentsModel::rowCount(const QModelIndex& parent) const --{ -- if (!m_entryAttachments || parent.isValid()) { -- return 0; -- } else { -- return m_entryAttachments->keys().size(); -- } --} -- --int EntryAttachmentsModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- -- return Columns::ColumnsCount; --} -- --QVariant EntryAttachmentsModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { -- Q_ASSERT(m_headers.size() == columnCount()); -- return m_headers[section]; -- } -- -- return QAbstractListModel::headerData(section, orientation, role); --} -- --QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- if (role == Qt::DisplayRole || role == Qt::EditRole) { -- const QString key = keyByIndex(index); -- const int column = index.column(); -- if (column == Columns::NameColumn) { -- return key; -- } else if (column == SizeColumn) { -- const int attachmentSize = m_entryAttachments->value(key).size(); -- if (role == Qt::DisplayRole) { -- return Tools::humanReadableFileSize(attachmentSize); -- } -- return attachmentSize; -- } -- } -- -- return QVariant(); --} -- --QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const --{ -- if (!index.isValid()) { -- return QString(); -- } -- -- return m_entryAttachments->keys().at(index.row()); --} -- --void EntryAttachmentsModel::attachmentChange(const QString& key) --{ -- int row = m_entryAttachments->keys().indexOf(key); -- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); --} -- --void EntryAttachmentsModel::attachmentAboutToAdd(const QString& key) --{ -- QList rows = m_entryAttachments->keys(); -- rows.append(key); -- std::sort(rows.begin(), rows.end()); -- int row = rows.indexOf(key); -- beginInsertRows(QModelIndex(), row, row); --} -- --void EntryAttachmentsModel::attachmentAdd() --{ -- endInsertRows(); --} -- --void EntryAttachmentsModel::attachmentAboutToRemove(const QString& key) --{ -- int row = m_entryAttachments->keys().indexOf(key); -- beginRemoveRows(QModelIndex(), row, row); --} -- --void EntryAttachmentsModel::attachmentRemove() --{ -- endRemoveRows(); --} -- --void EntryAttachmentsModel::aboutToReset() --{ -- beginResetModel(); --} -- --void EntryAttachmentsModel::reset() --{ -- endResetModel(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYATTACHMENTSMODEL_H --#define KEEPASSX_ENTRYATTACHMENTSMODEL_H -- --#include -- --class EntryAttachments; -- --class EntryAttachmentsModel : public QAbstractListModel --{ -- Q_OBJECT -- --public: -- enum Columns -- { -- NameColumn, -- SizeColumn, -- ColumnsCount -- }; -- -- explicit EntryAttachmentsModel(QObject* parent = nullptr); -- void setEntryAttachments(EntryAttachments* entry); -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QString keyByIndex(const QModelIndex& index) const; -- --private slots: -- void attachmentChange(const QString& key); -- void attachmentAboutToAdd(const QString& key); -- void attachmentAdd(); -- void attachmentAboutToRemove(const QString& key); -- void attachmentRemove(); -- void aboutToReset(); -- void reset(); -- --private: -- EntryAttachments* m_entryAttachments; -- QStringList m_headers; --}; -- --#endif // KEEPASSX_ENTRYATTACHMENTSMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,426 +0,0 @@ --#include "EntryAttachmentsWidget.h" --#include "ui_EntryAttachmentsWidget.h" -- --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "EntryAttachmentsModel.h" --#include "config-keepassx.h" --#include "core/Config.h" --#include "core/EntryAttachments.h" --#include "core/Tools.h" --#include "gui/FileDialog.h" --#include "gui/MessageBox.h" -- --EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::EntryAttachmentsWidget) -- , m_entryAttachments(new EntryAttachments(this)) -- , m_attachmentsModel(new EntryAttachmentsModel(this)) -- , m_readOnly(false) -- , m_buttonsVisible(true) --{ -- m_ui->setupUi(this); -- -- m_ui->attachmentsView->setAcceptDrops(false); -- m_ui->attachmentsView->viewport()->setAcceptDrops(true); -- m_ui->attachmentsView->viewport()->installEventFilter(this); -- -- m_attachmentsModel->setEntryAttachments(m_entryAttachments); -- m_ui->attachmentsView->setModel(m_attachmentsModel); -- m_ui->attachmentsView->verticalHeader()->hide(); -- m_ui->attachmentsView->horizontalHeader()->setStretchLastSection(true); -- m_ui->attachmentsView->horizontalHeader()->resizeSection(EntryAttachmentsModel::NameColumn, 400); -- m_ui->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows); -- m_ui->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection); -- -- connect(this, SIGNAL(buttonsVisibleChanged(bool)), this, SLOT(updateButtonsVisible())); -- connect(this, SIGNAL(readOnlyChanged(bool)), SLOT(updateButtonsEnabled())); -- connect(m_attachmentsModel, SIGNAL(modelReset()), SLOT(updateButtonsEnabled())); -- -- // clang-format off -- connect(m_ui->attachmentsView->selectionModel(), -- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), -- SLOT(updateButtonsEnabled())); -- // clang-format on -- -- connect(m_ui->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex))); -- connect(m_ui->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveSelectedAttachments())); -- connect(m_ui->openAttachmentButton, SIGNAL(clicked()), SLOT(openSelectedAttachments())); -- connect(m_ui->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachments())); -- connect(m_ui->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeSelectedAttachments())); -- -- updateButtonsVisible(); -- updateButtonsEnabled(); --} -- --EntryAttachmentsWidget::~EntryAttachmentsWidget() --{ --} -- --const EntryAttachments* EntryAttachmentsWidget::entryAttachments() const --{ -- return m_entryAttachments; --} -- --bool EntryAttachmentsWidget::isReadOnly() const --{ -- return m_readOnly; --} -- --bool EntryAttachmentsWidget::isButtonsVisible() const --{ -- return m_buttonsVisible; --} -- --void EntryAttachmentsWidget::setEntryAttachments(const EntryAttachments* attachments) --{ -- Q_ASSERT(attachments != nullptr); -- m_entryAttachments->copyDataFrom(attachments); --} -- --void EntryAttachmentsWidget::clearAttachments() --{ -- m_entryAttachments->clear(); --} -- --void EntryAttachmentsWidget::setReadOnly(bool readOnly) --{ -- if (m_readOnly == readOnly) { -- return; -- } -- -- m_readOnly = readOnly; -- emit readOnlyChanged(m_readOnly); --} -- --void EntryAttachmentsWidget::setButtonsVisible(bool buttonsVisible) --{ -- if (m_buttonsVisible == buttonsVisible) { -- return; -- } -- -- m_buttonsVisible = buttonsVisible; -- emit buttonsVisibleChanged(m_buttonsVisible); --} -- --QByteArray EntryAttachmentsWidget::getAttachment(const QString& name) --{ -- return m_entryAttachments->value(name); --} -- --void EntryAttachmentsWidget::setAttachment(const QString& name, const QByteArray& value) --{ -- m_entryAttachments->set(name, value); --} -- --void EntryAttachmentsWidget::removeAttachment(const QString& name) --{ -- if (!isReadOnly() && m_entryAttachments->hasKey(name)) { -- m_entryAttachments->remove(name); -- } --} -- --void EntryAttachmentsWidget::insertAttachments() --{ -- Q_ASSERT(!isReadOnly()); -- if (isReadOnly()) { -- return; -- } -- -- QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); -- const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); -- if (!dirExists) { -- defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); -- } -- -- const auto filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath); -- if (filenames.isEmpty()) { -- return; -- } -- const auto confirmedFileNames = confirmLargeAttachments(filenames); -- if (confirmedFileNames.isEmpty()) { -- return; -- } -- config()->set(Config::LastAttachmentDir, QFileInfo(filenames.first()).absolutePath()); -- QString errorMessage; -- if (!insertAttachments(confirmedFileNames, errorMessage)) { -- errorOccurred(errorMessage); -- } -- emit widgetUpdated(); --} -- --void EntryAttachmentsWidget::removeSelectedAttachments() --{ -- Q_ASSERT(!isReadOnly()); -- if (isReadOnly()) { -- return; -- } -- -- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); -- if (indexes.isEmpty()) { -- return; -- } -- -- auto result = MessageBox::question(this, -- tr("Confirm remove"), -- tr("Are you sure you want to remove %n attachment(s)?", "", indexes.count()), -- MessageBox::Remove | MessageBox::Cancel, -- MessageBox::Cancel); -- -- if (result == MessageBox::Remove) { -- QStringList keys; -- for (const QModelIndex& index : indexes) { -- keys.append(m_attachmentsModel->keyByIndex(index)); -- } -- m_entryAttachments->remove(keys); -- emit widgetUpdated(); -- } --} -- --void EntryAttachmentsWidget::saveSelectedAttachments() --{ -- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); -- if (indexes.isEmpty()) { -- return; -- } -- -- QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); -- const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); -- if (!dirExists) { -- defaultDirPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); -- } -- -- const QString saveDirPath = fileDialog()->getExistingDirectory(this, tr("Save attachments"), defaultDirPath); -- if (saveDirPath.isEmpty()) { -- return; -- } -- -- QDir saveDir(saveDirPath); -- if (!saveDir.exists()) { -- if (saveDir.mkpath(saveDir.absolutePath())) { -- errorOccurred(tr("Unable to create directory:\n%1").arg(saveDir.absolutePath())); -- return; -- } -- } -- config()->set(Config::LastAttachmentDir, QFileInfo(saveDir.absolutePath()).absolutePath()); -- -- QStringList errors; -- for (const QModelIndex& index : indexes) { -- const QString filename = m_attachmentsModel->keyByIndex(index); -- const QString attachmentPath = saveDir.absoluteFilePath(filename); -- -- if (QFileInfo::exists(attachmentPath)) { -- -- MessageBox::Buttons buttons = MessageBox::Overwrite | MessageBox::Cancel; -- if (indexes.length() > 1) { -- buttons |= MessageBox::Skip; -- } -- -- const QString questionText( -- tr("Are you sure you want to overwrite the existing file \"%1\" with the attachment?")); -- -- auto result = MessageBox::question( -- this, tr("Confirm overwrite"), questionText.arg(filename), buttons, MessageBox::Cancel); -- -- if (result == MessageBox::Skip) { -- continue; -- } else if (result == MessageBox::Cancel) { -- return; -- } -- } -- -- QFile file(attachmentPath); -- const QByteArray attachmentData = m_entryAttachments->value(filename); -- const bool saveOk = file.open(QIODevice::WriteOnly) && file.write(attachmentData) == attachmentData.size(); -- if (!saveOk) { -- errors.append(QString("%1 - %2").arg(filename, file.errorString())); -- } -- } -- -- if (!errors.isEmpty()) { -- errorOccurred(tr("Unable to save attachments:\n%1").arg(errors.join('\n'))); -- } --} -- --void EntryAttachmentsWidget::openAttachment(const QModelIndex& index) --{ -- Q_ASSERT(index.isValid()); -- if (!index.isValid()) { -- return; -- } -- -- QString errorMessage; -- if (!openAttachment(index, errorMessage)) { -- errorOccurred(tr("Unable to open attachment:\n%1").arg(errorMessage)); -- } --} -- --void EntryAttachmentsWidget::openSelectedAttachments() --{ -- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); -- if (indexes.isEmpty()) { -- return; -- } -- -- QStringList errors; -- for (const QModelIndex& index : indexes) { -- QString errorMessage; -- if (!openAttachment(index, errorMessage)) { -- const QString filename = m_attachmentsModel->keyByIndex(index); -- errors.append(QString("%1 - %2").arg(filename, errorMessage)); -- }; -- } -- -- if (!errors.isEmpty()) { -- errorOccurred(tr("Unable to open attachments:\n%1").arg(errors.join('\n'))); -- } --} -- --void EntryAttachmentsWidget::updateButtonsEnabled() --{ -- const bool hasSelection = m_ui->attachmentsView->selectionModel()->hasSelection(); -- -- m_ui->addAttachmentButton->setEnabled(!m_readOnly); -- m_ui->removeAttachmentButton->setEnabled(hasSelection && !m_readOnly); -- -- m_ui->saveAttachmentButton->setEnabled(hasSelection); -- m_ui->openAttachmentButton->setEnabled(hasSelection); --} -- --void EntryAttachmentsWidget::updateButtonsVisible() --{ -- m_ui->addAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); -- m_ui->removeAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); --} -- --bool EntryAttachmentsWidget::insertAttachments(const QStringList& filenames, QString& errorMessage) --{ -- Q_ASSERT(!isReadOnly()); -- if (isReadOnly()) { -- return false; -- } -- -- QStringList errors; -- for (const QString& filename : filenames) { -- QByteArray data; -- QFile file(filename); -- const QFileInfo fInfo(filename); -- const bool readOk = file.open(QIODevice::ReadOnly) && Tools::readAllFromDevice(&file, data); -- if (readOk) { -- m_entryAttachments->set(fInfo.fileName(), data); -- } else { -- errors.append(QString("%1 - %2").arg(fInfo.fileName(), file.errorString())); -- } -- } -- -- if (!errors.isEmpty()) { -- errorMessage = tr("Unable to open file(s):\n%1", "", errors.size()).arg(errors.join('\n')); -- } -- -- return errors.isEmpty(); --} -- --bool EntryAttachmentsWidget::openAttachment(const QModelIndex& index, QString& errorMessage) --{ -- const QString filename = m_attachmentsModel->keyByIndex(index); -- const QByteArray attachmentData = m_entryAttachments->value(filename); -- -- // tmp file will be removed once the database (or the application) has been closed --#ifdef KEEPASSXC_DIST_SNAP -- const QString tmpFileTemplate = -- QString("%1/XXXXXX.%2").arg(QProcessEnvironment::systemEnvironment().value("SNAP_USER_DATA"), filename); --#else -- const QString tmpFileTemplate = QDir::temp().absoluteFilePath(QString("XXXXXX.").append(filename)); --#endif -- -- QScopedPointer tmpFile(new QTemporaryFile(tmpFileTemplate, this)); -- -- const bool saveOk = tmpFile->open() && tmpFile->write(attachmentData) == attachmentData.size() && tmpFile->flush(); -- if (!saveOk) { -- errorMessage = QString("%1 - %2").arg(filename, tmpFile->errorString()); -- return false; -- } -- -- tmpFile->close(); -- const bool openOk = QDesktopServices::openUrl(QUrl::fromLocalFile(tmpFile->fileName())); -- if (!openOk) { -- errorMessage = QString("Can't open file \"%1\"").arg(filename); -- return false; -- } -- -- // take ownership of the tmpFile pointer -- tmpFile.take(); -- return true; --} -- --QStringList EntryAttachmentsWidget::confirmLargeAttachments(const QStringList& filenames) --{ -- const QString confirmation(tr("%1 is a big file (%2 MB).\nYour database may get very large and reduce " -- "performance.\n\nAre you sure to add this file?")); -- QStringList confirmedFileNames; -- for (const auto& file : filenames) { -- QFileInfo fileInfo(file); -- double size = fileInfo.size() / (1024.0 * 1024.0); -- // Ask for confirmation before adding files over 5 MB in size -- if (size > 5.0) { -- auto fileName = fileInfo.fileName(); -- auto result = MessageBox::question(this, -- tr("Confirm Attachment"), -- confirmation.arg(fileName, QString::number(size, 'f', 1)), -- MessageBox::Yes | MessageBox::No, -- MessageBox::No); -- if (result == MessageBox::Yes) { -- confirmedFileNames << file; -- } -- } else { -- confirmedFileNames << file; -- } -- } -- -- return confirmedFileNames; --} -- --bool EntryAttachmentsWidget::eventFilter(QObject* watched, QEvent* e) --{ -- if (watched == m_ui->attachmentsView->viewport() && !isReadOnly()) { -- const QEvent::Type eventType = e->type(); -- if (eventType == QEvent::DragEnter || eventType == QEvent::DragMove) { -- QDropEvent* dropEv = static_cast(e); -- const QMimeData* mimeData = dropEv->mimeData(); -- if (mimeData->hasUrls()) { -- dropEv->acceptProposedAction(); -- return true; -- } -- } else if (eventType == QEvent::Drop) { -- QDropEvent* dropEv = static_cast(e); -- const QMimeData* mimeData = dropEv->mimeData(); -- if (mimeData->hasUrls()) { -- dropEv->acceptProposedAction(); -- QStringList filenames; -- const QList urls = mimeData->urls(); -- for (const QUrl& url : urls) { -- const QFileInfo fInfo(url.toLocalFile()); -- if (fInfo.isFile()) { -- filenames.append(fInfo.absoluteFilePath()); -- } -- } -- -- QString errorMessage; -- if (!insertAttachments(filenames, errorMessage)) { -- errorOccurred(errorMessage); -- } -- -- return true; -- } -- } -- } -- -- return QWidget::eventFilter(watched, e); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --#ifndef ENTRYATTACHMENTSWIDGET_H --#define ENTRYATTACHMENTSWIDGET_H -- --#include --#include -- --namespace Ui --{ -- class EntryAttachmentsWidget; --} -- --class QByteArray; --class EntryAttachments; --class EntryAttachmentsModel; -- --class EntryAttachmentsWidget : public QWidget --{ -- Q_OBJECT -- Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged) -- Q_PROPERTY(bool isButtonsVisible READ isButtonsVisible WRITE setButtonsVisible NOTIFY buttonsVisibleChanged) --public: -- explicit EntryAttachmentsWidget(QWidget* parent = nullptr); -- ~EntryAttachmentsWidget(); -- -- const EntryAttachments* entryAttachments() const; -- bool isReadOnly() const; -- bool isButtonsVisible() const; -- -- QByteArray getAttachment(const QString& name); -- void setAttachment(const QString& name, const QByteArray& value); -- void removeAttachment(const QString& name); -- --public slots: -- void setEntryAttachments(const EntryAttachments* attachments); -- void clearAttachments(); -- void setReadOnly(bool readOnly); -- void setButtonsVisible(bool isButtonsVisible); -- --signals: -- void errorOccurred(const QString& error); -- void readOnlyChanged(bool readOnly); -- void buttonsVisibleChanged(bool isButtonsVisible); -- void widgetUpdated(); -- --private slots: -- void insertAttachments(); -- void removeSelectedAttachments(); -- void saveSelectedAttachments(); -- void openAttachment(const QModelIndex& index); -- void openSelectedAttachments(); -- void updateButtonsVisible(); -- void updateButtonsEnabled(); -- --private: -- bool insertAttachments(const QStringList& fileNames, QString& errorMessage); -- bool openAttachment(const QModelIndex& index, QString& errorMessage); -- -- QStringList confirmLargeAttachments(const QStringList& filenames); -- -- bool eventFilter(QObject* watched, QEvent* event) override; -- -- QScopedPointer m_ui; -- QPointer m_entryAttachments; -- QPointer m_attachmentsModel; -- bool m_readOnly; -- bool m_buttonsVisible; --}; -- --#endif // ENTRYATTACHMENTSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.ui keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.ui ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,123 +0,0 @@ -- -- -- EntryAttachmentsWidget -- -- -- -- 0 -- 0 -- 337 -- 289 -- -- -- -- Form -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Attachments -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- false -- -- -- Add new attachment -- -- -- Add -- -- -- -- -- -- -- false -- -- -- Remove selected attachment -- -- -- Remove -- -- -- -- -- -- -- false -- -- -- Open selected attachment -- -- -- Open -- -- -- -- -- -- -- false -- -- -- Save selected attachment to disk -- -- -- Save -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 173 -- -- -- -- -- -- -- -- -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,238 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryAttributesModel.h" -- --#include "core/Entry.h" --#include "core/Tools.h" -- --#include -- --EntryAttributesModel::EntryAttributesModel(QObject* parent) -- : QAbstractListModel(parent) -- , m_entryAttributes(nullptr) -- , m_nextRenameDataChange(false) --{ --} -- --void EntryAttributesModel::setEntryAttributes(EntryAttributes* entryAttributes) --{ -- beginResetModel(); -- -- if (m_entryAttributes) { -- m_entryAttributes->disconnect(this); -- } -- -- m_entryAttributes = entryAttributes; -- -- if (m_entryAttributes) { -- updateAttributes(); -- connect(m_entryAttributes, SIGNAL(customKeyModified(QString)), SLOT(attributeChange(QString))); -- connect(m_entryAttributes, SIGNAL(aboutToBeAdded(QString)), SLOT(attributeAboutToAdd(QString))); -- connect(m_entryAttributes, SIGNAL(added(QString)), SLOT(attributeAdd())); -- connect(m_entryAttributes, SIGNAL(aboutToBeRemoved(QString)), SLOT(attributeAboutToRemove(QString))); -- connect(m_entryAttributes, SIGNAL(removed(QString)), SLOT(attributeRemove())); -- // clang-format off -- connect( -- m_entryAttributes, SIGNAL(aboutToRename(QString,QString)), SLOT(attributeAboutToRename(QString,QString))); -- // clang-format on -- -- // clang-format off -- connect(m_entryAttributes, SIGNAL(renamed(QString,QString)), SLOT(attributeRename(QString,QString))); -- // clang-format on -- -- connect(m_entryAttributes, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); -- connect(m_entryAttributes, SIGNAL(reset()), SLOT(reset())); -- } -- -- endResetModel(); --} -- --int EntryAttributesModel::rowCount(const QModelIndex& parent) const --{ -- if (!m_entryAttributes || parent.isValid()) { -- return 0; -- } else { -- return m_attributes.size(); -- } --} -- --int EntryAttributesModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- -- return 1; --} -- --QVariant EntryAttributesModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) { -- return tr("Name"); -- } else { -- return QVariant(); -- } --} -- --QVariant EntryAttributesModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole)) { -- return QVariant(); -- } -- -- return m_attributes.at(index.row()); --} -- --bool EntryAttributesModel::setData(const QModelIndex& index, const QVariant& value, int role) --{ -- if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { -- return false; -- } -- -- QString oldKey = m_attributes.at(index.row()); -- QString newKey = value.toString(); -- -- if (EntryAttributes::isDefaultAttribute(newKey) || m_entryAttributes->keys().contains(newKey)) { -- return false; -- } -- m_entryAttributes->rename(oldKey, newKey); -- -- return true; --} -- --Qt::ItemFlags EntryAttributesModel::flags(const QModelIndex& index) const --{ -- if (!index.isValid()) { -- return Qt::NoItemFlags; -- } else { -- return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; -- } --} -- --QModelIndex EntryAttributesModel::indexByKey(const QString& key) const --{ -- int row = m_attributes.indexOf(key); -- -- if (row == -1) { -- return QModelIndex(); -- } else { -- return index(row, 0); -- } --} -- --QString EntryAttributesModel::keyByIndex(const QModelIndex& index) const --{ -- if (!index.isValid()) { -- return QString(); -- } else { -- return m_attributes.at(index.row()); -- } --} -- --void EntryAttributesModel::attributeChange(const QString& key) --{ -- int row = m_attributes.indexOf(key); -- Q_ASSERT(row != -1); -- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); --} -- --void EntryAttributesModel::attributeAboutToAdd(const QString& key) --{ -- QList rows = m_attributes; -- rows.append(key); -- std::sort(rows.begin(), rows.end()); -- int row = rows.indexOf(key); -- beginInsertRows(QModelIndex(), row, row); --} -- --void EntryAttributesModel::attributeAdd() --{ -- updateAttributes(); -- endInsertRows(); --} -- --void EntryAttributesModel::attributeAboutToRemove(const QString& key) --{ -- int row = m_attributes.indexOf(key); -- beginRemoveRows(QModelIndex(), row, row); --} -- --void EntryAttributesModel::attributeRemove() --{ -- updateAttributes(); -- endRemoveRows(); --} -- --void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const QString& newKey) --{ -- int oldRow = m_attributes.indexOf(oldKey); -- -- QList rows = m_attributes; -- rows.removeOne(oldKey); -- rows.append(newKey); -- std::sort(rows.begin(), rows.end()); -- int newRow = rows.indexOf(newKey); -- if (newRow > oldRow) { -- newRow++; -- } -- -- if (oldRow != newRow) { -- bool result = beginMoveRows(QModelIndex(), oldRow, oldRow, QModelIndex(), newRow); -- Q_UNUSED(result); -- Q_ASSERT(result); -- } else { -- m_nextRenameDataChange = true; -- } --} -- --void EntryAttributesModel::attributeRename(const QString& oldKey, const QString& newKey) --{ -- Q_UNUSED(oldKey); -- -- updateAttributes(); -- -- if (!m_nextRenameDataChange) { -- endMoveRows(); -- } else { -- m_nextRenameDataChange = false; -- -- QModelIndex keyIndex = index(m_attributes.indexOf(newKey), 0); -- emit dataChanged(keyIndex, keyIndex); -- } --} -- --void EntryAttributesModel::aboutToReset() --{ -- beginResetModel(); --} -- --void EntryAttributesModel::reset() --{ -- updateAttributes(); -- endResetModel(); --} -- --void EntryAttributesModel::updateAttributes() --{ -- m_attributes.clear(); -- -- const QList attributesKeyList = m_entryAttributes->keys(); -- for (const QString& key : attributesKeyList) { -- if (!EntryAttributes::isDefaultAttribute(key)) { -- m_attributes.append(key); -- } -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,60 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYATTRIBUTESMODEL_H --#define KEEPASSX_ENTRYATTRIBUTESMODEL_H -- --#include -- --class EntryAttributes; -- --class EntryAttributesModel : public QAbstractListModel --{ -- Q_OBJECT -- --public: -- explicit EntryAttributesModel(QObject* parent = nullptr); -- void setEntryAttributes(EntryAttributes* entryAttributes); -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; -- Qt::ItemFlags flags(const QModelIndex& index) const override; -- QModelIndex indexByKey(const QString& key) const; -- QString keyByIndex(const QModelIndex& index) const; -- --private slots: -- void attributeChange(const QString& key); -- void attributeAboutToAdd(const QString& key); -- void attributeAdd(); -- void attributeAboutToRemove(const QString& key); -- void attributeRemove(); -- void attributeAboutToRename(const QString& oldKey, const QString& newKey); -- void attributeRename(const QString& oldKey, const QString& newKey); -- void aboutToReset(); -- void reset(); -- --private: -- void updateAttributes(); -- -- EntryAttributes* m_entryAttributes; -- QList m_attributes; -- bool m_nextRenameDataChange; --}; -- --#endif // KEEPASSX_ENTRYATTRIBUTESMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,148 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryHistoryModel.h" -- --#include "core/Entry.h" --#include "core/Global.h" -- --EntryHistoryModel::EntryHistoryModel(QObject* parent) -- : QAbstractTableModel(parent) --{ --} -- --Entry* EntryHistoryModel::entryFromIndex(const QModelIndex& index) const --{ -- Q_ASSERT(index.isValid() && index.row() < m_historyEntries.size()); -- return m_historyEntries.at(index.row()); --} -- --int EntryHistoryModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- return 4; --} -- --int EntryHistoryModel::rowCount(const QModelIndex& parent) const --{ -- if (!parent.isValid()) { -- return m_historyEntries.count(); -- } else { -- return 0; -- } --} -- --QVariant EntryHistoryModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- if (role == Qt::DisplayRole || role == Qt::UserRole) { -- Entry* entry = entryFromIndex(index); -- const TimeInfo& timeInfo = entry->timeInfo(); -- QDateTime lastModificationLocalTime = timeInfo.lastModificationTime().toLocalTime(); -- switch (index.column()) { -- case 0: -- if (role == Qt::DisplayRole) { -- return lastModificationLocalTime.toString(Qt::SystemLocaleShortDate); -- } else { -- return lastModificationLocalTime; -- } -- case 1: -- return entry->title(); -- case 2: -- return entry->username(); -- case 3: -- return entry->url(); -- } -- } -- -- return QVariant(); --} -- --QVariant EntryHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { -- switch (section) { -- case 0: -- return tr("Last modified"); -- case 1: -- return tr("Title"); -- case 2: -- return tr("Username"); -- case 3: -- return tr("URL"); -- } -- } -- -- return QVariant(); --} -- --void EntryHistoryModel::setEntries(const QList& entries) --{ -- beginResetModel(); -- -- m_historyEntries = entries; -- m_deletedHistoryEntries.clear(); -- -- endResetModel(); --} -- --void EntryHistoryModel::clear() --{ -- beginResetModel(); -- -- m_historyEntries.clear(); -- m_deletedHistoryEntries.clear(); -- -- endResetModel(); --} -- --void EntryHistoryModel::clearDeletedEntries() --{ -- m_deletedHistoryEntries.clear(); --} -- --QList EntryHistoryModel::deletedEntries() --{ -- return m_deletedHistoryEntries; --} -- --void EntryHistoryModel::deleteIndex(QModelIndex index) --{ -- if (index.isValid()) { -- Entry* entry = entryFromIndex(index); -- beginRemoveRows(QModelIndex(), m_historyEntries.indexOf(entry), m_historyEntries.indexOf(entry)); -- m_historyEntries.removeAll(entry); -- m_deletedHistoryEntries << entry; -- endRemoveRows(); -- } --} -- --void EntryHistoryModel::deleteAll() --{ -- Q_ASSERT(m_historyEntries.count() > 0); -- -- beginRemoveRows(QModelIndex(), 0, m_historyEntries.size() - 1); -- -- for (Entry* entry : asConst(m_historyEntries)) { -- m_deletedHistoryEntries << entry; -- } -- m_historyEntries.clear(); -- endRemoveRows(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYHISTORYMODEL_H --#define KEEPASSX_ENTRYHISTORYMODEL_H -- --#include -- --class Entry; -- --class EntryHistoryModel : public QAbstractTableModel --{ -- Q_OBJECT -- --public: -- explicit EntryHistoryModel(QObject* parent = nullptr); -- -- Entry* entryFromIndex(const QModelIndex& index) const; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; -- -- void setEntries(const QList& entries); -- void clear(); -- void clearDeletedEntries(); -- QList deletedEntries(); -- void deleteIndex(QModelIndex index); -- void deleteAll(); -- --private: -- QList m_historyEntries; -- QList m_deletedHistoryEntries; --}; -- --#endif // KEEPASSX_ENTRYHISTORYMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,578 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryModel.h" -- --#include --#include --#include --#include --#include -- --#include "core/Config.h" --#include "core/DatabaseIcons.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Resources.h" --#ifdef Q_OS_MACOS --#include "gui/osutils/macutils/MacUtils.h" --#endif -- --EntryModel::EntryModel(QObject* parent) -- : QAbstractTableModel(parent) -- , m_group(nullptr) -- , HiddenContentDisplay(QString("\u25cf").repeated(6)) -- , DateFormat(Qt::DefaultLocaleShortDate) --{ -- connect(config(), &Config::changed, this, &EntryModel::onConfigChanged); --} -- --Entry* EntryModel::entryFromIndex(const QModelIndex& index) const --{ -- Q_ASSERT(index.isValid() && index.row() < m_entries.size()); -- return m_entries.at(index.row()); --} -- --QModelIndex EntryModel::indexFromEntry(Entry* entry) const --{ -- int row = m_entries.indexOf(entry); -- Q_ASSERT(row != -1); -- return index(row, 1); --} -- --void EntryModel::setGroup(Group* group) --{ -- if (!group || group == m_group) { -- return; -- } -- -- beginResetModel(); -- -- severConnections(); -- -- m_group = group; -- m_allGroups.clear(); -- m_entries = group->entries(); -- m_orgEntries.clear(); -- -- makeConnections(group); -- -- endResetModel(); --} -- --void EntryModel::setEntries(const QList& entries) --{ -- beginResetModel(); -- -- severConnections(); -- -- m_group = nullptr; -- m_allGroups.clear(); -- m_entries = entries; -- m_orgEntries = entries; -- -- QSet databases; -- -- for (Entry* entry : asConst(m_entries)) { -- databases.insert(entry->group()->database()); -- } -- -- for (Database* db : asConst(databases)) { -- Q_ASSERT(db); -- const QList groupList = db->rootGroup()->groupsRecursive(true); -- for (const Group* group : groupList) { -- m_allGroups.append(group); -- } -- -- if (db->metadata()->recycleBin()) { -- m_allGroups.removeOne(db->metadata()->recycleBin()); -- } -- } -- -- for (const Group* group : asConst(m_allGroups)) { -- makeConnections(group); -- } -- -- endResetModel(); --} -- --int EntryModel::rowCount(const QModelIndex& parent) const --{ -- if (parent.isValid()) { -- return 0; -- } else { -- return m_entries.size(); -- } --} -- --int EntryModel::columnCount(const QModelIndex& parent) const --{ -- // Advised by Qt documentation -- if (parent.isValid()) { -- return 0; -- } -- -- return 14; --} -- --QVariant EntryModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- Entry* entry = entryFromIndex(index); -- EntryAttributes* attr = entry->attributes(); -- -- if (role == Qt::DisplayRole) { -- QString result; -- switch (index.column()) { -- case ParentGroup: -- if (entry->group()) { -- return entry->group()->name(); -- } -- break; -- case Title: -- result = entry->resolveMultiplePlaceholders(entry->title()); -- if (attr->isReference(EntryAttributes::TitleKey)) { -- result.prepend(tr("Ref: ", "Reference abbreviation")); -- } -- return result; -- case Username: -- if (config()->get(Config::GUI_HideUsernames).toBool()) { -- result = EntryModel::HiddenContentDisplay; -- } else { -- result = entry->resolveMultiplePlaceholders(entry->username()); -- } -- if (attr->isReference(EntryAttributes::UserNameKey)) { -- result.prepend(tr("Ref: ", "Reference abbreviation")); -- } -- if (entry->username().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { -- result = ""; -- } -- return result; -- case Password: -- if (config()->get(Config::GUI_HidePasswords).toBool()) { -- result = EntryModel::HiddenContentDisplay; -- } else { -- result = entry->resolveMultiplePlaceholders(entry->password()); -- } -- if (attr->isReference(EntryAttributes::PasswordKey)) { -- result.prepend(tr("Ref: ", "Reference abbreviation")); -- } -- if (entry->password().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { -- result = ""; -- } -- return result; -- case Url: -- result = entry->resolveMultiplePlaceholders(entry->displayUrl()); -- if (attr->isReference(EntryAttributes::URLKey)) { -- result.prepend(tr("Ref: ", "Reference abbreviation")); -- } -- return result; -- case Notes: -- if (!entry->notes().isEmpty()) { -- if (config()->get(Config::Security_HideNotes).toBool()) { -- result = EntryModel::HiddenContentDisplay; -- } else { -- // Display only first line of notes in simplified format if not hidden -- result = entry->notes().section("\n", 0, 0).simplified(); -- } -- if (attr->isReference(EntryAttributes::NotesKey)) { -- result.prepend(tr("Ref: ", "Reference abbreviation")); -- } -- } -- return result; -- case Expires: -- // Display either date of expiry or 'Never' -- result = entry->timeInfo().expires() -- ? entry->timeInfo().expiryTime().toLocalTime().toString(EntryModel::DateFormat) -- : tr("Never"); -- return result; -- case Created: -- result = entry->timeInfo().creationTime().toLocalTime().toString(EntryModel::DateFormat); -- return result; -- case Modified: -- result = entry->timeInfo().lastModificationTime().toLocalTime().toString(EntryModel::DateFormat); -- return result; -- case Accessed: -- result = entry->timeInfo().lastAccessTime().toLocalTime().toString(EntryModel::DateFormat); -- return result; -- case Attachments: { -- // Display comma-separated list of attachments -- QList attachments = entry->attachments()->keys(); -- for (const auto& attachment : attachments) { -- if (result.isEmpty()) { -- result.append(attachment); -- continue; -- } -- result.append(QString(", ") + attachment); -- } -- return result; -- } -- case Size: { -- const int unitsSize = 4; -- QString units[unitsSize] = {"B", "KiB", "MiB", "GiB"}; -- float resultInt = entry->size(); -- -- for (int i = 0; i < unitsSize; i++) { -- if (resultInt < 1024 || i == unitsSize - 1) { -- resultInt = qRound(resultInt * 100) / 100.0; -- result = QStringLiteral("%1 %2").arg(QString::number(resultInt), units[i]); -- break; -- } -- resultInt /= 1024.0; -- } -- -- return result; -- } -- } -- } else if (role == Qt::UserRole) { // Qt::UserRole is used as sort role, see EntryView::EntryView() -- switch (index.column()) { -- case Username: -- return entry->resolveMultiplePlaceholders(entry->username()); -- case Password: -- return entry->resolveMultiplePlaceholders(entry->password()); -- case Expires: -- // There seems to be no better way of expressing 'infinity' -- return entry->timeInfo().expires() ? entry->timeInfo().expiryTime() : QDateTime(QDate(9999, 1, 1)); -- case Created: -- return entry->timeInfo().creationTime(); -- case Modified: -- return entry->timeInfo().lastModificationTime(); -- case Accessed: -- return entry->timeInfo().lastAccessTime(); -- case Paperclip: -- // Display entries with attachments above those without when -- // sorting ascendingly (and vice versa when sorting descendingly) -- return !entry->attachments()->isEmpty(); -- case Totp: -- return entry->hasTotp(); -- case Size: -- return entry->size(); -- default: -- // For all other columns, simply use data provided by Qt::Display- -- // Role for sorting -- return data(index, Qt::DisplayRole); -- } -- } else if (role == Qt::DecorationRole) { -- switch (index.column()) { -- case ParentGroup: -- if (entry->group()) { -- return entry->group()->iconPixmap(); -- } -- break; -- case Title: -- return entry->iconPixmap(); -- case Paperclip: -- if (!entry->attachments()->isEmpty()) { -- return resources()->icon("paperclip"); -- } -- break; -- case Totp: -- if (entry->hasTotp()) { -- return resources()->icon("chronometer"); -- } -- break; -- } -- } else if (role == Qt::FontRole) { -- QFont font; -- if (entry->isExpired()) { -- font.setStrikeOut(true); -- } -- return font; -- } else if (role == Qt::ForegroundRole) { -- QColor foregroundColor; -- foregroundColor.setNamedColor(entry->foregroundColor()); -- if (entry->hasReferences()) { -- QPalette p; -- foregroundColor = p.color(QPalette::Current, QPalette::Text); -- int lightness = -- qMin(255, qMax(0, foregroundColor.lightness() + (foregroundColor.lightness() < 110 ? 85 : -51))); -- foregroundColor.setHsl(foregroundColor.hue(), foregroundColor.saturation(), lightness); -- return QVariant(foregroundColor); -- } else if (foregroundColor.isValid()) { -- return QVariant(foregroundColor); -- } -- } else if (role == Qt::BackgroundRole) { -- QColor backgroundColor; -- backgroundColor.setNamedColor(entry->backgroundColor()); -- if (backgroundColor.isValid()) { -- return QVariant(backgroundColor); -- } -- } else if (role == Qt::TextAlignmentRole) { -- if (index.column() == Paperclip) { -- return Qt::AlignCenter; -- } -- } -- -- return QVariant(); --} -- --QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- Q_UNUSED(orientation); -- -- if (role == Qt::DisplayRole) { -- switch (section) { -- case ParentGroup: -- return tr("Group"); -- case Title: -- return tr("Title"); -- case Username: -- return tr("Username"); -- case Password: -- return tr("Password"); -- case Url: -- return tr("URL"); -- case Notes: -- return tr("Notes"); -- case Expires: -- return tr("Expires"); -- case Created: -- return tr("Created"); -- case Modified: -- return tr("Modified"); -- case Accessed: -- return tr("Accessed"); -- case Attachments: -- return tr("Attachments"); -- case Size: -- return tr("Size"); -- } -- -- } else if (role == Qt::DecorationRole) { -- switch (section) { -- case Paperclip: -- return resources()->icon("paperclip"); -- case Totp: -- return resources()->icon("chronometer"); -- } -- } else if (role == Qt::ToolTipRole) { -- switch (section) { -- case ParentGroup: -- return tr("Group name"); -- case Title: -- return tr("Entry title"); -- case Username: -- return tr("Username"); -- case Password: -- return tr("Password"); -- case Url: -- return tr("URL"); -- case Notes: -- return tr("Entry notes"); -- case Expires: -- return tr("Entry expires at"); -- case Created: -- return tr("Creation date"); -- case Modified: -- return tr("Last modification date"); -- case Accessed: -- return tr("Last access date"); -- case Attachments: -- return tr("Attached files"); -- case Size: -- return tr("Entry size"); -- case Paperclip: -- return tr("Has attachments"); -- case Totp: -- return tr("Has TOTP one-time password"); -- } -- } -- -- return {}; --} -- --Qt::DropActions EntryModel::supportedDropActions() const --{ -- return Qt::IgnoreAction; --} -- --Qt::DropActions EntryModel::supportedDragActions() const --{ -- return (Qt::MoveAction | Qt::CopyAction); --} -- --Qt::ItemFlags EntryModel::flags(const QModelIndex& modelIndex) const --{ -- if (!modelIndex.isValid()) { -- return Qt::NoItemFlags; -- } else { -- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDragEnabled; -- } --} -- --QStringList EntryModel::mimeTypes() const --{ -- QStringList types; -- types << QLatin1String("application/x-keepassx-entry"); -- return types; --} -- --QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const --{ -- if (indexes.isEmpty()) { -- return nullptr; -- } -- -- QMimeData* data = new QMimeData(); -- QByteArray encoded; -- QDataStream stream(&encoded, QIODevice::WriteOnly); -- -- QSet seenEntries; -- -- for (const QModelIndex& index : indexes) { -- if (!index.isValid()) { -- continue; -- } -- -- Entry* entry = entryFromIndex(index); -- if (!seenEntries.contains(entry)) { -- // make sure we don't add entries multiple times when we get indexes -- // with the same row but different columns -- stream << entry->group()->database()->uuid() << entry->uuid(); -- seenEntries.insert(entry); -- } -- } -- -- if (seenEntries.isEmpty()) { -- delete data; -- return nullptr; -- } else { -- data->setData(mimeTypes().at(0), encoded); -- return data; -- } --} -- --void EntryModel::entryAboutToAdd(Entry* entry) --{ -- if (!m_group && !m_orgEntries.contains(entry)) { -- return; -- } -- -- beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size()); -- if (!m_group) { -- m_entries.append(entry); -- } --} -- --void EntryModel::entryAdded(Entry* entry) --{ -- if (!m_group && !m_orgEntries.contains(entry)) { -- return; -- } -- -- if (m_group) { -- m_entries = m_group->entries(); -- } -- endInsertRows(); --} -- --void EntryModel::entryAboutToRemove(Entry* entry) --{ -- beginRemoveRows(QModelIndex(), m_entries.indexOf(entry), m_entries.indexOf(entry)); -- if (!m_group) { -- m_entries.removeAll(entry); -- } --} -- --void EntryModel::entryRemoved() --{ -- if (m_group) { -- m_entries = m_group->entries(); -- } -- endRemoveRows(); --} -- --void EntryModel::entryAboutToMoveUp(int row) --{ -- beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1); -- if (m_group) { -- m_entries.move(row, row - 1); -- } --} -- --void EntryModel::entryMovedUp() --{ -- if (m_group) { -- m_entries = m_group->entries(); -- } -- endMoveRows(); --} -- --void EntryModel::entryAboutToMoveDown(int row) --{ -- beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 2); -- if (m_group) { -- m_entries.move(row, row + 1); -- } --} -- --void EntryModel::entryMovedDown() --{ -- if (m_group) { -- m_entries = m_group->entries(); -- } -- endMoveRows(); --} -- --void EntryModel::entryDataChanged(Entry* entry) --{ -- int row = m_entries.indexOf(entry); -- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); --} -- --void EntryModel::onConfigChanged(Config::ConfigKey key) --{ -- switch (key) { -- case Config::GUI_HideUsernames: -- emit dataChanged(index(0, Username), index(rowCount() - 1, Username), {Qt::DisplayRole}); -- break; -- case Config::GUI_HidePasswords: -- emit dataChanged(index(0, Password), index(rowCount() - 1, Password), {Qt::DisplayRole}); -- break; -- default: -- break; -- } --} -- --void EntryModel::severConnections() --{ -- if (m_group) { -- disconnect(m_group, nullptr, this, nullptr); -- } -- -- for (const Group* group : asConst(m_allGroups)) { -- disconnect(group, nullptr, this, nullptr); -- } --} -- --void EntryModel::makeConnections(const Group* group) --{ -- connect(group, SIGNAL(entryAboutToAdd(Entry*)), SLOT(entryAboutToAdd(Entry*))); -- connect(group, SIGNAL(entryAdded(Entry*)), SLOT(entryAdded(Entry*))); -- connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*))); -- connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved())); -- connect(group, SIGNAL(entryAboutToMoveUp(int)), SLOT(entryAboutToMoveUp(int))); -- connect(group, SIGNAL(entryMovedUp()), SLOT(entryMovedUp())); -- connect(group, SIGNAL(entryAboutToMoveDown(int)), SLOT(entryAboutToMoveDown(int))); -- connect(group, SIGNAL(entryMovedDown()), SLOT(entryMovedDown())); -- connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,95 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYMODEL_H --#define KEEPASSX_ENTRYMODEL_H -- --#include --#include -- --#include "core/Config.h" -- --class Entry; --class Group; -- --class EntryModel : public QAbstractTableModel --{ -- Q_OBJECT -- --public: -- enum ModelColumn -- { -- ParentGroup = 0, -- Title = 1, -- Username = 2, -- Password = 3, -- Url = 4, -- Notes = 5, -- Expires = 6, -- Created = 7, -- Modified = 8, -- Accessed = 9, -- Paperclip = 10, -- Attachments = 11, -- Totp = 12, -- Size = 13 -- }; -- -- explicit EntryModel(QObject* parent = nullptr); -- Entry* entryFromIndex(const QModelIndex& index) const; -- QModelIndex indexFromEntry(Entry* entry) const; -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- Qt::DropActions supportedDropActions() const override; -- Qt::DropActions supportedDragActions() const override; -- Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; -- QStringList mimeTypes() const override; -- QMimeData* mimeData(const QModelIndexList& indexes) const override; -- -- void setGroup(Group* group); -- void setEntries(const QList& entries); -- --private slots: -- void entryAboutToAdd(Entry* entry); -- void entryAdded(Entry* entry); -- void entryAboutToRemove(Entry* entry); -- void entryRemoved(); -- void entryAboutToMoveUp(int row); -- void entryMovedUp(); -- void entryAboutToMoveDown(int row); -- void entryMovedDown(); -- void entryDataChanged(Entry* entry); -- -- void onConfigChanged(Config::ConfigKey key); -- --private: -- void severConnections(); -- void makeConnections(const Group* group); -- -- Group* m_group; -- QList m_entries; -- QList m_orgEntries; -- QList m_allGroups; -- -- const QString HiddenContentDisplay; -- const Qt::DateFormat DateFormat; --}; -- --#endif // KEEPASSX_ENTRYMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,151 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryURLModel.h" -- --#include "core/Entry.h" --#include "core/Resources.h" --#include "core/Tools.h" --#include "gui/styles/StateColorPalette.h" -- --#include -- --EntryURLModel::EntryURLModel(QObject* parent) -- : QStandardItemModel(parent) -- , m_entryAttributes(nullptr) -- , m_errorIcon(resources()->icon("dialog-error")) --{ --} -- --void EntryURLModel::setEntryAttributes(EntryAttributes* entryAttributes) --{ -- beginResetModel(); -- -- if (m_entryAttributes) { -- m_entryAttributes->disconnect(this); -- } -- -- m_entryAttributes = entryAttributes; -- -- if (m_entryAttributes) { -- updateAttributes(); -- // clang-format off -- connect(m_entryAttributes, SIGNAL(added(QString)), SLOT(updateAttributes())); -- connect(m_entryAttributes, SIGNAL(customKeyModified(QString)), SLOT(updateAttributes())); -- connect(m_entryAttributes, SIGNAL(removed(QString)), SLOT(updateAttributes())); -- connect(m_entryAttributes, SIGNAL(renamed(QString,QString)), SLOT(updateAttributes())); -- connect(m_entryAttributes, SIGNAL(reset()), SLOT(updateAttributes())); -- // clang-format on -- } -- -- endResetModel(); --} -- --QVariant EntryURLModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return {}; -- } -- -- const auto key = keyByIndex(index); -- if (key.isEmpty()) { -- return {}; -- } -- -- const auto value = m_entryAttributes->value(key); -- const auto urlValid = Tools::checkUrlValid(value); -- -- if (role == Qt::BackgroundRole && !urlValid) { -- StateColorPalette statePalette; -- return statePalette.color(StateColorPalette::ColorRole::Error); -- } else if (role == Qt::DecorationRole && !urlValid) { -- return m_errorIcon; -- } else if (role == Qt::DisplayRole || role == Qt::EditRole) { -- return value; -- } else if (role == Qt::ToolTipRole && !urlValid) { -- return tr("Invalid URL"); -- } -- -- return {}; --} -- --bool EntryURLModel::setData(const QModelIndex& index, const QVariant& value, int role) --{ -- if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { -- return false; -- } -- -- const int row = index.row(); -- const QString key = m_urls.at(row).first; -- const QString oldValue = m_urls.at(row).second; -- -- if (EntryAttributes::isDefaultAttribute(key) || m_entryAttributes->containsValue(value.toString())) { -- return false; -- } -- -- m_entryAttributes->set(key, value.toString()); -- -- emit dataChanged(this->index(row, 0), this->index(row, columnCount() - 1)); -- return true; --} -- --QModelIndex EntryURLModel::indexByKey(const QString& key) const --{ -- int row = -1; -- for (int i = 0; i < m_urls.size(); ++i) { -- if (m_urls.at(i).first == key) { -- row = i; -- break; -- } -- } -- -- if (row == -1) { -- return QModelIndex(); -- } else { -- return index(row, 0); -- } --} -- --QString EntryURLModel::keyByIndex(const QModelIndex& index) const --{ -- if (!index.isValid()) { -- return QString(); -- } else { -- return m_urls.at(index.row()).first; -- } --} -- --void EntryURLModel::updateAttributes() --{ -- clear(); -- m_urls.clear(); -- -- const QList attributesKeyList = m_entryAttributes->keys(); -- for (const QString& key : attributesKeyList) { -- if (!EntryAttributes::isDefaultAttribute(key) && key.contains("KP2A_URL")) { -- const auto value = m_entryAttributes->value(key); -- m_urls.append(qMakePair(key, value)); -- -- auto* item = new QStandardItem(value); -- if (m_entryAttributes->isProtected(key)) { -- item->setFlags(item->flags() & ~Qt::ItemIsEnabled); -- } -- appendRow(item); -- } -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,62 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSXC_ENTRYURLMODEL_H --#define KEEPASSXC_ENTRYURLMODEL_H -- --#include --#include -- --class EntryAttributes; -- --class URLModelIconDelegate : public QStyledItemDelegate --{ --public: -- using QStyledItemDelegate::QStyledItemDelegate; -- --protected: -- void initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const override -- { -- QStyledItemDelegate::initStyleOption(option, index); -- option->decorationPosition = QStyleOptionViewItem::Right; -- } --}; -- --class EntryURLModel : public QStandardItemModel --{ -- Q_OBJECT -- --public: -- explicit EntryURLModel(QObject* parent = nullptr); -- void setEntryAttributes(EntryAttributes* entryAttributes); -- void insertRow(const QString& key, const QString& value); -- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; -- QVariant data(const QModelIndex& index, int role) const override; -- QModelIndex indexByKey(const QString& key) const; -- QString keyByIndex(const QModelIndex& index) const; -- --private slots: -- void updateAttributes(); -- --private: -- QList> m_urls; -- EntryAttributes* m_entryAttributes; -- QIcon m_errorIcon; --}; -- --#endif // KEEPASSXC_ENTRYURLMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryView.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryView.cpp ---- keepassxc-2.6.4-orig/src/gui/entry/EntryView.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryView.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,476 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryView.h" -- --#include --#include --#include --#include --#include -- --#include "gui/SortFilterHideProxyModel.h" -- --EntryView::EntryView(QWidget* parent) -- : QTreeView(parent) -- , m_model(new EntryModel(this)) -- , m_sortModel(new SortFilterHideProxyModel(this)) -- , m_lastIndex(-1) -- , m_lastOrder(Qt::AscendingOrder) -- , m_headerMenu(new QMenu(this)) --{ -- m_sortModel->setSourceModel(m_model); -- m_sortModel->setDynamicSortFilter(true); -- m_sortModel->setSortLocaleAware(true); -- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); -- // Use Qt::UserRole as sort role, see EntryModel::data() -- m_sortModel->setSortRole(Qt::UserRole); -- QTreeView::setModel(m_sortModel); -- -- setUniformRowHeights(true); -- setRootIsDecorated(false); -- setAlternatingRowColors(true); -- setDragEnabled(true); -- setSortingEnabled(true); -- setSelectionMode(QAbstractItemView::ExtendedSelection); -- -- // QAbstractItemView::startDrag() uses this property as the default drag action -- setDefaultDropAction(Qt::MoveAction); -- -- // clang-format off -- connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); -- connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(emitEntrySelectionChanged())); -- // clang-format on -- -- new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut); -- -- resetViewToDefaults(); -- -- // Actions to toggle column visibility, each carrying the corresponding -- // column index as data -- m_columnActions = new QActionGroup(this); -- m_columnActions->setExclusive(false); -- for (int visualIndex = 1; visualIndex < header()->count(); ++visualIndex) { -- int logicalIndex = header()->logicalIndex(visualIndex); -- QString caption = m_model->headerData(logicalIndex, Qt::Horizontal, Qt::DisplayRole).toString(); -- if (logicalIndex == EntryModel::Paperclip) { -- caption = tr("Has attachments", "Entry attachment icon toggle"); -- } else if (logicalIndex == EntryModel::Totp) { -- caption = tr("Has TOTP", "Entry TOTP icon toggle"); -- } -- -- QAction* action = m_headerMenu->addAction(caption); -- action->setCheckable(true); -- action->setData(logicalIndex); -- m_columnActions->addAction(action); -- } -- connect(m_columnActions, SIGNAL(triggered(QAction*)), this, SLOT(toggleColumnVisibility(QAction*))); -- connect(header(), &QHeaderView::sortIndicatorChanged, [this](int index, Qt::SortOrder order) { -- Q_UNUSED(order) -- header()->setSortIndicatorShown(index != EntryModel::Paperclip && index != EntryModel::Totp); -- }); -- -- m_headerMenu->addSeparator(); -- m_headerMenu->addAction(tr("Fit to window"), this, SLOT(fitColumnsToWindow())); -- m_headerMenu->addAction(tr("Fit to contents"), this, SLOT(fitColumnsToContents())); -- m_headerMenu->addSeparator(); -- m_headerMenu->addAction(tr("Reset to defaults"), this, SLOT(resetViewToDefaults())); -- -- header()->setMinimumSectionSize(24); -- header()->setDefaultSectionSize(100); -- header()->setStretchLastSection(false); -- header()->setContextMenuPolicy(Qt::CustomContextMenu); -- -- connect(header(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(showHeaderMenu(QPoint))); -- connect(header(), SIGNAL(sectionCountChanged(int, int)), SIGNAL(viewStateChanged())); -- connect(header(), SIGNAL(sectionMoved(int, int, int)), SIGNAL(viewStateChanged())); -- connect(header(), SIGNAL(sectionResized(int, int, int)), SIGNAL(viewStateChanged())); -- connect(header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), SLOT(sortIndicatorChanged(int, Qt::SortOrder))); -- -- // clang-format off --} -- --void EntryView::contextMenuShortcutPressed() --{ -- auto index = currentIndex(); -- if (hasFocus() && index.isValid()) { -- emit customContextMenuRequested(visualRect(index).bottomLeft()); -- } --} -- --void EntryView::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order) --{ -- int oldIndex = m_lastIndex; -- m_lastIndex = logicalIndex; -- Qt::SortOrder oldOrder = m_lastOrder; -- m_lastOrder = order; -- -- if (oldIndex == logicalIndex // same index -- && oldOrder == Qt::DescendingOrder // old order is descending -- && order == Qt::AscendingOrder) // new order is ascending -- { -- // a change from descending to ascending on the same column occurred -- // this sets the header into no sort order -- header()->setSortIndicator(-1, Qt::AscendingOrder); -- // do not emit any signals, header()->setSortIndicator recursively calls this -- // function and the signals are emitted in the else part -- } else { -- // call emitEntrySelectionChanged even though the selection did not really change -- // this triggers the evaluation of the menu activation and anyway, the position -- // of the selected entry within the widget did change -- emitEntrySelectionChanged(); -- emit viewStateChanged(); -- } --} -- --void EntryView::keyPressEvent(QKeyEvent* event) --{ -- if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { -- emitEntryActivated(currentIndex()); --#ifdef Q_OS_MACOS -- // Pressing return does not emit the QTreeView::activated signal on mac os -- emit activated(currentIndex()); --#endif -- } -- -- int last = m_model->rowCount() - 1; -- if (last > 0) { -- QAccessibleEvent accessibleEvent(this, QAccessible::PageChanged); -- if (event->key() == Qt::Key_Up && currentIndex().row() == 0) { -- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(last, 0)); -- setCurrentEntry(m_model->entryFromIndex(index)); -- QAccessible::updateAccessibility(&accessibleEvent); -- return; -- } -- -- if (event->key() == Qt::Key_Down && currentIndex().row() == last) { -- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); -- setCurrentEntry(m_model->entryFromIndex(index)); -- QAccessible::updateAccessibility(&accessibleEvent); -- return; -- } -- } -- -- QTreeView::keyPressEvent(event); --} -- --void EntryView::focusInEvent(QFocusEvent* event) --{ -- emit entrySelectionChanged(currentEntry()); -- QTreeView::focusInEvent(event); --} -- --void EntryView::focusOutEvent(QFocusEvent* event) --{ -- emit entrySelectionChanged(nullptr); -- QTreeView::focusOutEvent(event); --} -- --void EntryView::displayGroup(Group* group) --{ -- m_model->setGroup(group); -- header()->hideSection(EntryModel::ParentGroup); -- setFirstEntryActive(); -- m_inSearchMode = false; --} -- --void EntryView::displaySearch(const QList& entries) --{ -- m_model->setEntries(entries); -- header()->showSection(EntryModel::ParentGroup); -- -- // Reset sort column to 'Group', overrides DatabaseWidgetStateSync -- m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder); -- sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder); -- -- setFirstEntryActive(); -- m_inSearchMode = true; --} -- --void EntryView::setFirstEntryActive() --{ -- if (m_model->rowCount() > 0) { -- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); -- setCurrentEntry(m_model->entryFromIndex(index)); -- } else { -- emit entrySelectionChanged(currentEntry()); -- } --} -- --bool EntryView::inSearchMode() --{ -- return m_inSearchMode; --} -- --bool EntryView::isSorted() --{ -- return header()->sortIndicatorSection() != -1; --} -- --void EntryView::emitEntryActivated(const QModelIndex& index) --{ -- Entry* entry = entryFromIndex(index); -- emit entryActivated(entry, static_cast(m_sortModel->mapToSource(index).column())); --} -- --void EntryView::emitEntrySelectionChanged() --{ -- emit entrySelectionChanged(currentEntry()); --} -- --void EntryView::setModel(QAbstractItemModel* model) --{ -- Q_UNUSED(model); -- Q_ASSERT(false); --} -- --Entry* EntryView::currentEntry() --{ -- QModelIndexList list = selectionModel()->selectedRows(); -- if (list.size() == 1) { -- return m_model->entryFromIndex(m_sortModel->mapToSource(list.first())); -- } else { -- return nullptr; -- } --} -- --int EntryView::numberOfSelectedEntries() --{ -- return selectionModel()->selectedRows().size(); --} -- --void EntryView::setCurrentEntry(Entry* entry) --{ -- selectionModel()->setCurrentIndex(m_sortModel->mapFromSource(m_model->indexFromEntry(entry)), -- QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); --} -- --Entry* EntryView::entryFromIndex(const QModelIndex& index) --{ -- if (index.isValid()) { -- return m_model->entryFromIndex(m_sortModel->mapToSource(index)); -- } else { -- return nullptr; -- } --} -- --int EntryView::currentEntryIndex() --{ -- QModelIndexList list = selectionModel()->selectedRows(); -- if (list.size() == 1) { -- auto index = m_sortModel->mapToSource(list.first()); -- return index.row(); -- } else { -- return -1; -- } --} -- --/** -- * Get current view state -- */ --QByteArray EntryView::viewState() const --{ -- return header()->saveState(); --} -- --/** -- * Set view state -- */ --bool EntryView::setViewState(const QByteArray& state) --{ -- // Reset to unsorted first (https://bugreports.qt.io/browse/QTBUG-86694) -- header()->setSortIndicator(-1, Qt::AscendingOrder); -- bool status = header()->restoreState(state); -- resetFixedColumns(); -- m_columnsNeedRelayout = state.isEmpty(); -- return status; --} -- --/** -- * Sync checkable menu actions to current state and display header context -- * menu at specified position -- */ --void EntryView::showHeaderMenu(const QPoint& position) --{ -- const QList actions = m_columnActions->actions(); -- for (auto& action : actions) { -- Q_ASSERT(static_cast(action->data().type()) == QMetaType::Int); -- if (static_cast(action->data().type()) != QMetaType::Int) { -- continue; -- } -- int columnIndex = action->data().toInt(); -- action->setChecked(!isColumnHidden(columnIndex)); -- } -- -- m_headerMenu->popup(mapToGlobal(position)); --} -- --/** -- * Toggle visibility of column referenced by triggering action -- */ --void EntryView::toggleColumnVisibility(QAction* action) --{ -- // Verify action carries a column index as data. Since QVariant.toInt() -- // below will accept anything that's interpretable as int, perform a type -- // check here to make sure data actually IS int -- Q_ASSERT(static_cast(action->data().type()) == QMetaType::Int); -- if (static_cast(action->data().type()) != QMetaType::Int) { -- return; -- } -- -- // Toggle column visibility. Visible columns will only be hidden if at -- // least one visible column remains, as the table header will disappear -- // entirely when all columns are hidden -- int columnIndex = action->data().toInt(); -- if (action->isChecked()) { -- header()->showSection(columnIndex); -- if (header()->sectionSize(columnIndex) == 0) { -- header()->resizeSection(columnIndex, header()->defaultSectionSize()); -- } -- resetFixedColumns(); -- return; -- } -- if ((header()->count() - header()->hiddenSectionCount()) > 1) { -- header()->hideSection(columnIndex); -- return; -- } -- action->setChecked(true); --} -- --/** -- * Resize columns to fit all visible columns within the available space -- * -- * NOTE: -- * If EntryView::resizeEvent() is overridden at some point in the future, -- * its implementation MUST call the corresponding parent method using -- * 'QTreeView::resizeEvent(event)'. Without this, fitting to window will -- * be broken and/or work unreliably (stumbled upon during testing) -- * -- * NOTE: -- * Testing showed that it is absolutely necessary to emit signal 'viewState -- * Changed' here. Without this, an incomplete view state might get saved by -- * 'DatabaseWidgetStateSync' (e.g. only some columns resized) -- */ --void EntryView::fitColumnsToWindow() --{ -- header()->setSectionResizeMode(QHeaderView::Stretch); -- resetFixedColumns(); -- QCoreApplication::processEvents(); -- header()->setSectionResizeMode(QHeaderView::Interactive); -- resetFixedColumns(); -- emit viewStateChanged(); --} -- --/** -- * Resize columns to fit current table contents, i.e. make all contents -- * entirely visible -- */ --void EntryView::fitColumnsToContents() --{ -- header()->setSectionResizeMode(QHeaderView::ResizeToContents); -- resetFixedColumns(); -- QCoreApplication::processEvents(); -- header()->setSectionResizeMode(QHeaderView::Interactive); -- resetFixedColumns(); -- emit viewStateChanged(); --} -- --/** -- * Mark icon-only columns as fixed and resize them to their minimum section size. -- */ --void EntryView::resetFixedColumns() --{ -- if (!isColumnHidden(EntryModel::Paperclip)) { -- header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed); -- header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize()); -- } -- -- if (!isColumnHidden(EntryModel::Totp)) { -- header()->setSectionResizeMode(EntryModel::Totp, QHeaderView::Fixed); -- header()->resizeSection(EntryModel::Totp, header()->minimumSectionSize()); -- } --} -- --/** -- * Reset item view to defaults. -- */ --void EntryView::resetViewToDefaults() --{ -- // Reduce number of columns that are shown by default -- if (m_inSearchMode) { -- header()->showSection(EntryModel::ParentGroup); -- } else { -- header()->hideSection(EntryModel::ParentGroup); -- } -- header()->showSection(EntryModel::Title); -- header()->showSection(EntryModel::Username); -- header()->showSection(EntryModel::Url); -- header()->showSection(EntryModel::Notes); -- header()->showSection(EntryModel::Modified); -- header()->showSection(EntryModel::Paperclip); -- header()->showSection(EntryModel::Totp); -- -- header()->hideSection(EntryModel::Password); -- header()->hideSection(EntryModel::Expires); -- header()->hideSection(EntryModel::Created); -- header()->hideSection(EntryModel::Accessed); -- header()->hideSection(EntryModel::Attachments); -- header()->hideSection(EntryModel::Size); -- -- // Reset column order to logical indices -- for (int i = 0; i < header()->count(); ++i) { -- header()->moveSection(header()->visualIndex(i), i); -- } -- -- // Reorder some columns -- header()->moveSection(header()->visualIndex(EntryModel::Paperclip), 1); -- header()->moveSection(header()->visualIndex(EntryModel::Totp), 2); -- -- // Sort by title or group (depending on the mode) -- m_sortModel->sort(EntryModel::Title, Qt::AscendingOrder); -- sortByColumn(EntryModel::Title, Qt::AscendingOrder); -- -- if (m_inSearchMode) { -- m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder); -- sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder); -- } -- -- // The following call only relayouts reliably if the widget has been shown -- // already, so only do it if the widget is visible and let showEvent() handle -- // the initial default layout. -- if (isVisible()) { -- fitColumnsToWindow(); -- } --} -- --void EntryView::showEvent(QShowEvent* event) --{ -- QTreeView::showEvent(event); -- -- // Check if header columns need to be resized to sensible defaults. -- // This is only needed if no previous view state has been loaded. -- if (m_columnsNeedRelayout) { -- fitColumnsToWindow(); -- m_columnsNeedRelayout = false; -- } --} -- --bool EntryView::isColumnHidden(int logicalIndex) --{ -- return header()->isSectionHidden(logicalIndex) || header()->sectionSize(logicalIndex) == 0; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryView.h keepassxc-2.6.4-patched/src/gui/entry/EntryView.h ---- keepassxc-2.6.4-orig/src/gui/entry/EntryView.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/entry/EntryView.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,90 +0,0 @@ --/* -- * Copyright (C) 2018 KeePassXC Team -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ENTRYVIEW_H --#define KEEPASSX_ENTRYVIEW_H -- --#include -- --#include "gui/entry/EntryModel.h" -- --class Entry; --class EntryModel; --class Group; --class SortFilterHideProxyModel; --class QActionGroup; -- --class EntryView : public QTreeView --{ -- Q_OBJECT -- --public: -- explicit EntryView(QWidget* parent = nullptr); -- void setModel(QAbstractItemModel* model) override; -- Entry* currentEntry(); -- void setCurrentEntry(Entry* entry); -- Entry* entryFromIndex(const QModelIndex& index); -- int currentEntryIndex(); -- bool inSearchMode(); -- bool isSorted(); -- int numberOfSelectedEntries(); -- void setFirstEntryActive(); -- QByteArray viewState() const; -- bool setViewState(const QByteArray& state); -- -- void displayGroup(Group* group); -- void displaySearch(const QList& entries); -- --signals: -- void entryActivated(Entry* entry, EntryModel::ModelColumn column); -- void entrySelectionChanged(Entry* entry); -- void viewStateChanged(); -- --protected: -- void keyPressEvent(QKeyEvent* event) override; -- void focusInEvent(QFocusEvent* event) override; -- void focusOutEvent(QFocusEvent* event) override; -- void showEvent(QShowEvent* event) override; -- --private slots: -- void emitEntryActivated(const QModelIndex& index); -- void emitEntrySelectionChanged(); -- void showHeaderMenu(const QPoint& position); -- void toggleColumnVisibility(QAction* action); -- void fitColumnsToWindow(); -- void fitColumnsToContents(); -- void resetViewToDefaults(); -- void contextMenuShortcutPressed(); -- void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); -- --private: -- void resetFixedColumns(); -- bool isColumnHidden(int logicalIndex); -- -- EntryModel* const m_model; -- SortFilterHideProxyModel* const m_sortModel; -- int m_lastIndex; -- Qt::SortOrder m_lastOrder; -- bool m_inSearchMode = false; -- bool m_columnsNeedRelayout = true; -- -- QMenu* m_headerMenu; -- QActionGroup* m_columnActions; --}; -- --#endif // KEEPASSX_ENTRYVIEW_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.cpp keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,421 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EntryPreviewWidget.h" --#include "Font.h" --#include "ui_EntryPreviewWidget.h" -- --#include --#include -- --#include "core/Config.h" --#include "core/Resources.h" --#include "entry/EntryAttachmentsModel.h" --#include "gui/Clipboard.h" --#if defined(WITH_XC_KEESHARE) --#include "keeshare/KeeShare.h" --#endif -- --namespace --{ -- constexpr int GeneralTabIndex = 0; --} -- --EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) -- : QWidget(parent) -- , m_ui(new Ui::EntryPreviewWidget()) -- , m_locked(false) -- , m_currentEntry(nullptr) -- , m_currentGroup(nullptr) -- , m_selectedTabEntry(0) -- , m_selectedTabGroup(0) --{ -- m_ui->setupUi(this); -- -- // Entry -- m_ui->entryTotpButton->setIcon(resources()->icon("chronometer")); -- m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close")); -- m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", true)); -- m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", true)); -- m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", true)); -- -- m_ui->entryAttachmentsWidget->setReadOnly(true); -- m_ui->entryAttachmentsWidget->setButtonsVisible(false); -- -- // Match background of read-only text edit fields with the window -- m_ui->entryPasswordLabel->setBackgroundRole(QPalette::Window); -- m_ui->entryUsernameLabel->setBackgroundRole(QPalette::Window); -- m_ui->entryNotesTextEdit->setBackgroundRole(QPalette::Window); -- m_ui->groupNotesTextEdit->setBackgroundRole(QPalette::Window); -- // Align notes text with label text -- m_ui->entryNotesTextEdit->document()->setDocumentMargin(0); -- m_ui->groupNotesTextEdit->document()->setDocumentMargin(0); -- -- connect(m_ui->entryUrlLabel, SIGNAL(linkActivated(QString)), SLOT(openEntryUrl())); -- -- connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpLabel, SLOT(setVisible(bool))); -- connect(m_ui->entryCloseButton, SIGNAL(clicked()), SLOT(hide())); -- connect(m_ui->togglePasswordButton, SIGNAL(clicked(bool)), SLOT(setPasswordVisible(bool))); -- connect(m_ui->toggleEntryNotesButton, SIGNAL(clicked(bool)), SLOT(setEntryNotesVisible(bool))); -- connect(m_ui->toggleGroupNotesButton, SIGNAL(clicked(bool)), SLOT(setGroupNotesVisible(bool))); -- connect(m_ui->entryTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); -- connect(&m_totpTimer, SIGNAL(timeout()), SLOT(updateTotpLabel())); -- -- connect(config(), &Config::changed, this, [this](Config::ConfigKey key) { -- if (key == Config::GUI_HidePreviewPanel) { -- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); -- } -- }); -- -- // Group -- m_ui->groupCloseButton->setIcon(resources()->icon("dialog-close")); -- connect(m_ui->groupCloseButton, SIGNAL(clicked()), SLOT(hide())); -- connect(m_ui->groupTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); -- -- setFocusProxy(m_ui->entryTabWidget); -- --#if !defined(WITH_XC_KEESHARE) -- removeTab(m_ui->groupTabWidget, m_ui->groupShareTab); --#endif --} -- --EntryPreviewWidget::~EntryPreviewWidget() --{ --} -- --void EntryPreviewWidget::setEntry(Entry* selectedEntry) --{ -- if (!selectedEntry) { -- hide(); -- return; -- } -- -- m_currentEntry = selectedEntry; -- -- updateEntryHeaderLine(); -- updateEntryTotp(); -- updateEntryGeneralTab(); -- updateEntryAdvancedTab(); -- updateEntryAutotypeTab(); -- -- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); -- -- m_ui->stackedWidget->setCurrentWidget(m_ui->pageEntry); -- const int tabIndex = m_ui->entryTabWidget->isTabEnabled(m_selectedTabEntry) ? m_selectedTabEntry : GeneralTabIndex; -- Q_ASSERT(m_ui->entryTabWidget->isTabEnabled(GeneralTabIndex)); -- m_ui->entryTabWidget->setCurrentIndex(tabIndex); --} -- --void EntryPreviewWidget::setGroup(Group* selectedGroup) --{ -- if (!selectedGroup) { -- hide(); -- return; -- } -- -- m_currentGroup = selectedGroup; -- updateGroupHeaderLine(); -- updateGroupGeneralTab(); -- --#if defined(WITH_XC_KEESHARE) -- updateGroupSharingTab(); --#endif -- -- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); -- -- m_ui->stackedWidget->setCurrentWidget(m_ui->pageGroup); -- const int tabIndex = m_ui->groupTabWidget->isTabEnabled(m_selectedTabGroup) ? m_selectedTabGroup : GeneralTabIndex; -- Q_ASSERT(m_ui->groupTabWidget->isTabEnabled(GeneralTabIndex)); -- m_ui->groupTabWidget->setCurrentIndex(tabIndex); --} -- --void EntryPreviewWidget::setDatabaseMode(DatabaseWidget::Mode mode) --{ -- m_locked = mode == DatabaseWidget::Mode::LockedMode; -- if (m_locked) { -- return; -- } -- -- if (mode == DatabaseWidget::Mode::ViewMode) { -- if (m_currentGroup && m_ui->stackedWidget->currentWidget() == m_ui->pageGroup) { -- setGroup(m_currentGroup); -- } else if (m_currentEntry) { -- setEntry(m_currentEntry); -- } else { -- hide(); -- } -- } --} -- --void EntryPreviewWidget::updateEntryHeaderLine() --{ -- Q_ASSERT(m_currentEntry); -- const QString title = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->title()); -- m_ui->entryTitleLabel->setRawText(hierarchy(m_currentEntry->group(), title)); -- m_ui->entryIcon->setPixmap(m_currentEntry->iconPixmap(IconSize::Large)); --} -- --void EntryPreviewWidget::updateEntryTotp() --{ -- Q_ASSERT(m_currentEntry); -- const bool hasTotp = m_currentEntry->hasTotp(); -- m_ui->entryTotpButton->setVisible(hasTotp); -- m_ui->entryTotpLabel->hide(); -- m_ui->entryTotpButton->setChecked(false); -- -- if (hasTotp) { -- m_totpTimer.start(1000); -- updateTotpLabel(); -- } else { -- m_ui->entryTotpLabel->clear(); -- m_totpTimer.stop(); -- } --} -- --void EntryPreviewWidget::setPasswordVisible(bool state) --{ -- const QString password = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->password()); -- if (state) { -- m_ui->entryPasswordLabel->setText(password); -- m_ui->entryPasswordLabel->setCursorPosition(0); -- m_ui->entryPasswordLabel->setFont(Font::fixedFont()); -- } else if (password.isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { -- m_ui->entryPasswordLabel->setText(""); -- } else { -- m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6)); -- } -- m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", state)); --} -- --void EntryPreviewWidget::setEntryNotesVisible(bool state) --{ -- setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state); -- m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", state)); --} -- --void EntryPreviewWidget::setGroupNotesVisible(bool state) --{ -- setNotesVisible(m_ui->groupNotesTextEdit, m_currentGroup->notes(), state); -- m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", state)); --} -- --void EntryPreviewWidget::setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state) --{ -- if (state) { -- notesWidget->setPlainText(notes); -- notesWidget->moveCursor(QTextCursor::Start); -- notesWidget->ensureCursorVisible(); -- } else { -- if (!notes.isEmpty()) { -- notesWidget->setPlainText(QString("\u25cf").repeated(6)); -- } -- } --} -- --void EntryPreviewWidget::updateEntryGeneralTab() --{ -- Q_ASSERT(m_currentEntry); -- m_ui->entryUsernameLabel->setText(m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->username())); -- m_ui->entryUsernameLabel->setCursorPosition(0); -- -- if (config()->get(Config::Security_HidePasswordPreviewPanel).toBool()) { -- // Hide password -- setPasswordVisible(false); -- // Show the password toggle button if there are dots in the label -- m_ui->togglePasswordButton->setVisible(!m_ui->entryPasswordLabel->text().isEmpty()); -- m_ui->togglePasswordButton->setChecked(false); -- } else { -- // Show password -- setPasswordVisible(true); -- m_ui->togglePasswordButton->setVisible(false); -- } -- -- if (config()->get(Config::Security_HideNotes).toBool()) { -- setEntryNotesVisible(false); -- m_ui->toggleEntryNotesButton->setVisible(!m_ui->entryNotesTextEdit->toPlainText().isEmpty()); -- m_ui->toggleEntryNotesButton->setChecked(false); -- } else { -- setEntryNotesVisible(true); -- m_ui->toggleEntryNotesButton->setVisible(false); -- } -- -- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { -- m_ui->entryNotesTextEdit->setFont(Font::fixedFont()); -- } else { -- m_ui->entryNotesTextEdit->setFont(Font::defaultFont()); -- } -- -- m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl()); -- const QString url = m_currentEntry->url(); -- if (!url.isEmpty()) { -- // URL is well formed and can be opened in a browser -- m_ui->entryUrlLabel->setUrl(m_currentEntry->resolveMultiplePlaceholders(url)); -- m_ui->entryUrlLabel->setCursor(Qt::PointingHandCursor); -- m_ui->entryUrlLabel->setOpenExternalLinks(false); -- } else { -- m_ui->entryUrlLabel->setUrl({}); -- m_ui->entryUrlLabel->setCursor(Qt::ArrowCursor); -- } -- -- const TimeInfo entryTime = m_currentEntry->timeInfo(); -- const QString expires = -- entryTime.expires() ? entryTime.expiryTime().toLocalTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); -- m_ui->entryExpirationLabel->setText(expires); --} -- --void EntryPreviewWidget::updateEntryAdvancedTab() --{ -- Q_ASSERT(m_currentEntry); -- m_ui->entryAttributesEdit->clear(); -- const EntryAttributes* attributes = m_currentEntry->attributes(); -- const QStringList customAttributes = attributes->customKeys(); -- const bool hasAttributes = !customAttributes.isEmpty(); -- const bool hasAttachments = !m_currentEntry->attachments()->isEmpty(); -- -- setTabEnabled(m_ui->entryTabWidget, m_ui->entryAdvancedTab, hasAttributes || hasAttachments); -- if (hasAttributes) { -- QString attributesText(""); -- for (const QString& key : customAttributes) { -- QString value; -- if (m_currentEntry->attributes()->isProtected(key)) { -- value = "" + tr("[PROTECTED]") + ""; -- } else { -- value = m_currentEntry->attributes()->value(key).toHtmlEscaped(); -- value.replace('\n', QLatin1String("
")); -- } -- attributesText.append(tr("", "attributes line").arg(key, value)); -- } -- attributesText.append("
%1:%2
"); -- m_ui->entryAttributesEdit->setText(attributesText); -- } -- -- m_ui->entryAttachmentsWidget->setEntryAttachments(m_currentEntry->attachments()); --} -- --void EntryPreviewWidget::updateEntryAutotypeTab() --{ -- Q_ASSERT(m_currentEntry); -- -- m_ui->entrySequenceLabel->setText(m_currentEntry->effectiveAutoTypeSequence()); -- m_ui->entryAutotypeTree->clear(); -- QList items; -- const AutoTypeAssociations* autotypeAssociations = m_currentEntry->autoTypeAssociations(); -- const auto associations = autotypeAssociations->getAll(); -- for (const auto& assoc : associations) { -- const QString sequence = -- assoc.sequence.isEmpty() ? m_currentEntry->effectiveAutoTypeSequence() : assoc.sequence; -- items.append(new QTreeWidgetItem(m_ui->entryAutotypeTree, {assoc.window, sequence})); -- } -- -- m_ui->entryAutotypeTree->addTopLevelItems(items); -- setTabEnabled(m_ui->entryTabWidget, m_ui->entryAutotypeTab, m_currentEntry->autoTypeEnabled()); --} -- --void EntryPreviewWidget::updateGroupHeaderLine() --{ -- Q_ASSERT(m_currentGroup); -- m_ui->groupTitleLabel->setRawText(hierarchy(m_currentGroup, {})); -- m_ui->groupIcon->setPixmap(m_currentGroup->iconPixmap(IconSize::Large)); --} -- --void EntryPreviewWidget::updateGroupGeneralTab() --{ -- Q_ASSERT(m_currentGroup); -- const QString searchingText = m_currentGroup->resolveSearchingEnabled() ? tr("Enabled") : tr("Disabled"); -- m_ui->groupSearchingLabel->setText(searchingText); -- -- const QString autotypeText = m_currentGroup->resolveAutoTypeEnabled() ? tr("Enabled") : tr("Disabled"); -- m_ui->groupAutotypeLabel->setText(autotypeText); -- -- const TimeInfo groupTime = m_currentGroup->timeInfo(); -- const QString expiresText = -- groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); -- m_ui->groupExpirationLabel->setText(expiresText); -- -- if (config()->get(Config::Security_HideNotes).toBool()) { -- setGroupNotesVisible(false); -- m_ui->toggleGroupNotesButton->setVisible(!m_ui->groupNotesTextEdit->toPlainText().isEmpty()); -- m_ui->toggleGroupNotesButton->setChecked(false); -- } else { -- setGroupNotesVisible(true); -- m_ui->toggleGroupNotesButton->setVisible(false); -- } -- -- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { -- m_ui->groupNotesTextEdit->setFont(Font::fixedFont()); -- } else { -- m_ui->groupNotesTextEdit->setFont(Font::defaultFont()); -- } --} -- --#if defined(WITH_XC_KEESHARE) --void EntryPreviewWidget::updateGroupSharingTab() --{ -- Q_ASSERT(m_currentGroup); -- setTabEnabled(m_ui->groupTabWidget, m_ui->groupShareTab, KeeShare::isShared(m_currentGroup)); -- auto reference = KeeShare::referenceOf(m_currentGroup); -- m_ui->groupShareTypeLabel->setText(KeeShare::referenceTypeLabel(reference)); -- m_ui->groupSharePathLabel->setText(reference.path); --} --#endif -- --void EntryPreviewWidget::updateTotpLabel() --{ -- if (!m_locked && m_currentEntry && m_currentEntry->hasTotp()) { -- const QString totpCode = m_currentEntry->totp(); -- const QString firstHalf = totpCode.left(totpCode.size() / 2); -- const QString secondHalf = totpCode.mid(totpCode.size() / 2); -- m_ui->entryTotpLabel->setText(firstHalf + " " + secondHalf); -- } else { -- m_ui->entryTotpLabel->clear(); -- m_totpTimer.stop(); -- } --} -- --void EntryPreviewWidget::updateTabIndexes() --{ -- m_selectedTabEntry = m_ui->entryTabWidget->currentIndex(); -- m_selectedTabGroup = m_ui->groupTabWidget->currentIndex(); --} -- --void EntryPreviewWidget::openEntryUrl() --{ -- if (m_currentEntry) { -- emit entryUrlActivated(m_currentEntry); -- } --} -- --void EntryPreviewWidget::removeTab(QTabWidget* tabWidget, QWidget* widget) --{ -- const int tabIndex = tabWidget->indexOf(widget); -- Q_ASSERT(tabIndex != -1); -- tabWidget->removeTab(tabIndex); --} -- --void EntryPreviewWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled) --{ -- const int tabIndex = tabWidget->indexOf(widget); -- Q_ASSERT(tabIndex != -1); -- tabWidget->setTabEnabled(tabIndex, enabled); --} -- --QString EntryPreviewWidget::hierarchy(const Group* group, const QString& title) --{ -- QString groupList = QString("%1").arg(group->hierarchy().join(" / ")); -- return title.isEmpty() ? groupList : QStringLiteral("%1 / %2").arg(groupList, title); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.h keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.h ---- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,86 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_DETAILSWIDGET_H --#define KEEPASSX_DETAILSWIDGET_H -- --#include "config-keepassx.h" --#include "gui/DatabaseWidget.h" -- --#include -- --namespace Ui --{ -- class EntryPreviewWidget; --} -- --class QTextEdit; -- --class EntryPreviewWidget : public QWidget --{ -- Q_OBJECT -- --public: -- explicit EntryPreviewWidget(QWidget* parent = nullptr); -- ~EntryPreviewWidget() override; -- --public slots: -- void setEntry(Entry* selectedEntry); -- void setGroup(Group* selectedGroup); -- void setDatabaseMode(DatabaseWidget::Mode mode); -- --signals: -- void errorOccurred(const QString& error); -- void entryUrlActivated(Entry* entry); -- --private slots: -- void updateEntryHeaderLine(); -- void updateEntryTotp(); -- void updateEntryGeneralTab(); -- void updateEntryAdvancedTab(); -- void updateEntryAutotypeTab(); -- void setPasswordVisible(bool state); -- void setEntryNotesVisible(bool state); -- void setGroupNotesVisible(bool state); -- void setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state); -- -- void updateGroupHeaderLine(); -- void updateGroupGeneralTab(); --#if defined(WITH_XC_KEESHARE) -- void updateGroupSharingTab(); --#endif -- -- void updateTotpLabel(); -- void updateTabIndexes(); -- void openEntryUrl(); -- --private: -- void removeTab(QTabWidget* tabWidget, QWidget* widget); -- void setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled); -- -- static QString hierarchy(const Group* group, const QString& title); -- -- const QScopedPointer m_ui; -- bool m_locked; -- QPointer m_currentEntry; -- QPointer m_currentGroup; -- QTimer m_totpTimer; -- quint8 m_selectedTabEntry; -- quint8 m_selectedTabGroup; --}; -- --#endif // KEEPASSX_DETAILSWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.ui keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.ui ---- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1233 +0,0 @@ -- -- -- EntryPreviewWidget -- -- -- -- 0 -- 0 -- 566 -- 247 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- 0 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- QLayout::SetDefaultConstraint -- -- -- 5 -- -- -- 3 -- -- -- 3 -- -- -- -- -- 12 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 16 -- 0 -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 12 -- -- -- -- Qt::AutoText -- -- -- -- -- -- -- -- -- -- 10 -- 75 -- true -- -- -- -- 1234567 -- -- -- -- -- -- -- Display current TOTP value -- -- -- -- -- -- true -- -- -- -- -- -- -- Close -- -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- false -- -- -- false -- -- -- false -- -- -- -- General -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Password -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 20 -- -- -- -- -- -- -- -- 6 -- -- -- 4 -- -- -- -- -- -- -- -- true -- -- -- -- -- -- -- -- 150 -- 0 -- -- -- -- Qt::ClickFocus -- -- -- password -- -- -- false -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 10 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 150 -- 0 -- -- -- -- PointingHandCursor -- -- -- Qt::ClickFocus -- -- -- https://example.com -- -- -- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Notes -- -- -- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Expiration -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- expired -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 20 -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 30 -- -- -- -- -- -- -- -- 6 -- -- -- 4 -- -- -- -- -- -- -- -- true -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- 0 -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Qt::LeftToRight -- -- -- Username -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 10 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- URL -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 150 -- 0 -- -- -- -- Qt::ClickFocus -- -- -- username -- -- -- false -- -- -- 8 -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- -- -- -- Advanced -- -- -- -- 0 -- -- -- 5 -- -- -- 0 -- -- -- 5 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Attributes -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Attachments -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- true -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- -- -- -- -- Autotype -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 5 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Default Sequence -- -- -- Qt::AlignRight|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- sequence -- -- -- Qt::AlignLeft|Qt::AlignVCenter -- -- -- -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- QFrame::Sunken -- -- -- true -- -- -- true -- -- -- false -- -- -- 2 -- -- -- false -- -- -- 50 -- -- -- 250 -- -- -- true -- -- -- -- Window -- -- -- -- -- Sequence -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- QLayout::SetDefaultConstraint -- -- -- 5 -- -- -- 3 -- -- -- 3 -- -- -- -- -- 12 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 12 -- -- -- -- Qt::AutoText -- -- -- -- -- -- -- -- -- Close -- -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- false -- -- -- false -- -- -- false -- -- -- -- General -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 20 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Autotype -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Searching -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Expiration -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 75 -- true -- -- -- -- Notes -- -- -- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing -- -- -- -- -- -- -- 6 -- -- -- 4 -- -- -- -- -- -- -- -- true -- -- -- -- -- -- -- Qt::ClickFocus -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- 0 -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- -- -- -- -- -- Share -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- <path> -- -- -- -- -- -- -- -- 75 -- true -- -- -- -- <type> -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 147 -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 20 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Search -- -- -- -- -- Clear -- -- -- -- -- -- EntryAttachmentsWidget -- QWidget --
gui/entry/EntryAttachmentsWidget.h
-- 1 --
-- -- ElidedLabel -- QLabel --
gui/widgets/ElidedLabel.h
--
--
-- -- entryTotpButton -- entryCloseButton -- entryTabWidget -- togglePasswordButton -- toggleEntryNotesButton -- groupTabWidget -- toggleGroupNotesButton -- groupCloseButton -- -- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/FileDialog.cpp keepassxc-2.6.4-patched/src/gui/FileDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/FileDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/FileDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,177 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "FileDialog.h" -- --#include "core/Config.h" -- --#include -- --FileDialog* FileDialog::m_instance(nullptr); -- --QString FileDialog::getOpenFileName(QWidget* parent, -- const QString& caption, -- const QString& dir, -- const QString& filter, -- QString* selectedFilter, -- const QFileDialog::Options options) --{ -- if (!m_nextFileName.isEmpty()) { -- const QString result = m_nextFileName; -- m_nextFileName.clear(); -- return result; -- } else { -- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; -- const auto result = QDir::toNativeSeparators( -- QFileDialog::getOpenFileName(parent, caption, workingDir, filter, selectedFilter, options)); -- --#ifdef Q_OS_MACOS -- // on Mac OS X the focus is lost after closing the native dialog -- if (parent) { -- parent->activateWindow(); -- } --#endif -- saveLastDir(result); -- return result; -- } --} -- --QStringList FileDialog::getOpenFileNames(QWidget* parent, -- const QString& caption, -- const QString& dir, -- const QString& filter, -- QString* selectedFilter, -- const QFileDialog::Options options) --{ -- if (!m_nextFileNames.isEmpty()) { -- const QStringList results = m_nextFileNames; -- m_nextFileNames.clear(); -- return results; -- } else { -- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; -- auto results = QFileDialog::getOpenFileNames(parent, caption, workingDir, filter, selectedFilter, options); -- -- for (auto& path : results) { -- path = QDir::toNativeSeparators(path); -- } -- --#ifdef Q_OS_MACOS -- // on Mac OS X the focus is lost after closing the native dialog -- if (parent) { -- parent->activateWindow(); -- } --#endif -- if (!results.isEmpty()) { -- saveLastDir(results[0]); -- } -- return results; -- } --} -- --QString FileDialog::getSaveFileName(QWidget* parent, -- const QString& caption, -- const QString& dir, -- const QString& filter, -- QString* selectedFilter, -- const QFileDialog::Options options) --{ -- if (!m_nextFileName.isEmpty()) { -- const QString result = m_nextFileName; -- m_nextFileName.clear(); -- return result; -- } else { -- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; -- const auto result = QDir::toNativeSeparators( -- QFileDialog::getSaveFileName(parent, caption, workingDir, filter, selectedFilter, options)); -- --#ifdef Q_OS_MACOS -- // on Mac OS X the focus is lost after closing the native dialog -- if (parent) { -- parent->activateWindow(); -- } --#endif -- saveLastDir(result); -- return result; -- } --} -- --QString FileDialog::getExistingDirectory(QWidget* parent, -- const QString& caption, -- const QString& dir, -- const QFileDialog::Options options) --{ -- if (!m_nextDirName.isEmpty()) { -- const QString result = m_nextDirName; -- m_nextDirName.clear(); -- return result; -- } else { -- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; -- const auto result = -- QDir::toNativeSeparators(QFileDialog::getExistingDirectory(parent, caption, workingDir, options)); -- --#ifdef Q_OS_MACOS -- // on Mac OS X the focus is lost after closing the native dialog -- if (parent) { -- parent->activateWindow(); -- } --#endif -- saveLastDir(result); -- return result; -- } --} -- --void FileDialog::setNextFileName(const QString& fileName) --{ -- m_nextFileName = fileName; --} -- --void FileDialog::setNextFileNames(const QStringList& fileNames) --{ -- m_nextFileNames = fileNames; --} -- --void FileDialog::setNextDirName(const QString& dirName) --{ -- m_nextDirName = dirName; --} -- --void FileDialog::setNextForgetDialog() --{ -- m_forgetLastDir = true; --} -- --FileDialog::FileDialog() --{ --} -- --void FileDialog::saveLastDir(const QString& dir) --{ -- if (!dir.isEmpty() && !m_forgetLastDir) { -- config()->set(Config::LastDir, QFileInfo(dir).absolutePath()); -- } -- -- m_forgetLastDir = false; --} -- --FileDialog* FileDialog::instance() --{ -- if (!m_instance) { -- m_instance = new FileDialog(); -- } -- -- return m_instance; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/FileDialog.h keepassxc-2.6.4-patched/src/gui/FileDialog.h ---- keepassxc-2.6.4-orig/src/gui/FileDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/FileDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,82 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_FILEDIALOG_H --#define KEEPASSX_FILEDIALOG_H -- --#include -- --class FileDialog --{ --public: -- QString getOpenFileName(QWidget* parent = nullptr, -- const QString& caption = QString(), -- const QString& dir = QString(), -- const QString& filter = QString(), -- QString* selectedFilter = nullptr, -- const QFileDialog::Options options = {}); -- -- QStringList getOpenFileNames(QWidget* parent = nullptr, -- const QString& caption = QString(), -- const QString& dir = QString(), -- const QString& filter = QString(), -- QString* selectedFilter = nullptr, -- const QFileDialog::Options options = {}); -- -- QString getSaveFileName(QWidget* parent = nullptr, -- const QString& caption = QString(), -- const QString& dir = QString(), -- const QString& filter = QString(), -- QString* selectedFilter = nullptr, -- const QFileDialog::Options options = {}); -- -- QString getExistingDirectory(QWidget* parent = nullptr, -- const QString& caption = QString(), -- const QString& dir = QString(), -- const QFileDialog::Options options = QFileDialog::ShowDirsOnly); -- -- void setNextForgetDialog(); -- /** -- * Sets the result of the next get* method call. -- * Use only for testing. -- */ -- void setNextFileName(const QString& fileName); -- void setNextFileNames(const QStringList& fileNames); -- void setNextDirName(const QString& dirName); -- -- static FileDialog* instance(); -- --private: -- FileDialog(); -- QString m_nextFileName; -- QStringList m_nextFileNames; -- QString m_nextDirName; -- bool m_forgetLastDir = false; -- -- void saveLastDir(const QString&); -- -- static FileDialog* m_instance; -- -- Q_DISABLE_COPY(FileDialog) --}; -- --inline FileDialog* fileDialog() --{ -- return FileDialog::instance(); --} -- --#endif // KEEPASSX_FILEDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/gui/Font.cpp keepassxc-2.6.4-patched/src/gui/Font.cpp ---- keepassxc-2.6.4-orig/src/gui/Font.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Font.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,46 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "Font.h" -- --#include -- --QFont Font::defaultFont() --{ -- return QFontDatabase::systemFont(QFontDatabase::GeneralFont); --} -- --QFont Font::fixedFont() --{ -- QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont); -- --#ifdef Q_OS_WIN -- // try to use Consolas on Windows, because the default Courier New has too many similar characters -- QFont consolasFont = QFontDatabase().font("Consolas", fixedFont.styleName(), fixedFont.pointSize()); -- const QFont defaultFont; -- if (fixedFont != defaultFont) { -- fixedFont = consolasFont; -- } --#endif --#ifdef Q_OS_MACOS -- // Qt doesn't choose a monospace font correctly on macOS -- const QFont defaultFont; -- fixedFont = QFontDatabase().font("Menlo", defaultFont.styleName(), defaultFont.pointSize()); --#endif -- -- return fixedFont; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/Font.h keepassxc-2.6.4-patched/src/gui/Font.h ---- keepassxc-2.6.4-orig/src/gui/Font.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/Font.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,35 +0,0 @@ --/* -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_FONT_H --#define KEEPASSX_FONT_H -- --#include -- --class Font --{ --public: -- static QFont defaultFont(); -- static QFont fixedFont(); -- --private: -- Font() -- { -- } --}; -- --#endif // KEEPASSX_FONT_H -diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.cpp keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,322 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "EditGroupWidget.h" --#include "gui/Font.h" --#include "ui_EditGroupWidgetMain.h" -- --#include "core/Config.h" --#include "core/Metadata.h" --#include "core/Resources.h" --#include "gui/EditWidgetIcons.h" --#include "gui/EditWidgetProperties.h" --#include "gui/MessageBox.h" -- --#if defined(WITH_XC_KEESHARE) --#include "keeshare/group/EditGroupPageKeeShare.h" --#endif -- --class EditGroupWidget::ExtraPage --{ --public: -- ExtraPage(IEditGroupPage* page, QWidget* widget) -- : editPage(page) -- , widget(widget) -- { -- } -- -- void set(Group* temporaryGroup, QSharedPointer database) const -- { -- editPage->set(widget, temporaryGroup, database); -- } -- -- void assign() const -- { -- editPage->assign(widget); -- } -- -- QWidget* getWidget() -- { -- return widget; -- } -- --private: -- QSharedPointer editPage; -- QWidget* widget; --}; -- --EditGroupWidget::EditGroupWidget(QWidget* parent) -- : EditWidget(parent) -- , m_mainUi(new Ui::EditGroupWidgetMain()) -- , m_editGroupWidgetMain(new QScrollArea()) -- , m_editGroupWidgetIcons(new EditWidgetIcons()) -- , m_editWidgetProperties(new EditWidgetProperties()) -- , m_group(nullptr) --{ -- m_mainUi->setupUi(m_editGroupWidgetMain); -- -- addPage(tr("Group"), Resources::instance()->icon("document-edit"), m_editGroupWidgetMain); -- addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_editGroupWidgetIcons); --#if defined(WITH_XC_KEESHARE) -- addEditPage(new EditGroupPageKeeShare(this)); --#endif -- addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties); -- -- connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool))); -- connect(m_mainUi->autoTypeSequenceCustomRadio, -- SIGNAL(toggled(bool)), -- m_mainUi->autoTypeSequenceCustomEdit, -- SLOT(setEnabled(bool))); -- -- connect(this, SIGNAL(apply()), SLOT(apply())); -- connect(this, SIGNAL(accepted()), SLOT(save())); -- connect(this, SIGNAL(rejected()), SLOT(cancel())); -- -- // clang-format off -- connect(m_editGroupWidgetIcons, -- SIGNAL(messageEditEntry(QString,MessageWidget::MessageType)), -- SLOT(showMessage(QString,MessageWidget::MessageType))); -- // clang-format on -- -- connect(m_editGroupWidgetIcons, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage())); -- -- setupModifiedTracking(); --} -- --EditGroupWidget::~EditGroupWidget() --{ --} -- --void EditGroupWidget::setupModifiedTracking() --{ -- // Group tab -- connect(m_mainUi->editName, SIGNAL(textChanged(QString)), SLOT(setModified())); -- connect(m_mainUi->editNotes, SIGNAL(textChanged()), SLOT(setModified())); -- connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), SLOT(setModified())); -- connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), SLOT(setModified())); -- connect(m_mainUi->searchComboBox, SIGNAL(currentIndexChanged(int)), SLOT(setModified())); -- connect(m_mainUi->autotypeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(setModified())); -- connect(m_mainUi->autoTypeSequenceInherit, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_mainUi->autoTypeSequenceCustomRadio, SIGNAL(toggled(bool)), SLOT(setModified())); -- connect(m_mainUi->autoTypeSequenceCustomEdit, SIGNAL(textChanged(QString)), SLOT(setModified())); -- -- // Icon tab -- connect(m_editGroupWidgetIcons, SIGNAL(widgetUpdated()), SLOT(setModified())); --} -- --void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer& database) --{ -- m_group = group; -- m_db = database; -- -- m_temporaryGroup.reset(group->clone(Entry::CloneNoFlags, Group::CloneNoFlags)); -- connect(m_temporaryGroup->customData(), SIGNAL(customDataModified()), SLOT(setModified())); -- -- if (create) { -- setHeadline(tr("Add group")); -- } else { -- setHeadline(tr("Edit group")); -- } -- -- if (m_group->parentGroup()) { -- addTriStateItems(m_mainUi->searchComboBox, m_group->parentGroup()->resolveSearchingEnabled()); -- addTriStateItems(m_mainUi->autotypeComboBox, m_group->parentGroup()->resolveAutoTypeEnabled()); -- } else { -- addTriStateItems(m_mainUi->searchComboBox, true); -- addTriStateItems(m_mainUi->autotypeComboBox, true); -- } -- -- m_mainUi->editName->setText(m_group->name()); -- m_mainUi->editNotes->setPlainText(m_group->notes()); -- m_mainUi->expireCheck->setChecked(group->timeInfo().expires()); -- m_mainUi->expireDatePicker->setDateTime(group->timeInfo().expiryTime().toLocalTime()); -- m_mainUi->searchComboBox->setCurrentIndex(indexFromTriState(group->searchingEnabled())); -- m_mainUi->autotypeComboBox->setCurrentIndex(indexFromTriState(group->autoTypeEnabled())); -- if (group->defaultAutoTypeSequence().isEmpty()) { -- m_mainUi->autoTypeSequenceInherit->setChecked(true); -- } else { -- m_mainUi->autoTypeSequenceCustomRadio->setChecked(true); -- } -- m_mainUi->autoTypeSequenceCustomEdit->setText(group->effectiveAutoTypeSequence()); -- -- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { -- m_mainUi->editNotes->setFont(Font::fixedFont()); -- } else { -- m_mainUi->editNotes->setFont(Font::defaultFont()); -- } -- -- IconStruct iconStruct; -- iconStruct.uuid = m_temporaryGroup->iconUuid(); -- iconStruct.number = m_temporaryGroup->iconNumber(); -- m_editGroupWidgetIcons->load(m_temporaryGroup->uuid(), m_db, iconStruct); -- m_editWidgetProperties->setFields(m_temporaryGroup->timeInfo(), m_temporaryGroup->uuid()); -- m_editWidgetProperties->setCustomData(m_temporaryGroup->customData()); -- -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.set(m_temporaryGroup.data(), m_db); -- } -- -- setCurrentPage(0); -- -- m_mainUi->editName->setFocus(); -- -- // Force the user to Save/Discard new groups -- showApplyButton(!create); -- -- setModified(false); --} -- --void EditGroupWidget::save() --{ -- apply(); -- clear(); -- emit editFinished(true); --} -- --void EditGroupWidget::apply() --{ -- m_temporaryGroup->setName(m_mainUi->editName->text()); -- m_temporaryGroup->setNotes(m_mainUi->editNotes->toPlainText()); -- m_temporaryGroup->setExpires(m_mainUi->expireCheck->isChecked()); -- m_temporaryGroup->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); -- -- m_temporaryGroup->setSearchingEnabled(triStateFromIndex(m_mainUi->searchComboBox->currentIndex())); -- m_temporaryGroup->setAutoTypeEnabled(triStateFromIndex(m_mainUi->autotypeComboBox->currentIndex())); -- -- if (m_mainUi->autoTypeSequenceInherit->isChecked()) { -- m_temporaryGroup->setDefaultAutoTypeSequence(QString()); -- } else { -- m_temporaryGroup->setDefaultAutoTypeSequence(m_mainUi->autoTypeSequenceCustomEdit->text()); -- } -- -- IconStruct iconStruct = m_editGroupWidgetIcons->state(); -- -- if (iconStruct.number < 0) { -- m_temporaryGroup->setIcon(Group::DefaultIconNumber); -- } else if (iconStruct.uuid.isNull()) { -- m_temporaryGroup->setIcon(iconStruct.number); -- } else { -- m_temporaryGroup->setIcon(iconStruct.uuid); -- } -- -- for (const ExtraPage& page : asConst(m_extraPages)) { -- page.assign(); -- } -- -- // Icons add/remove are applied globally outside the transaction! -- m_group->copyDataFrom(m_temporaryGroup.data()); -- -- // Assign the icon to children if selected -- if (iconStruct.applyTo == ApplyIconToOptions::CHILD_GROUPS -- || iconStruct.applyTo == ApplyIconToOptions::ALL_CHILDREN) { -- m_group->applyGroupIconToChildGroups(); -- } -- -- if (iconStruct.applyTo == ApplyIconToOptions::CHILD_ENTRIES -- || iconStruct.applyTo == ApplyIconToOptions::ALL_CHILDREN) { -- m_group->applyGroupIconToChildEntries(); -- } -- -- setModified(false); --} -- --void EditGroupWidget::cancel() --{ -- if (!m_group->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_group->iconUuid())) { -- m_group->setIcon(Entry::DefaultIconNumber); -- } -- -- if (isModified()) { -- auto result = MessageBox::question(this, -- QString(), -- tr("Entry has unsaved changes"), -- MessageBox::Cancel | MessageBox::Save | MessageBox::Discard, -- MessageBox::Cancel); -- if (result == MessageBox::Cancel) { -- return; -- } -- if (result == MessageBox::Save) { -- apply(); -- setModified(false); -- } -- } -- -- clear(); -- emit editFinished(false); --} -- --void EditGroupWidget::clear() --{ -- m_group = nullptr; -- m_db.reset(); -- m_temporaryGroup.reset(nullptr); -- m_editGroupWidgetIcons->reset(); --} -- --void EditGroupWidget::addEditPage(IEditGroupPage* page) --{ -- QWidget* widget = page->createWidget(); -- widget->setParent(this); -- -- m_extraPages.append(ExtraPage(page, widget)); -- addPage(page->name(), page->icon(), widget); --} -- --void EditGroupWidget::addTriStateItems(QComboBox* comboBox, bool inheritDefault) --{ -- QString inheritDefaultString; -- if (inheritDefault) { -- inheritDefaultString = tr("Enable"); -- } else { -- inheritDefaultString = tr("Disable"); -- } -- -- comboBox->clear(); -- comboBox->addItem(tr("Inherit from parent group (%1)").arg(inheritDefaultString)); -- comboBox->addItem(tr("Enable")); -- comboBox->addItem(tr("Disable")); --} -- --int EditGroupWidget::indexFromTriState(Group::TriState triState) --{ -- switch (triState) { -- case Group::Inherit: -- return 0; -- case Group::Enable: -- return 1; -- case Group::Disable: -- return 2; -- default: -- Q_ASSERT(false); -- return 0; -- } --} -- --Group::TriState EditGroupWidget::triStateFromIndex(int index) --{ -- switch (index) { -- case 0: -- return Group::Inherit; -- case 1: -- return Group::Enable; -- case 2: -- return Group::Disable; -- default: -- Q_ASSERT(false); -- return Group::Inherit; -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.h keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.h ---- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,96 +0,0 @@ --/* -- * Copyright (C) 2011 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_EDITGROUPWIDGET_H --#define KEEPASSX_EDITGROUPWIDGET_H -- --#include --#include --#include -- --#include "core/Group.h" --#include "gui/EditWidget.h" -- --class CustomData; --class EditWidgetIcons; --class EditWidgetProperties; -- --namespace Ui --{ -- class EditGroupWidgetMain; -- class EditWidget; --} // namespace Ui -- --class IEditGroupPage --{ --public: -- virtual ~IEditGroupPage() -- { -- } -- virtual QString name() = 0; -- virtual QIcon icon() = 0; -- virtual QWidget* createWidget() = 0; -- virtual void set(QWidget* widget, Group* tempoaryGroup, QSharedPointer database) = 0; -- virtual void assign(QWidget* widget) = 0; --}; -- --class EditGroupWidget : public EditWidget --{ -- Q_OBJECT -- --public: -- explicit EditGroupWidget(QWidget* parent = nullptr); -- ~EditGroupWidget(); -- -- void loadGroup(Group* group, bool create, const QSharedPointer& database); -- void clear(); -- -- void addEditPage(IEditGroupPage* page); -- --signals: -- void editFinished(bool accepted); -- void messageEditEntry(QString, MessageWidget::MessageType); -- void messageEditEntryDismiss(); -- --private slots: -- void apply(); -- void save(); -- void cancel(); -- --private: -- void addTriStateItems(QComboBox* comboBox, bool inheritValue); -- int indexFromTriState(Group::TriState triState); -- Group::TriState triStateFromIndex(int index); -- void setupModifiedTracking(); -- -- const QScopedPointer m_mainUi; -- -- QPointer m_editGroupWidgetMain; -- QPointer m_editGroupWidgetIcons; -- QPointer m_editWidgetProperties; -- -- QScopedPointer m_temporaryGroup; -- QPointer m_group; -- QSharedPointer m_db; -- -- class ExtraPage; -- QList m_extraPages; -- -- Q_DISABLE_COPY(EditGroupWidget) --}; -- --#endif // KEEPASSX_EDITGROUPWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidgetMain.ui keepassxc-2.6.4-patched/src/gui/group/EditGroupWidgetMain.ui ---- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidgetMain.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidgetMain.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,255 +0,0 @@ -- -- -- EditGroupWidgetMain -- -- -- -- 0 -- 0 -- 539 -- 523 -- -- -- -- Edit Group -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- Qt::ScrollBarAlwaysOff -- -- -- QAbstractScrollArea::AdjustToContents -- -- -- true -- -- -- -- -- 0 -- 0 -- 539 -- 523 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 10 -- -- -- 8 -- -- -- -- -- Toggle expiration -- -- -- Expires: -- -- -- -- -- -- -- Name field -- -- -- -- -- -- -- false -- -- -- Expiration field -- -- -- true -- -- -- -- -- -- -- Use default Auto-Type sequence of parent group -- -- -- -- -- -- -- Auto-Type: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Search: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Auto-Type toggle for this and sub groups -- -- -- -- -- -- -- -- -- Notes: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 0 -- -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 30 -- 0 -- -- -- -- -- -- -- -- false -- -- -- Default auto-type sequence field -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 16777215 -- 120 -- -- -- -- Notes field -- -- -- -- -- -- -- Name: -- -- -- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -- -- -- -- -- -- Set default Auto-Type sequence -- -- -- -- -- -- -- Search toggle for this and sub groups -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- editName -- editNotes -- expireCheck -- expireDatePicker -- searchComboBox -- autotypeComboBox -- autoTypeSequenceInherit -- autoTypeSequenceCustomRadio -- autoTypeSequenceCustomEdit -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupModel.cpp keepassxc-2.6.4-patched/src/gui/group/GroupModel.cpp ---- keepassxc-2.6.4-orig/src/gui/group/GroupModel.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/GroupModel.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,450 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "GroupModel.h" -- --#include --#include -- --#include "core/Database.h" --#include "core/DatabaseIcons.h" --#include "core/Group.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "keeshare/KeeShare.h" -- --GroupModel::GroupModel(Database* db, QObject* parent) -- : QAbstractItemModel(parent) -- , m_db(nullptr) --{ -- changeDatabase(db); --} -- --void GroupModel::changeDatabase(Database* newDb) --{ -- beginResetModel(); -- -- m_db = newDb; -- -- // clang-format off -- connect(m_db, SIGNAL(groupDataChanged(Group*)), SLOT(groupDataChanged(Group*))); -- connect(m_db, SIGNAL(groupAboutToAdd(Group*,int)), SLOT(groupAboutToAdd(Group*,int))); -- connect(m_db, SIGNAL(groupAdded()), SLOT(groupAdded())); -- connect(m_db, SIGNAL(groupAboutToRemove(Group*)), SLOT(groupAboutToRemove(Group*))); -- connect(m_db, SIGNAL(groupRemoved()), SLOT(groupRemoved())); -- connect(m_db, SIGNAL(groupAboutToMove(Group*,Group*,int)), SLOT(groupAboutToMove(Group*,Group*,int))); -- connect(m_db, SIGNAL(groupMoved()), SLOT(groupMoved())); -- // clang-format on -- -- endResetModel(); --} -- --int GroupModel::rowCount(const QModelIndex& parent) const --{ -- if (!parent.isValid()) { -- // we have exactly 1 root item -- return 1; -- } else { -- const Group* group = groupFromIndex(parent); -- return group->children().size(); -- } --} -- --int GroupModel::columnCount(const QModelIndex& parent) const --{ -- Q_UNUSED(parent); -- -- return 1; --} -- --QModelIndex GroupModel::index(int row, int column, const QModelIndex& parent) const --{ -- if (!hasIndex(row, column, parent)) { -- return QModelIndex(); -- } -- -- Group* group; -- -- if (!parent.isValid()) { -- group = m_db->rootGroup(); -- } else { -- group = groupFromIndex(parent)->children().at(row); -- } -- -- return createIndex(row, column, group); --} -- --QModelIndex GroupModel::parent(const QModelIndex& index) const --{ -- if (!index.isValid()) { -- return QModelIndex(); -- } -- -- return parent(groupFromIndex(index)); --} -- --QModelIndex GroupModel::parent(Group* group) const --{ -- Group* parentGroup = group->parentGroup(); -- -- if (!parentGroup) { -- // index is already the root group -- return QModelIndex(); -- } else { -- const Group* grandParentGroup = parentGroup->parentGroup(); -- if (!grandParentGroup) { -- // parent is the root group -- return createIndex(0, 0, parentGroup); -- } else { -- return createIndex(grandParentGroup->children().indexOf(parentGroup), 0, parentGroup); -- } -- } --} -- --QVariant GroupModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- Group* group = groupFromIndex(index); -- -- if (role == Qt::DisplayRole) { -- QString nameTemplate = "%1"; --#if defined(WITH_XC_KEESHARE) -- nameTemplate = KeeShare::indicatorSuffix(group, nameTemplate); --#endif -- return nameTemplate.arg(group->name()); -- } else if (role == Qt::DecorationRole) { -- return group->iconPixmap(); -- } else if (role == Qt::FontRole) { -- QFont font; -- if (group->isExpired()) { -- font.setStrikeOut(true); -- } -- return font; -- } else if (role == Qt::ToolTipRole) { -- QString tooltip; -- if (!group->parentGroup()) { -- // only show a tooltip for the root group -- tooltip = m_db->filePath(); -- } -- return tooltip; -- } else { -- return QVariant(); -- } --} -- --QVariant GroupModel::headerData(int section, Qt::Orientation orientation, int role) const --{ -- Q_UNUSED(section); -- Q_UNUSED(orientation); -- Q_UNUSED(role); -- -- return QVariant(); --} -- --QModelIndex GroupModel::index(Group* group) const --{ -- int row; -- -- if (!group->parentGroup()) { -- row = 0; -- } else { -- row = group->parentGroup()->children().indexOf(group); -- } -- -- return createIndex(row, 0, group); --} -- --Group* GroupModel::groupFromIndex(const QModelIndex& index) const --{ -- Q_ASSERT(index.internalPointer()); -- -- return static_cast(index.internalPointer()); --} -- --Qt::DropActions GroupModel::supportedDropActions() const --{ -- return Qt::MoveAction | Qt::CopyAction; --} -- --Qt::ItemFlags GroupModel::flags(const QModelIndex& modelIndex) const --{ -- if (!modelIndex.isValid()) { -- return Qt::NoItemFlags; -- } else if (modelIndex == index(0, 0)) { -- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled; -- } else { -- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; -- } --} -- --bool GroupModel::dropMimeData(const QMimeData* data, -- Qt::DropAction action, -- int row, -- int column, -- const QModelIndex& parent) --{ -- Q_UNUSED(column); -- -- if (action == Qt::IgnoreAction) { -- return true; -- } -- -- if (!data || (action != Qt::MoveAction && action != Qt::CopyAction) || !parent.isValid()) { -- return false; -- } -- -- // check if the format is supported -- QStringList types = mimeTypes(); -- Q_ASSERT(types.size() == 2); -- bool isGroup = data->hasFormat(types.at(0)); -- bool isEntry = data->hasFormat(types.at(1)); -- if (!isGroup && !isEntry) { -- return false; -- } -- -- if (row > rowCount(parent)) { -- row = rowCount(parent); -- } -- -- // decode and insert -- QByteArray encoded = data->data(isGroup ? types.at(0) : types.at(1)); -- QDataStream stream(&encoded, QIODevice::ReadOnly); -- -- Group* parentGroup = groupFromIndex(parent); -- -- if (isGroup) { -- QUuid dbUuid; -- QUuid groupUuid; -- stream >> dbUuid >> groupUuid; -- -- Database* db = Database::databaseByUuid(dbUuid); -- if (!db) { -- return false; -- } -- -- Group* dragGroup = db->rootGroup()->findGroupByUuid(groupUuid); -- if (!dragGroup || !db->rootGroup()->findGroupByUuid(dragGroup->uuid()) || dragGroup == db->rootGroup()) { -- return false; -- } -- -- if (dragGroup == parentGroup || dragGroup->findGroupByUuid(parentGroup->uuid())) { -- return false; -- } -- -- if (parentGroup == dragGroup->parent() && row > parentGroup->children().indexOf(dragGroup)) { -- row--; -- } -- -- Database* sourceDb = dragGroup->database(); -- Database* targetDb = parentGroup->database(); -- -- Group* group = dragGroup; -- -- if (sourceDb != targetDb) { -- QSet customIcons = group->customIconsRecursive(); -- targetDb->metadata()->copyCustomIcons(customIcons, sourceDb->metadata()); -- -- // Always clone the group across db's to reset UUIDs -- group = dragGroup->clone(Entry::CloneDefault | Entry::CloneIncludeHistory); -- if (action == Qt::MoveAction) { -- // Remove the original group from the sourceDb -- delete dragGroup; -- } -- } else if (action == Qt::CopyAction) { -- group = dragGroup->clone(Entry::CloneCopy); -- } -- -- group->setParent(parentGroup, row); -- } else { -- if (row != -1) { -- return false; -- } -- -- while (!stream.atEnd()) { -- QUuid dbUuid; -- QUuid entryUuid; -- stream >> dbUuid >> entryUuid; -- -- Database* db = Database::databaseByUuid(dbUuid); -- if (!db) { -- continue; -- } -- -- Entry* dragEntry = db->rootGroup()->findEntryByUuid(entryUuid); -- if (!dragEntry || !db->rootGroup()->findEntryByUuid(dragEntry->uuid())) { -- continue; -- } -- -- Database* sourceDb = dragEntry->group()->database(); -- Database* targetDb = parentGroup->database(); -- -- Entry* entry = dragEntry; -- -- if (sourceDb != targetDb) { -- QUuid customIcon = entry->iconUuid(); -- if (!customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) { -- targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon)); -- } -- -- // Reset the UUID when moving across db boundary -- entry = dragEntry->clone(Entry::CloneDefault | Entry::CloneIncludeHistory); -- if (action == Qt::MoveAction) { -- delete dragEntry; -- } -- } else if (action == Qt::CopyAction) { -- entry = dragEntry->clone(Entry::CloneCopy); -- } -- -- entry->setGroup(parentGroup); -- } -- } -- -- return true; --} -- --QStringList GroupModel::mimeTypes() const --{ -- QStringList types; -- types << "application/x-keepassx-group"; -- types << "application/x-keepassx-entry"; -- return types; --} -- --QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const --{ -- if (indexes.isEmpty()) { -- return nullptr; -- } -- -- QMimeData* data = new QMimeData(); -- QByteArray encoded; -- QDataStream stream(&encoded, QIODevice::WriteOnly); -- -- QSet seenGroups; -- -- for (const QModelIndex& index : indexes) { -- if (!index.isValid()) { -- continue; -- } -- -- Group* group = groupFromIndex(index); -- if (!seenGroups.contains(group)) { -- // make sure we don't add groups multiple times when we get indexes -- // with the same row but different columns -- stream << m_db->uuid() << group->uuid(); -- seenGroups.insert(group); -- } -- } -- -- if (seenGroups.isEmpty()) { -- delete data; -- return nullptr; -- } else { -- data->setData(mimeTypes().at(0), encoded); -- return data; -- } --} -- --void GroupModel::groupDataChanged(Group* group) --{ -- QModelIndex ix = index(group); -- emit dataChanged(ix, ix); --} -- --void GroupModel::groupAboutToRemove(Group* group) --{ -- Q_ASSERT(group->parentGroup()); -- -- QModelIndex parentIndex = parent(group); -- Q_ASSERT(parentIndex.isValid()); -- int pos = group->parentGroup()->children().indexOf(group); -- Q_ASSERT(pos != -1); -- -- beginRemoveRows(parentIndex, pos, pos); --} -- --void GroupModel::groupRemoved() --{ -- endRemoveRows(); --} -- --void GroupModel::groupAboutToAdd(Group* group, int index) --{ -- Q_ASSERT(group->parentGroup()); -- -- QModelIndex parentIndex = parent(group); -- -- beginInsertRows(parentIndex, index, index); --} -- --void GroupModel::groupAdded() --{ -- endInsertRows(); --} -- --void GroupModel::groupAboutToMove(Group* group, Group* toGroup, int pos) --{ -- Q_ASSERT(group->parentGroup()); -- -- QModelIndex oldParentIndex = parent(group); -- QModelIndex newParentIndex = index(toGroup); -- int oldPos = group->parentGroup()->children().indexOf(group); -- if (group->parentGroup() == toGroup && pos > oldPos) { -- // beginMoveRows() has a bit different semantics than Group::setParent() and -- // QList::move() when the new position is greater than the old -- pos++; -- } -- -- bool moveResult = beginMoveRows(oldParentIndex, oldPos, oldPos, newParentIndex, pos); -- Q_UNUSED(moveResult); -- Q_ASSERT(moveResult); --} -- --void GroupModel::groupMoved() --{ -- endMoveRows(); --} -- --void GroupModel::sortChildren(Group* rootGroup, bool reverse) --{ -- emit layoutAboutToBeChanged(); -- -- QList oldIndexes; -- collectIndexesRecursively(oldIndexes, rootGroup->children()); -- -- rootGroup->sortChildrenRecursively(reverse); -- -- QList newIndexes; -- collectIndexesRecursively(newIndexes, rootGroup->children()); -- -- for (int i = 0; i < oldIndexes.count(); i++) { -- changePersistentIndex(oldIndexes[i], newIndexes[i]); -- } -- -- emit layoutChanged(); --} -- --void GroupModel::collectIndexesRecursively(QList& indexes, QList groups) --{ -- for (auto group : groups) { -- indexes.append(index(group)); -- collectIndexesRecursively(indexes, group->children()); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupModel.h keepassxc-2.6.4-patched/src/gui/group/GroupModel.h ---- keepassxc-2.6.4-orig/src/gui/group/GroupModel.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/GroupModel.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,67 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_GROUPMODEL_H --#define KEEPASSX_GROUPMODEL_H -- --#include -- --class Database; --class Group; -- --class GroupModel : public QAbstractItemModel --{ -- Q_OBJECT -- --public: -- explicit GroupModel(Database* db, QObject* parent = nullptr); -- void changeDatabase(Database* newDb); -- QModelIndex index(Group* group) const; -- Group* groupFromIndex(const QModelIndex& index) const; -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- int columnCount(const QModelIndex& parent = QModelIndex()) const override; -- QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; -- QModelIndex parent(const QModelIndex& index) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- Qt::DropActions supportedDropActions() const override; -- Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; -- bool -- dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override; -- QStringList mimeTypes() const override; -- QMimeData* mimeData(const QModelIndexList& indexes) const override; -- void sortChildren(Group* rootGroup, bool reverse = false); -- --private: -- QModelIndex parent(Group* group) const; -- void collectIndexesRecursively(QList& indexes, QList groups); -- --private slots: -- void groupDataChanged(Group* group); -- void groupAboutToRemove(Group* group); -- void groupRemoved(); -- void groupAboutToAdd(Group* group, int index); -- void groupAdded(); -- void groupAboutToMove(Group* group, Group* toGroup, int pos); -- void groupMoved(); -- --private: -- Database* m_db; --}; -- --#endif // KEEPASSX_GROUPMODEL_H -diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupView.cpp keepassxc-2.6.4-patched/src/gui/group/GroupView.cpp ---- keepassxc-2.6.4-orig/src/gui/group/GroupView.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/GroupView.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,165 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "GroupView.h" -- --#include --#include --#include --#include -- --#include "core/Database.h" --#include "core/Group.h" --#include "gui/group/GroupModel.h" -- --GroupView::GroupView(Database* db, QWidget* parent) -- : QTreeView(parent) -- , m_model(new GroupModel(db, this)) -- , m_updatingExpanded(false) --{ -- QTreeView::setModel(m_model); -- setHeaderHidden(true); -- setUniformRowHeights(true); -- -- // clang-format off -- connect(this, SIGNAL(expanded(QModelIndex)), SLOT(expandedChanged(QModelIndex))); -- connect(this, SIGNAL(collapsed(QModelIndex)), SLOT(expandedChanged(QModelIndex))); -- connect(this, SIGNAL(clicked(QModelIndex)), SIGNAL(groupSelectionChanged())); -- connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(syncExpandedState(QModelIndex,int,int))); -- connect(m_model, SIGNAL(modelReset()), SLOT(modelReset())); -- connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SIGNAL(groupSelectionChanged())); -- // clang-format on -- -- new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut); -- -- modelReset(); -- -- setDragEnabled(true); -- viewport()->setAcceptDrops(true); -- setDropIndicatorShown(true); -- setDefaultDropAction(Qt::MoveAction); --} -- --void GroupView::contextMenuShortcutPressed() --{ -- auto index = currentIndex(); -- if (hasFocus() && index.isValid()) { -- emit customContextMenuRequested(visualRect(index).bottomLeft()); -- } --} -- --void GroupView::changeDatabase(const QSharedPointer& newDb) --{ -- m_model->changeDatabase(newDb.data()); --} -- --void GroupView::dragMoveEvent(QDragMoveEvent* event) --{ -- if (event->keyboardModifiers() & Qt::ControlModifier) { -- event->setDropAction(Qt::CopyAction); -- } else { -- event->setDropAction(Qt::MoveAction); -- } -- -- QTreeView::dragMoveEvent(event); -- -- // entries may only be dropped on groups -- if (event->isAccepted() && event->mimeData()->hasFormat("application/x-keepassx-entry") -- && (dropIndicatorPosition() == AboveItem || dropIndicatorPosition() == BelowItem)) { -- event->ignore(); -- } --} -- --void GroupView::focusInEvent(QFocusEvent* event) --{ -- emit groupFocused(); -- QTreeView::focusInEvent(event); --} -- --Group* GroupView::currentGroup() --{ -- if (currentIndex() == QModelIndex()) { -- return nullptr; -- } else { -- return m_model->groupFromIndex(currentIndex()); -- } --} -- --void GroupView::expandedChanged(const QModelIndex& index) --{ -- if (m_updatingExpanded) { -- return; -- } -- -- Group* group = m_model->groupFromIndex(index); -- group->setExpanded(isExpanded(index)); --} -- --void GroupView::recInitExpanded(Group* group) --{ -- m_updatingExpanded = true; -- expandGroup(group, group->isExpanded()); -- m_updatingExpanded = false; -- -- const QList children = group->children(); -- for (Group* child : children) { -- recInitExpanded(child); -- } --} -- --void GroupView::expandGroup(Group* group, bool expand) --{ -- QModelIndex index = m_model->index(group); -- setExpanded(index, expand); --} -- --void GroupView::sortGroups(bool reverse) --{ -- Group* group = currentGroup(); -- if (group) { -- m_model->sortChildren(group, reverse); -- } --} -- --void GroupView::setModel(QAbstractItemModel* model) --{ -- Q_UNUSED(model); -- Q_ASSERT(false); --} -- --void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end) --{ -- for (int row = start; row <= end; row++) { -- Group* group = m_model->groupFromIndex(m_model->index(row, 0, parent)); -- recInitExpanded(group); -- } --} -- --void GroupView::setCurrentGroup(Group* group) --{ -- if (group == nullptr) { -- setCurrentIndex(QModelIndex()); -- } else { -- setCurrentIndex(m_model->index(group)); -- } --} -- --void GroupView::modelReset() --{ -- recInitExpanded(m_model->groupFromIndex(m_model->index(0, 0))); -- setCurrentIndex(m_model->index(0, 0)); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupView.h keepassxc-2.6.4-patched/src/gui/group/GroupView.h ---- keepassxc-2.6.4-orig/src/gui/group/GroupView.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/group/GroupView.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,61 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_GROUPVIEW_H --#define KEEPASSX_GROUPVIEW_H -- --#include -- --class Database; --class Group; --class GroupModel; -- --class GroupView : public QTreeView --{ -- Q_OBJECT -- --public: -- explicit GroupView(Database* db, QWidget* parent = nullptr); -- void changeDatabase(const QSharedPointer& newDb); -- void setModel(QAbstractItemModel* model) override; -- Group* currentGroup(); -- void setCurrentGroup(Group* group); -- void expandGroup(Group* group, bool expand = true); -- void sortGroups(bool reverse = false); -- --signals: -- void groupSelectionChanged(); -- void groupFocused(); -- --private slots: -- void expandedChanged(const QModelIndex& index); -- void syncExpandedState(const QModelIndex& parent, int start, int end); -- void modelReset(); -- void contextMenuShortcutPressed(); -- --protected: -- void dragMoveEvent(QDragMoveEvent* event) override; -- void focusInEvent(QFocusEvent* event) override; -- --private: -- void recInitExpanded(Group* group); -- -- GroupModel* const m_model; -- bool m_updatingExpanded; --}; -- --#endif // KEEPASSX_GROUPVIEW_H -diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.cpp keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.cpp ---- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,198 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "IconDownloaderDialog.h" --#include "ui_IconDownloaderDialog.h" -- --#include "core/AsyncTask.h" --#include "core/Config.h" --#include "core/Entry.h" --#include "core/Global.h" --#include "core/Group.h" --#include "core/IconDownloader.h" --#include "core/Metadata.h" --#include "core/Tools.h" --#include "gui/IconModels.h" --#ifdef Q_OS_MACOS --#include "gui/osutils/macutils/MacUtils.h" --#endif -- --#include -- --IconDownloaderDialog::IconDownloaderDialog(QWidget* parent) -- : QDialog(parent) -- , m_ui(new Ui::IconDownloaderDialog()) -- , m_dataModel(new QStandardItemModel(this)) --{ -- setWindowFlags(Qt::Window); -- setAttribute(Qt::WA_DeleteOnClose); -- -- m_ui->setupUi(this); -- showFallbackMessage(false); -- -- m_dataModel->clear(); -- m_dataModel->setHorizontalHeaderLabels({tr("URL"), tr("Status")}); -- -- m_ui->tableView->setModel(m_dataModel); -- m_ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); -- -- connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(abortDownloads())); -- connect(m_ui->closeButton, SIGNAL(clicked()), SLOT(close())); --} -- --IconDownloaderDialog::~IconDownloaderDialog() --{ -- abortDownloads(); --} -- --void IconDownloaderDialog::downloadFavicons(const QSharedPointer& database, -- const QList& entries, -- bool force) --{ -- m_db = database; -- m_urlToEntries.clear(); -- abortDownloads(); -- for (const auto& e : entries) { -- // Only consider entries with a valid URL and without a custom icon -- auto webUrl = e->webUrl(); -- if (!webUrl.isEmpty() && (force || e->iconUuid().isNull())) { -- m_urlToEntries.insert(webUrl, e); -- } -- } -- -- if (m_urlToEntries.count() > 0) { --#ifdef Q_OS_MACOS -- macUtils()->raiseOwnWindow(); -- Tools::wait(100); --#endif -- showFallbackMessage(false); -- m_ui->progressLabel->setText(tr("Please wait, processing entry list...")); -- open(); -- QApplication::processEvents(); -- -- for (const auto& url : m_urlToEntries.uniqueKeys()) { -- m_dataModel->appendRow(QList() -- << new QStandardItem(url) << new QStandardItem(tr("Downloading..."))); -- m_activeDownloaders.append(createDownloader(url)); -- } -- -- // Setup the dialog -- updateProgressBar(); -- updateCancelButton(); -- QApplication::processEvents(); -- -- // Start the downloads -- for (auto downloader : m_activeDownloaders) { -- downloader->download(); -- } -- } --} -- --IconDownloader* IconDownloaderDialog::createDownloader(const QString& url) --{ -- auto downloader = new IconDownloader(); -- connect(downloader, -- SIGNAL(finished(const QString&, const QImage&)), -- this, -- SLOT(downloadFinished(const QString&, const QImage&))); -- -- downloader->setUrl(url); -- return downloader; --} -- --void IconDownloaderDialog::downloadFinished(const QString& url, const QImage& icon) --{ -- // Prevent re-entrance from multiple calls finishing at the same time -- QMutexLocker locker(&m_mutex); -- -- // Cleanup the icon downloader that sent this signal -- auto downloader = qobject_cast(sender()); -- if (downloader) { -- downloader->deleteLater(); -- m_activeDownloaders.removeAll(downloader); -- } -- -- updateProgressBar(); -- updateCancelButton(); -- -- if (m_db && !icon.isNull()) { -- // Don't add an icon larger than 128x128, but retain original size if smaller -- auto scaledicon = icon; -- if (icon.width() > 128 || icon.height() > 128) { -- scaledicon = icon.scaled(128, 128); -- } -- -- QUuid uuid = m_db->metadata()->findCustomIcon(scaledicon); -- if (uuid.isNull()) { -- uuid = QUuid::createUuid(); -- m_db->metadata()->addCustomIcon(uuid, scaledicon); -- updateTable(url, tr("Ok")); -- } else { -- updateTable(url, tr("Already Exists")); -- } -- -- // Set the icon on all the entries associated with this url -- for (const auto entry : m_urlToEntries.values(url)) { -- entry->setIcon(uuid); -- } -- } else { -- showFallbackMessage(true); -- updateTable(url, tr("Download Failed")); -- return; -- } --} -- --void IconDownloaderDialog::showFallbackMessage(bool state) --{ -- // Show fallback message if the option is not active -- bool show = state && !config()->get(Config::Security_IconDownloadFallback).toBool(); -- m_ui->fallbackLabel->setVisible(show); --} -- --void IconDownloaderDialog::updateProgressBar() --{ -- int total = m_urlToEntries.uniqueKeys().count(); -- int value = total - m_activeDownloaders.count(); -- m_ui->progressBar->setValue(value); -- m_ui->progressBar->setMaximum(total); -- m_ui->progressLabel->setText( -- tr("Downloading favicons (%1/%2)...").arg(QString::number(value), QString::number(total))); --} -- --void IconDownloaderDialog::updateCancelButton() --{ -- m_ui->cancelButton->setEnabled(!m_activeDownloaders.isEmpty()); --} -- --void IconDownloaderDialog::updateTable(const QString& url, const QString& message) --{ -- for (int i = 0; i < m_dataModel->rowCount(); ++i) { -- if (m_dataModel->item(i, 0)->text() == url) { -- m_dataModel->item(i, 1)->setText(message); -- } -- } --} -- --void IconDownloaderDialog::abortDownloads() --{ -- for (auto* downloader : m_activeDownloaders) { -- delete downloader; -- } -- m_activeDownloaders.clear(); -- updateProgressBar(); -- updateCancelButton(); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.h keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.h ---- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --/* -- * Copyright (C) 2019 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ICONDOWNLOADERDIALOG_H --#define KEEPASSX_ICONDOWNLOADERDIALOG_H -- --#include --#include --#include -- --#include "gui/MessageWidget.h" -- --class Database; --class Entry; --class CustomIconModel; --class IconDownloader; -- --namespace Ui --{ -- class IconDownloaderDialog; --} -- --class IconDownloaderDialog : public QDialog --{ -- Q_OBJECT -- --public: -- explicit IconDownloaderDialog(QWidget* parent = nullptr); -- ~IconDownloaderDialog() override; -- -- void downloadFavicons(const QSharedPointer& database, const QList& entries, bool force = false); -- --private slots: -- void downloadFinished(const QString& url, const QImage& icon); -- void abortDownloads(); -- --private: -- IconDownloader* createDownloader(const QString& url); -- -- void showFallbackMessage(bool state); -- void updateTable(const QString& url, const QString& message); -- void updateProgressBar(); -- void updateCancelButton(); -- -- QScopedPointer m_ui; -- QStandardItemModel* m_dataModel; -- QSharedPointer m_db; -- QMultiMap m_urlToEntries; -- QList m_activeDownloaders; -- QMutex m_mutex; -- -- Q_DISABLE_COPY(IconDownloaderDialog) --}; -- --#endif // KEEPASSX_ICONDOWNLOADERDIALOG_H -diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.ui keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.ui ---- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,159 +0,0 @@ -- -- -- IconDownloaderDialog -- -- -- -- 0 -- 0 -- 453 -- 339 -- -- -- -- -- 0 -- 0 -- -- -- -- Download Favicons -- -- -- -- -- -- -- 75 -- true -- -- -- -- Downloading favicon 0/0... -- -- -- -- -- -- -- QLayout::SetDefaultConstraint -- -- -- -- -- 0 -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 100 -- 16777215 -- -- -- -- Cancel -- -- -- -- -- -- -- -- -- -- 75 -- false -- true -- -- -- -- Having trouble downloading icons? --You can enable the DuckDuckGo website icon service in the security section of the application settings. -- -- -- false -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- true -- -- -- -- -- -- -- Qt::ScrollBarAsNeeded -- -- -- Qt::ScrollBarAlwaysOff -- -- -- QAbstractScrollArea::AdjustToContents -- -- -- QAbstractItemView::NoEditTriggers -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::SelectRows -- -- -- Qt::ElideNone -- -- -- true -- -- -- false -- -- -- 20 -- -- -- 20 -- -- -- true -- -- -- true -- -- -- false -- -- -- -- -- -- -- Close -- -- -- true -- -- -- -- -- -- -- -- cancelButton -- tableView -- closeButton -- -- -- -- -diff -urNr keepassxc-2.6.4-orig/src/gui/IconModels.cpp keepassxc-2.6.4-patched/src/gui/IconModels.cpp ---- keepassxc-2.6.4-orig/src/gui/IconModels.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/IconModels.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,106 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "IconModels.h" -- --#include -- --#include "core/DatabaseIcons.h" -- --DefaultIconModel::DefaultIconModel(QObject* parent) -- : QAbstractListModel(parent) --{ --} -- --int DefaultIconModel::rowCount(const QModelIndex& parent) const --{ -- if (!parent.isValid()) { -- return databaseIcons()->count(); -- } else { -- return 0; -- } --} -- --QVariant DefaultIconModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- Q_ASSERT(index.row() < databaseIcons()->count()); -- -- if (role == Qt::DecorationRole) { -- return databaseIcons()->icon(index.row(), IconSize::Medium); -- } -- -- return QVariant(); --} -- --CustomIconModel::CustomIconModel(QObject* parent) -- : QAbstractListModel(parent) --{ --} -- --void CustomIconModel::setIcons(const QHash& icons, const QList& iconsOrder) --{ -- beginResetModel(); -- -- m_icons = icons; -- m_iconsOrder = iconsOrder; -- Q_ASSERT(m_icons.count() == m_iconsOrder.count()); -- -- endResetModel(); --} -- --int CustomIconModel::rowCount(const QModelIndex& parent) const --{ -- if (!parent.isValid()) { -- return m_icons.size(); -- } else { -- return 0; -- } --} -- --QVariant CustomIconModel::data(const QModelIndex& index, int role) const --{ -- if (!index.isValid()) { -- return QVariant(); -- } -- -- if (role == Qt::DecorationRole) { -- QUuid uuid = uuidFromIndex(index); -- return m_icons.value(uuid); -- } -- -- return QVariant(); --} -- --QUuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const --{ -- Q_ASSERT(index.isValid()); -- -- return m_iconsOrder.value(index.row()); --} -- --QModelIndex CustomIconModel::indexFromUuid(const QUuid& uuid) const --{ -- int idx = m_iconsOrder.indexOf(uuid); -- if (idx > -1) { -- return index(idx, 0); -- } -- return {}; --} -diff -urNr keepassxc-2.6.4-orig/src/gui/IconModels.h keepassxc-2.6.4-patched/src/gui/IconModels.h ---- keepassxc-2.6.4-orig/src/gui/IconModels.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/IconModels.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_ICONMODELS_H --#define KEEPASSX_ICONMODELS_H -- --#include --#include -- --class DefaultIconModel : public QAbstractListModel --{ -- Q_OBJECT -- --public: -- explicit DefaultIconModel(QObject* parent = nullptr); -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; --}; -- --class CustomIconModel : public QAbstractListModel --{ -- Q_OBJECT -- --public: -- explicit CustomIconModel(QObject* parent = nullptr); -- -- int rowCount(const QModelIndex& parent = QModelIndex()) const override; -- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; -- void setIcons(const QHash& icons, const QList& iconsOrder); -- QUuid uuidFromIndex(const QModelIndex& index) const; -- QModelIndex indexFromUuid(const QUuid& uuid) const; -- --private: -- QHash m_icons; -- QList m_iconsOrder; --}; -- --#endif // KEEPASSX_ICONMODELS_H -diff -urNr keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.cpp keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,65 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "KeePass1OpenWidget.h" --#include "ui_DatabaseOpenWidget.h" -- --#include --#include -- --#include "core/Database.h" --#include "core/Metadata.h" --#include "format/KeePass1Reader.h" --#include "gui/MessageBox.h" -- --KeePass1OpenWidget::KeePass1OpenWidget(QWidget* parent) -- : DatabaseOpenWidget(parent) --{ -- m_ui->labelHeadline->setText(tr("Import KeePass1 Database")); --} -- --void KeePass1OpenWidget::openDatabase() --{ -- KeePass1Reader reader; -- -- QString password; -- QString keyFileName = m_ui->keyFileLineEdit->text(); -- -- if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) { -- password = m_ui->editPassword->text(); -- } -- -- QFile file(m_filename); -- if (!file.open(QIODevice::ReadOnly)) { -- m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(file.errorString()), -- MessageWidget::Error); -- return; -- } -- -- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); -- m_db = reader.readDatabase(&file, password, keyFileName); -- QApplication::restoreOverrideCursor(); -- -- if (m_db) { -- m_db->metadata()->setName(QFileInfo(m_filename).completeBaseName()); -- emit dialogFinished(true); -- clearForms(); -- } else { -- m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(reader.errorString()), -- MessageWidget::Error); -- } --} -diff -urNr keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.h keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.h ---- keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,34 +0,0 @@ --/* -- * Copyright (C) 2012 Felix Geyer -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_KEEPASS1OPENWIDGET_H --#define KEEPASSX_KEEPASS1OPENWIDGET_H -- --#include "gui/DatabaseOpenWidget.h" -- --class KeePass1OpenWidget : public DatabaseOpenWidget --{ -- Q_OBJECT -- --public: -- explicit KeePass1OpenWidget(QWidget* parent = nullptr); -- --protected: -- void openDatabase() override; --}; -- --#endif // KEEPASSX_KEEPASS1OPENWIDGET_H -diff -urNr keepassxc-2.6.4-orig/src/gui/KMessageWidget.cpp keepassxc-2.6.4-patched/src/gui/KMessageWidget.cpp ---- keepassxc-2.6.4-orig/src/gui/KMessageWidget.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/KMessageWidget.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,487 +0,0 @@ --/* This file is part of the KDE libraries -- * -- * Copyright (c) 2011 Aurélien Gâteau -- * Copyright (c) 2014 Dominik Haumann -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -- * 02110-1301 USA -- */ --#include "KMessageWidget.h" -- --#include "core/Resources.h" --#include "core/Global.h" -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --//--------------------------------------------------------------------- --// KMessageWidgetPrivate --//--------------------------------------------------------------------- --class KMessageWidgetPrivate --{ --public: -- void init(KMessageWidget *); -- -- KMessageWidget *q; -- QFrame *content; -- QLabel *iconLabel; -- QLabel *textLabel; -- QToolButton *closeButton; -- QTimeLine *timeLine; -- QIcon icon; -- QPixmap closeButtonPixmap; -- -- KMessageWidget::MessageType messageType; -- bool wordWrap; -- QList buttons; -- QPixmap contentSnapShot; -- -- void createLayout(); -- void updateSnapShot(); -- void updateLayout(); -- void slotTimeLineChanged(qreal); -- void slotTimeLineFinished(); -- -- int bestContentHeight() const; --}; -- --void KMessageWidgetPrivate::init(KMessageWidget *q_ptr) --{ -- q = q_ptr; -- -- q->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); -- -- timeLine = new QTimeLine(500, q); -- QObject::connect(timeLine, SIGNAL(valueChanged(qreal)), q, SLOT(slotTimeLineChanged(qreal))); -- QObject::connect(timeLine, SIGNAL(finished()), q, SLOT(slotTimeLineFinished())); -- -- content = new QFrame(q); -- content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); -- -- wordWrap = false; -- -- iconLabel = new QLabel(content); -- iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); -- iconLabel->hide(); -- -- textLabel = new QLabel(content); -- textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); -- textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); -- QObject::connect(textLabel, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString))); -- QObject::connect(textLabel, SIGNAL(linkHovered(QString)), q, SIGNAL(linkHovered(QString))); -- -- QAction *closeAction = new QAction(q); -- closeAction->setText(KMessageWidget::tr("&Close")); -- closeAction->setToolTip(KMessageWidget::tr("Close message")); -- closeAction->setIcon(Resources::instance()->icon("message-close")); -- -- QObject::connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(animatedHide())); -- -- closeButton = new QToolButton(content); -- closeButton->setAutoRaise(true); -- closeButton->setDefaultAction(closeAction); -- closeButtonPixmap = QPixmap(closeButton->icon().pixmap(closeButton->icon().actualSize(QSize(16, 16)))); -- -- q->setMessageType(KMessageWidget::Information); --} -- --void KMessageWidgetPrivate::createLayout() --{ -- delete content->layout(); -- -- content->resize(q->size()); -- -- qDeleteAll(buttons); -- buttons.clear(); -- -- const auto actions = q->actions(); -- for (QAction *action: actions) { -- QToolButton *button = new QToolButton(content); -- button->setDefaultAction(action); -- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); -- buttons.append(button); -- } -- -- // AutoRaise reduces visual clutter, but we don't want to turn it on if -- // there are other buttons, otherwise the close button will look different -- // from the others. -- closeButton->setAutoRaise(buttons.isEmpty()); -- -- if (wordWrap) { -- QGridLayout *layout = new QGridLayout(content); -- // Set alignment to make sure icon does not move down if text wraps -- layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop); -- layout->addWidget(textLabel, 0, 1); -- -- QHBoxLayout *buttonLayout = new QHBoxLayout; -- buttonLayout->addStretch(); -- for (QToolButton* button: asConst(buttons)) { -- // For some reason, calling show() is necessary if wordwrap is true, -- // otherwise the buttons do not show up. It is not needed if -- // wordwrap is false. -- button->show(); -- buttonLayout->addWidget(button); -- } -- buttonLayout->addWidget(closeButton); -- layout->addItem(buttonLayout, 1, 0, 1, 2); -- } else { -- QHBoxLayout *layout = new QHBoxLayout(content); -- layout->addWidget(iconLabel); -- layout->addWidget(textLabel); -- -- for (QToolButton* button: asConst(buttons)) { -- layout->addWidget(button); -- } -- -- layout->addWidget(closeButton); -- }; -- -- if (q->isVisible()) { -- q->setFixedHeight(content->sizeHint().height()); -- } -- q->updateGeometry(); --} -- --void KMessageWidgetPrivate::updateLayout() --{ -- if (content->layout()) { -- createLayout(); -- } --} -- --void KMessageWidgetPrivate::updateSnapShot() --{ -- // Attention: updateSnapShot calls QWidget::render(), which causes the whole -- // window layouts to be activated. Calling this method from resizeEvent() -- // can lead to infinite recursion, see: -- // https://bugs.kde.org/show_bug.cgi?id=311336 -- contentSnapShot = QPixmap(content->size() * q->devicePixelRatio()); -- contentSnapShot.setDevicePixelRatio(q->devicePixelRatio()); -- contentSnapShot.fill(Qt::transparent); -- content->render(&contentSnapShot, QPoint(), QRegion(), QWidget::DrawChildren); --} -- --void KMessageWidgetPrivate::slotTimeLineChanged(qreal value) --{ -- q->setFixedHeight(qMin(value * 2, qreal(1.0)) * content->height()); -- q->update(); --} -- --void KMessageWidgetPrivate::slotTimeLineFinished() --{ -- if (timeLine->direction() == QTimeLine::Forward) { -- // Show -- // We set the whole geometry here, because it may be wrong if a -- // KMessageWidget is shown right when the toplevel window is created. -- content->setGeometry(0, 0, q->width(), bestContentHeight()); -- -- // notify about finished animation -- emit q->showAnimationFinished(); -- } else { -- // hide and notify about finished animation -- q->hide(); -- emit q->hideAnimationFinished(); -- } --} -- --int KMessageWidgetPrivate::bestContentHeight() const --{ -- int height = content->heightForWidth(q->width()); -- if (height == -1) { -- height = content->sizeHint().height(); -- } -- return height; --} -- --//--------------------------------------------------------------------- --// KMessageWidget --//--------------------------------------------------------------------- --KMessageWidget::KMessageWidget(QWidget *parent) --: QFrame(parent) --, d(new KMessageWidgetPrivate) --{ -- d->init(this); --} -- --KMessageWidget::KMessageWidget(const QString &text, QWidget *parent) --: QFrame(parent) --, d(new KMessageWidgetPrivate) --{ -- d->init(this); -- setText(text); --} -- --KMessageWidget::~KMessageWidget() --{ -- delete d; --} -- --QString KMessageWidget::text() const --{ -- return d->textLabel->text(); --} -- --void KMessageWidget::setText(const QString &text) --{ -- d->textLabel->setText(text); -- updateGeometry(); --} -- --KMessageWidget::MessageType KMessageWidget::messageType() const --{ -- return d->messageType; --} -- --void KMessageWidget::setMessageType(KMessageWidget::MessageType type) --{ -- d->messageType = type; -- QColor bg0, bg1, bg2, border; -- QColor fg = QColor(238, 238, 238); -- switch (type) { -- case Positive: -- bg1.setRgb(37, 163, 83); -- break; -- case Information: -- bg1.setRgb(24, 187, 242); -- break; -- case Warning: -- bg1.setRgb(252, 193, 57); -- fg = QColor(48, 48, 48); -- break; -- case Error: -- bg1.setRgb(198, 69, 21); -- break; -- } -- -- // Colors -- bg0 = bg1.lighter(105); -- bg2 = bg1.darker(105); -- border = bg1.darker(115); -- -- // Tint close icon -- auto closeButtonPixmap = d->closeButtonPixmap; -- QPainter painter; -- painter.begin(&closeButtonPixmap); -- painter.setRenderHints(QPainter::HighQualityAntialiasing); -- painter.setCompositionMode(QPainter::CompositionMode_SourceIn); -- painter.fillRect(QRect(0, 0, 16, 16), fg); -- painter.end(); -- d->closeButton->setIcon(closeButtonPixmap); -- d->closeButton->setStyleSheet(QStringLiteral("QToolButton {" -- " background: transparent;" -- " border-radius: 2px;" -- " border: none; }" -- "QToolButton:hover, QToolButton:focus {" -- " border: 1px solid %1; }").arg(fg.name())); -- -- d->content->setStyleSheet( -- QStringLiteral(".QFrame {" -- "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," -- " stop: 0 %1," -- " stop: 0.1 %2," -- " stop: 1.0 %3);" -- " border-radius: 2px;" -- " border: 1px solid %4;" -- " margin: %5px;" -- " padding: 5px;" -- "}" -- ".QLabel { color: %6; }" -- ) -- .arg(bg0.name(), -- bg1.name(), -- bg2.name(), -- border.name()) -- // DefaultFrameWidth returns the size of the external margin + border width. We know our border is 1px, -- // so we subtract this from the frame normal QStyle FrameWidth to get our margin -- .arg(style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this) - 1) -- .arg(fg.name()) -- ); --} -- --QSize KMessageWidget::sizeHint() const --{ -- ensurePolished(); -- return d->content->sizeHint(); --} -- --QSize KMessageWidget::minimumSizeHint() const --{ -- ensurePolished(); -- return d->content->minimumSizeHint(); --} -- --bool KMessageWidget::event(QEvent *event) --{ -- if (event->type() == QEvent::Polish && !d->content->layout()) { -- d->createLayout(); -- } -- return QFrame::event(event); --} -- --void KMessageWidget::resizeEvent(QResizeEvent *event) --{ -- QFrame::resizeEvent(event); -- -- if (d->timeLine->state() == QTimeLine::NotRunning) { -- d->content->resize(width(), d->bestContentHeight()); -- } --} -- --int KMessageWidget::heightForWidth(int width) const --{ -- ensurePolished(); -- return d->content->heightForWidth(width); --} -- --void KMessageWidget::paintEvent(QPaintEvent *event) --{ -- QFrame::paintEvent(event); -- if (d->timeLine->state() == QTimeLine::Running) { -- QPainter painter(this); -- painter.setOpacity(d->timeLine->currentValue() * d->timeLine->currentValue()); -- painter.drawPixmap(0, 0, d->contentSnapShot); -- } --} -- --bool KMessageWidget::wordWrap() const --{ -- return d->wordWrap; --} -- --void KMessageWidget::setWordWrap(bool wordWrap) --{ -- d->wordWrap = wordWrap; -- d->textLabel->setWordWrap(wordWrap); -- QSizePolicy policy = sizePolicy(); -- policy.setHeightForWidth(wordWrap); -- setSizePolicy(policy); -- d->updateLayout(); -- // Without this, when user does wordWrap -> !wordWrap -> wordWrap, a minimum -- // height is set, causing the widget to be too high. -- // Mostly visible in test programs. -- if (wordWrap) { -- setMinimumHeight(0); -- } --} -- --bool KMessageWidget::isCloseButtonVisible() const --{ -- return d->closeButton->isVisible(); --} -- --void KMessageWidget::setCloseButtonVisible(bool show) --{ -- d->closeButton->setVisible(show); -- updateGeometry(); --} -- --void KMessageWidget::addAction(QAction *action) --{ -- QFrame::addAction(action); -- d->updateLayout(); --} -- --void KMessageWidget::removeAction(QAction *action) --{ -- QFrame::removeAction(action); -- d->updateLayout(); --} -- --void KMessageWidget::animatedShow() --{ -- if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { -- show(); -- emit showAnimationFinished(); -- return; -- } -- -- if (isVisible()) { -- return; -- } -- -- QFrame::show(); -- setFixedHeight(0); -- int wantedHeight = d->bestContentHeight(); -- d->content->setGeometry(0, -wantedHeight, width(), wantedHeight); -- -- d->updateSnapShot(); -- -- d->timeLine->setDirection(QTimeLine::Forward); -- if (d->timeLine->state() == QTimeLine::NotRunning) { -- d->timeLine->start(); -- } --} -- --void KMessageWidget::animatedHide() --{ -- if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { -- hide(); -- emit hideAnimationFinished(); -- return; -- } -- -- if (!isVisible()) { -- hide(); -- return; -- } -- -- d->content->move(0, -d->content->height()); -- d->updateSnapShot(); -- -- d->timeLine->setDirection(QTimeLine::Backward); -- if (d->timeLine->state() == QTimeLine::NotRunning) { -- d->timeLine->start(); -- } --} -- --bool KMessageWidget::isHideAnimationRunning() const --{ -- return (d->timeLine->direction() == QTimeLine::Backward) -- && (d->timeLine->state() == QTimeLine::Running); --} -- --bool KMessageWidget::isShowAnimationRunning() const --{ -- return (d->timeLine->direction() == QTimeLine::Forward) -- && (d->timeLine->state() == QTimeLine::Running); --} -- --QIcon KMessageWidget::icon() const --{ -- return d->icon; --} -- --void KMessageWidget::setIcon(const QIcon &icon) --{ -- d->icon = icon; -- if (d->icon.isNull()) { -- d->iconLabel->hide(); -- } else { -- const int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize); -- d->iconLabel->setPixmap(d->icon.pixmap(size)); -- d->iconLabel->show(); -- } --} -- --#include "moc_KMessageWidget.cpp" -diff -urNr keepassxc-2.6.4-orig/src/gui/KMessageWidget.h keepassxc-2.6.4-patched/src/gui/KMessageWidget.h ---- keepassxc-2.6.4-orig/src/gui/KMessageWidget.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/KMessageWidget.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,342 +0,0 @@ --/* This file is part of the KDE libraries -- * -- * Copyright (c) 2011 Aurélien Gâteau -- * Copyright (c) 2014 Dominik Haumann -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -- * 02110-1301 USA -- */ --#ifndef KMESSAGEWIDGET_H --#define KMESSAGEWIDGET_H -- --#include -- --class KMessageWidgetPrivate; -- --/** -- * @short A widget to provide feedback or propose opportunistic interactions. -- * -- * KMessageWidget can be used to provide inline positive or negative -- * feedback, or to implement opportunistic interactions. -- * -- * As a feedback widget, KMessageWidget provides a less intrusive alternative -- * to "OK Only" message boxes. If you want to avoid a modal KMessageBox, -- * consider using KMessageWidget instead. -- * -- * Examples of KMessageWidget look as follows, all of them having an icon set -- * with setIcon(), and the first three show a close button: -- * -- * \image html kmessagewidget.png "KMessageWidget with different message types" -- * -- * Negative feedback -- * -- * The KMessageWidget can be used as a secondary indicator of failure: the -- * first indicator is usually the fact the action the user expected to happen -- * did not happen. -- * -- * Example: User fills a form, clicks "Submit". -- * -- * @li Expected feedback: form closes -- * @li First indicator of failure: form stays there -- * @li Second indicator of failure: a KMessageWidget appears on top of the -- * form, explaining the error condition -- * -- * When used to provide negative feedback, KMessageWidget should be placed -- * close to its context. In the case of a form, it should appear on top of the -- * form entries. -- * -- * KMessageWidget should get inserted in the existing layout. Space should not -- * be reserved for it, otherwise it becomes "dead space", ignored by the user. -- * KMessageWidget should also not appear as an overlay to prevent blocking -- * access to elements the user needs to interact with to fix the failure. -- * -- * Positive feedback -- * -- * KMessageWidget can be used for positive feedback but it shouldn't be -- * overused. It is often enough to provide feedback by simply showing the -- * results of an action. -- * -- * Examples of acceptable uses: -- * -- * @li Confirm success of "critical" transactions -- * @li Indicate completion of background tasks -- * -- * Example of unadapted uses: -- * -- * @li Indicate successful saving of a file -- * @li Indicate a file has been successfully removed -- * -- * Opportunistic interaction -- * -- * Opportunistic interaction is the situation where the application suggests to -- * the user an action he could be interested in perform, either based on an -- * action the user just triggered or an event which the application noticed. -- * -- * Example of acceptable uses: -- * -- * @li A browser can propose remembering a recently entered password -- * @li A music collection can propose ripping a CD which just got inserted -- * @li A chat application may notify the user a "special friend" just connected -- * -- * @author Aurélien Gâteau -- * @since 4.7 -- */ --class KMessageWidget : public QFrame --{ -- Q_OBJECT -- Q_ENUMS(MessageType) -- -- Q_PROPERTY(QString text READ text WRITE setText) -- Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap) -- Q_PROPERTY(bool closeButtonVisible READ isCloseButtonVisible WRITE setCloseButtonVisible) -- Q_PROPERTY(MessageType messageType READ messageType WRITE setMessageType) -- Q_PROPERTY(QIcon icon READ icon WRITE setIcon) --public: -- -- /** -- * Available message types. -- * The background colors are chosen depending on the message type. -- */ -- enum MessageType { -- Positive, -- Information, -- Warning, -- Error -- }; -- -- /** -- * Constructs a KMessageWidget with the specified @p parent. -- */ -- explicit KMessageWidget(QWidget *parent = 0); -- -- /** -- * Constructs a KMessageWidget with the specified @p parent and -- * contents @p text. -- */ -- explicit KMessageWidget(const QString &text, QWidget *parent = 0); -- -- /** -- * Destructor. -- */ -- ~KMessageWidget(); -- -- /** -- * Get the text of this message widget. -- * @see setText() -- */ -- QString text() const; -- -- /** -- * Check whether word wrap is enabled. -- * -- * If word wrap is enabled, the message widget wraps the displayed text -- * as required to the available width of the widget. This is useful to -- * avoid breaking widget layouts. -- * -- * @see setWordWrap() -- */ -- bool wordWrap() const; -- -- /** -- * Check whether the close button is visible. -- * -- * @see setCloseButtonVisible() -- */ -- bool isCloseButtonVisible() const; -- -- /** -- * Get the type of this message. -- * By default, the type is set to KMessageWidget::Information. -- * -- * @see KMessageWidget::MessageType, setMessageType() -- */ -- MessageType messageType() const; -- -- /** -- * Add @p action to the message widget. -- * For each action a button is added to the message widget in the -- * order the actions were added. -- * -- * @param action the action to add -- * @see removeAction(), QWidget::actions() -- */ -- void addAction(QAction *action); -- -- /** -- * Remove @p action from the message widget. -- * -- * @param action the action to remove -- * @see KMessageWidget::MessageType, addAction(), setMessageType() -- */ -- void removeAction(QAction *action); -- -- /** -- * Returns the preferred size of the message widget. -- */ -- QSize sizeHint() const Q_DECL_OVERRIDE; -- -- /** -- * Returns the minimum size of the message widget. -- */ -- QSize minimumSizeHint() const Q_DECL_OVERRIDE; -- -- /** -- * Returns the required height for @p width. -- * @param width the width in pixels -- */ -- int heightForWidth(int width) const Q_DECL_OVERRIDE; -- -- /** -- * The icon shown on the left of the text. By default, no icon is shown. -- * @since 4.11 -- */ -- QIcon icon() const; -- -- /** -- * Check whether the hide animation started by calling animatedHide() -- * is still running. If animations are disabled, this function always -- * returns @e false. -- * -- * @see animatedHide(), hideAnimationFinished() -- * @since 5.0 -- */ -- bool isHideAnimationRunning() const; -- -- /** -- * Check whether the show animation started by calling animatedShow() -- * is still running. If animations are disabled, this function always -- * returns @e false. -- * -- * @see animatedShow(), showAnimationFinished() -- * @since 5.0 -- */ -- bool isShowAnimationRunning() const; -- --public slots: -- /** -- * Set the text of the message widget to @p text. -- * If the message widget is already visible, the text changes on the fly. -- * -- * @param text the text to display, rich text is allowed -- * @see text() -- */ -- void setText(const QString &text); -- -- /** -- * Set word wrap to @p wordWrap. If word wrap is enabled, the text() -- * of the message widget is wrapped to fit the available width. -- * If word wrap is disabled, the message widget's minimum size is -- * such that the entire text fits. -- * -- * @param wordWrap disable/enable word wrap -- * @see wordWrap() -- */ -- void setWordWrap(bool wordWrap); -- -- /** -- * Set the visibility of the close button. If @p visible is @e true, -- * a close button is shown that calls animatedHide() if clicked. -- * -- * @see closeButtonVisible(), animatedHide() -- */ -- void setCloseButtonVisible(bool visible); -- -- /** -- * Set the message type to @p type. -- * By default, the message type is set to KMessageWidget::Information. -- * -- * @see messageType(), KMessageWidget::MessageType -- */ -- void setMessageType(KMessageWidget::MessageType type); -- -- /** -- * Show the widget using an animation. -- */ -- void animatedShow(); -- -- /** -- * Hide the widget using an animation. -- */ -- void animatedHide(); -- -- /** -- * Define an icon to be shown on the left of the text -- * @since 4.11 -- */ -- void setIcon(const QIcon &icon); -- --signals: -- /** -- * This signal is emitted when the user clicks a link in the text label. -- * The URL referred to by the href anchor is passed in contents. -- * @param contents text of the href anchor -- * @see QLabel::linkActivated() -- * @since 4.10 -- */ -- void linkActivated(const QString &contents); -- -- /** -- * This signal is emitted when the user hovers over a link in the text label. -- * The URL referred to by the href anchor is passed in contents. -- * @param contents text of the href anchor -- * @see QLabel::linkHovered() -- * @since 4.11 -- */ -- void linkHovered(const QString &contents); -- -- /** -- * This signal is emitted when the hide animation is finished, started by -- * calling animatedHide(). If animations are disabled, this signal is -- * emitted immediately after the message widget got hidden. -- * -- * @note This signal is @e not emitted if the widget was hidden by -- * calling hide(), so this signal is only useful in conjunction -- * with animatedHide(). -- * -- * @see animatedHide() -- * @since 5.0 -- */ -- void hideAnimationFinished(); -- -- /** -- * This signal is emitted when the show animation is finished, started by -- * calling animatedShow(). If animations are disabled, this signal is -- * emitted immediately after the message widget got shown. -- * -- * @note This signal is @e not emitted if the widget was shown by -- * calling show(), so this signal is only useful in conjunction -- * with animatedShow(). -- * -- * @see animatedShow() -- * @since 5.0 -- */ -- void showAnimationFinished(); -- --protected: -- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; -- -- bool event(QEvent *event) Q_DECL_OVERRIDE; -- -- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; -- --private: -- KMessageWidgetPrivate *const d; -- friend class KMessageWidgetPrivate; -- -- Q_PRIVATE_SLOT(d, void slotTimeLineChanged(qreal)) -- Q_PRIVATE_SLOT(d, void slotTimeLineFinished()) --}; -- --#endif /* KMESSAGEWIDGET_H */ -diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.cpp keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.cpp ---- keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,64 +0,0 @@ --/* -- * This file was generated by qdbusxml2cpp version 0.8 -- * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp -- * org.keepassxc.MainWindow.xml -- * -- * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. -- * -- * This is an auto-generated file. -- * Do not edit! All changes made to it will be lost. -- */ -- --#include "MainWindowAdaptor.h" --#include --#include --#include --#include --#include --#include --#include -- --/* -- * Implementation of adaptor class MainWindowAdaptor -- */ -- --MainWindowAdaptor::MainWindowAdaptor(QObject* parent) -- : QDBusAbstractAdaptor(parent) --{ -- setAutoRelaySignals(true); --} -- --MainWindowAdaptor::~MainWindowAdaptor() --{ --} -- --void MainWindowAdaptor::appExit() --{ -- QMetaObject::invokeMethod(parent(), "appExit"); --} -- --void MainWindowAdaptor::closeAllDatabases() --{ -- QMetaObject::invokeMethod(parent(), "closeAllDatabases"); --} -- --void MainWindowAdaptor::lockAllDatabases() --{ -- QMetaObject::invokeMethod(parent(), "lockAllDatabases"); --} -- --void MainWindowAdaptor::openDatabase(const QString& fileName) --{ -- QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName)); --} -- --void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw) --{ -- QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw)); --} -- --void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) --{ -- QMetaObject::invokeMethod( -- parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw), Q_ARG(QString, keyFile)); --} -diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.h keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.h ---- keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,69 +0,0 @@ --/* -- * This file was generated by qdbusxml2cpp version 0.8 -- * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp -- * org.keepassxc.MainWindow.xml -- * -- * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. -- * -- * This is an auto-generated file. -- * This file may have been hand-edited. Look for HAND-EDIT comments -- * before re-generating it. -- */ -- --#ifndef MAINWINDOWADAPTOR_H --#define MAINWINDOWADAPTOR_H -- --#include --#include --QT_BEGIN_NAMESPACE --class QByteArray; --template class QList; --template class QMap; --class QString; --class QStringList; --class QVariant; --QT_END_NAMESPACE -- --/* -- * Adaptor class for interface org.keepassxc.MainWindow -- */ --class MainWindowAdaptor : public QDBusAbstractAdaptor --{ -- Q_OBJECT -- Q_CLASSINFO("D-Bus Interface", "org.keepassxc.MainWindow") -- Q_CLASSINFO("D-Bus Introspection", -- "" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- " \n" -- "") --public: -- MainWindowAdaptor(QObject* parent); -- virtual ~MainWindowAdaptor(); -- --public: --public slots: -- void appExit(); -- void closeAllDatabases(); -- void lockAllDatabases(); -- void openDatabase(const QString& fileName); -- void openDatabase(const QString& fileName, const QString& pw); -- void openDatabase(const QString& fileName, const QString& pw, const QString& keyFile); --signals: --}; -- --#endif -diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.cpp keepassxc-2.6.4-patched/src/gui/MainWindow.cpp ---- keepassxc-2.6.4-orig/src/gui/MainWindow.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MainWindow.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1836 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "MainWindow.h" --#include "ui_MainWindow.h" -- --#include --#include --#include --#include --#include --#include --#include -- --#include "config-keepassx.h" -- --#include "autotype/AutoType.h" --#include "core/Config.h" --#include "core/InactivityTimer.h" --#include "core/Metadata.h" --#include "core/Resources.h" --#include "core/Tools.h" --#include "gui/AboutDialog.h" --#include "gui/DatabaseWidget.h" --#include "gui/MessageBox.h" --#include "gui/SearchWidget.h" --#include "gui/osutils/OSUtils.h" --#include "keys/CompositeKey.h" --#include "keys/FileKey.h" --#include "keys/PasswordKey.h" -- --#ifdef Q_OS_MACOS --#include "gui/osutils/macutils/MacUtils.h" --#ifdef WITH_XC_TOUCHID --#include "touchid/TouchID.h" --#endif --#endif -- --#ifdef WITH_XC_UPDATECHECK --#include "gui/UpdateCheckDialog.h" --#include "updatecheck/UpdateChecker.h" --#endif -- --#ifdef WITH_XC_SSHAGENT --#include "sshagent/AgentSettingsPage.h" --#include "sshagent/SSHAgent.h" --#endif --#ifdef WITH_XC_KEESHARE --#include "keeshare/KeeShare.h" --#include "keeshare/SettingsPageKeeShare.h" --#endif -- --#ifdef WITH_XC_FDOSECRETS --#include "fdosecrets/FdoSecretsPlugin.h" --#endif -- --#ifdef WITH_XC_YUBIKEY --#include "keys/drivers/YubiKey.h" --#endif -- --#ifdef WITH_XC_BROWSER --#include "browser/BrowserService.h" --#include "browser/BrowserSettingsPage.h" --#endif -- --#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) --#include "gui/MainWindowAdaptor.h" --#include --#include --#endif -- --const QString MainWindow::BaseWindowTitle = "KeePassXC"; -- --MainWindow* g_MainWindow = nullptr; --MainWindow* getMainWindow() --{ -- return g_MainWindow; --} -- --MainWindow::MainWindow() -- : m_ui(new Ui::MainWindow()) --{ -- g_MainWindow = this; -- -- m_ui->setupUi(this); -- --#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) -- new MainWindowAdaptor(this); -- QDBusConnection dbus = QDBusConnection::sessionBus(); -- dbus.registerObject("/keepassxc", this); -- dbus.registerService("org.keepassxc.KeePassXC.MainWindow"); --#endif -- -- setAcceptDrops(true); -- -- if (config()->get(Config::GUI_CompactMode).toBool()) { -- m_ui->toolBar->setIconSize({20, 20}); -- } -- -- // Setup the search widget in the toolbar -- m_searchWidget = new SearchWidget(); -- m_searchWidget->connectSignals(m_actionMultiplexer); -- m_searchWidgetAction = m_ui->toolBar->addWidget(m_searchWidget); -- m_searchWidgetAction->setEnabled(false); -- -- m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size(); -- -- m_entryContextMenu = new QMenu(this); -- m_entryContextMenu->addAction(m_ui->actionEntryCopyUsername); -- m_entryContextMenu->addAction(m_ui->actionEntryCopyPassword); -- m_entryContextMenu->addAction(m_ui->menuEntryCopyAttribute->menuAction()); -- m_entryContextMenu->addAction(m_ui->menuEntryTotp->menuAction()); -- m_entryContextMenu->addSeparator(); -- m_entryContextMenu->addAction(m_ui->actionEntryAutoType); -- m_entryContextMenu->addAction(m_ui->menuEntryAutoTypeWithSequence->menuAction()); -- m_entryContextMenu->addSeparator(); -- m_entryContextMenu->addAction(m_ui->actionEntryEdit); -- m_entryContextMenu->addAction(m_ui->actionEntryClone); -- m_entryContextMenu->addAction(m_ui->actionEntryDelete); -- m_entryContextMenu->addAction(m_ui->actionEntryNew); -- m_entryContextMenu->addSeparator(); -- m_entryContextMenu->addAction(m_ui->actionEntryMoveUp); -- m_entryContextMenu->addAction(m_ui->actionEntryMoveDown); -- m_entryContextMenu->addSeparator(); -- m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl); -- m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon); -- -- m_entryNewContextMenu = new QMenu(this); -- m_entryNewContextMenu->addAction(m_ui->actionEntryNew); -- -- restoreGeometry(config()->get(Config::GUI_MainWindowGeometry).toByteArray()); -- restoreState(config()->get(Config::GUI_MainWindowState).toByteArray()); --#ifdef WITH_XC_BROWSER -- m_ui->settingsWidget->addSettingsPage(new BrowserSettingsPage()); -- connect(m_ui->tabWidget, &DatabaseTabWidget::databaseLocked, browserService(), &BrowserService::databaseLocked); -- connect(m_ui->tabWidget, &DatabaseTabWidget::databaseUnlocked, browserService(), &BrowserService::databaseUnlocked); -- connect(m_ui->tabWidget, -- &DatabaseTabWidget::activateDatabaseChanged, -- browserService(), -- &BrowserService::activeDatabaseChanged); -- connect( -- browserService(), &BrowserService::requestUnlock, m_ui->tabWidget, &DatabaseTabWidget::performBrowserUnlock); --#endif -- --#ifdef WITH_XC_SSHAGENT -- connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString))); -- connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool))); -- m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage()); -- -- m_entryContextMenu->addSeparator(); -- m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent); -- m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent); -- -- m_ui->actionEntryAddToAgent->setIcon(resources()->icon("utilities-terminal")); -- m_ui->actionEntryRemoveFromAgent->setIcon(resources()->icon("utilities-terminal")); --#endif -- -- m_ui->actionEntryAddToAgent->setVisible(false); -- m_ui->actionEntryRemoveFromAgent->setVisible(false); -- -- initViewMenu(); -- --#if defined(WITH_XC_KEESHARE) -- KeeShare::init(this); -- m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget)); -- connect(KeeShare::instance(), -- SIGNAL(sharingMessage(QString, MessageWidget::MessageType)), -- SLOT(displayGlobalMessage(QString, MessageWidget::MessageType))); --#endif -- --#ifdef WITH_XC_FDOSECRETS -- auto fdoSS = new FdoSecretsPlugin(m_ui->tabWidget); -- connect(fdoSS, &FdoSecretsPlugin::error, this, &MainWindow::showErrorMessage); -- connect(fdoSS, &FdoSecretsPlugin::requestSwitchToDatabases, this, &MainWindow::switchToDatabases); -- connect(fdoSS, &FdoSecretsPlugin::requestShowNotification, this, &MainWindow::displayDesktopNotification); -- fdoSS->updateServiceState(); -- m_ui->settingsWidget->addSettingsPage(fdoSS); --#endif -- --#ifdef WITH_XC_YUBIKEY -- connect(YubiKey::instance(), SIGNAL(userInteractionRequest()), SLOT(showYubiKeyPopup()), Qt::QueuedConnection); -- connect(YubiKey::instance(), SIGNAL(challengeCompleted()), SLOT(hideYubiKeyPopup()), Qt::QueuedConnection); --#endif -- -- setWindowIcon(resources()->applicationIcon()); -- m_ui->globalMessageWidget->hideMessage(); -- connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl); -- -- m_clearHistoryAction = new QAction(tr("Clear history"), m_ui->menuFile); -- m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases); -- connect(m_clearHistoryAction, SIGNAL(triggered()), this, SLOT(clearLastDatabases())); -- connect(m_lastDatabasesActions, SIGNAL(triggered(QAction*)), this, SLOT(openRecentDatabase(QAction*))); -- connect(m_ui->menuRecentDatabases, SIGNAL(aboutToShow()), this, SLOT(updateLastDatabasesMenu())); -- -- m_copyAdditionalAttributeActions = new QActionGroup(m_ui->menuEntryCopyAttribute); -- m_actionMultiplexer.connect( -- m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), SLOT(copyAttribute(QAction*))); -- connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), this, SLOT(updateCopyAttributesMenu())); -- -- Qt::Key globalAutoTypeKey = static_cast(config()->get(Config::GlobalAutoTypeKey).toInt()); -- Qt::KeyboardModifiers globalAutoTypeModifiers = -- static_cast(config()->get(Config::GlobalAutoTypeModifiers).toInt()); -- if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) { -- autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers); -- } -- -- m_ui->toolbarSeparator->setVisible(false); -- m_showToolbarSeparator = config()->get(Config::GUI_ApplicationTheme).toString() != "classic"; -- -- bool isAutoTypeAvailable = autoType()->isAvailable(); -- m_ui->actionEntryAutoType->setVisible(isAutoTypeAvailable); -- m_ui->actionEntryAutoTypeUsername->setVisible(isAutoTypeAvailable); -- m_ui->actionEntryAutoTypeUsernameEnter->setVisible(isAutoTypeAvailable); -- m_ui->actionEntryAutoTypePassword->setVisible(isAutoTypeAvailable); -- m_ui->actionEntryAutoTypePasswordEnter->setVisible(isAutoTypeAvailable); -- -- m_inactivityTimer = new InactivityTimer(this); -- connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockDatabasesAfterInactivity())); --#ifdef WITH_XC_TOUCHID -- m_touchIDinactivityTimer = new InactivityTimer(this); -- connect(m_touchIDinactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(forgetTouchIDAfterInactivity())); --#endif -- applySettingsChanges(); -- -- m_ui->actionDatabaseNew->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_N); -- setShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); -- setShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); -- setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs, Qt::CTRL + Qt::SHIFT + Qt::Key_S); -- setShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); -- m_ui->actionLockDatabases->setShortcut(Qt::CTRL + Qt::Key_L); -- setShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); -- setShortcut(m_ui->actionEntryNew, QKeySequence::New, Qt::CTRL + Qt::Key_N); -- m_ui->actionEntryEdit->setShortcut(Qt::CTRL + Qt::Key_E); -- m_ui->actionEntryDelete->setShortcut(Qt::CTRL + Qt::Key_D); -- m_ui->actionEntryDelete->setShortcut(Qt::Key_Delete); -- m_ui->actionEntryClone->setShortcut(Qt::CTRL + Qt::Key_K); -- m_ui->actionEntryTotp->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T); -- m_ui->actionEntryDownloadIcon->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_D); -- m_ui->actionEntryCopyTotp->setShortcut(Qt::CTRL + Qt::Key_T); -- m_ui->actionEntryMoveUp->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Up); -- m_ui->actionEntryMoveDown->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Down); -- m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); -- m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); -- m_ui->actionEntryAutoType->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V); -- m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U); -- m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U); -- -- // Prevent conflicts with global Mac shortcuts (force Control on all platforms) --#ifdef Q_OS_MAC -- auto modifier = Qt::META; --#else -- auto modifier = Qt::CTRL; --#endif -- m_ui->actionEntryAddToAgent->setShortcut(modifier + Qt::Key_H); -- m_ui->actionEntryRemoveFromAgent->setShortcut(modifier + Qt::SHIFT + Qt::Key_H); -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) -- // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus -- // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them -- m_ui->actionEntryNew->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryEdit->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryDelete->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryClone->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryTotp->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryDownloadIcon->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryCopyTotp->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryMoveUp->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryMoveDown->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryCopyUsername->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryCopyPassword->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryAutoType->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryOpenUrl->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryAddToAgent->setShortcutVisibleInContextMenu(true); -- m_ui->actionEntryRemoveFromAgent->setShortcutVisibleInContextMenu(true); --#endif -- -- connect(m_ui->menuEntries, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); -- connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); -- connect(m_entryContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); -- connect(m_entryContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); -- connect(m_entryNewContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); -- connect(m_entryNewContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); -- connect(m_ui->menuGroups, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); -- connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); -- -- // Control window state -- new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(minimizeOrHide())); -- new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow())); -- // Control database tabs -- new QShortcut(Qt::CTRL + Qt::Key_Tab, this, SLOT(selectNextDatabaseTab())); -- new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectNextDatabaseTab())); -- new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab, this, SLOT(selectPreviousDatabaseTab())); -- new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectPreviousDatabaseTab())); -- -- // Tab selection by number, Windows uses Ctrl, macOS uses Command, -- // and Linux uses Alt to emulate a browser-like experience -- auto dbTabModifier = Qt::CTRL; --#ifdef Q_OS_LINUX -- dbTabModifier = Qt::ALT; --#endif -- auto shortcut = new QShortcut(dbTabModifier + Qt::Key_1, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(0); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_2, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(1); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_3, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(2); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_4, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(3); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_5, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(4); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_6, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(5); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_7, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(6); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_8, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(7); }); -- shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this); -- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); }); -- -- m_ui->actionDatabaseNew->setIcon(resources()->icon("document-new")); -- m_ui->actionDatabaseOpen->setIcon(resources()->icon("document-open")); -- m_ui->menuRecentDatabases->setIcon(resources()->icon("document-open-recent")); -- m_ui->actionDatabaseSave->setIcon(resources()->icon("document-save")); -- m_ui->actionDatabaseSaveAs->setIcon(resources()->icon("document-save-as")); -- m_ui->actionDatabaseSaveBackup->setIcon(resources()->icon("document-save-copy")); -- m_ui->actionDatabaseClose->setIcon(resources()->icon("document-close")); -- m_ui->actionReports->setIcon(resources()->icon("reports")); -- m_ui->actionDatabaseSettings->setIcon(resources()->icon("document-edit")); -- m_ui->actionDatabaseSecurity->setIcon(resources()->icon("database-change-key")); -- m_ui->actionLockDatabases->setIcon(resources()->icon("database-lock")); -- m_ui->actionQuit->setIcon(resources()->icon("application-exit")); -- m_ui->actionDatabaseMerge->setIcon(resources()->icon("database-merge")); -- m_ui->menuImport->setIcon(resources()->icon("document-import")); -- m_ui->menuExport->setIcon(resources()->icon("document-export")); -- -- m_ui->actionEntryNew->setIcon(resources()->icon("entry-new")); -- m_ui->actionEntryClone->setIcon(resources()->icon("entry-clone")); -- m_ui->actionEntryEdit->setIcon(resources()->icon("entry-edit")); -- m_ui->actionEntryDelete->setIcon(resources()->icon("entry-delete")); -- m_ui->actionEntryAutoType->setIcon(resources()->icon("auto-type")); -- m_ui->menuEntryAutoTypeWithSequence->setIcon(resources()->icon("auto-type")); -- m_ui->actionEntryAutoTypeUsername->setIcon(resources()->icon("auto-type")); -- m_ui->actionEntryAutoTypeUsernameEnter->setIcon(resources()->icon("auto-type")); -- m_ui->actionEntryAutoTypePassword->setIcon(resources()->icon("auto-type")); -- m_ui->actionEntryAutoTypePasswordEnter->setIcon(resources()->icon("auto-type")); -- m_ui->actionEntryMoveUp->setIcon(resources()->icon("move-up")); -- m_ui->actionEntryMoveDown->setIcon(resources()->icon("move-down")); -- m_ui->actionEntryCopyUsername->setIcon(resources()->icon("username-copy")); -- m_ui->actionEntryCopyPassword->setIcon(resources()->icon("password-copy")); -- m_ui->actionEntryCopyURL->setIcon(resources()->icon("url-copy")); -- m_ui->actionEntryDownloadIcon->setIcon(resources()->icon("favicon-download")); -- m_ui->actionGroupSortAsc->setIcon(resources()->icon("sort-alphabetical-ascending")); -- m_ui->actionGroupSortDesc->setIcon(resources()->icon("sort-alphabetical-descending")); -- -- m_ui->actionGroupNew->setIcon(resources()->icon("group-new")); -- m_ui->actionGroupEdit->setIcon(resources()->icon("group-edit")); -- m_ui->actionGroupDelete->setIcon(resources()->icon("group-delete")); -- m_ui->actionGroupEmptyRecycleBin->setIcon(resources()->icon("group-empty-trash")); -- m_ui->actionEntryOpenUrl->setIcon(resources()->icon("web")); -- m_ui->actionGroupDownloadFavicons->setIcon(resources()->icon("favicon-download")); -- -- m_ui->actionSettings->setIcon(resources()->icon("configure")); -- m_ui->actionPasswordGenerator->setIcon(resources()->icon("password-generator")); -- -- m_ui->actionAbout->setIcon(resources()->icon("help-about")); -- m_ui->actionDonate->setIcon(resources()->icon("donate")); -- m_ui->actionBugReport->setIcon(resources()->icon("bugreport")); -- m_ui->actionGettingStarted->setIcon(resources()->icon("getting-started")); -- m_ui->actionUserGuide->setIcon(resources()->icon("user-guide")); -- m_ui->actionOnlineHelp->setIcon(resources()->icon("system-help")); -- m_ui->actionKeyboardShortcuts->setIcon(resources()->icon("keyboard-shortcuts")); -- m_ui->actionCheckForUpdates->setIcon(resources()->icon("system-software-update")); -- -- m_actionMultiplexer.connect( -- SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(setMenuActionState(DatabaseWidget::Mode))); -- m_actionMultiplexer.connect(SIGNAL(groupChanged()), this, SLOT(setMenuActionState())); -- m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), this, SLOT(setMenuActionState())); -- m_actionMultiplexer.connect(SIGNAL(groupContextMenuRequested(QPoint)), this, SLOT(showGroupContextMenu(QPoint))); -- m_actionMultiplexer.connect(SIGNAL(entryContextMenuRequested(QPoint)), this, SLOT(showEntryContextMenu(QPoint))); -- -- // Notify search when the active database changes or gets locked -- connect(m_ui->tabWidget, -- SIGNAL(activateDatabaseChanged(DatabaseWidget*)), -- m_searchWidget, -- SLOT(databaseChanged(DatabaseWidget*))); -- connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), m_searchWidget, SLOT(databaseChanged())); -- -- connect(m_ui->tabWidget, SIGNAL(tabNameChanged()), SLOT(updateWindowTitle())); -- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); -- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int))); -- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); -- connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); -- connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); -- connect(m_ui->tabWidget, SIGNAL(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility())); -- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); -- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); -- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateToolbarSeparatorVisibility())); -- connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges())); -- connect(m_ui->settingsWidget, SIGNAL(settingsReset()), SLOT(applySettingsChanges())); -- connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(switchToDatabases())); -- connect(m_ui->settingsWidget, SIGNAL(rejected()), SLOT(switchToDatabases())); -- -- connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(newDatabase())); -- connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase())); -- connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase())); -- connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs())); -- connect(m_ui->actionDatabaseSaveBackup, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseBackup())); -- connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeCurrentDatabaseTab())); -- connect(m_ui->actionDatabaseMerge, SIGNAL(triggered()), m_ui->tabWidget, SLOT(mergeDatabase())); -- connect(m_ui->actionDatabaseSecurity, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSecurity())); -- connect(m_ui->actionReports, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseReports())); -- connect(m_ui->actionDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSettings())); -- connect(m_ui->actionImportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importCsv())); -- connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importKeePass1Database())); -- connect(m_ui->actionImportOpVault, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importOpVaultDatabase())); -- connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv())); -- connect(m_ui->actionExportHtml, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToHtml())); -- connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, SLOT(lockDatabases())); -- connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(appExit())); -- -- m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); -- m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), SLOT(cloneEntry())); -- m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit())); -- m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteSelectedEntries())); -- -- m_actionMultiplexer.connect(m_ui->actionEntryTotp, SIGNAL(triggered()), SLOT(showTotp())); -- m_actionMultiplexer.connect(m_ui->actionEntrySetupTotp, SIGNAL(triggered()), SLOT(setupTotp())); -- -- m_actionMultiplexer.connect(m_ui->actionEntryCopyTotp, SIGNAL(triggered()), SLOT(copyTotp())); -- m_actionMultiplexer.connect(m_ui->actionEntryTotpQRCode, SIGNAL(triggered()), SLOT(showTotpKeyQrCode())); -- m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), SLOT(copyTitle())); -- m_actionMultiplexer.connect(m_ui->actionEntryMoveUp, SIGNAL(triggered()), SLOT(moveEntryUp())); -- m_actionMultiplexer.connect(m_ui->actionEntryMoveDown, SIGNAL(triggered()), SLOT(moveEntryDown())); -- m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername())); -- m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword())); -- m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), SLOT(copyURL())); -- m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), SLOT(copyNotes())); -- m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType())); -- m_actionMultiplexer.connect( -- m_ui->actionEntryAutoTypeUsername, SIGNAL(triggered()), SLOT(performAutoTypeUsername())); -- m_actionMultiplexer.connect( -- m_ui->actionEntryAutoTypeUsernameEnter, SIGNAL(triggered()), SLOT(performAutoTypeUsernameEnter())); -- m_actionMultiplexer.connect( -- m_ui->actionEntryAutoTypePassword, SIGNAL(triggered()), SLOT(performAutoTypePassword())); -- m_actionMultiplexer.connect( -- m_ui->actionEntryAutoTypePasswordEnter, SIGNAL(triggered()), SLOT(performAutoTypePasswordEnter())); -- m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), SLOT(openUrl())); -- m_actionMultiplexer.connect(m_ui->actionEntryDownloadIcon, SIGNAL(triggered()), SLOT(downloadSelectedFavicons())); --#ifdef WITH_XC_SSHAGENT -- m_actionMultiplexer.connect(m_ui->actionEntryAddToAgent, SIGNAL(triggered()), SLOT(addToAgent())); -- m_actionMultiplexer.connect(m_ui->actionEntryRemoveFromAgent, SIGNAL(triggered()), SLOT(removeFromAgent())); --#endif -- -- m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), SLOT(createGroup())); -- m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), SLOT(switchToGroupEdit())); -- m_actionMultiplexer.connect(m_ui->actionGroupDelete, SIGNAL(triggered()), SLOT(deleteGroup())); -- m_actionMultiplexer.connect(m_ui->actionGroupEmptyRecycleBin, SIGNAL(triggered()), SLOT(emptyRecycleBin())); -- m_actionMultiplexer.connect(m_ui->actionGroupSortAsc, SIGNAL(triggered()), SLOT(sortGroupsAsc())); -- m_actionMultiplexer.connect(m_ui->actionGroupSortDesc, SIGNAL(triggered()), SLOT(sortGroupsDesc())); -- m_actionMultiplexer.connect(m_ui->actionGroupDownloadFavicons, SIGNAL(triggered()), SLOT(downloadAllFavicons())); -- -- connect(m_ui->actionSettings, SIGNAL(toggled(bool)), SLOT(switchToSettings(bool))); -- connect(m_ui->actionPasswordGenerator, SIGNAL(toggled(bool)), SLOT(togglePasswordGenerator(bool))); -- connect(m_ui->passwordGeneratorWidget, &PasswordGeneratorWidget::closed, this, [this] { -- togglePasswordGenerator(false); -- }); -- m_ui->passwordGeneratorWidget->setStandaloneMode(true); -- -- connect(m_ui->welcomeWidget, SIGNAL(newDatabase()), SLOT(switchToNewDatabase())); -- connect(m_ui->welcomeWidget, SIGNAL(openDatabase()), SLOT(switchToOpenDatabase())); -- connect(m_ui->welcomeWidget, SIGNAL(openDatabaseFile(QString)), SLOT(switchToDatabaseFile(QString))); -- connect(m_ui->welcomeWidget, SIGNAL(importKeePass1Database()), SLOT(switchToKeePass1Database())); -- connect(m_ui->welcomeWidget, SIGNAL(importOpVaultDatabase()), SLOT(switchToOpVaultDatabase())); -- connect(m_ui->welcomeWidget, SIGNAL(importCsv()), SLOT(switchToCsvImport())); -- -- connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); -- connect(m_ui->actionDonate, SIGNAL(triggered()), SLOT(openDonateUrl())); -- connect(m_ui->actionBugReport, SIGNAL(triggered()), SLOT(openBugReportUrl())); -- connect(m_ui->actionGettingStarted, SIGNAL(triggered()), SLOT(openGettingStartedGuide())); -- connect(m_ui->actionUserGuide, SIGNAL(triggered()), SLOT(openUserGuide())); -- connect(m_ui->actionOnlineHelp, SIGNAL(triggered()), SLOT(openOnlineHelp())); -- connect(m_ui->actionKeyboardShortcuts, SIGNAL(triggered()), SLOT(openKeyboardShortcuts())); -- -- connect(osUtils, &OSUtilsBase::statusbarThemeChanged, this, &MainWindow::updateTrayIcon); -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) -- // Install event filter for empty-area drag -- auto* eventFilter = new MainWindowEventFilter(this); -- m_ui->menubar->installEventFilter(eventFilter); -- m_ui->toolBar->installEventFilter(eventFilter); -- m_ui->tabWidget->tabBar()->installEventFilter(eventFilter); --#endif -- --#ifdef Q_OS_MACOS -- setUnifiedTitleAndToolBarOnMac(true); --#endif -- --#ifdef WITH_XC_UPDATECHECK -- connect(m_ui->actionCheckForUpdates, SIGNAL(triggered()), SLOT(showUpdateCheckDialog())); -- connect(UpdateChecker::instance(), -- SIGNAL(updateCheckFinished(bool, QString, bool)), -- SLOT(hasUpdateAvailable(bool, QString, bool))); -- // Setup an update check every hour (checked only occur every 7 days) -- connect(&m_updateCheckTimer, &QTimer::timeout, this, &MainWindow::performUpdateCheck); -- m_updateCheckTimer.start(3.6e6); -- // Perform the startup update check after 500 ms -- QTimer::singleShot(500, this, SLOT(performUpdateCheck())); --#else -- m_ui->actionCheckForUpdates->setVisible(false); --#endif -- --#ifndef WITH_XC_NETWORKING -- m_ui->actionGroupDownloadFavicons->setVisible(false); -- m_ui->actionEntryDownloadIcon->setVisible(false); --#endif --#ifndef WITH_XC_DOCS -- m_ui->actionGettingStarted->setVisible(false); -- m_ui->actionUserGuide->setVisible(false); -- m_ui->actionKeyboardShortcuts->setVisible(false); --#endif -- -- // clang-format off -- connect(m_ui->tabWidget, SIGNAL(messageGlobal(QString,MessageWidget::MessageType)), -- SLOT(displayGlobalMessage(QString,MessageWidget::MessageType))); -- // clang-format on -- -- connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(hideGlobalMessage())); -- --#ifndef Q_OS_HAIKU -- m_screenLockListener = new ScreenLockListener(this); -- connect(m_screenLockListener, SIGNAL(screenLocked()), SLOT(handleScreenLock())); --#endif -- -- // Tray Icon setup -- connect(Application::instance(), SIGNAL(focusWindowChanged(QWindow*)), SLOT(focusWindowChanged(QWindow*))); -- m_trayIconTriggerReason = QSystemTrayIcon::Unknown; -- m_trayIconTriggerTimer.setSingleShot(true); -- connect(&m_trayIconTriggerTimer, SIGNAL(timeout()), SLOT(processTrayIconTrigger())); -- -- if (config()->hasAccessError()) { -- m_ui->globalMessageWidget->showMessage(tr("Access error for config file %1").arg(config()->getFileName()), -- MessageWidget::Error); -- } -- -- // Properly shutdown on logoff, restart, and shutdown -- connect(qApp, &QGuiApplication::commitDataRequest, this, [this] { m_appExitCalled = true; }); -- --#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) || defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE) -- auto* hidePreRelWarn = new QAction(tr("Don't show again for this version"), m_ui->globalMessageWidget); -- m_ui->globalMessageWidget->addAction(hidePreRelWarn); -- auto hidePreRelWarnConn = QSharedPointer::create(); -- *hidePreRelWarnConn = connect(m_ui->globalMessageWidget, &KMessageWidget::hideAnimationFinished, [=] { -- m_ui->globalMessageWidget->removeAction(hidePreRelWarn); -- disconnect(*hidePreRelWarnConn); -- hidePreRelWarn->deleteLater(); -- }); -- connect(hidePreRelWarn, &QAction::triggered, [=] { -- m_ui->globalMessageWidget->animatedHide(); -- config()->set(Config::Messages_HidePreReleaseWarning, KEEPASSXC_VERSION); -- }); --#endif --#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) -- if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) { -- m_ui->globalMessageWidget->showMessage( -- tr("WARNING: You are using an unstable build of KeePassXC!\n" -- "There is a high risk of corruption, maintain a backup of your databases.\n" -- "This version is not meant for production use."), -- MessageWidget::Warning, -- -1); -- } --#elif defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE) -- if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) { -- m_ui->globalMessageWidget->showMessage( -- tr("NOTE: You are using a pre-release version of KeePassXC!\n" -- "Expect some bugs and minor issues, this version is not meant for production use."), -- MessageWidget::Information, -- -1); -- } --#elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) -- if (!config()->get(Config::Messages_Qt55CompatibilityWarning).toBool()) { -- m_ui->globalMessageWidget->showMessage( -- tr("WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!\n" -- "We recommend you use the AppImage available on our downloads page."), -- MessageWidget::Warning, -- -1); -- config()->set(Config::Messages_Qt55CompatibilityWarning, true); -- } --#endif -- -- QObject::connect(qApp, SIGNAL(anotherInstanceStarted()), this, SLOT(bringToFront())); -- QObject::connect(qApp, SIGNAL(applicationActivated()), this, SLOT(bringToFront())); -- QObject::connect(qApp, SIGNAL(openFile(QString)), this, SLOT(openDatabase(QString))); -- QObject::connect(qApp, SIGNAL(quitSignalReceived()), this, SLOT(appExit()), Qt::DirectConnection); --} -- --MainWindow::~MainWindow() --{ --#ifdef WITH_XC_SSHAGENT -- sshAgent()->removeAllIdentities(); --#endif --} -- --QList MainWindow::getOpenDatabases() --{ -- QList dbWidgets; -- for (int i = 0; i < m_ui->tabWidget->count(); ++i) { -- dbWidgets << m_ui->tabWidget->databaseWidgetFromIndex(i); -- } -- return dbWidgets; --} -- --void MainWindow::showErrorMessage(const QString& message) --{ -- m_ui->globalMessageWidget->showMessage(message, MessageWidget::Error); --} -- --void MainWindow::appExit() --{ -- m_appExitCalled = true; -- close(); --} -- --void MainWindow::updateLastDatabasesMenu() --{ -- m_ui->menuRecentDatabases->clear(); -- -- const QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList(); -- for (const QString& database : lastDatabases) { -- QAction* action = m_ui->menuRecentDatabases->addAction(database); -- action->setData(database); -- m_lastDatabasesActions->addAction(action); -- } -- m_ui->menuRecentDatabases->addSeparator(); -- m_ui->menuRecentDatabases->addAction(m_clearHistoryAction); --} -- --void MainWindow::updateCopyAttributesMenu() --{ -- DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- if (!dbWidget) { -- return; -- } -- -- if (dbWidget->numberOfSelectedEntries() != 1) { -- return; -- } -- -- QList actions = m_ui->menuEntryCopyAttribute->actions(); -- for (int i = m_countDefaultAttributes; i < actions.size(); i++) { -- delete actions[i]; -- } -- -- const QStringList customEntryAttributes = dbWidget->customEntryAttributes(); -- for (const QString& key : customEntryAttributes) { -- QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); -- action->setData(QVariant(key)); -- m_copyAdditionalAttributeActions->addAction(action); -- } --} -- --void MainWindow::openRecentDatabase(QAction* action) --{ -- openDatabase(action->data().toString()); --} -- --void MainWindow::clearLastDatabases() --{ -- config()->remove(Config::LastDatabases); -- bool inWelcomeWidget = (m_ui->stackedWidget->currentIndex() == 2); -- -- if (inWelcomeWidget) { -- m_ui->welcomeWidget->refreshLastDatabases(); -- } --} -- --void MainWindow::openDatabase(const QString& filePath, const QString& password, const QString& keyfile) --{ -- m_ui->tabWidget->addDatabaseTab(filePath, false, password, keyfile); --} -- --void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) --{ -- int currentIndex = m_ui->stackedWidget->currentIndex(); -- -- bool inDatabaseTabWidget = (currentIndex == DatabaseTabScreen); -- bool inWelcomeWidget = (currentIndex == WelcomeScreen); -- bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; -- -- m_ui->actionDatabaseMerge->setEnabled(inDatabaseTabWidget); -- m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); -- m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); -- m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); -- m_ui->menuImport->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); -- m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); -- -- if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) { -- DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- Q_ASSERT(dbWidget); -- -- if (mode == DatabaseWidget::Mode::None) { -- mode = dbWidget->currentMode(); -- } -- -- switch (mode) { -- case DatabaseWidget::Mode::ViewMode: { -- bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1; -- bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0; -- bool groupSelected = dbWidget->isGroupSelected(); -- bool currentGroupHasChildren = dbWidget->currentGroup()->hasChildren(); -- bool currentGroupHasEntries = !dbWidget->currentGroup()->entries().isEmpty(); -- bool recycleBinSelected = dbWidget->isRecycleBinSelected(); -- bool sorted = dbWidget->isSorted(); -- int entryIndex = dbWidget->currentEntryIndex(); -- int numEntries = dbWidget->currentGroup()->entries().size(); -- -- m_ui->actionEntryNew->setEnabled(true); -- m_ui->actionEntryClone->setEnabled(singleEntrySelected); -- m_ui->actionEntryEdit->setEnabled(singleEntrySelected); -- m_ui->actionEntryDelete->setEnabled(entriesSelected); -- m_ui->actionEntryMoveUp->setVisible(!sorted); -- m_ui->actionEntryMoveDown->setVisible(!sorted); -- m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !sorted && entryIndex > 0); -- m_ui->actionEntryMoveDown->setEnabled(singleEntrySelected && !sorted && entryIndex >= 0 -- && entryIndex < numEntries - 1); -- m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTitle()); -- m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); -- // NOTE: Copy password is enabled even if the selected entry's password is blank to prevent Ctrl+C -- // from copying information from the currently selected cell in the entry view table. -- m_ui->actionEntryCopyPassword->setEnabled(singleEntrySelected); -- m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); -- m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected && dbWidget->currentEntryHasNotes()); -- m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); -- m_ui->menuEntryTotp->setEnabled(singleEntrySelected); -- m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); -- m_ui->menuEntryAutoTypeWithSequence->setEnabled(singleEntrySelected); -- m_ui->actionEntryAutoTypeUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); -- m_ui->actionEntryAutoTypeUsernameEnter->setEnabled(singleEntrySelected -- && dbWidget->currentEntryHasUsername()); -- m_ui->actionEntryAutoTypePassword->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); -- m_ui->actionEntryAutoTypePasswordEnter->setEnabled(singleEntrySelected -- && dbWidget->currentEntryHasPassword()); -- m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); -- m_ui->actionEntryTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); -- m_ui->actionEntryCopyTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); -- m_ui->actionEntrySetupTotp->setEnabled(singleEntrySelected); -- m_ui->actionEntryTotpQRCode->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); -- m_ui->actionEntryDownloadIcon->setEnabled((entriesSelected && !singleEntrySelected) -- || (singleEntrySelected && dbWidget->currentEntryHasUrl())); -- m_ui->actionGroupNew->setEnabled(groupSelected); -- m_ui->actionGroupEdit->setEnabled(groupSelected); -- m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); -- m_ui->actionGroupSortAsc->setEnabled(groupSelected && currentGroupHasChildren); -- m_ui->actionGroupSortDesc->setEnabled(groupSelected && currentGroupHasChildren); -- m_ui->actionGroupEmptyRecycleBin->setVisible(recycleBinSelected); -- m_ui->actionGroupEmptyRecycleBin->setEnabled(recycleBinSelected); --#ifdef WITH_XC_NETWORKING -- m_ui->actionGroupDownloadFavicons->setVisible(!recycleBinSelected); --#endif -- m_ui->actionGroupDownloadFavicons->setEnabled(groupSelected && currentGroupHasEntries -- && !recycleBinSelected); -- m_ui->actionDatabaseSecurity->setEnabled(true); -- m_ui->actionReports->setEnabled(true); -- m_ui->actionDatabaseSettings->setEnabled(true); -- m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave()); -- m_ui->actionDatabaseSaveAs->setEnabled(true); -- m_ui->actionDatabaseSaveBackup->setEnabled(true); -- m_ui->menuExport->setEnabled(true); -- m_ui->actionExportCsv->setEnabled(true); -- m_ui->actionExportHtml->setEnabled(true); -- m_ui->actionDatabaseMerge->setEnabled(m_ui->tabWidget->currentIndex() != -1); --#ifdef WITH_XC_SSHAGENT -- bool singleEntryHasSshKey = -- singleEntrySelected && sshAgent()->isEnabled() && dbWidget->currentEntryHasSshKey(); -- m_ui->actionEntryAddToAgent->setVisible(singleEntryHasSshKey); -- m_ui->actionEntryAddToAgent->setEnabled(singleEntryHasSshKey); -- m_ui->actionEntryRemoveFromAgent->setVisible(singleEntryHasSshKey); -- m_ui->actionEntryRemoveFromAgent->setEnabled(singleEntryHasSshKey); --#endif -- -- m_searchWidgetAction->setEnabled(true); -- -- break; -- } -- case DatabaseWidget::Mode::EditMode: -- case DatabaseWidget::Mode::ImportMode: -- case DatabaseWidget::Mode::LockedMode: { -- // Enable select actions when editing an entry -- bool editEntryActive = dbWidget->isEntryEditActive(); -- const auto editEntryActionsMask = QList({m_ui->actionEntryCopyUsername, -- m_ui->actionEntryCopyPassword, -- m_ui->actionEntryCopyURL, -- m_ui->actionEntryOpenUrl, -- m_ui->actionEntryAutoType, -- m_ui->menuEntryAutoTypeWithSequence->menuAction(), -- m_ui->actionEntryDownloadIcon, -- m_ui->actionEntryCopyNotes, -- m_ui->actionEntryCopyTitle, -- m_ui->menuEntryCopyAttribute->menuAction(), -- m_ui->menuEntryTotp->menuAction(), -- m_ui->actionEntrySetupTotp}); -- -- auto entryActions = m_ui->menuEntries->actions(); -- entryActions << m_ui->menuEntryCopyAttribute->actions(); -- entryActions << m_ui->menuEntryTotp->actions(); -- for (auto action : entryActions) { -- bool enabled = editEntryActive && editEntryActionsMask.contains(action); -- if (action->menu()) { -- action->menu()->setEnabled(enabled); -- } -- action->setEnabled(enabled); -- } -- -- const auto groupActions = m_ui->menuGroups->actions(); -- for (auto action : groupActions) { -- action->setEnabled(false); -- } -- -- m_ui->actionDatabaseSecurity->setEnabled(false); -- m_ui->actionReports->setEnabled(false); -- m_ui->actionDatabaseSettings->setEnabled(false); -- m_ui->actionDatabaseSave->setEnabled(false); -- m_ui->actionDatabaseSaveAs->setEnabled(false); -- m_ui->actionDatabaseSaveBackup->setEnabled(false); -- m_ui->menuExport->setEnabled(false); -- m_ui->actionExportCsv->setEnabled(false); -- m_ui->actionExportHtml->setEnabled(false); -- m_ui->actionDatabaseMerge->setEnabled(false); -- -- m_searchWidgetAction->setEnabled(false); -- break; -- } -- default: -- Q_ASSERT(false); -- } -- m_ui->actionDatabaseClose->setEnabled(true); -- } else { -- const auto entryActions = m_ui->menuEntries->actions(); -- for (auto action : entryActions) { -- action->setEnabled(false); -- } -- -- const auto groupActions = m_ui->menuGroups->actions(); -- for (auto action : groupActions) { -- action->setEnabled(false); -- } -- -- m_ui->actionDatabaseSecurity->setEnabled(false); -- m_ui->actionReports->setEnabled(false); -- m_ui->actionDatabaseSettings->setEnabled(false); -- m_ui->actionDatabaseSave->setEnabled(false); -- m_ui->actionDatabaseSaveAs->setEnabled(false); -- m_ui->actionDatabaseSaveBackup->setEnabled(false); -- m_ui->actionDatabaseClose->setEnabled(false); -- m_ui->menuExport->setEnabled(false); -- m_ui->actionExportCsv->setEnabled(false); -- m_ui->actionExportHtml->setEnabled(false); -- m_ui->actionDatabaseMerge->setEnabled(false); -- -- m_searchWidgetAction->setEnabled(false); -- } -- -- if ((currentIndex == PasswordGeneratorScreen) != m_ui->actionPasswordGenerator->isChecked()) { -- bool blocked = m_ui->actionPasswordGenerator->blockSignals(true); -- m_ui->actionPasswordGenerator->toggle(); -- m_ui->actionPasswordGenerator->blockSignals(blocked); -- } else if ((currentIndex == SettingsScreen) != m_ui->actionSettings->isChecked()) { -- bool blocked = m_ui->actionSettings->blockSignals(true); -- m_ui->actionSettings->toggle(); -- m_ui->actionSettings->blockSignals(blocked); -- } --} -- --void MainWindow::updateToolbarSeparatorVisibility() --{ -- if (!m_showToolbarSeparator) { -- m_ui->toolbarSeparator->setVisible(false); -- return; -- } -- -- switch (m_ui->stackedWidget->currentIndex()) { -- case DatabaseTabScreen: -- m_ui->toolbarSeparator->setVisible(!m_ui->tabWidget->tabBar()->isVisible() -- && m_ui->tabWidget->tabBar()->count() == 1); -- break; -- case SettingsScreen: -- m_ui->toolbarSeparator->setVisible(true); -- break; -- default: -- m_ui->toolbarSeparator->setVisible(false); -- } --} -- --void MainWindow::updateWindowTitle() --{ -- QString customWindowTitlePart; -- int stackedWidgetIndex = m_ui->stackedWidget->currentIndex(); -- int tabWidgetIndex = m_ui->tabWidget->currentIndex(); -- bool isModified = m_ui->tabWidget->isModified(tabWidgetIndex); -- -- if (stackedWidgetIndex == DatabaseTabScreen && tabWidgetIndex != -1) { -- customWindowTitlePart = m_ui->tabWidget->tabName(tabWidgetIndex); -- if (isModified) { -- // remove asterisk '*' from title -- customWindowTitlePart.remove(customWindowTitlePart.size() - 1, 1); -- } -- m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave(tabWidgetIndex)); -- } else if (stackedWidgetIndex == 1) { -- customWindowTitlePart = tr("Settings"); -- } -- -- QString windowTitle; -- if (customWindowTitlePart.isEmpty()) { -- windowTitle = BaseWindowTitle; -- } else { -- windowTitle = QString("%1[*] - %2").arg(customWindowTitlePart, BaseWindowTitle); -- } -- -- if (customWindowTitlePart.isEmpty() || stackedWidgetIndex == 1) { -- setWindowFilePath(""); -- } else { -- setWindowFilePath(m_ui->tabWidget->databaseWidgetFromIndex(tabWidgetIndex)->database()->filePath()); -- } -- -- setWindowTitle(windowTitle); -- setWindowModified(isModified); -- -- updateTrayIcon(); --} -- --void MainWindow::showAboutDialog() --{ -- auto* aboutDialog = new AboutDialog(this); -- // Auto close the about dialog before attempting database locks -- if (m_ui->tabWidget->currentDatabaseWidget()) { -- connect(m_ui->tabWidget->currentDatabaseWidget(), -- &DatabaseWidget::databaseLockRequested, -- aboutDialog, -- &AboutDialog::close); -- } -- aboutDialog->open(); --} -- --void MainWindow::performUpdateCheck() --{ --#ifdef WITH_XC_UPDATECHECK -- if (!config()->get(Config::UpdateCheckMessageShown).toBool()) { -- auto result = -- MessageBox::question(this, -- tr("Check for updates on startup?"), -- tr("Would you like KeePassXC to check for updates on startup?") + "\n\n" -- + tr("You can always check for updates manually from the application menu."), -- MessageBox::Yes | MessageBox::No, -- MessageBox::Yes); -- -- config()->set(Config::GUI_CheckForUpdates, (result == MessageBox::Yes)); -- config()->set(Config::UpdateCheckMessageShown, true); -- } -- -- if (config()->get(Config::GUI_CheckForUpdates).toBool()) { -- updateCheck()->checkForUpdates(false); -- } -- --#endif --} -- --void MainWindow::hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested) --{ --#ifdef WITH_XC_UPDATECHECK -- if (hasUpdate && !isManuallyRequested) { -- auto* updateCheckDialog = new UpdateCheckDialog(this); -- updateCheckDialog->showUpdateCheckResponse(hasUpdate, version); -- updateCheckDialog->show(); -- } --#else -- Q_UNUSED(hasUpdate) -- Q_UNUSED(version) -- Q_UNUSED(isManuallyRequested) --#endif --} -- --void MainWindow::showUpdateCheckDialog() --{ --#ifdef WITH_XC_UPDATECHECK -- updateCheck()->checkForUpdates(true); -- auto* updateCheckDialog = new UpdateCheckDialog(this); -- updateCheckDialog->show(); --#endif --} -- --void MainWindow::customOpenUrl(QString url) --{ -- QDesktopServices::openUrl(QUrl(url)); --} -- --void MainWindow::openDonateUrl() --{ -- customOpenUrl("https://keepassxc.org/donate"); --} -- --void MainWindow::openBugReportUrl() --{ -- customOpenUrl("https://github.com/keepassxreboot/keepassxc/issues"); --} -- --void MainWindow::openGettingStartedGuide() --{ -- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_GettingStarted.html"))); --} -- --void MainWindow::openUserGuide() --{ -- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_UserGuide.html"))); --} -- --void MainWindow::openOnlineHelp() --{ -- customOpenUrl("https://keepassxc.org/docs/"); --} -- --void MainWindow::openKeyboardShortcuts() --{ -- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_KeyboardShortcuts.html"))); --} -- --void MainWindow::switchToDatabases() --{ -- if (m_ui->tabWidget->currentIndex() == -1) { -- m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); -- } else { -- m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); -- } --} -- --void MainWindow::switchToSettings(bool enabled) --{ -- if (enabled) { -- m_ui->settingsWidget->loadSettings(); -- m_ui->stackedWidget->setCurrentIndex(SettingsScreen); -- } else { -- switchToDatabases(); -- } --} -- --void MainWindow::togglePasswordGenerator(bool enabled) --{ -- if (enabled) { -- m_ui->passwordGeneratorWidget->loadSettings(); -- m_ui->passwordGeneratorWidget->regeneratePassword(); -- m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen); -- } else { -- m_ui->passwordGeneratorWidget->saveSettings(); -- switchToDatabases(); -- } --} -- --void MainWindow::switchToNewDatabase() --{ -- m_ui->tabWidget->newDatabase(); -- switchToDatabases(); --} -- --void MainWindow::switchToOpenDatabase() --{ -- m_ui->tabWidget->openDatabase(); -- switchToDatabases(); --} -- --void MainWindow::switchToDatabaseFile(const QString& file) --{ -- m_ui->tabWidget->addDatabaseTab(file); -- switchToDatabases(); --} -- --void MainWindow::switchToKeePass1Database() --{ -- m_ui->tabWidget->importKeePass1Database(); -- switchToDatabases(); --} -- --void MainWindow::switchToOpVaultDatabase() --{ -- m_ui->tabWidget->importOpVaultDatabase(); -- switchToDatabases(); --} -- --void MainWindow::switchToCsvImport() --{ -- m_ui->tabWidget->importCsv(); -- switchToDatabases(); --} -- --void MainWindow::databaseStatusChanged(DatabaseWidget* dbWidget) --{ -- Q_UNUSED(dbWidget); -- updateTrayIcon(); --} -- --/** -- * Select a database tab by its index. Stays bounded to first/last tab -- * on overflow unless wrap is true. -- * -- * @param tabIndex 0-based tab index selector -- * @param wrap if true wrap around to first/last tab -- */ --void MainWindow::selectDatabaseTab(int tabIndex, bool wrap) --{ -- if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { -- if (wrap) { -- if (tabIndex < 0) { -- tabIndex = m_ui->tabWidget->count() - 1; -- } else if (tabIndex >= m_ui->tabWidget->count()) { -- tabIndex = 0; -- } -- } else { -- tabIndex = qBound(0, tabIndex, m_ui->tabWidget->count() - 1); -- } -- -- m_ui->tabWidget->setCurrentIndex(tabIndex); -- } --} -- --void MainWindow::selectNextDatabaseTab() --{ -- selectDatabaseTab(m_ui->tabWidget->currentIndex() + 1, true); --} -- --void MainWindow::selectPreviousDatabaseTab() --{ -- selectDatabaseTab(m_ui->tabWidget->currentIndex() - 1, true); --} -- --void MainWindow::databaseTabChanged(int tabIndex) --{ -- if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == WelcomeScreen) { -- m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); -- } else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { -- m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); -- } -- -- m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget()); --} -- --void MainWindow::closeEvent(QCloseEvent* event) --{ -- if (m_appExiting) { -- event->accept(); -- return; -- } -- -- // Ignore event and hide to tray if this is not an actual close -- // request by the system's session manager. -- if (config()->get(Config::GUI_MinimizeOnClose).toBool() && !m_appExitCalled && !isHidden() -- && !qApp->isSavingSession()) { -- event->ignore(); -- hideWindow(); -- return; -- } -- -- m_appExiting = saveLastDatabases(); -- if (m_appExiting) { -- saveWindowInformation(); -- event->accept(); -- m_restartRequested ? kpxcApp->restart() : QApplication::quit(); -- return; -- } -- -- m_appExitCalled = false; -- m_restartRequested = false; -- event->ignore(); --} -- --void MainWindow::changeEvent(QEvent* event) --{ -- if ((event->type() == QEvent::WindowStateChange) && isMinimized()) { -- if (isTrayIconEnabled() && config()->get(Config::GUI_MinimizeToTray).toBool()) { -- event->ignore(); -- hide(); -- } -- -- if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) { -- m_ui->tabWidget->lockDatabases(); -- } -- } else { -- QMainWindow::changeEvent(event); -- } --} -- --void MainWindow::keyPressEvent(QKeyEvent* event) --{ -- if (!event->modifiers()) { -- // Allow for direct focus of search, group view, and entry view -- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- if (dbWidget && dbWidget->isEntryViewActive()) { -- if (event->key() == Qt::Key_F1) { -- dbWidget->focusOnGroups(true); -- return; -- } else if (event->key() == Qt::Key_F2) { -- dbWidget->focusOnEntries(true); -- return; -- } else if (event->key() == Qt::Key_F3) { -- m_searchWidget->searchFocus(); -- return; -- } -- } -- } -- -- QWidget::keyPressEvent(event); --} -- --bool MainWindow::focusNextPrevChild(bool next) --{ -- // Only navigate around the main window if the database widget is showing the entry view -- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- if (dbWidget && dbWidget->isVisible() && dbWidget->isEntryViewActive()) { -- // Search Widget <-> Tab Widget <-> DbWidget -- if (next) { -- if (m_searchWidget->hasFocus()) { -- m_ui->tabWidget->setFocus(Qt::TabFocusReason); -- } else if (m_ui->tabWidget->hasFocus()) { -- dbWidget->setFocus(Qt::TabFocusReason); -- } else { -- m_searchWidget->setFocus(Qt::TabFocusReason); -- } -- } else { -- if (m_searchWidget->hasFocus()) { -- dbWidget->setFocus(Qt::BacktabFocusReason); -- } else if (m_ui->tabWidget->hasFocus()) { -- m_searchWidget->setFocus(Qt::BacktabFocusReason); -- } else { -- m_ui->tabWidget->setFocus(Qt::BacktabFocusReason); -- } -- } -- return true; -- } -- -- // Defer to Qt to make a decision, this maintains normal behavior -- return QMainWindow::focusNextPrevChild(next); --} -- --void MainWindow::saveWindowInformation() --{ -- if (isVisible()) { -- config()->set(Config::GUI_MainWindowGeometry, saveGeometry()); -- config()->set(Config::GUI_MainWindowState, saveState()); -- } --} -- --bool MainWindow::saveLastDatabases() --{ -- if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { -- auto currentDbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- if (currentDbWidget) { -- config()->set(Config::LastActiveDatabase, currentDbWidget->database()->filePath()); -- } else { -- config()->remove(Config::LastActiveDatabase); -- } -- -- QStringList openDatabases; -- for (int i = 0; i < m_ui->tabWidget->count(); ++i) { -- auto dbWidget = m_ui->tabWidget->databaseWidgetFromIndex(i); -- openDatabases.append(dbWidget->database()->filePath()); -- } -- -- config()->set(Config::LastOpenedDatabases, openDatabases); -- } else { -- config()->remove(Config::LastActiveDatabase); -- config()->remove(Config::LastOpenedDatabases); -- } -- -- return m_ui->tabWidget->closeAllDatabaseTabs(); --} -- --void MainWindow::updateTrayIcon() --{ -- if (config()->get(Config::GUI_ShowTrayIcon).toBool()) { -- if (!m_trayIcon) { -- m_trayIcon = new QSystemTrayIcon(this); -- auto* menu = new QMenu(this); -- -- auto* actionToggle = new QAction(tr("Toggle window"), menu); -- menu->addAction(actionToggle); -- actionToggle->setIcon(resources()->icon("keepassxc-monochrome-dark")); -- -- menu->addAction(m_ui->actionLockDatabases); -- --#ifdef Q_OS_MACOS -- auto actionQuit = new QAction(tr("Quit KeePassXC"), menu); -- connect(actionQuit, SIGNAL(triggered()), SLOT(appExit())); -- menu->addAction(actionQuit); --#else -- menu->addAction(m_ui->actionQuit); --#endif -- m_trayIcon->setContextMenu(menu); -- -- connect(m_trayIcon, -- SIGNAL(activated(QSystemTrayIcon::ActivationReason)), -- SLOT(trayIconTriggered(QSystemTrayIcon::ActivationReason))); -- connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); -- } -- -- if (m_ui->tabWidget->hasLockableDatabases()) { -- m_trayIcon->setIcon(resources()->trayIconUnlocked()); -- } else { -- m_trayIcon->setIcon(resources()->trayIconLocked()); -- } -- -- m_trayIcon->setToolTip(windowTitle().replace("[*]", isWindowModified() ? "*" : "")); -- m_trayIcon->show(); -- -- if (!isTrayIconEnabled() || !QSystemTrayIcon::isSystemTrayAvailable()) { -- // Try to show tray icon after 5 seconds, try 5 times -- // This can happen if KeePassXC starts before the system tray is available -- static int trayIconAttempts = 0; -- if (trayIconAttempts < 5) { -- QTimer::singleShot(5000, this, &MainWindow::updateTrayIcon); -- ++trayIconAttempts; -- } -- } -- } else { -- if (m_trayIcon) { -- m_trayIcon->hide(); -- delete m_trayIcon; -- } -- } -- -- QApplication::setQuitOnLastWindowClosed(!isTrayIconEnabled()); --} -- --void MainWindow::obtainContextFocusLock() --{ -- m_contextMenuFocusLock = true; --} -- --void MainWindow::releaseContextFocusLock() --{ -- m_contextMenuFocusLock = false; --} -- --void MainWindow::agentEnabled(bool enabled) --{ -- m_ui->actionEntryAddToAgent->setVisible(enabled); -- m_ui->actionEntryRemoveFromAgent->setVisible(enabled); --} -- --void MainWindow::showEntryContextMenu(const QPoint& globalPos) --{ -- bool entrySelected = false; -- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); -- if (dbWidget) { -- entrySelected = dbWidget->numberOfSelectedEntries() > 0; -- } -- -- if (entrySelected) { -- m_entryContextMenu->popup(globalPos); -- } else { -- m_entryNewContextMenu->popup(globalPos); -- } --} -- --void MainWindow::showGroupContextMenu(const QPoint& globalPos) --{ -- m_ui->menuGroups->popup(globalPos); --} -- --void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback) --{ -- if (!QKeySequence::keyBindings(standard).isEmpty()) { -- action->setShortcuts(standard); -- } else if (fallback != 0) { -- action->setShortcut(QKeySequence(fallback)); -- } --} -- --void MainWindow::applySettingsChanges() --{ -- int timeout = config()->get(Config::Security_LockDatabaseIdleSeconds).toInt() * 1000; -- if (timeout <= 0) { -- timeout = 60; -- } -- -- m_inactivityTimer->setInactivityTimeout(timeout); -- if (config()->get(Config::Security_LockDatabaseIdle).toBool()) { -- m_inactivityTimer->activate(); -- } else { -- m_inactivityTimer->deactivate(); -- } -- --#ifdef WITH_XC_TOUCHID -- if (config()->get(Config::Security_ResetTouchId).toBool()) { -- // Calculate TouchID timeout in milliseconds -- timeout = config()->get(Config::Security_ResetTouchIdTimeout).toInt() * 60 * 1000; -- if (timeout <= 0) { -- timeout = 30 * 60 * 1000; -- } -- -- m_touchIDinactivityTimer->setInactivityTimeout(timeout); -- m_touchIDinactivityTimer->activate(); -- } else { -- m_touchIDinactivityTimer->deactivate(); -- } --#endif -- -- m_ui->toolBar->setHidden(config()->get(Config::GUI_HideToolbar).toBool()); -- m_ui->toolBar->setMovable(config()->get(Config::GUI_MovableToolbar).toBool()); -- -- bool isOk = false; -- const auto toolButtonStyle = -- static_cast(config()->get(Config::GUI_ToolButtonStyle).toInt(&isOk)); -- if (isOk) { -- m_ui->toolBar->setToolButtonStyle(toolButtonStyle); -- } -- -- updateTrayIcon(); --} -- --void MainWindow::focusWindowChanged(QWindow* focusWindow) --{ -- if (focusWindow != windowHandle()) { -- m_lastFocusOutTime = Clock::currentMilliSecondsSinceEpoch(); -- } --} -- --void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) --{ -- if (!m_trayIconTriggerTimer.isActive()) { -- m_trayIconTriggerTimer.start(150); -- } -- // Overcome Qt bug https://bugreports.qt.io/browse/QTBUG-69698 -- // Store last issued tray icon activation reason to properly -- // capture doubleclick events -- m_trayIconTriggerReason = reason; --} -- --void MainWindow::processTrayIconTrigger() --{ --#ifdef Q_OS_MACOS -- // Do not toggle the window on macOS and just show the context menu instead. -- // Right click detection doesn't seem to be working anyway -- // and anything else will only trigger the context menu AND -- // toggle the window at the same time, which is confusing at best. -- // Showing only a context menu for tray icons seems to be best -- // practice on macOS anyway, so this is probably fine. -- return; --#endif -- -- if (m_trayIconTriggerReason == QSystemTrayIcon::DoubleClick) { -- // Always toggle window on double click -- toggleWindow(); -- } else if (m_trayIconTriggerReason == QSystemTrayIcon::Trigger -- || m_trayIconTriggerReason == QSystemTrayIcon::MiddleClick) { -- // Toggle window if is not in front. --#ifdef Q_OS_WIN -- // If on Windows, check if focus switched within the 500 milliseconds since -- // clicking the tray icon removes focus from main window. -- if (isHidden() || (Clock::currentMilliSecondsSinceEpoch() - m_lastFocusOutTime) <= 500) { --#else -- // If on Linux, check if the window has focus. -- if (hasFocus() || isHidden() || windowHandle()->isActive()) { --#endif -- toggleWindow(); -- } else { -- bringToFront(); -- } -- } --} -- --void MainWindow::show() --{ --#ifndef Q_OS_WIN -- m_lastShowTime = Clock::currentMilliSecondsSinceEpoch(); --#endif --#ifdef Q_OS_MACOS -- // Unset minimize state to avoid weird fly-in effects -- setWindowState(windowState() & ~Qt::WindowMinimized); -- macUtils()->toggleForegroundApp(true); --#endif -- QMainWindow::show(); --} -- --void MainWindow::hide() --{ --#ifndef Q_OS_WIN -- qint64 current_time = Clock::currentMilliSecondsSinceEpoch(); -- if (current_time - m_lastShowTime < 50) { -- return; -- } --#endif -- QMainWindow::hide(); --#ifdef Q_OS_MACOS -- macUtils()->toggleForegroundApp(false); --#endif --} -- --void MainWindow::hideWindow() --{ -- saveWindowInformation(); -- -- // Only hide if tray icon is active, otherwise window will be gone forever -- if (isTrayIconEnabled()) { -- // On X11, the window should NOT be minimized and hidden at the same time. See issue #1595. -- // On macOS, we are skipping minimization as well to avoid playing the magic lamp animation. -- if (QGuiApplication::platformName() != "xcb" && QGuiApplication::platformName() != "cocoa") { -- setWindowState(windowState() | Qt::WindowMinimized); -- } -- hide(); -- } else { -- showMinimized(); -- } -- -- if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) { -- m_ui->tabWidget->lockDatabases(); -- } --} -- --void MainWindow::minimizeOrHide() --{ -- if (config()->get(Config::GUI_MinimizeToTray).toBool()) { -- hideWindow(); -- } else { -- showMinimized(); -- } --} -- --void MainWindow::toggleWindow() --{ -- if (isVisible() && !isMinimized()) { -- hideWindow(); -- } else { -- bringToFront(); -- --#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) && (QT_VERSION < QT_VERSION_CHECK(5, 9, 0)) -- // re-register global D-Bus menu (needed on Ubuntu with Unity) -- // see https://github.com/keepassxreboot/keepassxc/issues/271 -- // and https://bugreports.qt.io/browse/QTBUG-58723 -- // check for !isVisible(), because isNativeMenuBar() does not work with appmenu-qt5 -- static const auto isDesktopSessionUnity = qgetenv("XDG_CURRENT_DESKTOP") == "Unity"; -- -- if (isDesktopSessionUnity && Tools::qtRuntimeVersion() < QT_VERSION_CHECK(5, 9, 0) -- && !m_ui->menubar->isVisible()) { -- QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.AppMenu.Registrar"), -- QStringLiteral("/com/canonical/AppMenu/Registrar"), -- QStringLiteral("com.canonical.AppMenu.Registrar"), -- QStringLiteral("RegisterWindow")); -- QList args; -- args << QVariant::fromValue(static_cast(winId())) -- << QVariant::fromValue(QDBusObjectPath("/MenuBar/1")); -- msg.setArguments(args); -- QDBusConnection::sessionBus().send(msg); -- } --#endif -- } --} -- --void MainWindow::lockDatabasesAfterInactivity() --{ -- m_ui->tabWidget->lockDatabases(); --} -- --void MainWindow::forgetTouchIDAfterInactivity() --{ --#ifdef WITH_XC_TOUCHID -- TouchID::getInstance().reset(); --#endif --} -- --bool MainWindow::isTrayIconEnabled() const --{ -- return m_trayIcon && m_trayIcon->isVisible(); --} -- --void MainWindow::displayGlobalMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton, -- int autoHideTimeout) --{ -- m_ui->globalMessageWidget->setCloseButtonVisible(showClosebutton); -- m_ui->globalMessageWidget->showMessage(text, type, autoHideTimeout); --} -- --void MainWindow::displayTabMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton, -- int autoHideTimeout) --{ -- m_ui->tabWidget->currentDatabaseWidget()->showMessage(text, type, showClosebutton, autoHideTimeout); --} -- --void MainWindow::hideGlobalMessage() --{ -- m_ui->globalMessageWidget->hideMessage(); --} -- --void MainWindow::showYubiKeyPopup() --{ -- displayGlobalMessage(tr("Please touch the button on your YubiKey!"), -- MessageWidget::Information, -- false, -- MessageWidget::DisableAutoHide); -- setEnabled(false); --} -- --void MainWindow::hideYubiKeyPopup() --{ -- hideGlobalMessage(); -- setEnabled(true); --} -- --void MainWindow::bringToFront() --{ -- ensurePolished(); -- setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); -- show(); -- raise(); -- activateWindow(); --} -- --void MainWindow::handleScreenLock() --{ -- if (config()->get(Config::Security_LockDatabaseScreenLock).toBool()) { -- lockDatabasesAfterInactivity(); -- } -- --#ifdef WITH_XC_TOUCHID -- if (config()->get(Config::Security_ResetTouchIdScreenlock).toBool()) { -- forgetTouchIDAfterInactivity(); -- } --#endif --} -- --QStringList MainWindow::kdbxFilesFromUrls(const QList& urls) --{ -- QStringList kdbxFiles; -- for (const QUrl& url : urls) { -- const QFileInfo fInfo(url.toLocalFile()); -- const bool isKdbxFile = fInfo.isFile() && fInfo.suffix().toLower() == "kdbx"; -- if (isKdbxFile) { -- kdbxFiles.append(fInfo.absoluteFilePath()); -- } -- } -- -- return kdbxFiles; --} -- --void MainWindow::dragEnterEvent(QDragEnterEvent* event) --{ -- const QMimeData* mimeData = event->mimeData(); -- if (mimeData->hasUrls()) { -- const QStringList kdbxFiles = kdbxFilesFromUrls(mimeData->urls()); -- if (!kdbxFiles.isEmpty()) { -- event->acceptProposedAction(); -- } -- } --} -- --void MainWindow::dropEvent(QDropEvent* event) --{ -- const QMimeData* mimeData = event->mimeData(); -- if (mimeData->hasUrls()) { -- const QStringList kdbxFiles = kdbxFilesFromUrls(mimeData->urls()); -- if (!kdbxFiles.isEmpty()) { -- event->acceptProposedAction(); -- } -- for (const QString& kdbxFile : kdbxFiles) { -- openDatabase(kdbxFile); -- } -- } --} -- --void MainWindow::closeAllDatabases() --{ -- m_ui->tabWidget->closeAllDatabaseTabs(); --} -- --void MainWindow::lockAllDatabases() --{ -- lockDatabasesAfterInactivity(); --} -- --void MainWindow::displayDesktopNotification(const QString& msg, QString title, int msTimeoutHint) --{ -- if (!m_trayIcon || !QSystemTrayIcon::supportsMessages()) { -- return; -- } -- -- if (title.isEmpty()) { -- title = BaseWindowTitle; -- } -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) -- m_trayIcon->showMessage(title, msg, resources()->applicationIcon(), msTimeoutHint); --#else -- m_trayIcon->showMessage(title, msg, QSystemTrayIcon::Information, msTimeoutHint); --#endif --} -- --void MainWindow::restartApp(const QString& message) --{ -- auto ans = MessageBox::question( -- this, tr("Restart Application?"), message, MessageBox::Yes | MessageBox::No, MessageBox::Yes); -- if (ans == MessageBox::Yes) { -- m_appExitCalled = true; -- m_restartRequested = true; -- close(); -- } else { -- m_restartRequested = false; -- } --} -- --void MainWindow::initViewMenu() --{ -- m_ui->actionThemeAuto->setData("auto"); -- m_ui->actionThemeLight->setData("light"); -- m_ui->actionThemeDark->setData("dark"); -- m_ui->actionThemeClassic->setData("classic"); -- -- auto themeActions = new QActionGroup(this); -- themeActions->addAction(m_ui->actionThemeAuto); -- themeActions->addAction(m_ui->actionThemeLight); -- themeActions->addAction(m_ui->actionThemeDark); -- themeActions->addAction(m_ui->actionThemeClassic); -- -- auto theme = config()->get(Config::GUI_ApplicationTheme).toString(); -- for (auto action : themeActions->actions()) { -- if (action->data() == theme) { -- action->setChecked(true); -- break; -- } -- } -- -- connect(themeActions, &QActionGroup::triggered, this, [this, theme](QAction* action) { -- config()->set(Config::GUI_ApplicationTheme, action->data()); -- if ((action->data() == "classic" || theme == "classic") && action->data() != theme) { -- restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); -- } else { -- kpxcApp->applyTheme(); -- } -- }); -- -- bool compact = config()->get(Config::GUI_CompactMode).toBool(); -- m_ui->actionCompactMode->setChecked(compact); -- connect(m_ui->actionCompactMode, &QAction::toggled, this, [this, compact](bool checked) { -- config()->set(Config::GUI_CompactMode, checked); -- if (checked != compact) { -- restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); -- } -- }); -- -- m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); -- connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { -- config()->set(Config::GUI_HideToolbar, !checked); -- applySettingsChanges(); -- }); -- -- m_ui->actionShowPreviewPanel->setChecked(!config()->get(Config::GUI_HidePreviewPanel).toBool()); -- connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) { -- config()->set(Config::GUI_HidePreviewPanel, !checked); -- }); -- -- connect(m_ui->actionAlwaysOnTop, &QAction::toggled, this, [this](bool checked) { -- if (checked) { -- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); -- } else { -- setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint); -- } -- show(); -- }); -- -- m_ui->actionHideUsernames->setChecked(config()->get(Config::GUI_HideUsernames).toBool()); -- connect(m_ui->actionHideUsernames, &QAction::toggled, this, [](bool checked) { -- config()->set(Config::GUI_HideUsernames, checked); -- }); -- -- m_ui->actionHidePasswords->setChecked(config()->get(Config::GUI_HidePasswords).toBool()); -- connect(m_ui->actionHidePasswords, &QAction::toggled, this, [](bool checked) { -- config()->set(Config::GUI_HidePasswords, checked); -- }); --} -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) -- --MainWindowEventFilter::MainWindowEventFilter(QObject* parent) -- : QObject(parent) --{ --} -- --/** -- * MainWindow event filter to initiate empty-area drag on the toolbar, menubar, and tabbar. -- */ --bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) --{ -- auto* mainWindow = getMainWindow(); -- if (!mainWindow || !mainWindow->m_ui) { -- return QObject::eventFilter(watched, event); -- } -- -- if (event->type() == QEvent::MouseButtonPress) { -- if (watched == mainWindow->m_ui->menubar) { -- auto* m = static_cast(event); -- if (!mainWindow->m_ui->menubar->actionAt(m->pos())) { -- mainWindow->windowHandle()->startSystemMove(); -- return false; -- } -- } else if (watched == mainWindow->m_ui->toolBar) { -- if (!mainWindow->m_ui->toolBar->isMovable() || mainWindow->m_ui->toolBar->cursor() != Qt::SizeAllCursor) { -- mainWindow->windowHandle()->startSystemMove(); -- return false; -- } -- } else if (watched == mainWindow->m_ui->tabWidget->tabBar()) { -- auto* m = static_cast(event); -- if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(m->pos()) == -1) { -- mainWindow->windowHandle()->startSystemMove(); -- return true; -- } -- } -- } -- -- return QObject::eventFilter(watched, event); --} -- --#endif -diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.h keepassxc-2.6.4-patched/src/gui/MainWindow.h ---- keepassxc-2.6.4-orig/src/gui/MainWindow.h 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MainWindow.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,208 +0,0 @@ --/* -- * Copyright (C) 2010 Felix Geyer -- * Copyright (C) 2017 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#ifndef KEEPASSX_MAINWINDOW_H --#define KEEPASSX_MAINWINDOW_H -- --#include --#include --#include -- --#include "core/ScreenLockListener.h" --#include "core/SignalMultiplexer.h" --#include "gui/Application.h" --#include "gui/DatabaseWidget.h" -- --namespace Ui --{ -- class MainWindow; --} -- --class InactivityTimer; --class SearchWidget; --class MainWindowEventFilter; -- --class MainWindow : public QMainWindow --{ -- Q_OBJECT -- --#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) -- Q_CLASSINFO("D-Bus Interface", "org.keepassxc.KeePassXC.MainWindow") --#endif -- --public: -- MainWindow(); -- ~MainWindow(); -- -- QList getOpenDatabases(); -- -- enum StackedWidgetIndex -- { -- DatabaseTabScreen = 0, -- SettingsScreen = 1, -- WelcomeScreen = 2, -- PasswordGeneratorScreen = 3 -- }; -- --public slots: -- void openDatabase(const QString& filePath, const QString& password = {}, const QString& keyfile = {}); -- void appExit(); -- void displayGlobalMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton = true, -- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); -- void displayTabMessage(const QString& text, -- MessageWidget::MessageType type, -- bool showClosebutton = true, -- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); -- void hideGlobalMessage(); -- void showYubiKeyPopup(); -- void hideYubiKeyPopup(); -- void hide(); -- void show(); -- void hideWindow(); -- void minimizeOrHide(); -- void toggleWindow(); -- void bringToFront(); -- void closeAllDatabases(); -- void lockAllDatabases(); -- void displayDesktopNotification(const QString& msg, QString title = "", int msTimeoutHint = 10000); -- void restartApp(const QString& message); -- --protected: -- void closeEvent(QCloseEvent* event) override; -- void changeEvent(QEvent* event) override; -- void keyPressEvent(QKeyEvent* event) override; -- bool focusNextPrevChild(bool next) override; -- --private slots: -- void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::Mode::None); -- void updateToolbarSeparatorVisibility(); -- void updateWindowTitle(); -- void showAboutDialog(); -- void performUpdateCheck(); -- void showUpdateCheckDialog(); -- void focusWindowChanged(QWindow* focusWindow); -- void hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested); -- void openDonateUrl(); -- void openBugReportUrl(); -- void openGettingStartedGuide(); -- void openUserGuide(); -- void openOnlineHelp(); -- void openKeyboardShortcuts(); -- void switchToDatabases(); -- void switchToSettings(bool enabled); -- void togglePasswordGenerator(bool enabled); -- void switchToNewDatabase(); -- void switchToOpenDatabase(); -- void switchToDatabaseFile(const QString& file); -- void switchToKeePass1Database(); -- void switchToOpVaultDatabase(); -- void switchToCsvImport(); -- void databaseStatusChanged(DatabaseWidget* dbWidget); -- void databaseTabChanged(int tabIndex); -- void openRecentDatabase(QAction* action); -- void clearLastDatabases(); -- void updateLastDatabasesMenu(); -- void updateCopyAttributesMenu(); -- void showEntryContextMenu(const QPoint& globalPos); -- void showGroupContextMenu(const QPoint& globalPos); -- void applySettingsChanges(); -- void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); -- void processTrayIconTrigger(); -- void lockDatabasesAfterInactivity(); -- void forgetTouchIDAfterInactivity(); -- void handleScreenLock(); -- void showErrorMessage(const QString& message); -- void selectNextDatabaseTab(); -- void selectPreviousDatabaseTab(); -- void selectDatabaseTab(int tabIndex, bool wrap = false); -- void obtainContextFocusLock(); -- void releaseContextFocusLock(); -- void agentEnabled(bool enabled); -- --private slots: -- void updateTrayIcon(); -- --private: -- static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); -- -- static const QString BaseWindowTitle; -- -- void saveWindowInformation(); -- bool saveLastDatabases(); -- bool isTrayIconEnabled() const; -- void customOpenUrl(QString url); -- -- static QStringList kdbxFilesFromUrls(const QList& urls); -- void dragEnterEvent(QDragEnterEvent* event) override; -- void dropEvent(QDropEvent* event) override; -- -- void initViewMenu(); -- -- const QScopedPointer m_ui; -- SignalMultiplexer m_actionMultiplexer; -- QPointer m_clearHistoryAction; -- QPointer m_searchWidgetAction; -- QPointer m_entryContextMenu; -- QPointer m_entryNewContextMenu; -- QPointer m_lastDatabasesActions; -- QPointer m_copyAdditionalAttributeActions; -- QPointer m_inactivityTimer; -- QPointer m_touchIDinactivityTimer; -- int m_countDefaultAttributes; -- QPointer m_trayIcon; -- QPointer m_screenLockListener; -- QPointer m_searchWidget; -- -- Q_DISABLE_COPY(MainWindow) -- -- bool m_appExitCalled = false; -- bool m_appExiting = false; -- bool m_restartRequested = false; -- bool m_contextMenuFocusLock = false; -- bool m_showToolbarSeparator = false; -- qint64 m_lastFocusOutTime = 0; -- qint64 m_lastShowTime = 0; -- QTimer m_updateCheckTimer; -- QTimer m_trayIconTriggerTimer; -- QSystemTrayIcon::ActivationReason m_trayIconTriggerReason; -- -- friend class MainWindowEventFilter; --}; -- --#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) --class MainWindowEventFilter : public QObject --{ -- Q_OBJECT -- --public: -- explicit MainWindowEventFilter(QObject* parent); -- bool eventFilter(QObject* watched, QEvent* event) override; --}; --#endif -- --/** -- * Return instance of MainWindow created on app load -- * non-gui instances will return nullptr -- * -- * @return MainWindow instance or nullptr -- */ --MainWindow* getMainWindow(); -- --#endif // KEEPASSX_MAINWINDOW_H -diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.ui keepassxc-2.6.4-patched/src/gui/MainWindow.ui ---- keepassxc-2.6.4-orig/src/gui/MainWindow.ui 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MainWindow.ui 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1049 +0,0 @@ -- -- -- MainWindow -- -- -- true -- -- -- -- 0 -- 0 -- 800 -- 600 -- -- -- -- -- 800 -- 0 -- -- -- -- KeePassXC -- -- -- -- true -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- -- -- -- QFrame::Plain -- -- -- Qt::Horizontal -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- 2 -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -1 -- -- -- true -- -- -- true -- -- -- -- -- -- -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- 0 -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 50 -- 20 -- -- -- -- -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::MinimumExpanding -- -- -- -- 50 -- 20 -- -- -- -- -- -- -- -- -- -- -- -- 60 -- -- -- 30 -- -- -- 60 -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- 800 -- 22 -- -- -- -- Qt::PreventContextMenu -- -- -- -- &Database -- -- -- -- &Recent Databases -- -- -- -- -- &Import -- -- -- -- -- -- -- -- &Export -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- &Help -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- &Entries -- -- -- -- false -- -- -- -- -- -- Copy Att&ribute -- -- -- -- -- -- -- -- -- false -- -- -- TOTP -- -- -- -- -- -- -- -- -- false -- -- -- Perform Auto-Type Sequence -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- &Groups -- -- -- -- -- -- -- -- -- -- -- -- -- -- &Tools -- -- -- -- -- -- -- -- View -- -- -- -- Theme -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Qt::PreventContextMenu -- -- -- false -- -- -- -- 26 -- 26 -- -- -- -- TopToolBarArea -- -- -- false -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- &Quit -- -- -- QAction::QuitRole -- -- -- -- -- &About -- -- -- QAction::AboutRole -- -- -- -- -- &Check for Updates -- -- -- QAction::ApplicationSpecificRole -- -- -- -- -- &Open Database… -- -- -- -- -- false -- -- -- &Save Database -- -- -- -- -- false -- -- -- &Close Database -- -- -- -- -- &New Database… -- -- -- Create a new database -- -- -- -- -- &Merge From Database… -- -- -- Merge from another KDBX database -- -- -- -- -- false -- -- -- &New Entry… -- -- -- Add a new entry -- -- -- -- -- false -- -- -- &Edit Entry… -- -- -- View or edit entry -- -- -- -- -- false -- -- -- &Delete Entry… -- -- -- -- -- false -- -- -- &New Group… -- -- -- Add a new group -- -- -- -- -- false -- -- -- &Edit Group… -- -- -- -- -- false -- -- -- &Delete Group… -- -- -- -- -- false -- -- -- Download All &Favicons… -- -- -- -- -- false -- -- -- Sort &A-Z -- -- -- -- -- false -- -- -- Sort &Z-A -- -- -- -- -- false -- -- -- Sa&ve Database As… -- -- -- -- -- false -- -- -- Database &Security… -- -- -- -- -- false -- -- -- Database &Reports... -- -- -- Statistics, health check, etc. -- -- -- QAction::NoRole -- -- -- -- -- false -- -- -- &Database Settings… -- -- -- Database settings -- -- -- QAction::NoRole -- -- -- -- -- false -- -- -- &Clone Entry… -- -- -- -- -- false -- -- -- Move u&p -- -- -- Move entry one step up -- -- -- -- -- false -- -- -- Move do&wn -- -- -- Move entry one step down -- -- -- -- -- false -- -- -- Copy &Username -- -- -- Copy username to clipboard -- -- -- -- -- false -- -- -- Copy &Password -- -- -- Copy password to clipboard -- -- -- -- -- true -- -- -- &Settings -- -- -- QAction::PreferencesRole -- -- -- -- -- true -- -- -- &Password Generator -- -- -- -- -- false -- -- -- Perform &Auto-Type -- -- -- -- -- false -- -- -- {USERNAME} -- -- -- -- -- false -- -- -- {USERNAME}{ENTER} -- -- -- -- -- false -- -- -- {PASSWORD} -- -- -- -- -- false -- -- -- {PASSWORD}{ENTER} -- -- -- -- -- Download &Favicon -- -- -- -- -- false -- -- -- Open &URL -- -- -- -- -- false -- -- -- &Lock Databases -- -- -- -- -- false -- -- -- &Title -- -- -- Copy title to clipboard -- -- -- -- -- false -- -- -- &URL -- -- -- Copy URL to clipboard -- -- -- -- -- false -- -- -- &Notes -- -- -- Copy notes to clipboard -- -- -- -- -- false -- -- -- &CSV File… -- -- -- -- -- false -- -- -- &HTML File… -- -- -- -- -- KeePass 1 Database… -- -- -- Import a KeePass 1 database -- -- -- -- -- 1Password Vault… -- -- -- Import a 1Password Vault -- -- -- -- -- CSV File… -- -- -- Import a CSV file -- -- -- -- -- Show TOTP -- -- -- -- -- Show QR Code -- -- -- -- -- Set up TOTP… -- -- -- -- -- Copy &TOTP -- -- -- -- -- E&mpty recycle bin -- -- -- false -- -- -- -- -- &Donate -- -- -- -- -- Report a &Bug -- -- -- -- -- &Getting Started -- -- -- Open Getting Started Guide -- -- -- -- -- &Online Help -- -- -- Go to online documentation -- -- -- -- -- &User Guide -- -- -- Open User Guide -- -- -- -- -- &Keyboard Shortcuts -- -- -- Ctrl+/ -- -- -- -- -- false -- -- -- Save Database Backup... -- -- -- -- -- Add key to SSH Agent -- -- -- -- -- Remove key from SSH Agent -- -- -- -- -- true -- -- -- Compact Mode -- -- -- -- -- true -- -- -- true -- -- -- Automatic -- -- -- -- -- true -- -- -- Light -- -- -- -- -- true -- -- -- Dark -- -- -- -- -- true -- -- -- Classic (Platform-native) -- -- -- -- -- true -- -- -- true -- -- -- Show Toolbar -- -- -- -- -- true -- -- -- true -- -- -- Show Preview Panel -- -- -- -- -- true -- -- -- Always on Top -- -- -- Ctrl+Shift+A -- -- -- -- -- true -- -- -- Hide Usernames -- -- -- Ctrl+Shift+B -- -- -- -- -- true -- -- -- true -- -- -- Hide Passwords -- -- -- Ctrl+Shift+C -- -- -- -- -- -- PasswordGeneratorWidget -- QWidget --
gui/PasswordGeneratorWidget.h
-- 1 --
-- -- MessageWidget -- QWidget --
gui/MessageWidget.h
-- 1 --
-- -- DatabaseTabWidget -- QTabWidget --
gui/DatabaseTabWidget.h
-- 1 --
-- -- ApplicationSettingsWidget -- QWidget --
gui/ApplicationSettingsWidget.h
-- 1 --
-- -- WelcomeWidget -- QWidget --
gui/WelcomeWidget.h
-- 1 --
--
-- -- --
-diff -urNr keepassxc-2.6.4-orig/src/gui/MessageBox.cpp keepassxc-2.6.4-patched/src/gui/MessageBox.cpp ---- keepassxc-2.6.4-orig/src/gui/MessageBox.cpp 2021-01-31 22:37:23.000000000 +0100 -+++ keepassxc-2.6.4-patched/src/gui/MessageBox.cpp 1970-01-01 01:00:00.000000000 +0100 -@@ -1,197 +0,0 @@ --/* -- * Copyright (C) 2013 Felix Geyer -- * Copyright (C) 2018 KeePassXC Team -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 2 or (at your option) -- * version 3 of the License. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- */ -- --#include "MessageBox.h" -- --#include --#include -- --QWindow* MessageBox::m_overrideParent(nullptr); -- --MessageBox::Button MessageBox::m_nextAnswer(MessageBox::NoButton); -- --QHash MessageBox::m_addedButtonLookup = -- QHash(); -- --QMap> MessageBox::m_buttonDefs = -- QMap>(); -- --void MessageBox::initializeButtonDefs() --{ -- m_buttonDefs = QMap>{ -- // Reimplementation of Qt StandardButtons -- {Ok, {stdButtonText(QMessageBox::Ok), QMessageBox::ButtonRole::AcceptRole}}, -- {Open, {stdButtonText(QMessageBox::Open), QMessageBox::ButtonRole::AcceptRole}}, -- {Save, {stdButtonText(QMessageBox::Save), QMessageBox::ButtonRole::AcceptRole}}, -- {Cancel, {stdButtonText(QMessageBox::Cancel), QMessageBox::ButtonRole::RejectRole}}, -- {Close, {stdButtonText(QMessageBox::Close), QMessageBox::ButtonRole::RejectRole}}, -- {Discard, {stdButtonText(QMessageBox::Discard), QMessageBox::ButtonRole::DestructiveRole}}, -- {Apply, {stdButtonText(QMessageBox::Apply), QMessageBox::ButtonRole::ApplyRole}}, -- {Reset, {stdButtonText(QMessageBox::Reset), QMessageBox::ButtonRole::ResetRole}}, -- {RestoreDefaults, {stdButtonText(QMessageBox::RestoreDefaults), QMessageBox::ButtonRole::ResetRole}}, -- {Help, {stdButtonText(QMessageBox::Help), QMessageBox::ButtonRole::HelpRole}}, -- {SaveAll, {stdButtonText(QMessageBox::SaveAll), QMessageBox::ButtonRole::AcceptRole}}, -- {Yes, {stdButtonText(QMessageBox::Yes), QMessageBox::ButtonRole::YesRole}}, -- {YesToAll, {stdButtonText(QMessageBox::YesToAll), QMessageBox::ButtonRole::YesRole}}, -- {No, {stdButtonText(QMessageBox::No), QMessageBox::ButtonRole::NoRole}}, -- {NoToAll, {stdButtonText(QMessageBox::NoToAll), QMessageBox::ButtonRole::NoRole}}, -- {Abort, {stdButtonText(QMessageBox::Abort), QMessageBox::ButtonRole::RejectRole}}, -- {Retry, {stdButtonText(QMessageBox::Retry), QMessageBox::ButtonRole::AcceptRole}}, -- {Ignore, {stdButtonText(QMessageBox::Ignore), QMessageBox::ButtonRole::AcceptRole}}, -- -- // KeePassXC Buttons -- {Overwrite, {QMessageBox::tr("Overwrite"), QMessageBox::ButtonRole::AcceptRole}}, -- {Delete, {QMessageBox::tr("Delete"), QMessageBox::ButtonRole::AcceptRole}}, -- {Move, {QMessageBox::tr("Move"), QMessageBox::ButtonRole::AcceptRole}}, -- {Empty, {QMessageBox::tr("Empty"), QMessageBox::ButtonRole::AcceptRole}}, -- {Remove, {QMessageBox::tr("Remove"), QMessageBox::ButtonRole::AcceptRole}}, -- {Skip, {QMessageBox::tr("Skip"), QMessageBox::ButtonRole::AcceptRole}}, -- {Disable, {QMessageBox::tr("Disable"), QMessageBox::ButtonRole::AcceptRole}}, -- {Merge, {QMessageBox::tr("Merge"), QMessageBox::ButtonRole::AcceptRole}}, -- {Continue, {QMessageBox::tr("Continue"), QMessageBox::ButtonRole::AcceptRole}}, -- }; --} -- --QString MessageBox::stdButtonText(QMessageBox::StandardButton button) --{ -- QMessageBox buttonHost; -- return buttonHost.addButton(button)->text(); --} -- --MessageBox::Button MessageBox::messageBox(QWidget* parent, -- QMessageBox::Icon icon, -- const QString& title, -- const QString& text, -- MessageBox::Buttons buttons, -- MessageBox::Button defaultButton, -- MessageBox::Action action, -- QCheckBox* checkbox) --{ -- if (m_nextAnswer == MessageBox::NoButton) { -- QMessageBox msgBox(parent); -- msgBox.setIcon(icon); -- msgBox.setWindowTitle(title); -- msgBox.setText(text); -- -- if (m_overrideParent) { -- // Force the creation of the QWindow, without this windowHandle() will return nullptr -- msgBox.winId(); -- auto msgBoxWindow = msgBox.windowHandle(); -- Q_ASSERT(msgBoxWindow); -- msgBoxWindow->setTransientParent(m_overrideParent); -- } -- -- for (uint64_t b = First; b <= Last; b <<= 1) { -- if (b & buttons) { -- QString buttonText = m_buttonDefs[static_cast